mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-04-14 00:58:38 +02:00
af_hdcd: add AVOption to set the CDT period
Signed-off-by: Burt P <pburt0@gmail.com>
This commit is contained in:
parent
400e2acd11
commit
8c19732a42
@ -917,6 +917,8 @@ typedef struct HDCDContext {
|
|||||||
* process. See docs or HDCD_ANA_* defines. */
|
* process. See docs or HDCD_ANA_* defines. */
|
||||||
int analyze_mode;
|
int analyze_mode;
|
||||||
int ana_snb; /**< used in tone generation */
|
int ana_snb; /**< used in tone generation */
|
||||||
|
|
||||||
|
int cdt_ms; /**< code detect timer period in ms */
|
||||||
/* end AVOption members */
|
/* end AVOption members */
|
||||||
|
|
||||||
/** config_input() and config_output() scan links for any resampling
|
/** config_input() and config_output() scan links for any resampling
|
||||||
@ -941,6 +943,8 @@ typedef struct HDCDContext {
|
|||||||
static const AVOption hdcd_options[] = {
|
static const AVOption hdcd_options[] = {
|
||||||
{ "process_stereo", "Process stereo channels together. Only apply target_gain when both channels match.",
|
{ "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 },
|
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.",
|
{ "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 },
|
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.",
|
{ "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);
|
#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;
|
int i;
|
||||||
|
|
||||||
@ -969,7 +973,7 @@ static void hdcd_reset(hdcd_state_t *state, unsigned rate)
|
|||||||
state->running_gain = 0;
|
state->running_gain = 0;
|
||||||
|
|
||||||
state->sustain = 0;
|
state->sustain = 0;
|
||||||
state->sustain_reset = rate * 10;
|
state->sustain_reset = cdt_ms*rate/1000;
|
||||||
|
|
||||||
state->code_counterA = 0;
|
state->code_counterA = 0;
|
||||||
state->code_counterA_almost = 0;
|
state->code_counterA_almost = 0;
|
||||||
@ -1705,9 +1709,11 @@ static av_cold int init(AVFilterContext *ctx)
|
|||||||
s->bad_config = 0;
|
s->bad_config = 0;
|
||||||
|
|
||||||
for (c = 0; c < HDCD_MAX_CHANNELS; c++) {
|
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",
|
av_log(ctx, AV_LOG_VERBOSE, "Process mode: %s\n",
|
||||||
(s->process_stereo) ? "process stereo channels together" : "process each channel separately");
|
(s->process_stereo) ? "process stereo channels together" : "process each channel separately");
|
||||||
av_log(ctx, AV_LOG_VERBOSE, "Force PE: %s\n",
|
av_log(ctx, AV_LOG_VERBOSE, "Force PE: %s\n",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user