|
@@ -140,12 +140,36 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *frame)
|
|
|
return ff_filter_frame(inlink->dst->outputs[0], frame);
|
|
|
}
|
|
|
|
|
|
+static int config_props(AVFilterContext *ctx, AVFilterLink *link, int is_out)
|
|
|
+{
|
|
|
+
|
|
|
+ av_log(ctx, AV_LOG_INFO, "config %s time_base: %d/%d, frame_rate: %d/%d\n",
|
|
|
+ is_out ? "out" : "in",
|
|
|
+ link->time_base.num, link->time_base.den,
|
|
|
+ link->frame_rate.num, link->frame_rate.den);
|
|
|
+
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
+static int config_props_in(AVFilterLink *link)
|
|
|
+{
|
|
|
+ AVFilterContext *ctx = link->dst;
|
|
|
+ return config_props(ctx, link, 0);
|
|
|
+}
|
|
|
+
|
|
|
+static int config_props_out(AVFilterLink *link)
|
|
|
+{
|
|
|
+ AVFilterContext *ctx = link->src;
|
|
|
+ return config_props(ctx, link, 1);
|
|
|
+}
|
|
|
+
|
|
|
static const AVFilterPad avfilter_vf_showinfo_inputs[] = {
|
|
|
{
|
|
|
.name = "default",
|
|
|
.type = AVMEDIA_TYPE_VIDEO,
|
|
|
.get_video_buffer = ff_null_get_video_buffer,
|
|
|
.filter_frame = filter_frame,
|
|
|
+ .config_props = config_props_in,
|
|
|
},
|
|
|
{ NULL }
|
|
|
};
|
|
@@ -153,7 +177,8 @@ static const AVFilterPad avfilter_vf_showinfo_inputs[] = {
|
|
|
static const AVFilterPad avfilter_vf_showinfo_outputs[] = {
|
|
|
{
|
|
|
.name = "default",
|
|
|
- .type = AVMEDIA_TYPE_VIDEO
|
|
|
+ .type = AVMEDIA_TYPE_VIDEO,
|
|
|
+ .config_props = config_props_out,
|
|
|
},
|
|
|
{ NULL }
|
|
|
};
|