From patchwork Fri Aug 16 21:17:10 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 14556 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id 16BC8449DD1 for ; Sat, 17 Aug 2019 00:17:58 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 03F2F68AC68; Sat, 17 Aug 2019 00:17:58 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qk1-f196.google.com (mail-qk1-f196.google.com [209.85.222.196]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 9A86968AAC2 for ; Sat, 17 Aug 2019 00:17:51 +0300 (EEST) Received: by mail-qk1-f196.google.com with SMTP id m10so5957021qkk.1 for ; Fri, 16 Aug 2019 14:17:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=MJyhoDRfW+06NV6nJ+GR5X3xkcbjqGkQsRtzh8X5MAg=; b=aQcVIpGpX567PLyTdzeV2v18rOCXQhoY7AF5a29VzwGEOCpNoh2OPU4Q0uZUaMU4/5 BRqpPfuH1akR6x/RQtYssRpsVLYzMPujy5/8w98FUgY6uq8UvR1EoUbWMN+Hctk2tcZK LrsRp7c8FTEBk2aTpW3snmyL/QCME2N83MzSV7bAfu9LafMyLs3vp8Qr0t5syVacEg6i ZNqOEfAql+LbM0orUIrV0hkFPfK7tJp59/qL6Glekz25weRbQNSpCniFPHIXziv5ARIO upgc/XV7mp2/wXn41xU9e1zWf5lkaoonb6uYaj8144JpdpoRsEo+xu68PRp1JkkyQ5ur K83A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=MJyhoDRfW+06NV6nJ+GR5X3xkcbjqGkQsRtzh8X5MAg=; b=T8hxOFJG/iX8jAz3hC43L9sBxWqPS7lR8poop/X3n3q2MLXTTOp57/K0jgDEMeIgeQ dGj1HlRG/uFCs7INtRrKGgB+6JQk8h8VRABaISHorKZ8V5sxSRPKiv6CS4omNhaSU4Ic 4f7KB9Fqylxh7h/nCm0qDvcpFmflM3Jgr3efNroCsD7xofZwseiHwmVMe8DuhQv1Rhz2 /+36hcTGkbicg8Vf9FLUaa/ULyGyTX/+XGy+ID1M754bxlGuLL66X7SYoExE1WoXjyro JIQDnnnZsHMj/YzBe9vOzXKNVHD4PG26W/Sz3IUnnsvQaAls3IsFgFljCI0AfzzO8BQp 3Jsw== X-Gm-Message-State: APjAAAWiLCIfRsRj6RNw9WWSh89gD4suZRmEICZUYbK4bZNM/dF3P1Av gJakvhf1UgEyw1xMsb5x+Z1oEaWE X-Google-Smtp-Source: APXvYqyj2XLSGtZGII/vg+8AkeIXkXhBO4CpfTKU3ZuIzsPc/M7dPwymRmrsOGeVcona6hOlg/lbMw== X-Received: by 2002:ae9:ef44:: with SMTP id d65mr10566274qkg.402.1565990270075; Fri, 16 Aug 2019 14:17:50 -0700 (PDT) Received: from localhost.localdomain ([181.23.95.42]) by smtp.gmail.com with ESMTPSA id d9sm3497714qko.20.2019.08.16.14.17.49 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 16 Aug 2019 14:17:49 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Fri, 16 Aug 2019 18:17:10 -0300 Message-Id: <20190816211712.1255-2-jamrial@gmail.com> X-Mailer: git-send-email 2.22.0 In-Reply-To: <20190816211712.1255-1-jamrial@gmail.com> References: <20190816211712.1255-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 1/3] avcodec/mlp_parse: move TrueHD channel layout and sample rate related code to the header X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 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" It will be needed by the next commit. Signed-off-by: James Almer --- libavcodec/mlp_parse.c | 50 ------------------------------------------ libavcodec/mlp_parse.h | 49 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+), 50 deletions(-) diff --git a/libavcodec/mlp_parse.c b/libavcodec/mlp_parse.c index 067735303c..3a71f2c0b7 100644 --- a/libavcodec/mlp_parse.c +++ b/libavcodec/mlp_parse.c @@ -60,56 +60,6 @@ static const uint64_t mlp_layout[32] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; -static const uint8_t thd_chancount[13] = { -// LR C LFE LRs LRvh LRc LRrs Cs Ts LRsd LRw Cvh LFE2 - 2, 1, 1, 2, 2, 2, 2, 1, 1, 2, 2, 1, 1 -}; - -static const uint64_t thd_layout[13] = { - AV_CH_FRONT_LEFT|AV_CH_FRONT_RIGHT, // LR - AV_CH_FRONT_CENTER, // C - AV_CH_LOW_FREQUENCY, // LFE - AV_CH_SIDE_LEFT|AV_CH_SIDE_RIGHT, // LRs - AV_CH_TOP_FRONT_LEFT|AV_CH_TOP_FRONT_RIGHT, // LRvh - AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER, // LRc - AV_CH_BACK_LEFT|AV_CH_BACK_RIGHT, // LRrs - AV_CH_BACK_CENTER, // Cs - AV_CH_TOP_CENTER, // Ts - AV_CH_SURROUND_DIRECT_LEFT|AV_CH_SURROUND_DIRECT_RIGHT, // LRsd - AV_CH_WIDE_LEFT|AV_CH_WIDE_RIGHT, // LRw - AV_CH_TOP_FRONT_CENTER, // Cvh - AV_CH_LOW_FREQUENCY_2, // LFE2 -}; - -static int mlp_samplerate(int in) -{ - if (in == 0xF) - return 0; - - return (in & 8 ? 44100 : 48000) << (in & 7) ; -} - -static int truehd_channels(int chanmap) -{ - int channels = 0, i; - - for (i = 0; i < 13; i++) - channels += thd_chancount[i] * ((chanmap >> i) & 1); - - return channels; -} - -static uint64_t truehd_layout(int chanmap) -{ - int i; - uint64_t layout = 0; - - for (i = 0; i < 13; i++) - layout |= thd_layout[i] * ((chanmap >> i) & 1); - - return layout; -} - static int mlp_get_major_sync_size(const uint8_t * buf, int bufsize) { int has_extension, extensions = 0; diff --git a/libavcodec/mlp_parse.h b/libavcodec/mlp_parse.h index c6025d1a18..a0790ae8c7 100644 --- a/libavcodec/mlp_parse.h +++ b/libavcodec/mlp_parse.h @@ -56,6 +56,55 @@ typedef struct MLPHeaderInfo int num_substreams; ///< Number of substreams within stream } MLPHeaderInfo; +static const uint8_t thd_chancount[13] = { +// LR C LFE LRs LRvh LRc LRrs Cs Ts LRsd LRw Cvh LFE2 + 2, 1, 1, 2, 2, 2, 2, 1, 1, 2, 2, 1, 1 +}; + +static const uint64_t thd_layout[13] = { + AV_CH_FRONT_LEFT|AV_CH_FRONT_RIGHT, // LR + AV_CH_FRONT_CENTER, // C + AV_CH_LOW_FREQUENCY, // LFE + AV_CH_SIDE_LEFT|AV_CH_SIDE_RIGHT, // LRs + AV_CH_TOP_FRONT_LEFT|AV_CH_TOP_FRONT_RIGHT, // LRvh + AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER, // LRc + AV_CH_BACK_LEFT|AV_CH_BACK_RIGHT, // LRrs + AV_CH_BACK_CENTER, // Cs + AV_CH_TOP_CENTER, // Ts + AV_CH_SURROUND_DIRECT_LEFT|AV_CH_SURROUND_DIRECT_RIGHT, // LRsd + AV_CH_WIDE_LEFT|AV_CH_WIDE_RIGHT, // LRw + AV_CH_TOP_FRONT_CENTER, // Cvh + AV_CH_LOW_FREQUENCY_2, // LFE2 +}; + +static inline int mlp_samplerate(int in) +{ + if (in == 0xF) + return 0; + + return (in & 8 ? 44100 : 48000) << (in & 7) ; +} + +static inline int truehd_channels(int chanmap) +{ + int channels = 0, i; + + for (i = 0; i < 13; i++) + channels += thd_chancount[i] * ((chanmap >> i) & 1); + + return channels; +} + +static inline uint64_t truehd_layout(int chanmap) +{ + int i; + uint64_t layout = 0; + + for (i = 0; i < 13; i++) + layout |= thd_layout[i] * ((chanmap >> i) & 1); + + return layout; +} int ff_mlp_read_major_sync(void *log, MLPHeaderInfo *mh, GetBitContext *gb);