39 #define DEF_CHOOSE_FORMAT(type, var, supported_list, none, get_name) \
40 static char *choose_ ## var ## s(OutputStream *ost) \
42 if (ost->st->codec->var != none) { \
43 get_name(ost->st->codec->var); \
44 return av_strdup(name); \
45 } else if (ost->enc && ost->enc->supported_list) { \
47 AVIOContext *s = NULL; \
51 if (avio_open_dyn_buf(&s) < 0) \
54 for (p = ost->enc->supported_list; *p != none; p++) { \
56 avio_printf(s, "%s|", name); \
58 len = avio_close_dyn_buf(s, &ret); \
100 ist->filters[ist->nb_filters - 1] = fg->
inputs[0];
125 int file_idx = strtol(in->
name, &p, 0);
155 if (i == nb_input_streams) {
157 "unlabeled input pad %d on filter %s\n", in->
pad_idx,
195 "recording time.\n", name);
203 if (duration != INT64_MAX) {
240 snprintf(name,
sizeof(name),
"output stream %d:%d", ost->
file_index, ost->
index);
251 snprintf(args,
sizeof(args),
"%d:%d:0x%X",
255 snprintf(name,
sizeof(name),
"scaler for output stream %d:%d",
260 if ((ret =
avfilter_link(last_filter, pad_idx, filter, 0)) < 0)
267 if ((pix_fmts = choose_pix_fmts(ost))) {
269 snprintf(name,
sizeof(name),
"pixel format for output stream %d:%d",
273 "format", pix_fmts,
NULL,
276 if ((ret =
avfilter_link(last_filter, pad_idx, filter, 0)) < 0)
288 snprintf(args,
sizeof(args),
"fps=%d/%d", ost->
frame_rate.
num,
290 snprintf(name,
sizeof(name),
"fps for output stream %d:%d",
304 snprintf(name,
sizeof(name),
"trim for output stream %d:%d",
307 &last_filter, &pad_idx, name);
325 char *
sample_fmts, *sample_rates, *channel_layouts;
330 snprintf(name,
sizeof(name),
"output stream %d:%d", ost->
file_index, ost->
index);
340 sample_fmts = choose_sample_fmts(ost);
341 sample_rates = choose_sample_rates(ost);
342 channel_layouts = choose_channel_layouts(ost);
343 if (sample_fmts || sample_rates || channel_layouts) {
349 len += snprintf(args + len,
sizeof(args) - len,
"sample_fmts=%s:",
352 len += snprintf(args + len,
sizeof(args) - len,
"sample_rates=%s:",
355 len += snprintf(args + len,
sizeof(args) - len,
"channel_layouts=%s:",
363 snprintf(name,
sizeof(name),
"audio format for output stream %d:%d",
375 last_filter = format;
379 snprintf(name,
sizeof(name),
"trim for output stream %d:%d",
382 &last_filter, &pad_idx, name);
392 #define DESCRIBE_FILTER_LINK(f, inout, in) \
394 AVFilterContext *ctx = inout->filter_ctx; \
395 AVFilterPad *pads = in ? ctx->input_pads : ctx->output_pads; \
396 int nb_pads = in ? ctx->nb_inputs : ctx->nb_outputs; \
399 if (avio_open_dyn_buf(&pb) < 0) \
402 avio_printf(pb, "%s", ctx->filter->name); \
404 avio_printf(pb, ":%s", avfilter_pad_get_name(pads, inout->pad_idx));\
406 avio_close_dyn_buf(pb, &f->name); \
431 char args[255],
name[255];
432 int ret, pad_idx = 0;
437 snprintf(args,
sizeof(args),
"%d:%d:%d:%d:%d:%d:%d", ist->
st->
codec->
width,
441 snprintf(name,
sizeof(name),
"graph %d input from stream %d:%d", fg->
index,
447 last_filter = ifilter->
filter;
452 snprintf(name,
sizeof(name),
"force CFR for input from stream %d:%d",
463 last_filter = setpts;
466 snprintf(name,
sizeof(name),
"trim for input stream %d:%d",
485 char args[255],
name[255];
486 int ret, pad_idx = 0;
488 snprintf(args,
sizeof(args),
"time_base=%d/%d:sample_rate=%d:sample_fmt=%s"
489 ":channel_layout=0x%"PRIx64,
494 snprintf(name,
sizeof(name),
"graph %d input from stream %d:%d", fg->
index,
501 last_filter = ifilter->
filter;
508 "asyncts audio filter instead.\n");
511 len += snprintf(args + len,
sizeof(args) - len,
"compensate=1:"
513 snprintf(args + len,
sizeof(args) - len,
"min_delta=%f",
516 snprintf(name,
sizeof(name),
"graph %d audio sync for input stream %d:%d",
534 "audio filter instead.\n");
536 snprintf(args,
sizeof(args),
"volume=%f",
audio_volume / 256.0);
538 snprintf(name,
sizeof(name),
"graph %d volume for input stream %d:%d",
550 last_filter = volume;
553 snprintf(name,
sizeof(name),
"trim for input stream %d:%d",
595 snprintf(args,
sizeof(args),
"flags=0x%X", (
unsigned)ost->
sws_flags);
604 args[strlen(args) - 1] =
'\0';
611 if (simple && (!inputs || inputs->
next || !outputs || outputs->
next)) {
613 "exactly one input and output.\n", graph_desc);
617 for (cur = inputs; !simple && init && cur; cur = cur->
next)
620 for (cur = inputs, i = 0; cur; cur = cur->
next, i++)
625 if (!init || simple) {
628 for (cur = outputs, i = 0; cur; cur = cur->
next, i++)
636 for (cur = outputs; cur;) {