summaryrefslogtreecommitdiff
path: root/libavfilter/af_hdcd.c
diff options
context:
space:
mode:
authorBurt P <pburt0@gmail.com>2016-07-29 12:36:17 -0500
committerMichael Niedermayer <michael@niedermayer.cc>2016-07-31 16:36:22 +0200
commit390eea61be59ca75e55bc2dd630701281d15c0b8 (patch)
tree61b70c34511ce402212fa3e56567ae321be0ac84 /libavfilter/af_hdcd.c
parent999c6b1da85a3aa7f625353605cb3e1ec6fdf41d (diff)
af_hdcd: give cdt expired counter a value for never set
The counter is now -1 if the code detect timer was never set, and 0 if it was set but never expired. Signed-off-by: Burt P <pburt0@gmail.com> Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
Diffstat (limited to 'libavfilter/af_hdcd.c')
-rw-r--r--libavfilter/af_hdcd.c17
1 files changed, 14 insertions, 3 deletions
diff --git a/libavfilter/af_hdcd.c b/libavfilter/af_hdcd.c
index e7adbea5b7..36267474de 100644
--- a/libavfilter/af_hdcd.c
+++ b/libavfilter/af_hdcd.c
@@ -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;