Add support for Workgroup 4 (WG4) channel mapping
This is the channel ordering used in DVD Audio, and is the standard used internally in the VLC media player.
This commit is contained in:
parent
ed91226cec
commit
35963519e4
@ -178,7 +178,8 @@ typedef enum {
|
|||||||
typedef enum {
|
typedef enum {
|
||||||
|
|
||||||
CH_ORDER_MPEG = 0, /*!< MPEG channel ordering (e. g. 5.1: C, L, R, SL, SR, LFE) */
|
CH_ORDER_MPEG = 0, /*!< MPEG channel ordering (e. g. 5.1: C, L, R, SL, SR, LFE) */
|
||||||
CH_ORDER_WAV /*!< WAV fileformat channel ordering (e. g. 5.1: L, R, C, LFE, SL, SR) */
|
CH_ORDER_WAV, /*!< WAV fileformat channel ordering (e. g. 5.1: L, R, C, LFE, SL, SR) */
|
||||||
|
CH_ORDER_WG4 /*!< WG4 fileformat channel ordering (e. g. 5.1: L, R, SL, SR, C, LFE) */
|
||||||
|
|
||||||
} CHANNEL_ORDER;
|
} CHANNEL_ORDER;
|
||||||
|
|
||||||
|
@ -1865,7 +1865,7 @@ AACENC_ERROR aacEncoder_SetParam(
|
|||||||
break;
|
break;
|
||||||
case AACENC_CHANNELORDER:
|
case AACENC_CHANNELORDER:
|
||||||
if (hAacEncoder->aacConfig.channelOrder != (CHANNEL_ORDER)value) {
|
if (hAacEncoder->aacConfig.channelOrder != (CHANNEL_ORDER)value) {
|
||||||
if (! ((value==0) || (value==1)) ) {
|
if (! ((value==0) || (value==1) || (value==2)) ) {
|
||||||
err = AACENC_INVALID_CONFIG;
|
err = AACENC_INVALID_CONFIG;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -157,6 +157,18 @@ static const CHANNEL_ASSIGNMENT_INFO_TAB assignmentInfoTabWav[] =
|
|||||||
{ MODE_7_1_FRONT_CENTER, { 2, 6, 7, 0, 1, 4, 5, 3,-1,-1,-1,-1} }, /* 7.1ch */
|
{ MODE_7_1_FRONT_CENTER, { 2, 6, 7, 0, 1, 4, 5, 3,-1,-1,-1,-1} }, /* 7.1ch */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static const CHANNEL_ASSIGNMENT_INFO_TAB assignmentInfoTabWg4[] =
|
||||||
|
{
|
||||||
|
{ MODE_INVALID, {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1} }, /* invalid */
|
||||||
|
{ MODE_1, { 0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1} }, /* mono */
|
||||||
|
{ MODE_2, { 0, 1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1} }, /* stereo */
|
||||||
|
{ MODE_1_2, { 2, 0, 1,-1,-1,-1,-1,-1,-1,-1,-1,-1} }, /* 3ch */
|
||||||
|
{ MODE_1_2_1, { 3, 0, 1, 2,-1,-1,-1,-1,-1,-1,-1,-1} }, /* 4ch */
|
||||||
|
{ MODE_1_2_2, { 4, 0, 1, 2, 3,-1,-1,-1,-1,-1,-1,-1} }, /* 5ch */
|
||||||
|
{ MODE_1_2_2_1, { 4, 0, 1, 2, 3, 5,-1,-1,-1,-1,-1,-1} }, /* 5.1ch */
|
||||||
|
{ MODE_1_2_2_2_1, { 6, 0, 1, 2, 3, 4, 5, 7,-1,-1,-1,-1} }, /* 7.1ch */
|
||||||
|
};
|
||||||
|
|
||||||
/* Channel mode configuration tab provides,
|
/* Channel mode configuration tab provides,
|
||||||
corresponding number of channels and elements
|
corresponding number of channels and elements
|
||||||
*/
|
*/
|
||||||
@ -182,8 +194,10 @@ const INT* FDKaacEnc_getChannelAssignment(CHANNEL_MODE encMode, CHANNEL_ORDER co
|
|||||||
|
|
||||||
if (co == CH_ORDER_MPEG)
|
if (co == CH_ORDER_MPEG)
|
||||||
pTab = assignmentInfoTabMpeg;
|
pTab = assignmentInfoTabMpeg;
|
||||||
else
|
else if (co == CH_ORDER_WAV)
|
||||||
pTab = assignmentInfoTabWav;
|
pTab = assignmentInfoTabWav;
|
||||||
|
else
|
||||||
|
pTab = assignmentInfoTabWg4;
|
||||||
|
|
||||||
for(i=MAX_MODES-1; i>0; i--) {
|
for(i=MAX_MODES-1; i>0; i--) {
|
||||||
if (encMode== pTab[i].encoderMode) {
|
if (encMode== pTab[i].encoderMode) {
|
||||||
|
Loading…
Reference in New Issue
Block a user