From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id 4F5DA4488F for ; Sun, 30 Oct 2022 18:56:06 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 4580068BD13; Sun, 30 Oct 2022 20:56:04 +0200 (EET) Received: from mail-ot1-f43.google.com (mail-ot1-f43.google.com [209.85.210.43]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 05B5568B89E for ; Sun, 30 Oct 2022 20:55:58 +0200 (EET) Received: by mail-ot1-f43.google.com with SMTP id 46-20020a9d0631000000b00666823da25fso5782218otn.0 for ; Sun, 30 Oct 2022 11:55:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:in-reply-to:from:references:to :content-language:subject:user-agent:mime-version:date:message-id :from:to:cc:subject:date:message-id:reply-to; bh=nXlnkQhkOEyyXTz0AHCFWqyg7lg5Qj5S3i0zw+xV5bs=; b=Ssrbu0s07/1wqifQX+yi4WGmefHfrz3n3lmei2ZAQE7K35afB//wzxzk+0NgAJ7i/c zroWEKh6QiI6/HVvqdljfFkzIBli4KwiKNOs8kqSpGgX+08hJqfjz0iVNCA1YyV2glu7 keku8Gm0Ntoeer8Pyu7ajG09SGX2PzYW3jPgNSXdOEe/cub4cpGMtCbj4xlUyqSkODzM rFQwNRVThnXDwI/bVwOJaMVteV9+eI7z9YvlLcA4UjGcyAVe6wPXLPmxumaxUiAeWTpd P30awQOZHNUuAqT6+Uro/6T44rKZK4jz0bnw4298Kzi61v2FGc73SHfqTfEcRw+gCOCz y+Ug== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:in-reply-to:from:references:to :content-language:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=nXlnkQhkOEyyXTz0AHCFWqyg7lg5Qj5S3i0zw+xV5bs=; b=qaCNbdLNEAvO8nd17x6AGYZVIFdNw/tCWrn0UPxrgQi2lSIEzeDDPXFNtrgN0IKZEY B+MSXcnvCqO2zrp9a3DpE4aBj07Jz9AZ6RJ9sfRPtbgGLONp7zOW62vq/CbzCQspkRn1 te7DtOkpgLL3fQTGKJIf3oHj/ocTyyVARcmGE7vV8JHhMz8l7CPUhygmlnnUr6nyT+dj cE9nOxsHCQVVwepZCF4VO61FAhArr3OI0bMAxaNTOCk7HH5WkbuHyx6paOZE+Xa8Ldi5 hcwdxb72A+SUGGjdK0xFk4knpzCP5PIiczQ/sh7Myz2dKL5U3Jur/FPCy2+05/Nss4gJ FJWQ== X-Gm-Message-State: ACrzQf2ooc0DN5c4KT3metsXpvgFXaQ++X0liieHPahz3M5hiIi4xSa3 qWqQF/LGiqLdYsPOICWy/jDsvvtVt4M= X-Google-Smtp-Source: AMsMyM5UNCwmr0FVavOwY7JJqRUF1CMIMlIruhIirMg6CBZA8EM6a5imWrOGKC5ziNg/ntRTBgRf+w== X-Received: by 2002:a05:6830:6083:b0:660:d54e:583 with SMTP id by3-20020a056830608300b00660d54e0583mr4842404otb.282.1667156155807; Sun, 30 Oct 2022 11:55:55 -0700 (PDT) Received: from [192.168.0.13] ([191.97.187.183]) by smtp.gmail.com with ESMTPSA id a18-20020a056870d19200b001375188dae9sm2092898oac.16.2022.10.30.11.55.54 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sun, 30 Oct 2022 11:55:55 -0700 (PDT) Message-ID: <01478b24-aae8-ad9c-9947-cefb696ffb39@gmail.com> Date: Sun, 30 Oct 2022 15:55:54 -0300 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.4.1 Content-Language: en-US To: ffmpeg-devel@ffmpeg.org References: <103b6b6c-5c56-2af7-bde6-1e1706d21930@gmail.com> <3a38e8dc-0c3a-eec2-9278-75f2bc6118aa@gmail.com> From: James Almer In-Reply-To: Subject: Re: [FFmpeg-devel] [PATCH] avfilter: add ambisonic decoder filter 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 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="us-ascii"; Format="flowed" Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: On 10/30/2022 3:29 PM, Paul B Mahol wrote: > On 10/30/22, James Almer wrote: >> >> >> On 10/30/2022 3:19 PM, Paul B Mahol wrote: >>> On 10/30/22, James Almer wrote: >>>> On 10/30/2022 12:34 PM, Paul B Mahol wrote: >>>>> +static const struct { >>>>> + const int order; >>>>> + const int inputs; >>>>> + const int speakers; >>>>> + const int near_field; >>>>> + const int type; >>>>> + const double xover; >>>>> + const AVChannelLayout outlayout; >>>>> + const double *speakers_azimuth; >>>>> + const double *speakers_elevation; >>>>> + const double *speakers_distance; >>>>> +} ambisonic_tab[] = { >>>>> + [MONO] = { >>>>> + .order = 0, >>>>> + .inputs = 1, >>>>> + .speakers = 1, >>>>> + .near_field = NF_NONE, >>>>> + .xover = 0., >>>>> + .outlayout = (AVChannelLayout)AV_CHANNEL_LAYOUT_MONO, >>>>> + .speakers_azimuth = (const double[1]){ 0. }, >>>>> + .speakers_distance = (const double[1]){ 1. }, >>>>> + }, >>>>> + [STEREO] = { >>>>> + .order = 1, >>>>> + .inputs = 4, >>>>> + .speakers = 2, >>>>> + .near_field = NF_NONE, >>>>> + .xover = 0., >>>>> + .outlayout = (AVChannelLayout)AV_CHANNEL_LAYOUT_STEREO, >>>>> + .speakers_azimuth = (const double[2]){ -30, 30}, >>>>> + .speakers_distance = same_distance, >>>>> + }, >>>>> + [STEREO_DOWNMIX] = { >>>>> + .order = 1, >>>>> + .inputs = 4, >>>>> + .speakers = 2, >>>>> + .near_field = NF_NONE, >>>>> + .xover = 0., >>>>> + .outlayout = >>>>> (AVChannelLayout)AV_CHANNEL_LAYOUT_STEREO_DOWNMIX, >>>>> + .speakers_azimuth = (const double[2]){ -90, 90 }, >>>>> + .speakers_distance = same_distance, >>>>> + }, >>>>> + [SURROUND] = { >>>>> + .order = 1, >>>>> + .inputs = 4, >>>>> + .speakers = 3, >>>>> + .near_field = NF_NONE, >>>>> + .xover = 0., >>>>> + .outlayout = (AVChannelLayout)AV_CHANNEL_LAYOUT_SURROUND, >>>>> + .speakers_azimuth = (const double[3]){ -45, 45, 0 }, >>>>> + .speakers_distance = same_distance, >>>>> + }, >>>>> + [L2_1] = { >>>>> + .order = 1, >>>>> + .inputs = 4, >>>>> + .speakers = 3, >>>>> + .near_field = NF_NONE, >>>>> + .xover = 0., >>>>> + .outlayout = (AVChannelLayout)AV_CHANNEL_LAYOUT_2_1, >>>>> + .speakers_azimuth = (const double[3]){ -45, 45, 180 }, >>>>> + .speakers_distance = same_distance, >>>>> + }, >>>>> + [TRIANGLE] = { >>>>> + .order = 1, >>>>> + .inputs = 4, >>>>> + .speakers = 3, >>>>> + .type = 1, >>>>> + .near_field = NF_NONE, >>>>> + .xover = 0., >>>>> + .outlayout = (AVChannelLayout)AV_CHANNEL_LAYOUT_SURROUND, >>>>> + .speakers_azimuth = (const double[3]){ -120, 120, 0 }, >>>>> + .speakers_distance = same_distance, >>>>> + }, >>>>> + [QUAD] = { >>>>> + .order = 1, >>>>> + .inputs = 4, >>>>> + .speakers = 4, >>>>> + .near_field = NF_NONE, >>>>> + .xover = 0., >>>>> + .outlayout = (AVChannelLayout)AV_CHANNEL_LAYOUT_QUAD, >>>>> + .speakers_azimuth = (const double[4]){ -45, 45, -135, 135 }, >>>>> + .speakers_distance = same_distance, >>>>> + }, >>>>> + [SQUARE] = { >>>>> + .order = 1, >>>>> + .inputs = 4, >>>>> + .speakers = 4, >>>>> + .type = 1, >>>>> + .near_field = NF_NONE, >>>>> + .xover = 0., >>>>> + .outlayout = (AVChannelLayout)AV_CHANNEL_LAYOUT_4POINT0, >>>>> + .speakers_azimuth = (const double[4]){ 0, -90, 180, 90 }, >>>>> + .speakers_distance = same_distance, >>>>> + }, >>>>> + [L4_0] = { >>>>> + .order = 1, >>>>> + .inputs = 4, >>>>> + .speakers = 4, >>>>> + .near_field = NF_NONE, >>>>> + .xover = 0., >>>>> + .outlayout = (AVChannelLayout)AV_CHANNEL_LAYOUT_4POINT0, >>>>> + .speakers_azimuth = (const double[4]){ -30, 30, 0, 180 }, >>>>> + .speakers_distance = same_distance, >>>>> + }, >>>>> + [L5_0] = { >>>>> + .order = 1, >>>>> + .inputs = 4, >>>>> + .speakers = 5, >>>>> + .near_field = NF_NONE, >>>>> + .xover = 0., >>>>> + .outlayout = (AVChannelLayout)AV_CHANNEL_LAYOUT_5POINT0_BACK, >>>>> + .speakers_azimuth = (const double[5]){ -30, 30, 0, -145, 145 >>>>> }, >>>>> + .speakers_distance = same_distance, >>>>> + }, >>>>> + [L5_0_SIDE] = { >>>>> + .order = 1, >>>>> + .inputs = 4, >>>>> + .speakers = 5, >>>>> + .near_field = NF_NONE, >>>>> + .xover = 0., >>>>> + .outlayout = (AVChannelLayout)AV_CHANNEL_LAYOUT_5POINT0, >>>>> + .speakers_azimuth = (const double[5]){ -30, 30, 0, -110, 110 >>>>> }, >>>>> + .speakers_distance = same_distance, >>>>> + }, >>>>> + [L6_0] = { >>>>> + .order = 1, >>>>> + .inputs = 4, >>>>> + .speakers = 6, >>>>> + .near_field = NF_NONE, >>>>> + .xover = 0., >>>>> + .outlayout = (AVChannelLayout)AV_CHANNEL_LAYOUT_6POINT0, >>>>> + .speakers_azimuth = (const double[6]){ -30, 30, 0, 180, -110, >>>>> 110 >>>>> }, >>>>> + .speakers_distance = same_distance, >>>>> + }, >>>>> + [L7_0] = { >>>>> + .order = 1, >>>>> + .inputs = 4, >>>>> + .speakers = 7, >>>>> + .near_field = NF_NONE, >>>>> + .xover = 0., >>>>> + .outlayout = (AVChannelLayout)AV_CHANNEL_LAYOUT_7POINT0, >>>>> + .speakers_azimuth = (const double[7]){ -30, 30, 0, -145, 145, >>>>> -110, 110 }, >>>>> + .speakers_distance = same_distance, >>>>> + }, >>>>> + [TETRA] = { >>>>> + .order = 1, >>>>> + .inputs = 4, >>>>> + .speakers = 4, >>>>> + .type = 2, >>>>> + .near_field = NF_NONE, >>>>> + .xover = 0., >>>>> + .outlayout = (AVChannelLayout)AV_CHANNEL_LAYOUT_QUAD, >>>>> + .speakers_azimuth = (const double[4]){ -90, 90, 0, 180 }, >>>>> + .speakers_elevation = (const double[4]){ -35.3, -35.3, 35.3, >>>>> 35.3 >>>>> }, >>>>> + .speakers_distance = same_distance, >>>>> + }, >>>>> + [CUBE] = { >>>>> + .order = 1, >>>>> + .inputs = 4, >>>>> + .speakers = 8, >>>>> + .type = 2, >>>>> + .near_field = NF_NONE, >>>>> + .xover = 0., >>>>> + .outlayout = (AVChannelLayout)AV_CHANNEL_LAYOUT_7POINT1, >>>> >>>> 7.1 defines an LFE channel, which is clearly not intended here, so it >>>> should be either: >>>> >>>> .outlayout = (AVChannelLayout)AV_CHANNEL_LAYOUT_MASK(8, >>>> AV_CH_LAYOUT_QUAD | >>>> AV_CH_TOP_FRONT_LEFT | >>>> AV_CH_TOP_FRONT_RIGHT | >>>> AV_CH_TOP_BACK_LEFT | >>>> AV_CH_TOP_BACK_RIGHT), >>>> >>>> Or the AV_CHANNEL_LAYOUT_CUBE layout (using the exact same bitmask as >>>> above) after the patch i sent just now is committed. >>> >>> CUBE is as real cube in 3d space. No current layout in API can be >>> described correctly. >> >> the TOP_* channels are in a different height layer than the other >> channels, namely above them. The result for this bitmask is a 3D cube >> layout (Left and right speakers both front and back, in two different >> height layers). > > https://en.wikipedia.org/wiki/Ambisonic_reproduction_systems#Cube "If all speakers are placed in room corners", So a 7.1 layout, besides defining one channel as LFE, is also not ideal given that it defines two speaker positions in places other than the room corners, and by no means describes a 3D cube since all speakers are at the same height. The TOP channel ids let you assign four channels to speakers placed in the top room corners. _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".