From patchwork Tue Jun 16 21:02:53 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?q?Jan_Ekstr=C3=B6m?= X-Patchwork-Id: 20429 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 78E5F44ACBE for ; Wed, 17 Jun 2020 00:10:53 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 5DE2268B49A; Wed, 17 Jun 2020 00:10:53 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-ej1-f67.google.com (mail-ej1-f67.google.com [209.85.218.67]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 49BB5687F78 for ; Wed, 17 Jun 2020 00:10:47 +0300 (EEST) Received: by mail-ej1-f67.google.com with SMTP id p20so23216669ejd.13 for ; Tue, 16 Jun 2020 14:10:47 -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=yboz4n+EfqDEV5c7UKq7Qu6nQPmssIF4L/wTBNdqfDI=; b=SL9D6V13L65xOzdLzdWq7D7jy/mUer9Vkz9wGCJA0Fmf9n3RjT6SeD8SFqcDMdhhSB 3z+cIYDf0AWDWGQ44BPLAyRqUloIdhbLfgIdzl6Y7uMc1RFMBMbsae/ipYnVtXdcERLH ymAWMaUvzddfIi5uZzggNyTv9oIGQFEPiIS/peClpLtBcAg0Kvk6JuAwhCoZSxTMbOE2 iJLSm/R6RO/ODMVTkgcwcr76Pu9MuR9Og03xg4PArjrIfq4g6TNkvo3tUpVF8uk7P/+3 11PaX0lKTASNlspOTVxPXUnrcYVNiYsO0zxENXmvf/9PXeVkBOLuH2zvorOSO1HDsUru WZKA== 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=yboz4n+EfqDEV5c7UKq7Qu6nQPmssIF4L/wTBNdqfDI=; b=HhyiTvg5+UJTIqWu57jxTO/vdxGS2EpaDX2sYaFKRZ2VYHjn9IflcX9xA9ojM7Ucg3 9ObeOwizGlDKhbdknkvbFwmRz/8isGqhgZjRu1qrUOLjrFRds+RtNpMgEn5r/yYjHUwk sx9WINA1DGcnSjLStHepJU5XWKmH9K8WKMc5S4uPJl6wQeNh5wZ09qnzpx8908V2WVIU 4JeywY+ESl8DHBhdBBViOVUHRwf9TrUByOObQd7C2iXyW53l44mDrWTf9oCve/8uI1pq vlhM4o8Hgm0Y53ikpEAhY1Bp65DGz8Ebu0xFAR/sKeI8LF5n7leNW46NIn+0TJ1mJD5n ohEQ== X-Gm-Message-State: AOAM531EypmrHb7xWo7I+ulmzcbFAjS2e3DIh68Bp0XQ8g/8RlTO5ovK oo2K3lq7Klw/ZnTO7F1flPWhbyhr X-Google-Smtp-Source: ABdhPJwKlW3VTlSJWnlUXX0CPnZhgiOyLO2uXfft99aEwaETUs5qErcxek4GaNg0kdTt0MKvuwtwdg== X-Received: by 2002:a2e:8055:: with SMTP id p21mr2555724ljg.80.1592341379931; Tue, 16 Jun 2020 14:02:59 -0700 (PDT) Received: from localhost.localdomain (91-159-194-103.elisa-laajakaista.fi. [91.159.194.103]) by smtp.gmail.com with ESMTPSA id c5sm4608925ljj.37.2020.06.16.14.02.59 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 16 Jun 2020 14:02:59 -0700 (PDT) From: =?utf-8?q?Jan_Ekstr=C3=B6m?= To: ffmpeg-devel@ffmpeg.org Date: Wed, 17 Jun 2020 00:02:53 +0300 Message-Id: <20200616210253.7169-6-jeebjp@gmail.com> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20200616210253.7169-1-jeebjp@gmail.com> References: <20200616210253.7169-1-jeebjp@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 5/5] avcodec/aacdec_template: add support for 22.2 / channel_config 13 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" --- libavcodec/aacdec_template.c | 53 +++++++++++++++++++++++++++++++++++- 1 file changed, 52 insertions(+), 1 deletion(-) diff --git a/libavcodec/aacdec_template.c b/libavcodec/aacdec_template.c index 0590e77d75..0be0ad6566 100644 --- a/libavcodec/aacdec_template.c +++ b/libavcodec/aacdec_template.c @@ -378,6 +378,50 @@ static uint64_t sniff_channel_order(uint8_t (*layout_map)[3], int tags) i++; } + // The previous checks would end up at 8 at this point for 22.2 + if (tags == 16 && i == 8) { + e2c_vec[i] = (struct elem_to_channel) { + .av_position = AV_CH_TOP_FRONT_CENTER, + .syn_ele = layout_map[i][0], + .elem_id = layout_map[i][1], + .aac_position = layout_map[i][2] + }; i++; + i += assign_pair(e2c_vec, layout_map, i, + AV_CH_TOP_FRONT_LEFT, + AV_CH_TOP_FRONT_RIGHT, + AAC_CHANNEL_FRONT); + i += assign_pair(e2c_vec, layout_map, i, + AV_CH_TOP_SIDE_LEFT, + AV_CH_TOP_SIDE_RIGHT, + AAC_CHANNEL_SIDE); + e2c_vec[i] = (struct elem_to_channel) { + .av_position = AV_CH_TOP_CENTER, + .syn_ele = layout_map[i][0], + .elem_id = layout_map[i][1], + .aac_position = layout_map[i][2] + }; i++; + i += assign_pair(e2c_vec, layout_map, i, + AV_CH_TOP_BACK_LEFT, + AV_CH_TOP_BACK_RIGHT, + AAC_CHANNEL_BACK); + e2c_vec[i] = (struct elem_to_channel) { + .av_position = AV_CH_TOP_BACK_CENTER, + .syn_ele = layout_map[i][0], + .elem_id = layout_map[i][1], + .aac_position = layout_map[i][2] + }; i++; + e2c_vec[i] = (struct elem_to_channel) { + .av_position = AV_CH_BOTTOM_FRONT_CENTER, + .syn_ele = layout_map[i][0], + .elem_id = layout_map[i][1], + .aac_position = layout_map[i][2] + }; i++; + i += assign_pair(e2c_vec, layout_map, i, + AV_CH_BOTTOM_FRONT_LEFT, + AV_CH_BOTTOM_FRONT_RIGHT, + AAC_CHANNEL_FRONT); + } + // Must choose a stable sort total_non_cc_elements = n = i; do { @@ -526,7 +570,7 @@ static int set_default_channel_config(AACContext *ac, AVCodecContext *avctx, int channel_config) { if (channel_config < 1 || (channel_config > 7 && channel_config < 11) || - channel_config > 12) { + channel_config > 13) { av_log(avctx, AV_LOG_ERROR, "invalid default channel configuration (%d)\n", channel_config); @@ -606,6 +650,13 @@ static ChannelElement *get_che(AACContext *ac, int type, int elem_id) /* For indexed channel configurations map the channels solely based * on position. */ switch (ac->oc[1].m4ac.chan_config) { + case 13: + if (ac->tags_mapped > 3 && ((type == TYPE_CPE && elem_id < 8) || + (type == TYPE_SCE && elem_id < 6) || + (type == TYPE_LFE && elem_id < 2))) { + ac->tags_mapped++; + return ac->tag_che_map[type][elem_id] = ac->che[type][elem_id]; + } case 12: case 7: if (ac->tags_mapped == 3 && type == TYPE_CPE) {