From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id 2653044537 for ; Wed, 14 Sep 2022 18:03:40 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id BE81B68BB64; Wed, 14 Sep 2022 21:03:37 +0300 (EEST) Received: from mail-ej1-f48.google.com (mail-ej1-f48.google.com [209.85.218.48]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id D3E5368B97D for ; Wed, 14 Sep 2022 21:03:31 +0300 (EEST) Received: by mail-ej1-f48.google.com with SMTP id sb3so7011528ejb.9 for ; Wed, 14 Sep 2022 11:03:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=netflix.com; s=google; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :from:to:cc:subject:date; bh=2aKW0MItGwMd6hKxGN+2ctkwWWwOZdEGTbJCGsUmx98=; b=FPq+FLtyV0rH8B3pZEoCQ/ih3wCUCJhvgokIwqVBPhUzaffnm8kiQSwrCRsjnrI+8S J5QO356kJSy1vr4X+vYfKWRvxbB2aEJaFdZVd0Swhj7DyUU5oZFt5cEpAcScEq/6VVwk VJqL07mXHgO3iXE2hzBCx9Mn7Zhthw66qgeU8= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :x-gm-message-state:from:to:cc:subject:date; bh=2aKW0MItGwMd6hKxGN+2ctkwWWwOZdEGTbJCGsUmx98=; b=ww9TT8oiSwSUf7AdV3Ix02/zTQ59GvXgQJsCmU+/BMefxcgwR5kYOXvvSVRC6vQgja jxVTP83zRybLCnzVfmHjmZPKA+m2DuE00R5KrzE7vD/6HIJ3m2e8K2GtLIDZscsJB0Nt VwS21SB61630gUiSuFHBHRkU+Ak42Iitd7hcG25CXcUVwKJfIw8yD1uObS+Vpg4P8eDV yuHe4Evw2fQR0pgAiqOxxBBLvXQGE4mxAad+lSMu1mDDRnjkNI/Hog2yBji6GUYHLmLo p52Yr2F7fePEr9Eg5qyG7FilP6Ajb3JX+OhEsYXCYNozo324wdnUfyqJaivAlxZaYD7H p/Pw== X-Gm-Message-State: ACgBeo20VvDlztieXSXlyECLKByQJ/HipEW+nuPYb+8rdocgv6WTl9Ao sC3+0OQDVcT7MDuXqHzrnbbY+b0nqJS99JJpj2S/C85trQF28g== X-Google-Smtp-Source: AA6agR6GxEAsPhJlonjM7jemaFm1FzsbZS3TKWsSkwUPSoJP8sFcc0KPyYW8Pz0i4k+1jtc/BTrIalQqJtDHloqXXHk= X-Received: by 2002:a17:907:5c5:b0:77d:ea1:44c with SMTP id wg5-20020a17090705c500b0077d0ea1044cmr11995369ejb.305.1663178610677; Wed, 14 Sep 2022 11:03:30 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Li-Heng Chen Date: Wed, 14 Sep 2022 11:03:19 -0700 Message-ID: To: FFmpeg development discussions and patches Content-Type: multipart/mixed; boundary="0000000000004a65bc05e8a6f2eb" Subject: Re: [FFmpeg-devel] [PATCH] libavfilter/f_select: switch to activate and properly handle EOF pts X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: --0000000000004a65bc05e8a6f2eb Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Wed, Sep 14, 2022 at 8:14 AM Nicolas George wrote: > > Li-Heng Chen (12022-09-13): > > This patch solves a potential EOF pts bug that can be triggered with ot= her filters: when placing select filter before fps filter, the EOF pts in `= f_select` always indicate the last input frame regardless of the frame sele= cted. This may cause unwanted duplication of the last-selected-frame in `vf= _fps`. Switching the filtering process from `filter_frame` to `activate` al= lows to properly set EOF pts by ff_outlink_set_status. > > Thanks for the patch. A few comments. > Thanks for the comment, Nicolas! I've attached a new patch file which should address the comments. I also want to mention that this patch is similar to another one Paul had done for setpts filter: http://git.videolan.org/?p=3Dffmpeg.git;a=3Dcommitdiff;h=3D2a546fb7d5722c30= 6dd42c715137e5e493b0d5be > First, please wrap this paragraph. Also, the patch seems to have been > corrupted by the mail software, please look into it. > > Also, please explain the logic you used to set the end timestamp. It > seems you are using some kind of weird test to use the timestamp of the > fist not-selected frame. > The attached patch should have the commit message wrapped, and I have also added a comment in the code to explain the logic: /* Two conditions that current pts could be the EOF pts: * - If the current frame N is not selected while the previous * frame (N-1) is selected, frame N-1 could be the last frame, * hence we update select->eof_pts. * - Last input frame: we have EOF status, and the current (last) * frame is selected */ > In fact, I have doubt about the validity of this patch at all. You will > notice that the select filters does not alter the timestamps of the > frames. The frames that are not selected are skipped, but they count for > the timing. I do not think the final frames should behave differently. > This patch does not change the frame timestamps. Instead, we added another variable select->eof_pts to track possible EOF pts. It sets the EOF pts as the pts *after* the last selected frame (e.g. if the last frame selected by the filter is frame 20, EOF pts is set as the pts of frame 21) > > This bug can be reproduced by the ffmpeg cmd below (bitstreams in > > fate-suite can reproduce this issue): > > > > ffmpeg -y -i /path/ffmpeg/fate-suite/h264/bbc2.sample.h264 -vf select= =3D'gte(n\,0)*gte(24\,n)',fps=3D25/1 out.y4m > > I do not think it shows a bug. If you want to truncate the stream, the > select filter is not the recommended choice, use trim. > I have also tested the trim filter, which does not present this bug. Howeve= r, if you do -vf select=3D'eq(n\,24)',fps=3D25/1 on the above example, this se= lected frame will also be duplicated 21 times, which is also not an expected behav= ior for the select filter. > > > > Signed-off-by: Li-Heng Chen > > --- > > libavfilter/f_select.c | 49 +++++++++++++++++++++++++++++++++--------- > > 1 file changed, 39 insertions(+), 10 deletions(-) > > > > diff --git a/libavfilter/f_select.c b/libavfilter/f_select.c > > index 1cfe2d59e5..e01f476b5b 100644 > > --- a/libavfilter/f_select.c > > +++ b/libavfilter/f_select.c > > @@ -33,6 +33,7 @@ > > #include "libavutil/opt.h" > > #include "libavutil/pixdesc.h" > > #include "avfilter.h" > > +#include "filters.h" > > #include "audio.h" > > #include "formats.h" > > #include "internal.h" > > @@ -159,6 +160,7 @@ typedef struct SelectContext { > > double select; > > int select_out; ///< mark the selected output pad i= ndex > > int nb_outputs; > > + int64_t eof_pts; > > } SelectContext; > > > > #define OFFSET(x) offsetof(SelectContext, x) > > @@ -215,6 +217,7 @@ static int config_input(AVFilterLink *inlink) > > > > select->bitdepth =3D desc->comp[0].depth; > > select->nb_planes =3D is_yuv ? 1 : av_pix_fmt_count_planes(inlink->= format); > > + select->eof_pts =3D AV_NOPTS_VALUE; > > > > for (int plane =3D 0; plane < select->nb_planes; plane++) { > > ptrdiff_t line_size =3D av_image_get_linesize(inlink->format, i= nlink->w, plane); > > @@ -336,7 +339,7 @@ static void select_frame(AVFilterContext *ctx, AVFr= ame *frame) > > if (isnan(select->var_values[VAR_START_T])) > > select->var_values[VAR_START_T] =3D TS2D(frame->pts) * av_q2d(i= nlink->time_base); > > > > - select->var_values[VAR_N ] =3D inlink->frame_count_out; > > + select->var_values[VAR_N ] =3D inlink->frame_count_out - 1; > > select->var_values[VAR_PTS] =3D TS2D(frame->pts); > > select->var_values[VAR_T ] =3D TS2D(frame->pts) * av_q2d(inlink->t= ime_base); > > select->var_values[VAR_POS] =3D frame->pkt_pos =3D=3D -1 ? NAN : fr= ame->pkt_pos; > > @@ -409,17 +412,43 @@ static void select_frame(AVFilterContext *ctx, AV= Frame *frame) > > select->var_values[VAR_PREV_T] =3D select->var_values[VAR_T]; > > } > > > > -static int filter_frame(AVFilterLink *inlink, AVFrame *frame) > > +static int activate(AVFilterContext *ctx) > > { > > - AVFilterContext *ctx =3D inlink->dst; > > + int ret, status; > > SelectContext *select =3D ctx->priv; > > + AVFilterLink *inlink =3D ctx->inputs[0]; > > + AVFilterLink *outlink =3D ctx->outputs[0]; > > + AVFrame *in; > > + int64_t pts; > > > > - select_frame(ctx, frame); > > - if (select->select) > > - return ff_filter_frame(ctx->outputs[select->select_out], frame= ); > > + FF_FILTER_FORWARD_STATUS_BACK(outlink, inlink); > > > > - av_frame_free(&frame); > > - return 0; > > + ret =3D ff_inlink_consume_frame(inlink, &in); > > + if (ret < 0) > > + return ret; > > + if (ret > 0) { > > + select_frame(ctx, in); > > + if (select->select) > > + return ff_filter_frame(ctx->outputs[select->select_out], i= n); > > + } > > + av_frame_free(&in); > > + > > + ret =3D ff_inlink_acknowledge_status(inlink, &status, &pts); > > + > > > + if (((int64_t)select->var_values[VAR_N] - (int64_t)select->var_val= ues[VAR_PREV_SELECTED_N] =3D=3D 1) || > > Do not bring back integer values that have been converted to float. The > real value of var_values[VAR_N] is available; if > var_values[VAR_PREV_SELECTED_N] is necessary too introduce a field to > keep track of its exact value. > fixed in the attached patch > > + (status =3D=3D AVERROR_EOF && select->select)) > > + select->eof_pts =3D pts; > > + > > > + if (ret && status =3D=3D AVERROR_EOF) { > > The status has to be forwarded even if it is other than EOF. > fixed in the attached patch (I removed status =3D=3D AVERROR_EOF) > > + av_log(ctx, AV_LOG_TRACE, "N:EOF PTS:%"PRId64"\n", > > + select->eof_pts); > > + ff_outlink_set_status(outlink, status, select->eof_pts); > > + return 0; > > + } > > + > > + FF_FILTER_FORWARD_WANTED(outlink, inlink); > > + > > + return FFERROR_NOT_READY; > > } > > > > static int request_frame(AVFilterLink *outlink) > > @@ -467,7 +496,6 @@ static const AVFilterPad avfilter_af_aselect_inputs= [] =3D { > > .name =3D "default", > > .type =3D AVMEDIA_TYPE_AUDIO, > > .config_props =3D config_input, > > - .filter_frame =3D filter_frame, > > }, > > }; > > > > @@ -475,6 +503,7 @@ const AVFilter ff_af_aselect =3D { > > .name =3D "aselect", > > .description =3D NULL_IF_CONFIG_SMALL("Select audio frames to pass = in output."), > > .init =3D aselect_init, > > + .activate =3D activate, > > .uninit =3D uninit, > > .priv_size =3D sizeof(SelectContext), > > FILTER_INPUTS(avfilter_af_aselect_inputs), > > @@ -522,7 +551,6 @@ static const AVFilterPad avfilter_vf_select_inputs[= ] =3D { > > .name =3D "default", > > .type =3D AVMEDIA_TYPE_VIDEO, > > .config_props =3D config_input, > > - .filter_frame =3D filter_frame, > > }, > > }; > > > > @@ -530,6 +558,7 @@ const AVFilter ff_vf_select =3D { > > .name =3D "select", > > .description =3D NULL_IF_CONFIG_SMALL("Select video frames to pas= s in output."), > > .init =3D select_init, > > + .activate =3D activate, > > .uninit =3D uninit, > > .priv_size =3D sizeof(SelectContext), > > .priv_class =3D &select_class, > > Regards, > > -- > Nicolas George > _______________________________________________ > ffmpeg-devel mailing list > ffmpeg-devel@ffmpeg.org > https://ffmpeg.org/mailman/listinfo/ffmpeg-devel > > To unsubscribe, visit link above, or email > ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". --0000000000004a65bc05e8a6f2eb Content-Type: application/octet-stream; name="0001-libavfilter-f_select-switch-to-activate-and-properly.patch" Content-Disposition: attachment; filename="0001-libavfilter-f_select-switch-to-activate-and-properly.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l81x0tdw0 RnJvbSAzODlkODliM2YxZjhkM2MwZWI5YjY0NDdmMjM5YWQ4MTc2NmRkMzQ4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBMaS1IZW5nIENoZW4gPGxpaGVuZ2NAbmV0ZmxpeC5jb20+CkRh dGU6IFNhdCwgMTAgU2VwIDIwMjIgMjI6NTg6NDAgLTA3MDAKU3ViamVjdDogW1BBVENIXSBsaWJh dmZpbHRlci9mX3NlbGVjdDogc3dpdGNoIHRvIGFjdGl2YXRlIGFuZCBwcm9wZXJseSBoYW5kbGUK IEVPRiBwdHMKTUlNRS1WZXJzaW9uOiAxLjAKQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFy c2V0PVVURi04CkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKClRoaXMgcGF0Y2ggc29s dmVzIGEgcG90ZW50aWFsIEVPRiBwdHMgYnVnIHRoYXQgY2FuIGJlIHRyaWdnZXJlZCB3aXRowqBv dGhlciBmaWx0ZXJzOgp3aGVuIHBsYWNpbmfCoHNlbGVjdMKgZmlsdGVyIGJlZm9yZcKgZnBzwqBm aWx0ZXIsIHRoZSBFT0YgcHRzIGluwqBgZl9zZWxlY3RgwqBhbHdheXMKaW5kaWNhdGUgdGhlwqBs YXN0IGlucHV0IGZyYW1lIHJlZ2FyZGxlc3Mgb2YgdGhlIGZyYW1lIHNlbGVjdGVkLiBUaGlzIG1h eSBjYXVzZQp1bndhbnRlZCBkdXBsaWNhdGlvbiBvZiB0aGXCoGxhc3Qtc2VsZWN0ZWQtZnJhbWXC oGluwqBgdmZfZnBzYC4gU3dpdGNoaW5nIHRoZQpmaWx0ZXJpbmcgcHJvY2VzcyBmcm9twqBgZmls dGVyX2ZyYW1lYMKgdG/CoGBhY3RpdmF0ZWAgYWxsb3dzIHRvIHByb3Blcmx5IHNldApFT0YgcHRz IGJ5wqBmZl9vdXRsaW5rX3NldF9zdGF0dXMuCgpUaGlzIGJ1ZyBjYW4gYmUgcmVwcm9kdWNlZCBi eSB0aGUgZmZtcGVnIGNtZCBiZWxvdyAoYml0c3RyZWFtcyBpbiBmYXRlLXN1aXRlCmNhbiByZXBy b2R1Y2UgdGhpcyBpc3N1ZSk6CgpmZm1wZWcgLXkgLWkgL3BhdGgvZmZtcGVnL2ZhdGUtc3VpdGUv aDI2NC9iYmMyLnNhbXBsZS5oMjY0IC12ZiBzZWxlY3Q9J2d0ZShuXCwwKSpndGUoMjRcLG4pJyxm cHM9MjUvMSBvdXQueTRtCgp3L28gZnBzPTI1LzE6IG91dHB1dHMgMjYgZnJhbWVzCncvICBmcHM9 MjUvMTogb3V0cHV0cyA0NyBmcmFtZXMsIHdoZXJlIGZyYW1lICMyNSBpcyBkdXBsaWNhdGVkIDIy IHRpbWVzLgoKU2lnbmVkLW9mZi1ieTogTGktSGVuZyBDaGVuIDxsaWhlbmdjQG5ldGZsaXguY29t PgotLS0KIGxpYmF2ZmlsdGVyL2Zfc2VsZWN0LmMgfCA1NSArKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCA0NSBpbnNlcnRpb25zKCspLCAx MCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9saWJhdmZpbHRlci9mX3NlbGVjdC5jIGIvbGli YXZmaWx0ZXIvZl9zZWxlY3QuYwppbmRleCAxY2ZlMmQ1OWU1Li5mODM4OTFjNjE4IDEwMDY0NAot LS0gYS9saWJhdmZpbHRlci9mX3NlbGVjdC5jCisrKyBiL2xpYmF2ZmlsdGVyL2Zfc2VsZWN0LmMK QEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJsaWJhdnV0aWwvb3B0LmgiCiAjaW5jbHVkZSAi bGliYXZ1dGlsL3BpeGRlc2MuaCIKICNpbmNsdWRlICJhdmZpbHRlci5oIgorI2luY2x1ZGUgImZp bHRlcnMuaCIKICNpbmNsdWRlICJhdWRpby5oIgogI2luY2x1ZGUgImZvcm1hdHMuaCIKICNpbmNs dWRlICJpbnRlcm5hbC5oIgpAQCAtMTU5LDYgKzE2MCw3IEBAIHR5cGVkZWYgc3RydWN0IFNlbGVj dENvbnRleHQgewogICAgIGRvdWJsZSBzZWxlY3Q7CiAgICAgaW50IHNlbGVjdF9vdXQ7ICAgICAg ICAgICAgICAgICAvLy88IG1hcmsgdGhlIHNlbGVjdGVkIG91dHB1dCBwYWQgaW5kZXgKICAgICBp bnQgbmJfb3V0cHV0czsKKyAgICBpbnQ2NF90IGVvZl9wdHM7CiB9IFNlbGVjdENvbnRleHQ7CiAK ICNkZWZpbmUgT0ZGU0VUKHgpIG9mZnNldG9mKFNlbGVjdENvbnRleHQsIHgpCkBAIC0yMTUsNiAr MjE3LDcgQEAgc3RhdGljIGludCBjb25maWdfaW5wdXQoQVZGaWx0ZXJMaW5rICppbmxpbmspCiAK ICAgICBzZWxlY3QtPmJpdGRlcHRoID0gZGVzYy0+Y29tcFswXS5kZXB0aDsKICAgICBzZWxlY3Qt Pm5iX3BsYW5lcyA9IGlzX3l1diA/IDEgOiBhdl9waXhfZm10X2NvdW50X3BsYW5lcyhpbmxpbmst PmZvcm1hdCk7CisgICAgc2VsZWN0LT5lb2ZfcHRzID0gQVZfTk9QVFNfVkFMVUU7CiAKICAgICBm b3IgKGludCBwbGFuZSA9IDA7IHBsYW5lIDwgc2VsZWN0LT5uYl9wbGFuZXM7IHBsYW5lKyspIHsK ICAgICAgICAgcHRyZGlmZl90IGxpbmVfc2l6ZSA9IGF2X2ltYWdlX2dldF9saW5lc2l6ZShpbmxp bmstPmZvcm1hdCwgaW5saW5rLT53LCBwbGFuZSk7CkBAIC0zMzYsNyArMzM5LDcgQEAgc3RhdGlj IHZvaWQgc2VsZWN0X2ZyYW1lKEFWRmlsdGVyQ29udGV4dCAqY3R4LCBBVkZyYW1lICpmcmFtZSkK ICAgICBpZiAoaXNuYW4oc2VsZWN0LT52YXJfdmFsdWVzW1ZBUl9TVEFSVF9UXSkpCiAgICAgICAg IHNlbGVjdC0+dmFyX3ZhbHVlc1tWQVJfU1RBUlRfVF0gPSBUUzJEKGZyYW1lLT5wdHMpICogYXZf cTJkKGlubGluay0+dGltZV9iYXNlKTsKIAotICAgIHNlbGVjdC0+dmFyX3ZhbHVlc1tWQVJfTiAg XSA9IGlubGluay0+ZnJhbWVfY291bnRfb3V0OworICAgIHNlbGVjdC0+dmFyX3ZhbHVlc1tWQVJf TiAgXSA9IGlubGluay0+ZnJhbWVfY291bnRfb3V0IC0gMTsKICAgICBzZWxlY3QtPnZhcl92YWx1 ZXNbVkFSX1BUU10gPSBUUzJEKGZyYW1lLT5wdHMpOwogICAgIHNlbGVjdC0+dmFyX3ZhbHVlc1tW QVJfVCAgXSA9IFRTMkQoZnJhbWUtPnB0cykgKiBhdl9xMmQoaW5saW5rLT50aW1lX2Jhc2UpOwog ICAgIHNlbGVjdC0+dmFyX3ZhbHVlc1tWQVJfUE9TXSA9IGZyYW1lLT5wa3RfcG9zID09IC0xID8g TkFOIDogZnJhbWUtPnBrdF9wb3M7CkBAIC00MDksMTcgKzQxMiw0OSBAQCBzdGF0aWMgdm9pZCBz ZWxlY3RfZnJhbWUoQVZGaWx0ZXJDb250ZXh0ICpjdHgsIEFWRnJhbWUgKmZyYW1lKQogICAgIHNl bGVjdC0+dmFyX3ZhbHVlc1tWQVJfUFJFVl9UXSAgID0gc2VsZWN0LT52YXJfdmFsdWVzW1ZBUl9U XTsKIH0KIAotc3RhdGljIGludCBmaWx0ZXJfZnJhbWUoQVZGaWx0ZXJMaW5rICppbmxpbmssIEFW RnJhbWUgKmZyYW1lKQorc3RhdGljIGludCBhY3RpdmF0ZShBVkZpbHRlckNvbnRleHQgKmN0eCkK IHsKLSAgICBBVkZpbHRlckNvbnRleHQgKmN0eCA9IGlubGluay0+ZHN0OworICAgIGludCByZXQs IHN0YXR1czsKICAgICBTZWxlY3RDb250ZXh0ICpzZWxlY3QgPSBjdHgtPnByaXY7CisgICAgQVZG aWx0ZXJMaW5rICppbmxpbmsgPSBjdHgtPmlucHV0c1swXTsKKyAgICBBVkZpbHRlckxpbmsgKm91 dGxpbmsgPSBjdHgtPm91dHB1dHNbMF07CisgICAgQVZGcmFtZSAqaW47CisgICAgaW50NjRfdCBw dHM7CiAKLSAgICBzZWxlY3RfZnJhbWUoY3R4LCBmcmFtZSk7Ci0gICAgaWYgKHNlbGVjdC0+c2Vs ZWN0KQotICAgICAgICByZXR1cm4gZmZfZmlsdGVyX2ZyYW1lKGN0eC0+b3V0cHV0c1tzZWxlY3Qt PnNlbGVjdF9vdXRdLCBmcmFtZSk7CisgICAgRkZfRklMVEVSX0ZPUldBUkRfU1RBVFVTX0JBQ0so b3V0bGluaywgaW5saW5rKTsKIAotICAgIGF2X2ZyYW1lX2ZyZWUoJmZyYW1lKTsKLSAgICByZXR1 cm4gMDsKKyAgICByZXQgPSBmZl9pbmxpbmtfY29uc3VtZV9mcmFtZShpbmxpbmssICZpbik7Cisg ICAgaWYgKHJldCA8IDApCisgICAgICAgIHJldHVybiByZXQ7CisgICAgaWYgKHJldCA+IDApIHsK KyAgICAgICAgc2VsZWN0X2ZyYW1lKGN0eCwgaW4pOworICAgICAgICBpZiAoc2VsZWN0LT5zZWxl Y3QpCisgICAgICAgICAgICByZXR1cm4gZmZfZmlsdGVyX2ZyYW1lKGN0eC0+b3V0cHV0c1tzZWxl Y3QtPnNlbGVjdF9vdXRdLCBpbik7CisgICAgfQorICAgIGF2X2ZyYW1lX2ZyZWUoJmluKTsKKwor ICAgIHJldCA9IGZmX2lubGlua19hY2tub3dsZWRnZV9zdGF0dXMoaW5saW5rLCAmc3RhdHVzLCAm cHRzKTsKKworICAgIC8qIFR3byBjb25kaXRpb25zIHRoYXQgY3VycmVudCBwdHMgY291bGQgYmUg dGhlIEVPRiBwdHM6CisgICAgICogLSBJZiB0aGUgY3VycmVudCBmcmFtZSBOIGlzIG5vdCBzZWxl Y3RlZCB3aGlsZSB0aGUgcHJldmlvdXMKKyAgICAgKiAgIGZyYW1lIChOLTEpIGlzIHNlbGVjdGVk LCBmcmFtZSBOLTEgY291bGQgYmUgdGhlIGxhc3QgZnJhbWUsCisgICAgICogICBoZW5jZSB3ZSB1 cGRhdGUgc2VsZWN0LT5lb2ZfcHRzLgorICAgICAqIC0gTGFzdCBpbnB1dCBmcmFtZTogd2UgaGF2 ZSBFT0Ygc3RhdHVzLCBhbmQgdGhlIGN1cnJlbnQgKGxhc3QpCisgICAgICogICBmcmFtZSBpcyBz ZWxlY3RlZCAqLworICAgIGlmICgoc2VsZWN0LT52YXJfdmFsdWVzW1ZBUl9OXSAtIHNlbGVjdC0+ dmFyX3ZhbHVlc1tWQVJfUFJFVl9TRUxFQ1RFRF9OXSA9PSAxLjApIHx8CisgICAgICAgIChzdGF0 dXMgPT0gQVZFUlJPUl9FT0YgJiYgc2VsZWN0LT5zZWxlY3QpKQorICAgICAgICBzZWxlY3QtPmVv Zl9wdHMgPSBwdHM7CisKKyAgICBpZiAocmV0KSB7CisgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xP R19UUkFDRSwgIk46RU9GIFBUUzolIlBSSWQ2NCJcbiIsCisgICAgICAgICAgICAgICBzZWxlY3Qt PmVvZl9wdHMpOworICAgICAgICBmZl9vdXRsaW5rX3NldF9zdGF0dXMob3V0bGluaywgc3RhdHVz LCBzZWxlY3QtPmVvZl9wdHMpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBGRl9G SUxURVJfRk9SV0FSRF9XQU5URUQob3V0bGluaywgaW5saW5rKTsKKworICAgIHJldHVybiBGRkVS Uk9SX05PVF9SRUFEWTsKIH0KIAogc3RhdGljIGludCByZXF1ZXN0X2ZyYW1lKEFWRmlsdGVyTGlu ayAqb3V0bGluaykKQEAgLTQ2Nyw3ICs1MDIsNiBAQCBzdGF0aWMgY29uc3QgQVZGaWx0ZXJQYWQg YXZmaWx0ZXJfYWZfYXNlbGVjdF9pbnB1dHNbXSA9IHsKICAgICAgICAgLm5hbWUgICAgICAgICA9 ICJkZWZhdWx0IiwKICAgICAgICAgLnR5cGUgICAgICAgICA9IEFWTUVESUFfVFlQRV9BVURJTywK ICAgICAgICAgLmNvbmZpZ19wcm9wcyA9IGNvbmZpZ19pbnB1dCwKLSAgICAgICAgLmZpbHRlcl9m cmFtZSA9IGZpbHRlcl9mcmFtZSwKICAgICB9LAogfTsKIApAQCAtNDc1LDYgKzUwOSw3IEBAIGNv bnN0IEFWRmlsdGVyIGZmX2FmX2FzZWxlY3QgPSB7CiAgICAgLm5hbWUgICAgICAgID0gImFzZWxl Y3QiLAogICAgIC5kZXNjcmlwdGlvbiA9IE5VTExfSUZfQ09ORklHX1NNQUxMKCJTZWxlY3QgYXVk aW8gZnJhbWVzIHRvIHBhc3MgaW4gb3V0cHV0LiIpLAogICAgIC5pbml0ICAgICAgICA9IGFzZWxl Y3RfaW5pdCwKKyAgICAuYWN0aXZhdGUgICAgPSBhY3RpdmF0ZSwKICAgICAudW5pbml0ICAgICAg PSB1bmluaXQsCiAgICAgLnByaXZfc2l6ZSAgID0gc2l6ZW9mKFNlbGVjdENvbnRleHQpLAogICAg IEZJTFRFUl9JTlBVVFMoYXZmaWx0ZXJfYWZfYXNlbGVjdF9pbnB1dHMpLApAQCAtNTIyLDcgKzU1 Nyw2IEBAIHN0YXRpYyBjb25zdCBBVkZpbHRlclBhZCBhdmZpbHRlcl92Zl9zZWxlY3RfaW5wdXRz W10gPSB7CiAgICAgICAgIC5uYW1lICAgICAgICAgPSAiZGVmYXVsdCIsCiAgICAgICAgIC50eXBl ICAgICAgICAgPSBBVk1FRElBX1RZUEVfVklERU8sCiAgICAgICAgIC5jb25maWdfcHJvcHMgPSBj b25maWdfaW5wdXQsCi0gICAgICAgIC5maWx0ZXJfZnJhbWUgPSBmaWx0ZXJfZnJhbWUsCiAgICAg fSwKIH07CiAKQEAgLTUzMCw2ICs1NjQsNyBAQCBjb25zdCBBVkZpbHRlciBmZl92Zl9zZWxlY3Qg PSB7CiAgICAgLm5hbWUgICAgICAgICAgPSAic2VsZWN0IiwKICAgICAuZGVzY3JpcHRpb24gICA9 IE5VTExfSUZfQ09ORklHX1NNQUxMKCJTZWxlY3QgdmlkZW8gZnJhbWVzIHRvIHBhc3MgaW4gb3V0 cHV0LiIpLAogICAgIC5pbml0ICAgICAgICAgID0gc2VsZWN0X2luaXQsCisgICAgLmFjdGl2YXRl ICAgICAgPSBhY3RpdmF0ZSwKICAgICAudW5pbml0ICAgICAgICA9IHVuaW5pdCwKICAgICAucHJp dl9zaXplICAgICA9IHNpemVvZihTZWxlY3RDb250ZXh0KSwKICAgICAucHJpdl9jbGFzcyAgICA9 ICZzZWxlY3RfY2xhc3MsCi0tIAoyLjMyLjEgKEFwcGxlIEdpdC0xMzMpCgo= --0000000000004a65bc05e8a6f2eb Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". --0000000000004a65bc05e8a6f2eb--