From patchwork Tue Dec 26 15:51:20 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?q?Tomas_H=C3=A4rdin?= X-Patchwork-Id: 45324 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:6623:b0:194:e134:edd4 with SMTP id n35csp3110666pzh; Tue, 26 Dec 2023 07:51:34 -0800 (PST) X-Google-Smtp-Source: AGHT+IH3GBtg03ESAgHq9kY5Ss/rWrn4Dc02corrq+MF4lZrVwfROTl2i5gpoQKOQDWAP1dPYjYa X-Received: by 2002:a17:906:2962:b0:a1b:714f:c59d with SMTP id x2-20020a170906296200b00a1b714fc59dmr2888696ejd.30.1703605894433; Tue, 26 Dec 2023 07:51:34 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1703605894; cv=none; d=google.com; s=arc-20160816; b=lTQXHKIBoUK87GJ0ruGHJ0eQyPx1nCJFFFEX/WTp9CfoZxpJFA6KB8sIyLxnXFH/qy tRtGVkauJr6BWdxKPHxWLbYwB8MPVyCIec7iyleSWVUDl0cCQq2NggbHyulj3xmxgTz9 875PhMubOXYrrpQY4NR/HhgLj8vM7Pq17boBmrGBHtx5GGb/HeTZjL2JqbBKyDccKE5H QxDRbI0OcoUq/WgvnmfXrihnKPtFd8lGtELG1xA17hFXsuzURuZZtSFw+eG/y21jmVDw gQ3IeW06yz/mE4gd92i7Smkf3AA6cw0Aa5LDKtbux+P+rrvQcaiKsqfnop24Fl5CfgYh R5Mg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:reply-to:list-subscribe:list-help:list-post :list-archive:list-unsubscribe:list-id:precedence:subject :mime-version:user-agent:date:to:from:message-id:delivered-to; bh=j8d+Nc5obtkr9F47/Ky7OGa4Yzr08K+knC09EiiMVYQ=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=o97zyDsHU0+S7hsXx8XRM7XLgFhJ2myMd/BhQbKa3K1t+qKXHRgnoZbPZ30l9SqAWn DDcml4Ki2me5+ybAzkzz1qumNWn1W5F7qc9oU2rKsYv92S1oWO9PsoAZNQnL6InrZT5U oeuLVqUk6CR32GRLKJfRu7FnDWpCt+lCjccGSifPVrEXeUYU8jVztJGuH2oivMpn9lFG WtTULKov4RDVcyYsflfwo3uoQIdWNAc+s2Q7qmRsuhxvbZy2mOe5yxxYBsUIsrSFhOLQ XAIfMtjDk+erHxvh7RDVQDN+7PR8TUwz+RszCglwxk5/Z4PbGVvg1ulaNp/viVKAsg1e Usyw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id vl15-20020a17090730cf00b00a2362dbe5c3si5234531ejb.351.2023.12.26.07.51.33; Tue, 26 Dec 2023 07:51:34 -0800 (PST) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 24AF568CC9D; Tue, 26 Dec 2023 17:51:29 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from glom.nmugroup.com (glom.nmugroup.com [193.183.80.6]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 4C1E468CC39 for ; Tue, 26 Dec 2023 17:51:22 +0200 (EET) Received: from localhost (localhost [127.0.0.1]) by glom.nmugroup.com (Postfix) with ESMTP id 6C2C85422287 for ; Tue, 26 Dec 2023 16:51:21 +0100 (CET) Received: from [192.168.1.110] (81-226-156-116-no2430.tbcn.telia.com [81.226.156.116]) (Authenticated sender: git01) by glom.nmugroup.com (Postfix) with ESMTPSA id 3A236542138B for ; Tue, 26 Dec 2023 16:51:21 +0100 (CET) Message-ID: From: Tomas =?iso-8859-1?q?H=E4rdin?= To: ffmpeg-devel@ffmpeg.org Date: Tue, 26 Dec 2023 16:51:20 +0100 User-Agent: Evolution 3.46.4-2 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 1/6] doc/general_contents.texi: Add missing ADPCM IMA APC entry 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" X-TUID: VhdqtsF0tZNl Rebased and addressed some comments from last time. Also discovered some issues like the IMA APC codec not being listed. This is for the Cryo game modding community. /Tomas From 490754ea1580d4d02bba83150ca09ca8f960c6fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomas=20H=C3=A4rdin?= Date: Tue, 26 Dec 2023 15:03:51 +0100 Subject: [PATCH 1/6] doc/general_contents.texi: Add missing ADPCM IMA APC entry --- doc/general_contents.texi | 2 ++ 1 file changed, 2 insertions(+) diff --git a/doc/general_contents.texi b/doc/general_contents.texi index 62ca4f7cb6..3328753acb 100644 --- a/doc/general_contents.texi +++ b/doc/general_contents.texi @@ -1169,6 +1169,8 @@ following image formats are supported: @item ADPCM IMA Acorn Replay @tab @tab X @item ADPCM IMA AMV @tab X @tab X @tab Used in AMV files +@item ADPCM IMA APC @tab @tab X + @tab Codec used in games by Cryo Interactive @item ADPCM IMA Cunning Developments @tab @tab X @item ADPCM IMA Electronic Arts EACS @tab @tab X @item ADPCM IMA Electronic Arts SEAD @tab @tab X -- 2.39.2 From patchwork Tue Dec 26 15:52:13 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?q?Tomas_H=C3=A4rdin?= X-Patchwork-Id: 45325 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:6623:b0:194:e134:edd4 with SMTP id n35csp3111047pzh; Tue, 26 Dec 2023 07:52:24 -0800 (PST) X-Google-Smtp-Source: AGHT+IFRzE8Nxc8ghthNajSZ1n7y8DpErLV6BzPy1XkO5HkxyHj4DS5bhB8b659WMRBaKEJ44pvX X-Received: by 2002:a17:907:a0b:b0:a26:a442:4f0b with SMTP id bb11-20020a1709070a0b00b00a26a4424f0bmr10174047ejc.5.1703605943856; Tue, 26 Dec 2023 07:52:23 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1703605943; cv=none; d=google.com; s=arc-20160816; b=t7Q4f177AlfeNPW438p20nnn/pOCn/6GqyVM375LVLaVoOIKfSTgX8FGZ6h/kv8Oue BFPp4tdIx++sjteRe82xgHfd6k86HEidaoFSHHpKkRtfH3/8oqHjj1rPF2zVr6ynrO5d NlNmk2qcRNxBbmZaTLwQtMy9Kg2K5s+sEKcQ3C2aLvj1Jq1+rCSvOrPRzhR3SxyaiXc/ la4VlcqDckAlp2Wj7oXjqfrJ+AHL70WdVX9hF7kWSu8uYkQ7Sb3vWuxx5lSL30MakWql FVWXjXY34ziHjs9QBrqFyRWz7DiTdjSnRfpROh/8DYUF99Zvr/tt/LDlLja6Cq6b2pau gOZg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:reply-to:list-subscribe:list-help:list-post :list-archive:list-unsubscribe:list-id:precedence:subject :mime-version:user-agent:references:in-reply-to:date:to:from :message-id:delivered-to; bh=d7URYUc06O4j1l5wnMye57WJWSYj+oZByEnR/0+b/M4=; fh=e5zN9xSzcxLA6bGo3lF+CqTbY/oLwzApV03EO/RBfgQ=; b=s5tujlZ0bl3Ge3fUq7V409GJ4lwK9l5vRMzrTQkl3cHEUPc7cupvtokAiHp+Xyy+oU CRrw6lisQhg2Eh7zYomvnv++geQPup9lKBa3+M4VbWFPiwmZ/l78lzXIzfmi+mUQWZRx 98oePi6AtSyyMVaj0QvacAF6XTEJUkVsZZ1UXmykMQRQpFFo65sT1LIG6qIvBQJxPVBA NeZm/D1U51qyWz+tPP7y7kO6H/aTcqEuauRAR+nUj38i71kQOOThxUY6JIunTm4DLBQt hQidtJ42Q1Mi7Oh7KPnGPCvLop+nRQPGiABbTGNJewXLPLgzfqPKYr5721XpxRasg0KR Qvtg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id ft1-20020a170907800100b00a26aa3c5871si4408896ejc.223.2023.12.26.07.52.23; Tue, 26 Dec 2023 07:52:23 -0800 (PST) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 584AA68CCB5; Tue, 26 Dec 2023 17:52:21 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from glom.nmugroup.com (glom.nmugroup.com [193.183.80.6]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 2E9A868CC6C for ; Tue, 26 Dec 2023 17:52:15 +0200 (EET) Received: from localhost (localhost [127.0.0.1]) by glom.nmugroup.com (Postfix) with ESMTP id C43EC5422287 for ; Tue, 26 Dec 2023 16:52:14 +0100 (CET) Received: from [192.168.1.110] (81-226-156-116-no2430.tbcn.telia.com [81.226.156.116]) (Authenticated sender: git01) by glom.nmugroup.com (Postfix) with ESMTPSA id 95015542138B for ; Tue, 26 Dec 2023 16:52:14 +0100 (CET) Message-ID: From: Tomas =?iso-8859-1?q?H=E4rdin?= To: FFmpeg development discussions and patches Date: Tue, 26 Dec 2023 16:52:13 +0100 In-Reply-To: References: User-Agent: Evolution 3.46.4-2 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 2/6] apc: Read duration from file 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" X-TUID: k/3uUpw5+Xck From b3756e6258d18139fb2b67e3d9bc795bafd1b065 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomas=20H=C3=A4rdin?= Date: Tue, 26 Dec 2023 14:31:59 +0100 Subject: [PATCH 2/6] apc: Read duration from file --- libavformat/apc.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/libavformat/apc.c b/libavformat/apc.c index b8b18c966c..7765c53088 100644 --- a/libavformat/apc.c +++ b/libavformat/apc.c @@ -24,6 +24,7 @@ #include "libavutil/channel_layout.h" #include "avformat.h" #include "demux.h" +#include "internal.h" static int apc_probe(const AVProbeData *p) { @@ -51,8 +52,9 @@ static int apc_read_header(AVFormatContext *s) st->codecpar->codec_type = AVMEDIA_TYPE_AUDIO; st->codecpar->codec_id = AV_CODEC_ID_ADPCM_IMA_APC; - avio_rl32(pb); /* number of samples */ + st->duration = avio_rl32(pb); /* number of samples */ st->codecpar->sample_rate = avio_rl32(pb); + avpriv_set_pts_info(st, 64, 1, st->codecpar->sample_rate); /* initial predictor values for adpcm decoder */ if ((ret = ff_get_extradata(s, st->codecpar, pb, 2 * 4)) < 0) -- 2.39.2 From patchwork Tue Dec 26 15:52:47 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Tomas_H=C3=A4rdin?= X-Patchwork-Id: 45326 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:6623:b0:194:e134:edd4 with SMTP id n35csp3111279pzh; Tue, 26 Dec 2023 07:52:59 -0800 (PST) X-Google-Smtp-Source: AGHT+IFMOK31+vzwS0Zs6jm0mAhDVX80iENd0l2h08rvSFgFycJdP+0j47KuUcXbBnZbIXiTec6u X-Received: by 2002:a17:906:5305:b0:a27:37b8:2809 with SMTP id h5-20020a170906530500b00a2737b82809mr157203ejo.8.1703605978518; Tue, 26 Dec 2023 07:52:58 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1703605978; cv=none; d=google.com; s=arc-20160816; b=01bma5vTpb8W6qK1LIllOICeA30iLxF2IkwiS0hhse6MpQ8LNRHLUABmzauyem3HdL ZPw1JTX1R5rR6t7RKzmTQeakpgGnXIaa85oiG7Hl4KUSXP06YwsWxpipQNqK+mvOSmHT BNoQk5sJ3Yxdk1HtWv29wFV7JBi+Q18l5gd71qWRU0OxvN//mtTNAmYGNiDnvAXXWQQS bu8rA7pRxKLjplbtvpAB/CK13Os6EcpgAhYJMWzlqCF9Cj3oIPr3ORrEctlvqvh1S8JV K5B/pG5pNLBm6NHhL9vGq3eWVvT07v7wrqYD3cFbjQglJ4kt3DWW69Xk1IeKzYBaOIQ3 3bLA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:reply-to:list-subscribe:list-help:list-post :list-archive:list-unsubscribe:list-id:precedence:subject :mime-version:user-agent:references:in-reply-to:date:to:from :message-id:delivered-to; bh=9usCxtkp8ouWn/TR+hS7X6m2Jtc4LyzJG/z9wHoZxBw=; fh=e5zN9xSzcxLA6bGo3lF+CqTbY/oLwzApV03EO/RBfgQ=; b=A90R11x9J+WEmTLc1/MXh+gDqCB6eDjTqSBHL/S5PbAigyOQh8rB/GB/OUJ6x7EGei laTZgZxu4OxytX/PinHooPsQ306s5P9acieg1w4misstZssWggmt4FU6TgdUM/5OWaSo IgnWaaWzE5OQgaL5b0vL3nAGUFiAKOuP2odEffvrfp9YxstmqKcrdmYif7N4nwWZ2cab DHBbz/oQnMp3iPr5NFYyBBOslubYhAOwcldwcY8OHudq8BJRA97JBrUVoGZxRYIJmPP6 DehUrGGIdkCgGAQeB/355nTd+YjnsLo9/k+ywKOSksOVPqTCi6a8hhN4a5oEUoBTDUN9 74ig== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id r11-20020a170906a20b00b00a26e21e4afbsi2591507ejy.118.2023.12.26.07.52.57; Tue, 26 Dec 2023 07:52:58 -0800 (PST) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 869D868CCC5; Tue, 26 Dec 2023 17:52:55 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from glom.nmugroup.com (glom.nmugroup.com [193.183.80.6]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id EACE568CC6C for ; Tue, 26 Dec 2023 17:52:48 +0200 (EET) Received: from localhost (localhost [127.0.0.1]) by glom.nmugroup.com (Postfix) with ESMTP id 8CEF85422287 for ; Tue, 26 Dec 2023 16:52:48 +0100 (CET) Received: from [192.168.1.110] (81-226-156-116-no2430.tbcn.telia.com [81.226.156.116]) (Authenticated sender: git01) by glom.nmugroup.com (Postfix) with ESMTPSA id 5C0ED542138B for ; Tue, 26 Dec 2023 16:52:48 +0100 (CET) Message-ID: From: Tomas =?iso-8859-1?q?H=E4rdin?= To: FFmpeg development discussions and patches Date: Tue, 26 Dec 2023 16:52:47 +0100 In-Reply-To: References: User-Agent: Evolution 3.46.4-2 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 3/6] Add CRYO APC muxer 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" X-TUID: ByPSZXrZJAY5 From 14f3dd40a49ebf5ea020465732511e9d79a2e14a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomas=20H=C3=A4rdin?= Date: Tue, 26 Dec 2023 14:32:10 +0100 Subject: [PATCH 3/6] Add CRYO APC muxer --- Changelog | 1 + doc/general_contents.texi | 2 +- libavformat/Makefile | 1 + libavformat/allformats.c | 1 + libavformat/apcenc.c | 125 ++++++++++++++++++++++++++++++++++++++ libavformat/version.h | 2 +- 6 files changed, 130 insertions(+), 2 deletions(-) create mode 100644 libavformat/apcenc.c diff --git a/Changelog b/Changelog index ca38546262..344bf4d1cf 100644 --- a/Changelog +++ b/Changelog @@ -3,6 +3,7 @@ releases are sorted from youngest to oldest. version : - LEAD MCMP decoder +- CRYO APC muxer version 6.1: - libaribcaption decoder diff --git a/doc/general_contents.texi b/doc/general_contents.texi index 3328753acb..a43736e3a8 100644 --- a/doc/general_contents.texi +++ b/doc/general_contents.texi @@ -448,7 +448,7 @@ library: @item CRC testing format @tab X @tab @item Creative Voice @tab X @tab X @tab Created for the Sound Blaster Pro. -@item CRYO APC @tab @tab X +@item CRYO APC @tab X @tab X @tab Audio format used in some games by CRYO Interactive Entertainment. @item D-Cinema audio @tab X @tab X @item Deluxe Paint Animation @tab @tab X diff --git a/libavformat/Makefile b/libavformat/Makefile index 329055ccfd..d88a65d713 100644 --- a/libavformat/Makefile +++ b/libavformat/Makefile @@ -105,6 +105,7 @@ OBJS-$(CONFIG_AMV_MUXER) += amvenc.o OBJS-$(CONFIG_ANM_DEMUXER) += anm.o OBJS-$(CONFIG_APAC_DEMUXER) += apac.o rawdec.o OBJS-$(CONFIG_APC_DEMUXER) += apc.o +OBJS-$(CONFIG_APC_MUXER) += apcenc.o OBJS-$(CONFIG_APE_DEMUXER) += ape.o apetag.o img2.o OBJS-$(CONFIG_APM_DEMUXER) += apm.o OBJS-$(CONFIG_APM_MUXER) += apm.o rawenc.o diff --git a/libavformat/allformats.c b/libavformat/allformats.c index d4b505a5a3..ab74c2028f 100644 --- a/libavformat/allformats.c +++ b/libavformat/allformats.c @@ -60,6 +60,7 @@ extern const FFOutputFormat ff_amv_muxer; extern const AVInputFormat ff_anm_demuxer; extern const AVInputFormat ff_apac_demuxer; extern const AVInputFormat ff_apc_demuxer; +extern const FFOutputFormat ff_apc_muxer; extern const AVInputFormat ff_ape_demuxer; extern const AVInputFormat ff_apm_demuxer; extern const FFOutputFormat ff_apm_muxer; diff --git a/libavformat/apcenc.c b/libavformat/apcenc.c new file mode 100644 index 0000000000..ba024ead50 --- /dev/null +++ b/libavformat/apcenc.c @@ -0,0 +1,125 @@ +/* + * CRYO APC audio format muxer + * Copyright (c) 2023 Tomas Härdin + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include "avio_internal.h" +#include "internal.h" +#include "mux.h" + +#define APC_HEADER_SIZE (8*4) + +static int apc_write_header(AVFormatContext *s) +{ + AVIOContext *pb = s->pb; + AVCodecParameters *par; + AVStream *st; + + if (s->nb_streams != 1) { + av_log(s, AV_LOG_ERROR, "Must have exactly one stream\n"); + return AVERROR(EINVAL); + } + + st = s->streams[0]; + par = st->codecpar; + + if (par->ch_layout.nb_channels <= 0 || par->ch_layout.nb_channels > 2) { + av_log(s, AV_LOG_ERROR, "Must be mono or stereo\n"); + return AVERROR(EINVAL); + } + + if (par->extradata_size != 0 && par->extradata_size != 8) { + av_log(s, AV_LOG_ERROR, + "Must have exactly 0 or 8 bytes of extradata, got %i\n", + par->extradata_size); + return AVERROR(EINVAL); + } + + ffio_wfourcc(pb, "CRYO"); + ffio_wfourcc(pb, "_APC"); + ffio_wfourcc(pb, "1.20"); + avio_wl32(pb, 0); // number or samples + avio_wl32(pb, par->sample_rate); + + // write extradata if we have it (remuxing) + // else write dummy values and wait for AV_PKT_DATA_NEW_EXTRADATA (encoding) + if (par->extradata_size) { + avio_write(pb, par->extradata, par->extradata_size); + } else { + avio_wl64(pb, 0); + } + + avio_wl32(pb, par->ch_layout.nb_channels - 1); + avpriv_set_pts_info(st, 64, 1, par->sample_rate); + return 0; +} + +static int apc_write_packet(AVFormatContext *s, AVPacket *pkt) +{ + size_t extradata_size = 0; + const uint8_t *extradata = av_packet_get_side_data( + pkt, AV_PKT_DATA_NEW_EXTRADATA, &extradata_size); + + if (extradata_size == 8) { + // we got predictors from encoder + // try to seek back end write them + int64_t pos = avio_tell(s->pb), err; + if ((err = avio_seek(s->pb, 20, SEEK_SET)) >= 0) { + avio_write(s->pb, extradata, extradata_size); + avio_seek(s->pb, pos, SEEK_SET); + } else { + av_log(s, AV_LOG_ERROR, "Got predictors from encoder but couldn't seek back to write them\n"); + // fail since we should always be able to do this within the avio cache + // unless the encoder gave us predictors way too late for some reason + return err; + } + } + + avio_write(s->pb, pkt->data, pkt->size); + return 0; +} + +static int apc_write_trailer(AVFormatContext *s) +{ + int64_t file_size = avio_tell(s->pb); + + // write length, if we're able to seek back + if (avio_seek(s->pb, 12, SEEK_SET) >= 0) { + if (file_size - APC_HEADER_SIZE > + UINT32_MAX * s->streams[0]->codecpar->ch_layout.nb_channels / 2) { + av_log(s, AV_LOG_ERROR, "File too large\n"); + return AVERROR(EINVAL); + } + + avio_wl32(s->pb, (file_size - APC_HEADER_SIZE) * + 2 / s->streams[0]->codecpar->ch_layout.nb_channels); + } + return 0; +} + +const FFOutputFormat ff_apc_muxer = { + .p.name = "apc", + .p.long_name = NULL_IF_CONFIG_SMALL("CRYO APC"), + .p.extensions = "apc", + .p.audio_codec = AV_CODEC_ID_ADPCM_IMA_APC, + .write_header = apc_write_header, + .write_packet = apc_write_packet, + .write_trailer = apc_write_trailer, +}; + diff --git a/libavformat/version.h b/libavformat/version.h index 2a28a3bf40..6a80f3ac4e 100644 --- a/libavformat/version.h +++ b/libavformat/version.h @@ -31,7 +31,7 @@ #include "version_major.h" -#define LIBAVFORMAT_VERSION_MINOR 17 +#define LIBAVFORMAT_VERSION_MINOR 18 #define LIBAVFORMAT_VERSION_MICRO 100 #define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \ -- 2.39.2 From patchwork Tue Dec 26 15:53:07 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?q?Tomas_H=C3=A4rdin?= X-Patchwork-Id: 45327 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:6623:b0:194:e134:edd4 with SMTP id n35csp3111424pzh; Tue, 26 Dec 2023 07:53:18 -0800 (PST) X-Google-Smtp-Source: AGHT+IGN0OT06MOZ9mcu0Jc2kndUEGSYPP1MH1oT9z3WBTahOvgDkWueUA2MI2+t5pnyFLBWh2x1 X-Received: by 2002:a17:906:a182:b0:a23:44e8:81b with SMTP id s2-20020a170906a18200b00a2344e8081bmr3336940ejy.73.1703605998110; Tue, 26 Dec 2023 07:53:18 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1703605998; cv=none; d=google.com; s=arc-20160816; b=hBsgewnCogpPyZNrsKBlP+rEo6uZitTpjBdpAWiwc6F7bux4jQo+Hj2eLD5Smo+nv3 2dxM+5UDS+zbG47PdBJTaEI2+cjO0CO1EjcgIAdwZvNaZeTdGeTiTShzfHNZeaxh64dF fcHb1Wd+Hjh3Rw/40hXj+0dxoZolDl3tWnTqSanHpg1craoXiVHuhpsdW9no1xr3aHZF volURhbzEBW0ESppnXS4v8bggOLDhXGg2xklFrrt6lvIRmGPPJ9fhTZPl7Nhs1r9RsLg lRBAQNQdyp5UNyxpetmaZ4ULE5iQqeKKKxiPpgHvpNxf/2py+JbhgEGVFJHWZl1YOUDJ F2Fw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:reply-to:list-subscribe:list-help:list-post :list-archive:list-unsubscribe:list-id:precedence:subject :mime-version:user-agent:references:in-reply-to:date:to:from :message-id:delivered-to; bh=w5Mr6g4nTZ1twyVjWDGrAacJo/R2ObxaGPVCdXXyC7Q=; fh=e5zN9xSzcxLA6bGo3lF+CqTbY/oLwzApV03EO/RBfgQ=; b=DgKRftxMBpS2CHC7e92mbmxXQS3qlwdAeBQUe3tCoqeKHWJs7i1GntC4jQG4zdZlrT baR1dzzHTH2egh13KalZXssYrUR2Oj/4bEI0xq5uRJGVJK54sAAdp8rOFcYNRXRtNLPb oAIyh4IiZS0xv4OZEv19dyHEfyT+90YE/VCnDqBoSI3T6m1ChXVm2jOievq3ZYyJbtTT /IaO3brWPuy3WhEl9rcfIfPYzUV8ufvCQ/U72WjjGc2Z1KGC3CpPR8vsLn6pjXLOOmpz R6x6WtYFZAe8Lj5s6qmzy7n9JH9uvpLnAmRhJal0gD82vPoVCbl2RDCOLlJd6JqCYMW7 05AA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id r1-20020a1709060d4100b00a26b378370bsi4288395ejh.776.2023.12.26.07.53.17; Tue, 26 Dec 2023 07:53:18 -0800 (PST) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id A56B368CA03; Tue, 26 Dec 2023 17:53:15 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from glom.nmugroup.com (glom.nmugroup.com [193.183.80.6]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 3E8D768CCB3 for ; Tue, 26 Dec 2023 17:53:09 +0200 (EET) Received: from localhost (localhost [127.0.0.1]) by glom.nmugroup.com (Postfix) with ESMTP id D34355422287 for ; Tue, 26 Dec 2023 16:53:08 +0100 (CET) Received: from [192.168.1.110] (81-226-156-116-no2430.tbcn.telia.com [81.226.156.116]) (Authenticated sender: git01) by glom.nmugroup.com (Postfix) with ESMTPSA id 9EEA05421B47 for ; Tue, 26 Dec 2023 16:53:08 +0100 (CET) Message-ID: From: Tomas =?iso-8859-1?q?H=E4rdin?= To: FFmpeg development discussions and patches Date: Tue, 26 Dec 2023 16:53:07 +0100 In-Reply-To: References: User-Agent: Evolution 3.46.4-2 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 4/6] Un-mark IMA APC as intra-only 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" X-TUID: 3YBE/Gt6EchK From dd84044af61931988e43bd58c202fe4e7ca7069a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomas=20H=C3=A4rdin?= Date: Tue, 26 Dec 2023 16:30:35 +0100 Subject: [PATCH 4/6] Un-mark IMA APC as intra-only Packets must be decoded in order. There is no way to seek and get a bitexact decode. --- libavcodec/codec_desc.c | 2 +- libavformat/apc.c | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/libavcodec/codec_desc.c b/libavcodec/codec_desc.c index 432a9c9ea6..899c082c83 100644 --- a/libavcodec/codec_desc.c +++ b/libavcodec/codec_desc.c @@ -2431,7 +2431,7 @@ static const AVCodecDescriptor codec_descriptors[] = { .type = AVMEDIA_TYPE_AUDIO, .name = "adpcm_ima_apc", .long_name = NULL_IF_CONFIG_SMALL("ADPCM IMA CRYO APC"), - .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSY, + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_ADPCM_VIMA, diff --git a/libavformat/apc.c b/libavformat/apc.c index 7765c53088..d1891954a8 100644 --- a/libavformat/apc.c +++ b/libavformat/apc.c @@ -75,8 +75,13 @@ static int apc_read_header(AVFormatContext *s) static int apc_read_packet(AVFormatContext *s, AVPacket *pkt) { + int first = avio_tell(s->pb) == 32; if (av_get_packet(s->pb, pkt, MAX_READ_SIZE) <= 0) return AVERROR(EIO); + // each IMA APC packet depends on the one before for bitexact decode + // extradata is used to initialize the decoder + if (first) + pkt->flags |= AV_PKT_FLAG_KEY; pkt->stream_index = 0; return 0; } -- 2.39.2 From patchwork Tue Dec 26 15:53:35 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?q?Tomas_H=C3=A4rdin?= X-Patchwork-Id: 45328 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:6623:b0:194:e134:edd4 with SMTP id n35csp3111663pzh; Tue, 26 Dec 2023 07:53:47 -0800 (PST) X-Google-Smtp-Source: AGHT+IGZ3adw/37O/LdXMl95SouK7INX5ZxouJ5MBfJTmZAIp9BqdNx0t8BA7KduVnzLEPuvbfzI X-Received: by 2002:a17:907:1b07:b0:a23:679c:4683 with SMTP id mp7-20020a1709071b0700b00a23679c4683mr11849171ejc.4.1703606026616; Tue, 26 Dec 2023 07:53:46 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1703606026; cv=none; d=google.com; s=arc-20160816; b=VkVonAgrGFljUct0qXP2ACf6A+TmJM5eg3jZ0xh50O4Vldoj8qAh+OFxoMcgaQ3s21 svwR1GIZQY7y9d+yhHOxpZ/epLOmN2UaPa0VcUOQkVz7cnbyhUS59pqzj+z/Jbk1Rl28 3Vrvui0ttySGlA6d+6wldo6OkA9eIO8kw2sNEWrc2HLTB6fIfV816f07yEqXsouH4UT7 WBNH4Qzjr25mgyRrSrp3A/PHTj9sdRs3pISe7Vfiswic/H3eKFr4xOWKRdo+yUoqON2E kQqRNp4QjHCrtI8xc/5rMag5Vubk+syVEe/2b/dKloj19i7N1IHIG0dVbnEvGO3kGEGT d65A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:reply-to:list-subscribe:list-help:list-post :list-archive:list-unsubscribe:list-id:precedence:subject :mime-version:user-agent:references:in-reply-to:date:to:from :message-id:delivered-to; bh=ok9ql6OX1c1MAMeX5EjSNrpfBCwyrV8uhFLPB6XEBtU=; fh=e5zN9xSzcxLA6bGo3lF+CqTbY/oLwzApV03EO/RBfgQ=; b=ulztTfpIIaHL+FtZ+W+3so3+qHZELkHvsePJ7139iYGaJBLc7GgyW+Onw/4y7VmLJ2 WOdRo7PCC/W0F0RMmhQdCkq01aEwoVnO0yKqo6vOGIM4yE8/4/vHo13j26UR/KbymZMx +f1wcqP4c/JZBFBSf/1mghMRKgdlX0QtnNgWcnFm2na2jHAhCz/Se8yN+xoLvzCa2leW 5qG6dSNvuZvUrfg2v79eg7Ifelxo4zazqMDSukxnfj/aq+YTsyqZ5Gri77k/980yhyg1 Zwmx4EzuTBbnv1XbM3c2EOGgg3bTLqjFyki7wMpmWbCQ1gE5zWm0ud0f2rwmbplG2+LP bHnA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id u17-20020a170906409100b00a233627daa3si5555738ejj.726.2023.12.26.07.53.45; Tue, 26 Dec 2023 07:53:46 -0800 (PST) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id AA60568CCED; Tue, 26 Dec 2023 17:53:43 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from glom.nmugroup.com (glom.nmugroup.com [193.183.80.6]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 573E668CC0B for ; Tue, 26 Dec 2023 17:53:37 +0200 (EET) Received: from localhost (localhost [127.0.0.1]) by glom.nmugroup.com (Postfix) with ESMTP id ED8775422287 for ; Tue, 26 Dec 2023 16:53:36 +0100 (CET) Received: from [192.168.1.110] (81-226-156-116-no2430.tbcn.telia.com [81.226.156.116]) (Authenticated sender: git01) by glom.nmugroup.com (Postfix) with ESMTPSA id B84875421B47 for ; Tue, 26 Dec 2023 16:53:36 +0100 (CET) Message-ID: <44758a073268659c5c454ce922362669bed15b11.camel@haerdin.se> From: Tomas =?iso-8859-1?q?H=E4rdin?= To: FFmpeg development discussions and patches Date: Tue, 26 Dec 2023 16:53:35 +0100 In-Reply-To: References: User-Agent: Evolution 3.46.4-2 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 5/6] Add ADPCM IMA CRYO APC encoder 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" X-TUID: sl96Lluk+IXe Hopefully I got the testing right From 047ba1051d5e03b2a54d2aad514dd4501750bc71 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomas=20H=C3=A4rdin?= Date: Tue, 26 Dec 2023 14:32:20 +0100 Subject: [PATCH 5/6] Add ADPCM IMA CRYO APC encoder No trellis quantization yet --- Changelog | 1 + doc/general_contents.texi | 2 +- libavcodec/adpcmenc.c | 33 +++++++++++++++++++++++++++++++++ libavcodec/allcodecs.c | 1 + libavcodec/version.h | 2 +- tests/fate/acodec.mak | 2 ++ tests/ref/acodec/adpcm-ima_apc | 4 ++++ 7 files changed, 43 insertions(+), 2 deletions(-) create mode 100644 tests/ref/acodec/adpcm-ima_apc diff --git a/Changelog b/Changelog index 344bf4d1cf..38ad342e09 100644 --- a/Changelog +++ b/Changelog @@ -4,6 +4,7 @@ releases are sorted from youngest to oldest. version : - LEAD MCMP decoder - CRYO APC muxer +- ADPCM IMA APC encoder version 6.1: - libaribcaption decoder diff --git a/doc/general_contents.texi b/doc/general_contents.texi index a43736e3a8..f02ea89b54 100644 --- a/doc/general_contents.texi +++ b/doc/general_contents.texi @@ -1169,7 +1169,7 @@ following image formats are supported: @item ADPCM IMA Acorn Replay @tab @tab X @item ADPCM IMA AMV @tab X @tab X @tab Used in AMV files -@item ADPCM IMA APC @tab @tab X +@item ADPCM IMA APC @tab X @tab X @tab Codec used in games by Cryo Interactive @item ADPCM IMA Cunning Developments @tab @tab X @item ADPCM IMA Electronic Arts EACS @tab @tab X diff --git a/libavcodec/adpcmenc.c b/libavcodec/adpcmenc.c index 63afffc58f..47dbec41fa 100644 --- a/libavcodec/adpcmenc.c +++ b/libavcodec/adpcmenc.c @@ -74,6 +74,7 @@ typedef struct ADPCMEncodeContext { TrellisNode *node_buf; TrellisNode **nodep_buf; uint8_t *trellis_hash; + int extradata_updated; } ADPCMEncodeContext; #define FREEZE_INTERVAL 128 @@ -157,6 +158,15 @@ static av_cold int adpcm_encode_init(AVCodecContext *avctx) bytestream_put_le16(&extradata, ff_adpcm_AdaptCoeff2[i] * 4); } ) /* End of CASE */ + CASE(ADPCM_IMA_APC, + if (avctx->trellis) { + av_log(avctx, AV_LOG_ERROR, "trellis encoding not implemented for CRYO APC\n"); + return AVERROR_PATCHWELCOME; + } + //extradata will be output in adpcm_encode_frame() + avctx->frame_size = s->block_size * 2 / channels; + avctx->block_align = s->block_size; + ) /* End of CASE */ CASE(ADPCM_YAMAHA, avctx->frame_size = s->block_size * 2 / channels; avctx->block_align = s->block_size; @@ -622,6 +632,28 @@ static int adpcm_encode_frame(AVCodecContext *avctx, AVPacket *avpkt, dst = avpkt->data; switch(avctx->codec->id) { + CASE(ADPCM_IMA_APC, + //initialize predictors using initial samples + if (!c->extradata_updated) { + uint8_t *side_data = av_packet_new_side_data( + avpkt, AV_PKT_DATA_NEW_EXTRADATA, 8); + + if (!side_data) { + return AVERROR(ENOMEM); + } + + for (int ch = 0; ch < channels; ch++) { + c->status[ch].prev_sample = samples[ch]; + bytestream_put_le32(&side_data, c->status[ch].prev_sample); + } + c->extradata_updated = 1; + } + for (int i = 0; i < frame->nb_samples*channels/2; i++) { + uint8_t l = adpcm_ima_compress_sample(&c->status[0], samples[2*i+0]); + uint8_t r = adpcm_ima_compress_sample(&c->status[st], samples[2*i+1]); + *dst++ = (l<<4) | r; + } + ) /* End of CASE */ CASE(ADPCM_IMA_WAV, int blocks = (frame->nb_samples - 1) / 8; @@ -1028,6 +1060,7 @@ ADPCM_ENCODER(ADPCM_IMA_QT, adpcm_ima_qt, sample_fmts_p, 0, ADPCM_ENCODER(ADPCM_IMA_SSI, adpcm_ima_ssi, sample_fmts, AV_CODEC_CAP_SMALL_LAST_FRAME, "ADPCM IMA Simon & Schuster Interactive") ADPCM_ENCODER(ADPCM_IMA_WAV, adpcm_ima_wav, sample_fmts_p, 0, "ADPCM IMA WAV") ADPCM_ENCODER(ADPCM_IMA_WS, adpcm_ima_ws, sample_fmts, AV_CODEC_CAP_SMALL_LAST_FRAME, "ADPCM IMA Westwood") +ADPCM_ENCODER(ADPCM_IMA_APC, adpcm_ima_apc, sample_fmts, 0, "ADPCM IMA CRYO APC") ADPCM_ENCODER(ADPCM_MS, adpcm_ms, sample_fmts, 0, "ADPCM Microsoft") ADPCM_ENCODER(ADPCM_SWF, adpcm_swf, sample_fmts, 0, "ADPCM Shockwave Flash") ADPCM_ENCODER(ADPCM_YAMAHA, adpcm_yamaha, sample_fmts, 0, "ADPCM Yamaha") diff --git a/libavcodec/allcodecs.c b/libavcodec/allcodecs.c index 2662adb754..33bdd72d27 100644 --- a/libavcodec/allcodecs.c +++ b/libavcodec/allcodecs.c @@ -668,6 +668,7 @@ extern const FFCodec ff_adpcm_ima_amv_encoder; extern const FFCodec ff_adpcm_ima_alp_decoder; extern const FFCodec ff_adpcm_ima_alp_encoder; extern const FFCodec ff_adpcm_ima_apc_decoder; +extern const FFCodec ff_adpcm_ima_apc_encoder; extern const FFCodec ff_adpcm_ima_apm_decoder; extern const FFCodec ff_adpcm_ima_apm_encoder; extern const FFCodec ff_adpcm_ima_cunning_decoder; diff --git a/libavcodec/version.h b/libavcodec/version.h index 2a08e42d7e..0ef6c991f3 100644 --- a/libavcodec/version.h +++ b/libavcodec/version.h @@ -29,7 +29,7 @@ #include "version_major.h" -#define LIBAVCODEC_VERSION_MINOR 33 +#define LIBAVCODEC_VERSION_MINOR 34 #define LIBAVCODEC_VERSION_MICRO 100 #define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ diff --git a/tests/fate/acodec.mak b/tests/fate/acodec.mak index 7b09e3bd63..e7e3ae5ab8 100644 --- a/tests/fate/acodec.mak +++ b/tests/fate/acodec.mak @@ -48,6 +48,7 @@ fate-acodec-pcm-f%be: FMT = au FATE_ACODEC_ADPCM_RESAMPLE-$(call ENCDEC, ADPCM_ADX, ADX) += adx FATE_ACODEC_ADPCM_RESAMPLE-$(call ENCDEC, ADPCM_ARGO, ARGO_ASF) += argo +FATE_ACODEC_ADPCM-$(call ENCDEC, ADPCM_IMA_APC, APC) += ima_apc FATE_ACODEC_ADPCM-$(call ENCDEC, ADPCM_IMA_APM, APM) += ima_apm FATE_ACODEC_ADPCM-$(call ENCDEC, ADPCM_IMA_ALP, ALP) += ima_alp FATE_ACODEC_ADPCM_RESAMPLE-$(call ENCDEC, ADPCM_IMA_QT, AIFF) += ima_qt @@ -69,6 +70,7 @@ fate-acodec-adpcm-%: CODEC = adpcm_$(@:fate-acodec-adpcm-%=%) fate-acodec-adpcm-adx: FMT = adx fate-acodec-adpcm-argo: FMT = argo_asf +fate-acodec-adpcm-ima_apc: FMT = apc fate-acodec-adpcm-ima_apm: FMT = apm fate-acodec-adpcm-ima_qt: FMT = aiff fate-acodec-adpcm-ima_ssi: FMT = kvag diff --git a/tests/ref/acodec/adpcm-ima_apc b/tests/ref/acodec/adpcm-ima_apc new file mode 100644 index 0000000000..f168734c78 --- /dev/null +++ b/tests/ref/acodec/adpcm-ima_apc @@ -0,0 +1,4 @@ +45aca515c679bb0c315df766432d5630 *tests/data/fate/acodec-adpcm-ima_apc.apc +265248 tests/data/fate/acodec-adpcm-ima_apc.apc +03fc41cf61b7a160359147cd6363562a *tests/data/fate/acodec-adpcm-ima_apc.out.wav +stddev: 904.04 PSNR: 37.21 MAXDIFF:34026 bytes: 1058400/ 1060864 -- 2.39.2 From patchwork Tue Dec 26 15:53:56 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Tomas_H=C3=A4rdin?= X-Patchwork-Id: 45329 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:6623:b0:194:e134:edd4 with SMTP id n35csp3111840pzh; Tue, 26 Dec 2023 07:54:07 -0800 (PST) X-Google-Smtp-Source: AGHT+IGFCcf7IZc/YqpJkyGHWlSlhV/eGAoxu/rS86xwTo5UdBj6vlVFY6k2Ue9mFAhcJz1kC2VN X-Received: by 2002:a17:906:3f5b:b0:a23:495e:4ef4 with SMTP id f27-20020a1709063f5b00b00a23495e4ef4mr3082531ejj.21.1703606046599; Tue, 26 Dec 2023 07:54:06 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1703606046; cv=none; d=google.com; s=arc-20160816; b=bDjrHIGcdOK8Ej/jOEVY/+v5f/mW2jPusSS75ay0woX9gTEr3GvhC+BWn1Xy0Jp+QW EAscFcGuwpBqrCc/tnuH2+5fnOi8hjWdhnzK854+iVW2OPigOYgpgv2/p51rkfdZGofU E5NQR9fl7bgupyc51BOZRJ9LEGAGFT1MgRDt/EY4ZSr8Qf98txWTCqWHYFKB6bCtTR10 Qe44VAXazSisUZtHfavVnyNyomQoxMLL0CsF8UySdIjEfPkwXyPoziyMzuWs9m//3Azi UE4ltohbCTOqgrA1P71RjtmqnCNYnvgpWzTvaZbHoBsK9QzOaxgISmKcgjVP2izrTmqf IMOg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:reply-to:list-subscribe:list-help:list-post :list-archive:list-unsubscribe:list-id:precedence:subject :mime-version:user-agent:references:in-reply-to:date:to:from :message-id:delivered-to; bh=EWuC1WCrnoeO9NBR8o53eAIhCtrFuiNDurzveN+lWmQ=; fh=e5zN9xSzcxLA6bGo3lF+CqTbY/oLwzApV03EO/RBfgQ=; b=1JQm85Wjk9jN1zep2HvHrLndWD/7YfAC1YAESJPILdPkxl9okRZu6zarE+OrYvfuYl Ia1xdJMmt/Hw9ShiaAiSVIRnaMFFg6d7outZBBGgrc4Ztn6OZj2OCdf9pgFi4fKMbY/c 2JdhQCIAnttIU8Ds9/WRd8eSGV7ksJhsWwXi6SaqRFXxcnuEVQIf5kXuOKeHGXf9RY8O cbELg8SgdL4QbvAjvmTXe8EdKuFCnGFc8MKiqGc8OyVPN/uTu4reNS1PAitQFQrjmTtE Yhuj5NcV4iSQm7xmclFK6xIPjxqPijtHfmV4IiEKFKtdymdopJJgAYevi+UAUhfLGXa9 KK6g== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id gk2-20020a17090790c200b00a26e278d31fsi2541194ejb.671.2023.12.26.07.54.06; Tue, 26 Dec 2023 07:54:06 -0800 (PST) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id B7D0768CCFE; Tue, 26 Dec 2023 17:54:03 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from glom.nmugroup.com (glom.nmugroup.com [193.183.80.6]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id A559B68CA03 for ; Tue, 26 Dec 2023 17:53:57 +0200 (EET) Received: from localhost (localhost [127.0.0.1]) by glom.nmugroup.com (Postfix) with ESMTP id 48AA05422287 for ; Tue, 26 Dec 2023 16:53:57 +0100 (CET) Received: from [192.168.1.110] (81-226-156-116-no2430.tbcn.telia.com [81.226.156.116]) (Authenticated sender: git01) by glom.nmugroup.com (Postfix) with ESMTPSA id 15F2D5421B47 for ; Tue, 26 Dec 2023 16:53:56 +0100 (CET) Message-ID: From: Tomas =?iso-8859-1?q?H=E4rdin?= To: FFmpeg development discussions and patches Date: Tue, 26 Dec 2023 16:53:56 +0100 In-Reply-To: References: User-Agent: Evolution 3.46.4-2 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 6/6] Add myself as APC maintainer 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" X-TUID: jupCFUaiOiJ7 From 616ab30780e72beb3f07ef0cb2f26ac1c8181524 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomas=20H=C3=A4rdin?= Date: Tue, 26 Dec 2023 16:45:33 +0100 Subject: [PATCH 6/6] Add myself as APC maintainer --- MAINTAINERS | 1 + 1 file changed, 1 insertion(+) diff --git a/MAINTAINERS b/MAINTAINERS index 3430e1722b..da111e72fb 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -391,6 +391,7 @@ Muxers/Demuxers: aiffenc.c Baptiste Coudurier, Matthieu Bouron alp.c Zane van Iperen amvenc.c Zane van Iperen + apc* Tomas Härdin apm.c Zane van Iperen apngdec.c Benoit Fouet argo_asf.c Zane van Iperen -- 2.39.2