[FFmpeg-devel] [PATCH] Move av_open_input_file probe loop to its own method

Michael Niedermayer michaelni
Thu Mar 18 00:58:45 CET 2010


On Tue, Mar 16, 2010 at 10:41:09PM -0400, Micah F. Galizia wrote:
> On 10-03-14 06:41 PM, Stefano Sabatini wrote:
>> On date Friday 2010-03-12 17:53:49 -0500, Micah F. Galizia encoded:
>>> On 10-03-10 05:59 AM, Michael Niedermayer wrote:
>>>> On Mon, Mar 08, 2010 at 08:29:40PM -0500, Micah F. Galizia wrote:
>>>>> On 10-03-07 07:42 PM, M?ns Rullg?rd wrote:
>>>>>> Stefano Sabatini<stefano.sabatini-lala at poste.it>    writes:
>>>>>>
>>>>>>> On date Sunday 2010-03-07 12:48:45 -0500, MIcah Galizia encoded:
>>>>>>>> On 10-03-07 05:52 AM, Stefano Sabatini wrote:
>>>>>>>>> On date Saturday 2010-03-06 19:02:07 -0500, Micah F. Galizia 
>>>>>>>>> encoded:
>>>>>>>>>> On 10-03-06 06:17 PM, Michael Niedermayer wrote:
>>>>>>> [...]
>>>>>>>>>>> should be ok if tested
>>>>>>>>>>
>>>>>>>>>> I tested it in plain old ffmpeg, and with my shoutcast changes.
>>>>>>>>>
>>>>>>>>> Please test with make test, I tried it and it failed in
>>>>>>>>> regtest-pbmpipe.
>>>>>>>>>
>>>>>>>>> cat pbmpipe.lavf.err
>>>>>>>>> /home/stefano/src/ffmpeg.git/./tests/data/lavf/pbmpipe.pbm: Error 
>>>>>>>>> while
>>>>>>>>> opening file
>>>>>>>>
>>>>>>>> Thank you.  The attached patch fixes it.  The problem was that after
>>>>>>>> the initial probe in av_open_input_file (with no actual probe data),
>>>>>>>> I was setting the input format to NULL in ff_probe_input_buffer.
>>>>>>>> Now all regression tests pass (make test).
>>>>>>>>
>>>>>>>> Also, I have improved the commenting in internal.h.
>>>>>>>>
>>>>>>>> Thanks again!
>>>>>>>
>>>>>>> Patch applied, thanks for the fish.
>>>>>>
>>>>>> This broke ea-cdata on FATE.
>>>>>
>>>>> Actually, it would have broken on any probe score lower than 25 for a 
>>>>> file
>>>>> smaller than 1MB.  The problem was that the old probe loop would reset 
>>>>> the
>>>>> file position each time before calling get_buffer. As a result, 
>>>>> get_buffer
>>>>> would never return AVERROR_EOF, so this wasn't ever a situation that 
>>>>> needed
>>>>> to be handled.
>>>>>
>>>>> The modified probe just reads on from where it left off in the previous
>>>>> probe, so eventually, the end of file is reached before reaching
>>>>> PROBE_BUF_MAX, so it would just return an error.  It has been updated 
>>>>> now
>>>>> to lower the required probe score when the end of file is reached in
>>>>> addition to when PROBE_BUF_MAX is reached.
>>>>>
>>>>> Thanks again, and sorry for breaking FATE!
>>>>> --
>>>>> Micah F. Galizia
>>>>> micahgalizia at gmail.com
>>>>>
>>>>> "The mark of an immature man is that he wants to die nobly for a cause,
>>>>> while the mark of the mature man is that he wants to live humbly for 
>>>>> one."
>>>>>   --W. Stekel
>>>>
>>>>>   internal.h |   18 +++++++++++
>>>>>   utils.c    |   97 
>>>>> +++++++++++++++++++++++++++++++++++++++++--------------------
>>>>>   2 files changed, 84 insertions(+), 31 deletions(-)
>>>>> 73e23f49aa0fbc3c6a08b506c3888a40cdddab2f  probe_buffer5.diff
>>>>
>>>> looks good, if tested
>>>
>>> Is someone going to check this in?
>>
>> Applied, let's see if FATE will choke again this time! ;-)
>
> Attached is a patch against the recently accepted patch. If the max probe 
> buffer length falls between two probe_size values (24KB for example), we 
> wont drop the required score, and as a result, probing might not succeed 
> when it should.
>
> The patch is patchecked and make test ran successfully. It has not been 
> tested against the whole FATE test set (it is still downloading).
>
> TIA
> -- 
> Micah F. Galizia
> micahgalizia at gmail.com
>
> "The mark of an immature man is that he wants to die nobly for a cause, 
> while the mark of the mature man is that he wants to live humbly for one."  
>  --W. Stekel

>  utils.c |    2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 62b907c075f3d7be944976c3e2bca5a935129346  probe_buffer6.diff
> Index: libavformat/utils.c
> ===================================================================
> --- libavformat/utils.c	(revision 22571)
> +++ libavformat/utils.c	(working copy)
> @@ -479,7 +479,7 @@
>      }
>  
>      for(probe_size= PROBE_BUF_MIN; probe_size<=max_probe_size && !*fmt && ret >= 0; probe_size<<=1){
> -        int ret, score = probe_size < max_probe_size ? AVPROBE_SCORE_MAX/4 : 0;
> +        int ret, score = probe_size<<1 <= max_probe_size ? AVPROBE_SCORE_MAX/4 : 0;

this looks wrong

the code before looks correct,
"if probe_size is less than the maximum probe_size .." is exactly what it is
supposed to check for


[...]
-- 
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/20100318/5508bd3e/attachment.pgp>



More information about the ffmpeg-devel mailing list