<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=utf-8"><meta name=Generator content="Microsoft Word 15 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:#954F72;
        text-decoration:underline;}
.MsoChpDefault
        {mso-style-type:export-only;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
        {page:WordSection1;}
--></style></head><body lang=EN-GB link=blue vlink="#954F72"><div class=WordSection1><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><o:p> </o:p></p><div style='mso-element:para-border-div;border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0cm 0cm 0cm'><p class=MsoNormal style='border:none;padding:0cm'><b>From: </b><a href="mailto:Michael.Bachmann@picsystems.ch">Michael Bachmann</a><br><b>Sent: </b>21 February 2019 13:02<br><b>To: </b><a href="mailto:libav-user@ffmpeg.org">libav-user@ffmpeg.org</a><br><b>Subject: </b>[Libav-user] Getting resulting width and height from scale filter</p></div><p class=MsoNormal><o:p> </o:p></p><p style='background:white'><span style='font-size:12.0pt;color:black'>Is there a way to get the resulting width and height from a scale filter, so i can setup the Encoding-AVCodecContext correctly (with width and height)?<br><br><br>Here's my init filter method, which gets feeded with the filter description "scale=-1:'min(720,iw)'":<br><br><br>int FFMPEGCommands::init_filters(const char *filters_descr, int width, int height, int streamFrameRate) {<br>    char args[512];<br>    int ret = 0;<br>    const AVFilter *buffersrc = avfilter_get_by_name("buffer");<br>    const AVFilter *buffersink = avfilter_get_by_name("buffersink");<br>    AVFilterInOut *outputs = avfilter_inout_alloc();<br>    AVFilterInOut *inputs = avfilter_inout_alloc();<br>    AVRational time_base = { 1, streamFrameRate };<br>    //AVRational time_base = fmt_ctx->streams[video_stream_index]->time_base;<br>    enum AVPixelFormat pix_fmts[] = { AV_PIX_FMT_YUV420P, AV_PIX_FMT_NONE };<br>    filter_graph = avfilter_graph_alloc();<br>    if (!outputs || !inputs || !filter_graph) {<br>        ret = AVERROR(ENOMEM);<br>        goto end;<br>    }<br>    /* buffer video source: the decoded frames from the decoder will be inserted here. */<br>    snprintf(args, sizeof(args),<br>        "video_size=%dx%d:pix_fmt=%d:time_base=%d/%d:pixel_aspect=%d/%d",<br>        width, height, STREAM_PIX_FMT,<br>        time_base.num, time_base.den,<br>        0, 1);<br>    ret = avfilter_graph_create_filter(&buffersrc_ctx, buffersrc, "in",<br>        args, NULL, filter_graph);<br>    if (ret < 0) {<br>        av_log(NULL, AV_LOG_ERROR, "Cannot create buffer source\n");<br>        goto end;<br>    }<br>    /* buffer video sink: to terminate the filter chain. */<br>    ret = avfilter_graph_create_filter(&buffersink_ctx, buffersink, "out",<br>        NULL, NULL, filter_graph);<br>    if (ret < 0) {<br>        av_log(NULL, AV_LOG_ERROR, "Cannot create buffer sink\n");<br>        goto end;<br>    }<br>    ret = av_opt_set_int_list(buffersink_ctx, "pix_fmts", pix_fmts,<br>        AV_PIX_FMT_NONE, AV_OPT_SEARCH_CHILDREN);<br>    if (ret < 0) {<br>        av_log(NULL, AV_LOG_ERROR, "Cannot set output pixel format\n");<br>        goto end;<br>    }<br>    /*<br>     * Set the endpoints for the filter graph. The filter_graph will<br>     * be linked to the graph described by filters_descr.<br>     */<br>     /*<br>      * The buffer source output must be connected to the input pad of<br>      * the first filter described by filters_descr; since the first<br>      * filter input label is not specified, it is set to "in" by<br>      * default.<br>      */<br>    outputs->name = av_strdup("in");<br>    outputs->filter_ctx = buffersrc_ctx;<br>    outputs->pad_idx = 0;<br>    outputs->next = NULL;<br>    /*<br>     * The buffer sink input must be connected to the output pad of<br>     * the last filter described by filters_descr; since the last<br>     * filter output label is not specified, it is set to "out" by<br>     * default.<br>     */<br>    inputs->name = av_strdup("out");<br>    inputs->filter_ctx = buffersink_ctx;<br>    inputs->pad_idx = 0;<br>    inputs->next = NULL;<br>    if ((ret = avfilter_graph_parse_ptr(filter_graph, filters_descr,<br>        &inputs, &outputs, NULL)) < 0)<br>        goto end;<br>    if ((ret = avfilter_graph_config(filter_graph, NULL)) < 0)<br>        goto end;<br>end:<br>    avfilter_inout_free(&inputs);<br>    avfilter_inout_free(&outputs);<br>    return ret;<br>}<br><br><br><o:p></o:p></span></p><p class=MsoNormal>The info you are seeking should be available here filter_ctx.buffersink_ctx->inputs[0]->w  for width and filter_ctx.buffersink_ctx->inputs[0]->h for height. <o:p></o:p></p></div></body></html>