diff mbox

[FFmpeg-devel] aacenc: WIP support for PCEs

Message ID 9bb7d16c-124b-21ef-3006-68f812623145@gmail.com
State Superseded
Headers show

Commit Message

pkv.stream Oct. 1, 2017, 10:52 p.m. UTC
Le 02/10/2017 à 12:43 AM, Carl Eugen Hoyos a écrit :
> 2017-10-02 0:40 GMT+02:00 pkv.stream <pkv.stream@gmail.com>:
>> Hi atomnuker,
>>
>> got your PCE working;
> the patch you attached contains tabs, they cannot be committed
> to the FFmpeg repository, please remove them.
> (Or one tab.)

thanks for pointing out.
Removed the offending tab.

>
> Thank you, Carl Eugen
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel@ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
From 647fb61708bc1279f9dc17c679052a778dce5fbb Mon Sep 17 00:00:00 2001
From: pkviet <pkv.stream@gmail.com>
Date: Sun, 24 Sep 2017 16:11:17 +0200
Subject: [PATCH] avcodec/aacenc: PCE for all ffmpeg usual layouts

PCE for all usual layouts listed in channel_layout_map
(channel_layout.c) have been added.
All encodes with PCE are decoded correctly by ffmpeg aac decoder (not
checked with others).
The correctness of the channel positions in the encodes have been checked
 by splitting the channels to independent audio tracks.
Two non standard layouts have been added in the PCE for support of 9 and
 10 channels, which are useful for ambisonics.
For layouts with LFE, the LFE element has been replaced by a SCE because
the encoder always puts the LFE as last channel, irrespective of
config_map and reorder_map. This is not optimal but it enables these
layouts.
---
 libavcodec/aacenc.h | 239 ++++++++++++++++++++++++++++++++++++++++++++++++++--
 1 file changed, 233 insertions(+), 6 deletions(-)

Comments

Michael Niedermayer Oct. 2, 2017, 5:23 p.m. UTC | #1
On Mon, Oct 02, 2017 at 12:52:53AM +0200, pkv.stream wrote:
> Le 02/10/2017 à 12:43 AM, Carl Eugen Hoyos a écrit :
> >2017-10-02 0:40 GMT+02:00 pkv.stream <pkv.stream@gmail.com>:
> >>Hi atomnuker,
> >>
> >>got your PCE working;
> >the patch you attached contains tabs, they cannot be committed
> >to the FFmpeg repository, please remove them.
> >(Or one tab.)
> 
> thanks for pointing out.
> Removed the offending tab.
> 
> >
> >Thank you, Carl Eugen
> >_______________________________________________
> >ffmpeg-devel mailing list
> >ffmpeg-devel@ffmpeg.org
> >http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
> 
> 

>  aacenc.h |  239 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--
>  1 file changed, 233 insertions(+), 6 deletions(-)
> 929275fe34af4d0048bac2be928957288cb75ddd  0001-avcodec-aacenc-PCE-for-all-ffmpeg-usual-layouts.patch
> From 647fb61708bc1279f9dc17c679052a778dce5fbb Mon Sep 17 00:00:00 2001
> From: pkviet <pkv.stream@gmail.com>
> Date: Sun, 24 Sep 2017 16:11:17 +0200
> Subject: [PATCH] avcodec/aacenc: PCE for all ffmpeg usual layouts

this seems not to apply cleanly here, did i miss something ?

Applying: avcodec/aacenc: PCE for all ffmpeg usual layouts
error: sha1 information is lacking or useless (libavcodec/aacenc.h).
error: could not build fake ancestor
Patch failed at 0001 avcodec/aacenc: PCE for all ffmpeg usual layouts
The copy of the patch that failed is found in: .git/rebase-apply/patch


[...]
pkv.stream Oct. 2, 2017, 5:43 p.m. UTC | #2
Le 02/10/2017 à 7:23 PM, Michael Niedermayer a écrit :
> On Mon, Oct 02, 2017 at 12:52:53AM +0200, pkv.stream wrote:
>> Le 02/10/2017 à 12:43 AM, Carl Eugen Hoyos a écrit :
>>> 2017-10-02 0:40 GMT+02:00 pkv.stream <pkv.stream@gmail.com>:
>>>> Hi atomnuker,
>>>>
>>>> got your PCE working;
>>> the patch you attached contains tabs, they cannot be committed
>>> to the FFmpeg repository, please remove them.
>>> (Or one tab.)
>> thanks for pointing out.
>> Removed the offending tab.
>>
>>> Thank you, Carl Eugen
>>> _______________________________________________
>>> ffmpeg-devel mailing list
>>> ffmpeg-devel@ffmpeg.org
>>> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>>
>>   aacenc.h |  239 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--
>>   1 file changed, 233 insertions(+), 6 deletions(-)
>> 929275fe34af4d0048bac2be928957288cb75ddd  0001-avcodec-aacenc-PCE-for-all-ffmpeg-usual-layouts.patch
>>  From 647fb61708bc1279f9dc17c679052a778dce5fbb Mon Sep 17 00:00:00 2001
>> From: pkviet <pkv.stream@gmail.com>
>> Date: Sun, 24 Sep 2017 16:11:17 +0200
>> Subject: [PATCH] avcodec/aacenc: PCE for all ffmpeg usual layouts
> this seems not to apply cleanly here, did i miss something ?

