[FFmpeg-devel] [PATCH] ffmpeg: use AVBPrint API for filter args.
Clément Bœsch
ubitux at gmail.com
Fri May 25 00:56:05 CEST 2012
---
ffmpeg.c | 70 ++++++++++++++++++++++++++++----------------------------------
1 file changed, 32 insertions(+), 38 deletions(-)
diff --git a/ffmpeg.c b/ffmpeg.c
index fad21c0..4a70039 100644
--- a/ffmpeg.c
+++ b/ffmpeg.c
@@ -807,20 +807,22 @@ static int configure_audio_filters(FilterGraph *fg, AVFilterContext **in_filter,
AVCodecContext *codec = ost->st->codec;
AVCodecContext *icodec = ist->st->codec;
char *sample_fmts, *sample_rates, *channel_layouts;
- char args[256];
+ AVBPrint filter_args;
int ret;
+ av_bprint_init(&filter_args, 256, 2048);
+
avfilter_graph_free(&fg->graph);
if (!(fg->graph = avfilter_graph_alloc()))
return AVERROR(ENOMEM);
- snprintf(args, sizeof(args), "time_base=%d/%d:sample_rate=%d:sample_fmt=%s:"
- "channel_layout=0x%"PRIx64, ist->st->time_base.num,
- ist->st->time_base.den, icodec->sample_rate,
- av_get_sample_fmt_name(icodec->sample_fmt), icodec->channel_layout);
+ av_bprintf(&filter_args, "time_base=%d/%d:sample_rate=%d:sample_fmt=%s:"
+ "channel_layout=0x%"PRIx64, ist->st->time_base.num,
+ ist->st->time_base.den, icodec->sample_rate,
+ av_get_sample_fmt_name(icodec->sample_fmt), icodec->channel_layout);
ret = avfilter_graph_create_filter(&fg->inputs[0]->filter,
avfilter_get_by_name("abuffer"),
- "src", args, NULL, fg->graph);
+ "src", filter_args.str, NULL, fg->graph);
if (ret < 0)
return ret;
@@ -841,19 +843,13 @@ static int configure_audio_filters(FilterGraph *fg, AVFilterContext **in_filter,
channel_layouts = choose_channel_layouts(ost);
if (sample_fmts || sample_rates || channel_layouts) {
AVFilterContext *format;
- char args[256];
- int len = 0;
- if (sample_fmts)
- len += snprintf(args + len, sizeof(args) - len, "sample_fmts=%s:",
- sample_fmts);
- if (sample_rates)
- len += snprintf(args + len, sizeof(args) - len, "sample_rates=%s:",
- sample_rates);
- if (channel_layouts)
- len += snprintf(args + len, sizeof(args) - len, "channel_layouts=%s:",
- channel_layouts);
- args[len - 1] = 0;
+ av_bprint_clear(&filter_args);
+ if (sample_fmts) av_bprintf(&filter_args, "sample_fmts=%s:", sample_fmts);
+ if (sample_rates) av_bprintf(&filter_args, "sample_rates=%s:", sample_rates);
+ if (channel_layouts) av_bprintf(&filter_args, "channel_layouts=%s:", channel_layouts);
+ filter_args.len--;
+ filter_args.str[filter_args.len] = 0;
av_freep(&sample_fmts);
av_freep(&sample_rates);
@@ -861,7 +857,8 @@ static int configure_audio_filters(FilterGraph *fg, AVFilterContext **in_filter,
ret = avfilter_graph_create_filter(&format,
avfilter_get_by_name("aformat"),
- "aformat", args, NULL, fg->graph);
+ "aformat", filter_args.str,
+ NULL, fg->graph);
if (ret < 0)
return ret;
@@ -872,15 +869,16 @@ static int configure_audio_filters(FilterGraph *fg, AVFilterContext **in_filter,
*out_filter = format;
}
-#define AUTO_INSERT_FILTER(opt_name, filter_name, arg) do { \
+#define AUTO_INSERT_FILTER(opt_name, filter_name) do { \
AVFilterContext *filt_ctx; \
\
av_log(NULL, AV_LOG_INFO, opt_name " is forwarded to lavfi " \
- "similarly to -af " filter_name "=%s.\n", arg); \
+ "similarly to -af " filter_name "=%s.\n", filter_args.str); \
\
ret = avfilter_graph_create_filter(&filt_ctx, \
avfilter_get_by_name(filter_name), \
- filter_name, arg, NULL, fg->graph); \
+ filter_name, filter_args.str, \
+ NULL, fg->graph); \
if (ret < 0) \
return ret; \
\
@@ -892,36 +890,32 @@ static int configure_audio_filters(FilterGraph *fg, AVFilterContext **in_filter,
} while (0)
if (audio_sync_method > 0) {
- char args[256] = {0};
-
- av_strlcatf(args, sizeof(args), "min_comp=0.001:min_hard_comp=%f", audio_drift_threshold);
+ av_bprint_clear(&filter_args);
+ av_bprintf(&filter_args, "min_comp=0.001:min_hard_comp=%f", audio_drift_threshold);
if (audio_sync_method > 1)
- av_strlcatf(args, sizeof(args), ":max_soft_comp=%f", audio_sync_method/(double)icodec->sample_rate);
- AUTO_INSERT_FILTER("-async", "aresample", args);
+ av_bprintf(&filter_args, ":max_soft_comp=%f", audio_sync_method/(double)icodec->sample_rate);
+ AUTO_INSERT_FILTER("-async", "aresample");
}
if (ost->audio_channels_mapped) {
int i;
- AVBPrint pan_buf;
- av_bprint_init(&pan_buf, 256, 8192);
- av_bprintf(&pan_buf, "0x%"PRIx64,
+ av_bprint_clear(&filter_args);
+ av_bprintf(&filter_args, "0x%"PRIx64,
av_get_default_channel_layout(ost->audio_channels_mapped));
for (i = 0; i < ost->audio_channels_mapped; i++)
if (ost->audio_channels_map[i] != -1)
- av_bprintf(&pan_buf, ":c%d=c%d", i, ost->audio_channels_map[i]);
-
- AUTO_INSERT_FILTER("-map_channel", "pan", pan_buf.str);
- av_bprint_finalize(&pan_buf, NULL);
+ av_bprintf(&filter_args, ":c%d=c%d", i, ost->audio_channels_map[i]);
+ AUTO_INSERT_FILTER("-map_channel", "pan");
}
if (audio_volume != 256) {
- char args[256];
-
- snprintf(args, sizeof(args), "%lf", audio_volume / 256.);
- AUTO_INSERT_FILTER("-vol", "volume", args);
+ av_bprint_clear(&filter_args);
+ av_bprintf(&filter_args, "%lf", audio_volume / 256.);
+ AUTO_INSERT_FILTER("-vol", "volume");
}
+ av_bprint_finalize(&filter_args, NULL);
return 0;
}
--
1.7.10.2
More information about the ffmpeg-devel
mailing list