@ -846,7 +846,9 @@ typedef struct {
* steps of 0.5 , but no value below - 6.0 dB should appear . */
int gain_counts [ 16 ] ; /* for cursiosity, mostly */
int max_gain ;
int count_sustain_expired ; /* occurences of code detect timer expiring without detecting a code */
/* occurences of code detect timer expiring without detecting
* a code . - 1 for timer never set . */
int count_sustain_expired ;
AVFilterContext * fctx ; /* filter context for logging errors */
} hdcd_state_t ;
@ -909,7 +911,7 @@ static void hdcd_reset(hdcd_state_t *state, unsigned rate)
for ( i = 0 ; i < 16 ; i + + ) state - > gain_counts [ i ] = 0 ;
state - > max_gain = 0 ;
state - > count_sustain_expired = 0 ;
state - > count_sustain_expired = - 1 ;
}
/* update the user info/counters */
@ -991,6 +993,15 @@ static int hdcd_integrate(hdcd_state_t *state, int *flag, const int32_t *samples
return result ;
}
static void hdcd_sustain_reset ( hdcd_state_t * state )
{
state - > sustain = state - > sustain_reset ;
/* if this is the first reset then change
* from never set , to never expired */
if ( state - > count_sustain_expired = = - 1 )
state - > count_sustain_expired = 0 ;
}
static int hdcd_scan ( hdcd_state_t * state , const int32_t * samples , int max , int stride )
{
int cdt_active = 0 ;
@ -1011,7 +1022,7 @@ static int hdcd_scan(hdcd_state_t *state, const int32_t *samples, int max, int s
result + = consumed ;
if ( flag > 0 ) {
/* reset timer if code detected in channel */
state - > sustain = state - > sustain_reset ;
hdcd_sustain_reset ( state ) ;
break ;
}
samples + = consumed * stride ;