Hi Michael
this needs to be applied after the initial patch by atomnuker which he 
did not apply since this required work.
What i submitted was not aimed at being pushed since there is probably 
still work to do.
Depending on what he wants to do with his patch, I'll resubmit a working 
patch later, properly rebased.
Sorry about the mess.
regards

>
> Applying: avcodec/aacenc: PCE for all ffmpeg usual layouts
> error: sha1 information is lacking or useless (libavcodec/aacenc.h).
> error: could not build fake ancestor
> Patch failed at 0001 avcodec/aacenc: PCE for all ffmpeg usual layouts
> The copy of the patch that failed is found in: .git/rebase-apply/patch
>
>
> [...]
>
>
>
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel@ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
Rostislav Pehlivanov Oct. 2, 2017, 6:39 p.m. UTC | #3
On 2 October 2017 at 18:43, pkv.stream <pkv.stream@gmail.com> wrote:

> Le 02/10/2017 à 7:23 PM, Michael Niedermayer a écrit :
>
>> On Mon, Oct 02, 2017 at 12:52:53AM +0200, pkv.stream wrote:
>>
>>> Le 02/10/2017 à 12:43 AM, Carl Eugen Hoyos a écrit :
>>>
>>>> 2017-10-02 0:40 GMT+02:00 pkv.stream <pkv.stream@gmail.com>:
>>>>
>>>>> Hi atomnuker,
>>>>>
>>>>> got your PCE working;
>>>>>
>>>> the patch you attached contains tabs, they cannot be committed
>>>> to the FFmpeg repository, please remove them.
>>>> (Or one tab.)
>>>>
>>> thanks for pointing out.
>>> Removed the offending tab.
>>>
>>> Thank you, Carl Eugen
>>>> _______________________________________________
>>>> ffmpeg-devel mailing list
>>>> ffmpeg-devel@ffmpeg.org
>>>> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>>>>
>>>
>>>   aacenc.h |  239 ++++++++++++++++++++++++++++++
>>> +++++++++++++++++++++++++++++++--
>>>   1 file changed, 233 insertions(+), 6 deletions(-)
>>> 929275fe34af4d0048bac2be928957288cb75ddd  0001-avcodec-aacenc-PCE-for-al
>>> l-ffmpeg-usual-layouts.patch
>>>  From 647fb61708bc1279f9dc17c679052a778dce5fbb Mon Sep 17 00:00:00 2001
>>> From: pkviet <pkv.stream@gmail.com>
>>> Date: Sun, 24 Sep 2017 16:11:17 +0200
>>> Subject: [PATCH] avcodec/aacenc: PCE for all ffmpeg usual layouts
>>>
>> this seems not to apply cleanly here, did i miss something ?
>>
>
> Hi Michael
> this needs to be applied after the initial patch by atomnuker which he did
> not apply since this required work.
> What i submitted was not aimed at being pushed since there is probably
> still work to do.
> Depending on what he wants to do with his patch, I'll resubmit a working
> patch later, properly rebased.
> Sorry about the mess.
> regards
>
>
>> Applying: avcodec/aacenc: PCE for all ffmpeg usual layouts
>> error: sha1 information is lacking or useless (libavcodec/aacenc.h).
>> error: could not build fake ancestor
>> Patch failed at 0001 avcodec/aacenc: PCE for all ffmpeg usual layouts
>> The copy of the patch that failed is found in: .git/rebase-apply/patch
>>
>>
>> [...]
>>
>>
>>
>> _______________________________________________
>> ffmpeg-devel mailing list
>> ffmpeg-devel@ffmpeg.org
>> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>>
>
>
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel@ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>


