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 449D045CA1 for ; Tue, 2 May 2023 20:31:17 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 8267C68B418; Tue, 2 May 2023 23:31:14 +0300 (EEST) Received: from mail-pj1-f47.google.com (mail-pj1-f47.google.com [209.85.216.47]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 7DAD268018C for ; Tue, 2 May 2023 23:31:08 +0300 (EEST) Received: by mail-pj1-f47.google.com with SMTP id 98e67ed59e1d1-24bc5645868so571744a91.0 for ; Tue, 02 May 2023 13:31:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=solt-ru.20221208.gappssmtp.com; s=20221208; t=1683059466; x=1685651466; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=FnoE1tAYW3uKcLhVsoq5C8IpkhxM1ghGzixcQ2E7wZI=; b=LHBSwEzc9vYVT6ilohs5KfdudAqJ/hbn+NQVBpCYE+RqQ3r6O+AkcFQKctEx79vzpt xrGlELug251tbiS1WttFFmGVUvWsWlKasgNd0TLlQtnkPMZGgyM6VvE2I9+Nh1HD0PF0 fz5zpKrCK5rFwsBKq14lBusSvt+bXSPr2+h83aXCcgcnnb2G6IT0w2YJQcAq4KRzoKeE OkeQZN7PJTR2bTssjTdk2wseco96TcBEXMeM7vojTjcZzqA/8QvwYheyI3342G0C5ez8 jPSmruKNpTidgGINbbiGOVVZZ6Z+e6grs25KMaXeXzSSq42ls84nJjzuSLrVsreXwZcP O8CQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1683059466; x=1685651466; h=to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=FnoE1tAYW3uKcLhVsoq5C8IpkhxM1ghGzixcQ2E7wZI=; b=FvIGUrz7IdzURXYhjQq066sC/8XJO6Ge72iA8HdefA1dhfQz7j5daNN0occbE6/TWf AHNOgZkjWam/dWtP5Ij0jHDUUsuw4tCuHhKVmI01Dhl028C93i0jBUe5AJ1DYYZvQotU DLb/Y1hj5Na2NCpcynUtqntrD+Xeoo0Ra92jvNDRQt/YuJDeNYdNvP1vSBvhIyo5qB68 BIYXC8CvaAu+uzXb5vVsnWIT1I1JQHTvYpUmlEzCYt8wSTAhEb8TjvWz13Lruz9hiTeK MCTqtRewJeaLLuAZRXolaLv/gnwQESl7KV3AJNf7UreQuxyMW3ygnqjzR8//QPBO4WIh cwlA== X-Gm-Message-State: AC+VfDzkvhh6PAaWMWJZ/QO4sxkwreHbRDkL6+4bNOj4MqZ/E2bwTDQ5 jpvFR8uA6sOspK0IDhbMV3UzRJcDYgjki/a0CF0fYAQRuPvhvRZRI68= X-Google-Smtp-Source: ACHHUZ4D6cTL5sMTwMnjgVCBm6SBzHwTAzN9XxcsM46bAHPQJ5K0vqcdYewoMPwFlUzfvBXX35ZH7OVuB2ribBGiBUA= X-Received: by 2002:a05:6a20:440d:b0:f8:ea21:7c4f with SMTP id ce13-20020a056a20440d00b000f8ea217c4fmr4355691pzb.5.1683059466046; Tue, 02 May 2023 13:31:06 -0700 (PDT) MIME-Version: 1.0 From: =?UTF-8?B?0KHQtdGA0LPQtdC5INCh0L7Qu9GC0LDQvdC+0LI=?= Date: Tue, 2 May 2023 23:30:41 +0300 Message-ID: To: ffmpeg-devel@ffmpeg.org Content-Type: multipart/mixed; boundary="0000000000009c3a4705fabbd176" X-Content-Filtered-By: Mailman/MimeDel 2.1.29 Subject: [FFmpeg-devel] sendcmd filter now can send metadata 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: --0000000000009c3a4705fabbd176 Content-Type: text/plain; charset="UTF-8" Hi! I googled tonnes of information about how to forward data from one filter to another, but nothing possible. The only way is to send some current frame data as a command with sendcmd filter, but most of it accessible by filters themselves. Most of interesting data prepared by some analysing filters like cropdetect, signalstats etc. and saved in frame metadata. It could be a good idea to send it somehow to next filters in filtergraph. So I added a small code to sendcmd filter, so it can evaluate function meta(key) in its commands when [expr] flag is used, e.g.: ------------------- ffmpeg ... -vf cropdetect=reset=1,\ sendcmd=c='0 [expr] crop x 10+meta(lavfi.cropdetect.x),\ [expr] crop y meta(lavfi.cropdetect.y)+meta(lavfi.cropdetect.h)/2,\ [expr] crop w meta(lavfi.cropdetect.w)-10\ [expr] crop h 0.5*meta(lavfi.cropdetect.h)'\ ,crop ------------------- I don't know how to use git here, so just cloned last version (v5.1) and edited f_sendcmd.c. If my contribution is interesting, I'll try to upload it into repository, but I need some help, or maybe someone will do it? Please, find updated file in attachment. -- regarts, Sergey Soltanov. I'm Winston Wolf, I solve problems. M2CONNECT.RU --0000000000009c3a4705fabbd176 Content-Type: application/octet-stream; name="f_sendcmd.c" Content-Disposition: attachment; filename="f_sendcmd.c" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lh6pygjd0 LyoKICogQ29weXJpZ2h0IChjKSAyMDEyIFN0ZWZhbm8gU2FiYXRpbmkKICoKICogVGhpcyBmaWxl IGlzIHBhcnQgb2YgRkZtcGVnLgogKgogKiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRo ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBG Rm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy cmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y IG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0 aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVn OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4s IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBV U0EKICovCgovKioKICogQGZpbGUKICogc2VuZCBjb21tYW5kcyBmaWx0ZXIKICovCgojaW5jbHVk ZSAiY29uZmlnX2NvbXBvbmVudHMuaCIKCiNpbmNsdWRlICJsaWJhdnV0aWwvYXZzdHJpbmcuaCIK I2luY2x1ZGUgImxpYmF2dXRpbC9icHJpbnQuaCIKI2luY2x1ZGUgImxpYmF2dXRpbC9ldmFsLmgi CiNpbmNsdWRlICJsaWJhdnV0aWwvZmlsZS5oIgojaW5jbHVkZSAibGliYXZ1dGlsL29wdC5oIgoj aW5jbHVkZSAibGliYXZ1dGlsL3BhcnNldXRpbHMuaCIKI2luY2x1ZGUgImF2ZmlsdGVyLmgiCiNp bmNsdWRlICJpbnRlcm5hbC5oIgojaW5jbHVkZSAiYXVkaW8uaCIKI2luY2x1ZGUgInZpZGVvLmgi CgojZGVmaW5lIENPTU1BTkRfRkxBR19FTlRFUiAxCiNkZWZpbmUgQ09NTUFORF9GTEFHX0xFQVZF IDIKI2RlZmluZSBDT01NQU5EX0ZMQUdfRVhQUiAgNAoKc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0 IHZhcl9uYW1lc1tdID0gewogICAgIk4iLCAgICAgLyogZnJhbWUgbnVtYmVyICovCiAgICAiVCIs ICAgICAvKiBmcmFtZSB0aW1lIGluIHNlY29uZHMgKi8KI2lmIEZGX0FQSV9GUkFNRV9QS1QKICAg ICJQT1MiLCAgIC8qIG9yaWdpbmFsIHBvc2l0aW9uIGluIHRoZSBmaWxlIG9mIHRoZSBmcmFtZSAq LwojZW5kaWYKICAgICJQVFMiLCAgIC8qIGZyYW1lIHB0cyAqLwogICAgIlRTIiwgICAgLyogaW50 ZXJ2YWwgc3RhcnQgdGltZSBpbiBzZWNvbmRzICovCiAgICAiVEUiLCAgICAvKiBpbnRlcnZhbCBl bmQgdGltZSBpbiBzZWNvbmRzICovCiAgICAiVEkiLCAgICAvKiBpbnRlcnZhbCBpbnRlcnBvbGF0 ZWQgdmFsdWU6IFRJID0gKFQgLSBUUykgLyAoVEUgLSBUUykgKi8KICAgICJXIiwgICAgIC8qIHdp ZHRoIGZvciB2aWRlbyBmcmFtZXMgKi8KICAgICJIIiwgICAgIC8qIGhlaWdodCBmb3IgdmlkZW8g ZnJhbWVzICovCiAgICBOVUxMCn07CgplbnVtIHZhcl9uYW1lIHsKICAgIFZBUl9OLAogICAgVkFS X1QsCiNpZiBGRl9BUElfRlJBTUVfUEtUCiAgICBWQVJfUE9TLAojZW5kaWYKICAgIFZBUl9QVFMs CiAgICBWQVJfVFMsCiAgICBWQVJfVEUsCiAgICBWQVJfVEksCiAgICBWQVJfVywKICAgIFZBUl9I LAogICAgVkFSX1ZBUlNfTkIKfTsKCnN0YXRpYyBpbmxpbmUgY2hhciAqbWFrZV9jb21tYW5kX2Zs YWdzX3N0cihBVkJQcmludCAqcGJ1ZiwgaW50IGZsYWdzKQp7CiAgICBzdGF0aWMgY29uc3QgY2hh ciAqIGNvbnN0IGZsYWdfc3RyaW5nc1tdID0geyAiZW50ZXIiLCAibGVhdmUiLCAiZXhwciIgfTsK ICAgIGludCBpLCBpc19maXJzdCA9IDE7CgogICAgYXZfYnByaW50X2luaXQocGJ1ZiwgMCwgQVZf QlBSSU5UX1NJWkVfQVVUT01BVElDKTsKICAgIGZvciAoaSA9IDA7IGkgPCBGRl9BUlJBWV9FTEVN UyhmbGFnX3N0cmluZ3MpOyBpKyspIHsKICAgICAgICBpZiAoZmxhZ3MgJiAxPDxpKSB7CiAgICAg ICAgICAgIGlmICghaXNfZmlyc3QpCiAgICAgICAgICAgICAgICBhdl9icHJpbnRfY2hhcnMocGJ1 ZiwgJysnLCAxKTsKICAgICAgICAgICAgYXZfYnByaW50ZihwYnVmLCAiJXMiLCBmbGFnX3N0cmlu Z3NbaV0pOwogICAgICAgICAgICBpc19maXJzdCA9IDA7CiAgICAgICAgfQogICAgfQoKICAgIHJl dHVybiBwYnVmLT5zdHI7Cn0KCnR5cGVkZWYgc3RydWN0IENvbW1hbmQgewogICAgaW50IGZsYWdz OwogICAgY2hhciAqdGFyZ2V0LCAqY29tbWFuZCwgKmFyZzsKICAgIGludCBpbmRleDsKfSBDb21t YW5kOwoKdHlwZWRlZiBzdHJ1Y3QgSW50ZXJ2YWwgewogICAgaW50NjRfdCBzdGFydF90czsgICAg ICAgICAgLy8vPCBzdGFydCB0aW1lc3RhbXAgZXhwcmVzc2VkIGFzIG1pY3Jvc2Vjb25kcyB1bml0 cwogICAgaW50NjRfdCBlbmRfdHM7ICAgICAgICAgICAgLy8vPCBlbmQgICB0aW1lc3RhbXAgZXhw cmVzc2VkIGFzIG1pY3Jvc2Vjb25kcyB1bml0cwogICAgaW50IGluZGV4OyAgICAgICAgICAgICAg ICAgLy8vPCB1bmlxdWUgaW5kZXggZm9yIHRoZXNlIGludGVydmFsIGNvbW1hbmRzCiAgICBDb21t YW5kICpjb21tYW5kczsKICAgIGludCAgIG5iX2NvbW1hbmRzOwogICAgaW50IGVuYWJsZWQ7ICAg ICAgICAgICAgICAgLy8vPCBjdXJyZW50IHRpbWUgZGV0ZWN0ZWQgaW5zaWRlIHRoaXMgaW50ZXJ2 YWwKfSBJbnRlcnZhbDsKCnR5cGVkZWYgc3RydWN0IFNlbmRDbWRDb250ZXh0IHsKICAgIGNvbnN0 IEFWQ2xhc3MgKmNsYXNzOwogICAgSW50ZXJ2YWwgKmludGVydmFsczsKICAgIGludCAgIG5iX2lu dGVydmFsczsKCiAgICBjaGFyICpjb21tYW5kc19maWxlbmFtZTsKICAgIGNoYXIgKmNvbW1hbmRz X3N0cjsKfSBTZW5kQ21kQ29udGV4dDsKCiNkZWZpbmUgT0ZGU0VUKHgpIG9mZnNldG9mKFNlbmRD bWRDb250ZXh0LCB4KQojZGVmaW5lIEZMQUdTIEFWX09QVF9GTEFHX0ZJTFRFUklOR19QQVJBTSB8 IEFWX09QVF9GTEFHX0FVRElPX1BBUkFNIHwgQVZfT1BUX0ZMQUdfVklERU9fUEFSQU0Kc3RhdGlj IGNvbnN0IEFWT3B0aW9uIG9wdGlvbnNbXSA9IHsKICAgIHsgImNvbW1hbmRzIiwgInNldCBjb21t YW5kcyIsIE9GRlNFVChjb21tYW5kc19zdHIpLCBBVl9PUFRfVFlQRV9TVFJJTkcsIHsuc3RyID0g TlVMTH0sIDAsIDAsIEZMQUdTIH0sCiAgICB7ICJjIiwgICAgICAgICJzZXQgY29tbWFuZHMiLCBP RkZTRVQoY29tbWFuZHNfc3RyKSwgQVZfT1BUX1RZUEVfU1RSSU5HLCB7LnN0ciA9IE5VTEx9LCAw LCAwLCBGTEFHUyB9LAogICAgeyAiZmlsZW5hbWUiLCAic2V0IGNvbW1hbmRzIGZpbGUiLCAgT0ZG U0VUKGNvbW1hbmRzX2ZpbGVuYW1lKSwgQVZfT1BUX1RZUEVfU1RSSU5HLCB7LnN0ciA9IE5VTEx9 LCAwLCAwLCBGTEFHUyB9LAogICAgeyAiZiIsICAgICAgICAic2V0IGNvbW1hbmRzIGZpbGUiLCAg T0ZGU0VUKGNvbW1hbmRzX2ZpbGVuYW1lKSwgQVZfT1BUX1RZUEVfU1RSSU5HLCB7LnN0ciA9IE5V TEx9LCAwLCAwLCBGTEFHUyB9LAogICAgeyBOVUxMIH0KfTsKCiNkZWZpbmUgU1BBQ0VTICIgXGZc dFxuXHIiCgpzdGF0aWMgdm9pZCBza2lwX2NvbW1lbnRzKGNvbnN0IGNoYXIgKipidWYpCnsKICAg IHdoaWxlICgqKmJ1ZikgewogICAgICAgIC8qIHNraXAgbGVhZGluZyBzcGFjZXMgKi8KICAgICAg ICAqYnVmICs9IHN0cnNwbigqYnVmLCBTUEFDRVMpOwogICAgICAgIGlmICgqKmJ1ZiAhPSAnIycp CiAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAoKmJ1ZikrKzsKCiAgICAgICAgLyogc2tpcCBj b21tZW50IHVudGlsIHRoZSBlbmQgb2YgbGluZSAqLwogICAgICAgICpidWYgKz0gc3RyY3Nwbigq YnVmLCAiXG4iKTsKICAgICAgICBpZiAoKipidWYpCiAgICAgICAgICAgICgqYnVmKSsrOwogICAg fQp9CgojZGVmaW5lIENPTU1BTkRfREVMSU1TICIgXGZcdFxuXHIsOyIKCnN0YXRpYyBpbnQgcGFy c2VfY29tbWFuZChDb21tYW5kICpjbWQsIGludCBjbWRfY291bnQsIGludCBpbnRlcnZhbF9jb3Vu dCwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKipidWYsIHZvaWQgKmxvZ19j dHgpCnsKICAgIGludCByZXQ7CgogICAgbWVtc2V0KGNtZCwgMCwgc2l6ZW9mKENvbW1hbmQpKTsK ICAgIGNtZC0+aW5kZXggPSBjbWRfY291bnQ7CgogICAgLyogZm9ybWF0OiBbRkxBR1NdIHRhcmdl dCBjb21tYW5kIGFyZyAqLwogICAgKmJ1ZiArPSBzdHJzcG4oKmJ1ZiwgU1BBQ0VTKTsKCiAgICAv KiBwYXJzZSBmbGFncyAqLwogICAgaWYgKCoqYnVmID09ICdbJykgewogICAgICAgICgqYnVmKSsr OyAvKiBza2lwICJbIiAqLwoKICAgICAgICB3aGlsZSAoKipidWYpIHsKICAgICAgICAgICAgaW50 IGxlbiA9IHN0cmNzcG4oKmJ1ZiwgInwrXSIpOwoKICAgICAgICAgICAgaWYgICAgICAoIXN0cm5j bXAoKmJ1ZiwgImVudGVyIiwgc3RybGVuKCJlbnRlciIpKSkgY21kLT5mbGFncyB8PSBDT01NQU5E X0ZMQUdfRU5URVI7CiAgICAgICAgICAgIGVsc2UgaWYgKCFzdHJuY21wKCpidWYsICJsZWF2ZSIs IHN0cmxlbigibGVhdmUiKSkpIGNtZC0+ZmxhZ3MgfD0gQ09NTUFORF9GTEFHX0xFQVZFOwogICAg ICAgICAgICBlbHNlIGlmICghc3RybmNtcCgqYnVmLCAiZXhwciIsICBzdHJsZW4oImV4cHIiKSkp ICBjbWQtPmZsYWdzIHw9IENPTU1BTkRfRkxBR19FWFBSOwogICAgICAgICAgICBlbHNlIHsKICAg ICAgICAgICAgICAgIGNoYXIgZmxhZ19idWZbNjRdOwogICAgICAgICAgICAgICAgYXZfc3RybGNw eShmbGFnX2J1ZiwgKmJ1Ziwgc2l6ZW9mKGZsYWdfYnVmKSk7CiAgICAgICAgICAgICAgICBhdl9s b2cobG9nX2N0eCwgQVZfTE9HX0VSUk9SLAogICAgICAgICAgICAgICAgICAgICAgICJVbmtub3du IGZsYWcgJyVzJyBpbiBpbnRlcnZhbCAjJWQsIGNvbW1hbmQgIyVkXG4iLAogICAgICAgICAgICAg ICAgICAgICAgIGZsYWdfYnVmLCBpbnRlcnZhbF9jb3VudCwgY21kX2NvdW50KTsKICAgICAgICAg ICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAg KmJ1ZiArPSBsZW47CiAgICAgICAgICAgIGlmICgqKmJ1ZiA9PSAnXScpCiAgICAgICAgICAgICAg ICBicmVhazsKICAgICAgICAgICAgaWYgKCFzdHJzcG4oKmJ1ZiwgIit8IikpIHsKICAgICAgICAg ICAgICAgIGF2X2xvZyhsb2dfY3R4LCBBVl9MT0dfRVJST1IsCiAgICAgICAgICAgICAgICAgICAg ICAgIkludmFsaWQgZmxhZ3MgY2hhciAnJWMnIGluIGludGVydmFsICMlZCwgY29tbWFuZCAjJWRc biIsCiAgICAgICAgICAgICAgICAgICAgICAgKipidWYsIGludGVydmFsX2NvdW50LCBjbWRfY291 bnQpOwogICAgICAgICAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKICAgICAgICAgICAg fQogICAgICAgICAgICBpZiAoKipidWYpCiAgICAgICAgICAgICAgICAoKmJ1ZikrKzsKICAgICAg ICB9CgogICAgICAgIGlmICgqKmJ1ZiAhPSAnXScpIHsKICAgICAgICAgICAgYXZfbG9nKGxvZ19j dHgsIEFWX0xPR19FUlJPUiwKICAgICAgICAgICAgICAgICAgICJNaXNzaW5nIGZsYWcgdGVybWlu YXRvciBvciBleHRyYW5lb3VzIGRhdGEgZm91bmQgYXQgdGhlIGVuZCBvZiBmbGFncyAiCiAgICAg ICAgICAgICAgICAgICAiaW4gaW50ZXJ2YWwgIyVkLCBjb21tYW5kICMlZFxuIiwgaW50ZXJ2YWxf Y291bnQsIGNtZF9jb3VudCk7CiAgICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7CiAg ICAgICAgfQogICAgICAgICgqYnVmKSsrOyAvKiBza2lwICJdIiAqLwogICAgfSBlbHNlIHsKICAg ICAgICBjbWQtPmZsYWdzID0gQ09NTUFORF9GTEFHX0VOVEVSOwogICAgfQoKICAgICpidWYgKz0g c3Ryc3BuKCpidWYsIFNQQUNFUyk7CiAgICBjbWQtPnRhcmdldCA9IGF2X2dldF90b2tlbihidWYs IENPTU1BTkRfREVMSU1TKTsKICAgIGlmICghY21kLT50YXJnZXQgfHwgIWNtZC0+dGFyZ2V0WzBd KSB7CiAgICAgICAgYXZfbG9nKGxvZ19jdHgsIEFWX0xPR19FUlJPUiwKICAgICAgICAgICAgICAg Ik5vIHRhcmdldCBzcGVjaWZpZWQgaW4gaW50ZXJ2YWwgIyVkLCBjb21tYW5kICMlZFxuIiwKICAg ICAgICAgICAgICAgaW50ZXJ2YWxfY291bnQsIGNtZF9jb3VudCk7CiAgICAgICAgcmV0ID0gQVZF UlJPUihFSU5WQUwpOwogICAgICAgIGdvdG8gZmFpbDsKICAgIH0KCiAgICAqYnVmICs9IHN0cnNw bigqYnVmLCBTUEFDRVMpOwogICAgY21kLT5jb21tYW5kID0gYXZfZ2V0X3Rva2VuKGJ1ZiwgQ09N TUFORF9ERUxJTVMpOwogICAgaWYgKCFjbWQtPmNvbW1hbmQgfHwgIWNtZC0+Y29tbWFuZFswXSkg ewogICAgICAgIGF2X2xvZyhsb2dfY3R4LCBBVl9MT0dfRVJST1IsCiAgICAgICAgICAgICAgICJO byBjb21tYW5kIHNwZWNpZmllZCBpbiBpbnRlcnZhbCAjJWQsIGNvbW1hbmQgIyVkXG4iLAogICAg ICAgICAgICAgICBpbnRlcnZhbF9jb3VudCwgY21kX2NvdW50KTsKICAgICAgICByZXQgPSBBVkVS Uk9SKEVJTlZBTCk7CiAgICAgICAgZ290byBmYWlsOwogICAgfQoKICAgICpidWYgKz0gc3Ryc3Bu KCpidWYsIFNQQUNFUyk7CiAgICBjbWQtPmFyZyA9IGF2X2dldF90b2tlbihidWYsIENPTU1BTkRf REVMSU1TKTsKICAgIHJldHVybiAxOwoKZmFpbDoKICAgIGF2X2ZyZWVwKCZjbWQtPnRhcmdldCk7 CiAgICBhdl9mcmVlcCgmY21kLT5jb21tYW5kKTsKICAgIGF2X2ZyZWVwKCZjbWQtPmFyZyk7CiAg ICByZXR1cm4gcmV0Owp9CgpzdGF0aWMgaW50IHBhcnNlX2NvbW1hbmRzKENvbW1hbmQgKipjbWRz LCBpbnQgKm5iX2NtZHMsIGludCBpbnRlcnZhbF9jb3VudCwKICAgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCBjaGFyICoqYnVmLCB2b2lkICpsb2dfY3R4KQp7CiAgICBpbnQgY21kX2NvdW50 ID0gMDsKICAgIGludCByZXQsIG4gPSAwOwogICAgQVZCUHJpbnQgcGJ1ZjsKCiAgICAqY21kcyA9 IE5VTEw7CiAgICAqbmJfY21kcyA9IDA7CgogICAgd2hpbGUgKCoqYnVmKSB7CiAgICAgICAgQ29t bWFuZCBjbWQ7CgogICAgICAgIGlmICgocmV0ID0gcGFyc2VfY29tbWFuZCgmY21kLCBjbWRfY291 bnQsIGludGVydmFsX2NvdW50LCBidWYsIGxvZ19jdHgpKSA8IDApCiAgICAgICAgICAgIHJldHVy biByZXQ7CiAgICAgICAgY21kX2NvdW50Kys7CgogICAgICAgIC8qIChyZSlhbGxvY2F0ZSBjb21t YW5kcyBhcnJheSBpZiByZXF1aXJlZCAqLwogICAgICAgIGlmICgqbmJfY21kcyA9PSBuKSB7CiAg ICAgICAgICAgIG4gPSBGRk1BWCgxNiwgMipuKTsgLyogZmlyc3QgYWxsb2NhdGlvbiA9IDE2LCBv ciBkb3VibGUgdGhlIG51bWJlciAqLwogICAgICAgICAgICAqY21kcyA9IGF2X3JlYWxsb2NfZigq Y21kcywgbiwgMipzaXplb2YoQ29tbWFuZCkpOwogICAgICAgICAgICBpZiAoISpjbWRzKSB7CiAg ICAgICAgICAgICAgICBhdl9sb2cobG9nX2N0eCwgQVZfTE9HX0VSUk9SLAogICAgICAgICAgICAg ICAgICAgICAgICJDb3VsZCBub3QgKHJlKWFsbG9jYXRlIGNvbW1hbmQgYXJyYXlcbiIpOwogICAg ICAgICAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKICAgICAgICAgICAgfQogICAgICAg IH0KCiAgICAgICAgKCpjbWRzKVsoKm5iX2NtZHMpKytdID0gY21kOwoKICAgICAgICAqYnVmICs9 IHN0cnNwbigqYnVmLCBTUEFDRVMpOwogICAgICAgIGlmICgqKmJ1ZiAmJiAqKmJ1ZiAhPSAnOycg JiYgKipidWYgIT0gJywnKSB7CiAgICAgICAgICAgIGF2X2xvZyhsb2dfY3R4LCBBVl9MT0dfRVJS T1IsCiAgICAgICAgICAgICAgICAgICAiTWlzc2luZyBzZXBhcmF0b3Igb3IgZXh0cmFuZW91cyBk YXRhIGZvdW5kIGF0IHRoZSBlbmQgb2YgIgogICAgICAgICAgICAgICAgICAgImludGVydmFsICMl ZCwgaW4gY29tbWFuZCAjJWRcbiIsCiAgICAgICAgICAgICAgICAgICBpbnRlcnZhbF9jb3VudCwg Y21kX2NvdW50KTsKICAgICAgICAgICAgYXZfbG9nKGxvZ19jdHgsIEFWX0xPR19FUlJPUiwKICAg ICAgICAgICAgICAgICAgICJDb21tYW5kIHdhcyBwYXJzZWQgYXM6IGZsYWdzOlslc10gdGFyZ2V0 OiVzIGNvbW1hbmQ6JXMgYXJnOiVzXG4iLAogICAgICAgICAgICAgICAgICAgbWFrZV9jb21tYW5k X2ZsYWdzX3N0cigmcGJ1ZiwgY21kLmZsYWdzKSwgY21kLnRhcmdldCwgY21kLmNvbW1hbmQsIGNt ZC5hcmcpOwogICAgICAgICAgICByZXR1cm4gQVZFUlJPUihFSU5WQUwpOwogICAgICAgIH0KICAg ICAgICBpZiAoKipidWYgPT0gJzsnKQogICAgICAgICAgICBicmVhazsKICAgICAgICBpZiAoKipi dWYgPT0gJywnKQogICAgICAgICAgICAoKmJ1ZikrKzsKICAgIH0KCiAgICByZXR1cm4gMDsKfQoK I2RlZmluZSBERUxJTVMgIiBcZlx0XG5cciw7IgoKc3RhdGljIGludCBwYXJzZV9pbnRlcnZhbChJ bnRlcnZhbCAqaW50ZXJ2YWwsIGludCBpbnRlcnZhbF9jb3VudCwKICAgICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBjaGFyICoqYnVmLCB2b2lkICpsb2dfY3R4KQp7CiAgICBjaGFyICppbnRl cnZhbHN0cjsKICAgIGludCByZXQ7CgogICAgKmJ1ZiArPSBzdHJzcG4oKmJ1ZiwgU1BBQ0VTKTsK ICAgIGlmICghKipidWYpCiAgICAgICAgcmV0dXJuIDA7CgogICAgLyogcmVzZXQgZGF0YSAqLwog ICAgbWVtc2V0KGludGVydmFsLCAwLCBzaXplb2YoSW50ZXJ2YWwpKTsKICAgIGludGVydmFsLT5p bmRleCA9IGludGVydmFsX2NvdW50OwoKICAgIC8qIGZvcm1hdDogSU5URVJWQUwgQ09NTUFORFMg Ki8KCiAgICAvKiBwYXJzZSBpbnRlcnZhbCAqLwogICAgaW50ZXJ2YWxzdHIgPSBhdl9nZXRfdG9r ZW4oYnVmLCBERUxJTVMpOwogICAgaWYgKGludGVydmFsc3RyICYmIGludGVydmFsc3RyWzBdKSB7 CiAgICAgICAgY2hhciAqc3RhcnQsICplbmQ7CgogICAgICAgIHN0YXJ0ID0gYXZfc3RydG9rKGlu dGVydmFsc3RyLCAiLSIsICZlbmQpOwogICAgICAgIGlmICghc3RhcnQpIHsKICAgICAgICAgICAg cmV0ID0gQVZFUlJPUihFSU5WQUwpOwogICAgICAgICAgICBhdl9sb2cobG9nX2N0eCwgQVZfTE9H X0VSUk9SLAogICAgICAgICAgICAgICAgICAgIkludmFsaWQgaW50ZXJ2YWwgc3BlY2lmaWNhdGlv biAnJXMnIGluIGludGVydmFsICMlZFxuIiwKICAgICAgICAgICAgICAgICAgIGludGVydmFsc3Ry LCBpbnRlcnZhbF9jb3VudCk7CiAgICAgICAgICAgIGdvdG8gZW5kOwogICAgICAgIH0KICAgICAg ICBpZiAoKHJldCA9IGF2X3BhcnNlX3RpbWUoJmludGVydmFsLT5zdGFydF90cywgc3RhcnQsIDEp KSA8IDApIHsKICAgICAgICAgICAgYXZfbG9nKGxvZ19jdHgsIEFWX0xPR19FUlJPUiwKICAgICAg ICAgICAgICAgICAgICJJbnZhbGlkIHN0YXJ0IHRpbWUgc3BlY2lmaWNhdGlvbiAnJXMnIGluIGlu dGVydmFsICMlZFxuIiwKICAgICAgICAgICAgICAgICAgIHN0YXJ0LCBpbnRlcnZhbF9jb3VudCk7 CiAgICAgICAgICAgIGdvdG8gZW5kOwogICAgICAgIH0KCiAgICAgICAgaWYgKGVuZCkgewogICAg ICAgICAgICBpZiAoKHJldCA9IGF2X3BhcnNlX3RpbWUoJmludGVydmFsLT5lbmRfdHMsIGVuZCwg MSkpIDwgMCkgewogICAgICAgICAgICAgICAgYXZfbG9nKGxvZ19jdHgsIEFWX0xPR19FUlJPUiwK ICAgICAgICAgICAgICAgICAgICAgICAiSW52YWxpZCBlbmQgdGltZSBzcGVjaWZpY2F0aW9uICcl cycgaW4gaW50ZXJ2YWwgIyVkXG4iLAogICAgICAgICAgICAgICAgICAgICAgIGVuZCwgaW50ZXJ2 YWxfY291bnQpOwogICAgICAgICAgICAgICAgZ290byBlbmQ7CiAgICAgICAgICAgIH0KICAgICAg ICB9IGVsc2UgewogICAgICAgICAgICBpbnRlcnZhbC0+ZW5kX3RzID0gSU5UNjRfTUFYOwogICAg ICAgIH0KICAgICAgICBpZiAoaW50ZXJ2YWwtPmVuZF90cyA8IGludGVydmFsLT5zdGFydF90cykg ewogICAgICAgICAgICBhdl9sb2cobG9nX2N0eCwgQVZfTE9HX0VSUk9SLAogICAgICAgICAgICAg ICAgICAgIkludmFsaWQgZW5kIHRpbWUgJyVzJyBpbiBpbnRlcnZhbCAjJWQ6ICIKICAgICAgICAg ICAgICAgICAgICJjYW5ub3QgYmUgbGVzc2VyIHRoYW4gc3RhcnQgdGltZSAnJXMnXG4iLAogICAg ICAgICAgICAgICAgICAgZW5kLCBpbnRlcnZhbF9jb3VudCwgc3RhcnQpOwogICAgICAgICAgICBy ZXQgPSBBVkVSUk9SKEVJTlZBTCk7CiAgICAgICAgICAgIGdvdG8gZW5kOwogICAgICAgIH0KICAg IH0gZWxzZSB7CiAgICAgICAgYXZfbG9nKGxvZ19jdHgsIEFWX0xPR19FUlJPUiwKICAgICAgICAg ICAgICAgIk5vIGludGVydmFsIHNwZWNpZmllZCBmb3IgaW50ZXJ2YWwgIyVkXG4iLCBpbnRlcnZh bF9jb3VudCk7CiAgICAgICAgcmV0ID0gQVZFUlJPUihFSU5WQUwpOwogICAgICAgIGdvdG8gZW5k OwogICAgfQoKICAgIC8qIHBhcnNlIGNvbW1hbmRzICovCiAgICByZXQgPSBwYXJzZV9jb21tYW5k cygmaW50ZXJ2YWwtPmNvbW1hbmRzLCAmaW50ZXJ2YWwtPm5iX2NvbW1hbmRzLAogICAgICAgICAg ICAgICAgICAgICAgICAgaW50ZXJ2YWxfY291bnQsIGJ1ZiwgbG9nX2N0eCk7CgplbmQ6CiAgICBh dl9mcmVlKGludGVydmFsc3RyKTsKICAgIHJldHVybiByZXQ7Cn0KCnN0YXRpYyBpbnQgcGFyc2Vf aW50ZXJ2YWxzKEludGVydmFsICoqaW50ZXJ2YWxzLCBpbnQgKm5iX2ludGVydmFscywKICAgICAg ICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYnVmLCB2b2lkICpsb2dfY3R4KQp7CiAg ICBpbnQgaW50ZXJ2YWxfY291bnQgPSAwOwogICAgaW50IHJldCwgbiA9IDA7CgogICAgKmludGVy dmFscyA9IE5VTEw7CiAgICAqbmJfaW50ZXJ2YWxzID0gMDsKCiAgICBpZiAoIWJ1ZikKICAgICAg ICByZXR1cm4gMDsKCiAgICB3aGlsZSAoMSkgewogICAgICAgIEludGVydmFsIGludGVydmFsOwoK ICAgICAgICBza2lwX2NvbW1lbnRzKCZidWYpOwogICAgICAgIGlmICghKCpidWYpKQogICAgICAg ICAgICBicmVhazsKCiAgICAgICAgaWYgKChyZXQgPSBwYXJzZV9pbnRlcnZhbCgmaW50ZXJ2YWws IGludGVydmFsX2NvdW50LCAmYnVmLCBsb2dfY3R4KSkgPCAwKQogICAgICAgICAgICByZXR1cm4g cmV0OwoKICAgICAgICBidWYgKz0gc3Ryc3BuKGJ1ZiwgU1BBQ0VTKTsKICAgICAgICBpZiAoKmJ1 ZikgewogICAgICAgICAgICBpZiAoKmJ1ZiAhPSAnOycpIHsKICAgICAgICAgICAgICAgIGF2X2xv Zyhsb2dfY3R4LCBBVl9MT0dfRVJST1IsCiAgICAgICAgICAgICAgICAgICAgICAgIk1pc3Npbmcg dGVybWluYXRvciBvciBleHRyYW5lb3VzIGRhdGEgZm91bmQgYXQgdGhlIGVuZCBvZiBpbnRlcnZh bCAjJWRcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJ2YWxfY291bnQpOwogICAgICAg ICAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKICAgICAgICAgICAgfQogICAgICAgICAg ICBidWYrKzsgLyogc2tpcCAnOycgKi8KICAgICAgICB9CiAgICAgICAgaW50ZXJ2YWxfY291bnQr KzsKCiAgICAgICAgLyogKHJlKWFsbG9jYXRlIGNvbW1hbmRzIGFycmF5IGlmIHJlcXVpcmVkICov CiAgICAgICAgaWYgKCpuYl9pbnRlcnZhbHMgPT0gbikgewogICAgICAgICAgICBuID0gRkZNQVgo MTYsIDIqbik7IC8qIGZpcnN0IGFsbG9jYXRpb24gPSAxNiwgb3IgZG91YmxlIHRoZSBudW1iZXIg Ki8KICAgICAgICAgICAgKmludGVydmFscyA9IGF2X3JlYWxsb2NfZigqaW50ZXJ2YWxzLCBuLCAy KnNpemVvZihJbnRlcnZhbCkpOwogICAgICAgICAgICBpZiAoISppbnRlcnZhbHMpIHsKICAgICAg ICAgICAgICAgIGF2X2xvZyhsb2dfY3R4LCBBVl9MT0dfRVJST1IsCiAgICAgICAgICAgICAgICAg ICAgICAgIkNvdWxkIG5vdCAocmUpYWxsb2NhdGUgaW50ZXJ2YWxzIGFycmF5XG4iKTsKICAgICAg ICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7CiAgICAgICAgICAgIH0KICAgICAgICB9 CgogICAgICAgICgqaW50ZXJ2YWxzKVsoKm5iX2ludGVydmFscykrK10gPSBpbnRlcnZhbDsKICAg IH0KCiAgICByZXR1cm4gMDsKfQoKc3RhdGljIGludCBjbXBfaW50ZXJ2YWxzKGNvbnN0IHZvaWQg KmEsIGNvbnN0IHZvaWQgKmIpCnsKICAgIGNvbnN0IEludGVydmFsICppMSA9IGE7CiAgICBjb25z dCBJbnRlcnZhbCAqaTIgPSBiOwogICAgcmV0dXJuIDIgKiBGRkRJRkZTSUdOKGkxLT5zdGFydF90 cywgaTItPnN0YXJ0X3RzKSArIEZGRElGRlNJR04oaTEtPmluZGV4LCBpMi0+aW5kZXgpOwp9Cgpz dGF0aWMgYXZfY29sZCBpbnQgaW5pdChBVkZpbHRlckNvbnRleHQgKmN0eCkKewogICAgU2VuZENt ZENvbnRleHQgKnMgPSBjdHgtPnByaXY7CiAgICBpbnQgcmV0LCBpLCBqOwoKICAgIGlmICgoISFz LT5jb21tYW5kc19maWxlbmFtZSArICEhcy0+Y29tbWFuZHNfc3RyKSAhPSAxKSB7CiAgICAgICAg YXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLAogICAgICAgICAgICAgICAiT25lIGFuZCBvbmx5IG9u ZSBvZiB0aGUgZmlsZW5hbWUgb3IgY29tbWFuZHMgb3B0aW9ucyBtdXN0IGJlIHNwZWNpZmllZFxu Iik7CiAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKICAgIH0KCiAgICBpZiAocy0+Y29t bWFuZHNfZmlsZW5hbWUpIHsKICAgICAgICB1aW50OF90ICpmaWxlX2J1ZiwgKmJ1ZjsKICAgICAg ICBzaXplX3QgZmlsZV9idWZzaXplOwogICAgICAgIHJldCA9IGF2X2ZpbGVfbWFwKHMtPmNvbW1h bmRzX2ZpbGVuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICZmaWxlX2J1ZiwgJmZpbGVf YnVmc2l6ZSwgMCwgY3R4KTsKICAgICAgICBpZiAocmV0IDwgMCkKICAgICAgICAgICAgcmV0dXJu IHJldDsKCiAgICAgICAgLyogY3JlYXRlIGEgMC10ZXJtaW5hdGVkIHN0cmluZyBiYXNlZCBvbiB0 aGUgcmVhZCBmaWxlICovCiAgICAgICAgYnVmID0gYXZfbWFsbG9jKGZpbGVfYnVmc2l6ZSArIDEp OwogICAgICAgIGlmICghYnVmKSB7CiAgICAgICAgICAgIGF2X2ZpbGVfdW5tYXAoZmlsZV9idWYs IGZpbGVfYnVmc2l6ZSk7CiAgICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7CiAgICAg ICAgfQogICAgICAgIG1lbWNweShidWYsIGZpbGVfYnVmLCBmaWxlX2J1ZnNpemUpOwogICAgICAg IGJ1ZltmaWxlX2J1ZnNpemVdID0gMDsKICAgICAgICBhdl9maWxlX3VubWFwKGZpbGVfYnVmLCBm aWxlX2J1ZnNpemUpOwogICAgICAgIHMtPmNvbW1hbmRzX3N0ciA9IGJ1ZjsKICAgIH0KCiAgICBp ZiAoKHJldCA9IHBhcnNlX2ludGVydmFscygmcy0+aW50ZXJ2YWxzLCAmcy0+bmJfaW50ZXJ2YWxz LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy0+Y29tbWFuZHNfc3RyLCBjdHgpKSA8 IDApCiAgICAgICAgcmV0dXJuIHJldDsKCiAgICBpZiAocy0+bmJfaW50ZXJ2YWxzID09IDApIHsK ICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJObyBjb21tYW5kcyB3ZXJlIHNwZWNp ZmllZFxuIik7CiAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKICAgIH0KCiAgICBxc29y dChzLT5pbnRlcnZhbHMsIHMtPm5iX2ludGVydmFscywgc2l6ZW9mKEludGVydmFsKSwgY21wX2lu dGVydmFscyk7CgogICAgYXZfbG9nKGN0eCwgQVZfTE9HX0RFQlVHLCAiUGFyc2VkIGNvbW1hbmRz OlxuIik7CiAgICBmb3IgKGkgPSAwOyBpIDwgcy0+bmJfaW50ZXJ2YWxzOyBpKyspIHsKICAgICAg ICBBVkJQcmludCBwYnVmOwogICAgICAgIEludGVydmFsICppbnRlcnZhbCA9ICZzLT5pbnRlcnZh bHNbaV07CiAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX1ZFUkJPU0UsICJzdGFydF90aW1lOiVm IGVuZF90aW1lOiVmIGluZGV4OiVkXG4iLAogICAgICAgICAgICAgICAoZG91YmxlKWludGVydmFs LT5zdGFydF90cy8xMDAwMDAwLCAoZG91YmxlKWludGVydmFsLT5lbmRfdHMvMTAwMDAwMCwgaW50 ZXJ2YWwtPmluZGV4KTsKICAgICAgICBmb3IgKGogPSAwOyBqIDwgaW50ZXJ2YWwtPm5iX2NvbW1h bmRzOyBqKyspIHsKICAgICAgICAgICAgQ29tbWFuZCAqY21kID0gJmludGVydmFsLT5jb21tYW5k c1tqXTsKICAgICAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX1ZFUkJPU0UsCiAgICAgICAgICAg ICAgICAgICAiICAgIFslc10gdGFyZ2V0OiVzIGNvbW1hbmQ6JXMgYXJnOiVzIGluZGV4OiVkXG4i LAogICAgICAgICAgICAgICAgICAgbWFrZV9jb21tYW5kX2ZsYWdzX3N0cigmcGJ1ZiwgY21kLT5m bGFncyksIGNtZC0+dGFyZ2V0LCBjbWQtPmNvbW1hbmQsIGNtZC0+YXJnLCBjbWQtPmluZGV4KTsK ICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIDA7Cn0KCnN0YXRpYyBhdl9jb2xkIHZvaWQgdW5p bml0KEFWRmlsdGVyQ29udGV4dCAqY3R4KQp7CiAgICBTZW5kQ21kQ29udGV4dCAqcyA9IGN0eC0+ cHJpdjsKICAgIGludCBpLCBqOwoKICAgIGZvciAoaSA9IDA7IGkgPCBzLT5uYl9pbnRlcnZhbHM7 IGkrKykgewogICAgICAgIEludGVydmFsICppbnRlcnZhbCA9ICZzLT5pbnRlcnZhbHNbaV07CiAg ICAgICAgZm9yIChqID0gMDsgaiA8IGludGVydmFsLT5uYl9jb21tYW5kczsgaisrKSB7CiAgICAg ICAgICAgIENvbW1hbmQgKmNtZCA9ICZpbnRlcnZhbC0+Y29tbWFuZHNbal07CiAgICAgICAgICAg IGF2X2ZyZWVwKCZjbWQtPnRhcmdldCk7CiAgICAgICAgICAgIGF2X2ZyZWVwKCZjbWQtPmNvbW1h bmQpOwogICAgICAgICAgICBhdl9mcmVlcCgmY21kLT5hcmcpOwogICAgICAgIH0KICAgICAgICBh dl9mcmVlcCgmaW50ZXJ2YWwtPmNvbW1hbmRzKTsKICAgIH0KICAgIGF2X2ZyZWVwKCZzLT5pbnRl cnZhbHMpOwp9CgpzdGF0aWMgaW50IGZpbHRlcl9mcmFtZShBVkZpbHRlckxpbmsgKmlubGluaywg QVZGcmFtZSAqcmVmKQp7CiAgICBBVkZpbHRlckNvbnRleHQgKmN0eCA9IGlubGluay0+ZHN0Owog ICAgU2VuZENtZENvbnRleHQgKnMgPSBjdHgtPnByaXY7CiAgICBpbnQ2NF90IHRzOwogICAgaW50 IGksIGosIHJldDsKCiAgICBpZiAocmVmLT5wdHMgPT0gQVZfTk9QVFNfVkFMVUUpCiAgICAgICAg Z290byBlbmQ7CgogICAgdHMgPSBhdl9yZXNjYWxlX3EocmVmLT5wdHMsIGlubGluay0+dGltZV9i YXNlLCBBVl9USU1FX0JBU0VfUSk7CgojZGVmaW5lIFdJVEhJTl9JTlRFUlZBTCh0cywgc3RhcnRf dHMsIGVuZF90cykgKCh0cykgPj0gKHN0YXJ0X3RzKSAmJiAodHMpIDwgKGVuZF90cykpCgogICAg Zm9yIChpID0gMDsgaSA8IHMtPm5iX2ludGVydmFsczsgaSsrKSB7CiAgICAgICAgSW50ZXJ2YWwg KmludGVydmFsID0gJnMtPmludGVydmFsc1tpXTsKICAgICAgICBpbnQgZmxhZ3MgPSAwOwoKICAg ICAgICBpZiAoIWludGVydmFsLT5lbmFibGVkICYmIFdJVEhJTl9JTlRFUlZBTCh0cywgaW50ZXJ2 YWwtPnN0YXJ0X3RzLCBpbnRlcnZhbC0+ZW5kX3RzKSkgewogICAgICAgICAgICBmbGFncyArPSBD T01NQU5EX0ZMQUdfRU5URVI7CiAgICAgICAgICAgIGludGVydmFsLT5lbmFibGVkID0gMTsKICAg ICAgICB9CiAgICAgICAgaWYgKGludGVydmFsLT5lbmFibGVkICYmICFXSVRISU5fSU5URVJWQUwo dHMsIGludGVydmFsLT5zdGFydF90cywgaW50ZXJ2YWwtPmVuZF90cykpIHsKICAgICAgICAgICAg ZmxhZ3MgKz0gQ09NTUFORF9GTEFHX0xFQVZFOwogICAgICAgICAgICBpbnRlcnZhbC0+ZW5hYmxl ZCA9IDA7CiAgICAgICAgfQogICAgICAgIGlmIChpbnRlcnZhbC0+ZW5hYmxlZCkKICAgICAgICAg ICAgZmxhZ3MgKz0gQ09NTUFORF9GTEFHX0VYUFI7CgogICAgICAgIGlmIChmbGFncykgewogICAg ICAgICAgICBBVkJQcmludCBwYnVmOwogICAgICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfVkVS Qk9TRSwKICAgICAgICAgICAgICAgICAgICJbJXNdIGludGVydmFsICMlZCBzdGFydF90czolZiBl bmRfdHM6JWYgdHM6JWZcbiIsCiAgICAgICAgICAgICAgICAgICBtYWtlX2NvbW1hbmRfZmxhZ3Nf c3RyKCZwYnVmLCBmbGFncyksIGludGVydmFsLT5pbmRleCwKICAgICAgICAgICAgICAgICAgIChk b3VibGUpaW50ZXJ2YWwtPnN0YXJ0X3RzLzEwMDAwMDAsIChkb3VibGUpaW50ZXJ2YWwtPmVuZF90 cy8xMDAwMDAwLAogICAgICAgICAgICAgICAgICAgKGRvdWJsZSl0cy8xMDAwMDAwKTsKCiAgICAg ICAgICAgIGZvciAoaiA9IDA7IGZsYWdzICYmIGogPCBpbnRlcnZhbC0+bmJfY29tbWFuZHM7IGor KykgewogICAgICAgICAgICAgICAgQ29tbWFuZCAqY21kID0gJmludGVydmFsLT5jb21tYW5kc1tq XTsKICAgICAgICAgICAgICAgIGNoYXIgKmNtZF9hcmcgPSBjbWQtPmFyZzsKICAgICAgICAgICAg ICAgIGNoYXIgYnVmWzEwMjRdOwoKICAgICAgICAgICAgICAgIGlmIChjbWQtPmZsYWdzICYgZmxh Z3MpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoY21kLT5mbGFncyAmIENPTU1BTkRfRkxBR19F WFBSKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSB2YXJfdmFsdWVzW1ZBUl9WQVJT X05CXSwgcmVzOwogICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgc3RhcnQgPSBUUzJUKGlu dGVydmFsLT5zdGFydF90cywgQVZfVElNRV9CQVNFX1EpOwogICAgICAgICAgICAgICAgICAgICAg ICBkb3VibGUgZW5kID0gVFMyVChpbnRlcnZhbC0+ZW5kX3RzLCBBVl9USU1FX0JBU0VfUSk7CiAg ICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBjdXJyZW50ID0gVFMyVChyZWYtPnB0cywgaW5s aW5rLT50aW1lX2Jhc2UpOwoJCQkJCQkKCQkJCQkJQVZEaWN0aW9uYXJ5RW50cnkgKmU7CgkJCQkJ CWNoYXIgICAqcCA9IGNtZC0+YXJnOwoJCQkJCQljaGFyICAgbWV0YV9rZXlbMTI4XTsKCQkJCQkJ c2l6ZV90IGFyZ19zdGFydD0wOwoKCQkJCQkJCiAgICAgICAgICAgICAgICAgICAgICAgIHZhcl92 YWx1ZXNbVkFSX05dICAgPSBpbmxpbmstPmZyYW1lX2NvdW50X2luOwojaWYgRkZfQVBJX0ZSQU1F X1BLVApGRl9ESVNBQkxFX0RFUFJFQ0FUSU9OX1dBUk5JTkdTCiAgICAgICAgICAgICAgICAgICAg ICAgIHZhcl92YWx1ZXNbVkFSX1BPU10gPSByZWYtPnBrdF9wb3MgPT0gLTEgPyBOQU4gOiByZWYt PnBrdF9wb3M7CkZGX0VOQUJMRV9ERVBSRUNBVElPTl9XQVJOSU5HUwojZW5kaWYKICAgICAgICAg ICAgICAgICAgICAgICAgdmFyX3ZhbHVlc1tWQVJfUFRTXSA9IFRTMkQocmVmLT5wdHMpOwogICAg ICAgICAgICAgICAgICAgICAgICB2YXJfdmFsdWVzW1ZBUl9UXSAgID0gY3VycmVudDsKICAgICAg ICAgICAgICAgICAgICAgICAgdmFyX3ZhbHVlc1tWQVJfVFNdICA9IHN0YXJ0OwogICAgICAgICAg ICAgICAgICAgICAgICB2YXJfdmFsdWVzW1ZBUl9URV0gID0gZW5kOwogICAgICAgICAgICAgICAg ICAgICAgICB2YXJfdmFsdWVzW1ZBUl9USV0gID0gKGN1cnJlbnQgLSBzdGFydCkgLyAoZW5kIC0g c3RhcnQpOwogICAgICAgICAgICAgICAgICAgICAgICB2YXJfdmFsdWVzW1ZBUl9XXSAgID0gcmVm LT53aWR0aDsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyX3ZhbHVlc1tWQVJfSF0gICA9IHJl Zi0+aGVpZ2h0OwoKLy8gKioqKioqKioqKioqKioqKioqKiogUGFyc2luZyBtZXRhKCkgZnVuY3Rp b24KCQkJCQkJYnVmWzBdPTA7IC8vTGV0J3MgdXNlIGJ1ZiB3aGlsZSBpdCBpcyBub3QgbmVlZGVk CgkJCQkJCXdoaWxlKCAocD1hdl9zdHJuc3RyKHAsIm1ldGEoIixzdHJsZW4ocCkpKSE9TlVMTCAp ewoJCQkJCQkJaW50IG1ldGFfbGVuPTA7CgkJCQkJCQlhdl9zdHJsY2F0KGJ1ZiwgY21kLT5hcmcr YXJnX3N0YXJ0LCBzdHJsZW4oYnVmKStwLWNtZC0+YXJnKzEtYXJnX3N0YXJ0KTsgLy9Db3B5IHBh cnQgYmVmb3JlIGZ1bmN0aW9uCgkJCQkJCQlhdl9zc2NhbmYocCs1LCAiJTYzW14pLF0lbiIsIG1l dGFfa2V5LCAmbWV0YV9sZW4pOwoJCQkJCQkJaWYoIW1ldGFfbGVuKXsKCQkJCQkJCQlhdl9sb2co Y3R4LCBBVl9MT0dfRVJST1IsICJJbnZhbGlkIG1ldGFkYXRhIGFyZ3VtZW50ICVzXG4iLCBjbWQt PmFyZyk7CgkJCQkJCQkJYXZfZnJhbWVfZnJlZSgmcmVmKTsKCQkJCQkJCQlyZXR1cm4gQVZFUlJP UihFSU5WQUwpOwoJCQkJCQkJfQoJCQkJCQkJZSA9IGF2X2RpY3RfZ2V0KHJlZi0+bWV0YWRhdGEs IG1ldGFfa2V5LCBOVUxMLCAwKTsKCQkJCQkJCWlmIChlICYmIGUtPnZhbHVlKXsgLy8mJiBlLT52 YWx1ZSl7CgkJCQkJCQkJYXZfc3RybGNhdChidWYsIGUtPnZhbHVlLCBzdHJsZW4oYnVmKStzdHJs ZW4oZS0+dmFsdWUpKzEpOwoJCQkJCQkJfWVsc2V7CgkJCQkJCQkJYXZfc3RybGNhdChidWYsICIw Iiwgc3RybGVuKGJ1ZikrMik7CgkJCQkJCQl9CgkJCQkJCQlwKz02K21ldGFfbGVuOwoJCQkJCQkJ YXJnX3N0YXJ0PXAtY21kLT5hcmc7CgkJCQkJCX0KCQkJCQkJaWYoYXJnX3N0YXJ0KXsgLy9JZiBt ZXRhZGF0YSBwYXJzZWQKCQkJCQkJCWF2X3N0cmxjYXQoYnVmLCBjbWQtPmFyZythcmdfc3RhcnQs IHNpemVvZihidWYpKTsgLy9Db3B5IHBhcnQgYWZ0ZXIgbGFzdCBmdW5jdGlvbgoJCQkJCQkJY21k X2FyZz1idWY7IC8vIFVzaW5nIGJ1ZiBpbnN0ZWFkIG9mIGNtZC0+YXJnCgkJCQkJCQlhdl9sb2co Y3R4LCBBVl9MT0dfREVCVUcsICJNZXRhZGF0YSBldmFsdWF0ZWQgYXJnOiAlc1xuIixjbWRfYXJn KTsKCQkJCQkJfQovLyAqKioqKioqKioqKioqKioqKioqKiBQYXJzaW5nIG1ldGEoKSBmdW5jdGlv biBFTkQKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgocmV0ID0gYXZfZXhwcl9wYXJzZV9h bmRfZXZhbCgmcmVzLCBjbWRfYXJnLCB2YXJfbmFtZXMsIHZhcl92YWx1ZXMsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxM LCBOVUxMLCBOVUxMLCBOVUxMLCAwLCBOVUxMKSkgPCAwKSB7CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJJbnZhbGlkIGV4cHJlc3Npb24gJyVz JyBmb3IgY29tbWFuZCBhcmd1bWVudC5cbiIsIGNtZC0+YXJnKTsKICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGF2X2ZyYW1lX2ZyZWUoJnJlZik7CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICByZXR1cm4gQVZFUlJPUihFSU5WQUwpOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAg ICAgICAgICAgICAgICAgICAgICBjbWRfYXJnID0gYXZfYXNwcmludGYoIiVnIiwgcmVzKTsKICAg ICAgICAgICAgICAgICAgICAgICAgaWYgKCFjbWRfYXJnKSB7CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICBhdl9mcmFtZV9mcmVlKCZyZWYpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg cmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfVkVS Qk9TRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByb2Nlc3NpbmcgY29tbWFuZCAjJWQg dGFyZ2V0OiVzIGNvbW1hbmQ6JXMgYXJnOiVzXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAg ICBjbWQtPmluZGV4LCBjbWQtPnRhcmdldCwgY21kLT5jb21tYW5kLCBjbWRfYXJnKTsKICAgICAg ICAgICAgICAgICAgICByZXQgPSBhdmZpbHRlcl9ncmFwaF9zZW5kX2NvbW1hbmQoaW5saW5rLT5n cmFwaCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY21kLT50YXJnZXQsIGNtZC0+Y29tbWFuZCwgY21kX2FyZywKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmLCBzaXplb2YoYnVmKSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVZGSUxU RVJfQ01EX0ZMQUdfT05FKTsKICAgICAgICAgICAgICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0df VkVSQk9TRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNvbW1hbmQgcmVwbHkgZm9yIGNv bW1hbmQgIyVkOiByZXQ6JXMgcmVzOiVzXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICBj bWQtPmluZGV4LCBhdl9lcnIyc3RyKHJldCksIGJ1Zik7CiAgICAgICAgICAgICAgICAgICAgaWYg KGNtZC0+ZmxhZ3MgJiBDT01NQU5EX0ZMQUdfRVhQUikKICAgICAgICAgICAgICAgICAgICAgICAg YXZfZnJlZXAoJmNtZF9hcmcpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAg ICAgfQogICAgfQoKZW5kOgogICAgc3dpdGNoIChpbmxpbmstPnR5cGUpIHsKICAgIGNhc2UgQVZN RURJQV9UWVBFX1ZJREVPOgogICAgY2FzZSBBVk1FRElBX1RZUEVfQVVESU86CiAgICAgICAgcmV0 dXJuIGZmX2ZpbHRlcl9mcmFtZShpbmxpbmstPmRzdC0+b3V0cHV0c1swXSwgcmVmKTsKICAgIH0K CiAgICByZXR1cm4gQVZFUlJPUihFTk9TWVMpOwp9CgpBVkZJTFRFUl9ERUZJTkVfQ0xBU1NfRVhU KHNlbmRjbWQsICIoYSlzZW5kY21kIiwgb3B0aW9ucyk7CgojaWYgQ09ORklHX1NFTkRDTURfRklM VEVSCgpzdGF0aWMgY29uc3QgQVZGaWx0ZXJQYWQgc2VuZGNtZF9pbnB1dHNbXSA9IHsKICAgIHsK ICAgICAgICAubmFtZSAgICAgICAgID0gImRlZmF1bHQiLAogICAgICAgIC50eXBlICAgICAgICAg PSBBVk1FRElBX1RZUEVfVklERU8sCiAgICAgICAgLmZpbHRlcl9mcmFtZSA9IGZpbHRlcl9mcmFt ZSwKICAgIH0sCn07CgpzdGF0aWMgY29uc3QgQVZGaWx0ZXJQYWQgc2VuZGNtZF9vdXRwdXRzW10g PSB7CiAgICB7CiAgICAgICAgLm5hbWUgPSAiZGVmYXVsdCIsCiAgICAgICAgLnR5cGUgPSBBVk1F RElBX1RZUEVfVklERU8sCiAgICB9LAp9OwoKY29uc3QgQVZGaWx0ZXIgZmZfdmZfc2VuZGNtZCA9 IHsKICAgIC5uYW1lICAgICAgICA9ICJzZW5kY21kIiwKICAgIC5kZXNjcmlwdGlvbiA9IE5VTExf SUZfQ09ORklHX1NNQUxMKCJTZW5kIGNvbW1hbmRzIHRvIGZpbHRlcnMuIiksCiAgICAuaW5pdCAg ICAgICAgPSBpbml0LAogICAgLnVuaW5pdCAgICAgID0gdW5pbml0LAogICAgLnByaXZfc2l6ZSAg ID0gc2l6ZW9mKFNlbmRDbWRDb250ZXh0KSwKICAgIC5mbGFncyAgICAgICA9IEFWRklMVEVSX0ZM QUdfTUVUQURBVEFfT05MWSwKICAgIEZJTFRFUl9JTlBVVFMoc2VuZGNtZF9pbnB1dHMpLAogICAg RklMVEVSX09VVFBVVFMoc2VuZGNtZF9vdXRwdXRzKSwKICAgIC5wcml2X2NsYXNzICA9ICZzZW5k Y21kX2NsYXNzLAp9OwoKI2VuZGlmCgojaWYgQ09ORklHX0FTRU5EQ01EX0ZJTFRFUgoKc3RhdGlj IGNvbnN0IEFWRmlsdGVyUGFkIGFzZW5kY21kX2lucHV0c1tdID0gewogICAgewogICAgICAgIC5u YW1lICAgICAgICAgPSAiZGVmYXVsdCIsCiAgICAgICAgLnR5cGUgICAgICAgICA9IEFWTUVESUFf VFlQRV9BVURJTywKICAgICAgICAuZmlsdGVyX2ZyYW1lID0gZmlsdGVyX2ZyYW1lLAogICAgfSwK fTsKCnN0YXRpYyBjb25zdCBBVkZpbHRlclBhZCBhc2VuZGNtZF9vdXRwdXRzW10gPSB7CiAgICB7 CiAgICAgICAgLm5hbWUgPSAiZGVmYXVsdCIsCiAgICAgICAgLnR5cGUgPSBBVk1FRElBX1RZUEVf QVVESU8sCiAgICB9LAp9OwoKY29uc3QgQVZGaWx0ZXIgZmZfYWZfYXNlbmRjbWQgPSB7CiAgICAu bmFtZSAgICAgICAgPSAiYXNlbmRjbWQiLAogICAgLmRlc2NyaXB0aW9uID0gTlVMTF9JRl9DT05G SUdfU01BTEwoIlNlbmQgY29tbWFuZHMgdG8gZmlsdGVycy4iKSwKICAgIC5wcml2X2NsYXNzICA9 ICZzZW5kY21kX2NsYXNzLAogICAgLmluaXQgICAgICAgID0gaW5pdCwKICAgIC51bmluaXQgICAg ICA9IHVuaW5pdCwKICAgIC5wcml2X3NpemUgICA9IHNpemVvZihTZW5kQ21kQ29udGV4dCksCiAg ICAuZmxhZ3MgICAgICAgPSBBVkZJTFRFUl9GTEFHX01FVEFEQVRBX09OTFksCiAgICBGSUxURVJf SU5QVVRTKGFzZW5kY21kX2lucHV0cyksCiAgICBGSUxURVJfT1VUUFVUUyhhc2VuZGNtZF9vdXRw dXRzKSwKfTsKCiNlbmRpZgo= --0000000000009c3a4705fabbd176 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". --0000000000009c3a4705fabbd176--