Thanks for the reply Michel. I've actually tried the following pixel formats on 
the QT Capture side: 

kCVPixelFormatType_420YpCbCr8Planar
Planar Component Y'CbCr 8-bit 4:2:0. baseAddr points to a big-endian 
CVPlanarPixelBufferInfo_YCbCrPlanar struct.
kCVPixelFormatType_420YpCbCr8PlanarFullRange
Planar Component Y'CbCr 8-bit 4:2:0, full range. baseAddr points to a 
big-endian CVPlanarPixelBufferInfo_YCbCrPlanar struct.
kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange
Bi-Planar Component Y'CbCr 8-bit 4:2:0, video-range (luma=[16,235] 
chroma=[16,240]). baseAddr points to a big-endian 
CVPlanarPixelBufferInfo_YCbCrBiPlanar struct.
kCVPixelFormatType_420YpCbCr8BiPlanarFullRange
Bi-Planar Component Y'CbCr 8-bit 4:2:0, full-range (luma=[0,255] 
chroma=[1,255]). baseAddr points to a big-endian 
CVPlanarPixelBufferInfo_YCbCrBiPlanar struct.

The first two cause the avcodec_encode_video2 line to crash. The last two 
transmit video properly but are distorted. I have in my mind that the first one 
is probably the right pixel format (also the one I need to use), but there's 
some state of the resulting frame / packet that isn't being set properly I'm 
guessing, and it is causing to dereference a null pointer somewhere inside 
libavcodec. Does anyone have any idea what might be causing this? Is there some 
value I need to set before encoding the video? 

Thanks,

Brad

On Feb 4, 2013, at 6:05 PM, Michel Marchand <[email protected]> wrote:

> I'm no expert in ffmpeg but one in broadcast video and normally YCrCb 422 is 
> not full range that is Y ranges from16 to 235 and Cr/Cb are signed and range 
> from 16 to 240 (128 being 0). The Full range term may use the full 0-255 
> range and that could cause problems but not sure...
> 
> On Mon, Feb 4, 2013 at 7:31 PM, Brad O'Hearne <[email protected]> 
> wrote:
> Carl, 
> 
> Thanks for the reply. I've tried both PIX_FMT_NV12 and PIX_FMT_NV21 (in fact, 
> those were the ones I originally thought would work based on description). 
> However, when I use either of those formats in place of  PIX_FMT_YUV420P in 
> the following line of code: 
> 
> int returnVal = avpicture_fill((AVPicture*)avFrame, frameBufferBaseAddress, 
> PIX_FMT_YUV420P, width, height);
> 
> then while it executes the avpicture_fill line successfully, the subsequent 
> line of code 
> 
> returnVal = avcodec_encode_video2(_videoStream->codec, &avPacket, avFrame, 
> &gotPacket);
> 
> crashes the whole app with an EXC_BAD_ACCESS error --  and there's no message 
> of any kind written to the console. I have no idea what is causing the crash. 
> Here's the complete block of the code between those two lines: 
> 
> ...   
>  int returnVal = avpicture_fill((AVPicture*)avFrame, frameBufferBaseAddress, 
> PIX_FMT_NV21, width, height);
>     
>     if (returnVal < 0)
>     {
>         if (error)
>         {
>               NSLOG(@"Frame fill failed.");
>         }
>         
>         return NO;
>     }
> 
>     AVPacket avPacket;
>     av_init_packet(&avPacket);
>     avPacket.data = NULL;
>     avPacket.size = 0;
>     int gotPacket;
>     
>     returnVal = avcodec_encode_video2(_videoStream->codec, &avPacket, 
> avFrame, &gotPacket);
> ...
> 
> That's been pretty standard for most of the other pixel formats I've tried. 
> There have been one or two that didn't crash the app, but had very wacky 
> distortions (like half the image being neon green), but most of them just 
> crash the app outright. 
> 
> Ideas? 
> 
> Brad
> 
> On Feb 4, 2013, at 4:55 PM, Carl Eugen Hoyos <[email protected]> wrote:
> 
>> Brad O'Hearne <brado@...> writes:
>> 
>>> "Bi-Planar Component Y'CbCr 8-bit 4:2:0, full-range 
>>> (luma=[0,255] chroma=[1,255]). baseAddr points to a 
>>> big-endian CVPlanarPixelBufferInfo_YCbCrBiPlanar struct."
>>> 
>>> My code (heavily abridged for brevity) hits these high points: 
>>> 
>>> NOTE: frameBufferAddress is a CVImageBufferRef received 
>>> from the QT capture callback: 
>>> 
>>>     int returnVal = avpicture_fill((AVPicture*)avFrame, 
>>> frameBufferBaseAddress, PIX_FMT_YUV420P, width, height);
>> 
>> Could "biplanar" point to AV_PIX_FMT_NV12?
>> (Or something else that is not AV_PIX_FMT_YUV420P)
>> 
>> Carl Eugen
>> 
>> _______________________________________________
>> Libav-user mailing list
>> [email protected]
>> http://ffmpeg.org/mailman/listinfo/libav-user
> 
> 
> _______________________________________________
> Libav-user mailing list
> [email protected]
> http://ffmpeg.org/mailman/listinfo/libav-user
> 
> 
> _______________________________________________
> Libav-user mailing list
> [email protected]
> http://ffmpeg.org/mailman/listinfo/libav-user

_______________________________________________
Libav-user mailing list
[email protected]
http://ffmpeg.org/mailman/listinfo/libav-user

Reply via email to