> On Jun 6, 2016, at 9:00 AM, Richard Kern <ker...@gmail.com> wrote:
> 
> Ping. This fixes #5595. 
> 
>> On Jun 1, 2016, at 10:06 PM, Rick Kern <ker...@gmail.com> wrote:
>> 
>> Fixes VTDecompressionSessionCreate() error.
>> 
>> Signed-off-by: Rick Kern <ker...@gmail.com>
>> ---
>> libavcodec/videotoolbox.c | 59 
>> ++++++++++++++++++++++++++++++++++++-----------
>> 1 file changed, 45 insertions(+), 14 deletions(-)
>> 
>> diff --git a/libavcodec/videotoolbox.c b/libavcodec/videotoolbox.c
>> index 2f4d531..cadfb23 100644
>> --- a/libavcodec/videotoolbox.c
>> +++ b/libavcodec/videotoolbox.c
>> @@ -487,23 +487,53 @@ static CFDictionaryRef 
>> videotoolbox_buffer_attributes_create(int width,
>>    return buffer_attributes;
>> }
>> 
>> -static CMVideoFormatDescriptionRef 
>> videotoolbox_format_desc_create(CMVideoCodecType codec_type,
>> +static CMVideoFormatDescriptionRef 
>> videotoolbox_format_desc_create(AVCodecContext *avctx,
>> +                                                                   
>> CMVideoCodecType codec_type,
>>                                                                   
>> CFDictionaryRef decoder_spec,
>>                                                                   int width,
>>                                                                   int height)
>> {
>> -    CMFormatDescriptionRef cm_fmt_desc;
>> -    OSStatus status;
>> -
>> -    status = CMVideoFormatDescriptionCreate(kCFAllocatorDefault,
>> -                                            codec_type,
>> -                                            width,
>> -                                            height,
>> -                                            decoder_spec, // Dictionary of 
>> extension
>> -                                            &cm_fmt_desc);
>> -
>> -    if (status)
>> -        return NULL;
>> +    CMFormatDescriptionRef cm_fmt_desc = NULL;
>> +    int status;
>> +    H264Context *h = codec_type == kCMVideoCodecType_H264 ? 
>> avctx->priv_data : NULL;
>> +
>> +    if (h && h->sps.data_size && h->pps.data_size) {
>> +        int ps_count = 2;
>> +        const uint8_t **ps_data = av_malloc(sizeof(uint8_t*) * ps_count);
>> +        size_t *ps_sizes = av_malloc(sizeof(size_t)  * ps_count);
>> +
>> +        ps_data[0]  = h->sps.data;
>> +        ps_sizes[0] = h->sps.data_size;
>> +
>> +        ps_data[1]  = h->pps.data;
>> +        ps_sizes[1] = h->pps.data_size;
>> +
>> +        status = CMVideoFormatDescriptionCreateFromH264ParameterSets(NULL,
>> +                                                                     
>> ps_count,
>> +                                                                     
>> ps_data,
>> +                                                                     
>> ps_sizes,
>> +                                                                     4,
>> +                                                                     
>> &cm_fmt_desc);
>> +        av_freep(&ps_sizes);
>> +        av_freep(&ps_data);
>> +
>> +        if (status) {
>> +            av_log(avctx, AV_LOG_ERROR, "Error creating H.264 format 
>> description: %d\n", status);
>> +            return NULL;
>> +        }
>> +    } else {
>> +        status = CMVideoFormatDescriptionCreate(kCFAllocatorDefault,
>> +                                                codec_type,
>> +                                                width,
>> +                                                height,
>> +                                                decoder_spec, // Dictionary 
>> of extension
>> +                                                &cm_fmt_desc);
>> +
>> +        if (status) {
>> +            av_log(avctx, AV_LOG_ERROR, "Error creating format description: 
>> %d\n", status);
>> +            return NULL;
>> +        }
>> +    }
>> 
>>    return cm_fmt_desc;
>> }
>> @@ -543,7 +573,8 @@ static int videotoolbox_default_init(AVCodecContext 
>> *avctx)
>> 
>>    decoder_spec = 
>> videotoolbox_decoder_config_create(videotoolbox->cm_codec_type, avctx);
>> 
>> -    videotoolbox->cm_fmt_desc = 
>> videotoolbox_format_desc_create(videotoolbox->cm_codec_type,
>> +    videotoolbox->cm_fmt_desc = videotoolbox_format_desc_create(avctx,
>> +                                                                
>> videotoolbox->cm_codec_type,
>>                                                                decoder_spec,
>>                                                                avctx->width,
>>                                                                
>> avctx->height);
>> -- 
>> 2.7.4
>> 

No one’s reviewed, but pon pon confirmed the fix. What’s the policy? Can I 
push, or should I contact the maintainer directly?


_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel

Reply via email to