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
d0a3e89d
Commit
d0a3e89d
authored
Sep 18, 2015
by
Alexandra Khirnova
Committed by
Luca Barbato
Oct 01, 2015
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
dcadec: make a number of samples per subband per subsubframe a named constant
Signed-off-by:
Luca Barbato
<
lu_zero@gentoo.org
>
parent
8ae1d87a
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
21 additions
and
19 deletions
+21
-19
dcadec.c
libavcodec/dcadec.c
+21
-19
No files found.
libavcodec/dcadec.c
View file @
d0a3e89d
...
...
@@ -139,6 +139,8 @@ static const uint64_t dca_core_channel_layout[] = {
#define DCA_NSYNCAUX 0x9A1105A0
#define SAMPLES_PER_SUBBAND 8 // number of samples per subband per subsubframe
/** Bit allocation */
typedef
struct
BitAlloc
{
int
offset
;
///< code values offset
...
...
@@ -536,7 +538,7 @@ static int dca_subframe_header(DCAContext *s, int base_channel, int block_index)
}
static
void
qmf_32_subbands
(
DCAContext
*
s
,
int
chans
,
float
samples_in
[
32
][
8
],
float
*
samples_out
,
float
samples_in
[
32
][
SAMPLES_PER_SUBBAND
],
float
*
samples_out
,
float
scale
)
{
const
float
*
prCoeff
;
...
...
@@ -584,7 +586,7 @@ static QMF64_table *qmf64_precompute(void)
/* FIXME: Totally unoptimized. Based on the reference code and
* http://multimedia.cx/mirror/dca-transform.pdf, with guessed tweaks
* for doubling the size. */
static
void
qmf_64_subbands
(
DCAContext
*
s
,
int
chans
,
float
samples_in
[
64
][
8
],
static
void
qmf_64_subbands
(
DCAContext
*
s
,
int
chans
,
float
samples_in
[
64
][
SAMPLES_PER_SUBBAND
],
float
*
samples_out
,
float
scale
)
{
float
raXin
[
64
];
...
...
@@ -595,7 +597,7 @@ static void qmf_64_subbands(DCAContext *s, int chans, float samples_in[64][8],
for
(
i
=
s
->
subband_activity
[
chans
];
i
<
64
;
i
++
)
raXin
[
i
]
=
0
.
0
;
for
(
subindex
=
0
;
subindex
<
8
;
subindex
++
)
{
for
(
subindex
=
0
;
subindex
<
SAMPLES_PER_SUBBAND
;
subindex
++
)
{
for
(
i
=
0
;
i
<
s
->
subband_activity
[
chans
];
i
++
)
raXin
[
i
]
=
samples_in
[
i
][
subindex
];
...
...
@@ -786,8 +788,8 @@ static int dca_subsubframe(DCAContext *s, int base_channel, int block_index)
const
float
*
quant_step_table
;
/* FIXME */
float
(
*
subband_samples
)[
DCA_SUBBANDS
][
8
]
=
s
->
subband_samples
[
block_index
];
LOCAL_ALIGNED_16
(
int32_t
,
block
,
[
8
*
DCA_SUBBANDS
]);
float
(
*
subband_samples
)[
DCA_SUBBANDS
][
SAMPLES_PER_SUBBAND
]
=
s
->
subband_samples
[
block_index
];
LOCAL_ALIGNED_16
(
int32_t
,
block
,
[
SAMPLES_PER_SUBBAND
*
DCA_SUBBANDS
]);
/*
* Audio data
...
...
@@ -825,7 +827,7 @@ static int dca_subsubframe(DCAContext *s, int base_channel, int block_index)
*/
if
(
!
abits
)
{
rscale
[
l
]
=
0
;
memset
(
block
+
8
*
l
,
0
,
8
*
sizeof
(
block
[
0
]));
memset
(
block
+
SAMPLES_PER_SUBBAND
*
l
,
0
,
SAMPLES_PER_SUBBAND
*
sizeof
(
block
[
0
]));
}
else
{
/* Deal with transients */
int
sfi
=
s
->
transition_mode
[
k
][
l
]
&&
subsubframe
>=
s
->
transition_mode
[
k
][
l
];
...
...
@@ -843,7 +845,7 @@ static int dca_subsubframe(DCAContext *s, int base_channel, int block_index)
block_code1
=
get_bits
(
&
s
->
gb
,
size
);
block_code2
=
get_bits
(
&
s
->
gb
,
size
);
err
=
decode_blockcodes
(
block_code1
,
block_code2
,
levels
,
block
+
8
*
l
);
levels
,
block
+
SAMPLES_PER_SUBBAND
*
l
);
if
(
err
)
{
av_log
(
s
->
avctx
,
AV_LOG_ERROR
,
"ERROR: block code look-up failed
\n
"
);
...
...
@@ -851,20 +853,20 @@ static int dca_subsubframe(DCAContext *s, int base_channel, int block_index)
}
}
else
{
/* no coding */
for
(
m
=
0
;
m
<
8
;
m
++
)
block
[
8
*
l
+
m
]
=
get_sbits
(
&
s
->
gb
,
abits
-
3
);
for
(
m
=
0
;
m
<
SAMPLES_PER_SUBBAND
;
m
++
)
block
[
SAMPLES_PER_SUBBAND
*
l
+
m
]
=
get_sbits
(
&
s
->
gb
,
abits
-
3
);
}
}
else
{
/* Huffman coded */
for
(
m
=
0
;
m
<
8
;
m
++
)
block
[
8
*
l
+
m
]
=
get_bitalloc
(
&
s
->
gb
,
for
(
m
=
0
;
m
<
SAMPLES_PER_SUBBAND
;
m
++
)
block
[
SAMPLES_PER_SUBBAND
*
l
+
m
]
=
get_bitalloc
(
&
s
->
gb
,
&
dca_smpl_bitalloc
[
abits
],
sel
);
}
}
}
s
->
fmt_conv
.
int32_to_float_fmul_array8
(
&
s
->
fmt_conv
,
subband_samples
[
k
][
0
],
block
,
rscale
,
8
*
s
->
vq_start_subband
[
k
]);
block
,
rscale
,
SAMPLES_PER_SUBBAND
*
s
->
vq_start_subband
[
k
]);
for
(
l
=
0
;
l
<
s
->
vq_start_subband
[
k
];
l
++
)
{
int
m
;
...
...
@@ -883,7 +885,7 @@ static int dca_subsubframe(DCAContext *s, int base_channel, int block_index)
ff_dca_adpcm_vb
[
s
->
prediction_vq
[
k
][
l
]][
3
]
*
s
->
subband_samples_hist
[
k
][
l
][
0
])
*
(
1
.
0
f
/
8192
);
for
(
m
=
1
;
m
<
8
;
m
++
)
{
for
(
m
=
1
;
m
<
SAMPLES_PER_SUBBAND
;
m
++
)
{
float
sum
=
ff_dca_adpcm_vb
[
s
->
prediction_vq
[
k
][
l
]][
0
]
*
subband_samples
[
k
][
l
][
m
-
1
];
for
(
n
=
2
;
n
<=
4
;
n
++
)
...
...
@@ -908,7 +910,7 @@ static int dca_subsubframe(DCAContext *s, int base_channel, int block_index)
s
->
debug_flag
|=
0x01
;
}
s
->
dcadsp
.
decode_hf
(
subband_samples
[
k
],
s
->
high_freq_vq
[
k
],
ff_dca_high_freq_vq
,
subsubframe
*
8
,
ff_dca_high_freq_vq
,
subsubframe
*
SAMPLES_PER_SUBBAND
,
s
->
scale_factor
[
k
],
s
->
vq_start_subband
[
k
],
s
->
subband_activity
[
k
]);
}
...
...
@@ -932,7 +934,7 @@ static int dca_subsubframe(DCAContext *s, int base_channel, int block_index)
static
int
dca_filter_channels
(
DCAContext
*
s
,
int
block_index
,
int
upsample
)
{
float
(
*
subband_samples
)[
DCA_SUBBANDS
][
8
]
=
s
->
subband_samples
[
block_index
];
float
(
*
subband_samples
)[
DCA_SUBBANDS
][
SAMPLES_PER_SUBBAND
]
=
s
->
subband_samples
[
block_index
];
int
k
;
if
(
upsample
)
{
...
...
@@ -1377,7 +1379,7 @@ static int dca_decode_frame(AVCodecContext *avctx, void *data,
s
->
profile
=
FF_PROFILE_DTS
;
for
(
i
=
0
;
i
<
(
s
->
sample_blocks
/
8
);
i
++
)
{
for
(
i
=
0
;
i
<
(
s
->
sample_blocks
/
SAMPLES_PER_SUBBAND
);
i
++
)
{
if
((
ret
=
dca_decode_block
(
s
,
0
,
i
)))
{
av_log
(
avctx
,
AV_LOG_ERROR
,
"error decoding block
\n
"
);
return
ret
;
...
...
@@ -1404,7 +1406,7 @@ static int dca_decode_frame(AVCodecContext *avctx, void *data,
avctx
->
channels
=
channels
;
/* get output buffer */
frame
->
nb_samples
=
256
*
(
s
->
sample_blocks
/
8
);
frame
->
nb_samples
=
256
*
(
s
->
sample_blocks
/
SAMPLES_PER_SUBBAND
);
if
(
s
->
exss_ext_mask
&
DCA_EXT_EXSS_XLL
)
{
int
xll_nb_samples
=
s
->
xll_segments
*
s
->
xll_smpl_in_seg
;
/* Check for invalid/unsupported conditions first */
...
...
@@ -1470,7 +1472,7 @@ static int dca_decode_frame(AVCodecContext *avctx, void *data,
}
/* filter to get final output */
for
(
i
=
0
;
i
<
(
s
->
sample_blocks
/
8
);
i
++
)
{
for
(
i
=
0
;
i
<
(
s
->
sample_blocks
/
SAMPLES_PER_SUBBAND
);
i
++
)
{
int
ch
;
unsigned
block
=
upsample
?
512
:
256
;
for
(
ch
=
0
;
ch
<
channels
;
ch
++
)
...
...
@@ -1492,7 +1494,7 @@ static int dca_decode_frame(AVCodecContext *avctx, void *data,
}
/* update lfe history */
lfe_samples
=
2
*
s
->
lfe
*
(
s
->
sample_blocks
/
8
);
lfe_samples
=
2
*
s
->
lfe
*
(
s
->
sample_blocks
/
SAMPLES_PER_SUBBAND
);
for
(
i
=
0
;
i
<
2
*
s
->
lfe
*
4
;
i
++
)
s
->
lfe_data
[
i
]
=
s
->
lfe_data
[
i
+
lfe_samples
];
...
...
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