summaryrefslogtreecommitdiffstats
path: root/player
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2017-02-20 13:32:37 +0100
committerwm4 <wm4@nowhere>2017-02-20 13:32:37 +0100
commit134c9d9df5c5d38960f2cd4fd5f23dcb9205811e (patch)
treee26003b42437e743a20c922d6196994d4a19c31d /player
parentfefc5a8f735a62f3dd317fd18e51e33959c07690 (diff)
downloadmpv-134c9d9df5c5d38960f2cd4fd5f23dcb9205811e.tar.bz2
mpv-134c9d9df5c5d38960f2cd4fd5f23dcb9205811e.tar.xz
lavfi: use AVBufferSrcParameters
It's nice that you don't have to create a parameter string anymore, but the rest sure is complicated as hell.
Diffstat (limited to 'player')
-rw-r--r--player/lavfi.c57
1 files changed, 34 insertions, 23 deletions
diff --git a/player/lavfi.c b/player/lavfi.c
index be0b119c42..953ccc5956 100644
--- a/player/lavfi.c
+++ b/player/lavfi.c
@@ -372,9 +372,6 @@ static bool init_pads(struct lavfi *c)
if (avfilter_link(pad->filter, pad->filter_pad, pad->buffer, 0) < 0)
goto error;
} else {
- char src_args[256];
- AVFilter *src_filter = NULL;
-
TA_FREEP(&pad->in_fmt_v); // potentially cleanup previous error state
pad->input_eof |= !pad->connected;
@@ -406,35 +403,49 @@ static bool init_pads(struct lavfi *c)
return false;
}
+ AVBufferSrcParameters *params = av_buffersrc_parameters_alloc();
+ if (!params)
+ goto error;
+
+ char *filter_name = NULL;
if (pad->type == STREAM_AUDIO) {
- pad->timebase = (AVRational){1, pad->in_fmt_a.rate};
- snprintf(src_args, sizeof(src_args),
- "sample_rate=%d:sample_fmt=%s:time_base=%d/%d:"
- "channel_layout=0x%"PRIx64, pad->in_fmt_a.rate,
- av_get_sample_fmt_name(af_to_avformat(pad->in_fmt_a.format)),
- pad->timebase.num, pad->timebase.den,
- mp_chmap_to_lavc(&pad->in_fmt_a.channels));
- src_filter = avfilter_get_by_name("abuffer");
+ params->time_base = pad->timebase =
+ (AVRational){1, pad->in_fmt_a.rate};
+ params->format = af_to_avformat(pad->in_fmt_a.format);
+ params->sample_rate = pad->in_fmt_a.rate;
+ params->channel_layout =
+ mp_chmap_to_lavc(&pad->in_fmt_a.channels);
+ filter_name = "abuffer";
} else if (pad->type == STREAM_VIDEO) {
- pad->timebase = AV_TIME_BASE_Q;
- snprintf(src_args, sizeof(src_args), "%d:%d:%d:%d:%d:%d:%d",
- pad->in_fmt_v->w, pad->in_fmt_v->h,
- imgfmt2pixfmt(pad->in_fmt_v->imgfmt),
- pad->timebase.num, pad->timebase.den,
- pad->in_fmt_v->params.p_w, pad->in_fmt_v->params.p_h);
- src_filter = avfilter_get_by_name("buffer");
+ params->time_base = pad->timebase = AV_TIME_BASE_Q;
+ params->format = imgfmt2pixfmt(pad->in_fmt_v->imgfmt);
+ params->width = pad->in_fmt_v->w;
+ params->height = pad->in_fmt_v->h;
+ params->sample_aspect_ratio.num = pad->in_fmt_v->params.p_w;
+ params->sample_aspect_ratio.den = pad->in_fmt_v->params.p_h;
+ filter_name = "buffer";
} else {
assert(0);
}
- if (!src_filter)
+ AVFilter *filter = avfilter_get_by_name(filter_name);
+ if (filter) {
+ char name[256];
+ snprintf(name, sizeof(name), "mpv_src_%s", pad->name);
+
+ pad->buffer = avfilter_graph_alloc_filter(c->graph, filter, name);
+ }
+ if (!pad->buffer) {
+ av_free(params);
goto error;
+ }
- char name[256];
- snprintf(name, sizeof(name), "mpv_src_%s", pad->name);
+ int ret = av_buffersrc_parameters_set(pad->buffer, params);
+ av_free(params);
+ if (ret < 0)
+ goto error;
- if (avfilter_graph_create_filter(&pad->buffer, src_filter,
- name, src_args, NULL, c->graph) < 0)
+ if (avfilter_init_str(pad->buffer, NULL) < 0)
goto error;
if (avfilter_link(pad->buffer, 0, pad->filter, pad->filter_pad) < 0)