[FFmpeg-devel] [PATCH] API changes in ffmpeg.c

Michael Niedermayer michaelni
Sat Apr 11 00:43:35 CEST 2009


On Fri, Apr 10, 2009 at 11:11:10PM +0200, Thilo Borgmann wrote:
> Michael Niedermayer schrieb:
>> On Fri, Apr 10, 2009 at 09:11:10PM +0200, Thilo Borgmann wrote:
>>   
>>> Michael Niedermayer schrieb:
>>>     
>>>> On Fri, Apr 10, 2009 at 08:29:25PM +0200, Thilo Borgmann wrote:
>>>>         
>>>>> Michael Niedermayer schrieb:
>>>>>             
>>>>>>                   
>>>>>>>>>            &picture, &got_picture, ptr, len);
>>>>>>>>> +                    ret = avcodec_decode_video2(ist->st->codec,
>>>>>>>>> +                                               &picture, 
>>>>>>>>> &got_picture, pkt);
>>>>>>>>>                                         
>>>>>>>> Crash here.
>>>>>>>>                                 
>>>>>>> This is revision 1 which fixes the crash during make test.
>>>>>>>                         
>>>>>> probably ok if tested
>>>>>>
>>>>>>                   
>>>>> Although applied, I tested it again using ffmpeg for transcoding the 
>>>>> corepng.avi into yuv format.
>>>>>
>>>>> This revealed a bug in my ffmpeg.c patch, but this bug breaks CorePNG 
>>>>> decoding only, since this is the only one using more information of the 
>>>>> provided packet than .data and .size attributes.
>>>>>
>>>>> FFplay is not broken as it uses no local AVPackets but the "original" 
>>>>> one.
>>>>>
>>>>> I attached a little patch for the time being, but I would propose to 
>>>>> add a "av_copy_packet" function into libavcodec/avpacket.c as future 
>>>>> codecs will also use more attributes of the avpacket and even others 
>>>>> than just the .flags attribute.
>>>>>             
>>>> patch ok
>>>>         
>>> While I was thinking about a possible copy function, I realized that a 
>>> shallow copy would be enough here, so a simple avpkt = *pkt will do. A 
>>> function for a deep copy is not yet needed so I'm not going to add one.
>>>
>>> Reinspecting ffmpeg.c, revision 1 does solve it best in my eyes, so the 
>>> last patch here has become obsolete, if Michael agrees.
>>>
>>> Of course, this new patch has been tested using "make test" and the 
>>> transcoding into yuv.
>>>
>>> TB
>>>     
>>
>>   
>>> diff --git a/ffmpeg.c b/ffmpeg.c
>>> index 68f84fe..fb841c4 100644
>>> --- a/ffmpeg.c
>>> +++ b/ffmpeg.c
>>> @@ -1185,7 +1185,6 @@ static int output_packet(AVInputStream *ist, int 
>>> ist_index,
>>>      int got_subtitle;
>>>      AVPacket avpkt;
>>>  -    av_init_packet(&avpkt);
>>>       if(ist->next_pts == AV_NOPTS_VALUE)
>>>          ist->next_pts= ist->pts;
>>> @@ -1195,13 +1194,13 @@ static int output_packet(AVInputStream *ist, int 
>>> ist_index,
>>>          avpkt.data = NULL;
>>>          avpkt.size = 0;
>>>          goto handle_eof;
>>> +    } else {
>>> +        avpkt = *pkt;
>>>      }
>>>     
>>
>> i suspect that this can end with partially initialized avpkt
>>
>>   
> In any case the av_init_packet() call is redundant or unneeded.
> Ok for a "clean" code I can put it back in, may be time will come when 
> ffmpeg.c makes use of more than .data and .size for the pkt==NULL case.
> Although, I would like to put it back into the case where avpkt = *pkt is 
> not called, not to use redundant assignments most of the time during 
> decoding.
> I think we all are happy with that?

ok

[...]
-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

I know you won't believe me, but the highest form of Human Excellence is
to question oneself and others. -- Socrates
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: Digital signature
URL: <http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/attachments/20090411/e16bd3b5/attachment.pgp>



More information about the ffmpeg-devel mailing list