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

Michael Niedermayer michaelni
Fri Apr 10 19:13:09 CEST 2009


On Fri, Apr 10, 2009 at 02:45:48PM +0200, Thilo Borgmann wrote:
> A new thread for the API changes in ffmpeg.c, cut off from the original 
> thread:
>
>
> Stefano Sabatini schrieb:
>> On date Wednesday 2009-04-08 16:09:01 +0200, Thilo Borgmann encoded:
>> [...]
>>   
>>> diff --git a/ffmpeg.c b/ffmpeg.c
>>> index cb15120..4944811 100644
>>> --- a/ffmpeg.c
>>> +++ b/ffmpeg.c
>>> @@ -1174,8 +1174,7 @@ static int output_packet(AVInputStream *ist, int 
>>> ist_index,
>>>  {
>>>      AVFormatContext *os;
>>>      AVOutputStream *ost;
>>> -    uint8_t *ptr;
>>> -    int len, ret, i;
>>> +    int ret, i;
>>>      uint8_t *data_buf;
>>>      int data_size, got_picture;
>>>      AVFrame picture;
>>> @@ -1184,29 +1183,32 @@ static int output_packet(AVInputStream *ist, int 
>>> ist_index,
>>>      static short *samples= NULL;
>>>      AVSubtitle subtitle, *subtitle_to_free;
>>>      int got_subtitle;
>>> +    AVPacket avpkt;
>>> +
>>> +    av_init_packet(&avpkt);
>>>       if(ist->next_pts == AV_NOPTS_VALUE)
>>>          ist->next_pts= ist->pts;
>>>       if (pkt == NULL) {
>>>          /* EOF handling */
>>> -        ptr = NULL;
>>> -        len = 0;
>>> +        avpkt.data = NULL;
>>> +        avpkt.size = 0;
>>>          goto handle_eof;
>>>      }
>>>       if(pkt->dts != AV_NOPTS_VALUE)
>>>          ist->next_pts = ist->pts = av_rescale_q(pkt->dts, 
>>> ist->st->time_base, AV_TIME_BASE_Q);
>>>  -    len = pkt->size;
>>> -    ptr = pkt->data;
>>> +    avpkt.size = pkt->size;
>>> +    avpkt.data = pkt->data;
>>>       //while we have more to decode or while the decoder did output 
>>> something on EOF
>>> -    while (len > 0 || (!pkt && ist->next_pts != ist->pts)) {
>>> +    while (avpkt.size > 0 || (!pkt && ist->next_pts != ist->pts)) {
>>>      handle_eof:
>>>          ist->pts= ist->next_pts;
>>>  -        if(len && len != pkt->size && verbose>0)
>>> +        if(avpkt.size && avpkt.size != pkt->size && verbose>0)
>>>              fprintf(stderr, "Multiple frames in a packet from stream 
>>> %d\n", pkt->stream_index);
>>>           /* decode the packet if needed */
>>> @@ -1224,12 +1226,12 @@ static int output_packet(AVInputStream *ist, int 
>>> ist_index,
>>>                  data_size= samples_size;
>>>                      /* XXX: could avoid copy if PCM 16 bits with same
>>>                         endianness as CPU */
>>> -                ret = avcodec_decode_audio2(ist->st->codec, samples, 
>>> &data_size,
>>> -                                           ptr, len);
>>> +                ret = avcodec_decode_audio3(ist->st->codec, samples, 
>>> &data_size,
>>> +                                           pkt);
>>>                  if (ret < 0)
>>>                      goto fail_decode;
>>> -                ptr += ret;
>>> -                len -= ret;
>>> +                avpkt.data += ret;
>>> +                avpkt.size -= ret;
>>>                  /* Some bug in mpeg audio decoder gives */
>>>                  /* data_size < 0, it seems they are overflows */
>>>                  if (data_size <= 0) {
>>> @@ -1245,8 +1247,8 @@ static int output_packet(AVInputStream *ist, int 
>>> ist_index,
>>>                      /* XXX: allocate picture correctly */
>>>                      avcodec_get_frame_defaults(&picture);
>>>  -                    ret = avcodec_decode_video(ist->st->codec,
>>> -                                               &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

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

The misfortune of the wise is better than the prosperity of the fool.
-- Epicurus
-------------- 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/20090410/464dc336/attachment.pgp>



More information about the ffmpeg-devel mailing list