for (i = 0; i < nb_channels; i++) {
/* channel weighting */
- const uint16_t chl = av_channel_layout_extract_channel(outlink->channel_layout, i);
+ const uint64_t chl = av_channel_layout_extract_channel(outlink->channel_layout, i);
if (chl & (AV_CH_LOW_FREQUENCY|AV_CH_LOW_FREQUENCY_2)) {
ebur128->ch_weighting[i] = 0;
} else if (chl & BACK_MASK) {
/* insert output pads */
if (ebur128->do_video) {
pad = (AVFilterPad){
- .name = av_strdup("out0"),
+ .name = "out0",
.type = AVMEDIA_TYPE_VIDEO,
.config_props = config_video_output,
};
- if (!pad.name)
- return AVERROR(ENOMEM);
ret = ff_insert_outpad(ctx, 0, &pad);
- if (ret < 0) {
- av_freep(&pad.name);
+ if (ret < 0)
return ret;
- }
}
pad = (AVFilterPad){
- .name = av_asprintf("out%d", ebur128->do_video),
+ .name = ebur128->do_video ? "out1" : "out0",
.type = AVMEDIA_TYPE_AUDIO,
.config_props = config_audio_output,
};
- if (!pad.name)
- return AVERROR(ENOMEM);
ret = ff_insert_outpad(ctx, ebur128->do_video, &pad);
- if (ret < 0) {
- av_freep(&pad.name);
+ if (ret < 0)
return ret;
- }
/* summary */
av_log(ctx, AV_LOG_VERBOSE, "EBU +%d scale\n", ebur128->meter);
/* push one video frame */
if (ebur128->do_video) {
+ AVFrame *clone;
int x, y, ret;
uint8_t *p;
double gauge_value;
+ int y_loudness_lu_graph, y_loudness_lu_gauge;
if (ebur128->gauge_type == GAUGE_TYPE_MOMENTARY) {
gauge_value = loudness_400 - ebur128->target;
gauge_value = loudness_3000 - ebur128->target;
}
- const int y_loudness_lu_graph = lu_to_y(ebur128, loudness_3000 - ebur128->target);
- const int y_loudness_lu_gauge = lu_to_y(ebur128, gauge_value);
+ y_loudness_lu_graph = lu_to_y(ebur128, loudness_3000 - ebur128->target);
+ y_loudness_lu_gauge = lu_to_y(ebur128, gauge_value);
/* draw the graph using the short-term loudness */
p = pic->data[0] + ebur128->graph.y*pic->linesize[0] + ebur128->graph.x*3;
/* set pts and push frame */
pic->pts = pts;
- ret = ff_filter_frame(outlink, av_frame_clone(pic));
+ clone = av_frame_clone(pic);
+ if (!clone)
+ return AVERROR(ENOMEM);
+ ret = ff_filter_frame(outlink, clone);
if (ret < 0)
return ret;
}
/* set optional output video format */
if (ebur128->do_video) {
formats = ff_make_format_list(pix_fmts);
- if ((ret = ff_formats_ref(formats, &outlink->in_formats)) < 0)
+ if ((ret = ff_formats_ref(formats, &outlink->incfg.formats)) < 0)
return ret;
outlink = ctx->outputs[1];
}
* Note: ff_set_common_* functions are not used because they affect all the
* links, and thus break the video format negotiation */
formats = ff_make_format_list(sample_fmts);
- if ((ret = ff_formats_ref(formats, &inlink->out_formats)) < 0 ||
- (ret = ff_formats_ref(formats, &outlink->in_formats)) < 0)
+ if ((ret = ff_formats_ref(formats, &inlink->outcfg.formats)) < 0 ||
+ (ret = ff_formats_ref(formats, &outlink->incfg.formats)) < 0)
return ret;
layouts = ff_all_channel_layouts();
- if ((ret = ff_channel_layouts_ref(layouts, &inlink->out_channel_layouts)) < 0 ||
- (ret = ff_channel_layouts_ref(layouts, &outlink->in_channel_layouts)) < 0)
+ if ((ret = ff_channel_layouts_ref(layouts, &inlink->outcfg.channel_layouts)) < 0 ||
+ (ret = ff_channel_layouts_ref(layouts, &outlink->incfg.channel_layouts)) < 0)
return ret;
formats = ff_make_format_list(input_srate);
- if ((ret = ff_formats_ref(formats, &inlink->out_samplerates)) < 0 ||
- (ret = ff_formats_ref(formats, &outlink->in_samplerates)) < 0)
+ if ((ret = ff_formats_ref(formats, &inlink->outcfg.samplerates)) < 0 ||
+ (ret = ff_formats_ref(formats, &outlink->incfg.samplerates)) < 0)
return ret;
return 0;
av_freep(&ebur128->i400.cache[i]);
av_freep(&ebur128->i3000.cache[i]);
}
- for (i = 0; i < ctx->nb_outputs; i++)
- av_freep(&ctx->output_pads[i].name);
av_frame_free(&ebur128->outpicref);
#if CONFIG_SWRESAMPLE
av_freep(&ebur128->swr_buf);
{ NULL }
};
-AVFilter ff_af_ebur128 = {
+const AVFilter ff_af_ebur128 = {
.name = "ebur128",
.description = NULL_IF_CONFIG_SMALL("EBU R128 scanner."),
.priv_size = sizeof(EBUR128Context),