[FFmpeg-devel] [PATCH] Additional probing based on sequence header and group startcodes

Baptiste Coudurier baptiste.coudurier
Sun Jun 14 12:16:03 CEST 2009


Baptiste Coudurier wrote:
> Jai Menon wrote:
>> On Sat, Jun 13, 2009 at 10:21 PM, Baptiste
>> Coudurier<baptiste.coudurier at gmail.com> wrote:
>>> Jai Menon wrote:
>>>> On Sat, Jun 13, 2009 at 9:29 PM, Baptiste
>>>> Coudurier<baptiste.coudurier at gmail.com> wrote:
>>>>> Michael Niedermayer wrote:
>>>>>> On Sat, Jun 13, 2009 at 08:27:26PM +0000, Jai Menon wrote:
>>>>>>> Hi,
>>>>>>>
>>>>>>> I'm not too familiar with the probing mechanism so any help is
>>>>>>> appreciated. This might not be the right way to do it. Also, this
>>>>>>> fixes issue 1185 and possibly others.
>>>>>> [...]
>>>>>>> diff --git a/libavformat/utils.c b/libavformat/utils.c
>>>>>>> index dc18885..0096343 100644
>>>>>>> --- a/libavformat/utils.c
>>>>>>> +++ b/libavformat/utils.c
>>>>>>> @@ -339,6 +339,9 @@ static int set_codec_from_probe_data(AVStream *st, AVProbeData *pd, int score)
>>>>>>>          } else if (!strcmp(fmt->name, "dts")) {
>>>>>>>              st->codec->codec_id = CODEC_ID_DTS;
>>>>>>>              st->codec->codec_type = CODEC_TYPE_AUDIO;
>>>>>>> +        } else if (!strcmp(fmt->name, "mpeg")) {
>>>>>>> +            st->codec->codec_id = CODEC_ID_MPEG2VIDEO;
>>>>>>> +            st->codec->codec_type = CODEC_TYPE_VIDEO;
>>>>>>>          }
>>>>>>>      }
>>>>>>>      return !!fmt;
>>>>>> this part is ok and can be commited seperately
>>>>> Humm, what if stream contain H264 ? "mpeg" is mpeg ps demuxer.
>>>> Do you have any samples where avc isn't muxed with ES type 0x1b set in
>>>> the stream map? I had thought about this too and hoped if nothing else
>>>> to get a sample. And what should be done in this case? should the
>>>> probing be done in the demuxer?
>>>>
>>> No I don't have a sample. Thing is if "mpeg" matches this does not say
>>> that stream contains mpeg2video. This case is handled by mpegvideo
>>> probe. If this stream is not matched for a reason, the reason should be
>>> in mpegvideo probe.
>> Thanks for the explanation, I added the modifications to the mpegvideo
>> probe code in raw.c.
>> Patch attached.
>>
>>
>>
>> ------------------------------------------------------------------------
>>
>> From ab037622f26b512c79c4f0f1edd7c2974ea6368e Mon Sep 17 00:00:00 2001
>> From: Jai Menon <jai at retroficial.org>
>> Date: Sun, 14 Jun 2009 13:27:29 +0000
>> Subject: [PATCH 2/2] add additional probing based on group startcode.
>>
>> ---
>>  libavformat/raw.c |    6 +++++-
>>  1 files changed, 5 insertions(+), 1 deletions(-)
>>
>> diff --git a/libavformat/raw.c b/libavformat/raw.c
>> index f086581..265d9cb 100644
>> --- a/libavformat/raw.c
>> +++ b/libavformat/raw.c
>> @@ -309,6 +309,7 @@ static int mpegvideo_probe(AVProbeData *p)
>>  {
>>      uint32_t code= -1;
>>      int pic=0, seq=0, slice=0, pspack=0, pes=0;
>> +    int gop = 0;
>>      int i;
>>  
>>      for(i=0; i<p->buf_size; i++){
>> @@ -319,13 +320,16 @@ static int mpegvideo_probe(AVProbeData *p)
>>              case PICTURE_START_CODE:   pic++; break;
>>              case   SLICE_START_CODE: slice++; break;
>>              case    PACK_START_CODE: pspack++; break;
>> +            case    GOP_START_CODE:  gop++;     break;
>>              }
>>              if     ((code & 0x1f0) == VIDEO_ID)   pes++;
>>              else if((code & 0x1e0) == AUDIO_ID)   pes++;
>>          }
>>      }
>>      if(seq && seq*9<=pic*10 && pic*9<=slice*10 && !pspack && !pes)
>> -        return AVPROBE_SCORE_MAX/2+1; // +1 for .mpg
>> +        return AVPROBE_SCORE_MAX/2+2; // +1 for .mpg
>> +    if(pic*9<=slice*10 && pes && !gop)
>> +        return AVPROBE_SCORE_MAX/2+1;
>>      return 0;
> 
> Humm I don't get it, in mpeg2video, gop start code has good chance to be
> present. Why are you checking for !gop and pes. If a pes is present it's
> probably PS or TS.
> 
> What are you trying to achieve ?
> 

Ok, after analyzing the file, it need the +2, since the elementary
stream is incorrectly detected as dts. So either fix dts to not detect
it or raise score.

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



More information about the ffmpeg-devel mailing list