<div dir="ltr"><p>Hi Paul,</p>
<p>Thank you for your answer. So, I have tried to use overlay filter. <br>I use two "buffer" filters for its inputs and one "buffersink" filter for its ouput, as shown in the code below.<br>The problem is that the avfilter_graph_config() command causes the error: <br>
'Output pad "default" with type video of the filter instance "input_main_filter"<br>of buffer not connected to any destination.'</p>
<p>AVFormatContext *fmt_ctx_main;<br>AVCodecContext *dec_ctx_main;<br>AVFormatContext *fmt_ctx_wtrmrk;<br>AVCodecContext *dec_ctx_wtrmrk;<br>AVFilterContext *buffersink_ctx = NULL;<br>AVFilterContext *buffersrc_ctx = NULL;<br>
AVFilterContext *bufferovrlay_ctx = NULL;<br>AVFilterGraph *filter_graph = NULL;</p>
<p>... <br>// All fmt_ctx_main, dec_ctx_main, fmt_ctx_wtrmrk, dec_ctx_wtrmrk initializations are OK.</p>
<p>char argsStrMain[512] = "";<br>char argsStrOvrlay[512] = "";<br>int ret = 0; <br> <br>AVFilter *buffersrc = avfilter_get_by_name("buffer");<br>AVFilter *bufferovrlay = avfilter_get_by_name("buffer");<br>
AVFilter *buffersink = avfilter_get_by_name("buffersink");<br> <br>AVFilterInOut *inputs = avfilter_inout_alloc();<br>AVFilterInOut *outputs = avfilter_inout_alloc();<br>AVFilterInOut *outputOvrlay = avfilter_inout_alloc();</p>

<p>enum AVPixelFormat pix_fmts[] = {AV_PIX_FMT_YUV420P, AV_PIX_FMT_NONE};</p>
<p>AVBufferSinkParams *buffersink_params = NULL;<br> <br>sprintf_s(argsStrMain, sizeof(argsStrMain), "video_size=%dx%d:pix_fmt=%d:time_base=%d/%d:pixel_aspect=%d/%d",<br>          dec_ctx_main->width, dec_ctx_main->height, dec_ctx_main->pix_fmt,<br>
          dec_ctx_main->time_base.num, dec_ctx_main->time_base.den,<br>          dec_ctx_main->sample_aspect_ratio.num, dec_ctx_main->sample_aspect_ratio.den);<br> <br>sprintf_s(argsStrOvrlay, sizeof(argsStrOvrlay), "video_size=%dx%d:pix_fmt=%d:time_base=%d/%d:pixel_aspect=%d/%d",<br>
          dec_ctx_wtrmrk->width, dec_ctx_wtrmrk->height, dec_ctx_wtrmrk->pix_fmt,<br>          dec_ctx_wtrmrk->time_base.num, dec_ctx_wtrmrk->time_base.den,<br>          dec_ctx_wtrmrk->sample_aspect_ratio.num, dec_ctx_wtrmrk->sample_aspect_ratio.den);</p>

<p>buffersink_params = av_buffersink_params_alloc();<br>buffersink_params->pixel_fmts = pix_fmts;</p>
<p>filter_graph = avfilter_graph_alloc();</p>
<p>ret = avfilter_graph_create_filter(&buffersrc_ctx, buffersrc, "input_main_filter", argsStrMain, NULL, filter_graph);<br>ret = avfilter_graph_create_filter(&bufferovrlay_ctx, bufferovrlay, "input_overlay_filter", argsStrOvrlay, NULL, filter_graph);<br>
ret = avfilter_graph_create_filter(&buffersink_ctx, buffersink, "output_filter", NULL, buffersink_params, filter_graph);</p>
<p>outputs->name = av_strdup("in");        <br>outputs->filter_ctx = buffersrc_ctx;    <br>outputs->pad_idx    = 0;                <br>outputs->next       = outputOvrlay;     </p>
<p>outputOvrlay->name = av_strdup("overlay");   // unique name for this input/output in the list<br>outputs->filter_ctx = bufferovrlay_ctx;      // filter context associated to this input/output<br>outputs->pad_idx    = 0;                     // index of the filt_ctx pad to use for linking<br>
outputs->next       = NULL;                  // next input/output in the list, NULL if this is the last</p>
<p>inputs->name = av_strdup("out");<br>inputs->filter_ctx = buffersink_ctx;<br>inputs->pad_idx    = 0;<br>inputs->next       = NULL;</p>
<p>ret = avfilter_graph_parse(filter_graph, "overlay", &inputs, &outputs, NULL);</p>
<p>// Till now it looks all OK, but the following line causes the error: <br>// 'Output pad "default" with type video of the filter instance "input_main_filter"<br>// of buffer not connected to any destination.' <br>
ret = avfilter_graph_config(filter_graph, NULL);</p>
<p>I suppose, the reason is a wrong assigment of inputs/outputs. <br>But what exactly is wrong? What is the right way to link two ore more inputs to a filter like the 'overlay' one? Please, help.</p>
<p>Andrey.</p>
<div class="gmail_quote">On Thu, Aug 15, 2013 at 2:43 PM, Paul B Mahol <span dir="ltr"><<a href="mailto:onemda@gmail.com" target="_blank">onemda@gmail.com</a>></span> wrote:<br>
<blockquote style="BORDER-LEFT:#ccc 1px solid;MARGIN:0px 0px 0px 0.8ex;PADDING-LEFT:1ex" class="gmail_quote">
<div class="HOEnZb">
<div class="h5">On 8/15/13, Andrey Mochenov <<a href="mailto:andrey2067@gmail.com">andrey2067@gmail.com</a>> wrote:<br>> Hi,<br>><br>> We are using FFmpeg libraries git-ee94362 libavformat v55.2.100.<br>> Our purpose is to add watermark (semi-transparent PNG image) on the video.<br>
> The corresponding option in MMpeg application is "-vf".<br>><br>> Our question: How to implement the feature using FFmpeg libraries?<br><br></div></div>By using overlay filter, there are examples how to use filters with libraries.<br>
<br>><br>> Andrey Mochenov.<br>><br>_______________________________________________<br>Libav-user mailing list<br><a href="mailto:Libav-user@ffmpeg.org">Libav-user@ffmpeg.org</a><br><a href="http://ffmpeg.org/mailman/listinfo/libav-user" target="_blank">http://ffmpeg.org/mailman/listinfo/libav-user</a><br>
</blockquote></div><br></div>