From patchwork Wed Dec 8 01:06:39 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 32150 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:cd86:0:0:0:0:0 with SMTP id d128csp7046911iog; Tue, 7 Dec 2021 17:11:51 -0800 (PST) X-Google-Smtp-Source: ABdhPJyV/hNKatbM4uVOZn7TpBU8GSvQZJJlaKJxbNtdrN62kqLGGyXGNQdqiTmC2J9tZk1B1j/B X-Received: by 2002:a05:6402:1e8b:: with SMTP id f11mr14653431edf.304.1638925910906; Tue, 07 Dec 2021 17:11:50 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1638925910; cv=none; d=google.com; s=arc-20160816; b=xyS7eMzkft8eRWhZ7HtLIwZ9t0opOIgPk67fyb943RLhdNMAoJtjlOQwSMRJB2Lqkp UthFFGTJBy60pUWkHjlZPV+DTtMpVsxQWv8IgIQ5HpnrXDEeMWgrsuSW/eGqp8KHDe+U cisddKriFMVM23UPd3nxYP07UVQCqcCnpmR++5n1jYPOOJB7Bihx7FBEFam7pnIJ5m+l XZMvUCt7FV4hLdZSHaliNpKd2MIDMRZmqs2sTNb0El1h+77uDfoAkgn+Tha8rzZhIFxA VHgwb09mo7899wCQ5ByFsO2EGvRZt0wrU+cX6OR7Jo1/zt6/+aTcrettgo8rVGpA9Oe/ uN+g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding: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=JDCTqzbwwij+yrYFlMJ3zUnZWj0oI+ZDEGq5bgDfi4c=; b=S27TAV8BuNH8BFf9UNzhyHVfmXASUIXTm1oQRwtex8SvhwMfxQs8rm2TPRmUbspf9q pViZKUEItUL1QfOAPwJ2P3BzUia4vj5wvCUuEAFCq6s7VxjRK99E0maw1DunsgXXgAp0 ipOJicL8dNfbsW8JenFX8HzH1i4trHntfffzuNpddvDQ/4Vguh1A2oZ+5q1AkIEncVjn axlVZgUda3EsA0CISyf9ZQwcLgHj/FnWjCR65iA3kGlER2TRHbVIDo78C9YU4hahI4KM KN24uhsbPHP9/EjRt2h0/UNaH1egsnmCgSuyScjZ3P6ZlnaTsAR22CuAGQlQCJzbb6S9 PRcQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b=D22mFheK; 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 qb38si2495399ejc.165.2021.12.07.17.11.44; Tue, 07 Dec 2021 17:11:50 -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; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b=D22mFheK; 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 E0E3468AF2C; Wed, 8 Dec 2021 03:08:06 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-ua1-f51.google.com (mail-ua1-f51.google.com [209.85.222.51]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 2E8F568AF2C for ; Wed, 8 Dec 2021 03:07:59 +0200 (EET) Received: by mail-ua1-f51.google.com with SMTP id o1so1932562uap.4 for ; Tue, 07 Dec 2021 17:07:59 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=otFIrGlK/AFqctJcFoKP9vtS+3aGtuvWoRY5M1mjKq8=; b=D22mFheK8QZAyq+8YKb67trUTg6PYuH4r92WX34zgMiqy6b1Jk1bohBeWjXNPAx2jG Hml3VKa0k9LXQyVaaRA7E6X+DjP6jODMXUZGJMYplituMmogX1fER33WC3zOUNwCLVsn k41Cs56/PdPtaJq1bqNFbUsZaVp+HXqc9gDtY/y+Gf2ZCHyz71e2QG1HBlOf7ns6EGbE wWlweC7xwCcXQQlgCXjERUfV+4aTH8Gkzz0LBKucyBd9+Atj4IAl2lbL3/FFFcOe+lrD 0K5kGtjoAcvqUkemQ8mFpgIhWKI6NxjkdD/nhmSi/iwTUOWRDQcqynXk9SlmUolOGrjE 1gwA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=otFIrGlK/AFqctJcFoKP9vtS+3aGtuvWoRY5M1mjKq8=; b=kLZW9OHLiloVyW0dMznxkxJ5hMUTT/7839p8qJDdzzoxgdA0hFzt9D9Yq4zAeMlEOp O1QvlooLaMjTu8im25z6cN8r8iItvX3AXWIpQUXsmdwg1uKWT8PJ/l0gHHkssVBnTSAr xghjC8MRwiZH53VZkHK7vcTmuUZk4RMAyhIdp8dv/qQfTfrwZegMgxeaerlYIqaPwXQr ykFQGPfm/zV3bvLizKjwJ1GUvdE5IU0Zfw+PUxZ84jS258vmqO+WSAkcw1K/QqP3s8Ot rrYsoie5LPLrLEf0Bx9cwAg3A4H25PrKOeFZDfg09yuBtiGpocmxNo/o7bSqlgpf63ev ycuw== X-Gm-Message-State: AOAM531scNE6CX/Svd3uLiJrZmL7BaEICok8/cQItHs+Vge58N3CjMG+ n0Lxmr7OxMFHfSeuahGcNlUAPv2TqQ0Vx87S X-Received: by 2002:a05:6102:199:: with SMTP id r25mr49923139vsq.44.1638925677038; Tue, 07 Dec 2021 17:07:57 -0800 (PST) Received: from localhost.localdomain ([181.170.250.138]) by smtp.gmail.com with ESMTPSA id b8sm949898vsl.19.2021.12.07.17.07.56 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Dec 2021 17:07:56 -0800 (PST) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Tue, 7 Dec 2021 22:06:39 -0300 Message-Id: <20211208010649.381-24-jamrial@gmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20211208010649.381-1-jamrial@gmail.com> References: <20211208010649.381-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 184/279] adx: convert to new channel layout API 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: jepCOY4zQ0bq From: Vittorio Giovara Signed-off-by: Anton Khirnov Signed-off-by: James Almer --- libavcodec/adx.c | 16 +++++++++++----- libavcodec/adxdec.c | 6 +++--- libavcodec/adxenc.c | 11 ++++++----- 3 files changed, 20 insertions(+), 13 deletions(-) diff --git a/libavcodec/adx.c b/libavcodec/adx.c index cd88b16660..c60fabb40b 100644 --- a/libavcodec/adx.c +++ b/libavcodec/adx.c @@ -38,7 +38,7 @@ void ff_adx_calculate_coeffs(int cutoff, int sample_rate, int bits, int *coeff) int ff_adx_decode_header(AVCodecContext *avctx, const uint8_t *buf, int bufsize, int *header_size, int *coeff) { - int offset, cutoff; + int offset, cutoff, channels; if (bufsize < 24) return AVERROR_INVALIDDATA; @@ -58,18 +58,24 @@ int ff_adx_decode_header(AVCodecContext *avctx, const uint8_t *buf, } /* channels */ - avctx->channels = buf[7]; - if (avctx->channels <= 0 || avctx->channels > 2) + channels = buf[7]; + if (channels <= 0 || channels > 2) return AVERROR_INVALIDDATA; + if (avctx->ch_layout.nb_channels != channels) { + av_channel_layout_uninit(&avctx->ch_layout); + avctx->ch_layout.order = AV_CHANNEL_ORDER_UNSPEC; + avctx->ch_layout.nb_channels = channels; + } + /* sample rate */ avctx->sample_rate = AV_RB32(buf + 8); if (avctx->sample_rate < 1 || - avctx->sample_rate > INT_MAX / (avctx->channels * BLOCK_SIZE * 8)) + avctx->sample_rate > INT_MAX / (channels * BLOCK_SIZE * 8)) return AVERROR_INVALIDDATA; /* bit rate */ - avctx->bit_rate = avctx->sample_rate * avctx->channels * BLOCK_SIZE * 8 / BLOCK_SAMPLES; + avctx->bit_rate = avctx->sample_rate * channels * BLOCK_SIZE * 8 / BLOCK_SAMPLES; /* LPC coefficients */ if (coeff) { diff --git a/libavcodec/adxdec.c b/libavcodec/adxdec.c index 20256a092e..b3d946e81c 100644 --- a/libavcodec/adxdec.c +++ b/libavcodec/adxdec.c @@ -46,7 +46,7 @@ static av_cold int adx_decode_init(AVCodecContext *avctx) av_log(avctx, AV_LOG_ERROR, "error parsing ADX header\n"); return AVERROR_INVALIDDATA; } - c->channels = avctx->channels; + c->channels = avctx->ch_layout.nb_channels; c->header_parsed = 1; } @@ -132,7 +132,7 @@ static int adx_decode_frame(AVCodecContext *avctx, void *data, av_log(avctx, AV_LOG_ERROR, "error parsing ADX header\n"); return AVERROR_INVALIDDATA; } - c->channels = avctx->channels; + c->channels = avctx->ch_layout.nb_channels; c->header_parsed = 1; if (buf_size < header_size) return AVERROR_INVALIDDATA; @@ -147,7 +147,7 @@ static int adx_decode_frame(AVCodecContext *avctx, void *data, /* if the packet is not an even multiple of BLOCK_SIZE, check for an EOF packet */ - if (!num_blocks || buf_size % (BLOCK_SIZE * avctx->channels)) { + if (!num_blocks || buf_size % (BLOCK_SIZE * c->channels)) { if (buf_size >= 4 && (AV_RB16(buf) & 0x8000)) { c->eof = 1; *got_frame_ptr = 0; diff --git a/libavcodec/adxenc.c b/libavcodec/adxenc.c index c5849a40a1..3736e746a9 100644 --- a/libavcodec/adxenc.c +++ b/libavcodec/adxenc.c @@ -107,7 +107,7 @@ static int adx_encode_header(AVCodecContext *avctx, uint8_t *buf, int bufsize) bytestream_put_byte(&buf, 3); /* encoding */ bytestream_put_byte(&buf, BLOCK_SIZE); /* block size */ bytestream_put_byte(&buf, 4); /* sample size */ - bytestream_put_byte(&buf, avctx->channels); /* channels */ + bytestream_put_byte(&buf, avctx->ch_layout.nb_channels); /* channels */ bytestream_put_be32(&buf, avctx->sample_rate); /* sample rate */ bytestream_put_be32(&buf, 0); /* total sample count */ bytestream_put_be16(&buf, c->cutoff); /* cutoff frequency */ @@ -125,7 +125,7 @@ static av_cold int adx_encode_init(AVCodecContext *avctx) { ADXContext *c = avctx->priv_data; - if (avctx->channels > 2) { + if (avctx->ch_layout.nb_channels > 2) { av_log(avctx, AV_LOG_ERROR, "Invalid number of channels\n"); return AVERROR(EINVAL); } @@ -144,6 +144,7 @@ static int adx_encode_frame(AVCodecContext *avctx, AVPacket *avpkt, ADXContext *c = avctx->priv_data; const int16_t *samples = frame ? (const int16_t *)frame->data[0] : NULL; uint8_t *dst; + int channels = avctx->ch_layout.nb_channels; int ch, out_size, ret; if (!samples) { @@ -162,7 +163,7 @@ static int adx_encode_frame(AVCodecContext *avctx, AVPacket *avpkt, return 0; } - out_size = BLOCK_SIZE * avctx->channels + !c->header_parsed * HEADER_SIZE; + out_size = BLOCK_SIZE * channels + !c->header_parsed * HEADER_SIZE; if ((ret = ff_get_encode_buffer(avctx, avpkt, out_size, 0)) < 0) return ret; dst = avpkt->data; @@ -177,8 +178,8 @@ static int adx_encode_frame(AVCodecContext *avctx, AVPacket *avpkt, c->header_parsed = 1; } - for (ch = 0; ch < avctx->channels; ch++) { - adx_encode(c, dst, samples + ch, &c->prev[ch], avctx->channels); + for (ch = 0; ch < channels; ch++) { + adx_encode(c, dst, samples + ch, &c->prev[ch], channels); dst += BLOCK_SIZE; }