Give me a few hours and I'll test it and submit a v2 of my patch with your
improvements.
pkv.stream Oct. 18, 2017, 10:05 a.m. UTC | #4
Le 02/10/2017 à 8:39 PM, Rostislav Pehlivanov a écrit :
> On 2 October 2017 at 18:43, pkv.stream <pkv.stream@gmail.com> wrote:
>
>> Le 02/10/2017 à 7:23 PM, Michael Niedermayer a écrit :
>>
>>> On Mon, Oct 02, 2017 at 12:52:53AM +0200, pkv.stream wrote:
>>>
>>>> Le 02/10/2017 à 12:43 AM, Carl Eugen Hoyos a écrit :
>>>>
>>>>> 2017-10-02 0:40 GMT+02:00 pkv.stream <pkv.stream@gmail.com>:
>>>>>
>>>>>> Hi atomnuker,
>>>>>>
>>>>>> got your PCE working;
>>>>>>
>>>>> the patch you attached contains tabs, they cannot be committed
>>>>> to the FFmpeg repository, please remove them.
>>>>> (Or one tab.)
>>>>>
>>>> thanks for pointing out.
>>>> Removed the offending tab.
>>>>
>>>> Thank you, Carl Eugen
>>>>> _______________________________________________
>>>>> ffmpeg-devel mailing list
>>>>> ffmpeg-devel@ffmpeg.org
>>>>> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>>>>>
>>>>    aacenc.h |  239 ++++++++++++++++++++++++++++++
>>>> +++++++++++++++++++++++++++++++--
>>>>    1 file changed, 233 insertions(+), 6 deletions(-)
>>>> 929275fe34af4d0048bac2be928957288cb75ddd  0001-avcodec-aacenc-PCE-for-al
>>>> l-ffmpeg-usual-layouts.patch
>>>>   From 647fb61708bc1279f9dc17c679052a778dce5fbb Mon Sep 17 00:00:00 2001
>>>> From: pkviet <pkv.stream@gmail.com>
>>>> Date: Sun, 24 Sep 2017 16:11:17 +0200
>>>> Subject: [PATCH] avcodec/aacenc: PCE for all ffmpeg usual layouts
>>>>
>>> this seems not to apply cleanly here, did i miss something ?
>>>
>> Hi Michael
>> this needs to be applied after the initial patch by atomnuker which he did
>> not apply since this required work.
>> What i submitted was not aimed at being pushed since there is probably
>> still work to do.
>> Depending on what he wants to do with his patch, I'll resubmit a working
>> patch later, properly rebased.
>> Sorry about the mess.
>> regards
>>
>>
>>> Applying: avcodec/aacenc: PCE for all ffmpeg usual layouts
>>> error: sha1 information is lacking or useless (libavcodec/aacenc.h).
>>> error: could not build fake ancestor
>>> Patch failed at 0001 avcodec/aacenc: PCE for all ffmpeg usual layouts
>>> The copy of the patch that failed is found in: .git/rebase-apply/patch
>>>
>>>
>>> [...]
>>>
>>>
>>>
>>> _______________________________________________
>>> ffmpeg-devel mailing list
>>> ffmpeg-devel@ffmpeg.org
>>> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>>>
>>
>> _______________________________________________
>> ffmpeg-devel mailing list
>> ffmpeg-devel@ffmpeg.org
>> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>>
>
> Give me a few hours and I'll test it and submit a v2 of my patch with your
> improvements.
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel@ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel

Hi

any updates ?

regards
Rostislav Pehlivanov Nov. 9, 2017, 3:43 a.m. UTC | #5
On 18 October 2017 at 11:05, pkv.stream <pkv.stream@gmail.com> wrote:

> Le 02/10/2017 à 8:39 PM, Rostislav Pehlivanov a écrit :
>
>> On 2 October 2017 at 18:43, pkv.stream <pkv.stream@gmail.com> wrote:
>>
>> Le 02/10/2017 à 7:23 PM, Michael Niedermayer a écrit :
>>>
>>> On Mon, Oct 02, 2017 at 12:52:53AM +0200, pkv.stream wrote:
>>>>
>>>> Le 02/10/2017 à 12:43 AM, Carl Eugen Hoyos a écrit :
>>>>>
>>>>> 2017-10-02 0:40 GMT+02:00 pkv.stream <pkv.stream@gmail.com>:
>>>>>>
>>>>>> Hi atomnuker,
>>>>>>>
>>>>>>> got your PCE working;
>>>>>>>
>>>>>>> the patch you attached contains tabs, they cannot be committed
>>>>>> to the FFmpeg repository, please remove them.
>>>>>> (Or one tab.)
>>>>>>
>>>>>> thanks for pointing out.
>>>>> Removed the offending tab.
>>>>>
>>>>> Thank you, Carl Eugen
>>>>>
>>>>>> _______________________________________________
>>>>>> ffmpeg-devel mailing list
>>>>>> ffmpeg-devel@ffmpeg.org
>>>>>> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>>>>>>
>>>>>>    aacenc.h |  239 ++++++++++++++++++++++++++++++
>>>>> +++++++++++++++++++++++++++++++--
>>>>>    1 file changed, 233 insertions(+), 6 deletions(-)
>>>>> 929275fe34af4d0048bac2be928957288cb75ddd
>>>>> 0001-avcodec-aacenc-PCE-for-al
>>>>> l-ffmpeg-usual-layouts.patch
>>>>>   From 647fb61708bc1279f9dc17c679052a778dce5fbb Mon Sep 17 00:00:00
>>>>> 2001
>>>>> From: pkviet <pkv.stream@gmail.com>
>>>>> Date: Sun, 24 Sep 2017 16:11:17 +0200
>>>>> Subject: [PATCH] avcodec/aacenc: PCE for all ffmpeg usual layouts
>>>>>
>>>>> this seems not to apply cleanly here, did i miss something ?
>>>>
>>>> Hi Michael
>>> this needs to be applied after the initial patch by atomnuker which he
>>> did
>>> not apply since this required work.
>>> What i submitted was not aimed at being pushed since there is probably
>>> still work to do.
>>> Depending on what he wants to do with his patch, I'll resubmit a working
>>> patch later, properly rebased.
>>> Sorry about the mess.
>>> regards
>>>
>>>
>>> Applying: avcodec/aacenc: PCE for all ffmpeg usual layouts
>>>> error: sha1 information is lacking or useless (libavcodec/aacenc.h).
>>>> error: could not build fake ancestor
>>>> Patch failed at 0001 avcodec/aacenc: PCE for all ffmpeg usual layouts
>>>> The copy of the patch that failed is found in: .git/rebase-apply/patch
>>>>
>>>>
>>>> [...]
>>>>
>>>>
>>>>
>>>> _______________________________________________
>>>> ffmpeg-devel mailing list
>>>> ffmpeg-devel@ffmpeg.org
>>>> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>>>>
>>>>
>>> _______________________________________________
>>> ffmpeg-devel mailing list
>>> ffmpeg-devel@ffmpeg.org
>>> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>>>
>>>
>> Give me a few hours and I'll test it and submit a v2 of my patch with your
>> improvements.
>> _______________________________________________
>> ffmpeg-devel mailing list
>> ffmpeg-devel@ffmpeg.org
>> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>>
>
> Hi
>
> any updates ?
>
> regards
>
>
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel@ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>


