From patchwork Fri May 7 16:50:47 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Cameron Cawley X-Patchwork-Id: 27685 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:b214:0:0:0:0:0 with SMTP id b20csp729671iof; Fri, 7 May 2021 10:42:30 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyErHkXITkMRSbAC5VgbRrQWLGctXY+3n+1TziCUEWN3X4HD9QQYqEG1L9J5+eENbNC/9KE X-Received: by 2002:a05:6402:84b:: with SMTP id b11mr12812000edz.289.1620409350411; Fri, 07 May 2021 10:42:30 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1620409350; cv=none; d=google.com; s=arc-20160816; b=tFxyhnwSFsNg1bd3uZDg95/K/Pv7AZBOY5Vl7fm/wMuKL5QguLIGzwtf8x3lNphoP9 9ijpfRzkoj2rynoUNA8FdCtGDPCOMUlD0Hng2Y+bfcqbxqxJYPHHWjfI17INISno7P1d U3Z+ksTzQ5BAfqbQ3U2TldgDaRuLZwjGJIJ3xZkcrqaSOP2sMIJ3GpNSeF//rfDOnXVg Lfe1uZhgvLDUztMBaqdXZ4wFLVx0VNMchIYN+rxnkliuA4P6xj6mydfDoJdj+pAP36lQ tE6jKHnfe5XJA6NUOW0GNsgeRF5sGN3aFNapNm0JJqgh6YSWhMgF14Elm/7dFmyfwt07 zY3w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:message-id:date:to:from :dkim-signature:delivered-to; bh=KG0Cn58xmYArB7wVsAex2FAgh7YF0tQPC8U3WdkaSsI=; b=kkg6UqtmGdO/qXBSAaPc3XBUYzZpnYKzb0X12LhKWXxl/2rIUITM48UL1DIVHYdaHb K1h8L58jZrWHqMQRHZheou1QBhQCdLECeBXv3xDTOIn9yAELJMPYuGK+mvMJXedyUEdd 1/Zedbfru51kjxpffrS4m87S66pKx9U2I/8y+cJvKBYSmniAGXoF5sEn6mzyzCkARnDf HnfnvbcQPjB/dGx+oakfQYs9ZULF/nvWqGxqEWcO8hwyyjOyXbpct1Fqo7JhL9MEx6iY wEwYMVX38Pez52uSFWe7N6U9x7NI2nTXmt2sdtAIKSQCYvzvykVH1CIAUgWoxbkbW0Ao Lbig== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=YZVpeFnG; 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; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id a22si5516622ejg.414.2021.05.07.10.42.22; Fri, 07 May 2021 10:42:30 -0700 (PDT) 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; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=YZVpeFnG; 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; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 0A4F568058F; Fri, 7 May 2021 20:42:19 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-lj1-f175.google.com (mail-lj1-f175.google.com [209.85.208.175]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 46DFD68058F for ; Fri, 7 May 2021 20:42:12 +0300 (EEST) Received: by mail-lj1-f175.google.com with SMTP id u25so12572030ljg.7 for ; Fri, 07 May 2021 10:42:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=xaXuy20ahOgahk/1v9KDzeZ3jdo7gqME8YCjYmNuPQY=; b=YZVpeFnGA3Z6QV0m8V9tlFEr1j1hQnD+pFItfW/5l89kyQR5GWdtAO7vo9jvd3Fc9/ KRL2v5JrDa2xMauLPRNA9CnCZvDdw/wwK6ex5FNGvabZ6MCX1pI5dshAfLwWMIHJ674q 4hrQeNdpt344aX3h8ozaLvskgKYwOoe1r8drAOYQuD0DfOIvUO4zGjlYfTSvJJUWufo/ vhALM0kdMX8YOI9v6TB6MTu3RLucjNou0/tPJl0sfCpV6zYHRUpgZ9j45SJKdpiFEdJH vrF/VoCu/FSyAWkMKs+JceagUtukFJay/VdtcsN4ZNWRI0SDxbStCJ2xQrjqdbfIo0Gr /MkQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=xaXuy20ahOgahk/1v9KDzeZ3jdo7gqME8YCjYmNuPQY=; b=R41erfQGDuz1oeY0mRglQ6vdExYRuPouhxRPamUQDuspDVO0Uwsb6Yd4dsKgNZmtO+ 1rrySurVGYgz3A8be0tkDdY6ui9CpfPB1vkaY2kPk9qZFRsEWWVBaENZvvfWNNIdx5Yv GfU3rwzPFiM26zwFtUkcJoWRvykiatOo2NEreIlwLPuJ7ihjRFQiPg9cy6zxvGmc4qnq UmkVl+RHaMmLCwRwMQODBpPD4gjeBXJtVJnbPtoxMgJFmo6K/jcvkmJNVv+AJww9J00T e+z36IzIcq/+h5owPKxc34o5JOQXVXUbq5bw75woaDsPiS+YJmdr4VYc1i/UhczvO1Np Dnqw== X-Gm-Message-State: AOAM531fdlwDNbx1Ch2s1MDHK+2mGyXjF/l49iBzhgTnRk6GrxAbD+85 fuPg3ZcAQ5IoJxhYGH9UjTugXLT0suNh9w== X-Received: by 2002:adf:ef8f:: with SMTP id d15mr13660042wro.326.1620406264040; Fri, 07 May 2021 09:51:04 -0700 (PDT) Received: from localhost.localdomain (239.51.115.87.dyn.plus.net. [87.115.51.239]) by smtp.gmail.com with ESMTPSA id s1sm15032888wmj.8.2021.05.07.09.51.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 07 May 2021 09:51:03 -0700 (PDT) From: Cameron Cawley To: ffmpeg-devel@ffmpeg.org Date: Fri, 7 May 2021 17:50:47 +0100 Message-Id: <20210507165048.27061-1-ccawley2011@gmail.com> X-Mailer: git-send-email 2.20.1 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 1/2] avcodec: Implement Acorn Replay IMA ADPCM decoder 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 Cc: Cameron Cawley Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: Jh1I57EfumF/ --- Changelog | 1 + doc/general_contents.texi | 1 + libavcodec/Makefile | 1 + libavcodec/adpcm.c | 19 +++++++++++++++++++ libavcodec/allcodecs.c | 1 + libavcodec/codec_desc.c | 7 +++++++ libavcodec/codec_id.h | 1 + libavcodec/utils.c | 1 + libavcodec/version.h | 2 +- 9 files changed, 33 insertions(+), 1 deletion(-) diff --git a/Changelog b/Changelog index ad950354d0..c38c5d63a0 100644 --- a/Changelog +++ b/Changelog @@ -4,6 +4,7 @@ releases are sorted from youngest to oldest. version : - ADPCM IMA Westwood encoder - Westwood AUD muxer +- ADPCM IMA Acorn Replay decoder version 4.4: diff --git a/doc/general_contents.texi b/doc/general_contents.texi index e01347f8d4..354899ad17 100644 --- a/doc/general_contents.texi +++ b/doc/general_contents.texi @@ -1126,6 +1126,7 @@ following image formats are supported: @item ADPCM Electronic Arts XAS @tab @tab X @item ADPCM G.722 @tab X @tab X @item ADPCM G.726 @tab X @tab X +@item ADPCM IMA Acorn Replay @tab @tab X @item ADPCM IMA AMV @tab X @tab X @tab Used in AMV files @item ADPCM IMA Cunning Developments @tab @tab X diff --git a/libavcodec/Makefile b/libavcodec/Makefile index 075b0ad7a3..4fa8d7ab10 100644 --- a/libavcodec/Makefile +++ b/libavcodec/Makefile @@ -868,6 +868,7 @@ OBJS-$(CONFIG_ADPCM_G726_DECODER) += g726.o OBJS-$(CONFIG_ADPCM_G726_ENCODER) += g726.o OBJS-$(CONFIG_ADPCM_G726LE_DECODER) += g726.o OBJS-$(CONFIG_ADPCM_G726LE_ENCODER) += g726.o +OBJS-$(CONFIG_ADPCM_IMA_ACORN_DECODER) += adpcm.o adpcm_data.o OBJS-$(CONFIG_ADPCM_IMA_AMV_DECODER) += adpcm.o adpcm_data.o OBJS-$(CONFIG_ADPCM_IMA_ALP_DECODER) += adpcm.o adpcm_data.o OBJS-$(CONFIG_ADPCM_IMA_ALP_ENCODER) += adpcmenc.o adpcm_data.o diff --git a/libavcodec/adpcm.c b/libavcodec/adpcm.c index 3da6b734cf..8fe43b5720 100644 --- a/libavcodec/adpcm.c +++ b/libavcodec/adpcm.c @@ -747,6 +747,7 @@ static int get_nb_samples(AVCodecContext *avctx, GetByteContext *gb, switch (avctx->codec->id) { case AV_CODEC_ID_ADPCM_4XM: case AV_CODEC_ID_ADPCM_AGM: + case AV_CODEC_ID_ADPCM_IMA_ACORN: case AV_CODEC_ID_ADPCM_IMA_DAT4: case AV_CODEC_ID_ADPCM_IMA_MOFLEX: case AV_CODEC_ID_ADPCM_IMA_ISS: header_size = 4 * ch; break; @@ -1665,6 +1666,23 @@ static int adpcm_decode_frame(AVCodecContext *avctx, void *data, } } break; + case AV_CODEC_ID_ADPCM_IMA_ACORN: + for (channel = 0; channel < avctx->channels; channel++) { + cs = &c->status[channel]; + cs->predictor = sign_extend(bytestream2_get_le16u(&gb), 16); + cs->step_index = bytestream2_get_le16u(&gb) & 0xFF; + if (cs->step_index > 88u){ + av_log(avctx, AV_LOG_ERROR, "ERROR: step_index[%d] = %i\n", + channel, cs->step_index); + return AVERROR_INVALIDDATA; + } + } + for (n = nb_samples >> (1 - st); n > 0; n--) { + int byte = bytestream2_get_byteu(&gb); + *samples++ = adpcm_ima_expand_nibble(&c->status[0], byte & 0x0F, 3); + *samples++ = adpcm_ima_expand_nibble(&c->status[st], byte >> 4, 3); + } + break; case AV_CODEC_ID_ADPCM_IMA_AMV: av_assert0(avctx->channels == 1); @@ -2160,6 +2178,7 @@ ADPCM_DECODER(AV_CODEC_ID_ADPCM_EA_R1, sample_fmts_s16p, adpcm_ea_r1, ADPCM_DECODER(AV_CODEC_ID_ADPCM_EA_R2, sample_fmts_s16p, adpcm_ea_r2, "ADPCM Electronic Arts R2"); ADPCM_DECODER(AV_CODEC_ID_ADPCM_EA_R3, sample_fmts_s16p, adpcm_ea_r3, "ADPCM Electronic Arts R3"); ADPCM_DECODER(AV_CODEC_ID_ADPCM_EA_XAS, sample_fmts_s16p, adpcm_ea_xas, "ADPCM Electronic Arts XAS"); +ADPCM_DECODER(AV_CODEC_ID_ADPCM_IMA_ACORN, sample_fmts_s16, adpcm_ima_acorn, "ADPCM IMA Acorn Replay"); ADPCM_DECODER(AV_CODEC_ID_ADPCM_IMA_AMV, sample_fmts_s16, adpcm_ima_amv, "ADPCM IMA AMV"); ADPCM_DECODER(AV_CODEC_ID_ADPCM_IMA_APC, sample_fmts_s16, adpcm_ima_apc, "ADPCM IMA CRYO APC"); ADPCM_DECODER(AV_CODEC_ID_ADPCM_IMA_APM, sample_fmts_s16, adpcm_ima_apm, "ADPCM IMA Ubisoft APM"); diff --git a/libavcodec/allcodecs.c b/libavcodec/allcodecs.c index 73dd3d0695..0b15b59364 100644 --- a/libavcodec/allcodecs.c +++ b/libavcodec/allcodecs.c @@ -619,6 +619,7 @@ extern const AVCodec ff_adpcm_g726_encoder; extern const AVCodec ff_adpcm_g726_decoder; extern const AVCodec ff_adpcm_g726le_encoder; extern const AVCodec ff_adpcm_g726le_decoder; +extern const AVCodec ff_adpcm_ima_acorn_decoder; extern const AVCodec ff_adpcm_ima_amv_decoder; extern const AVCodec ff_adpcm_ima_amv_encoder; extern const AVCodec ff_adpcm_ima_alp_decoder; diff --git a/libavcodec/codec_desc.c b/libavcodec/codec_desc.c index 17f8a14044..35527dcc37 100644 --- a/libavcodec/codec_desc.c +++ b/libavcodec/codec_desc.c @@ -2462,6 +2462,13 @@ static const AVCodecDescriptor codec_descriptors[] = { .long_name = NULL_IF_CONFIG_SMALL("ADPCM IMA MobiClip MOFLEX"), .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSY, }, + { + .id = AV_CODEC_ID_ADPCM_IMA_ACORN, + .type = AVMEDIA_TYPE_AUDIO, + .name = "adpcm_ima_acorn", + .long_name = NULL_IF_CONFIG_SMALL("ADPCM IMA Acorn Replay"), + .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSY, + }, /* AMR */ { diff --git a/libavcodec/codec_id.h b/libavcodec/codec_id.h index 3cfa8f9459..83e1dbb4b3 100644 --- a/libavcodec/codec_id.h +++ b/libavcodec/codec_id.h @@ -398,6 +398,7 @@ enum AVCodecID { AV_CODEC_ID_ADPCM_IMA_MTF, AV_CODEC_ID_ADPCM_IMA_CUNNING, AV_CODEC_ID_ADPCM_IMA_MOFLEX, + AV_CODEC_ID_ADPCM_IMA_ACORN, /* AMR */ AV_CODEC_ID_AMR_NB = 0x12000, diff --git a/libavcodec/utils.c b/libavcodec/utils.c index bc5f652dec..c08f9a7da3 100644 --- a/libavcodec/utils.c +++ b/libavcodec/utils.c @@ -699,6 +699,7 @@ static int get_audio_frame_duration(enum AVCodecID id, int sr, int ch, int ba, return 0; return frame_bytes * 28; case AV_CODEC_ID_ADPCM_4XM: + case AV_CODEC_ID_ADPCM_IMA_ACORN: case AV_CODEC_ID_ADPCM_IMA_DAT4: case AV_CODEC_ID_ADPCM_IMA_ISS: return (frame_bytes - 4 * ch) * 2 / ch; diff --git a/libavcodec/version.h b/libavcodec/version.h index 8d37666d5e..48165b9ac4 100644 --- a/libavcodec/version.h +++ b/libavcodec/version.h @@ -28,7 +28,7 @@ #include "libavutil/version.h" #define LIBAVCODEC_VERSION_MAJOR 59 -#define LIBAVCODEC_VERSION_MINOR 0 +#define LIBAVCODEC_VERSION_MINOR 1 #define LIBAVCODEC_VERSION_MICRO 100 #define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ From patchwork Fri May 7 16:50:48 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Cameron Cawley X-Patchwork-Id: 27683 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:b214:0:0:0:0:0 with SMTP id b20csp693337iof; Fri, 7 May 2021 09:57:13 -0700 (PDT) X-Google-Smtp-Source: ABdhPJw4J9BsJypUYnWDAFMzaWK/TNvADUIeJdc8hItAFI8L1RY71u5WKu8zo9vMGuOwI7+YeYzf X-Received: by 2002:aa7:c510:: with SMTP id o16mr12461384edq.310.1620406633539; Fri, 07 May 2021 09:57:13 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1620406633; cv=none; d=google.com; s=arc-20160816; b=RhKqaWo+X/dclgpx5cwCLFHZDcIZHDz7e5n72hWq2x9e7hYjkSnOEi7P5PuEQl/2zo dOTauqOpg9chjT3FtX77k0sHuHC//VzjD2aUVx+7hWIYzkzzpcqKx30/sMygyt+9GdNb SGw3jZ9OyHzNBd216XM0h/JjYMpODO6i4qV3H8Q503SIximluys6k2vJMRBPrvZgfR3l JxNhUNpC5QAWeZwEePD7jkR0NZk7IGZ0G0CFmLEdZkmFBRSWvmH2iE9S9Na8TkUZUlYM Nu65jEhZpVcv5pABdoJbeDTFeby8hg+8aTy8pYsmUT1SUrk7ZHZnAV/FtSUcp6Z0DfQN 6Ctw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:references:in-reply-to :message-id:date:to:from:dkim-signature:delivered-to; bh=xUtK4X/F7KwaQ2Fhf6c950jFZPhbi4dNAZvxrdFQWKk=; b=tKJ8DcfA8/WGo5+dtzz0rokEVe+EOnfCT24Kdyip7NHZ9TnoWTmC2b1A4BBcwliu9o /7hYbOkGRIj/KBT7ifQ9daNHLMjJ2PTfGZSzE4Wy6sj3sAQ6DyM3ijyq5fzRwtP+KewB Cm8tZ4GrsbzMdTMbbwW80i0tPhrIc6OYnbBpZijb2YrrgXv6sn4Om+fYBFYdHaB12RUw pzXyvNffUsexSGylylN8+XfsR1UDXPcd0byRxQWfn3Y+afZyykO4JSMM++Lld61b1lkx GHhE+4Ew2XOJRCj+HCqDqOK6QLQfiSa44eOKytPWoiZ0vxp/KKJWOpyjhtHhdSaySBSr 3oPQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=oQ9AwVrX; 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; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id a11si3166821edf.280.2021.05.07.09.57.12; Fri, 07 May 2021 09:57:13 -0700 (PDT) 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; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=oQ9AwVrX; 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; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 5544E6806DA; Fri, 7 May 2021 19:57:09 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wr1-f50.google.com (mail-wr1-f50.google.com [209.85.221.50]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 119746804AB for ; Fri, 7 May 2021 19:57:03 +0300 (EEST) Received: by mail-wr1-f50.google.com with SMTP id m9so9971106wrx.3 for ; Fri, 07 May 2021 09:57:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=RU1cMlT4oXUhP9k3+cGi+gTyxyjKPl9oufnGzuTH74c=; b=oQ9AwVrXZ/kHJk5iFl+7D4wr4MNsszZVTv6SkVX8wBWtCneJf99wXgvmpEKWuDucH2 ydeBH8cCrfngB2uF+c6KmLqDAe5+guXVC9cho7QQca/FigVPggyaavg5FPNGmPh4GGIg R92M83ueW7MKxQ8EXUPddynwjftSGBX681c24HEQby30Yo56Rakgd9XGPlqQ8y21HZUd /ybDmPYa/4DIUX+8VehMTB5g+q2yi8RQhB6iOu1+28e1Vv6VAdgkSH7fYhSHAMhpTil4 wMZ7542bigmKGEQAcAN1zZQ8sjPpJYTMtI+J7dqg04RUK27Ro6KTToOjDZIGNRdQR7XE LZPA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=RU1cMlT4oXUhP9k3+cGi+gTyxyjKPl9oufnGzuTH74c=; b=fbDWEhvrtQaDvIUKedZt5Xf9vOXILQRybMFCYtLj8Qa30H3IdIRc6M+dDPVHelBakt 24RPoscIbjTUJZ8oTy7/DEusHxbb2zGZEYiPLvKHfpp3QBmI+C8HkEHI7iLTJ6g2fJ0m ib+Uc+CbH1P5JuMq030Ka8aZn1KxszGEwKB7fLWoBgp4NGFRblet4MyOPpB/jFbw7nxD NdZJIE2hLS1Z7rAz28XgnJO5AX5SvG9I9aXocxISWys4BV0U5oH1WvBJhFJwdKRYgaQc YXsYn2yPqnztlcA+8jJKyPsnk2+A//SVMJQkdQdsVewebwxTITgqBqr6KT9utSqhbbgf +a/Q== X-Gm-Message-State: AOAM532bMje3MbWupE6tf3DSQyWSXzkMjqgVSmpTvx+DS3yDWys8VJaU +J06odVQimx9Ye3fp9PpgChhcJVAAsTT3Q== X-Received: by 2002:a5d:54c2:: with SMTP id x2mr13235617wrv.278.1620406265001; Fri, 07 May 2021 09:51:05 -0700 (PDT) Received: from localhost.localdomain (239.51.115.87.dyn.plus.net. [87.115.51.239]) by smtp.gmail.com with ESMTPSA id s1sm15032888wmj.8.2021.05.07.09.51.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 07 May 2021 09:51:04 -0700 (PDT) From: Cameron Cawley To: ffmpeg-devel@ffmpeg.org Date: Fri, 7 May 2021 17:50:48 +0100 Message-Id: <20210507165048.27061-2-ccawley2011@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210507165048.27061-1-ccawley2011@gmail.com> References: <20210507165048.27061-1-ccawley2011@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 2/2] avformat/rpl: Support files containing Replay IMA ADPCM audio 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 Cc: Cameron Cawley Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: wA9PqXHyaCWu --- libavformat/rpl.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/libavformat/rpl.c b/libavformat/rpl.c index 367e80b2c4..d495734e8e 100644 --- a/libavformat/rpl.c +++ b/libavformat/rpl.c @@ -121,6 +121,7 @@ static int rpl_read_header(AVFormatContext *s) int error = 0; const char *endptr; char audio_type[RPL_LINE_LENGTH]; + char audio_codec[RPL_LINE_LENGTH]; uint32_t i; @@ -189,7 +190,9 @@ static int rpl_read_header(AVFormatContext *s) // ARMovie supports multiple audio tracks; I don't have any // samples, though. This code will ignore additional tracks. - audio_format = read_line_and_int(pb, &error); // audio format ID + error |= read_line(pb, line, sizeof(line)); + audio_format = read_int(line, &endptr, &error); // audio format ID + av_strlcpy(audio_codec, endptr, RPL_LINE_LENGTH); if (audio_format) { ast = avformat_new_stream(s, NULL); if (!ast) @@ -227,6 +230,11 @@ static int rpl_read_header(AVFormatContext *s) // There are some other formats listed as legal per the spec; // samples needed. break; + case 2: + if (av_stristr(audio_codec, "adpcm") != NULL) { + ast->codecpar->codec_id = AV_CODEC_ID_ADPCM_IMA_ACORN; + } + break; case 101: if (ast->codecpar->bits_per_coded_sample == 8) { // The samples with this kind of audio that I have @@ -238,8 +246,8 @@ static int rpl_read_header(AVFormatContext *s) break; } if (ast->codecpar->codec_id == AV_CODEC_ID_NONE) - avpriv_request_sample(s, "Audio format %"PRId32, - audio_format); + avpriv_request_sample(s, "Audio format %"PRId32" (%s)", + audio_format, audio_codec); avpriv_set_pts_info(ast, 32, 1, ast->codecpar->bit_rate); } else { for (i = 0; i < 3; i++)