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 513A940BAD for ; Tue, 8 Mar 2022 03:30:02 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 5788168B1CD; Tue, 8 Mar 2022 05:30:00 +0200 (EET) Received: from mail-io1-f46.google.com (mail-io1-f46.google.com [209.85.166.46]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 41C2568B0A4 for ; Tue, 8 Mar 2022 05:29:54 +0200 (EET) Received: by mail-io1-f46.google.com with SMTP id x4so4592197iop.7 for ; Mon, 07 Mar 2022 19:29:54 -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=VSKQtzwz3G7cccFnE7r+/d8AzLU85N9InY98cHh3q98=; b=KB7TpgAT4n13mEsGXQwSipAKL8L13uLIuwPsvGw5Bff5jfdpcXpymaxqRTCxlJaG4x iRZR3XFfV1dqlUp3MLT5DOTJCWSh7wXm6VLTI1tNQAgSEXd7JWse233ldu2ywh/FLy9R Lf6yAW7GpXNRdnf+s7dNZPxHdl2vuEaywl1PMj0+IzzaeTcVQpfRF8QzgNnT4nNmErhw d2U7P+vZ+vNqUhxq4f6D5Mn7rSsI7nhbAy6bNFV1OEwS4D1tOZ7CfyCK0Ib3/87dAVUn sjrvF8SY97uj8J7PsfpH8Ylw7CyYUXfSUXmkT0a9lZEFlTr/jHriYMc6DcKb4PLRLxES KosQ== 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=VSKQtzwz3G7cccFnE7r+/d8AzLU85N9InY98cHh3q98=; b=pl90+qczF1FVosXLu/N2AoEcAENpCbJAhmlVhAdIzWeCAJfHQM2JNWmqoh9EOY+w+E wBnrsRhYmfzopALXOiEsgUpWkuK743eD8uGCLd/wtt9ycz3ztJmDfmnd8yvbVMfaPAjn z9FYgCfiYdrUq/UxmXcSNYMNQg6C8uCfzkFsXVGIObhciD/U+DqDQc5KnBeeysOdEEno pi5gC2VCZHU5ZnyEJJZ9AvqIck5+3ZSci6Zd/mwT5M6RXAKjarZZw6sCVWwc+Ja+eqZa 22xZBLuOKPONgFaoyR1TcJtGbTOQNVisyKppciaUaDX4Kn7GbsJ+rlnCbO6P8VNRJISd kdtw== X-Gm-Message-State: AOAM531KNnnzKmvkBg0WpcEQJjVR3BFDPB8rmoNqoC+BKAmlH/q2ogiw mqVxnJJtiEzMxt0ytFIH2qyMNr3VehUiHg== X-Google-Smtp-Source: ABdhPJz2k8VapMaAaAUbFLR6n1sPqYsDzZKPQqEERb8N1PlAzcwxoGKwBdh+DKVK9UBIwcjXHBPKIA== X-Received: by 2002:a05:6602:15d2:b0:645:61c9:dc92 with SMTP id f18-20020a05660215d200b0064561c9dc92mr12873727iow.94.1646710191894; Mon, 07 Mar 2022 19:29:51 -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 u9-20020a5d8189000000b006415781ebe5sm9980213ion.5.2022.03.07.19.29.50 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 07 Mar 2022 19:29:51 -0800 (PST) Content-Type: multipart/mixed; boundary="------------HDco2Ps86FukN5vNGScnT4w0" Message-ID: <595a810c-d14e-413f-8208-264154b3d9c9@gmail.com> Date: Mon, 7 Mar 2022 22:29:49 -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 v7 1/3] 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. --------------HDco2Ps86FukN5vNGScnT4w0 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 + 10 files changed, 272 insertions(+) create mode 100644 libavcodec/dfpwmdec.c create mode 100644 libavcodec/dfpwmenc.c --------------HDco2Ps86FukN5vNGScnT4w0 Content-Type: text/x-patch; charset=UTF-8; name="v7-0001-libavcodec-Added-DFPWM1a-codec.patch" Content-Disposition: attachment; filename="v7-0001-libavcodec-Added-DFPWM1a-codec.patch" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL0NoYW5nZWxvZyBiL0NoYW5nZWxvZwppbmRleCAzYWY4YWEwLi5mMzI0 OWZlIDEwMDY0NAotLS0gYS9DaGFuZ2Vsb2cKKysrIGIvQ2hhbmdlbG9nCkBAIC01LDYgKzUs NyBAQCB2ZXJzaW9uIDUuMToKIC0gZGlhbG9ndWUgZW5oYW5jZSBhdWRpbyBmaWx0ZXIKIC0g ZHJvcHBlZCBvYnNvbGV0ZSBYdk1DIGh3YWNjZWwKIC0gcGNtLWJsdXJheSBlbmNvZGVyCist IERGUFdNIGF1ZGlvIGVuY29kZXIvZGVjb2RlcgogCiAKIHZlcnNpb24gNS4wOgpkaWZmIC0t Z2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSUwppbmRleCBmMzNjY2JkLi41N2I2ZjMz IDEwMDY0NAotLS0gYS9NQUlOVEFJTkVSUworKysgYi9NQUlOVEFJTkVSUwpAQCAtMTYxLDYg KzE2MSw3IEBAIENvZGVjczoKICAgY3NjZC5jICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBSZWltYXIgRG9lZmZpbmdlcgogICBjdXZpZGRlYy5jICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFRpbW8gUm90aGVucGllbGVyCiAgIGRjYSogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZm9vODYKKyAgZGZwd20qICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBKYWNrIEJydWllbm5lCiAgIGRpcmFjKiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUm9zdGlzbGF2IFBlaGxpdmFub3YKICAgZG54aGQqICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBCYXB0aXN0ZSBDb3VkdXJpZXIKICAgZG9sYnlfZSogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBmb284NgpkaWZmIC0tZ2l0IGEvZG9jL2dlbmVyYWxf Y29udGVudHMudGV4aSBiL2RvYy9nZW5lcmFsX2NvbnRlbnRzLnRleGkKaW5kZXggZGYxNjky Yy4uMTRhZWFlZCAxMDA2NDQKLS0tIGEvZG9jL2dlbmVyYWxfY29udGVudHMudGV4aQorKysg Yi9kb2MvZ2VuZXJhbF9jb250ZW50cy50ZXhpCkBAIC0xMTk0LDYgKzExOTQsNyBAQCBmb2xs b3dpbmcgaW1hZ2UgZm9ybWF0cyBhcmUgc3VwcG9ydGVkOgogQGl0ZW0gQ1JJIEhDQSAgICAg ICAgICAgICAgICBAdGFiICAgICBAdGFiIFgKIEBpdGVtIERlbHBoaW5lIFNvZnR3YXJlIElu dGVybmF0aW9uYWwgQ0lOIGF1ZGlvICBAdGFiICAgICBAdGFiICBYCiAgICAgQHRhYiBDb2Rl YyB1c2VkIGluIERlbHBoaW5lIFNvZnR3YXJlIEludGVybmF0aW9uYWwgZ2FtZXMuCitAaXRl bSBERlBXTSAgICAgICAgICAgICAgICAgIEB0YWIgIFggIEB0YWIgIFgKIEBpdGVtIERpZ2l0 YWwgU3BlZWNoIFN0YW5kYXJkIC0gU3RhbmRhcmQgUGxheSBtb2RlIChEU1MgU1ApIEB0YWIg ICAgIEB0YWIgIFgKIEBpdGVtIERpc2N3b3JsZCBJSSBCTVYgQXVkaW8gQHRhYiAgICAgQHRh YiAgWAogQGl0ZW0gQ09PSyAgICAgICAgICAgICAgICAgICBAdGFiICAgICBAdGFiICBYCmRp ZmYgLS1naXQgYS9saWJhdmNvZGVjL01ha2VmaWxlIGIvbGliYXZjb2RlYy9NYWtlZmlsZQpp bmRleCBiZmMzMWJhLi5jZDkyOWRhIDEwMDY0NAotLS0gYS9saWJhdmNvZGVjL01ha2VmaWxl CisrKyBiL2xpYmF2Y29kZWMvTWFrZWZpbGUKQEAgLTI4OSw2ICsyODksOCBAQCBPQkpTLSQo Q09ORklHX0RFUkZfRFBDTV9ERUNPREVSKSAgICAgICArPSBkcGNtLm8KIE9CSlMtJChDT05G SUdfRElSQUNfREVDT0RFUikgICAgICAgICAgICs9IGRpcmFjZGVjLm8gZGlyYWMubyBkaXJh Y2RzcC5vIGRpcmFjdGFiLm8gXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZGlyYWNfYXJpdGgubyBkaXJhY19kd3QubyBkaXJhY192bGMubwogT0JKUy0k KENPTkZJR19ERkFfREVDT0RFUikgICAgICAgICAgICAgKz0gZGZhLm8KK09CSlMtJChDT05G SUdfREZQV01fREVDT0RFUikgICAgICAgICAgICs9IGRmcHdtZGVjLm8KK09CSlMtJChDT05G SUdfREZQV01fRU5DT0RFUikgICAgICAgICAgICs9IGRmcHdtZW5jLm8KIE9CSlMtJChDT05G SUdfRE5YSERfREVDT0RFUikgICAgICAgICAgICs9IGRueGhkZGVjLm8gZG54aGRkYXRhLm8K IE9CSlMtJChDT05GSUdfRE5YSERfRU5DT0RFUikgICAgICAgICAgICs9IGRueGhkZW5jLm8g ZG54aGRkYXRhLm8KIE9CSlMtJChDT05GSUdfRE9MQllfRV9ERUNPREVSKSAgICAgICAgICs9 IGRvbGJ5X2UubyBkb2xieV9lX3BhcnNlLm8ga2Jkd2luLm8KZGlmZiAtLWdpdCBhL2xpYmF2 Y29kZWMvYWxsY29kZWNzLmMgYi9saWJhdmNvZGVjL2FsbGNvZGVjcy5jCmluZGV4IDFiZTY3 ZTMuLjYyOGQyN2YgMTAwNjQ0Ci0tLSBhL2xpYmF2Y29kZWMvYWxsY29kZWNzLmMKKysrIGIv bGliYXZjb2RlYy9hbGxjb2RlY3MuYwpAQCAtNDM3LDYgKzQzNyw4IEBAIGV4dGVybiBjb25z dCBBVkNvZGVjIGZmX2Jtdl9hdWRpb19kZWNvZGVyOwogZXh0ZXJuIGNvbnN0IEFWQ29kZWMg ZmZfY29va19kZWNvZGVyOwogZXh0ZXJuIGNvbnN0IEFWQ29kZWMgZmZfZGNhX2VuY29kZXI7 CiBleHRlcm4gY29uc3QgQVZDb2RlYyBmZl9kY2FfZGVjb2RlcjsKK2V4dGVybiBjb25zdCBB VkNvZGVjIGZmX2RmcHdtX2VuY29kZXI7CitleHRlcm4gY29uc3QgQVZDb2RlYyBmZl9kZnB3 bV9kZWNvZGVyOwogZXh0ZXJuIGNvbnN0IEFWQ29kZWMgZmZfZG9sYnlfZV9kZWNvZGVyOwog ZXh0ZXJuIGNvbnN0IEFWQ29kZWMgZmZfZHNkX2xzYmZfZGVjb2RlcjsKIGV4dGVybiBjb25z dCBBVkNvZGVjIGZmX2RzZF9tc2JmX2RlY29kZXI7CmRpZmYgLS1naXQgYS9saWJhdmNvZGVj L2NvZGVjX2Rlc2MuYyBiL2xpYmF2Y29kZWMvY29kZWNfZGVzYy5jCmluZGV4IDcyNWM2ODcu LjgxZjNiM2MgMTAwNjQ0Ci0tLSBhL2xpYmF2Y29kZWMvY29kZWNfZGVzYy5jCisrKyBiL2xp YmF2Y29kZWMvY29kZWNfZGVzYy5jCkBAIC0zMjM3LDYgKzMyMzcsMTMgQEAgc3RhdGljIGNv bnN0IEFWQ29kZWNEZXNjcmlwdG9yIGNvZGVjX2Rlc2NyaXB0b3JzW10gPSB7CiAgICAgICAg IC5sb25nX25hbWUgPSBOVUxMX0lGX0NPTkZJR19TTUFMTCgiTVNOIFNpcmVuIiksCiAgICAg ICAgIC5wcm9wcyAgICAgPSBBVl9DT0RFQ19QUk9QX0lOVFJBX09OTFkgfCBBVl9DT0RFQ19Q Uk9QX0xPU1NZLAogICAgIH0sCisgICAgeworICAgICAgICAuaWQgICAgICAgID0gQVZfQ09E RUNfSURfREZQV00sCisgICAgICAgIC50eXBlICAgICAgPSBBVk1FRElBX1RZUEVfQVVESU8s CisgICAgICAgIC5uYW1lICAgICAgPSAiZGZwd20iLAorICAgICAgICAubG9uZ19uYW1lID0g TlVMTF9JRl9DT05GSUdfU01BTEwoIkRGUFdNIChEeW5hbWljIEZpbHRlciBQdWxzZSBXaWR0 aCBNb2R1bGF0aW9uKSIpLAorICAgICAgICAucHJvcHMgICAgID0gQVZfQ09ERUNfUFJPUF9M T1NTWSwKKyAgICB9LAogCiAgICAgLyogc3VidGl0bGUgY29kZWNzICovCiAgICAgewpkaWZm IC0tZ2l0IGEvbGliYXZjb2RlYy9jb2RlY19pZC5oIGIvbGliYXZjb2RlYy9jb2RlY19pZC5o CmluZGV4IGFiMjY1ZWMuLjNmZmI5YmQgMTAwNjQ0Ci0tLSBhL2xpYmF2Y29kZWMvY29kZWNf aWQuaAorKysgYi9saWJhdmNvZGVjL2NvZGVjX2lkLmgKQEAgLTUxNiw2ICs1MTYsNyBAQCBl bnVtIEFWQ29kZWNJRCB7CiAgICAgQVZfQ09ERUNfSURfSENBLAogICAgIEFWX0NPREVDX0lE X0ZBU1RBVURJTywKICAgICBBVl9DT0RFQ19JRF9NU05TSVJFTiwKKyAgICBBVl9DT0RFQ19J RF9ERlBXTSwKIAogICAgIC8qIHN1YnRpdGxlIGNvZGVjcyAqLwogICAgIEFWX0NPREVDX0lE X0ZJUlNUX1NVQlRJVExFID0gMHgxNzAwMCwgICAgICAgICAgLy8vPCBBIGR1bW15IElEIHBv aW50aW5nIGF0IHRoZSBzdGFydCBvZiBzdWJ0aXRsZSBjb2RlY3MuCmRpZmYgLS1naXQgYS9s aWJhdmNvZGVjL2RmcHdtZGVjLmMgYi9saWJhdmNvZGVjL2RmcHdtZGVjLmMKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDVmNzk0NAotLS0gL2Rldi9udWxsCisrKyBi L2xpYmF2Y29kZWMvZGZwd21kZWMuYwpAQCAtMCwwICsxLDEzNCBAQAorLyoKKyAqIERGUFdN IGRlY29kZXIKKyAqIENvcHlyaWdodCAoYykgMjAyMiBKYWNrIEJydWllbm5lCisgKiBDb3B5 cmlnaHQgKGMpIDIwMTIsIDIwMTYgQmVuICJHcmVhc2VNb25rZXkiIFJ1c3NlbGwKKyAqCisg KiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCisgKgorICogRkZtcGVnIGlzIGZyZWUg c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0 IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICog TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg ZWl0aGVyCisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0 aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQg aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT ZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggRkZt cGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9u LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAy MTEwLTEzMDEgVVNBCisgKi8KKworLyoqCisgKiBAZmlsZQorICogREZQV00xYSBkZWNvZGVy CisgKi8KKworI2luY2x1ZGUgImxpYmF2dXRpbC9pbnRlcm5hbC5oIgorI2luY2x1ZGUgImF2 Y29kZWMuaCIKKyNpbmNsdWRlICJjb2RlY19pZC5oIgorI2luY2x1ZGUgImludGVybmFsLmgi CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBpbnQgZnEsIHEsIHMsIGx0OworfSBERlBXTVN0 YXRlOworCisvLyBERlBXTSBjb2RlYyBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9DaGVuVGhy ZWFkL2RmcHdtL2Jsb2IvbWFzdGVyLzFhLworLy8gTGljZW5zZWQgaW4gdGhlIHB1YmxpYyBk b21haW4KKworc3RhdGljIHZvaWQgYXVfZGVjb21wcmVzcyhERlBXTVN0YXRlICpzdGF0ZSwg aW50IGZzLCBpbnQgbGVuLCB1aW50OF90ICpvdXRidWYsIHVpbnQ4X3QgKmluYnVmKQorewor ICAgIHVuc2lnbmVkIGQ7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW47IGkrKykgewor ICAgICAgICAvLyBnZXQgYml0cworICAgICAgICBkID0gKihpbmJ1ZisrKTsKKyAgICAgICAg Zm9yIChpbnQgaiA9IDA7IGogPCA4OyBqKyspIHsKKyAgICAgICAgICAgIGludCBucSwgbHEs IHN0LCBucywgb3Y7CisgICAgICAgICAgICAvLyBzZXQgdGFyZ2V0CisgICAgICAgICAgICBp bnQgdCA9ICgoZCYxKSA/IDEyNyA6IC0xMjgpOworICAgICAgICAgICAgZCA+Pj0gMTsKKwor ICAgICAgICAgICAgLy8gYWRqdXN0IGNoYXJnZQorICAgICAgICAgICAgbnEgPSBzdGF0ZS0+ cSArICgoc3RhdGUtPnMgKiAodC1zdGF0ZS0+cSkgKyA1MTIpPj4xMCk7CisgICAgICAgICAg ICBpZihucSA9PSBzdGF0ZS0+cSAmJiBucSAhPSB0KQorICAgICAgICAgICAgICAgIG5xICs9 ICh0ID09IDEyNyA/IDEgOiAtMSk7CisgICAgICAgICAgICBscSA9IHN0YXRlLT5xOworICAg ICAgICAgICAgc3RhdGUtPnEgPSBucTsKKworICAgICAgICAgICAgLy8gYWRqdXN0IHN0cmVu Z3RoCisgICAgICAgICAgICBzdCA9ICh0ICE9IHN0YXRlLT5sdCA/IDAgOiAxMDIzKTsKKyAg ICAgICAgICAgIG5zID0gc3RhdGUtPnM7CisgICAgICAgICAgICBpZihucyAhPSBzdCkKKyAg ICAgICAgICAgICAgICBucyArPSAoc3QgIT0gMCA/IDEgOiAtMSk7CisgICAgICAgICAgICBp ZihucyA8IDgpIG5zID0gODsKKyAgICAgICAgICAgIHN0YXRlLT5zID0gbnM7CisKKyAgICAg ICAgICAgIC8vIEZJTFRFUjogcGVyZm9ybSBhbnRpamVyaworICAgICAgICAgICAgb3YgPSAo dCAhPSBzdGF0ZS0+bHQgPyAobnErbHErMSk+PjEgOiBucSk7CisKKyAgICAgICAgICAgIC8v IEZJTFRFUjogcGVyZm9ybSBMUEYKKyAgICAgICAgICAgIHN0YXRlLT5mcSArPSAoKGZzKihv di1zdGF0ZS0+ZnEpICsgMHg4MCk+PjgpOworICAgICAgICAgICAgb3YgPSBzdGF0ZS0+ZnE7 CisKKyAgICAgICAgICAgIC8vIG91dHB1dCBzYW1wbGUKKyAgICAgICAgICAgICoob3V0YnVm KyspID0gb3YgKyAxMjg7CisKKyAgICAgICAgICAgIHN0YXRlLT5sdCA9IHQ7CisgICAgICAg IH0KKyAgICB9Cit9CisKK3N0YXRpYyBhdl9jb2xkIGludCBkZnB3bV9kZWNfaW5pdChzdHJ1 Y3QgQVZDb2RlY0NvbnRleHQgKmN0eCkKK3sKKyAgICBERlBXTVN0YXRlICpzdGF0ZSA9IGN0 eC0+cHJpdl9kYXRhOworCisgICAgaWYgKGN0eC0+Y2hhbm5lbHMgPD0gMCkgeworICAgICAg ICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJJbnZhbGlkIG51bWJlciBvZiBjaGFubmVs c1xuIik7CisgICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7CisgICAgfQorCisgICAg c3RhdGUtPmZxID0gMDsKKyAgICBzdGF0ZS0+cSA9IDA7CisgICAgc3RhdGUtPnMgPSAwOwor ICAgIHN0YXRlLT5sdCA9IC0xMjg7CisKKyAgICBjdHgtPnNhbXBsZV9mbXQgPSBBVl9TQU1Q TEVfRk1UX1U4OworICAgIGN0eC0+Yml0c19wZXJfcmF3X3NhbXBsZSA9IDg7CisKKyAgICBy ZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkZnB3bV9kZWNfZnJhbWUoc3RydWN0IEFWQ29k ZWNDb250ZXh0ICpjdHgsIHZvaWQgKmRhdGEsCisgICAgaW50ICpnb3RfZnJhbWUsIHN0cnVj dCBBVlBhY2tldCAqcGFja2V0KQoreworICAgIERGUFdNU3RhdGUgKnN0YXRlID0gY3R4LT5w cml2X2RhdGE7CisgICAgQVZGcmFtZSAqZnJhbWUgPSBkYXRhOworICAgIGludCByZXQ7CisK KyAgICBmcmFtZS0+bmJfc2FtcGxlcyA9IHBhY2tldC0+c2l6ZSAqIDggLyBjdHgtPmNoYW5u ZWxzOworICAgIGlmIChmcmFtZS0+bmJfc2FtcGxlcyA8PSAwKSB7CisgICAgICAgIGF2X2xv ZyhjdHgsIEFWX0xPR19FUlJPUiwgImludmFsaWQgbnVtYmVyIG9mIHNhbXBsZXMgaW4gcGFj a2V0XG4iKTsKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAgfQor CisgICAgaWYgKChyZXQgPSBmZl9nZXRfYnVmZmVyKGN0eCwgZnJhbWUsIDApKSA8IDApCisg ICAgICAgIHJldHVybiByZXQ7CisKKyAgICBhdV9kZWNvbXByZXNzKHN0YXRlLCAxNDAsIHBh Y2tldC0+c2l6ZSwgZnJhbWUtPmRhdGFbMF0sIHBhY2tldC0+ZGF0YSk7CisKKyAgICAqZ290 X2ZyYW1lID0gMTsKKyAgICByZXR1cm4gcGFja2V0LT5zaXplOworfQorCitjb25zdCBBVkNv ZGVjIGZmX2RmcHdtX2RlY29kZXIgPSB7CisgICAgLm5hbWUgICAgICAgICAgID0gImRmcHdt IiwKKyAgICAubG9uZ19uYW1lICAgICAgPSBOVUxMX0lGX0NPTkZJR19TTUFMTCgiREZQV00x YSBhdWRpbyIpLAorICAgIC50eXBlICAgICAgICAgICA9IEFWTUVESUFfVFlQRV9BVURJTywK KyAgICAuaWQgICAgICAgICAgICAgPSBBVl9DT0RFQ19JRF9ERlBXTSwKKyAgICAucHJpdl9k YXRhX3NpemUgPSBzaXplb2YoREZQV01TdGF0ZSksCisgICAgLmluaXQgICAgICAgICAgID0g ZGZwd21fZGVjX2luaXQsCisgICAgLmRlY29kZSAgICAgICAgID0gZGZwd21fZGVjX2ZyYW1l LAorICAgIC5jYXBhYmlsaXRpZXMgICA9IEFWX0NPREVDX0NBUF9EUjEsCisgICAgLmNhcHNf aW50ZXJuYWwgID0gRkZfQ09ERUNfQ0FQX0lOSVRfVEhSRUFEU0FGRSwKK307CmRpZmYgLS1n aXQgYS9saWJhdmNvZGVjL2RmcHdtZW5jLmMgYi9saWJhdmNvZGVjL2RmcHdtZW5jLmMKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDJmMmU2NAotLS0gL2Rldi9udWxs CisrKyBiL2xpYmF2Y29kZWMvZGZwd21lbmMuYwpAQCAtMCwwICsxLDEyMSBAQAorLyoKKyAq IERGUFdNIGVuY29kZXIKKyAqIENvcHlyaWdodCAoYykgMjAyMiBKYWNrIEJydWllbm5lCisg KiBDb3B5cmlnaHQgKGMpIDIwMTIsIDIwMTYgQmVuICJHcmVhc2VNb25rZXkiIFJ1c3NlbGwK KyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCisgKgorICogRkZtcGVnIGlz IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBGRm1wZWcgaXMgZGlzdHJp YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5 IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdp dGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3Vu ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24s IE1BIDAyMTEwLTEzMDEgVVNBCisgKi8KKworLyoqCisgKiBAZmlsZQorICogREZQV00xYSBl bmNvZGVyCisgKi8KKworI2luY2x1ZGUgImxpYmF2dXRpbC9pbnRlcm5hbC5oIgorI2luY2x1 ZGUgImF2Y29kZWMuaCIKKyNpbmNsdWRlICJjb2RlY19pZC5oIgorI2luY2x1ZGUgImVuY29k ZS5oIgorI2luY2x1ZGUgImludGVybmFsLmgiCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBp bnQgZnEsIHEsIHMsIGx0OworfSBERlBXTVN0YXRlOworCisvLyBERlBXTSBjb2RlYyBmcm9t IGh0dHBzOi8vZ2l0aHViLmNvbS9DaGVuVGhyZWFkL2RmcHdtL2Jsb2IvbWFzdGVyLzFhLwor Ly8gTGljZW5zZWQgaW4gdGhlIHB1YmxpYyBkb21haW4KKworLy8gbm90ZSwgbGVuIGRlbm90 ZXMgaG93IG1hbnkgY29tcHJlc3NlZCBieXRlcyB0aGVyZSBhcmUgKHVuY29tcHJlc3NlZCBi eXRlcyAvIDgpLgorc3RhdGljIHZvaWQgYXVfY29tcHJlc3MoREZQV01TdGF0ZSAqc3RhdGUs IGludCBsZW4sIHVpbnQ4X3QgKm91dGJ1ZiwgdWludDhfdCAqaW5idWYpCit7CisgICAgdW5z aWduZWQgZCA9IDA7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW47IGkrKykgeworICAg ICAgICBmb3IgKGludCBqID0gMDsgaiA8IDg7IGorKykgeworICAgICAgICAgICAgaW50IG5x LCBzdCwgbnM7CisgICAgICAgICAgICAvLyBnZXQgc2FtcGxlCisgICAgICAgICAgICBpbnQg diA9ICooaW5idWYrKykgLSAxMjg7CisgICAgICAgICAgICAvLyBzZXQgYml0IC8gdGFyZ2V0 CisgICAgICAgICAgICBpbnQgdCA9ICh2ID4gc3RhdGUtPnEgfHwgKHYgPT0gc3RhdGUtPnEg JiYgdiA9PSAxMjcpID8gMTI3IDogLTEyOCk7CisgICAgICAgICAgICBkID4+PSAxOworICAg ICAgICAgICAgaWYodCA+IDApCisgICAgICAgICAgICAgICAgZCB8PSAweDgwOworCisgICAg ICAgICAgICAvLyBhZGp1c3QgY2hhcmdlCisgICAgICAgICAgICBucSA9IHN0YXRlLT5xICsg KChzdGF0ZS0+cyAqICh0LXN0YXRlLT5xKSArIDUxMik+PjEwKTsKKyAgICAgICAgICAgIGlm KG5xID09IHN0YXRlLT5xICYmIG5xICE9IHQpCisgICAgICAgICAgICAgICAgbnEgKz0gKHQg PT0gMTI3ID8gMSA6IC0xKTsKKyAgICAgICAgICAgIHN0YXRlLT5xID0gbnE7CisKKyAgICAg ICAgICAgIC8vIGFkanVzdCBzdHJlbmd0aAorICAgICAgICAgICAgc3QgPSAodCAhPSBzdGF0 ZS0+bHQgPyAwIDogMTAyMyk7CisgICAgICAgICAgICBucyA9IHN0YXRlLT5zOworICAgICAg ICAgICAgaWYobnMgIT0gc3QpCisgICAgICAgICAgICAgICAgbnMgKz0gKHN0ICE9IDAgPyAx IDogLTEpOworICAgICAgICAgICAgaWYobnMgPCA4KSBucyA9IDg7CisgICAgICAgICAgICBz dGF0ZS0+cyA9IG5zOworCisgICAgICAgICAgICBzdGF0ZS0+bHQgPSB0OworICAgICAgICB9 CisKKyAgICAgICAgLy8gb3V0cHV0IGJpdHMKKyAgICAgICAgKihvdXRidWYrKykgPSBkOwor ICAgIH0KK30KKworc3RhdGljIGF2X2NvbGQgaW50IGRmcHdtX2VuY19pbml0KHN0cnVjdCBB VkNvZGVjQ29udGV4dCAqY3R4KQoreworICAgIERGUFdNU3RhdGUgKnN0YXRlID0gY3R4LT5w cml2X2RhdGE7CisKKyAgICBzdGF0ZS0+ZnEgPSAwOworICAgIHN0YXRlLT5xID0gMDsKKyAg ICBzdGF0ZS0+cyA9IDA7CisgICAgc3RhdGUtPmx0ID0gLTEyODsKKworICAgIGN0eC0+Yml0 c19wZXJfY29kZWRfc2FtcGxlID0gMTsKKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMg aW50IGRmcHdtX2VuY19mcmFtZShzdHJ1Y3QgQVZDb2RlY0NvbnRleHQgKmN0eCwgc3RydWN0 IEFWUGFja2V0ICpwYWNrZXQsCisgICAgY29uc3Qgc3RydWN0IEFWRnJhbWUgKmZyYW1lLCBp bnQgKmdvdF9wYWNrZXQpCit7CisgICAgREZQV01TdGF0ZSAqc3RhdGUgPSBjdHgtPnByaXZf ZGF0YTsKKyAgICBpbnQgc2l6ZSA9IGZyYW1lLT5uYl9zYW1wbGVzICogZnJhbWUtPmNoYW5u ZWxzIC8gOCArIChmcmFtZS0+bmJfc2FtcGxlcyAlIDggPiAwID8gMSA6IDApOworICAgIGlu dCByZXQgPSBmZl9nZXRfZW5jb2RlX2J1ZmZlcihjdHgsIHBhY2tldCwgc2l6ZSwgMCk7CisK KyAgICBpZiAocmV0KSB7CisgICAgICAgICpnb3RfcGFja2V0ID0gMDsKKyAgICAgICAgcmV0 dXJuIHJldDsKKyAgICB9CisKKyAgICBhdV9jb21wcmVzcyhzdGF0ZSwgc2l6ZSwgcGFja2V0 LT5kYXRhLCBmcmFtZS0+ZGF0YVswXSk7CisKKyAgICAqZ290X3BhY2tldCA9IDE7CisgICAg cmV0dXJuIDA7Cit9CisKK2NvbnN0IEFWQ29kZWMgZmZfZGZwd21fZW5jb2RlciA9IHsKKyAg ICAubmFtZSAgICAgICAgICAgID0gImRmcHdtIiwKKyAgICAubG9uZ19uYW1lICAgICAgID0g TlVMTF9JRl9DT05GSUdfU01BTEwoIkRGUFdNMWEgYXVkaW8iKSwKKyAgICAudHlwZSAgICAg ICAgICAgID0gQVZNRURJQV9UWVBFX0FVRElPLAorICAgIC5pZCAgICAgICAgICAgICAgPSBB Vl9DT0RFQ19JRF9ERlBXTSwKKyAgICAucHJpdl9kYXRhX3NpemUgID0gc2l6ZW9mKERGUFdN U3RhdGUpLAorICAgIC5pbml0ICAgICAgICAgICAgPSBkZnB3bV9lbmNfaW5pdCwKKyAgICAu ZW5jb2RlMiAgICAgICAgID0gZGZwd21fZW5jX2ZyYW1lLAorICAgIC5zYW1wbGVfZm10cyAg ICAgPSAoY29uc3QgZW51bSBBVlNhbXBsZUZvcm1hdFtdKXtBVl9TQU1QTEVfRk1UX1U4LCBB Vl9TQU1QTEVfRk1UX05PTkV9LAorICAgIC5jYXBhYmlsaXRpZXMgICAgPSBBVl9DT0RFQ19D QVBfRFIxIHwgQVZfQ09ERUNfQ0FQX1ZBUklBQkxFX0ZSQU1FX1NJWkUsCisgICAgLmNhcHNf aW50ZXJuYWwgICA9IEZGX0NPREVDX0NBUF9JTklUX1RIUkVBRFNBRkUsCit9OwpkaWZmIC0t Z2l0IGEvbGliYXZjb2RlYy91dGlscy5jIGIvbGliYXZjb2RlYy91dGlscy5jCmluZGV4IDZm OWQ5MGEuLjA2NmRhNzYgMTAwNjQ0Ci0tLSBhL2xpYmF2Y29kZWMvdXRpbHMuYworKysgYi9s aWJhdmNvZGVjL3V0aWxzLmMKQEAgLTU3Nyw2ICs1NzcsOCBAQCBlbnVtIEFWQ29kZWNJRCBh dl9nZXRfcGNtX2NvZGVjKGVudW0gQVZTYW1wbGVGb3JtYXQgZm10LCBpbnQgYmUpCiBpbnQg YXZfZ2V0X2JpdHNfcGVyX3NhbXBsZShlbnVtIEFWQ29kZWNJRCBjb2RlY19pZCkKIHsKICAg ICBzd2l0Y2ggKGNvZGVjX2lkKSB7CisgICAgY2FzZSBBVl9DT0RFQ19JRF9ERlBXTToKKyAg ICAgICAgcmV0dXJuIDE7CiAgICAgY2FzZSBBVl9DT0RFQ19JRF9BRFBDTV9TQlBST18yOgog ICAgICAgICByZXR1cm4gMjsKICAgICBjYXNlIEFWX0NPREVDX0lEX0FEUENNX1NCUFJPXzM6 Cgo= --------------HDco2Ps86FukN5vNGScnT4w0 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". --------------HDco2Ps86FukN5vNGScnT4w0--