@ -37,6 +37,7 @@ static int dts_probe(const AVProbeData *p)
int exss_markers = 0 , exss_nextpos = 0 ;
int exss_markers = 0 , exss_nextpos = 0 ;
int sum , max , pos , ret , i ;
int sum , max , pos , ret , i ;
int64_t diff = 0 ;
int64_t diff = 0 ;
int diffcount = 1 ;
uint8_t hdr [ DCA_CORE_FRAME_HEADER_SIZE + AV_INPUT_BUFFER_PADDING_SIZE ] = { 0 } ;
uint8_t hdr [ DCA_CORE_FRAME_HEADER_SIZE + AV_INPUT_BUFFER_PADDING_SIZE ] = { 0 } ;
for ( pos = FFMIN ( 4096 , p - > buf_size ) ; pos < p - > buf_size - 2 ; pos + = 2 ) {
for ( pos = FFMIN ( 4096 , p - > buf_size ) ; pos < p - > buf_size - 2 ; pos + = 2 ) {
@ -47,8 +48,12 @@ static int dts_probe(const AVProbeData *p)
bufp = buf = p - > buf + pos ;
bufp = buf = p - > buf + pos ;
state = ( state < < 16 ) | bytestream_get_be16 ( & bufp ) ;
state = ( state < < 16 ) | bytestream_get_be16 ( & bufp ) ;
if ( pos > = 4 )
if ( pos > = 4 ) {
diff + = FFABS ( ( ( int16_t ) AV_RL16 ( buf ) ) - ( int16_t ) AV_RL16 ( buf - 4 ) ) ;
if ( AV_RL16 ( buf ) | | AV_RL16 ( buf - 4 ) ) {
diff + = FFABS ( ( ( int16_t ) AV_RL16 ( buf ) ) - ( int16_t ) AV_RL16 ( buf - 4 ) ) ;
diffcount + + ;
}
}
/* extension substream (EXSS) */
/* extension substream (EXSS) */
if ( state = = DCA_SYNCWORD_SUBSTREAM ) {
if ( state = = DCA_SYNCWORD_SUBSTREAM ) {
@ -121,7 +126,7 @@ static int dts_probe(const AVProbeData *p)
if ( markers [ max ] > 3 & & p - > buf_size / markers [ max ] < 32 * 1024 & &
if ( markers [ max ] > 3 & & p - > buf_size / markers [ max ] < 32 * 1024 & &
markers [ max ] * 4 > sum * 3 & &
markers [ max ] * 4 > sum * 3 & &
diff / p - > buf_size > 2 00)
diff / diffcount > 6 00)
return AVPROBE_SCORE_EXTENSION + 1 ;
return AVPROBE_SCORE_EXTENSION + 1 ;
return 0 ;
return 0 ;