FFmpeg
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
ac3_parser.c
Go to the documentation of this file.
1 /*
2  * AC-3 parser
3  * Copyright (c) 2003 Fabrice Bellard
4  * Copyright (c) 2003 Michael Niedermayer
5  *
6  * This file is part of FFmpeg.
7  *
8  * FFmpeg is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU Lesser General Public
10  * License as published by the Free Software Foundation; either
11  * version 2.1 of the License, or (at your option) any later version.
12  *
13  * FFmpeg is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16  * Lesser General Public License for more details.
17  *
18  * You should have received a copy of the GNU Lesser General Public
19  * License along with FFmpeg; if not, write to the Free Software
20  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21  */
22 
23 #include "config_components.h"
24 
26 #include "libavutil/mem.h"
27 #include "parser.h"
28 #include "ac3defs.h"
29 #include "ac3tab.h"
30 #include "ac3_parser.h"
31 #include "ac3_parser_internal.h"
32 #include "aac_ac3_parser.h"
33 #include "get_bits.h"
34 
35 
36 #define AC3_HEADER_SIZE 7
37 
38 #if CONFIG_AC3_PARSER
39 
40 static const uint8_t eac3_blocks[4] = {
41  1, 2, 3, 6
42 };
43 
44 /**
45  * Table for center mix levels
46  * reference: Section 5.4.2.4 cmixlev
47  */
48 static const uint8_t center_levels[4] = { 4, 5, 6, 5 };
49 
50 /**
51  * Table for surround mix levels
52  * reference: Section 5.4.2.5 surmixlev
53  */
54 static const uint8_t surround_levels[4] = { 4, 6, 7, 6 };
55 
56 int ff_ac3_find_syncword(const uint8_t *buf, int buf_size)
57 {
58  int i;
59 
60  for (i = 1; i < buf_size; i += 2) {
61  if (buf[i] == 0x77 || buf[i] == 0x0B) {
62  if ((buf[i] ^ buf[i-1]) == (0x77 ^ 0x0B)) {
63  i--;
64  break;
65  } else if ((buf[i] ^ buf[i+1]) == (0x77 ^ 0x0B)) {
66  break;
67  }
68  }
69  }
70  if (i >= buf_size)
71  return AVERROR_INVALIDDATA;
72 
73  return i;
74 }
75 
76 /**
77  * Parse the 'sync info' and 'bit stream info' from the AC-3 bitstream.
78  * GetBitContext within AC3DecodeContext must point to
79  * the start of the synchronized AC-3 bitstream.
80  */
81 static int ac3_parse_header(GetBitContext *gbc, AC3HeaderInfo *hdr)
82 {
83  /* read the rest of the bsi. read twice for dual mono mode. */
84  for (int i = 0; i < (hdr->channel_mode ? 1 : 2); i++) {
85  hdr->dialog_normalization[i] = -get_bits(gbc, 5);
86  hdr->compression_exists[i] = get_bits1(gbc);
87  if (hdr->compression_exists[i])
88  hdr->heavy_dynamic_range[i] = get_bits(gbc, 8);
89  if (get_bits1(gbc))
90  skip_bits(gbc, 8); //skip language code
91  if (get_bits1(gbc))
92  skip_bits(gbc, 7); //skip audio production information
93  }
94 
95  skip_bits(gbc, 2); //skip copyright bit and original bitstream bit
96 
97  /* skip the timecodes or parse the Alternate Bit Stream Syntax */
98  if (hdr->bitstream_id != 6) {
99  if (get_bits1(gbc))
100  skip_bits(gbc, 14); //skip timecode1
101  if (get_bits1(gbc))
102  skip_bits(gbc, 14); //skip timecode2
103  } else {
104  if (get_bits1(gbc)) {
105  hdr->preferred_downmix = get_bits(gbc, 2);
106  hdr->center_mix_level_ltrt = get_bits(gbc, 3);
107  hdr->surround_mix_level_ltrt = av_clip(get_bits(gbc, 3), 3, 7);
108  hdr->center_mix_level = get_bits(gbc, 3);
109  hdr->surround_mix_level = av_clip(get_bits(gbc, 3), 3, 7);
110  }
111  if (get_bits1(gbc)) {
112  hdr->dolby_surround_ex_mode = get_bits(gbc, 2);
113  hdr->dolby_headphone_mode = get_bits(gbc, 2);
114  skip_bits(gbc, 10); // skip adconvtyp (1), xbsi2 (8), encinfo (1)
115  }
116  }
117 
118  /* skip additional bitstream info */
119  if (get_bits1(gbc)) {
120  int i = get_bits(gbc, 6);
121  do {
122  skip_bits(gbc, 8);
123  } while (i--);
124  }
125 
126  return 0;
127 }
128 
129 static int eac3_parse_header(GetBitContext *gbc, AC3HeaderInfo *hdr)
130 {
133  if (hdr->substreamid)
135 
136  skip_bits(gbc, 5); // skip bitstream id
137 
138  /* volume control params */
139  for (int i = 0; i < (hdr->channel_mode ? 1 : 2); i++) {
140  hdr->dialog_normalization[i] = -get_bits(gbc, 5);
141  hdr->compression_exists[i] = get_bits1(gbc);
142  if (hdr->compression_exists[i])
143  hdr->heavy_dynamic_range[i] = get_bits(gbc, 8);
144  }
145 
146  /* dependent stream channel map */
148  hdr->channel_map_present = get_bits1(gbc);
149  if (hdr->channel_map_present) {
150  int64_t channel_layout = 0;
151  int channel_map = get_bits(gbc, 16);
152 
153  for (int i = 0; i < 16; i++)
154  if (channel_map & (1 << (EAC3_MAX_CHANNELS - i - 1)))
155  channel_layout |= ff_eac3_custom_channel_map_locations[i][1];
156 
157  if (av_popcount64(channel_layout) > EAC3_MAX_CHANNELS) {
159  }
160  hdr->channel_map = channel_map;
161  }
162  }
163 
164  /* mixing metadata */
165  if (get_bits1(gbc)) {
166  /* center and surround mix levels */
167  if (hdr->channel_mode > AC3_CHMODE_STEREO) {
168  hdr->preferred_downmix = get_bits(gbc, 2);
169  if (hdr->channel_mode & 1) {
170  /* if three front channels exist */
171  hdr->center_mix_level_ltrt = get_bits(gbc, 3);
172  hdr->center_mix_level = get_bits(gbc, 3);
173  }
174  if (hdr->channel_mode & 4) {
175  /* if a surround channel exists */
176  hdr->surround_mix_level_ltrt = av_clip(get_bits(gbc, 3), 3, 7);
177  hdr->surround_mix_level = av_clip(get_bits(gbc, 3), 3, 7);
178  }
179  }
180 
181  /* lfe mix level */
182  if (hdr->lfe_on && (hdr->lfe_mix_level_exists = get_bits1(gbc))) {
183  hdr->lfe_mix_level = get_bits(gbc, 5);
184  }
185 
186  /* info for mixing with other streams and substreams */
188  for (int i = 0; i < (hdr->channel_mode ? 1 : 2); i++) {
189  // TODO: apply program scale factor
190  if (get_bits1(gbc)) {
191  skip_bits(gbc, 6); // skip program scale factor
192  }
193  }
194  if (get_bits1(gbc)) {
195  skip_bits(gbc, 6); // skip external program scale factor
196  }
197  /* skip mixing parameter data */
198  switch(get_bits(gbc, 2)) {
199  case 1: skip_bits(gbc, 5); break;
200  case 2: skip_bits(gbc, 12); break;
201  case 3: {
202  int mix_data_size = (get_bits(gbc, 5) + 2) << 3;
203  skip_bits_long(gbc, mix_data_size);
204  break;
205  }
206  }
207  /* skip pan information for mono or dual mono source */
208  if (hdr->channel_mode < AC3_CHMODE_STEREO) {
209  for (int i = 0; i < (hdr->channel_mode ? 1 : 2); i++) {
210  if (get_bits1(gbc)) {
211  /* note: this is not in the ATSC A/52B specification
212  reference: ETSI TS 102 366 V1.1.1
213  section: E.1.3.1.25 */
214  skip_bits(gbc, 8); // skip pan mean direction index
215  skip_bits(gbc, 6); // skip reserved paninfo bits
216  }
217  }
218  }
219  /* skip mixing configuration information */
220  if (get_bits1(gbc)) {
221  for (int i = 0; i < hdr->num_blocks; i++) {
222  if (hdr->num_blocks == 1 || get_bits1(gbc)) {
223  skip_bits(gbc, 5);
224  }
225  }
226  }
227  }
228  }
229 
230  /* informational metadata */
231  if (get_bits1(gbc)) {
232  hdr->bitstream_mode = get_bits(gbc, 3);
233  skip_bits(gbc, 2); // skip copyright bit and original bitstream bit
234  if (hdr->channel_mode == AC3_CHMODE_STEREO) {
235  hdr->dolby_surround_mode = get_bits(gbc, 2);
236  hdr->dolby_headphone_mode = get_bits(gbc, 2);
237  }
238  if (hdr->channel_mode >= AC3_CHMODE_2F2R) {
239  hdr->dolby_surround_ex_mode = get_bits(gbc, 2);
240  }
241  for (int i = 0; i < (hdr->channel_mode ? 1 : 2); i++) {
242  if (get_bits1(gbc)) {
243  skip_bits(gbc, 8); // skip mix level, room type, and A/D converter type
244  }
245  }
246  if (hdr->sr_code != EAC3_SR_CODE_REDUCED) {
247  skip_bits1(gbc); // skip source sample rate code
248  }
249  }
250 
251  /* converter synchronization flag
252  If frames are less than six blocks, this bit should be turned on
253  once every 6 blocks to indicate the start of a frame set.
254  reference: RFC 4598, Section 2.1.3 Frame Sets */
255  if (hdr->frame_type == EAC3_FRAME_TYPE_INDEPENDENT && hdr->num_blocks != 6) {
256  skip_bits1(gbc); // skip converter synchronization flag
257  }
258 
259  /* original frame size code if this stream was converted from AC-3 */
261  (hdr->num_blocks == 6 || get_bits1(gbc))) {
262  skip_bits(gbc, 6); // skip frame size code
263  }
264 
265  /* additional bitstream info */
266  if (get_bits1(gbc)) {
267  int addbsil = get_bits(gbc, 6);
268  for (int i = 0; i < addbsil + 1; i++) {
269  if (i == 0) {
270  /* In this 8 bit chunk, the LSB is equal to flag_ec3_extension_type_a
271  which can be used to detect Atmos presence */
272  skip_bits(gbc, 7);
273  hdr->eac3_extension_type_a = get_bits1(gbc);
274  if (hdr->eac3_extension_type_a) {
275  hdr->complexity_index_type_a = get_bits(gbc, 8);
276  i++;
277  }
278  } else {
279  skip_bits(gbc, 8); // skip additional bit stream info
280  }
281  }
282  }
283 
284  return 0;
285 }
286 
288 {
289  int frame_size_code;
290 
291  memset(hdr, 0, sizeof(*hdr));
292 
293  hdr->sync_word = get_bits(gbc, 16);
294  if(hdr->sync_word != 0x0B77)
295  return AC3_PARSE_ERROR_SYNC;
296 
297  /* read ahead to bsid to distinguish between AC-3 and E-AC-3 */
298  hdr->bitstream_id = show_bits_long(gbc, 29) & 0x1F;
299  if(hdr->bitstream_id > 16)
300  return AC3_PARSE_ERROR_BSID;
301 
302  hdr->num_blocks = 6;
303  hdr->ac3_bit_rate_code = -1;
304 
305  /* set default mix levels */
306  hdr->center_mix_level = 5; // -4.5dB
307  hdr->surround_mix_level = 6; // -6.0dB
308 
309  /* set default dolby surround mode */
311 
312  if(hdr->bitstream_id <= 10) {
313  /* Normal AC-3 */
314  hdr->crc1 = get_bits(gbc, 16);
315  hdr->sr_code = get_bits(gbc, 2);
316  if(hdr->sr_code == 3)
318 
319  frame_size_code = get_bits(gbc, 6);
320  if(frame_size_code > 37)
322 
323  hdr->ac3_bit_rate_code = (frame_size_code >> 1);
324 
325  skip_bits(gbc, 5); // skip bsid, already got it
326 
327  hdr->bitstream_mode = get_bits(gbc, 3);
328  hdr->channel_mode = get_bits(gbc, 3);
329 
330  if(hdr->channel_mode == AC3_CHMODE_STEREO) {
331  hdr->dolby_surround_mode = get_bits(gbc, 2);
332  } else {
333  if((hdr->channel_mode & 1) && hdr->channel_mode != AC3_CHMODE_MONO)
334  hdr-> center_mix_level = center_levels[get_bits(gbc, 2)];
335  if(hdr->channel_mode & 4)
336  hdr->surround_mix_level = surround_levels[get_bits(gbc, 2)];
337  }
338  hdr->lfe_on = get_bits1(gbc);
339 
340  hdr->sr_shift = FFMAX(hdr->bitstream_id, 8) - 8;
341  hdr->sample_rate = ff_ac3_sample_rate_tab[hdr->sr_code] >> hdr->sr_shift;
342  hdr->bit_rate = (ff_ac3_bitrate_tab[hdr->ac3_bit_rate_code] * 1000) >> hdr->sr_shift;
343  hdr->channels = ff_ac3_channels_tab[hdr->channel_mode] + hdr->lfe_on;
344  hdr->frame_size = ff_ac3_frame_size_tab[frame_size_code][hdr->sr_code] * 2;
345  hdr->frame_type = EAC3_FRAME_TYPE_AC3_CONVERT; //EAC3_FRAME_TYPE_INDEPENDENT;
346  hdr->substreamid = 0;
347 
348  int ret = ac3_parse_header(gbc, hdr);
349  if (ret < 0)
350  return ret;
351  } else {
352  /* Enhanced AC-3 */
353  hdr->crc1 = 0;
354  hdr->frame_type = get_bits(gbc, 2);
357 
358  hdr->substreamid = get_bits(gbc, 3);
359 
360  hdr->frame_size = (get_bits(gbc, 11) + 1) << 1;
361  if(hdr->frame_size < AC3_HEADER_SIZE)
363 
364  hdr->sr_code = get_bits(gbc, 2);
365  if (hdr->sr_code == 3) {
366  int sr_code2 = get_bits(gbc, 2);
367  if(sr_code2 == 3)
369  hdr->sample_rate = ff_ac3_sample_rate_tab[sr_code2] / 2;
370  hdr->sr_shift = 1;
371  } else {
372  hdr->num_blocks = eac3_blocks[get_bits(gbc, 2)];
374  hdr->sr_shift = 0;
375  }
376 
377  hdr->channel_mode = get_bits(gbc, 3);
378  hdr->lfe_on = get_bits1(gbc);
379 
380  hdr->bit_rate = 8LL * hdr->frame_size * hdr->sample_rate /
381  (hdr->num_blocks * 256);
382  hdr->channels = ff_ac3_channels_tab[hdr->channel_mode] + hdr->lfe_on;
383 
384  int ret = eac3_parse_header(gbc, hdr);
385  if (ret < 0)
386  return ret;
387  }
389  if (hdr->lfe_on)
391 
392  return 0;
393 }
394 
395 // TODO: Better way to pass AC3HeaderInfo fields to mov muxer.
396 int avpriv_ac3_parse_header(AC3HeaderInfo **phdr, const uint8_t *buf,
397  size_t size)
398 {
399  GetBitContext gb;
400  AC3HeaderInfo *hdr;
401  int err;
402 
403  if (!*phdr)
404  *phdr = av_mallocz(sizeof(AC3HeaderInfo));
405  if (!*phdr)
406  return AVERROR(ENOMEM);
407  hdr = *phdr;
408 
409  err = init_get_bits8(&gb, buf, size);
410  if (err < 0)
411  return AVERROR_INVALIDDATA;
412  err = ff_ac3_parse_header(&gb, hdr);
413  if (err < 0)
414  return AVERROR_INVALIDDATA;
415 
416  return get_bits_count(&gb);
417 }
418 
419 int av_ac3_parse_header(const uint8_t *buf, size_t size,
420  uint8_t *bitstream_id, uint16_t *frame_size)
421 {
422  GetBitContext gb;
423  AC3HeaderInfo hdr;
424  uint8_t tmp[32 + AV_INPUT_BUFFER_PADDING_SIZE];
425  int err;
426 
427  size = FFMIN(32, size);
428  memcpy(tmp, buf, size);
429  memset(tmp + size, 0, AV_INPUT_BUFFER_PADDING_SIZE);
430  err = init_get_bits8(&gb, tmp, size);
431  if (err < 0)
432  return AVERROR_INVALIDDATA;
433  err = ff_ac3_parse_header(&gb, &hdr);
434  if (err < 0)
435  return AVERROR_INVALIDDATA;
436 
437  *bitstream_id = hdr.bitstream_id;
438  *frame_size = hdr.frame_size;
439 
440  return 0;
441 }
442 
443 static int ac3_sync(uint64_t state, int *need_next_header, int *new_frame_start)
444 {
445  int err;
446  union {
447  uint64_t u64;
448  uint8_t u8[8 + AV_INPUT_BUFFER_PADDING_SIZE];
449  } tmp = { av_be2ne64(state) };
450  AC3HeaderInfo hdr;
451  GetBitContext gbc;
452 
453  if (tmp.u8[1] == 0x77 && tmp.u8[2] == 0x0b) {
454  FFSWAP(uint8_t, tmp.u8[1], tmp.u8[2]);
455  FFSWAP(uint8_t, tmp.u8[3], tmp.u8[4]);
456  FFSWAP(uint8_t, tmp.u8[5], tmp.u8[6]);
457  }
458 
459  init_get_bits(&gbc, tmp.u8+8-AC3_HEADER_SIZE, 54);
460  err = ff_ac3_parse_header(&gbc, &hdr);
461 
462  if(err < 0)
463  return 0;
464 
465  *new_frame_start = (hdr.frame_type != EAC3_FRAME_TYPE_DEPENDENT);
466  *need_next_header = *new_frame_start || (hdr.frame_type != EAC3_FRAME_TYPE_AC3_CONVERT);
467  return hdr.frame_size;
468 }
469 
470 static av_cold int ac3_parse_init(AVCodecParserContext *s1)
471 {
473  s->header_size = AC3_HEADER_SIZE;
474  s->crc_ctx = av_crc_get_table(AV_CRC_16_ANSI);
475  s->sync = ac3_sync;
476  return 0;
477 }
478 
479 
482  .priv_data_size = sizeof(AACAC3ParseContext),
483  .parser_init = ac3_parse_init,
484  .parser_parse = ff_aac_ac3_parse,
485  .parser_close = ff_parse_close,
486 };
487 
488 #else
489 
490 int avpriv_ac3_parse_header(AC3HeaderInfo **phdr, const uint8_t *buf,
491  size_t size)
492 {
493  return AVERROR(ENOSYS);
494 }
495 
496 int av_ac3_parse_header(const uint8_t *buf, size_t size,
497  uint8_t *bitstream_id, uint16_t *frame_size)
498 {
499  return AVERROR(ENOSYS);
500 }
501 #endif
AC3HeaderInfo::lfe_mix_level
uint8_t lfe_mix_level
Definition: ac3_parser_internal.h:78
EAC3_SR_CODE_REDUCED
#define EAC3_SR_CODE_REDUCED
Definition: ac3defs.h:37
skip_bits_long
static void skip_bits_long(GetBitContext *s, int n)
Skips the specified number of bits.
Definition: get_bits.h:261
AC3HeaderInfo::center_mix_level
int center_mix_level
Center mix level index.
Definition: ac3_parser_internal.h:47
AV_CODEC_ID_AC3
@ AV_CODEC_ID_AC3
Definition: codec_id.h:452
av_clip
#define av_clip
Definition: common.h:100
AC3HeaderInfo::frame_type
uint8_t frame_type
Definition: ac3_parser_internal.h:45
AC3HeaderInfo::dolby_surround_mode
int dolby_surround_mode
Definition: ac3_parser_internal.h:52
show_bits_long
static unsigned int show_bits_long(GetBitContext *s, int n)
Show 0-32 bits.
Definition: get_bits.h:478
AC3_HEADER_SIZE
#define AC3_HEADER_SIZE
Definition: ac3_parser.c:36
ff_ac3_channel_layout_tab
const uint16_t ff_ac3_channel_layout_tab[8]
Map audio coding mode (acmod) to channel layout mask.
Definition: ac3_channel_layout_tab.h:31
AVERROR
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFrame structure Format for each input and each output the list of supported formats For video that means pixel format For audio that means channel sample they are references to shared objects When the negotiation mechanism computes the intersection of the formats supported at each end of a all references to both lists are replaced with a reference to the intersection And when a single format is eventually chosen for a link amongst the remaining all references to the list are updated That means that if a filter requires that its input and output have the same format amongst a supported all it has to do is use a reference to the same list of formats query_formats can leave some formats unset and return AVERROR(EAGAIN) to cause the negotiation mechanism toagain later. That can be used by filters with complex requirements to use the format negotiated on one link to set the formats supported on another. Frame references ownership and permissions
state
static struct @508 state
av_popcount64
#define av_popcount64
Definition: common.h:157
int64_t
long long int64_t
Definition: coverity.c:34
get_bits_count
static int get_bits_count(const GetBitContext *s)
Definition: get_bits.h:249
aac_ac3_parser.h
av_be2ne64
#define av_be2ne64(x)
Definition: bswap.h:90
ff_parse_close
void ff_parse_close(AVCodecParserContext *s)
Definition: parser.c:290
AC3HeaderInfo::lfe_mix_level_exists
uint8_t lfe_mix_level_exists
Definition: ac3_parser_internal.h:77
ff_ac3_channels_tab
const uint8_t ff_ac3_channels_tab[8]
Map audio coding mode (acmod) to number of full-bandwidth channels.
Definition: ac3tab.c:81
FFMAX
#define FFMAX(a, b)
Definition: macros.h:47
ac3_parser.h
EAC3_FRAME_TYPE_RESERVED
@ EAC3_FRAME_TYPE_RESERVED
Definition: ac3defs.h:114
init_get_bits
static int init_get_bits(GetBitContext *s, const uint8_t *buffer, int bit_size)
Initialize GetBitContext.
Definition: get_bits.h:497
av_ac3_parse_header
int av_ac3_parse_header(const uint8_t *buf, size_t size, uint8_t *bitstream_id, uint16_t *frame_size)
Extract the bitstream ID and the frame size from AC-3 data.
Definition: ac3_parser.c:496
AC3HeaderInfo::heavy_dynamic_range
uint8_t heavy_dynamic_range[2]
Definition: ac3_parser_internal.h:72
AC3HeaderInfo::center_mix_level_ltrt
uint8_t center_mix_level_ltrt
Center mix level index.
Definition: ac3_parser_internal.h:73
skip_bits
static void skip_bits(GetBitContext *s, int n)
Definition: get_bits.h:364
AC3_PARSE_ERROR_FRAME_TYPE
@ AC3_PARSE_ERROR_FRAME_TYPE
Definition: ac3_parser_internal.h:90
get_bits
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
Definition: get_bits.h:318
AC3HeaderInfo::complexity_index_type_a
uint8_t complexity_index_type_a
Definition: ac3_parser_internal.h:81
AC3HeaderInfo::channel_layout
uint64_t channel_layout
Definition: ac3_parser_internal.h:63
GetBitContext
Definition: get_bits.h:108
AC3HeaderInfo
Definition: ac3_parser_internal.h:34
AC3HeaderInfo::frame_size
uint16_t frame_size
Definition: ac3_parser_internal.h:62
EAC3_FRAME_TYPE_DEPENDENT
@ EAC3_FRAME_TYPE_DEPENDENT
Definition: ac3defs.h:112
AC3HeaderInfo::channel_mode
uint8_t channel_mode
Definition: ac3_parser_internal.h:43
AC3HeaderInfo::compression_exists
uint8_t compression_exists[2]
Definition: ac3_parser_internal.h:71
av_cold
#define av_cold
Definition: attributes.h:90
init_get_bits8
static int init_get_bits8(GetBitContext *s, const uint8_t *buffer, int byte_size)
Initialize GetBitContext.
Definition: get_bits.h:528
AC3HeaderInfo::sync_word
uint16_t sync_word
Definition: ac3_parser_internal.h:38
AV_CH_LOW_FREQUENCY
#define AV_CH_LOW_FREQUENCY
Definition: channel_layout.h:178
s
#define s(width, name)
Definition: cbs_vp9.c:198
frame_size
int frame_size
Definition: mxfenc.c:2446
AC3_PARSE_ERROR_SYNC
@ AC3_PARSE_ERROR_SYNC
Definition: ac3_parser_internal.h:86
AC3HeaderInfo::crc1
uint16_t crc1
Definition: ac3_parser_internal.h:39
EAC3_FRAME_TYPE_INDEPENDENT
@ EAC3_FRAME_TYPE_INDEPENDENT
Definition: ac3defs.h:111
get_bits.h
channel_map
static const uint8_t channel_map[8][8]
Definition: atrac3plusdec.c:52
AC3HeaderInfo::sample_rate
uint16_t sample_rate
Definition: ac3_parser_internal.h:59
AV_CRC_16_ANSI
@ AV_CRC_16_ANSI
Definition: crc.h:50
ff_aac_ac3_parse
int ff_aac_ac3_parse(AVCodecParserContext *s1, AVCodecContext *avctx, const uint8_t **poutbuf, int *poutbuf_size, const uint8_t *buf, int buf_size)
Definition: aac_ac3_parser.c:32
ac3defs.h
tmp
static uint8_t tmp[20]
Definition: aes_ctr.c:47
ff_ac3_parser
const AVCodecParser ff_ac3_parser
get_bits1
static unsigned int get_bits1(GetBitContext *s)
Definition: get_bits.h:371
AC3HeaderInfo::dolby_surround_ex_mode
uint8_t dolby_surround_ex_mode
Definition: ac3_parser_internal.h:76
AC3HeaderInfo::substreamid
int substreamid
substream identification
Definition: ac3_parser_internal.h:46
AC3HeaderInfo::eac3_extension_type_a
uint8_t eac3_extension_type_a
Definition: ac3_parser_internal.h:80
AACAC3ParseContext
Definition: aac_ac3_parser.h:31
AC3HeaderInfo::num_blocks
int num_blocks
number of audio blocks
Definition: ac3_parser_internal.h:51
AC3_DSURMOD_NOTINDICATED
@ AC3_DSURMOD_NOTINDICATED
Definition: ac3defs.h:80
ff_eac3_custom_channel_map_locations
const uint64_t ff_eac3_custom_channel_map_locations[16][2]
Definition: ac3tab.c:164
AV_CODEC_ID_EAC3
@ AV_CODEC_ID_EAC3
Definition: codec_id.h:489
EAC3_FRAME_TYPE_AC3_CONVERT
@ EAC3_FRAME_TYPE_AC3_CONVERT
Definition: ac3defs.h:113
AC3HeaderInfo::channels
uint8_t channels
Definition: ac3_parser_internal.h:61
AC3_PARSE_ERROR_CHANNEL_MAP
@ AC3_PARSE_ERROR_CHANNEL_MAP
Definition: ac3_parser_internal.h:92
ac3_parser_internal.h
AC3_CHMODE_STEREO
@ AC3_CHMODE_STEREO
Definition: ac3defs.h:70
AC3HeaderInfo::channel_map_present
uint8_t channel_map_present
Definition: ac3_parser_internal.h:49
AVCodecParser::codec_ids
int codec_ids[7]
Definition: avcodec.h:2727
AC3HeaderInfo::lfe_on
uint8_t lfe_on
Definition: ac3_parser_internal.h:44
size
int size
Definition: twinvq_data.h:10344
AC3HeaderInfo::dolby_headphone_mode
uint8_t dolby_headphone_mode
Definition: ac3_parser_internal.h:75
AC3HeaderInfo::preferred_downmix
uint8_t preferred_downmix
Definition: ac3_parser_internal.h:79
av_crc_get_table
const AVCRC * av_crc_get_table(AVCRCId crc_id)
Get an initialized standard CRC table.
Definition: crc.c:374
AC3HeaderInfo::bitstream_mode
uint8_t bitstream_mode
Definition: ac3_parser_internal.h:42
skip_bits1
static void skip_bits1(GetBitContext *s)
Definition: get_bits.h:396
AC3HeaderInfo::ac3_bit_rate_code
int8_t ac3_bit_rate_code
Definition: ac3_parser_internal.h:64
ff_ac3_sample_rate_tab
const int ff_ac3_sample_rate_tab[]
Definition: ac3tab.c:96
AC3_PARSE_ERROR_BSID
@ AC3_PARSE_ERROR_BSID
Definition: ac3_parser_internal.h:87
i
#define i(width, name, range_min, range_max)
Definition: cbs_h2645.c:256
avpriv_ac3_parse_header
int avpriv_ac3_parse_header(AC3HeaderInfo **phdr, const uint8_t *buf, size_t size)
Definition: ac3_parser.c:490
ff_ac3_find_syncword
int ff_ac3_find_syncword(const uint8_t *buf, int buf_size)
FFMIN
#define FFMIN(a, b)
Definition: macros.h:49
AC3HeaderInfo::channel_map
uint16_t channel_map
Definition: ac3_parser_internal.h:50
av_mallocz
void * av_mallocz(size_t size)
Allocate a memory block with alignment suitable for all memory accesses (including vectors if availab...
Definition: mem.c:256
parser.h
ff_ac3_frame_size_tab
const uint16_t ff_ac3_frame_size_tab[38][3]
Possible frame sizes.
Definition: ac3tab.c:36
AC3_CHMODE_MONO
@ AC3_CHMODE_MONO
Definition: ac3defs.h:69
AVCodecParserContext
Definition: avcodec.h:2567
ret
ret
Definition: filter_design.txt:187
FFSWAP
#define FFSWAP(type, a, b)
Definition: macros.h:52
AC3_CHMODE_2F2R
@ AC3_CHMODE_2F2R
Definition: ac3defs.h:74
ff_ac3_parse_header
int ff_ac3_parse_header(GetBitContext *gbc, AC3HeaderInfo *hdr)
Parse AC-3 frame header.
AV_INPUT_BUFFER_PADDING_SIZE
#define AV_INPUT_BUFFER_PADDING_SIZE
Definition: defs.h:40
channel_layout.h
EAC3_MAX_CHANNELS
#define EAC3_MAX_CHANNELS
maximum number of channels in EAC3
Definition: ac3defs.h:25
ff_ac3_bitrate_tab
const uint16_t ff_ac3_bitrate_tab[19]
Definition: ac3tab.c:99
AC3_PARSE_ERROR_SAMPLE_RATE
@ AC3_PARSE_ERROR_SAMPLE_RATE
Definition: ac3_parser_internal.h:88
AC3HeaderInfo::bitstream_id
uint8_t bitstream_id
Definition: ac3_parser_internal.h:41
mem.h
AVCodecParser
Definition: avcodec.h:2726
AC3_PARSE_ERROR_FRAME_SIZE
@ AC3_PARSE_ERROR_FRAME_SIZE
Definition: ac3_parser_internal.h:89
AVERROR_INVALIDDATA
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
Definition: error.h:61
AVCodecParserContext::priv_data
void * priv_data
Definition: avcodec.h:2568
AC3HeaderInfo::sr_shift
uint8_t sr_shift
Definition: ac3_parser_internal.h:58
AC3HeaderInfo::dialog_normalization
int8_t dialog_normalization[2]
Definition: ac3_parser_internal.h:70
ac3tab.h
AC3HeaderInfo::sr_code
uint8_t sr_code
Definition: ac3_parser_internal.h:40
AC3HeaderInfo::bit_rate
uint32_t bit_rate
Definition: ac3_parser_internal.h:60
AC3HeaderInfo::surround_mix_level
int surround_mix_level
Surround mix level index.
Definition: ac3_parser_internal.h:48
AC3HeaderInfo::surround_mix_level_ltrt
uint8_t surround_mix_level_ltrt
Surround mix level index.
Definition: ac3_parser_internal.h:74