FFmpeg
Loading...
Searching...
No Matches
libavcodec
mlp_parse.h
Go to the documentation of this file.
1
/*
2
* Copyright (c) 2007 Ian Caulfield
3
*
4
* This file is part of FFmpeg.
5
*
6
* FFmpeg is free software; you can redistribute it and/or
7
* modify it under the terms of the GNU Lesser General Public
8
* License as published by the Free Software Foundation; either
9
* version 2.1 of the License, or (at your option) any later version.
10
*
11
* FFmpeg is distributed in the hope that it will be useful,
12
* but WITHOUT ANY WARRANTY; without even the implied warranty of
13
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14
* Lesser General Public License for more details.
15
*
16
* You should have received a copy of the GNU Lesser General Public
17
* License along with FFmpeg; if not, write to the Free Software
18
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19
*/
20
21
#ifndef AVCODEC_MLP_PARSE_H
22
#define AVCODEC_MLP_PARSE_H
23
24
#include <stdint.h>
25
26
#include "
libavutil/channel_layout.h
"
27
28
#include "
get_bits.h
"
29
30
typedef
struct
MLPHeaderInfo
31
{
32
int
stream_type
;
///< 0xBB for MLP, 0xBA for TrueHD
33
int
header_size
;
///< Size of the major sync header, in bytes
34
35
int
group1_bits
;
///< The bit depth of the first substream
36
int
group2_bits
;
///< Bit depth of the second substream (MLP only)
37
38
int
group1_samplerate
;
///< Sample rate of first substream
39
int
group2_samplerate
;
///< Sample rate of second substream (MLP only)
40
41
int
channel_arrangement
;
42
43
int
channel_modifier_thd_stream0
;
///< Channel modifier for substream 0 of TrueHD streams ("2-channel presentation")
44
int
channel_modifier_thd_stream1
;
///< Channel modifier for substream 1 of TrueHD streams ("6-channel presentation")
45
int
channel_modifier_thd_stream2
;
///< Channel modifier for substream 2 of TrueHD streams ("8-channel presentation")
46
47
int
channels_mlp
;
///< Channel count for MLP streams
48
int
channels_thd_stream1
;
///< Channel count for substream 1 of TrueHD streams ("6-channel presentation")
49
int
channels_thd_stream2
;
///< Channel count for substream 2 of TrueHD streams ("8-channel presentation")
50
uint64_t
channel_layout_mlp
;
///< Channel layout for MLP streams
51
uint64_t
channel_layout_thd_stream1
;
///< Channel layout for substream 1 of TrueHD streams ("6-channel presentation")
52
uint64_t
channel_layout_thd_stream2
;
///< Channel layout for substream 2 of TrueHD streams ("8-channel presentation")
53
54
int
access_unit_size
;
///< Number of samples per coded frame
55
int
access_unit_size_pow2
;
///< Next power of two above number of samples per frame
56
57
int
is_vbr
;
///< Stream is VBR instead of CBR
58
int
peak_bitrate
;
///< Peak bitrate for VBR, actual bitrate (==peak) for CBR
59
60
int
num_substreams
;
///< Number of substreams within stream
61
62
int
extended_substream_info
;
///< Which substream of substreams carry 16-channel presentation
63
int
substream_info
;
///< Which substream of substreams carry 2/6/8-channel presentation
64
}
MLPHeaderInfo
;
65
66
static
const
uint8_t
thd_chancount
[13] = {
67
// LR C LFE LRs LRvh LRc LRrs Cs Ts LRsd LRw Cvh LFE2
68
2, 1, 1, 2, 2, 2, 2, 1, 1, 2, 2, 1, 1
69
};
70
71
static
const
uint64_t
thd_layout
[13] = {
72
AV_CH_FRONT_LEFT
|
AV_CH_FRONT_RIGHT
,
// LR
73
AV_CH_FRONT_CENTER
,
// C
74
AV_CH_LOW_FREQUENCY
,
// LFE
75
AV_CH_SIDE_LEFT
|
AV_CH_SIDE_RIGHT
,
// LRs
76
AV_CH_TOP_FRONT_LEFT
|
AV_CH_TOP_FRONT_RIGHT
,
// LRvh
77
AV_CH_FRONT_LEFT_OF_CENTER
|
AV_CH_FRONT_RIGHT_OF_CENTER
,
// LRc
78
AV_CH_BACK_LEFT
|
AV_CH_BACK_RIGHT
,
// LRrs
79
AV_CH_BACK_CENTER
,
// Cs
80
AV_CH_TOP_CENTER
,
// Ts
81
AV_CH_SURROUND_DIRECT_LEFT
|
AV_CH_SURROUND_DIRECT_RIGHT
,
// LRsd
82
AV_CH_WIDE_LEFT
|
AV_CH_WIDE_RIGHT
,
// LRw
83
AV_CH_TOP_FRONT_CENTER
,
// Cvh
84
AV_CH_LOW_FREQUENCY_2
,
// LFE2
85
};
86
87
static
inline
int
mlp_samplerate
(
int
in)
88
{
89
if
(in == 0xF)
90
return
0;
91
92
return
(in & 8 ? 44100 : 48000) << (in & 7) ;
93
}
94
95
static
inline
int
truehd_channels
(
int
chanmap)
96
{
97
int
channels
= 0,
i
;
98
99
for
(
i
= 0;
i
< 13;
i
++)
100
channels
+=
thd_chancount
[
i
] * ((chanmap >>
i
) & 1);
101
102
return
channels
;
103
}
104
105
static
inline
uint64_t
truehd_layout
(
int
chanmap)
106
{
107
int
i
;
108
uint64_t
layout
= 0;
109
110
for
(
i
= 0;
i
< 13;
i
++)
111
layout
|=
thd_layout
[
i
] * ((chanmap >>
i
) & 1);
112
113
return
layout
;
114
}
115
116
static
inline
int
layout_truehd
(uint64_t
layout
)
117
{
118
int
chanmap = 0;
119
120
for
(
int
i
= 0;
i
< 13;
i
++) {
121
if
((
layout
&
thd_layout
[
i
]) ==
thd_layout
[
i
])
122
chanmap |= 1 <<
i
;
123
}
124
125
return
chanmap;
126
}
127
128
int
ff_mlp_read_major_sync
(
void
*log,
MLPHeaderInfo
*
mh
,
GetBitContext
*gb);
129
130
#endif
/* AVCODEC_MLP_PARSE_H */
channels
channels
Definition
aptx.h:31
i
#define i(width, name, range_min, range_max)
Definition
cbs_h264.c:63
channel_layout.h
Public libavutil channel layout APIs header.
get_bits.h
bitstream reader API header.
AV_CH_SIDE_LEFT
#define AV_CH_SIDE_LEFT
Definition
channel_layout.h:184
AV_CH_SURROUND_DIRECT_RIGHT
#define AV_CH_SURROUND_DIRECT_RIGHT
Definition
channel_layout.h:198
AV_CH_WIDE_LEFT
#define AV_CH_WIDE_LEFT
Definition
channel_layout.h:195
AV_CH_WIDE_RIGHT
#define AV_CH_WIDE_RIGHT
Definition
channel_layout.h:196
AV_CH_TOP_FRONT_LEFT
#define AV_CH_TOP_FRONT_LEFT
Definition
channel_layout.h:187
AV_CH_FRONT_RIGHT
#define AV_CH_FRONT_RIGHT
Definition
channel_layout.h:176
AV_CH_FRONT_RIGHT_OF_CENTER
#define AV_CH_FRONT_RIGHT_OF_CENTER
Definition
channel_layout.h:182
AV_CH_BACK_CENTER
#define AV_CH_BACK_CENTER
Definition
channel_layout.h:183
AV_CH_TOP_FRONT_CENTER
#define AV_CH_TOP_FRONT_CENTER
Definition
channel_layout.h:188
AV_CH_FRONT_LEFT_OF_CENTER
#define AV_CH_FRONT_LEFT_OF_CENTER
Definition
channel_layout.h:181
AV_CH_LOW_FREQUENCY_2
#define AV_CH_LOW_FREQUENCY_2
Definition
channel_layout.h:199
AV_CH_BACK_RIGHT
#define AV_CH_BACK_RIGHT
Definition
channel_layout.h:180
AV_CH_FRONT_CENTER
#define AV_CH_FRONT_CENTER
Definition
channel_layout.h:177
AV_CH_TOP_CENTER
#define AV_CH_TOP_CENTER
Definition
channel_layout.h:186
AV_CH_SIDE_RIGHT
#define AV_CH_SIDE_RIGHT
Definition
channel_layout.h:185
AV_CH_BACK_LEFT
#define AV_CH_BACK_LEFT
Definition
channel_layout.h:179
AV_CH_LOW_FREQUENCY
#define AV_CH_LOW_FREQUENCY
Definition
channel_layout.h:178
AV_CH_TOP_FRONT_RIGHT
#define AV_CH_TOP_FRONT_RIGHT
Definition
channel_layout.h:189
AV_CH_FRONT_LEFT
#define AV_CH_FRONT_LEFT
Definition
channel_layout.h:175
AV_CH_SURROUND_DIRECT_LEFT
#define AV_CH_SURROUND_DIRECT_LEFT
Definition
channel_layout.h:197
layout
uint64_t layout
Definition
mediacodecdec_common.c:155
thd_chancount
static const uint8_t thd_chancount[13]
Definition
mlp_parse.h:66
thd_layout
static const uint64_t thd_layout[13]
Definition
mlp_parse.h:71
truehd_channels
static int truehd_channels(int chanmap)
Definition
mlp_parse.h:95
layout_truehd
static int layout_truehd(uint64_t layout)
Definition
mlp_parse.h:116
mlp_samplerate
static int mlp_samplerate(int in)
Definition
mlp_parse.h:87
ff_mlp_read_major_sync
int ff_mlp_read_major_sync(void *log, MLPHeaderInfo *mh, GetBitContext *gb)
Read a major sync info header - contains high level information about the stream - sample rate,...
Definition
mlp_parse.c:86
truehd_layout
static uint64_t truehd_layout(int chanmap)
Definition
mlp_parse.h:105
GetBitContext
Definition
get_bits.h:109
MLPHeaderInfo
Definition
mlp_parse.h:31
MLPHeaderInfo::channels_thd_stream2
int channels_thd_stream2
Channel count for substream 2 of TrueHD streams ("8-channel presentation")
Definition
mlp_parse.h:49
MLPHeaderInfo::channel_modifier_thd_stream1
int channel_modifier_thd_stream1
Channel modifier for substream 1 of TrueHD streams ("6-channel presentation")
Definition
mlp_parse.h:44
MLPHeaderInfo::channel_modifier_thd_stream2
int channel_modifier_thd_stream2
Channel modifier for substream 2 of TrueHD streams ("8-channel presentation")
Definition
mlp_parse.h:45
MLPHeaderInfo::channels_mlp
int channels_mlp
Channel count for MLP streams.
Definition
mlp_parse.h:47
MLPHeaderInfo::channels_thd_stream1
int channels_thd_stream1
Channel count for substream 1 of TrueHD streams ("6-channel presentation")
Definition
mlp_parse.h:48
MLPHeaderInfo::channel_layout_thd_stream2
uint64_t channel_layout_thd_stream2
Channel layout for substream 2 of TrueHD streams ("8-channel presentation")
Definition
mlp_parse.h:52
MLPHeaderInfo::is_vbr
int is_vbr
Stream is VBR instead of CBR.
Definition
mlp_parse.h:57
MLPHeaderInfo::group1_bits
int group1_bits
The bit depth of the first substream.
Definition
mlp_parse.h:35
MLPHeaderInfo::num_substreams
int num_substreams
Number of substreams within stream.
Definition
mlp_parse.h:60
MLPHeaderInfo::group2_bits
int group2_bits
Bit depth of the second substream (MLP only)
Definition
mlp_parse.h:36
MLPHeaderInfo::channel_arrangement
int channel_arrangement
Definition
mlp_parse.h:41
MLPHeaderInfo::peak_bitrate
int peak_bitrate
Peak bitrate for VBR, actual bitrate (==peak) for CBR.
Definition
mlp_parse.h:58
MLPHeaderInfo::access_unit_size
int access_unit_size
Number of samples per coded frame.
Definition
mlp_parse.h:54
MLPHeaderInfo::group2_samplerate
int group2_samplerate
Sample rate of second substream (MLP only)
Definition
mlp_parse.h:39
MLPHeaderInfo::access_unit_size_pow2
int access_unit_size_pow2
Next power of two above number of samples per frame.
Definition
mlp_parse.h:55
MLPHeaderInfo::group1_samplerate
int group1_samplerate
Sample rate of first substream.
Definition
mlp_parse.h:38
MLPHeaderInfo::substream_info
int substream_info
Which substream of substreams carry 2/6/8-channel presentation.
Definition
mlp_parse.h:63
MLPHeaderInfo::stream_type
int stream_type
0xBB for MLP, 0xBA for TrueHD
Definition
mlp_parse.h:32
MLPHeaderInfo::extended_substream_info
int extended_substream_info
Which substream of substreams carry 16-channel presentation.
Definition
mlp_parse.h:62
MLPHeaderInfo::channel_layout_mlp
uint64_t channel_layout_mlp
Channel layout for MLP streams.
Definition
mlp_parse.h:50
MLPHeaderInfo::channel_modifier_thd_stream0
int channel_modifier_thd_stream0
Channel modifier for substream 0 of TrueHD streams ("2-channel presentation")
Definition
mlp_parse.h:43
MLPHeaderInfo::header_size
int header_size
Size of the major sync header, in bytes.
Definition
mlp_parse.h:33
MLPHeaderInfo::channel_layout_thd_stream1
uint64_t channel_layout_thd_stream1
Channel layout for substream 1 of TrueHD streams ("6-channel presentation")
Definition
mlp_parse.h:51
mh
#define mh
Definition
vf_colormatrix.c:105
Generated on Mon Aug 17 2026 20:20:58 for FFmpeg by
1.13.2