Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in / Register
Toggle navigation
F
ffmpeg
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
submodule
ffmpeg
Commits
588361dd
Commit
588361dd
authored
Feb 20, 2015
by
Michael Niedermayer
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
avcodec/dca: move remaining tables to dcadata
Signed-off-by:
Michael Niedermayer
<
michaelni@gmx.at
>
parent
6c91afe4
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
100 additions
and
92 deletions
+100
-92
dcadata.c
libavcodec/dcadata.c
+91
-0
dcadata.h
libavcodec/dcadata.h
+5
-0
dcadec.c
libavcodec/dcadec.c
+4
-92
No files found.
libavcodec/dcadata.c
View file @
588361dd
...
@@ -22,8 +22,10 @@
...
@@ -22,8 +22,10 @@
#include <stdint.h>
#include <stdint.h>
#include "libavutil/channel_layout.h"
#include "libavutil/mem.h"
#include "libavutil/mem.h"
#include "dca.h"
#include "dcadata.h"
#include "dcadata.h"
/* Generic tables */
/* Generic tables */
...
@@ -7662,6 +7664,95 @@ const float ff_dca_default_coeffs[10][6][2] = {
...
@@ -7662,6 +7664,95 @@ const float ff_dca_default_coeffs[10][6][2] = {
* where Ch(n) represents the subband samples in the (n)th audio channel.
* where Ch(n) represents the subband samples in the (n)th audio channel.
*/
*/
const
uint32_t
ff_dca_map_xxch_to_native
[
28
]
=
{
AV_CH_FRONT_CENTER
,
AV_CH_FRONT_LEFT
,
AV_CH_FRONT_RIGHT
,
AV_CH_SIDE_LEFT
,
AV_CH_SIDE_RIGHT
,
AV_CH_LOW_FREQUENCY
,
AV_CH_BACK_CENTER
,
AV_CH_BACK_LEFT
,
AV_CH_BACK_RIGHT
,
AV_CH_SIDE_LEFT
,
/* side surround left -- dup sur side L */
AV_CH_SIDE_RIGHT
,
/* side surround right -- dup sur side R */
AV_CH_FRONT_LEFT_OF_CENTER
,
AV_CH_FRONT_RIGHT_OF_CENTER
,
AV_CH_TOP_FRONT_LEFT
,
AV_CH_TOP_FRONT_CENTER
,
AV_CH_TOP_FRONT_RIGHT
,
AV_CH_LOW_FREQUENCY
,
/* lfe2 -- duplicate lfe1 position */
AV_CH_FRONT_LEFT_OF_CENTER
,
/* side front left -- dup front cntr L */
AV_CH_FRONT_RIGHT_OF_CENTER
,
/* side front right -- dup front cntr R */
AV_CH_TOP_CENTER
,
/* overhead */
AV_CH_TOP_FRONT_LEFT
,
/* side high left -- dup */
AV_CH_TOP_FRONT_RIGHT
,
/* side high right -- dup */
AV_CH_TOP_BACK_CENTER
,
AV_CH_TOP_BACK_LEFT
,
AV_CH_TOP_BACK_RIGHT
,
AV_CH_BACK_CENTER
,
/* rear low center -- dup */
AV_CH_BACK_LEFT
,
/* rear low left -- dup */
AV_CH_BACK_RIGHT
/* read low right -- dup */
};
/* -1 are reserved or unknown */
const
int
ff_dca_ext_audio_descr_mask
[
8
]
=
{
DCA_EXT_XCH
,
-
1
,
DCA_EXT_X96
,
DCA_EXT_XCH
|
DCA_EXT_X96
,
-
1
,
-
1
,
DCA_EXT_XXCH
,
-
1
,
};
/* Tables for mapping dts channel configurations to libavcodec multichannel api.
* Some compromises have been made for special configurations. Most configurations
* are never used so complete accuracy is not needed.
*
* L = left, R = right, C = center, S = surround, F = front, R = rear, T = total, OV = overhead.
* S -> side, when both rear and back are configured move one of them to the side channel
* OV -> center back
* All 2 channel configurations -> AV_CH_LAYOUT_STEREO
*/
const
uint64_t
ff_dca_core_channel_layout
[
16
]
=
{
AV_CH_FRONT_CENTER
,
///< 1, A
AV_CH_LAYOUT_STEREO
,
///< 2, A + B (dual mono)
AV_CH_LAYOUT_STEREO
,
///< 2, L + R (stereo)
AV_CH_LAYOUT_STEREO
,
///< 2, (L + R) + (L - R) (sum-difference)
AV_CH_LAYOUT_STEREO
,
///< 2, LT + RT (left and right total)
AV_CH_LAYOUT_STEREO
|
AV_CH_FRONT_CENTER
,
///< 3, C + L + R
AV_CH_LAYOUT_STEREO
|
AV_CH_BACK_CENTER
,
///< 3, L + R + S
AV_CH_LAYOUT_STEREO
|
AV_CH_FRONT_CENTER
|
AV_CH_BACK_CENTER
,
///< 4, C + L + R + S
AV_CH_LAYOUT_STEREO
|
AV_CH_SIDE_LEFT
|
AV_CH_SIDE_RIGHT
,
///< 4, L + R + SL + SR
AV_CH_LAYOUT_STEREO
|
AV_CH_FRONT_CENTER
|
AV_CH_SIDE_LEFT
|
AV_CH_SIDE_RIGHT
,
///< 5, C + L + R + SL + SR
AV_CH_LAYOUT_STEREO
|
AV_CH_SIDE_LEFT
|
AV_CH_SIDE_RIGHT
|
AV_CH_FRONT_LEFT_OF_CENTER
|
AV_CH_FRONT_RIGHT_OF_CENTER
,
///< 6, CL + CR + L + R + SL + SR
AV_CH_LAYOUT_STEREO
|
AV_CH_BACK_LEFT
|
AV_CH_BACK_RIGHT
|
AV_CH_FRONT_CENTER
|
AV_CH_BACK_CENTER
,
///< 6, C + L + R + LR + RR + OV
AV_CH_FRONT_CENTER
|
AV_CH_FRONT_RIGHT_OF_CENTER
|
AV_CH_FRONT_LEFT_OF_CENTER
|
AV_CH_BACK_CENTER
|
AV_CH_BACK_LEFT
|
AV_CH_BACK_RIGHT
,
///< 6, CF + CR + LF + RF + LR + RR
AV_CH_FRONT_LEFT_OF_CENTER
|
AV_CH_FRONT_CENTER
|
AV_CH_FRONT_RIGHT_OF_CENTER
|
AV_CH_LAYOUT_STEREO
|
AV_CH_SIDE_LEFT
|
AV_CH_SIDE_RIGHT
,
///< 7, CL + C + CR + L + R + SL + SR
AV_CH_FRONT_LEFT_OF_CENTER
|
AV_CH_FRONT_RIGHT_OF_CENTER
|
AV_CH_LAYOUT_STEREO
|
AV_CH_SIDE_LEFT
|
AV_CH_SIDE_RIGHT
|
AV_CH_BACK_LEFT
|
AV_CH_BACK_RIGHT
,
///< 8, CL + CR + L + R + SL1 + SL2 + SR1 + SR2
AV_CH_FRONT_LEFT_OF_CENTER
|
AV_CH_FRONT_CENTER
|
AV_CH_FRONT_RIGHT_OF_CENTER
|
AV_CH_LAYOUT_STEREO
|
AV_CH_SIDE_LEFT
|
AV_CH_BACK_CENTER
|
AV_CH_SIDE_RIGHT
,
///< 8, CL + C + CR + L + R + SL + S + SR
};
const
int8_t
ff_dca_lfe_index
[
16
]
=
{
const
int8_t
ff_dca_lfe_index
[
16
]
=
{
1
,
2
,
2
,
2
,
2
,
3
,
2
,
3
,
2
,
3
,
2
,
3
,
1
,
3
,
2
,
3
1
,
2
,
2
,
2
,
2
,
3
,
2
,
3
,
2
,
3
,
2
,
3
,
1
,
3
,
2
,
3
};
};
...
...
libavcodec/dcadata.h
View file @
588361dd
...
@@ -52,6 +52,11 @@ extern const uint16_t ff_dca_dmixtable[242];
...
@@ -52,6 +52,11 @@ extern const uint16_t ff_dca_dmixtable[242];
extern
const
float
ff_dca_default_coeffs
[
10
][
6
][
2
];
extern
const
float
ff_dca_default_coeffs
[
10
][
6
][
2
];
extern
const
uint32_t
ff_dca_map_xxch_to_native
[
28
];
extern
const
int
ff_dca_ext_audio_descr_mask
[
8
];
extern
const
uint64_t
ff_dca_core_channel_layout
[
16
];
extern
const
int8_t
ff_dca_lfe_index
[
16
];
extern
const
int8_t
ff_dca_lfe_index
[
16
];
extern
const
int8_t
ff_dca_channel_reorder_lfe
[
16
][
9
];
extern
const
int8_t
ff_dca_channel_reorder_lfe
[
16
][
9
];
...
...
libavcodec/dcadec.c
View file @
588361dd
...
@@ -108,94 +108,6 @@ enum DCAXxchSpeakerMask {
...
@@ -108,94 +108,6 @@ enum DCAXxchSpeakerMask {
#define DCA_NSYNCAUX 0x9A1105A0
#define DCA_NSYNCAUX 0x9A1105A0
static
const
uint32_t
map_xxch_to_native
[
28
]
=
{
AV_CH_FRONT_CENTER
,
AV_CH_FRONT_LEFT
,
AV_CH_FRONT_RIGHT
,
AV_CH_SIDE_LEFT
,
AV_CH_SIDE_RIGHT
,
AV_CH_LOW_FREQUENCY
,
AV_CH_BACK_CENTER
,
AV_CH_BACK_LEFT
,
AV_CH_BACK_RIGHT
,
AV_CH_SIDE_LEFT
,
/* side surround left -- dup sur side L */
AV_CH_SIDE_RIGHT
,
/* side surround right -- dup sur side R */
AV_CH_FRONT_LEFT_OF_CENTER
,
AV_CH_FRONT_RIGHT_OF_CENTER
,
AV_CH_TOP_FRONT_LEFT
,
AV_CH_TOP_FRONT_CENTER
,
AV_CH_TOP_FRONT_RIGHT
,
AV_CH_LOW_FREQUENCY
,
/* lfe2 -- duplicate lfe1 position */
AV_CH_FRONT_LEFT_OF_CENTER
,
/* side front left -- dup front cntr L */
AV_CH_FRONT_RIGHT_OF_CENTER
,
/* side front right -- dup front cntr R */
AV_CH_TOP_CENTER
,
/* overhead */
AV_CH_TOP_FRONT_LEFT
,
/* side high left -- dup */
AV_CH_TOP_FRONT_RIGHT
,
/* side high right -- dup */
AV_CH_TOP_BACK_CENTER
,
AV_CH_TOP_BACK_LEFT
,
AV_CH_TOP_BACK_RIGHT
,
AV_CH_BACK_CENTER
,
/* rear low center -- dup */
AV_CH_BACK_LEFT
,
/* rear low left -- dup */
AV_CH_BACK_RIGHT
/* read low right -- dup */
};
/* -1 are reserved or unknown */
static
const
int
dca_ext_audio_descr_mask
[]
=
{
DCA_EXT_XCH
,
-
1
,
DCA_EXT_X96
,
DCA_EXT_XCH
|
DCA_EXT_X96
,
-
1
,
-
1
,
DCA_EXT_XXCH
,
-
1
,
};
/* Tables for mapping dts channel configurations to libavcodec multichannel api.
* Some compromises have been made for special configurations. Most configurations
* are never used so complete accuracy is not needed.
*
* L = left, R = right, C = center, S = surround, F = front, R = rear, T = total, OV = overhead.
* S -> side, when both rear and back are configured move one of them to the side channel
* OV -> center back
* All 2 channel configurations -> AV_CH_LAYOUT_STEREO
*/
static
const
uint64_t
dca_core_channel_layout
[]
=
{
AV_CH_FRONT_CENTER
,
///< 1, A
AV_CH_LAYOUT_STEREO
,
///< 2, A + B (dual mono)
AV_CH_LAYOUT_STEREO
,
///< 2, L + R (stereo)
AV_CH_LAYOUT_STEREO
,
///< 2, (L + R) + (L - R) (sum-difference)
AV_CH_LAYOUT_STEREO
,
///< 2, LT + RT (left and right total)
AV_CH_LAYOUT_STEREO
|
AV_CH_FRONT_CENTER
,
///< 3, C + L + R
AV_CH_LAYOUT_STEREO
|
AV_CH_BACK_CENTER
,
///< 3, L + R + S
AV_CH_LAYOUT_STEREO
|
AV_CH_FRONT_CENTER
|
AV_CH_BACK_CENTER
,
///< 4, C + L + R + S
AV_CH_LAYOUT_STEREO
|
AV_CH_SIDE_LEFT
|
AV_CH_SIDE_RIGHT
,
///< 4, L + R + SL + SR
AV_CH_LAYOUT_STEREO
|
AV_CH_FRONT_CENTER
|
AV_CH_SIDE_LEFT
|
AV_CH_SIDE_RIGHT
,
///< 5, C + L + R + SL + SR
AV_CH_LAYOUT_STEREO
|
AV_CH_SIDE_LEFT
|
AV_CH_SIDE_RIGHT
|
AV_CH_FRONT_LEFT_OF_CENTER
|
AV_CH_FRONT_RIGHT_OF_CENTER
,
///< 6, CL + CR + L + R + SL + SR
AV_CH_LAYOUT_STEREO
|
AV_CH_BACK_LEFT
|
AV_CH_BACK_RIGHT
|
AV_CH_FRONT_CENTER
|
AV_CH_BACK_CENTER
,
///< 6, C + L + R + LR + RR + OV
AV_CH_FRONT_CENTER
|
AV_CH_FRONT_RIGHT_OF_CENTER
|
AV_CH_FRONT_LEFT_OF_CENTER
|
AV_CH_BACK_CENTER
|
AV_CH_BACK_LEFT
|
AV_CH_BACK_RIGHT
,
///< 6, CF + CR + LF + RF + LR + RR
AV_CH_FRONT_LEFT_OF_CENTER
|
AV_CH_FRONT_CENTER
|
AV_CH_FRONT_RIGHT_OF_CENTER
|
AV_CH_LAYOUT_STEREO
|
AV_CH_SIDE_LEFT
|
AV_CH_SIDE_RIGHT
,
///< 7, CL + C + CR + L + R + SL + SR
AV_CH_FRONT_LEFT_OF_CENTER
|
AV_CH_FRONT_RIGHT_OF_CENTER
|
AV_CH_LAYOUT_STEREO
|
AV_CH_SIDE_LEFT
|
AV_CH_SIDE_RIGHT
|
AV_CH_BACK_LEFT
|
AV_CH_BACK_RIGHT
,
///< 8, CL + CR + L + R + SL1 + SL2 + SR1 + SR2
AV_CH_FRONT_LEFT_OF_CENTER
|
AV_CH_FRONT_CENTER
|
AV_CH_FRONT_RIGHT_OF_CENTER
|
AV_CH_LAYOUT_STEREO
|
AV_CH_SIDE_LEFT
|
AV_CH_BACK_CENTER
|
AV_CH_SIDE_RIGHT
,
///< 8, CL + C + CR + L + R + SL + S + SR
};
/** Bit allocation */
/** Bit allocation */
typedef
struct
BitAlloc
{
typedef
struct
BitAlloc
{
...
@@ -1505,7 +1417,7 @@ static int dca_decode_frame(AVCodecContext *avctx, void *data,
...
@@ -1505,7 +1417,7 @@ static int dca_decode_frame(AVCodecContext *avctx, void *data,
}
}
if
(
s
->
ext_coding
)
if
(
s
->
ext_coding
)
s
->
core_ext_mask
=
dca_ext_audio_descr_mask
[
s
->
ext_descr
];
s
->
core_ext_mask
=
ff_
dca_ext_audio_descr_mask
[
s
->
ext_descr
];
else
else
s
->
core_ext_mask
=
0
;
s
->
core_ext_mask
=
0
;
...
@@ -1620,7 +1532,7 @@ static int dca_decode_frame(AVCodecContext *avctx, void *data,
...
@@ -1620,7 +1532,7 @@ static int dca_decode_frame(AVCodecContext *avctx, void *data,
<
num_core_channels
+
!!
s
->
lfe
+
s
->
xxch_chset_nch
[
0
]))
<
num_core_channels
+
!!
s
->
lfe
+
s
->
xxch_chset_nch
[
0
]))
{
/* xxx should also do MA extensions */
{
/* xxx should also do MA extensions */
if
(
s
->
amode
<
16
)
{
if
(
s
->
amode
<
16
)
{
avctx
->
channel_layout
=
dca_core_channel_layout
[
s
->
amode
];
avctx
->
channel_layout
=
ff_
dca_core_channel_layout
[
s
->
amode
];
if
(
s
->
prim_channels
+
!!
s
->
lfe
>
2
&&
if
(
s
->
prim_channels
+
!!
s
->
lfe
>
2
&&
avctx
->
request_channel_layout
==
AV_CH_LAYOUT_STEREO
)
{
avctx
->
request_channel_layout
==
AV_CH_LAYOUT_STEREO
)
{
...
@@ -1714,7 +1626,7 @@ FF_ENABLE_DEPRECATION_WARNINGS
...
@@ -1714,7 +1626,7 @@ FF_ENABLE_DEPRECATION_WARNINGS
channel_layout
=
0
;
channel_layout
=
0
;
for
(
i
=
0
;
i
<
s
->
xxch_nbits_spk_mask
;
++
i
)
{
for
(
i
=
0
;
i
<
s
->
xxch_nbits_spk_mask
;
++
i
)
{
if
(
channel_mask
&
(
1
<<
i
))
{
if
(
channel_mask
&
(
1
<<
i
))
{
channel_layout
|=
map_xxch_to_native
[
i
];
channel_layout
|=
ff_dca_
map_xxch_to_native
[
i
];
}
}
}
}
...
@@ -1735,7 +1647,7 @@ FF_ENABLE_DEPRECATION_WARNINGS
...
@@ -1735,7 +1647,7 @@ FF_ENABLE_DEPRECATION_WARNINGS
:
s
->
xxch_core_spkmask
;
:
s
->
xxch_core_spkmask
;
for
(
i
=
0
;
i
<
s
->
xxch_nbits_spk_mask
;
i
++
)
{
for
(
i
=
0
;
i
<
s
->
xxch_nbits_spk_mask
;
i
++
)
{
if
(
mask
&
~
(
DCA_XXCH_LFE1
|
DCA_XXCH_LFE2
)
&
(
1
<<
i
))
{
if
(
mask
&
~
(
DCA_XXCH_LFE1
|
DCA_XXCH_LFE2
)
&
(
1
<<
i
))
{
lavc
=
map_xxch_to_native
[
i
];
lavc
=
ff_dca_
map_xxch_to_native
[
i
];
posn
=
av_popcount
(
channel_layout
&
(
lavc
-
1
));
posn
=
av_popcount
(
channel_layout
&
(
lavc
-
1
));
s
->
xxch_order_tab
[
j
++
]
=
posn
;
s
->
xxch_order_tab
[
j
++
]
=
posn
;
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment