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
c229f571
Commit
c229f571
authored
Jan 17, 2014
by
Tim Walker
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
(e)ac3: parse and store the Lt/Rt and LFE mix levels.
parent
1f604f96
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
30 additions
and
9 deletions
+30
-9
ac3.h
libavcodec/ac3.h
+8
-0
ac3dec.c
libavcodec/ac3dec.c
+12
-4
ac3dec.h
libavcodec/ac3dec.h
+5
-0
eac3dec.c
libavcodec/eac3dec.c
+5
-5
No files found.
libavcodec/ac3.h
View file @
c229f571
...
@@ -104,6 +104,14 @@ typedef enum AC3DolbyHeadphoneMode {
...
@@ -104,6 +104,14 @@ typedef enum AC3DolbyHeadphoneMode {
AC3_DHEADPHONMOD_RESERVED
AC3_DHEADPHONMOD_RESERVED
}
AC3DolbyHeadphoneMode
;
}
AC3DolbyHeadphoneMode
;
/** Preferred Stereo Downmix mode */
typedef
enum
AC3PreferredStereoDownmixMode
{
AC3_DMIXMOD_NOTINDICATED
=
0
,
AC3_DMIXMOD_LTRT
,
AC3_DMIXMOD_LORO
,
AC3_DMIXMOD_RESERVED
}
AC3PreferredStereoDownmixMode
;
typedef
struct
AC3BitAllocParameters
{
typedef
struct
AC3BitAllocParameters
{
int
sr_code
;
int
sr_code
;
int
sr_shift
;
int
sr_shift
;
...
...
libavcodec/ac3dec.c
View file @
c229f571
...
@@ -227,16 +227,20 @@ static int ac3_parse_header(AC3DecodeContext *s)
...
@@ -227,16 +227,20 @@ static int ac3_parse_header(AC3DecodeContext *s)
skip_bits
(
gbc
,
2
);
//skip copyright bit and original bitstream bit
skip_bits
(
gbc
,
2
);
//skip copyright bit and original bitstream bit
/* skip the timecodes or parse the Alternate Bit Stream Syntax
/* skip the timecodes or parse the Alternate Bit Stream Syntax */
TODO: read & use the xbsi1 downmix levels */
if
(
s
->
bitstream_id
!=
6
)
{
if
(
s
->
bitstream_id
!=
6
)
{
if
(
get_bits1
(
gbc
))
if
(
get_bits1
(
gbc
))
skip_bits
(
gbc
,
14
);
//skip timecode1
skip_bits
(
gbc
,
14
);
//skip timecode1
if
(
get_bits1
(
gbc
))
if
(
get_bits1
(
gbc
))
skip_bits
(
gbc
,
14
);
//skip timecode2
skip_bits
(
gbc
,
14
);
//skip timecode2
}
else
{
}
else
{
if
(
get_bits1
(
gbc
))
if
(
get_bits1
(
gbc
))
{
skip_bits
(
gbc
,
14
);
//skip xbsi1
s
->
preferred_downmix
=
get_bits
(
gbc
,
2
);
s
->
center_mix_level_ltrt
=
get_bits
(
gbc
,
3
);
s
->
surround_mix_level_ltrt
=
get_bits
(
gbc
,
3
);
s
->
center_mix_level
=
get_bits
(
gbc
,
3
);
s
->
surround_mix_level
=
get_bits
(
gbc
,
3
);
}
if
(
get_bits1
(
gbc
))
{
if
(
get_bits1
(
gbc
))
{
s
->
dolby_surround_ex_mode
=
get_bits
(
gbc
,
2
);
s
->
dolby_surround_ex_mode
=
get_bits
(
gbc
,
2
);
s
->
dolby_headphone_mode
=
get_bits
(
gbc
,
2
);
s
->
dolby_headphone_mode
=
get_bits
(
gbc
,
2
);
...
@@ -280,8 +284,12 @@ static int parse_frame_header(AC3DecodeContext *s)
...
@@ -280,8 +284,12 @@ static int parse_frame_header(AC3DecodeContext *s)
s
->
fbw_channels
=
s
->
channels
-
s
->
lfe_on
;
s
->
fbw_channels
=
s
->
channels
-
s
->
lfe_on
;
s
->
lfe_ch
=
s
->
fbw_channels
+
1
;
s
->
lfe_ch
=
s
->
fbw_channels
+
1
;
s
->
frame_size
=
hdr
.
frame_size
;
s
->
frame_size
=
hdr
.
frame_size
;
s
->
preferred_downmix
=
AC3_DMIXMOD_NOTINDICATED
;
s
->
center_mix_level
=
hdr
.
center_mix_level
;
s
->
center_mix_level
=
hdr
.
center_mix_level
;
s
->
center_mix_level_ltrt
=
4
;
// -3.0dB
s
->
surround_mix_level
=
hdr
.
surround_mix_level
;
s
->
surround_mix_level
=
hdr
.
surround_mix_level
;
s
->
surround_mix_level_ltrt
=
4
;
// -3.0dB
s
->
lfe_mix_level_exists
=
0
;
s
->
num_blocks
=
hdr
.
num_blocks
;
s
->
num_blocks
=
hdr
.
num_blocks
;
s
->
frame_type
=
hdr
.
frame_type
;
s
->
frame_type
=
hdr
.
frame_type
;
s
->
substreamid
=
hdr
.
substreamid
;
s
->
substreamid
=
hdr
.
substreamid
;
...
...
libavcodec/ac3dec.h
View file @
c229f571
...
@@ -84,8 +84,13 @@ typedef struct AC3DecodeContext {
...
@@ -84,8 +84,13 @@ typedef struct AC3DecodeContext {
int
channel_mode
;
///< channel mode (acmod)
int
channel_mode
;
///< channel mode (acmod)
int
lfe_on
;
///< lfe channel in use
int
lfe_on
;
///< lfe channel in use
int
channel_map
;
///< custom channel map
int
channel_map
;
///< custom channel map
int
preferred_downmix
;
///< Preferred 2-channel downmix mode (dmixmod)
int
center_mix_level
;
///< Center mix level index
int
center_mix_level
;
///< Center mix level index
int
center_mix_level_ltrt
;
///< Center mix level index for Lt/Rt (ltrtcmixlev)
int
surround_mix_level
;
///< Surround mix level index
int
surround_mix_level
;
///< Surround mix level index
int
surround_mix_level_ltrt
;
///< Surround mix level index for Lt/Rt (ltrtsurmixlev)
int
lfe_mix_level_exists
;
///< indicates if lfemixlevcod is specified (lfemixlevcode)
int
lfe_mix_level
;
///< LFE mix level index (lfemixlevcod)
int
eac3
;
///< indicates if current frame is E-AC-3
int
eac3
;
///< indicates if current frame is E-AC-3
int
dolby_surround_mode
;
///< dolby surround mode (dsurmod)
int
dolby_surround_mode
;
///< dolby surround mode (dsurmod)
int
dolby_surround_ex_mode
;
///< dolby surround ex mode (dsurexmod)
int
dolby_surround_ex_mode
;
///< dolby surround ex mode (dsurexmod)
...
...
libavcodec/eac3dec.c
View file @
c229f571
...
@@ -345,23 +345,23 @@ int ff_eac3_parse_header(AC3DecodeContext *s)
...
@@ -345,23 +345,23 @@ int ff_eac3_parse_header(AC3DecodeContext *s)
if
(
get_bits1
(
gbc
))
{
if
(
get_bits1
(
gbc
))
{
/* center and surround mix levels */
/* center and surround mix levels */
if
(
s
->
channel_mode
>
AC3_CHMODE_STEREO
)
{
if
(
s
->
channel_mode
>
AC3_CHMODE_STEREO
)
{
s
kip_bits
(
gbc
,
2
);
// skip preferred stereo downmix mode
s
->
preferred_downmix
=
get_bits
(
gbc
,
2
);
if
(
s
->
channel_mode
&
1
)
{
if
(
s
->
channel_mode
&
1
)
{
/* if three front channels exist */
/* if three front channels exist */
s
kip_bits
(
gbc
,
3
);
//skip Lt/Rt center mix level
s
->
center_mix_level_ltrt
=
get_bits
(
gbc
,
3
);
s
->
center_mix_level
=
get_bits
(
gbc
,
3
);
s
->
center_mix_level
=
get_bits
(
gbc
,
3
);
}
}
if
(
s
->
channel_mode
&
4
)
{
if
(
s
->
channel_mode
&
4
)
{
/* if a surround channel exists */
/* if a surround channel exists */
s
kip_bits
(
gbc
,
3
);
//skip Lt/Rt surround mix level
s
->
surround_mix_level_ltrt
=
get_bits
(
gbc
,
3
);
s
->
surround_mix_level
=
get_bits
(
gbc
,
3
);
s
->
surround_mix_level
=
get_bits
(
gbc
,
3
);
}
}
}
}
/* lfe mix level */
/* lfe mix level */
if
(
s
->
lfe_on
&&
get_bits1
(
gbc
))
{
if
(
s
->
lfe_on
&&
(
s
->
lfe_mix_level_exists
=
get_bits1
(
gbc
)
))
{
// TODO: use LFE mix level
// TODO: use LFE mix level
s
kip_bits
(
gbc
,
5
);
// skip LFE mix level code
s
->
lfe_mix_level
=
get_bits
(
gbc
,
5
);
}
}
/* info for mixing with other streams and substreams */
/* info for mixing with other streams and substreams */
...
...
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