Hi,
Very sorry it took me this long but I finally got motivated and got around
to checking your patch

I have to say I'm impressed, everything works perfectly, decodes fine and
the mappings were all fine. This is a big feature which many people have
requested and complained the encoder lacks support for.

I've done some minor changes to the code on the encoder side (an INFO print
instead of a warning), to the comments (just alignment) and for the
ambisonic layouts (made them use the defines) and I've pushed it.

Thanks a lot
Rostislav Pehlivanov Nov. 9, 2017, 1:02 p.m. UTC | #6
On 9 November 2017 at 08:01, pkv.stream <pkv.stream@gmail.com> wrote:

> Le 09/11/2017 à 4:43 AM, Rostislav Pehlivanov a écrit :
>
>> On 18 October 2017 at 11:05, pkv.stream <pkv.stream@gmail.com> wrote:
>>
>> Le 02/10/2017 à 8:39 PM, Rostislav Pehlivanov a écrit :
>>>
>>> On 2 October 2017 at 18:43, pkv.stream <pkv.stream@gmail.com> wrote:
>>>>
>>>> Le 02/10/2017 à 7:23 PM, Michael Niedermayer a écrit :
>>>>
>>>>> On Mon, Oct 02, 2017 at 12:52:53AM +0200, pkv.stream wrote:
>>>>>
>>>>>> Le 02/10/2017 à 12:43 AM, Carl Eugen Hoyos a écrit :
>>>>>>
>>>>>>> 2017-10-02 0:40 GMT+02:00 pkv.stream <pkv.stream@gmail.com>:
>>>>>>>
>>>>>>>> Hi atomnuker,
>>>>>>>>
>>>>>>>>> got your PCE working;
>>>>>>>>>
>>>>>>>>> the patch you attached contains tabs, they cannot be committed
>>>>>>>>>
>>>>>>>> to the FFmpeg repository, please remove them.
>>>>>>>> (Or one tab.)
>>>>>>>>
>>>>>>>> thanks for pointing out.
>>>>>>>>
>>>>>>> Removed the offending tab.
>>>>>>>
>>>>>>> Thank you, Carl Eugen
>>>>>>>
>>>>>>> _______________________________________________
>>>>>>>> ffmpeg-devel mailing list
>>>>>>>> ffmpeg-devel@ffmpeg.org
>>>>>>>> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>>>>>>>>
>>>>>>>>     aacenc.h |  239 ++++++++++++++++++++++++++++++
>>>>>>>>
>>>>>>> +++++++++++++++++++++++++++++++--
>>>>>>>     1 file changed, 233 insertions(+), 6 deletions(-)
>>>>>>> 929275fe34af4d0048bac2be928957288cb75ddd
>>>>>>> 0001-avcodec-aacenc-PCE-for-al
>>>>>>> l-ffmpeg-usual-layouts.patch
>>>>>>>    From 647fb61708bc1279f9dc17c679052a778dce5fbb Mon Sep 17 00:00:00
>>>>>>> 2001
>>>>>>> From: pkviet <pkv.stream@gmail.com>
>>>>>>> Date: Sun, 24 Sep 2017 16:11:17 +0200
>>>>>>> Subject: [PATCH] avcodec/aacenc: PCE for all ffmpeg usual layouts
>>>>>>>
>>>>>>> this seems not to apply cleanly here, did i miss something ?
>>>>>>>
>>>>>> Hi Michael
>>>>>>
>>>>> this needs to be applied after the initial patch by atomnuker which he
>>>>> did
>>>>> not apply since this required work.
>>>>> What i submitted was not aimed at being pushed since there is probably
>>>>> still work to do.
>>>>> Depending on what he wants to do with his patch, I'll resubmit a
>>>>> working
>>>>> patch later, properly rebased.
>>>>> Sorry about the mess.
>>>>> regards
>>>>>
>>>>>
>>>>> Applying: avcodec/aacenc: PCE for all ffmpeg usual layouts
>>>>>
>>>>>> error: sha1 information is lacking or useless (libavcodec/aacenc.h).
>>>>>> error: could not build fake ancestor
>>>>>> Patch failed at 0001 avcodec/aacenc: PCE for all ffmpeg usual layouts
>>>>>> The copy of the patch that failed is found in: .git/rebase-apply/patch
>>>>>>
>>>>>>
>>>>>> [...]
>>>>>>
>>>>>>
>>>>>>
>>>>>> _______________________________________________
>>>>>> ffmpeg-devel mailing list
>>>>>> ffmpeg-devel@ffmpeg.org
>>>>>> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>>>>>>
>>>>>>
>>>>>> _______________________________________________
>>>>> ffmpeg-devel mailing list
>>>>> ffmpeg-devel@ffmpeg.org
>>>>> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>>>>>
>>>>>
>>>>> Give me a few hours and I'll test it and submit a v2 of my patch with
>>>> your
>>>> improvements.
>>>> _______________________________________________
>>>> ffmpeg-devel mailing list
>>>> ffmpeg-devel@ffmpeg.org
>>>> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>>>>
>>>> Hi
>>>
>>> any updates ?
>>>
>>> regards
>>>
>>>
>>> _______________________________________________
>>> ffmpeg-devel mailing list
>>> ffmpeg-devel@ffmpeg.org
>>> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>>>
>>>
>> Hi,
>> Very sorry it took me this long but I finally got motivated and got around
>> to checking your patch
>>
>> I have to say I'm impressed, everything works perfectly, decodes fine and
>> the mappings were all fine. This is a big feature which many people have
>> requested and complained the encoder lacks support for.
>>
>> I've done some minor changes to the code on the encoder side (an INFO
>> print
>> instead of a warning), to the comments (just alignment) and for the
>> ambisonic layouts (made them use the defines) and I've pushed it.
>>
>> Thanks a lot
>> _______________________________________________
>> ffmpeg-devel mailing list
>> ffmpeg-devel@ffmpeg.org
>> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>>
>
> Hi atomnuker,
>
> that's wonderful;
>
> there are two things also:
>
> 1) there are changes to make to the list of channel layouts not requiring
> PCE
>
> ==> AV_CH_LAYOUT_5POINT0 to AV_CH_LAYOUT_5POINT0_BACK since the previous
> is 5.0(side) while the latter is 5.0 which is what is in spec (table 1.19
> ISO/IEC 14496-3:200X(E) or table 42 ISO/IEC 13818-7:2004(E) )
>
> see patch in attachment (can't be applied directly due to rebasing issues
> from your initial patch)
>
>
Checked the spec, you're right, fixed.



