Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
F
ffmpeg.wasm-core
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
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Linshizhi
ffmpeg.wasm-core
Commits
c3d63262
Commit
c3d63262
authored
Aug 05, 2011
by
Justin Ruggles
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
ac3enc: allow new coupling coordinates to be sent independently for each
channel.
parent
d55ad59a
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
26 additions
and
38 deletions
+26
-38
ac3enc.c
libavcodec/ac3enc.c
+5
-5
ac3enc.h
libavcodec/ac3enc.h
+1
-1
ac3enc_template.c
libavcodec/ac3enc_template.c
+19
-31
eac3enc.c
libavcodec/eac3enc.c
+1
-1
No files found.
libavcodec/ac3enc.c
View file @
c3d63262
...
...
@@ -864,9 +864,9 @@ static void count_frame_bits(AC3EncodeContext *s)
if
(
block
->
cpl_in_use
)
{
for
(
ch
=
1
;
ch
<=
s
->
fbw_channels
;
ch
++
)
{
if
(
block
->
channel_in_cpl
[
ch
])
{
if
(
!
s
->
eac3
||
block
->
new_cpl_coords
!=
2
)
if
(
!
s
->
eac3
||
block
->
new_cpl_coords
[
ch
]
!=
2
)
frame_bits
++
;
if
(
block
->
new_cpl_coords
)
{
if
(
block
->
new_cpl_coords
[
ch
]
)
{
frame_bits
+=
2
;
frame_bits
+=
(
4
+
4
)
*
s
->
num_cpl_bands
;
}
...
...
@@ -1394,9 +1394,9 @@ static void output_audio_block(AC3EncodeContext *s, int blk)
if
(
block
->
cpl_in_use
)
{
for
(
ch
=
1
;
ch
<=
s
->
fbw_channels
;
ch
++
)
{
if
(
block
->
channel_in_cpl
[
ch
])
{
if
(
!
s
->
eac3
||
block
->
new_cpl_coords
!=
2
)
put_bits
(
&
s
->
pb
,
1
,
block
->
new_cpl_coords
);
if
(
block
->
new_cpl_coords
)
{
if
(
!
s
->
eac3
||
block
->
new_cpl_coords
[
ch
]
!=
2
)
put_bits
(
&
s
->
pb
,
1
,
block
->
new_cpl_coords
[
ch
]
);
if
(
block
->
new_cpl_coords
[
ch
]
)
{
put_bits
(
&
s
->
pb
,
2
,
block
->
cpl_master_exp
[
ch
]);
for
(
bnd
=
0
;
bnd
<
s
->
num_cpl_bands
;
bnd
++
)
{
put_bits
(
&
s
->
pb
,
4
,
block
->
cpl_coord_exp
[
ch
][
bnd
]);
...
...
libavcodec/ac3enc.h
View file @
c3d63262
...
...
@@ -123,7 +123,7 @@ typedef struct AC3Block {
int
cpl_in_use
;
///< coupling in use for this block (cplinu)
uint8_t
channel_in_cpl
[
AC3_MAX_CHANNELS
];
///< channel in coupling (chincpl)
int
num_cpl_channels
;
///< number of channels in coupling
uint8_t
new_cpl_coords
;
///< send new coupling coordinates (cplcoe)
uint8_t
new_cpl_coords
[
AC3_MAX_CHANNELS
];
///< send new coupling coordinates (cplcoe)
uint8_t
cpl_master_exp
[
AC3_MAX_CHANNELS
];
///< coupling coord master exponents (mstrcplco)
int
new_snr_offsets
;
///< send new SNR offsets
int
new_cpl_leak
;
///< send new coupling leak info
...
...
libavcodec/ac3enc_template.c
View file @
c3d63262
...
...
@@ -206,9 +206,10 @@ static void apply_channel_coupling(AC3EncodeContext *s)
for
(
blk
=
0
;
blk
<
s
->
num_blocks
;
blk
++
)
{
AC3Block
*
block
=
&
s
->
blocks
[
blk
];
AC3Block
*
block0
=
blk
?
&
s
->
blocks
[
blk
-
1
]
:
NULL
;
int
new_coords
=
0
;
CoefSumType
coord_diff
[
AC3_MAX_CHANNELS
]
=
{
0
,};
memset
(
block
->
new_cpl_coords
,
0
,
sizeof
(
block
->
new_cpl_coords
));
if
(
block
->
cpl_in_use
)
{
/* calculate coupling coordinates for all blocks and calculate the
average difference between coordinates in successive blocks */
...
...
@@ -233,28 +234,18 @@ static void apply_channel_coupling(AC3EncodeContext *s)
* using coupling has changed from the previous block, or the
* coordinate difference from the last block for any channel is
* greater than a threshold value. */
if
(
blk
==
0
)
{
new_coords
=
1
;
}
else
if
(
!
block0
->
cpl_in_use
)
{
new_coords
=
1
;
if
(
blk
==
0
||
!
block0
->
cpl_in_use
)
{
for
(
ch
=
1
;
ch
<=
s
->
fbw_channels
;
ch
++
)
block
->
new_cpl_coords
[
ch
]
=
1
;
}
else
{
for
(
ch
=
1
;
ch
<=
s
->
fbw_channels
;
ch
++
)
{
if
(
block
->
channel_in_cpl
[
ch
]
&&
!
block0
->
channel_in_cpl
[
ch
])
{
new_coords
=
1
;
break
;
}
}
if
(
!
new_coords
)
{
for
(
ch
=
1
;
ch
<=
s
->
fbw_channels
;
ch
++
)
{
if
(
block
->
channel_in_cpl
[
ch
]
&&
coord_diff
[
ch
]
>
0
.
04
)
{
new_coords
=
1
;
break
;
}
if
((
block
->
channel_in_cpl
[
ch
]
&&
!
block0
->
channel_in_cpl
[
ch
])
||
(
block
->
channel_in_cpl
[
ch
]
&&
coord_diff
[
ch
]
>
0
.
03
))
{
block
->
new_cpl_coords
[
ch
]
=
1
;
}
}
}
}
block
->
new_cpl_coords
=
new_coords
;
}
/* calculate final coupling coordinates, taking into account reusing of
...
...
@@ -262,8 +253,7 @@ static void apply_channel_coupling(AC3EncodeContext *s)
for
(
bnd
=
0
;
bnd
<
s
->
num_cpl_bands
;
bnd
++
)
{
blk
=
0
;
while
(
blk
<
s
->
num_blocks
)
{
int
blk1
;
CoefSumType
energy_cpl
;
int
av_uninit
(
blk1
);
AC3Block
*
block
=
&
s
->
blocks
[
blk
];
if
(
!
block
->
cpl_in_use
)
{
...
...
@@ -271,23 +261,18 @@ static void apply_channel_coupling(AC3EncodeContext *s)
continue
;
}
energy_cpl
=
energy
[
blk
][
CPL_CH
][
bnd
];
blk1
=
blk
+
1
;
while
(
!
s
->
blocks
[
blk1
].
new_cpl_coords
&&
blk1
<
s
->
num_blocks
)
{
if
(
s
->
blocks
[
blk1
].
cpl_in_use
)
energy_cpl
+=
energy
[
blk1
][
CPL_CH
][
bnd
];
blk1
++
;
}
for
(
ch
=
1
;
ch
<=
s
->
fbw_channels
;
ch
++
)
{
Coef
Type
energy_ch
;
Coef
SumType
energy_ch
,
energy_cpl
;
if
(
!
block
->
channel_in_cpl
[
ch
])
continue
;
energy_cpl
=
energy
[
blk
][
CPL_CH
][
bnd
];
energy_ch
=
energy
[
blk
][
ch
][
bnd
];
blk1
=
blk
+
1
;
while
(
!
s
->
blocks
[
blk1
].
new_cpl_coords
&&
blk1
<
s
->
num_blocks
)
{
if
(
s
->
blocks
[
blk1
].
cpl_in_use
)
while
(
!
s
->
blocks
[
blk1
].
new_cpl_coords
[
ch
]
&&
blk1
<
s
->
num_blocks
)
{
if
(
s
->
blocks
[
blk1
].
cpl_in_use
)
{
energy_cpl
+=
energy
[
blk1
][
CPL_CH
][
bnd
];
energy_ch
+=
energy
[
blk1
][
ch
][
bnd
];
}
blk1
++
;
}
cpl_coords
[
blk
][
ch
][
bnd
]
=
calc_cpl_coord
(
energy_ch
,
energy_cpl
);
...
...
@@ -299,7 +284,7 @@ static void apply_channel_coupling(AC3EncodeContext *s)
/* calculate exponents/mantissas for coupling coordinates */
for
(
blk
=
0
;
blk
<
s
->
num_blocks
;
blk
++
)
{
AC3Block
*
block
=
&
s
->
blocks
[
blk
];
if
(
!
block
->
cpl_in_use
||
!
block
->
new_cpl_coords
)
if
(
!
block
->
cpl_in_use
)
continue
;
clip_coefficients
(
&
s
->
dsp
,
cpl_coords
[
blk
][
1
],
s
->
fbw_channels
*
16
);
...
...
@@ -313,6 +298,9 @@ static void apply_channel_coupling(AC3EncodeContext *s)
for
(
ch
=
1
;
ch
<=
s
->
fbw_channels
;
ch
++
)
{
int
bnd
,
min_exp
,
max_exp
,
master_exp
;
if
(
!
block
->
new_cpl_coords
[
ch
])
continue
;
/* determine master exponent */
min_exp
=
max_exp
=
block
->
cpl_coord_exp
[
ch
][
0
];
for
(
bnd
=
1
;
bnd
<
s
->
num_cpl_bands
;
bnd
++
)
{
...
...
libavcodec/eac3enc.c
View file @
c3d63262
...
...
@@ -99,7 +99,7 @@ void ff_eac3_set_cpl_states(AC3EncodeContext *s)
for
(
ch
=
1
;
ch
<=
s
->
fbw_channels
;
ch
++
)
{
if
(
block
->
channel_in_cpl
[
ch
])
{
if
(
first_cpl_coords
[
ch
])
{
block
->
new_cpl_coords
=
2
;
block
->
new_cpl_coords
[
ch
]
=
2
;
first_cpl_coords
[
ch
]
=
0
;
}
}
else
{
...
...
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