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
7840c404
Commit
7840c404
authored
Dec 11, 2013
by
Tim Walker
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
(e)ac3dec: set AV_FRAME_DATA_MATRIXENCODING side data.
parent
13345fc1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
30 additions
and
0 deletions
+30
-0
ac3dec.c
libavcodec/ac3dec.c
+30
-0
No files found.
libavcodec/ac3dec.c
View file @
7840c404
...
...
@@ -1296,6 +1296,7 @@ static int ac3_decode_frame(AVCodecContext * avctx, void *data,
int
blk
,
ch
,
err
,
ret
;
const
uint8_t
*
channel_map
;
const
float
*
output
[
AC3_MAX_CHANNELS
];
enum
AVMatrixEncoding
matrix_encoding
;
/* copy input buffer to decoder context to avoid reading past the end
of the buffer, which can be caused by a damaged input stream. */
...
...
@@ -1437,6 +1438,35 @@ static int ac3_decode_frame(AVCodecContext * avctx, void *data,
for
(
ch
=
0
;
ch
<
s
->
out_channels
;
ch
++
)
memcpy
(
s
->
output
[
ch
],
output
[
ch
],
sizeof
(
**
output
)
*
AC3_BLOCK_SIZE
);
/*
* AVMatrixEncoding
*
* Check whether the input layout is compatible, and make sure we're not
* downmixing (else the matrix encoding is no longer applicable).
*/
matrix_encoding
=
AV_MATRIX_ENCODING_NONE
;
if
(
s
->
channel_mode
==
AC3_CHMODE_STEREO
&&
s
->
channel_mode
==
(
s
->
output_mode
&
~
AC3_OUTPUT_LFEON
))
{
if
(
s
->
dolby_surround_mode
==
AC3_DSURMOD_ON
)
matrix_encoding
=
AV_MATRIX_ENCODING_DOLBY
;
else
if
(
s
->
dolby_headphone_mode
==
AC3_DHEADPHONMOD_ON
)
matrix_encoding
=
AV_MATRIX_ENCODING_DOLBYHEADPHONE
;
}
else
if
(
s
->
channel_mode
>=
AC3_CHMODE_2F2R
&&
s
->
channel_mode
==
(
s
->
output_mode
&
~
AC3_OUTPUT_LFEON
))
{
switch
(
s
->
dolby_surround_ex_mode
)
{
case
AC3_DSUREXMOD_ON
:
// EX or PLIIx
matrix_encoding
=
AV_MATRIX_ENCODING_DOLBYEX
;
break
;
case
AC3_DSUREXMOD_PLIIZ
:
matrix_encoding
=
AV_MATRIX_ENCODING_DPLIIZ
;
break
;
default:
// not indicated or off
break
;
}
}
if
((
ret
=
ff_side_data_update_matrix_encoding
(
frame
,
matrix_encoding
))
<
0
)
return
ret
;
*
got_frame_ptr
=
1
;
return
FFMIN
(
buf_size
,
s
->
frame_size
);
...
...
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