> 2) for everything to work I had to also apply the patch from here:
>
> http://ffmpeg.org/pipermail/ffmpeg-devel/2017-October/217357.html
>
> If you ffmpeg -loglevel debug , you will see that on non-default channel
> layouts, there is an auto insertion of a resampler filter : the
> channel_layout option is not passed correctly in the chain.
>
> for instance: ffmpeg -channel_layout octagonal -i input.wav -c:a aac
> -channel_layout octagonal out.mkv will matrix the input from octagonal to
> 7.1 before the encoding.
>
> Check ticket 6706 for details of the issue.
>
> I am not knowledgeable enough to be sure my fix is correct; it's working
> for sure, but I've had very few feedback (only Michael and Moritz about
> styling issues).
>


Pining Michael to take a look at it.
pkv.stream Nov. 10, 2017, 11:02 a.m. UTC | #7
> Hi atomnuker,
>
> that's wonderful;
>
> there are two things also:
>
> 1) there are changes to make to the list of channel layouts not requiring
> PCE
>
> ==> AV_CH_LAYOUT_5POINT0 to AV_CH_LAYOUT_5POINT0_BACK since the previous
> is 5.0(side) while the latter is 5.0 which is what is in spec (table 1.19
> ISO/IEC 14496-3:200X(E) or table 42 ISO/IEC 13818-7:2004(E) )
>
> see patch in attachment (can't be applied directly due to rebasing issues
> from your initial patch)
>
>
Checked the spec, you're right, fixed.


Great, you're right also about side being better than back in the commit
message.




> 2) for everything to work I had to also apply the patch from here:
>
> http://ffmpeg.org/pipermail/ffmpeg-devel/2017-October/217357.html
>
> If you ffmpeg -loglevel debug , you will see that on non-default channel
> layouts, there is an auto insertion of a resampler filter : the
> channel_layout option is not passed correctly in the chain.
>
> for instance: ffmpeg -channel_layout octagonal -i input.wav -c:a aac
> -channel_layout octagonal out.mkv will matrix the input from octagonal to
> 7.1 before the encoding.
>
> Check ticket 6706 for details of the issue.
>
> I am not knowledgeable enough to be sure my fix is correct; it's working
> for sure, but I've had very few feedback (only Michael and Moritz about
> styling issues).
>


Pining Michael to take a look at it.



Discussing this with Michael.
My patch fails when there is down or upmixing.
I think there are at least two bugs hiding one behind another within the
filter chain.
It's a pity because this cripples your PCE implementation to ffmpeg default
channel layouts only (2.1 4.0 5.0 5.1 6.1 7.1 hexadecagonal), where 4.0 5.0
5.1 7.1 do not require PCE anyway.
I'll try to find a solution but senior dev help might be needed because
this is quite convoluted.

Best
diff mbox

Patch

diff --git a/libavcodec/aacenc.h b/libavcodec/aacenc.h
index 346d989..31afd04 100644
--- a/libavcodec/aacenc.h
+++ b/libavcodec/aacenc.h
@@ -99,6 +99,33 @@  typedef struct AACPCEInfo {
     uint8_t reorder_map[16];                     ///< maps channels from lavc to aac order
 } AACPCEInfo;
 
