[FFmpeg-devel] [PATCH]lavf/bit: Fix the G.729 bit auto-detection
Carl Eugen Hoyos
ceffmpeg at gmail.com
Sat Sep 30 21:46:28 EEST 2017
2017-09-30 3:19 GMT+02:00 Michael Niedermayer <michael at niedermayer.cc>:
> On Fri, Sep 29, 2017 at 07:23:17PM +0200, Carl Eugen Hoyos wrote:
>> Hi!
>>
>> The G.729 bit auto-detection has never worked, patch attached.
>>
>> Please comment, Carl Eugen
>
>> bit.c | 23 +++++++++++++----------
>> 1 file changed, 13 insertions(+), 10 deletions(-)
>> 1eaabbb2e56d350949d0c8c439a2ba49513069f2 0001-lavf-bit-Fix-the-G.729-bit-probe-function.patch
>> From 2521a9bd86d807a3e18fe930b35039beb7674b3e Mon Sep 17 00:00:00 2001
>> From: Carl Eugen Hoyos <ceffmpeg at gmail.com>
>> Date: Fri, 29 Sep 2017 19:10:46 +0200
>> Subject: [PATCH] lavf/bit: Fix the G.729 bit auto-detection.
>>
>> ---
>> libavformat/bit.c | 23 +++++++++++++----------
>> 1 file changed, 13 insertions(+), 10 deletions(-)
>>
>> diff --git a/libavformat/bit.c b/libavformat/bit.c
>> index d742a5b..f90e4a7 100644
>> --- a/libavformat/bit.c
>> +++ b/libavformat/bit.c
>> @@ -32,20 +32,23 @@
>> #if CONFIG_BIT_DEMUXER
>> static int probe(AVProbeData *p)
>> {
>> - int i, j;
>> + int i = 0, j, valid = 0;
>>
>> - if(p->buf_size < 0x40)
>> - return 0;
>> -
>> - for(i=0; i+3<p->buf_size && i< 10*0x50; ){
>> - if(AV_RL16(&p->buf[0]) != SYNC_WORD)
>> + while (2 * i + 3 < p->buf_size){
>> + if (AV_RL16(&p->buf[2 * i++]) != SYNC_WORD)
>> return 0;
>> - j=AV_RL16(&p->buf[2]);
>> - if(j!=0x40 && j!=0x50)
>> + j = AV_RL16(&p->buf[2 * i++]);
>> + if (j != 0 && j != 0x10 && j != 0x40 && j != 0x50)
>> return 0;
>> - i+=j;
>> + if (j)
>> + valid++;
>> + i += j;
>> }
>> - return AVPROBE_SCORE_EXTENSION;
>> + if (valid > 10)
>> + return AVPROBE_SCORE_MAX;
>
> this looks like a g729 stream encapsulated i another container could
> return AVPROBE_SCORE_MAX. This may be sub optimal
SYNC_WORD only exists in BIT streams, not in raw g.729 streams
as muxed in other formats.
Patch pushed.
Thank you, Carl Eugen
More information about the ffmpeg-devel
mailing list