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 108B9408F9 for ; Thu, 3 Mar 2022 15:44:59 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id C71D268AF8B; Thu, 3 Mar 2022 17:44:57 +0200 (EET) Received: from mail-io1-f54.google.com (mail-io1-f54.google.com [209.85.166.54]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 5182568AF5C for ; Thu, 3 Mar 2022 17:44:51 +0200 (EET) Received: by mail-io1-f54.google.com with SMTP id r8so6255988ioj.9 for ; Thu, 03 Mar 2022 07:44:51 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=message-id:date:mime-version:user-agent:from:subject:to :content-language; bh=N/kzSfEWspPS7JZ/X0qDCktAYfZZI29IgOZNFtH+5uo=; b=FYH+Joc3FIFuBlqV15QVRi0WcHahLcsO+y9DiXfZJ36g3SkiAThBABH6T2jB2WjqUS fa/kfJ5Wkh9758nU0X43OMwURDdfBAD8aRGgKZu6IPMxq8bdpaFcM6noTjGrFcI4xv9H NZeT/1rjFY8piIhOh0yemQtjAPzXbmAl1iNnUwu3bT/vhSWIRM7Ny10cG33XuBz8nb4Q Sy+hAcmo41mK/2JOw1vRZHOSNygKD/R0rqJGWr1wBqLr4ebAsn0eVWLjmx3wGfbWY3bA 89/tygBNjMGazess272MkNyaQSkGfiFEeKPzOUOce/2wDdnltYoC8+pQG/kv+WcG2SJr COKA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:message-id:date:mime-version:user-agent:from :subject:to:content-language; bh=N/kzSfEWspPS7JZ/X0qDCktAYfZZI29IgOZNFtH+5uo=; b=ZXPYD6Z5FZhR84D3PWPRvSKfrkcd2+kOKcj1QcYSpuCK72/zxDUQjHFA+8eCxUtETN gmnBFUy3bJvZr5KXXQBrbfiGhhbBUC4JA7pywypSUL7OdTXr1LR2jQ3htoLyTfGV1XRW xCwhAkA9+UvdOtR+qrj0fJd91b812xJ24cHDkSPwquGJ93pZWbGTFW/0X3OepHpgUBlS Bl90BW9hdKkDz6W/40L2zbapTITcc1rG5EkYTszPU0jyTN/PFT8zYfWnKMFwDEtL5/J9 aTpSXlw8ZTePd56/bHRwl0ou3dG1BWRDwkuijZueV7tGkPDn8blyx8ZZJ1Xt+evwp9Me CsRw== X-Gm-Message-State: AOAM5309oiP6in3VELA/QGxF30bDzIo5WV2sLGK3tFqfwGwE4jvQ+5EZ U7h3WOJdepzwPYD0FS0ldVUg0LgAZ0d0bA== X-Google-Smtp-Source: ABdhPJwVg6jA4nR+VJCemlZ2HZIlBir43ss1HkHhRTNjqH0REGClFOpkxruGApdCNrVIenb+N4lgTg== X-Received: by 2002:a02:294a:0:b0:317:3541:3b9a with SMTP id p71-20020a02294a000000b0031735413b9amr16311043jap.101.1646322288548; Thu, 03 Mar 2022 07:44:48 -0800 (PST) Received: from [192.168.7.86] (c-68-40-205-18.hsd1.mi.comcast.net. [68.40.205.18]) by smtp.gmail.com with ESMTPSA id q190-20020a6b8ec7000000b00638d75f5cd0sm2435776iod.47.2022.03.03.07.44.47 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 03 Mar 2022 07:44:47 -0800 (PST) Content-Type: multipart/mixed; boundary="------------Q1aX2ISpMLBbxv9eeXS6Jhnk" Message-ID: <0692ba87-361f-498a-dc08-85d771f6bdaf@gmail.com> Date: Thu, 3 Mar 2022 10:44:46 -0500 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.6.1 From: Jack Bruienne To: ffmpeg-devel@ffmpeg.org Content-Language: en-US Subject: [FFmpeg-devel] [PATCH v6 1/2] libavcodec: Added DFPWM1a codec 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: This is a multi-part message in MIME format. --------------Q1aX2ISpMLBbxv9eeXS6Jhnk Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit From the wiki page (https://wiki.vexatos.com/dfpwm): > DFPWM (Dynamic Filter Pulse Width Modulation) is an audio codec > created by Ben “GreaseMonkey” Russell in 2012, originally to be used > as a voice codec for asiekierka's pixmess, a C remake of 64pixels. > It is a 1-bit-per-sample codec which uses a dynamic-strength one-pole > low-pass filter as a predictor. Due to the fact that a raw DPFWM decoding > creates a high-pitched whine, it is often followed by some post-processing > filters to make the stream more listenable. It has recently gained popularity through the ComputerCraft mod for Minecraft, which added support for audio through this codec, as well as the Computronics expansion which preceeded the official support. These both implement the slightly adjusted 1a version of the codec, which is the version I have chosen for this patch. This patch adds a new codec (with encoding and decoding) for DFPWM1a. The codec sources are pretty simple: they use the reference codec with a basic wrapper to connect it to the FFmpeg AVCodec system. To clarify, the codec does not have a specific sample rate - it is provided by the container (or user), which is typically 48000, but has also been known to be 32768. The codec does not specify channel info either, and it's pretty much always used with one mono channel. However, since it appears that libavcodec expects both sample rate and channel count to be handled by either the codec or container, I have made the decision to allow multiple channels interleaved, which as far as I know has never been used, but it works fine here nevertheless. The accompanying raw format has a channels option to set this. (I expect most users of this will not use multiple channels, but it remains an option just in case.) This patch will be highly useful to ComputerCraft developers who are working with audio, as it is the standard format for audio, and there are few user-friendly encoders out there, and even fewer decoders. It will streamline the process for importing and listening to audio, replacing the need to write code or use tools that require very specific input formats. You may use the CraftOS-PC program (https://www.craftos-pc.cc) to test out DFPWM playback. To use it, run the program and type this command: "attach left speaker" Then run "speaker play " for each file. The app runs in a sandbox, so files have to be transferred in first; the easiest way to do this is to simply drag the file on the window. (Or copy files to the folder at https://www.craftos-pc.cc/docs/saves.) Sample DFPWM files can be generated with an online tool at https://music.madefor.cc. This is the current best way to encode DFPWM files. Simply drag an audio file onto the page, and it will encode it, giving a download link on the page. I've made sure to update all of the docs as per Developer§7, and I've tested it as per section 8. Test files encoded to DFPWM play correctly in ComputerCraft, and other files that work in CC are correctly decoded. I have also verified that corrupt files do not crash the decoder - this should theoretically not be an issue as the result size is constant with respect to the input size. Changes since v5: Moved channel check to init, and added sample size check in decoder. Changes since v4: Fixed missing channel check in decoder. Changes since v3: Added support for multiple interleaved channels, and cleaned up the code a bunch. Changes since v2: I've found that the reference encoder has a few errors, and sounds worse than the Java-based implementation that is used most often. I got in contact with someone who knows DFPWM much better than I do, and I worked with them to make a few adjustments that should improve the audio quality. I also made sure that the output matches the Java codec exactly, so it should have the exact same quality as other codecs. Signed-off-by: Jack Bruienne --- Changelog | 1 + MAINTAINERS | 1 + doc/general_contents.texi | 1 + libavcodec/Makefile | 2 + libavcodec/allcodecs.c | 2 + libavcodec/codec_desc.c | 7 ++ libavcodec/codec_id.h | 1 + libavcodec/dfpwmdec.c | 134 ++++++++++++++++++++++++++++++++++++++ libavcodec/dfpwmenc.c | 121 ++++++++++++++++++++++++++++++++++ libavcodec/utils.c | 2 + libavcodec/version.h | 4 +- 11 files changed, 274 insertions(+), 2 deletions(-) create mode 100644 libavcodec/dfpwmdec.c create mode 100644 libavcodec/dfpwmenc.c --------------Q1aX2ISpMLBbxv9eeXS6Jhnk Content-Type: text/x-patch; charset=UTF-8; name="v6-0001-libavcodec-Added-DFPWM1a-codec.patch" Content-Disposition: attachment; filename="v6-0001-libavcodec-Added-DFPWM1a-codec.patch" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL0NoYW5nZWxvZyBiL0NoYW5nZWxvZwppbmRleCA1YWQyY2VmLi41MTcw YTZhIDEwMDY0NAotLS0gYS9DaGFuZ2Vsb2cKKysrIGIvQ2hhbmdlbG9nCkBAIC00LDYgKzQs NyBAQCByZWxlYXNlcyBhcmUgc29ydGVkIGZyb20geW91bmdlc3QgdG8gb2xkZXN0LgogdmVy c2lvbiA1LjE6CiAtIGRpYWxvZ3VlIGVuaGFuY2UgYXVkaW8gZmlsdGVyCiAtIGRyb3BwZWQg b2Jzb2xldGUgWHZNQyBod2FjY2VsCistIERGUFdNIGF1ZGlvIGVuY29kZXIvZGVjb2Rlcgog CiAKIHZlcnNpb24gNS4wOgpkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVS UwppbmRleCBmMzNjY2JkLi41N2I2ZjMzIDEwMDY0NAotLS0gYS9NQUlOVEFJTkVSUworKysg Yi9NQUlOVEFJTkVSUwpAQCAtMTYxLDYgKzE2MSw3IEBAIENvZGVjczoKICAgY3NjZC5jICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWltYXIgRG9lZmZpbmdlcgogICBjdXZp ZGRlYy5jICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRpbW8gUm90aGVucGllbGVyCiAg IGRjYSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9vODYKKyAgZGZwd20q ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKYWNrIEJydWllbm5lCiAgIGRpcmFj KiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUm9zdGlzbGF2IFBlaGxpdmFub3YK ICAgZG54aGQqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCYXB0aXN0ZSBDb3Vk dXJpZXIKICAgZG9sYnlfZSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb284Ngpk aWZmIC0tZ2l0IGEvZG9jL2dlbmVyYWxfY29udGVudHMudGV4aSBiL2RvYy9nZW5lcmFsX2Nv bnRlbnRzLnRleGkKaW5kZXggZGYxNjkyYy4uMTRhZWFlZCAxMDA2NDQKLS0tIGEvZG9jL2dl bmVyYWxfY29udGVudHMudGV4aQorKysgYi9kb2MvZ2VuZXJhbF9jb250ZW50cy50ZXhpCkBA IC0xMTk0LDYgKzExOTQsNyBAQCBmb2xsb3dpbmcgaW1hZ2UgZm9ybWF0cyBhcmUgc3VwcG9y dGVkOgogQGl0ZW0gQ1JJIEhDQSAgICAgICAgICAgICAgICBAdGFiICAgICBAdGFiIFgKIEBp dGVtIERlbHBoaW5lIFNvZnR3YXJlIEludGVybmF0aW9uYWwgQ0lOIGF1ZGlvICBAdGFiICAg ICBAdGFiICBYCiAgICAgQHRhYiBDb2RlYyB1c2VkIGluIERlbHBoaW5lIFNvZnR3YXJlIElu dGVybmF0aW9uYWwgZ2FtZXMuCitAaXRlbSBERlBXTSAgICAgICAgICAgICAgICAgIEB0YWIg IFggIEB0YWIgIFgKIEBpdGVtIERpZ2l0YWwgU3BlZWNoIFN0YW5kYXJkIC0gU3RhbmRhcmQg UGxheSBtb2RlIChEU1MgU1ApIEB0YWIgICAgIEB0YWIgIFgKIEBpdGVtIERpc2N3b3JsZCBJ SSBCTVYgQXVkaW8gQHRhYiAgICAgQHRhYiAgWAogQGl0ZW0gQ09PSyAgICAgICAgICAgICAg ICAgICBAdGFiICAgICBAdGFiICBYCmRpZmYgLS1naXQgYS9saWJhdmNvZGVjL01ha2VmaWxl IGIvbGliYXZjb2RlYy9NYWtlZmlsZQppbmRleCAyNGVmZmE4Li4wMWNiNGIyIDEwMDY0NAot LS0gYS9saWJhdmNvZGVjL01ha2VmaWxlCisrKyBiL2xpYmF2Y29kZWMvTWFrZWZpbGUKQEAg LTI4OSw2ICsyODksOCBAQCBPQkpTLSQoQ09ORklHX0RFUkZfRFBDTV9ERUNPREVSKSAgICAg ICArPSBkcGNtLm8KIE9CSlMtJChDT05GSUdfRElSQUNfREVDT0RFUikgICAgICAgICAgICs9 IGRpcmFjZGVjLm8gZGlyYWMubyBkaXJhY2RzcC5vIGRpcmFjdGFiLm8gXAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyYWNfYXJpdGgubyBkaXJhY19k d3QubyBkaXJhY192bGMubwogT0JKUy0kKENPTkZJR19ERkFfREVDT0RFUikgICAgICAgICAg ICAgKz0gZGZhLm8KK09CSlMtJChDT05GSUdfREZQV01fREVDT0RFUikgICAgICAgICAgICs9 IGRmcHdtZGVjLm8KK09CSlMtJChDT05GSUdfREZQV01fRU5DT0RFUikgICAgICAgICAgICs9 IGRmcHdtZW5jLm8KIE9CSlMtJChDT05GSUdfRE5YSERfREVDT0RFUikgICAgICAgICAgICs9 IGRueGhkZGVjLm8gZG54aGRkYXRhLm8KIE9CSlMtJChDT05GSUdfRE5YSERfRU5DT0RFUikg ICAgICAgICAgICs9IGRueGhkZW5jLm8gZG54aGRkYXRhLm8KIE9CSlMtJChDT05GSUdfRE9M QllfRV9ERUNPREVSKSAgICAgICAgICs9IGRvbGJ5X2UubyBkb2xieV9lX3BhcnNlLm8ga2Jk d2luLm8KZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvYWxsY29kZWNzLmMgYi9saWJhdmNvZGVj L2FsbGNvZGVjcy5jCmluZGV4IGQxZTEwMTkuLmMzYTBjMjYgMTAwNjQ0Ci0tLSBhL2xpYmF2 Y29kZWMvYWxsY29kZWNzLmMKKysrIGIvbGliYXZjb2RlYy9hbGxjb2RlY3MuYwpAQCAtNDM3 LDYgKzQzNyw4IEBAIGV4dGVybiBjb25zdCBBVkNvZGVjIGZmX2Jtdl9hdWRpb19kZWNvZGVy OwogZXh0ZXJuIGNvbnN0IEFWQ29kZWMgZmZfY29va19kZWNvZGVyOwogZXh0ZXJuIGNvbnN0 IEFWQ29kZWMgZmZfZGNhX2VuY29kZXI7CiBleHRlcm4gY29uc3QgQVZDb2RlYyBmZl9kY2Ff ZGVjb2RlcjsKK2V4dGVybiBjb25zdCBBVkNvZGVjIGZmX2RmcHdtX2VuY29kZXI7CitleHRl cm4gY29uc3QgQVZDb2RlYyBmZl9kZnB3bV9kZWNvZGVyOwogZXh0ZXJuIGNvbnN0IEFWQ29k ZWMgZmZfZG9sYnlfZV9kZWNvZGVyOwogZXh0ZXJuIGNvbnN0IEFWQ29kZWMgZmZfZHNkX2xz YmZfZGVjb2RlcjsKIGV4dGVybiBjb25zdCBBVkNvZGVjIGZmX2RzZF9tc2JmX2RlY29kZXI7 CmRpZmYgLS1naXQgYS9saWJhdmNvZGVjL2NvZGVjX2Rlc2MuYyBiL2xpYmF2Y29kZWMvY29k ZWNfZGVzYy5jCmluZGV4IDcyNWM2ODcuLjgxZjNiM2MgMTAwNjQ0Ci0tLSBhL2xpYmF2Y29k ZWMvY29kZWNfZGVzYy5jCisrKyBiL2xpYmF2Y29kZWMvY29kZWNfZGVzYy5jCkBAIC0zMjM3 LDYgKzMyMzcsMTMgQEAgc3RhdGljIGNvbnN0IEFWQ29kZWNEZXNjcmlwdG9yIGNvZGVjX2Rl c2NyaXB0b3JzW10gPSB7CiAgICAgICAgIC5sb25nX25hbWUgPSBOVUxMX0lGX0NPTkZJR19T TUFMTCgiTVNOIFNpcmVuIiksCiAgICAgICAgIC5wcm9wcyAgICAgPSBBVl9DT0RFQ19QUk9Q X0lOVFJBX09OTFkgfCBBVl9DT0RFQ19QUk9QX0xPU1NZLAogICAgIH0sCisgICAgeworICAg ICAgICAuaWQgICAgICAgID0gQVZfQ09ERUNfSURfREZQV00sCisgICAgICAgIC50eXBlICAg ICAgPSBBVk1FRElBX1RZUEVfQVVESU8sCisgICAgICAgIC5uYW1lICAgICAgPSAiZGZwd20i LAorICAgICAgICAubG9uZ19uYW1lID0gTlVMTF9JRl9DT05GSUdfU01BTEwoIkRGUFdNIChE eW5hbWljIEZpbHRlciBQdWxzZSBXaWR0aCBNb2R1bGF0aW9uKSIpLAorICAgICAgICAucHJv cHMgICAgID0gQVZfQ09ERUNfUFJPUF9MT1NTWSwKKyAgICB9LAogCiAgICAgLyogc3VidGl0 bGUgY29kZWNzICovCiAgICAgewpkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy9jb2RlY19pZC5o IGIvbGliYXZjb2RlYy9jb2RlY19pZC5oCmluZGV4IGFiMjY1ZWMuLjNmZmI5YmQgMTAwNjQ0 Ci0tLSBhL2xpYmF2Y29kZWMvY29kZWNfaWQuaAorKysgYi9saWJhdmNvZGVjL2NvZGVjX2lk LmgKQEAgLTUxNiw2ICs1MTYsNyBAQCBlbnVtIEFWQ29kZWNJRCB7CiAgICAgQVZfQ09ERUNf SURfSENBLAogICAgIEFWX0NPREVDX0lEX0ZBU1RBVURJTywKICAgICBBVl9DT0RFQ19JRF9N U05TSVJFTiwKKyAgICBBVl9DT0RFQ19JRF9ERlBXTSwKIAogICAgIC8qIHN1YnRpdGxlIGNv ZGVjcyAqLwogICAgIEFWX0NPREVDX0lEX0ZJUlNUX1NVQlRJVExFID0gMHgxNzAwMCwgICAg ICAgICAgLy8vPCBBIGR1bW15IElEIHBvaW50aW5nIGF0IHRoZSBzdGFydCBvZiBzdWJ0aXRs ZSBjb2RlY3MuCmRpZmYgLS1naXQgYS9saWJhdmNvZGVjL2RmcHdtZGVjLmMgYi9saWJhdmNv ZGVjL2RmcHdtZGVjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDVm Nzk0NAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmF2Y29kZWMvZGZwd21kZWMuYwpAQCAtMCww ICsxLDEzNCBAQAorLyoKKyAqIERGUFdNIGRlY29kZXIKKyAqIENvcHlyaWdodCAoYykgMjAy MiBKYWNrIEJydWllbm5lCisgKiBDb3B5cmlnaHQgKGMpIDIwMTIsIDIwMTYgQmVuICJHcmVh c2VNb25rZXkiIFJ1c3NlbGwKKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcu CisgKgorICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExl c3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUg TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg KiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisg KiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVl IFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp ZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCisgKi8KKworLyoqCisgKiBA ZmlsZQorICogREZQV00xYSBkZWNvZGVyCisgKi8KKworI2luY2x1ZGUgImxpYmF2dXRpbC9p bnRlcm5hbC5oIgorI2luY2x1ZGUgImF2Y29kZWMuaCIKKyNpbmNsdWRlICJjb2RlY19pZC5o IgorI2luY2x1ZGUgImludGVybmFsLmgiCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBpbnQg ZnEsIHEsIHMsIGx0OworfSBERlBXTVN0YXRlOworCisvLyBERlBXTSBjb2RlYyBmcm9tIGh0 dHBzOi8vZ2l0aHViLmNvbS9DaGVuVGhyZWFkL2RmcHdtL2Jsb2IvbWFzdGVyLzFhLworLy8g TGljZW5zZWQgaW4gdGhlIHB1YmxpYyBkb21haW4KKworc3RhdGljIHZvaWQgYXVfZGVjb21w cmVzcyhERlBXTVN0YXRlICpzdGF0ZSwgaW50IGZzLCBpbnQgbGVuLCB1aW50OF90ICpvdXRi dWYsIHVpbnQ4X3QgKmluYnVmKQoreworICAgIHVuc2lnbmVkIGQ7CisgICAgZm9yIChpbnQg aSA9IDA7IGkgPCBsZW47IGkrKykgeworICAgICAgICAvLyBnZXQgYml0cworICAgICAgICBk ID0gKihpbmJ1ZisrKTsKKyAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCA4OyBqKyspIHsK KyAgICAgICAgICAgIGludCBucSwgbHEsIHN0LCBucywgb3Y7CisgICAgICAgICAgICAvLyBz ZXQgdGFyZ2V0CisgICAgICAgICAgICBpbnQgdCA9ICgoZCYxKSA/IDEyNyA6IC0xMjgpOwor ICAgICAgICAgICAgZCA+Pj0gMTsKKworICAgICAgICAgICAgLy8gYWRqdXN0IGNoYXJnZQor ICAgICAgICAgICAgbnEgPSBzdGF0ZS0+cSArICgoc3RhdGUtPnMgKiAodC1zdGF0ZS0+cSkg KyA1MTIpPj4xMCk7CisgICAgICAgICAgICBpZihucSA9PSBzdGF0ZS0+cSAmJiBucSAhPSB0 KQorICAgICAgICAgICAgICAgIG5xICs9ICh0ID09IDEyNyA/IDEgOiAtMSk7CisgICAgICAg ICAgICBscSA9IHN0YXRlLT5xOworICAgICAgICAgICAgc3RhdGUtPnEgPSBucTsKKworICAg ICAgICAgICAgLy8gYWRqdXN0IHN0cmVuZ3RoCisgICAgICAgICAgICBzdCA9ICh0ICE9IHN0 YXRlLT5sdCA/IDAgOiAxMDIzKTsKKyAgICAgICAgICAgIG5zID0gc3RhdGUtPnM7CisgICAg ICAgICAgICBpZihucyAhPSBzdCkKKyAgICAgICAgICAgICAgICBucyArPSAoc3QgIT0gMCA/ IDEgOiAtMSk7CisgICAgICAgICAgICBpZihucyA8IDgpIG5zID0gODsKKyAgICAgICAgICAg IHN0YXRlLT5zID0gbnM7CisKKyAgICAgICAgICAgIC8vIEZJTFRFUjogcGVyZm9ybSBhbnRp amVyaworICAgICAgICAgICAgb3YgPSAodCAhPSBzdGF0ZS0+bHQgPyAobnErbHErMSk+PjEg OiBucSk7CisKKyAgICAgICAgICAgIC8vIEZJTFRFUjogcGVyZm9ybSBMUEYKKyAgICAgICAg ICAgIHN0YXRlLT5mcSArPSAoKGZzKihvdi1zdGF0ZS0+ZnEpICsgMHg4MCk+PjgpOworICAg ICAgICAgICAgb3YgPSBzdGF0ZS0+ZnE7CisKKyAgICAgICAgICAgIC8vIG91dHB1dCBzYW1w bGUKKyAgICAgICAgICAgICoob3V0YnVmKyspID0gb3YgKyAxMjg7CisKKyAgICAgICAgICAg IHN0YXRlLT5sdCA9IHQ7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N0YXRpYyBhdl9jb2xk IGludCBkZnB3bV9kZWNfaW5pdChzdHJ1Y3QgQVZDb2RlY0NvbnRleHQgKmN0eCkKK3sKKyAg ICBERlBXTVN0YXRlICpzdGF0ZSA9IGN0eC0+cHJpdl9kYXRhOworCisgICAgaWYgKGN0eC0+ Y2hhbm5lbHMgPD0gMCkgeworICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJJ bnZhbGlkIG51bWJlciBvZiBjaGFubmVsc1xuIik7CisgICAgICAgIHJldHVybiBBVkVSUk9S KEVJTlZBTCk7CisgICAgfQorCisgICAgc3RhdGUtPmZxID0gMDsKKyAgICBzdGF0ZS0+cSA9 IDA7CisgICAgc3RhdGUtPnMgPSAwOworICAgIHN0YXRlLT5sdCA9IC0xMjg7CisKKyAgICBj dHgtPnNhbXBsZV9mbXQgPSBBVl9TQU1QTEVfRk1UX1U4OworICAgIGN0eC0+Yml0c19wZXJf cmF3X3NhbXBsZSA9IDg7CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkZnB3 bV9kZWNfZnJhbWUoc3RydWN0IEFWQ29kZWNDb250ZXh0ICpjdHgsIHZvaWQgKmRhdGEsCisg ICAgaW50ICpnb3RfZnJhbWUsIHN0cnVjdCBBVlBhY2tldCAqcGFja2V0KQoreworICAgIERG UFdNU3RhdGUgKnN0YXRlID0gY3R4LT5wcml2X2RhdGE7CisgICAgQVZGcmFtZSAqZnJhbWUg PSBkYXRhOworICAgIGludCByZXQ7CisKKyAgICBmcmFtZS0+bmJfc2FtcGxlcyA9IHBhY2tl dC0+c2l6ZSAqIDggLyBjdHgtPmNoYW5uZWxzOworICAgIGlmIChmcmFtZS0+bmJfc2FtcGxl cyA8PSAwKSB7CisgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgImludmFsaWQg bnVtYmVyIG9mIHNhbXBsZXMgaW4gcGFja2V0XG4iKTsKKyAgICAgICAgcmV0dXJuIEFWRVJS T1JfSU5WQUxJRERBVEE7CisgICAgfQorCisgICAgaWYgKChyZXQgPSBmZl9nZXRfYnVmZmVy KGN0eCwgZnJhbWUsIDApKSA8IDApCisgICAgICAgIHJldHVybiByZXQ7CisKKyAgICBhdV9k ZWNvbXByZXNzKHN0YXRlLCAxNDAsIHBhY2tldC0+c2l6ZSwgZnJhbWUtPmRhdGFbMF0sIHBh Y2tldC0+ZGF0YSk7CisKKyAgICAqZ290X2ZyYW1lID0gMTsKKyAgICByZXR1cm4gcGFja2V0 LT5zaXplOworfQorCitjb25zdCBBVkNvZGVjIGZmX2RmcHdtX2RlY29kZXIgPSB7CisgICAg Lm5hbWUgICAgICAgICAgID0gImRmcHdtIiwKKyAgICAubG9uZ19uYW1lICAgICAgPSBOVUxM X0lGX0NPTkZJR19TTUFMTCgiREZQV00xYSBhdWRpbyIpLAorICAgIC50eXBlICAgICAgICAg ICA9IEFWTUVESUFfVFlQRV9BVURJTywKKyAgICAuaWQgICAgICAgICAgICAgPSBBVl9DT0RF Q19JRF9ERlBXTSwKKyAgICAucHJpdl9kYXRhX3NpemUgPSBzaXplb2YoREZQV01TdGF0ZSks CisgICAgLmluaXQgICAgICAgICAgID0gZGZwd21fZGVjX2luaXQsCisgICAgLmRlY29kZSAg ICAgICAgID0gZGZwd21fZGVjX2ZyYW1lLAorICAgIC5jYXBhYmlsaXRpZXMgICA9IEFWX0NP REVDX0NBUF9EUjEsCisgICAgLmNhcHNfaW50ZXJuYWwgID0gRkZfQ09ERUNfQ0FQX0lOSVRf VEhSRUFEU0FGRSwKK307CmRpZmYgLS1naXQgYS9saWJhdmNvZGVjL2RmcHdtZW5jLmMgYi9s aWJhdmNvZGVjL2RmcHdtZW5jLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MC4uMDJmMmU2NAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmF2Y29kZWMvZGZwd21lbmMuYwpA QCAtMCwwICsxLDEyMSBAQAorLyoKKyAqIERGUFdNIGVuY29kZXIKKyAqIENvcHlyaWdodCAo YykgMjAyMiBKYWNrIEJydWllbm5lCisgKiBDb3B5cmlnaHQgKGMpIDIwMTIsIDIwMTYgQmVu ICJHcmVhc2VNb25rZXkiIFJ1c3NlbGwKKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBG Rm1wZWcuCisgKgorICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0 cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIuMSBv ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K KyAqCisgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hv dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi bGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRo ZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl ZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCisgKi8KKworLyoq CisgKiBAZmlsZQorICogREZQV00xYSBlbmNvZGVyCisgKi8KKworI2luY2x1ZGUgImxpYmF2 dXRpbC9pbnRlcm5hbC5oIgorI2luY2x1ZGUgImF2Y29kZWMuaCIKKyNpbmNsdWRlICJjb2Rl Y19pZC5oIgorI2luY2x1ZGUgImVuY29kZS5oIgorI2luY2x1ZGUgImludGVybmFsLmgiCisK K3R5cGVkZWYgc3RydWN0IHsKKyAgICBpbnQgZnEsIHEsIHMsIGx0OworfSBERlBXTVN0YXRl OworCisvLyBERlBXTSBjb2RlYyBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9DaGVuVGhyZWFk L2RmcHdtL2Jsb2IvbWFzdGVyLzFhLworLy8gTGljZW5zZWQgaW4gdGhlIHB1YmxpYyBkb21h aW4KKworLy8gbm90ZSwgbGVuIGRlbm90ZXMgaG93IG1hbnkgY29tcHJlc3NlZCBieXRlcyB0 aGVyZSBhcmUgKHVuY29tcHJlc3NlZCBieXRlcyAvIDgpLgorc3RhdGljIHZvaWQgYXVfY29t cHJlc3MoREZQV01TdGF0ZSAqc3RhdGUsIGludCBsZW4sIHVpbnQ4X3QgKm91dGJ1ZiwgdWlu dDhfdCAqaW5idWYpCit7CisgICAgdW5zaWduZWQgZCA9IDA7CisgICAgZm9yIChpbnQgaSA9 IDA7IGkgPCBsZW47IGkrKykgeworICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IDg7IGor KykgeworICAgICAgICAgICAgaW50IG5xLCBzdCwgbnM7CisgICAgICAgICAgICAvLyBnZXQg c2FtcGxlCisgICAgICAgICAgICBpbnQgdiA9ICooaW5idWYrKykgLSAxMjg7CisgICAgICAg ICAgICAvLyBzZXQgYml0IC8gdGFyZ2V0CisgICAgICAgICAgICBpbnQgdCA9ICh2ID4gc3Rh dGUtPnEgfHwgKHYgPT0gc3RhdGUtPnEgJiYgdiA9PSAxMjcpID8gMTI3IDogLTEyOCk7Cisg ICAgICAgICAgICBkID4+PSAxOworICAgICAgICAgICAgaWYodCA+IDApCisgICAgICAgICAg ICAgICAgZCB8PSAweDgwOworCisgICAgICAgICAgICAvLyBhZGp1c3QgY2hhcmdlCisgICAg ICAgICAgICBucSA9IHN0YXRlLT5xICsgKChzdGF0ZS0+cyAqICh0LXN0YXRlLT5xKSArIDUx Mik+PjEwKTsKKyAgICAgICAgICAgIGlmKG5xID09IHN0YXRlLT5xICYmIG5xICE9IHQpCisg ICAgICAgICAgICAgICAgbnEgKz0gKHQgPT0gMTI3ID8gMSA6IC0xKTsKKyAgICAgICAgICAg IHN0YXRlLT5xID0gbnE7CisKKyAgICAgICAgICAgIC8vIGFkanVzdCBzdHJlbmd0aAorICAg ICAgICAgICAgc3QgPSAodCAhPSBzdGF0ZS0+bHQgPyAwIDogMTAyMyk7CisgICAgICAgICAg ICBucyA9IHN0YXRlLT5zOworICAgICAgICAgICAgaWYobnMgIT0gc3QpCisgICAgICAgICAg ICAgICAgbnMgKz0gKHN0ICE9IDAgPyAxIDogLTEpOworICAgICAgICAgICAgaWYobnMgPCA4 KSBucyA9IDg7CisgICAgICAgICAgICBzdGF0ZS0+cyA9IG5zOworCisgICAgICAgICAgICBz dGF0ZS0+bHQgPSB0OworICAgICAgICB9CisKKyAgICAgICAgLy8gb3V0cHV0IGJpdHMKKyAg ICAgICAgKihvdXRidWYrKykgPSBkOworICAgIH0KK30KKworc3RhdGljIGF2X2NvbGQgaW50 IGRmcHdtX2VuY19pbml0KHN0cnVjdCBBVkNvZGVjQ29udGV4dCAqY3R4KQoreworICAgIERG UFdNU3RhdGUgKnN0YXRlID0gY3R4LT5wcml2X2RhdGE7CisKKyAgICBzdGF0ZS0+ZnEgPSAw OworICAgIHN0YXRlLT5xID0gMDsKKyAgICBzdGF0ZS0+cyA9IDA7CisgICAgc3RhdGUtPmx0 ID0gLTEyODsKKworICAgIGN0eC0+Yml0c19wZXJfY29kZWRfc2FtcGxlID0gMTsKKworICAg IHJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRmcHdtX2VuY19mcmFtZShzdHJ1Y3QgQVZD b2RlY0NvbnRleHQgKmN0eCwgc3RydWN0IEFWUGFja2V0ICpwYWNrZXQsCisgICAgY29uc3Qg c3RydWN0IEFWRnJhbWUgKmZyYW1lLCBpbnQgKmdvdF9wYWNrZXQpCit7CisgICAgREZQV01T dGF0ZSAqc3RhdGUgPSBjdHgtPnByaXZfZGF0YTsKKyAgICBpbnQgc2l6ZSA9IGZyYW1lLT5u Yl9zYW1wbGVzICogZnJhbWUtPmNoYW5uZWxzIC8gOCArIChmcmFtZS0+bmJfc2FtcGxlcyAl IDggPiAwID8gMSA6IDApOworICAgIGludCByZXQgPSBmZl9nZXRfZW5jb2RlX2J1ZmZlcihj dHgsIHBhY2tldCwgc2l6ZSwgMCk7CisKKyAgICBpZiAocmV0KSB7CisgICAgICAgICpnb3Rf cGFja2V0ID0gMDsKKyAgICAgICAgcmV0dXJuIHJldDsKKyAgICB9CisKKyAgICBhdV9jb21w cmVzcyhzdGF0ZSwgc2l6ZSwgcGFja2V0LT5kYXRhLCBmcmFtZS0+ZGF0YVswXSk7CisKKyAg ICAqZ290X3BhY2tldCA9IDE7CisgICAgcmV0dXJuIDA7Cit9CisKK2NvbnN0IEFWQ29kZWMg ZmZfZGZwd21fZW5jb2RlciA9IHsKKyAgICAubmFtZSAgICAgICAgICAgID0gImRmcHdtIiwK KyAgICAubG9uZ19uYW1lICAgICAgID0gTlVMTF9JRl9DT05GSUdfU01BTEwoIkRGUFdNMWEg YXVkaW8iKSwKKyAgICAudHlwZSAgICAgICAgICAgID0gQVZNRURJQV9UWVBFX0FVRElPLAor ICAgIC5pZCAgICAgICAgICAgICAgPSBBVl9DT0RFQ19JRF9ERlBXTSwKKyAgICAucHJpdl9k YXRhX3NpemUgID0gc2l6ZW9mKERGUFdNU3RhdGUpLAorICAgIC5pbml0ICAgICAgICAgICAg PSBkZnB3bV9lbmNfaW5pdCwKKyAgICAuZW5jb2RlMiAgICAgICAgID0gZGZwd21fZW5jX2Zy YW1lLAorICAgIC5zYW1wbGVfZm10cyAgICAgPSAoY29uc3QgZW51bSBBVlNhbXBsZUZvcm1h dFtdKXtBVl9TQU1QTEVfRk1UX1U4LCBBVl9TQU1QTEVfRk1UX05PTkV9LAorICAgIC5jYXBh YmlsaXRpZXMgICAgPSBBVl9DT0RFQ19DQVBfRFIxIHwgQVZfQ09ERUNfQ0FQX1ZBUklBQkxF X0ZSQU1FX1NJWkUsCisgICAgLmNhcHNfaW50ZXJuYWwgICA9IEZGX0NPREVDX0NBUF9JTklU X1RIUkVBRFNBRkUsCit9OwpkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy91dGlscy5jIGIvbGli YXZjb2RlYy91dGlscy5jCmluZGV4IDZmOWQ5MGEuLjA2NmRhNzYgMTAwNjQ0Ci0tLSBhL2xp YmF2Y29kZWMvdXRpbHMuYworKysgYi9saWJhdmNvZGVjL3V0aWxzLmMKQEAgLTU3Nyw2ICs1 NzcsOCBAQCBlbnVtIEFWQ29kZWNJRCBhdl9nZXRfcGNtX2NvZGVjKGVudW0gQVZTYW1wbGVG b3JtYXQgZm10LCBpbnQgYmUpCiBpbnQgYXZfZ2V0X2JpdHNfcGVyX3NhbXBsZShlbnVtIEFW Q29kZWNJRCBjb2RlY19pZCkKIHsKICAgICBzd2l0Y2ggKGNvZGVjX2lkKSB7CisgICAgY2Fz ZSBBVl9DT0RFQ19JRF9ERlBXTToKKyAgICAgICAgcmV0dXJuIDE7CiAgICAgY2FzZSBBVl9D T0RFQ19JRF9BRFBDTV9TQlBST18yOgogICAgICAgICByZXR1cm4gMjsKICAgICBjYXNlIEFW X0NPREVDX0lEX0FEUENNX1NCUFJPXzM6CmRpZmYgLS1naXQgYS9saWJhdmNvZGVjL3ZlcnNp b24uaCBiL2xpYmF2Y29kZWMvdmVyc2lvbi5oCmluZGV4IDA2M2Q2MWUuLjg0ZjM5NzkgMTAw NjQ0Ci0tLSBhL2xpYmF2Y29kZWMvdmVyc2lvbi5oCisrKyBiL2xpYmF2Y29kZWMvdmVyc2lv bi5oCkBAIC0yOCw4ICsyOCw4IEBACiAjaW5jbHVkZSAibGliYXZ1dGlsL3ZlcnNpb24uaCIK IAogI2RlZmluZSBMSUJBVkNPREVDX1ZFUlNJT05fTUFKT1IgIDU5Ci0jZGVmaW5lIExJQkFW Q09ERUNfVkVSU0lPTl9NSU5PUiAgMjEKLSNkZWZpbmUgTElCQVZDT0RFQ19WRVJTSU9OX01J Q1JPIDEwMworI2RlZmluZSBMSUJBVkNPREVDX1ZFUlNJT05fTUlOT1IgIDIyCisjZGVmaW5l IExJQkFWQ09ERUNfVkVSU0lPTl9NSUNSTyAxMDAKIAogI2RlZmluZSBMSUJBVkNPREVDX1ZF UlNJT05fSU5UICBBVl9WRVJTSU9OX0lOVChMSUJBVkNPREVDX1ZFUlNJT05fTUFKT1IsIFwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCQVZD T0RFQ19WRVJTSU9OX01JTk9SLCBcCgo= --------------Q1aX2ISpMLBbxv9eeXS6Jhnk 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". --------------Q1aX2ISpMLBbxv9eeXS6Jhnk--