[FFmpeg-devel] [RFC][PATCH] return packets for known codecs earlier when codec probing is done

Baptiste Coudurier baptiste.coudurier
Thu May 28 03:12:37 CEST 2009


On 5/27/2009 5:48 PM, Michael Niedermayer wrote:
> On Wed, May 27, 2009 at 05:47:22PM -0700, Baptiste Coudurier wrote:
>> On 5/27/2009 5:10 PM, Michael Niedermayer wrote:
>>> On Wed, May 27, 2009 at 04:40:49PM -0700, Baptiste Coudurier wrote:
>>>> On 5/27/2009 3:00 PM, Michael Niedermayer wrote:
>>>>> On Wed, May 27, 2009 at 12:54:27AM -0700, Baptiste Coudurier wrote:
>>>>>> Hi Michael,
>>>>>>
>>>>>> Michael Niedermayer wrote:
>>>>>>> [...]
>>>>>>>
>>>>>>>> @@ -537,10 +537,18 @@ int av_read_packet(AVFormatContext *s, AVPacket *p
>>>>>>>>  
>>>>>>>>          av_init_packet(pkt);
>>>>>>>>          ret= s->iformat->read_packet(s, pkt);
>>>>>>>> -        if (ret < 0)
>>>>>>>> -            return ret;
>>>>>>>> +        if (ret < 0) {
>>>>>>>> +            if (!pktl)
>>>>>>>> +                return ret;
>>>>>>>> +            for (i = 0; i < s->nb_streams; i++)
>>>>>>>> +                if (s->streams[i]->codec->codec_id == CODEC_ID_PROBE)
>>>>>>>> +                    s->streams[i]->codec->codec_id = CODEC_ID_NONE;
>>>>>>>> +            continue;
>>>>>>>> +        }
>>>>>>> i dont like this
>>>>>>>
>>>>>> Well, we have a problem if probe_packets is not 0 when eof is reached.
>>>>>> Do you see another way to avoid this ?
>>>>> is this special case really relevant?
>>>>> it just looses data on streams when all of the following is true
>>>>> * stream is set to CODEC_ID_PROBE
>>>>> * stream contains less than 100 packets in the whole file
>>>>> * probing fails even with all packets in the whole file
>>>> I think it is:
>>>> code will call av_read_packet until st->probe_packets is 0, which will
>>>> provoke an infinite loop.
>>> hmm, i must be missing something, as i thought the packets would just never
>>> be output and the player would end at EOF in whichever way it did before the
>>> patch
>> Before the patch, ie currently, if EOF is reach, packets are not outputed.
>> This is a bug IMHO.
> 
> i agree its a bug, the patch without the controversal part would reduce it
> to the case where less than 100 packets are in a whole file && probing
> fails.
> Your suggested fix, fixes it but introduces a new bug, namely that seeking
> to EOF causes probing to fail for all streams permanently, even if the
> user seeked back afterwards. 

Well, probing should be executed by av_find_stream_info basically, and
seeking should not occur during this process.

But I don't really get what you mean by seeking to EOF and probing.
Why would an user seek to EOF ?
User can seek to part where not enough packets are available to probe
the code, but this will happen after av_find_stream_infos and stream
will already be probed.

> That is what concerns me besides that i had a bad feeling about that part
> of the patch. I wish i knew a solution, but i dont ATM

This needs to be fixed nonetheless. If you don't think about a better
solution, I'd like to apply the patch that works in most common
scenario. I have bugs to fix that depends on fixing codec probing :)

-- 
Baptiste COUDURIER                              GnuPG Key Id: 0x5C1ABAAA
Key fingerprint                 8D77134D20CC9220201FC5DB0AC9325C5C1ABAAA
FFmpeg maintainer                                  http://www.ffmpeg.org



More information about the ffmpeg-devel mailing list