FFmpeg
Loading...
Searching...
No Matches
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
27
28#include "get_bits.h"
29
30typedef 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
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
65
66static 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
86
87static 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
95static 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
105static 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
116static 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
129
130#endif /* AVCODEC_MLP_PARSE_H */
channels
Definition aptx.h:31
#define i(width, name, range_min, range_max)
Definition cbs_h264.c:63
Public libavutil channel layout APIs header.
bitstream reader API header.
#define AV_CH_SIDE_LEFT
#define AV_CH_SURROUND_DIRECT_RIGHT
#define AV_CH_WIDE_LEFT
#define AV_CH_WIDE_RIGHT
#define AV_CH_TOP_FRONT_LEFT
#define AV_CH_FRONT_RIGHT
#define AV_CH_FRONT_RIGHT_OF_CENTER
#define AV_CH_BACK_CENTER
#define AV_CH_TOP_FRONT_CENTER
#define AV_CH_FRONT_LEFT_OF_CENTER
#define AV_CH_LOW_FREQUENCY_2
#define AV_CH_BACK_RIGHT
#define AV_CH_FRONT_CENTER
#define AV_CH_TOP_CENTER
#define AV_CH_SIDE_RIGHT
#define AV_CH_BACK_LEFT
#define AV_CH_LOW_FREQUENCY
#define AV_CH_TOP_FRONT_RIGHT
#define AV_CH_FRONT_LEFT
#define AV_CH_SURROUND_DIRECT_LEFT
uint64_t layout
static const uint8_t thd_chancount[13]
Definition mlp_parse.h:66
static const uint64_t thd_layout[13]
Definition mlp_parse.h:71
static int truehd_channels(int chanmap)
Definition mlp_parse.h:95
static int layout_truehd(uint64_t layout)
Definition mlp_parse.h:116
static int mlp_samplerate(int in)
Definition mlp_parse.h:87
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
static uint64_t truehd_layout(int chanmap)
Definition mlp_parse.h:105
int channels_thd_stream2
Channel count for substream 2 of TrueHD streams ("8-channel presentation")
Definition mlp_parse.h:49
int channel_modifier_thd_stream1
Channel modifier for substream 1 of TrueHD streams ("6-channel presentation")
Definition mlp_parse.h:44
int channel_modifier_thd_stream2
Channel modifier for substream 2 of TrueHD streams ("8-channel presentation")
Definition mlp_parse.h:45
int channels_mlp
Channel count for MLP streams.
Definition mlp_parse.h:47
int channels_thd_stream1
Channel count for substream 1 of TrueHD streams ("6-channel presentation")
Definition mlp_parse.h:48
uint64_t channel_layout_thd_stream2
Channel layout for substream 2 of TrueHD streams ("8-channel presentation")
Definition mlp_parse.h:52
int is_vbr
Stream is VBR instead of CBR.
Definition mlp_parse.h:57
int group1_bits
The bit depth of the first substream.
Definition mlp_parse.h:35
int num_substreams
Number of substreams within stream.
Definition mlp_parse.h:60
int group2_bits
Bit depth of the second substream (MLP only)
Definition mlp_parse.h:36
int channel_arrangement
Definition mlp_parse.h:41
int peak_bitrate
Peak bitrate for VBR, actual bitrate (==peak) for CBR.
Definition mlp_parse.h:58
int access_unit_size
Number of samples per coded frame.
Definition mlp_parse.h:54
int group2_samplerate
Sample rate of second substream (MLP only)
Definition mlp_parse.h:39
int access_unit_size_pow2
Next power of two above number of samples per frame.
Definition mlp_parse.h:55
int group1_samplerate
Sample rate of first substream.
Definition mlp_parse.h:38
int substream_info
Which substream of substreams carry 2/6/8-channel presentation.
Definition mlp_parse.h:63
int stream_type
0xBB for MLP, 0xBA for TrueHD
Definition mlp_parse.h:32
int extended_substream_info
Which substream of substreams carry 16-channel presentation.
Definition mlp_parse.h:62
uint64_t channel_layout_mlp
Channel layout for MLP streams.
Definition mlp_parse.h:50
int channel_modifier_thd_stream0
Channel modifier for substream 0 of TrueHD streams ("2-channel presentation")
Definition mlp_parse.h:43
int header_size
Size of the major sync header, in bytes.
Definition mlp_parse.h:33
uint64_t channel_layout_thd_stream1
Channel layout for substream 1 of TrueHD streams ("6-channel presentation")
Definition mlp_parse.h:51
#define mh