avcodec/aacdec_template: keep tabs on layout in sniff_channel_order
This way the layout set at various points can be checked instead of only having the layout at the end.
This commit is contained in:
parent
026fea827d
commit
de1d6aa0a3
@ -198,7 +198,7 @@ struct elem_to_channel {
|
|||||||
|
|
||||||
static int assign_pair(struct elem_to_channel e2c_vec[MAX_ELEM_ID],
|
static int assign_pair(struct elem_to_channel e2c_vec[MAX_ELEM_ID],
|
||||||
uint8_t (*layout_map)[3], int offset, uint64_t left,
|
uint8_t (*layout_map)[3], int offset, uint64_t left,
|
||||||
uint64_t right, int pos)
|
uint64_t right, int pos, uint64_t *layout)
|
||||||
{
|
{
|
||||||
if (layout_map[offset][0] == TYPE_CPE) {
|
if (layout_map[offset][0] == TYPE_CPE) {
|
||||||
e2c_vec[offset] = (struct elem_to_channel) {
|
e2c_vec[offset] = (struct elem_to_channel) {
|
||||||
@ -207,6 +207,9 @@ static int assign_pair(struct elem_to_channel e2c_vec[MAX_ELEM_ID],
|
|||||||
.elem_id = layout_map[offset][1],
|
.elem_id = layout_map[offset][1],
|
||||||
.aac_position = pos
|
.aac_position = pos
|
||||||
};
|
};
|
||||||
|
if (e2c_vec[offset].av_position != UINT64_MAX)
|
||||||
|
*layout |= e2c_vec[offset].av_position;
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
} else {
|
} else {
|
||||||
e2c_vec[offset] = (struct elem_to_channel) {
|
e2c_vec[offset] = (struct elem_to_channel) {
|
||||||
@ -221,6 +224,12 @@ static int assign_pair(struct elem_to_channel e2c_vec[MAX_ELEM_ID],
|
|||||||
.elem_id = layout_map[offset + 1][1],
|
.elem_id = layout_map[offset + 1][1],
|
||||||
.aac_position = pos
|
.aac_position = pos
|
||||||
};
|
};
|
||||||
|
if (left != UINT64_MAX)
|
||||||
|
*layout |= left;
|
||||||
|
|
||||||
|
if (right != UINT64_MAX)
|
||||||
|
*layout |= right;
|
||||||
|
|
||||||
return 2;
|
return 2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -262,7 +271,7 @@ static uint64_t sniff_channel_order(uint8_t (*layout_map)[3], int tags)
|
|||||||
int i, n, total_non_cc_elements;
|
int i, n, total_non_cc_elements;
|
||||||
struct elem_to_channel e2c_vec[4 * MAX_ELEM_ID] = { { 0 } };
|
struct elem_to_channel e2c_vec[4 * MAX_ELEM_ID] = { { 0 } };
|
||||||
int num_front_channels, num_side_channels, num_back_channels;
|
int num_front_channels, num_side_channels, num_back_channels;
|
||||||
uint64_t layout;
|
uint64_t layout = 0;
|
||||||
|
|
||||||
if (FF_ARRAY_ELEMS(e2c_vec) < tags)
|
if (FF_ARRAY_ELEMS(e2c_vec) < tags)
|
||||||
return 0;
|
return 0;
|
||||||
@ -294,6 +303,7 @@ static uint64_t sniff_channel_order(uint8_t (*layout_map)[3], int tags)
|
|||||||
.elem_id = layout_map[i][1],
|
.elem_id = layout_map[i][1],
|
||||||
.aac_position = AAC_CHANNEL_FRONT
|
.aac_position = AAC_CHANNEL_FRONT
|
||||||
};
|
};
|
||||||
|
layout |= e2c_vec[i].av_position;
|
||||||
i++;
|
i++;
|
||||||
num_front_channels--;
|
num_front_channels--;
|
||||||
}
|
}
|
||||||
@ -301,21 +311,21 @@ static uint64_t sniff_channel_order(uint8_t (*layout_map)[3], int tags)
|
|||||||
i += assign_pair(e2c_vec, layout_map, i,
|
i += assign_pair(e2c_vec, layout_map, i,
|
||||||
AV_CH_FRONT_LEFT_OF_CENTER,
|
AV_CH_FRONT_LEFT_OF_CENTER,
|
||||||
AV_CH_FRONT_RIGHT_OF_CENTER,
|
AV_CH_FRONT_RIGHT_OF_CENTER,
|
||||||
AAC_CHANNEL_FRONT);
|
AAC_CHANNEL_FRONT, &layout);
|
||||||
num_front_channels -= 2;
|
num_front_channels -= 2;
|
||||||
}
|
}
|
||||||
if (num_front_channels >= 2) {
|
if (num_front_channels >= 2) {
|
||||||
i += assign_pair(e2c_vec, layout_map, i,
|
i += assign_pair(e2c_vec, layout_map, i,
|
||||||
AV_CH_FRONT_LEFT,
|
AV_CH_FRONT_LEFT,
|
||||||
AV_CH_FRONT_RIGHT,
|
AV_CH_FRONT_RIGHT,
|
||||||
AAC_CHANNEL_FRONT);
|
AAC_CHANNEL_FRONT, &layout);
|
||||||
num_front_channels -= 2;
|
num_front_channels -= 2;
|
||||||
}
|
}
|
||||||
while (num_front_channels >= 2) {
|
while (num_front_channels >= 2) {
|
||||||
i += assign_pair(e2c_vec, layout_map, i,
|
i += assign_pair(e2c_vec, layout_map, i,
|
||||||
UINT64_MAX,
|
UINT64_MAX,
|
||||||
UINT64_MAX,
|
UINT64_MAX,
|
||||||
AAC_CHANNEL_FRONT);
|
AAC_CHANNEL_FRONT, &layout);
|
||||||
num_front_channels -= 2;
|
num_front_channels -= 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -323,14 +333,14 @@ static uint64_t sniff_channel_order(uint8_t (*layout_map)[3], int tags)
|
|||||||
i += assign_pair(e2c_vec, layout_map, i,
|
i += assign_pair(e2c_vec, layout_map, i,
|
||||||
AV_CH_SIDE_LEFT,
|
AV_CH_SIDE_LEFT,
|
||||||
AV_CH_SIDE_RIGHT,
|
AV_CH_SIDE_RIGHT,
|
||||||
AAC_CHANNEL_FRONT);
|
AAC_CHANNEL_FRONT, &layout);
|
||||||
num_side_channels -= 2;
|
num_side_channels -= 2;
|
||||||
}
|
}
|
||||||
while (num_side_channels >= 2) {
|
while (num_side_channels >= 2) {
|
||||||
i += assign_pair(e2c_vec, layout_map, i,
|
i += assign_pair(e2c_vec, layout_map, i,
|
||||||
UINT64_MAX,
|
UINT64_MAX,
|
||||||
UINT64_MAX,
|
UINT64_MAX,
|
||||||
AAC_CHANNEL_SIDE);
|
AAC_CHANNEL_SIDE, &layout);
|
||||||
num_side_channels -= 2;
|
num_side_channels -= 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -338,14 +348,14 @@ static uint64_t sniff_channel_order(uint8_t (*layout_map)[3], int tags)
|
|||||||
i += assign_pair(e2c_vec, layout_map, i,
|
i += assign_pair(e2c_vec, layout_map, i,
|
||||||
UINT64_MAX,
|
UINT64_MAX,
|
||||||
UINT64_MAX,
|
UINT64_MAX,
|
||||||
AAC_CHANNEL_BACK);
|
AAC_CHANNEL_BACK, &layout);
|
||||||
num_back_channels -= 2;
|
num_back_channels -= 2;
|
||||||
}
|
}
|
||||||
if (num_back_channels >= 2) {
|
if (num_back_channels >= 2) {
|
||||||
i += assign_pair(e2c_vec, layout_map, i,
|
i += assign_pair(e2c_vec, layout_map, i,
|
||||||
AV_CH_BACK_LEFT,
|
AV_CH_BACK_LEFT,
|
||||||
AV_CH_BACK_RIGHT,
|
AV_CH_BACK_RIGHT,
|
||||||
AAC_CHANNEL_BACK);
|
AAC_CHANNEL_BACK, &layout);
|
||||||
num_back_channels -= 2;
|
num_back_channels -= 2;
|
||||||
}
|
}
|
||||||
if (num_back_channels) {
|
if (num_back_channels) {
|
||||||
@ -355,6 +365,7 @@ static uint64_t sniff_channel_order(uint8_t (*layout_map)[3], int tags)
|
|||||||
.elem_id = layout_map[i][1],
|
.elem_id = layout_map[i][1],
|
||||||
.aac_position = AAC_CHANNEL_BACK
|
.aac_position = AAC_CHANNEL_BACK
|
||||||
};
|
};
|
||||||
|
layout |= e2c_vec[i].av_position;
|
||||||
i++;
|
i++;
|
||||||
num_back_channels--;
|
num_back_channels--;
|
||||||
}
|
}
|
||||||
@ -366,6 +377,7 @@ static uint64_t sniff_channel_order(uint8_t (*layout_map)[3], int tags)
|
|||||||
.elem_id = layout_map[i][1],
|
.elem_id = layout_map[i][1],
|
||||||
.aac_position = AAC_CHANNEL_LFE
|
.aac_position = AAC_CHANNEL_LFE
|
||||||
};
|
};
|
||||||
|
layout |= e2c_vec[i].av_position;
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
if (i < tags && layout_map[i][2] == AAC_CHANNEL_LFE) {
|
if (i < tags && layout_map[i][2] == AAC_CHANNEL_LFE) {
|
||||||
@ -375,6 +387,7 @@ static uint64_t sniff_channel_order(uint8_t (*layout_map)[3], int tags)
|
|||||||
.elem_id = layout_map[i][1],
|
.elem_id = layout_map[i][1],
|
||||||
.aac_position = AAC_CHANNEL_LFE
|
.aac_position = AAC_CHANNEL_LFE
|
||||||
};
|
};
|
||||||
|
layout |= e2c_vec[i].av_position;
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
while (i < tags && layout_map[i][2] == AAC_CHANNEL_LFE) {
|
while (i < tags && layout_map[i][2] == AAC_CHANNEL_LFE) {
|
||||||
@ -394,41 +407,45 @@ static uint64_t sniff_channel_order(uint8_t (*layout_map)[3], int tags)
|
|||||||
.syn_ele = layout_map[i][0],
|
.syn_ele = layout_map[i][0],
|
||||||
.elem_id = layout_map[i][1],
|
.elem_id = layout_map[i][1],
|
||||||
.aac_position = layout_map[i][2]
|
.aac_position = layout_map[i][2]
|
||||||
}; i++;
|
}; layout |= e2c_vec[i].av_position; i++;
|
||||||
i += assign_pair(e2c_vec, layout_map, i,
|
i += assign_pair(e2c_vec, layout_map, i,
|
||||||
AV_CH_TOP_FRONT_LEFT,
|
AV_CH_TOP_FRONT_LEFT,
|
||||||
AV_CH_TOP_FRONT_RIGHT,
|
AV_CH_TOP_FRONT_RIGHT,
|
||||||
AAC_CHANNEL_FRONT);
|
AAC_CHANNEL_FRONT,
|
||||||
|
&layout);
|
||||||
i += assign_pair(e2c_vec, layout_map, i,
|
i += assign_pair(e2c_vec, layout_map, i,
|
||||||
AV_CH_TOP_SIDE_LEFT,
|
AV_CH_TOP_SIDE_LEFT,
|
||||||
AV_CH_TOP_SIDE_RIGHT,
|
AV_CH_TOP_SIDE_RIGHT,
|
||||||
AAC_CHANNEL_SIDE);
|
AAC_CHANNEL_SIDE,
|
||||||
|
&layout);
|
||||||
e2c_vec[i] = (struct elem_to_channel) {
|
e2c_vec[i] = (struct elem_to_channel) {
|
||||||
.av_position = AV_CH_TOP_CENTER,
|
.av_position = AV_CH_TOP_CENTER,
|
||||||
.syn_ele = layout_map[i][0],
|
.syn_ele = layout_map[i][0],
|
||||||
.elem_id = layout_map[i][1],
|
.elem_id = layout_map[i][1],
|
||||||
.aac_position = layout_map[i][2]
|
.aac_position = layout_map[i][2]
|
||||||
}; i++;
|
}; layout |= e2c_vec[i].av_position; i++;
|
||||||
i += assign_pair(e2c_vec, layout_map, i,
|
i += assign_pair(e2c_vec, layout_map, i,
|
||||||
AV_CH_TOP_BACK_LEFT,
|
AV_CH_TOP_BACK_LEFT,
|
||||||
AV_CH_TOP_BACK_RIGHT,
|
AV_CH_TOP_BACK_RIGHT,
|
||||||
AAC_CHANNEL_BACK);
|
AAC_CHANNEL_BACK,
|
||||||
|
&layout);
|
||||||
e2c_vec[i] = (struct elem_to_channel) {
|
e2c_vec[i] = (struct elem_to_channel) {
|
||||||
.av_position = AV_CH_TOP_BACK_CENTER,
|
.av_position = AV_CH_TOP_BACK_CENTER,
|
||||||
.syn_ele = layout_map[i][0],
|
.syn_ele = layout_map[i][0],
|
||||||
.elem_id = layout_map[i][1],
|
.elem_id = layout_map[i][1],
|
||||||
.aac_position = layout_map[i][2]
|
.aac_position = layout_map[i][2]
|
||||||
}; i++;
|
}; layout |= e2c_vec[i].av_position; i++;
|
||||||
e2c_vec[i] = (struct elem_to_channel) {
|
e2c_vec[i] = (struct elem_to_channel) {
|
||||||
.av_position = AV_CH_BOTTOM_FRONT_CENTER,
|
.av_position = AV_CH_BOTTOM_FRONT_CENTER,
|
||||||
.syn_ele = layout_map[i][0],
|
.syn_ele = layout_map[i][0],
|
||||||
.elem_id = layout_map[i][1],
|
.elem_id = layout_map[i][1],
|
||||||
.aac_position = layout_map[i][2]
|
.aac_position = layout_map[i][2]
|
||||||
}; i++;
|
}; layout |= e2c_vec[i].av_position; i++;
|
||||||
i += assign_pair(e2c_vec, layout_map, i,
|
i += assign_pair(e2c_vec, layout_map, i,
|
||||||
AV_CH_BOTTOM_FRONT_LEFT,
|
AV_CH_BOTTOM_FRONT_LEFT,
|
||||||
AV_CH_BOTTOM_FRONT_RIGHT,
|
AV_CH_BOTTOM_FRONT_RIGHT,
|
||||||
AAC_CHANNEL_FRONT);
|
AAC_CHANNEL_FRONT,
|
||||||
|
&layout);
|
||||||
}
|
}
|
||||||
|
|
||||||
total_non_cc_elements = n = i;
|
total_non_cc_elements = n = i;
|
||||||
@ -459,14 +476,10 @@ static uint64_t sniff_channel_order(uint8_t (*layout_map)[3], int tags)
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
layout = 0;
|
|
||||||
for (i = 0; i < total_non_cc_elements; i++) {
|
for (i = 0; i < total_non_cc_elements; i++) {
|
||||||
layout_map[i][0] = e2c_vec[i].syn_ele;
|
layout_map[i][0] = e2c_vec[i].syn_ele;
|
||||||
layout_map[i][1] = e2c_vec[i].elem_id;
|
layout_map[i][1] = e2c_vec[i].elem_id;
|
||||||
layout_map[i][2] = e2c_vec[i].aac_position;
|
layout_map[i][2] = e2c_vec[i].aac_position;
|
||||||
if (e2c_vec[i].av_position != UINT64_MAX) {
|
|
||||||
layout |= e2c_vec[i].av_position;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return layout;
|
return layout;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user