Hello,

First of all, sorry in advance if i'm not addressing the right mailing
list.

I'm currently using the CVPixelBufferRef API and more precisely
the CVPixelBufferCreateWithPlanarBytes function so I can use my own video
buffers.

This function let the user provide a callback so the user can provide
a function to free its buffer on release. However I can't get my own
callback to be executed which leads to severe memory leaks in my
application.

You can find attached to this email, an example to reproduce the issue.
Note that the first example with CVPixelBufferCreateWithBytes works but
the CVPixelBufferCreateWithPlanarBytes one don't.
Maybe i'm missing something ?

I'm facing this issue on OSX 10.9.

To compile the example:
gcc -framework CoreVideo test_cvbuffer.m -o test_cvbuffer

Thanks in advance for your help.

Best regards,
Matthieu Bouron
#import <CoreVideo/CoreVideo.h>

void release_cb (void *releaseRefCon, const void *dataPtr)
{
    printf ("release cb\n");
}

void release_planar_cb (void * releaseRefConf, const void *dataPtr,
    size_t dataSize, size_t numberOfPlanes, const void *planeAddresses[])
{
    printf ("release planar cb\n");
}

int main(int argc, const char * argv[])
{
    int ret;
    size_t width = 1280;
    size_t height = 720;
    size_t depth = 4;

    /* Fake packed buffer: 32BGRA */
    uint8_t *p = malloc (width * height * depth);
    
    /* Fake planar contiguous buffer: 420v */
    size_t p2_size = width * height + ((width * height) / 4);
    uint8_t *p2 = malloc (p2_size);
    
    size_t widths[2] = { 1280, 1280 / 2 };
    size_t heights[2] = { 720, 720 / 2 };
    size_t rows[2] = { 1280 ,  1280 };
    
    CVPixelBufferRef buffer;

    ret = CVPixelBufferCreateWithBytes (NULL, width, height, 
kCVPixelFormatType_32BGRA,
                                        p, width * 4, release_cb, NULL, NULL, 
&buffer);
    printf ("ret = %d\n", ret);

    CVPixelBufferRelease (buffer);
    buffer = NULL;
    
    ret = CVPixelBufferCreateWithPlanarBytes(NULL, width, 
height,kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange, NULL, p2_size,
        2, (void **)&p2, widths, heights, rows, release_planar_cb, NULL, NULL, 
&buffer);
    
    printf ("ret = %d\n", ret);
    
    CVPixelBufferRelease (buffer);
    
    free(p);
    free(p2);
    
    return 0;
}

_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to