FFmpeg
Loading...
Searching...
No Matches
dca.h
Go to the documentation of this file.
1/*
2 * DCA compatible decoder
3 * Copyright (C) 2004 Gildas Bazin
4 * Copyright (C) 2004 Benjamin Zores
5 * Copyright (C) 2006 Benjamin Larsson
6 * Copyright (C) 2007 Konstantin Shishkov
7 * Copyright (C) 2016 foo86
8 *
9 * This file is part of FFmpeg.
10 *
11 * FFmpeg is free software; you can redistribute it and/or
12 * modify it under the terms of the GNU Lesser General Public
13 * License as published by the Free Software Foundation; either
14 * version 2.1 of the License, or (at your option) any later version.
15 *
16 * FFmpeg is distributed in the hope that it will be useful,
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19 * Lesser General Public License for more details.
20 *
21 * You should have received a copy of the GNU Lesser General Public
22 * License along with FFmpeg; if not, write to the Free Software
23 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
24 */
25
26#ifndef AVCODEC_DCA_H
27#define AVCODEC_DCA_H
28
29#include <stdint.h>
30
31#include "libavutil/common.h"
33
34#include "get_bits.h"
35
36#define DCA_CORE_FRAME_HEADER_SIZE 18
37
49
50typedef struct DCACoreFrameHeader {
51 uint8_t normal_frame; ///< Frame type
52 uint8_t deficit_samples; ///< Deficit sample count
53 uint8_t crc_present; ///< CRC present flag
54 uint8_t npcmblocks; ///< Number of PCM sample blocks
55 uint16_t frame_size; ///< Primary frame byte size
56 uint8_t audio_mode; ///< Audio channel arrangement
57 uint8_t sr_code; ///< Core audio sampling frequency
58 uint8_t br_code; ///< Transmission bit rate
59 uint8_t drc_present; ///< Embedded dynamic range flag
60 uint8_t ts_present; ///< Embedded time stamp flag
61 uint8_t aux_present; ///< Auxiliary data flag
62 uint8_t hdcd_master; ///< HDCD mastering flag
63 uint8_t ext_audio_type; ///< Extension audio descriptor flag
64 uint8_t ext_audio_present; ///< Extended coding flag
65 uint8_t sync_ssf; ///< Audio sync word insertion flag
66 uint8_t lfe_present; ///< Low frequency effects flag
67 uint8_t predictor_history; ///< Predictor history flag switch
68 uint8_t filter_perfect; ///< Multirate interpolator switch
69 uint8_t encoder_rev; ///< Encoder software revision
70 uint8_t copy_hist; ///< Copy history
71 uint8_t pcmr_code; ///< Source PCM resolution
72 uint8_t sumdiff_front; ///< Front sum/difference flag
73 uint8_t sumdiff_surround; ///< Surround sum/difference flag
74 uint8_t dn_code; ///< Dialog normalization / unspecified
76
89
120
121#define DCA_SPEAKER_LAYOUT_MONO (DCA_SPEAKER_MASK_C)
122#define DCA_SPEAKER_LAYOUT_STEREO (DCA_SPEAKER_MASK_L | DCA_SPEAKER_MASK_R)
123#define DCA_SPEAKER_LAYOUT_2POINT1 (DCA_SPEAKER_LAYOUT_STEREO | DCA_SPEAKER_MASK_LFE1)
124#define DCA_SPEAKER_LAYOUT_3_0 (DCA_SPEAKER_LAYOUT_STEREO | DCA_SPEAKER_MASK_C)
125#define DCA_SPEAKER_LAYOUT_2_1 (DCA_SPEAKER_LAYOUT_STEREO | DCA_SPEAKER_MASK_Cs)
126#define DCA_SPEAKER_LAYOUT_3_1 (DCA_SPEAKER_LAYOUT_3_0 | DCA_SPEAKER_MASK_Cs)
127#define DCA_SPEAKER_LAYOUT_2_2 (DCA_SPEAKER_LAYOUT_STEREO | DCA_SPEAKER_MASK_Ls | DCA_SPEAKER_MASK_Rs)
128#define DCA_SPEAKER_LAYOUT_5POINT0 (DCA_SPEAKER_LAYOUT_3_0 | DCA_SPEAKER_MASK_Ls | DCA_SPEAKER_MASK_Rs)
129#define DCA_SPEAKER_LAYOUT_5POINT1 (DCA_SPEAKER_LAYOUT_5POINT0 | DCA_SPEAKER_MASK_LFE1)
130#define DCA_SPEAKER_LAYOUT_7POINT0_WIDE (DCA_SPEAKER_LAYOUT_5POINT0 | DCA_SPEAKER_MASK_Lw | DCA_SPEAKER_MASK_Rw)
131#define DCA_SPEAKER_LAYOUT_7POINT1_WIDE (DCA_SPEAKER_LAYOUT_7POINT0_WIDE | DCA_SPEAKER_MASK_LFE1)
132
133#define DCA_HAS_STEREO(mask) \
134 ((mask & DCA_SPEAKER_LAYOUT_STEREO) == DCA_SPEAKER_LAYOUT_STEREO)
135
154
155/**
156 * Return number of individual channels in DCASpeakerPair mask
157 */
158static inline int ff_dca_count_chs_for_mask(unsigned int mask)
159{
160 return av_popcount((mask & 0xffff) | ((mask & 0xae66) << 16));
161}
162
167
184
196
197extern const uint32_t ff_dca_sample_rates[16];
198extern const uint32_t ff_dca_sampling_freqs[16];
199extern const uint8_t ff_dca_freq_ranges[16];
200extern const uint8_t ff_dca_bits_per_sample[8];
201
202
203/**
204 * Convert bitstream to one representation based on sync marker
205 */
206int avpriv_dca_convert_bitstream(const uint8_t *src, int src_size, uint8_t *dst,
207 int max_size);
208
209/**
210 * Parse and validate core frame header
211 * @param[out] h Pointer to struct where header info is written.
212 * @param[in] buf Pointer to the data buffer
213 * @param[in] size Size of the data buffer
214 * @return 0 on success, negative AVERROR code on failure
215 */
216int avpriv_dca_parse_core_frame_header(DCACoreFrameHeader *h, const uint8_t *buf, int size);
217
218/**
219 * Parse and validate core frame header
220 * @param[out] h Pointer to struct where header info is written.
221 * @param[in] gbc BitContext containing the first 120 bits of the frame.
222 * @return 0 on success, negative DCA_PARSE_ERROR_ code on failure
223 */
225
226#endif /* AVCODEC_DCA_H */
uint8_t ptrdiff_t const uint8_t ptrdiff_t int intptr_t intptr_t int int16_t * dst
Definition dsp.h:87
common internal and external API header
#define av_popcount
Definition common.h:154
const uint8_t ff_dca_freq_ranges[16]
Definition dca.c:41
const uint32_t ff_dca_sampling_freqs[16]
Definition dca.c:36
const uint8_t ff_dca_bits_per_sample[8]
Definition dca.c:45
DCASpeaker
Definition dca.h:77
@ DCA_SPEAKER_Lh
Definition dca.h:81
@ DCA_SPEAKER_Rh
Definition dca.h:81
@ DCA_SPEAKER_L
Definition dca.h:78
@ DCA_SPEAKER_Rsr
Definition dca.h:80
@ DCA_SPEAKER_Ll
Definition dca.h:84
@ DCA_SPEAKER_Rs
Definition dca.h:79
@ DCA_SPEAKER_COUNT
Definition dca.h:87
@ DCA_SPEAKER_Chr
Definition dca.h:83
@ DCA_SPEAKER_RSV3
Definition dca.h:85
@ DCA_SPEAKER_RSV4
Definition dca.h:85
@ DCA_SPEAKER_C
Definition dca.h:78
@ DCA_SPEAKER_Rhs
Definition dca.h:83
@ DCA_SPEAKER_Rhr
Definition dca.h:84
@ DCA_SPEAKER_Lhr
Definition dca.h:83
@ DCA_SPEAKER_Lss
Definition dca.h:80
@ DCA_SPEAKER_Oh
Definition dca.h:82
@ DCA_SPEAKER_Cl
Definition dca.h:84
@ DCA_SPEAKER_Cs
Definition dca.h:79
@ DCA_SPEAKER_Lhs
Definition dca.h:83
@ DCA_SPEAKER_RSV1
Definition dca.h:85
@ DCA_SPEAKER_Ch
Definition dca.h:81
@ DCA_SPEAKER_Rc
Definition dca.h:81
@ DCA_SPEAKER_Lc
Definition dca.h:80
@ DCA_SPEAKER_Rss
Definition dca.h:80
@ DCA_SPEAKER_LFE2
Definition dca.h:82
@ DCA_SPEAKER_Ls
Definition dca.h:78
@ DCA_SPEAKER_LFE1
Definition dca.h:79
@ DCA_SPEAKER_Rw
Definition dca.h:82
@ DCA_SPEAKER_RSV2
Definition dca.h:85
@ DCA_SPEAKER_Rl
Definition dca.h:84
@ DCA_SPEAKER_R
Definition dca.h:78
@ DCA_SPEAKER_Lsr
Definition dca.h:79
@ DCA_SPEAKER_Lw
Definition dca.h:82
DCADownMixType
Definition dca.h:185
@ DCA_DMIX_TYPE_COUNT
Definition dca.h:194
@ DCA_DMIX_TYPE_3_1
Definition dca.h:192
@ DCA_DMIX_TYPE_LoRo
Definition dca.h:187
@ DCA_DMIX_TYPE_LtRt
Definition dca.h:188
@ DCA_DMIX_TYPE_2_1
Definition dca.h:190
@ DCA_DMIX_TYPE_1_0
Definition dca.h:186
@ DCA_DMIX_TYPE_3_0
Definition dca.h:189
@ DCA_DMIX_TYPE_2_2
Definition dca.h:191
int ff_dca_parse_core_frame_header(DCACoreFrameHeader *h, GetBitContext *gb)
Parse and validate core frame header.
Definition dca.c:86
int avpriv_dca_parse_core_frame_header(DCACoreFrameHeader *h, const uint8_t *buf, int size)
Parse and validate core frame header.
Definition dca.c:144
static int ff_dca_count_chs_for_mask(unsigned int mask)
Return number of individual channels in DCASpeakerPair mask.
Definition dca.h:158
DCARepresentationType
Definition dca.h:163
@ DCA_REPR_TYPE_LtRt
Definition dca.h:164
@ DCA_REPR_TYPE_LhRh
Definition dca.h:165
DCAExtensionMask
Definition dca.h:168
@ DCA_EXSS_RSV2
Definition dca.h:181
@ DCA_EXSS_XXCH
Definition dca.h:176
@ DCA_EXSS_RSV1
Definition dca.h:180
@ DCA_CSS_X96
Definition dca.h:171
@ DCA_EXSS_LBR
Definition dca.h:178
@ DCA_EXSS_X96
Definition dca.h:177
@ DCA_CSS_XCH
Definition dca.h:172
@ DCA_EXSS_MASK
Definition dca.h:182
@ DCA_EXSS_CORE
Definition dca.h:174
@ DCA_CSS_CORE
Definition dca.h:169
@ DCA_CSS_XXCH
Definition dca.h:170
@ DCA_EXSS_XLL
Definition dca.h:179
@ DCA_CSS_MASK
Definition dca.h:173
@ DCA_EXSS_XBR
Definition dca.h:175
const uint32_t ff_dca_sample_rates[16]
DCASpeakerPair
Definition dca.h:136
@ DCA_SPEAKER_PAIR_Chr
Definition dca.h:151
@ DCA_SPEAKER_PAIR_Ch
Definition dca.h:144
@ DCA_SPEAKER_PAIR_LsRs
Definition dca.h:139
@ DCA_SPEAKER_PAIR_LR
Definition dca.h:138
@ DCA_SPEAKER_PAIR_LsrRsr
Definition dca.h:143
@ DCA_SPEAKER_PAIR_LcRc
Definition dca.h:146
@ DCA_SPEAKER_PAIR_LFE1
Definition dca.h:140
@ DCA_SPEAKER_PAIR_LFE2
Definition dca.h:149
@ DCA_SPEAKER_PAIR_Cs
Definition dca.h:141
@ DCA_SPEAKER_PAIR_LhrRhr
Definition dca.h:152
@ DCA_SPEAKER_PAIR_Oh
Definition dca.h:145
@ DCA_SPEAKER_PAIR_LssRss
Definition dca.h:148
@ DCA_SPEAKER_PAIR_LwRw
Definition dca.h:147
@ DCA_SPEAKER_PAIR_LhRh
Definition dca.h:142
@ DCA_SPEAKER_PAIR_C
Definition dca.h:137
@ DCA_SPEAKER_PAIR_LhsRhs
Definition dca.h:150
DCASpeakerMask
Definition dca.h:90
@ DCA_SPEAKER_MASK_LFE2
Definition dca.h:107
@ DCA_SPEAKER_MASK_Cs
Definition dca.h:97
@ DCA_SPEAKER_MASK_Ll
Definition dca.h:117
@ DCA_SPEAKER_MASK_Lc
Definition dca.h:102
@ DCA_SPEAKER_MASK_Rl
Definition dca.h:118
@ DCA_SPEAKER_MASK_Rc
Definition dca.h:103
@ DCA_SPEAKER_MASK_Rh
Definition dca.h:106
@ DCA_SPEAKER_MASK_Oh
Definition dca.h:110
@ DCA_SPEAKER_MASK_Lsr
Definition dca.h:98
@ DCA_SPEAKER_MASK_LFE1
Definition dca.h:96
@ DCA_SPEAKER_MASK_Lw
Definition dca.h:108
@ DCA_SPEAKER_MASK_Lh
Definition dca.h:104
@ DCA_SPEAKER_MASK_Ls
Definition dca.h:94
@ DCA_SPEAKER_MASK_Rhs
Definition dca.h:112
@ DCA_SPEAKER_MASK_C
Definition dca.h:91
@ DCA_SPEAKER_MASK_Cl
Definition dca.h:116
@ DCA_SPEAKER_MASK_L
Definition dca.h:92
@ DCA_SPEAKER_MASK_Ch
Definition dca.h:105
@ DCA_SPEAKER_MASK_Rs
Definition dca.h:95
@ DCA_SPEAKER_MASK_Lhr
Definition dca.h:114
@ DCA_SPEAKER_MASK_R
Definition dca.h:93
@ DCA_SPEAKER_MASK_Rw
Definition dca.h:109
@ DCA_SPEAKER_MASK_Rss
Definition dca.h:101
@ DCA_SPEAKER_MASK_Lhs
Definition dca.h:111
@ DCA_SPEAKER_MASK_Chr
Definition dca.h:113
@ DCA_SPEAKER_MASK_Lss
Definition dca.h:100
@ DCA_SPEAKER_MASK_Rhr
Definition dca.h:115
@ DCA_SPEAKER_MASK_Rsr
Definition dca.h:99
DCAParseError
Definition dca.h:38
@ DCA_PARSE_ERROR_RESERVED_BIT
Definition dca.h:45
@ DCA_PARSE_ERROR_SAMPLE_RATE
Definition dca.h:44
@ DCA_PARSE_ERROR_PCM_BLOCKS
Definition dca.h:41
@ DCA_PARSE_ERROR_AMODE
Definition dca.h:43
@ DCA_PARSE_ERROR_LFE_FLAG
Definition dca.h:46
@ DCA_PARSE_ERROR_FRAME_SIZE
Definition dca.h:42
@ DCA_PARSE_ERROR_PCM_RES
Definition dca.h:47
@ DCA_PARSE_ERROR_DEFICIT_SAMPLES
Definition dca.h:40
@ DCA_PARSE_ERROR_SYNC_WORD
Definition dca.h:39
int avpriv_dca_convert_bitstream(const uint8_t *src, int src_size, uint8_t *dst, int max_size)
Convert bitstream to one representation based on sync marker.
Definition dca.c:49
bitstream reader API header.
static const uint16_t mask[17]
Definition lzw.c:38
uint8_t lfe_present
Low frequency effects flag.
Definition dca.h:66
uint8_t sumdiff_front
Front sum/difference flag.
Definition dca.h:72
uint8_t ext_audio_type
Extension audio descriptor flag.
Definition dca.h:63
uint8_t sumdiff_surround
Surround sum/difference flag.
Definition dca.h:73
uint8_t encoder_rev
Encoder software revision.
Definition dca.h:69
uint8_t br_code
Transmission bit rate.
Definition dca.h:58
uint8_t copy_hist
Copy history.
Definition dca.h:70
uint8_t sync_ssf
Audio sync word insertion flag.
Definition dca.h:65
uint8_t crc_present
CRC present flag.
Definition dca.h:53
uint8_t drc_present
Embedded dynamic range flag.
Definition dca.h:59
uint8_t dn_code
Dialog normalization / unspecified.
Definition dca.h:74
uint8_t sr_code
Core audio sampling frequency.
Definition dca.h:57
uint8_t pcmr_code
Source PCM resolution.
Definition dca.h:71
uint8_t npcmblocks
Number of PCM sample blocks.
Definition dca.h:54
uint8_t aux_present
Auxiliary data flag.
Definition dca.h:61
uint8_t filter_perfect
Multirate interpolator switch.
Definition dca.h:68
uint8_t ts_present
Embedded time stamp flag.
Definition dca.h:60
uint8_t hdcd_master
HDCD mastering flag.
Definition dca.h:62
uint8_t audio_mode
Audio channel arrangement.
Definition dca.h:56
uint8_t ext_audio_present
Extended coding flag.
Definition dca.h:64
uint16_t frame_size
Primary frame byte size.
Definition dca.h:55
uint8_t predictor_history
Predictor history flag switch.
Definition dca.h:67
uint8_t normal_frame
Frame type.
Definition dca.h:51
uint8_t deficit_samples
Deficit sample count.
Definition dca.h:52
#define src
Definition vp8dsp.c:248
int size