+/**
+ *List of PCE (Program Configuration Element) for the channel layouts listed in channel_layout.h
+ *
+ *For those wishing in the future to add other layouts:
+ * - num_ele: number of elements in each group of front, side, back, lfe channels;
+ * (an element is of type SCE (single channel) , CPE (channel pair) for the first 3 groups;
+ * and is LFE for LFE group).
+ * - pairing: 0 for an SCE element or 1 for a CPE; does not apply to LFE group
+ * - index: there are three independent indices for SCE, CPE and LFE;
+ *   they are incremented irrespective of the group to which the element belongs;
+ *   they are not reset when going from one group to another
+ *
+ *   Example: for 7.0 channel layout,
+ *      .pairing = { { 1, 0 }, { 1 }, { 1 }, }, (3 CPE and 1 SCE in front group)
+ *      .index = { { 0, 0 }, { 1 }, { 2 }, }, index is 0 for the single SCE
+ *       but goes from 0 to 2 for the CPEs .
+ *
+ *  The index order impacts the channel ordering. But is otherwise arbitrary
+ * (the sequence could have been 2, 0, 1 instead of 0, 1, 2).
+ * Spec allows discontinuous indices, e.g. if one has a total of two SCE, SCE.0 SCE.15 is OK per spec;
+ * BUT it won't be decoded by ffmpeg aac decoder which at this time requires that indices fully cover some range starting from 0.
+ * (SCE.1 SCE.0 is OK but not SCE.0 SCE.15).
+ *
+ * - config_map: total number of elements and their types. Beware, the way the types are ordered impacts the final channel ordering.
+ * - reorder_map: reorders the channels.
+ *
+ */
 static const AACPCEInfo aac_pce_configs[] = {
     {
         .layout = AV_CH_LAYOUT_MONO,
@@ -117,20 +144,220 @@  static const AACPCEInfo aac_pce_configs[] = {
         .reorder_map = { 0, 1 },
     },
     {
+        .layout = AV_CH_LAYOUT_2POINT1,
+        .num_ele = { 1, 0, 0, 1 },
+        .pairing = { { 1 }, },
+        .index = { { 0 },{ 0 },{ 0 },{ 0 } },
+        .config_map = { 2, TYPE_CPE, TYPE_LFE },
+        .reorder_map = { 0, 1, 2 },
+    },
+    {
+        .layout = AV_CH_LAYOUT_2_1,
+        .num_ele = { 1, 0, 1, 0 },
+        .pairing = { { 1 },{ 0 },{ 0 } },
+        .index = { { 0 },{ 0 },{ 0 }, },
+        .config_map = { 2, TYPE_CPE, TYPE_SCE },
+        .reorder_map = { 0, 1, 2 },
+    },
+    {
         .layout = AV_CH_LAYOUT_SURROUND,
         .num_ele = { 2, 0, 0, 0 },
         .pairing = { { 1, 0 }, },
-        .index = { { 0, 1 }, },
-        .config_map = { 2, TYPE_SCE, TYPE_CPE },
-        .reorder_map = { 2, 0, 1 },
+        .index = { { 0, 0 }, },
+        .config_map = { 2, TYPE_CPE, TYPE_SCE, },
+        .reorder_map = { 0, 1, 2 },
+    },
+    {
+        .layout = AV_CH_LAYOUT_3POINT1,
+        .num_ele = { 2, 0, 0, 1 },
+        .pairing = { { 1, 0 }, },
+        .index = { { 0, 0 }, { 0 }, { 0 }, { 0 }, },
+        .config_map = { 3, TYPE_CPE, TYPE_SCE, TYPE_LFE },
+        .reorder_map = { 0, 1, 2, 3 },
     },
     {
         .layout = AV_CH_LAYOUT_4POINT0,
         .num_ele = { 2, 0, 1, 0 },
         .pairing = { { 1, 0 }, { 0 }, { 0 }, },
-        .index = { { 0, 1 }, { 0 }, { 0 } },
-        .config_map = { 3, TYPE_SCE, TYPE_CPE, TYPE_SCE },
-        .reorder_map = { 2, 0, 1, 3 },
+        .index = { { 0, 0 }, { 0 }, { 1 } },
+        .config_map = { 3, TYPE_CPE, TYPE_SCE, TYPE_SCE },
+        .reorder_map = {  0, 1, 2, 3 },
+    },
+    {
+        .layout = AV_CH_LAYOUT_4POINT1,
+        .num_ele = { 2, 1, 1, 0 },
+        .pairing = { { 1, 0 }, { 0 }, { 0 }, },
+        .index = { { 0, 0 }, { 1 }, { 2 }, { 0 } },
+        .config_map = { 4, TYPE_CPE, TYPE_SCE, TYPE_SCE, TYPE_SCE },
+        .reorder_map = { 0, 1, 2, 3, 4 },
+    },
+    {
+        .layout = AV_CH_LAYOUT_2_2,
+        .num_ele = { 1, 1, 0, 0 },
+        .pairing = { { 1 }, { 1 }, },
+        .index = { { 0 }, { 1 }, },
+        .config_map = { 2, TYPE_CPE, TYPE_CPE },
+        .reorder_map = { 0, 1, 2, 3 },
+    },
+    {
+        .layout = AV_CH_LAYOUT_QUAD,
+        .num_ele = { 1, 0, 1, 0 },
+        .pairing = { { 1 }, { 0 }, { 1 }, },
+        .index = { { 0 }, { 0 }, { 1 } },
+        .config_map = { 2, TYPE_CPE, TYPE_CPE },
+        .reorder_map = { 0, 1, 2, 3 },
+    },
+    {
+        .layout = AV_CH_LAYOUT_5POINT0,
+        .num_ele = { 2, 1, 0, 0 },
+        .pairing = { { 1, 0 }, { 1 }, },
+        .index = { { 0, 0 }, { 1 } },
+        .config_map = { 3, TYPE_CPE, TYPE_SCE, TYPE_CPE },
+        .reorder_map = { 0, 1, 2, 3, 4 },
+    },
+    {
+        .layout = AV_CH_LAYOUT_5POINT1,
+        .num_ele = { 2, 1, 1, 0 },
+        .pairing = { { 1, 0 }, { 0 }, { 1 }, },
+        .index = { { 0, 0 }, { 1 }, { 1 } },
+        .config_map = { 4, TYPE_CPE, TYPE_SCE, TYPE_SCE, TYPE_CPE },
+        .reorder_map = { 0, 1, 2, 3, 4, 5 },
+    },
+    {
+        .layout = AV_CH_LAYOUT_5POINT0_BACK,
+        .num_ele = { 2, 0, 1, 0 },
+        .pairing = { { 1, 0 }, { 0 }, { 1 } },
+        .index = { { 0, 0 }, { 0 }, { 1 } },
+        .config_map = { 3, TYPE_CPE, TYPE_SCE, TYPE_CPE },
+        .reorder_map = { 0, 1, 2, 3, 4 },
+    },
+    {
+        .layout = AV_CH_LAYOUT_5POINT1_BACK,
+        .num_ele = { 2, 1, 1, 0 },
+        .pairing = { { 1, 0 }, { 0 }, { 1 }, },
+        .index = { { 0, 0 }, { 1 }, { 1 } },
+        .config_map = { 4, TYPE_CPE, TYPE_SCE, TYPE_SCE, TYPE_CPE },
+        .reorder_map = { 0, 1, 2, 3, 4, 5 },
+    },
+    {
+        .layout = AV_CH_LAYOUT_6POINT0,
+        .num_ele = { 2, 1, 1, 0 },
+        .pairing = { { 1, 0 }, { 1 }, { 0 }, },
+        .index = { { 0, 0 }, { 1 }, { 1 } },
+        .config_map = { 4, TYPE_CPE, TYPE_SCE, TYPE_CPE, TYPE_SCE },
+        .reorder_map = { 0, 1, 2, 3, 4, 5 },
+    },
+    {
+        .layout = AV_CH_LAYOUT_6POINT0_FRONT,
+        .num_ele = { 2, 1, 0, 0 },
+        .pairing = { { 1, 1 }, { 1 } },
+        .index = { { 1, 0 }, { 2 }, },
+        .config_map = { 3, TYPE_CPE, TYPE_CPE, TYPE_CPE, },
+        .reorder_map = { 0, 1, 2, 3, 4, 5 },
+    },
+    {
+        .layout = AV_CH_LAYOUT_HEXAGONAL,
+        .num_ele = { 2, 0, 2, 0 },
+        .pairing = { { 1, 0 },{ 0 },{ 1, 0 }, },
+        .index = { { 0, 0 },{ 0 },{ 1, 1 } },
+        .config_map = { 4, TYPE_CPE, TYPE_SCE, TYPE_CPE, TYPE_SCE, },
+        .reorder_map = { 0, 1, 2, 3, 4, 5 },
+    },
+    {
+        .layout = AV_CH_LAYOUT_6POINT1,
+        .num_ele = { 2, 1, 2, 0 },
+        .pairing = { { 1, 0 },{ 0 },{ 1, 0 }, },
+        .index = { { 0, 0 },{ 1 },{ 1, 2 } },
+        .config_map = { 5, TYPE_CPE, TYPE_SCE, TYPE_SCE, TYPE_CPE, TYPE_SCE },
+        .reorder_map = { 0, 1, 2, 3, 4, 5, 6 },
+    },
+    {
+        .layout = AV_CH_LAYOUT_6POINT1_BACK,
+        .num_ele = { 2, 1, 2, 0 },
+        .pairing = { { 1, 0 }, { 0 }, { 1, 0 }, },
+        .index = { { 0, 0 }, { 1 }, { 1, 2 } },
+        .config_map = { 5, TYPE_CPE, TYPE_SCE, TYPE_SCE, TYPE_CPE, TYPE_SCE },
+        .reorder_map = { 0, 1, 2, 3, 4, 5, 6 },
+    },
+    {
+        .layout = AV_CH_LAYOUT_6POINT1_FRONT,
+        .num_ele = { 2, 1, 2, 0 },
+        .pairing = { { 1, 0 }, { 0 }, { 1, 0 }, },
+        .index = { { 0, 0 }, { 1 }, { 1, 2 } },
+        .config_map = { 5, TYPE_CPE, TYPE_SCE, TYPE_SCE, TYPE_CPE, TYPE_SCE },
+        .reorder_map = { 0, 1, 2, 3, 4, 5, 6 },
+    },
+    {
+        .layout = AV_CH_LAYOUT_7POINT0,
+        .num_ele = { 2, 1, 1, 0 },
+        .pairing = { { 1, 0 }, { 1 }, { 1 }, },
+        .index = { { 0, 0 }, { 1 }, { 2 }, },
+        .config_map = { 4, TYPE_CPE, TYPE_SCE, TYPE_CPE, TYPE_CPE },
+        .reorder_map = { 0, 1, 2, 3, 4, 5, 6 },
+    },
+    {
+        .layout = AV_CH_LAYOUT_7POINT0_FRONT,
+        .num_ele = { 2, 1, 1, 0 },
+        .pairing = { { 1, 0 }, { 1 }, { 1 }, },
+        .index = { { 0, 0 }, { 1 }, { 2 }, },
+        .config_map = { 4, TYPE_CPE, TYPE_SCE, TYPE_CPE, TYPE_CPE },
+        .reorder_map = { 0, 1, 2, 3, 4, 5, 6 },
+    },
+    {
+        .layout = AV_CH_LAYOUT_7POINT1,
+        .num_ele = { 2, 1, 2, 0 },
+        .pairing = { { 1, 0 }, { 0 }, { 1, 1 }, },
+        .index = { { 0, 0 }, { 1 }, { 1, 2 }, { 0 } },
+        .config_map = { 5, TYPE_CPE, TYPE_SCE,  TYPE_SCE, TYPE_CPE, TYPE_CPE },
+        .reorder_map = { 0, 1, 2, 3, 4, 5, 6, 7 },
+    },
+    {
+        .layout = AV_CH_LAYOUT_7POINT1_WIDE,
+        .num_ele = { 2, 1, 2, 0 },
+        .pairing = { { 1, 0 }, { 0 },{  1, 1 }, },
+        .index = { { 0, 0 }, { 1 }, { 1, 2 }, { 0 } },
+        .config_map = { 5, TYPE_CPE, TYPE_SCE, TYPE_SCE, TYPE_CPE, TYPE_CPE },
+        .reorder_map = { 0, 1, 2, 3, 4, 5, 6, 7 },
+    },
+    {
+        .layout = AV_CH_LAYOUT_7POINT1_WIDE_BACK,
+        .num_ele = { 2, 1, 2, 0 },
+        .pairing = { { 1, 0 }, { 0 }, { 1, 1 }, },
+        .index = { { 0, 0 }, { 1 }, { 1, 2 }, { 0 } },
+        .config_map = { 5, TYPE_CPE, TYPE_SCE, TYPE_SCE, TYPE_CPE, TYPE_CPE },
+        .reorder_map = { 0, 1, 2, 3, 4, 5, 6, 7 },
+    },
+    {
+        .layout = AV_CH_LAYOUT_OCTAGONAL,
+        .num_ele = { 2, 1, 2, 0 },
+        .pairing = { { 1, 0 }, { 1 }, { 1, 0 }, },
+        .index = { { 0, 0 }, { 1 }, { 2, 1 } },
+        .config_map = { 5, TYPE_CPE, TYPE_SCE, TYPE_CPE, TYPE_CPE, TYPE_SCE },
+        .reorder_map = { 0, 1, 2, 3, 4, 5, 6, 7 },
+    },
+    {
+        .layout = 0x00000f37, //FL+FR+FC+BL+BR+BC+SL+SR+TC
+        .num_ele = { 2, 2, 2, 0 },
+        .pairing = { { 1, 0 }, { 1, 0 }, { 1, 0 }, },
+        .index = { { 0, 0 }, { 1, 1 }, { 2, 2 } },
+        .config_map = { 6, TYPE_CPE, TYPE_SCE, TYPE_CPE, TYPE_SCE, TYPE_CPE, TYPE_SCE },
+        .reorder_map = { 0, 1, 2, 3, 4, 5, 6, 7, 8 },
+    },
+    {
+        .layout = 0x00000ff3, //FL+FR+BL+BR+FLC+FRC+BC+SL+SR+TC
+        .num_ele = { 2, 2, 2, 0 },
+        .pairing = { { 1, 1 }, { 1, 0 }, { 1, 0 }, },
+        .index = { { 0, 1 }, { 2, 0 }, { 3, 1 } },
+        .config_map = { 6, TYPE_CPE, TYPE_CPE, TYPE_CPE, TYPE_SCE, TYPE_CPE, TYPE_SCE },
+        .reorder_map = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 },
+    },
+    {
+        .layout = AV_CH_LAYOUT_HEXADECAGONAL,
+        .num_ele = { 4, 2, 4, 0 },
+        .pairing = { { 1, 0, 1, 0 }, { 1, 1 }, { 1, 0, 1, 0 }, },
+        .index = { { 0, 0, 1, 1 }, { 2, 3 }, { 4, 2, 5, 3 } },
+        .config_map = { 10, TYPE_CPE, TYPE_SCE, TYPE_CPE, TYPE_SCE, TYPE_CPE, TYPE_CPE, TYPE_CPE, TYPE_SCE, TYPE_CPE, TYPE_SCE },
+        .reorder_map = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 },
     },
 };