Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/FFmpeg/FFmpeg.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBurt P <pburt0@gmail.com>2016-07-24 05:26:51 +0300
committerMichael Niedermayer <michael@niedermayer.cc>2016-07-28 03:26:57 +0300
commitfb91143ef150263451b331e3e66f8ba51d9a8c8d (patch)
tree0b1d418598c5bc1721e225ff4ca1088a74231321 /libavfilter/af_hdcd.c
parent70c1647a3501fa6182c04c9ce66f477def64a611 (diff)
af_hdcd: Report PE as being intermittent or permanent
The Peak Extend feature could be enabled permanently or only when needed. This is now reported. 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.c30
1 files changed, 26 insertions, 4 deletions
diff --git a/libavfilter/af_hdcd.c b/libavfilter/af_hdcd.c
index f265ed936b..6f3eb1e875 100644
--- a/libavfilter/af_hdcd.c
+++ b/libavfilter/af_hdcd.c
@@ -851,6 +851,18 @@ typedef struct {
AVFilterContext *fctx; /* filter context for logging errors */
} hdcd_state_t;
+typedef enum {
+ HDCD_PE_NEVER =0,
+ HDCD_PE_INTERMITTENT =1,
+ HDCD_PE_PERMANENT =2
+} hdcd_pe_t;
+
+const char* pe_str[] = {
+ "never enabled",
+ "enabled intermittently",
+ "enabled permanently"
+ };
+
typedef struct HDCDContext {
const AVClass *class;
hdcd_state_t state[2];
@@ -858,7 +870,7 @@ typedef struct HDCDContext {
/* User information/stats */
int hdcd_detected;
int det_errors; /* detectable errors */
- int uses_peak_extend;
+ hdcd_pe_t peak_extend;
int uses_transient_filter; /* detected, but not implemented */
float max_gain_adjustment; /* in dB, expected in the range -6.0 to 0.0 */
} HDCDContext;
@@ -1115,7 +1127,7 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *in)
const int16_t *in_data;
int32_t *out_data;
int n, c;
- int detect;
+ int detect, packets, pe_packets;
out = ff_get_audio_buffer(outlink, in->nb_samples);
if (!out) {
@@ -1132,18 +1144,28 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *in)
}
detect = 0;
+ packets = 0;
+ pe_packets = 0;
s->det_errors = 0;
for (c = 0; c < inlink->channels; c++) {
hdcd_state_t *state = &s->state[c];
hdcd_process(state, out_data + c, in->nb_samples, out->channels);
if (state->sustain) detect++;
- s->uses_peak_extend |= !!state->count_peak_extend;
+ packets += state->code_counterA + state->code_counterB;
+ pe_packets += state->count_peak_extend;
s->uses_transient_filter |= !!state->count_transient_filter;
s->max_gain_adjustment = FFMIN(s->max_gain_adjustment, GAINTOFLOAT(state->max_gain));
s->det_errors += state->code_counterA_almost
+ state->code_counterB_checkfails
+ state->code_counterC_unmatched;
}
+ if (pe_packets) {
+ /* if every valid packet has used PE, call it permanent */
+ if (packets == pe_packets)
+ s->peak_extend = HDCD_PE_PERMANENT;
+ else
+ s->peak_extend = HDCD_PE_INTERMITTENT;
+ } else s->peak_extend = HDCD_PE_NEVER;
/* HDCD is detected if a valid packet is active in all (both)
* channels at the same time. */
if (detect == inlink->channels) s->hdcd_detected = 1;
@@ -1224,7 +1246,7 @@ static av_cold void uninit(AVFilterContext *ctx)
if (s->hdcd_detected)
av_log(ctx, AV_LOG_INFO,
"HDCD detected: yes, peak_extend: %s, max_gain_adj: %0.1f dB, transient_filter: %s, detectable errors: %d%s\n",
- (s->uses_peak_extend) ? "enabled" : "never enabled",
+ pe_str[s->peak_extend],
s->max_gain_adjustment,
(s->uses_transient_filter) ? "detected" : "not detected",
s->det_errors, (s->det_errors) ? " (try -v verbose)" : ""