[FFmpeg-cvslog] af_hdcd: add AVOption to set the CDT period

Burt P git at videolan.org
Sun Aug 21 21:54:49 EEST 2016


ffmpeg | branch: master | Burt P <pburt0 at gmail.com> | Wed Aug 10 01:18:18 2016 -0500| [8c19732a423a979cb4c81ab15917f9d9175fb9cd] | committer: Burt P

af_hdcd: add AVOption to set the CDT period

Signed-off-by: Burt P <pburt0 at gmail.com>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=8c19732a423a979cb4c81ab15917f9d9175fb9cd
---

 libavfilter/af_hdcd.c | 12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)

diff --git a/libavfilter/af_hdcd.c b/libavfilter/af_hdcd.c
index 37b427a..a137c11 100644
--- a/libavfilter/af_hdcd.c
+++ b/libavfilter/af_hdcd.c
@@ -917,6 +917,8 @@ typedef struct HDCDContext {
      *  process. See docs or HDCD_ANA_* defines. */
     int analyze_mode;
     int ana_snb;            /**< used in tone generation */
+
+    int cdt_ms;             /**< code detect timer period in ms */
     /* end AVOption members */
 
     /** config_input() and config_output() scan links for any resampling
@@ -941,6 +943,8 @@ typedef struct HDCDContext {
 static const AVOption hdcd_options[] = {
     { "process_stereo", "Process stereo channels together. Only apply target_gain when both channels match.",
         OFFSET(process_stereo), AV_OPT_TYPE_BOOL, { .i64 = HDCD_PROCESS_STEREO_DEFAULT }, 0, 1, A },
+    { "cdt_ms", "Code detect timer period in ms.",
+        OFFSET(cdt_ms), AV_OPT_TYPE_INT, { .i64 = 2000 }, 100, 60000, A },
     { "force_pe", "Always extend peaks above -3dBFS even when PE is not signaled.",
         OFFSET(force_pe), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, A },
     { "analyze_mode",  "Replace audio with solid tone and signal some processing aspect in the amplitude.",
@@ -957,7 +961,7 @@ AVFILTER_DEFINE_CLASS(hdcd);
 
 #define APPLY_GAIN(s,g) do{int64_t s64 = s; s64 *= gaintab[g]; s = (int32_t)(s64 >> 23); }while(0);
 
-static void hdcd_reset(hdcd_state_t *state, unsigned rate)
+static void hdcd_reset(hdcd_state_t *state, unsigned rate, unsigned cdt_ms)
 {
     int i;
 
@@ -969,7 +973,7 @@ static void hdcd_reset(hdcd_state_t *state, unsigned rate)
     state->running_gain = 0;
 
     state->sustain = 0;
-    state->sustain_reset = rate * 10;
+    state->sustain_reset = cdt_ms*rate/1000;
 
     state->code_counterA = 0;
     state->code_counterA_almost = 0;
@@ -1705,9 +1709,11 @@ static av_cold int init(AVFilterContext *ctx)
     s->bad_config = 0;
 
     for (c = 0; c < HDCD_MAX_CHANNELS; c++) {
-        hdcd_reset(&s->state[c], 44100);
+        hdcd_reset(&s->state[c], 44100, s->cdt_ms);
     }
 
+    av_log(ctx, AV_LOG_VERBOSE, "CDT period: %dms (%d samples @44100Hz)\n",
+        s->cdt_ms, s->cdt_ms*44100/1000 );
     av_log(ctx, AV_LOG_VERBOSE, "Process mode: %s\n",
         (s->process_stereo) ? "process stereo channels together" : "process each channel separately");
     av_log(ctx, AV_LOG_VERBOSE, "Force PE: %s\n",



More information about the ffmpeg-cvslog mailing list