FFmpeg
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 #include "parser_internal.h"
35 
36 
37 #define AC3_HEADER_SIZE 7
38 
39 #if CONFIG_AC3_PARSER
40 
41 static const uint8_t eac3_blocks[4] = {
42  1, 2, 3, 6
43 };
44 
45 /**
46  * Table for center mix levels
47  * reference: Section 5.4.2.4 cmixlev
48  */
49 static const uint8_t center_levels[4] = { 4, 5, 6, 5 };
50 
51 /**
52  * Table for surround mix levels
53  * reference: Section 5.4.2.5 surmixlev
54  */
55 static const uint8_t surround_levels[4] = { 4, 6, 7, 6 };
56 
57 int ff_ac3_find_syncword(const uint8_t *buf, int buf_size)
58 {
59  int i;
60 
61  for (i = 1; i < buf_size; i += 2) {
62  if (buf[i] == 0x77 || buf[i] == 0x0B) {
63  if ((buf[i] ^ buf[i-1]) == (0x77 ^ 0x0B)) {
64  i--;
65  break;
66  } else if ((buf[i] ^ buf[i+1]) == (0x77 ^ 0x0B)) {
67  break;
68  }
69  }
70  }
71  if (i >= buf_size)
72  return AVERROR_INVALIDDATA;
73 
74  return i;
75 }
76 
77 /**
78  * Parse the 'sync info' and 'bit stream info' from the AC-3 bitstream.
79  * GetBitContext within AC3DecodeContext must point to
80  * the start of the synchronized AC-3 bitstream.
81  */
82 static int ac3_parse_header(GetBitContext *gbc, AC3HeaderInfo *hdr)
83 {
84  /* read the rest of the bsi. read twice for dual mono mode. */
85  for (int i = 0; i < (hdr->channel_mode ? 1 : 2); i++) {
86  hdr->dialog_normalization[i] = -get_bits(gbc, 5);
87  hdr->compression_exists[i] = get_bits1(gbc);
88  if (hdr->compression_exists[i])
89  hdr->heavy_dynamic_range[i] = get_bits(gbc, 8);
90  if (get_bits1(gbc))
91  skip_bits(gbc, 8); //skip language code
92  if (get_bits1(gbc))
93  skip_bits(gbc, 7); //skip audio production information
94  }
95 
96  skip_bits(gbc, 2); //skip copyright bit and original bitstream bit
97 
98  /* skip the timecodes or parse the Alternate Bit Stream Syntax */
99  if (hdr->bitstream_id != 6) {
100  if (get_bits1(gbc))
101  skip_bits(gbc, 14); //skip timecode1
102  if (get_bits1(gbc))
103  skip_bits(gbc, 14); //skip timecode2
104  } else {
105  if (get_bits1(gbc)) {
106  hdr->preferred_downmix = get_bits(gbc, 2);
107  hdr->center_mix_level_ltrt = get_bits(gbc, 3);
108  hdr->surround_mix_level_ltrt = av_clip(get_bits(gbc, 3), 3, 7);
109  hdr->center_mix_level = get_bits(gbc, 3);
110  hdr->surround_mix_level = av_clip(get_bits(gbc, 3), 3, 7);
111  }
112  if (get_bits1(gbc)) {
113  hdr->dolby_surround_ex_mode = get_bits(gbc, 2);
114  hdr->dolby_headphone_mode = get_bits(gbc, 2);
115  skip_bits(gbc, 10); // skip adconvtyp (1), xbsi2 (8), encinfo (1)
116  }
117  }
118 
119  /* skip additional bitstream info */
120  if (get_bits1(gbc)) {
121  int i = get_bits(gbc, 6);
122  do {
123  skip_bits(gbc, 8);
124  } while (i--);
125  }
126 
127  return 0;
128 }
129 
130 static int eac3_parse_header(GetBitContext *gbc, AC3HeaderInfo *hdr)
131 {
134  if (hdr->substreamid)
136 
137  skip_bits(gbc, 5); // skip bitstream id
138 
139  /* volume control params */
140  for (int i = 0; i < (hdr->channel_mode ? 1 : 2); i++) {
141  hdr->dialog_normalization[i] = -get_bits(gbc, 5);
142  hdr->compression_exists[i] = get_bits1(gbc);
143  if (hdr->compression_exists[i])
144  hdr->heavy_dynamic_range[i] = get_bits(gbc, 8);
145  }
146 
147  /* dependent stream channel map */
149  hdr->channel_map_present = get_bits1(gbc);
150  if (hdr->channel_map_present) {
151  int64_t channel_layout = 0;
152  int channel_map = get_bits(gbc, 16);
153 
154  for (int i = 0; i < 16; i++)
155  if (channel_map & (1 << (EAC3_MAX_CHANNELS - i - 1)))
156  channel_layout |= ff_eac3_custom_channel_map_locations[i][1];
157 
158  if (av_popcount64(channel_layout) > EAC3_MAX_CHANNELS) {
160  }
161  hdr->channel_map = channel_map;
162  }
163  }
164 
165  /* mixing metadata */
166  if (get_bits1(gbc)) {
167  /* center and surround mix levels */
168  if (hdr->channel_mode > AC3_CHMODE_STEREO) {
169  hdr->preferred_downmix = get_bits(gbc, 2);
170  if (hdr->channel_mode & 1) {
171  /* if three front channels exist */
172  hdr->center_mix_level_ltrt = get_bits(gbc, 3);
173  hdr->center_mix_level = get_bits(gbc, 3);
174  }
175  if (hdr->channel_mode & 4) {
176  /* if a surround channel exists */
177  hdr->surround_mix_level_ltrt = av_clip(get_bits(gbc, 3), 3, 7);
178  hdr->surround_mix_level = av_clip(get_bits(gbc, 3), 3, 7);
179  }
180  }
181 
182  /* lfe mix level */
183  if (hdr->lfe_on && (hdr->lfe_mix_level_exists = get_bits1(gbc))) {
184  hdr->lfe_mix_level = get_bits(gbc, 5);
185  }
186 
187  /* info for mixing with other streams and substreams */
189  for (int i = 0; i < (hdr->channel_mode ? 1 : 2); i++) {
190  // TODO: apply program scale factor
191  if (get_bits1(gbc)) {
192  skip_bits(gbc, 6); // skip program scale factor
193  }
194  }
195  if (get_bits1(gbc)) {
196  skip_bits(gbc, 6); // skip external program scale factor
197  }
198  /* skip mixing parameter data */
199  switch(get_bits(gbc, 2)) {
200  case 1: skip_bits(gbc, 5); break;
201  case 2: skip_bits(gbc, 12); break;
202  case 3: {
203  int mix_data_size = (get_bits(gbc, 5) + 2) << 3;
204  skip_bits_long(gbc, mix_data_size);
205  break;
206  }
207  }
208  /* skip pan information for mono or dual mono source */
209  if (hdr->channel_mode < AC3_CHMODE_STEREO) {
210  for (int i = 0; i < (hdr->channel_mode ? 1 : 2); i++) {
211  if (get_bits1(gbc)) {
212  /* note: this is not in the ATSC A/52B specification
213  reference: ETSI TS 102 366 V1.1.1
214  section: E.1.3.1.25 */
215  skip_bits(gbc, 8); // skip pan mean direction index
216  skip_bits(gbc, 6); // skip reserved paninfo bits
217  }
218  }
219  }
220  /* skip mixing configuration information */
221  if (get_bits1(gbc)) {
222  for (int i = 0; i < hdr->num_blocks; i++) {
223  if (hdr->num_blocks == 1 || get_bits1(gbc)) {
224  skip_bits(gbc, 5);
225  }
226  }
227  }
228  }
229  }
230 
231  /* informational metadata */
232  if (get_bits1(gbc)) {
233  hdr->bitstream_mode = get_bits(gbc, 3);
234  skip_bits(gbc, 2); // skip copyright bit and original bitstream bit
235  if (hdr->channel_mode == AC3_CHMODE_STEREO) {
236  hdr->dolby_surround_mode = get_bits(gbc, 2);
237  hdr->dolby_headphone_mode = get_bits(gbc, 2);
238  }
239  if (hdr->channel_mode >= AC3_CHMODE_2F2R) {
240  hdr->dolby_surround_ex_mode = get_bits(gbc, 2);
241  }
242  for (int i = 0; i < (hdr->channel_mode ? 1 : 2); i++) {
243  if (get_bits1(gbc)) {
244  skip_bits(gbc, 8); // skip mix level, room type, and A/D converter type
245  }
246  }
247  if (hdr->sr_code != EAC3_SR_CODE_REDUCED) {
248  skip_bits1(gbc); // skip source sample rate code
249  }
250  }
251 
252  /* converter synchronization flag
253  If frames are less than six blocks, this bit should be turned on
254  once every 6 blocks to indicate the start of a frame set.
255  reference: RFC 4598, Section 2.1.3 Frame Sets */
256  if (hdr->frame_type == EAC3_FRAME_TYPE_INDEPENDENT && hdr->num_blocks != 6) {
257  skip_bits1(gbc); // skip converter synchronization flag
258  }
259 
260  /* original frame size code if this stream was converted from AC-3 */
262  (hdr->num_blocks == 6 || get_bits1(gbc))) {
263  skip_bits(gbc, 6); // skip frame size code
264  }
265 
266  /* additional bitstream info */
267  if (get_bits1(gbc)) {
268  int addbsil = get_bits(gbc, 6);
269  for (int i = 0; i < addbsil + 1; i++) {
270  if (i == 0) {
271  /* In this 8 bit chunk, the LSB is equal to flag_ec3_extension_type_a
272  which can be used to detect Atmos presence */
273  skip_bits(gbc, 7);
274  hdr->eac3_extension_type_a = get_bits1(gbc);
275  if (hdr->eac3_extension_type_a) {
276  hdr->complexity_index_type_a = get_bits(gbc, 8);
277  i++;
278  }
279  } else {
280  skip_bits(gbc, 8); // skip additional bit stream info
281  }
282  }
283  }
284 
285  return 0;
286 }
287 
289 {
290  int frame_size_code;
291 
292  memset(hdr, 0, sizeof(*hdr));
293 
294  hdr->sync_word = get_bits(gbc, 16);
295  if(hdr->sync_word != 0x0B77)
296  return AC3_PARSE_ERROR_SYNC;
297 
298  /* read ahead to bsid to distinguish between AC-3 and E-AC-3 */
299  hdr->bitstream_id = show_bits_long(gbc, 29) & 0x1F;
300  if(hdr->bitstream_id > 16)
301  return AC3_PARSE_ERROR_BSID;
302 
303  hdr->num_blocks = 6;
304  hdr->ac3_bit_rate_code = -1;
305 
306  /* set default mix levels */
307  hdr->center_mix_level = 5; // -4.5dB
308  hdr->surround_mix_level = 6; // -6.0dB
309 
310  /* set default dolby surround mode */
312 
313  if(hdr->bitstream_id <= 10) {
314  /* Normal AC-3 */
315  hdr->crc1 = get_bits(gbc, 16);
316  hdr->sr_code = get_bits(gbc, 2);
317  if(hdr->sr_code == 3)
319 
320  frame_size_code = get_bits(gbc, 6);
321  if(frame_size_code > 37)
323 
324  hdr->ac3_bit_rate_code = (frame_size_code >> 1);
325 
326  skip_bits(gbc, 5); // skip bsid, already got it
327 
328  hdr->bitstream_mode = get_bits(gbc, 3);
329  hdr->channel_mode = get_bits(gbc, 3);
330 
331  if(hdr->channel_mode == AC3_CHMODE_STEREO) {
332  hdr->dolby_surround_mode = get_bits(gbc, 2);
333  } else {
334  if((hdr->channel_mode & 1) && hdr->channel_mode != AC3_CHMODE_MONO)
335  hdr-> center_mix_level = center_levels[get_bits(gbc, 2)];
336  if(hdr->channel_mode & 4)
337  hdr->surround_mix_level = surround_levels[get_bits(gbc, 2)];
338  }
339  hdr->lfe_on = get_bits1(gbc);
340 
341  hdr->sr_shift = FFMAX(hdr->bitstream_id, 8) - 8;
342  hdr->sample_rate = ff_ac3_sample_rate_tab[hdr->sr_code] >> hdr->sr_shift;
343  hdr->bit_rate = (ff_ac3_bitrate_tab[hdr->ac3_bit_rate_code] * 1000) >> hdr->sr_shift;
344  hdr->channels = ff_ac3_channels_tab[hdr->channel_mode] + hdr->lfe_on;
345  hdr->frame_size = ff_ac3_frame_size_tab[frame_size_code][hdr->sr_code] * 2;
346  hdr->frame_type = EAC3_FRAME_TYPE_AC3_CONVERT; //EAC3_FRAME_TYPE_INDEPENDENT;
347  hdr->substreamid = 0;
348 
349  int ret = ac3_parse_header(gbc, hdr);
350  if (ret < 0)
351  return ret;
352  } else {
353  /* Enhanced AC-3 */
354  hdr->crc1 = 0;
355  hdr->frame_type = get_bits(gbc, 2);
358 
359  hdr->substreamid = get_bits(gbc, 3);
360 
361  hdr->frame_size = (get_bits(gbc, 11) + 1) << 1;
362  if(hdr->frame_size < AC3_HEADER_SIZE)
364 
365  hdr->sr_code = get_bits(gbc, 2);
366  if (hdr->sr_code == 3) {
367  int sr_code2 = get_bits(gbc, 2);
368  if(sr_code2 == 3)
370  hdr->sample_rate = ff_ac3_sample_rate_tab[sr_code2] / 2;
371  hdr->sr_shift = 1;
372  } else {
373  hdr->num_blocks = eac3_blocks[get_bits(gbc, 2)];
375  hdr->sr_shift = 0;
376  }
377 
378  hdr->channel_mode = get_bits(gbc, 3);
379  hdr->lfe_on = get_bits1(gbc);
380 
381  hdr->bit_rate = 8LL * hdr->frame_size * hdr->sample_rate /
382  (hdr->num_blocks * 256);
383  hdr->channels = ff_ac3_channels_tab[hdr->channel_mode] + hdr->lfe_on;
384 
385  int ret = eac3_parse_header(gbc, hdr);
386  if (ret < 0)
387  return ret;
388  }
390  if (hdr->lfe_on)
392 
393  return 0;
394 }
395 
396 // TODO: Better way to pass AC3HeaderInfo fields to mov muxer.
397 int avpriv_ac3_parse_header(AC3HeaderInfo **phdr, const uint8_t *buf,
398  size_t size)
399 {
400  GetBitContext gb;
401  AC3HeaderInfo *hdr;
402  int err;
403 
404  if (!*phdr)
405  *phdr = av_mallocz(sizeof(AC3HeaderInfo));
406  if (!*phdr)
407  return AVERROR(ENOMEM);
408  hdr = *phdr;
409 
410  err = init_get_bits8(&gb, buf, size);
411  if (err < 0)
412  return AVERROR_INVALIDDATA;
413  err = ff_ac3_parse_header(&gb, hdr);
414  if (err < 0)
415  return AVERROR_INVALIDDATA;
416 
417  return get_bits_count(&gb);
418 }
419 
420 int av_ac3_parse_header(const uint8_t *buf, size_t size,
421  uint8_t *bitstream_id, uint16_t *frame_size)
422 {
423  GetBitContext gb;
424  AC3HeaderInfo hdr;
425  uint8_t tmp[32 + AV_INPUT_BUFFER_PADDING_SIZE];
426  int err;
427 
428  size = FFMIN(32, size);
429  memcpy(tmp, buf, size);
430  memset(tmp + size, 0, AV_INPUT_BUFFER_PADDING_SIZE);
431  err = init_get_bits8(&gb, tmp, size);
432  if (err < 0)
433  return AVERROR_INVALIDDATA;
434  err = ff_ac3_parse_header(&gb, &hdr);
435  if (err < 0)
436  return AVERROR_INVALIDDATA;
437 
438  *bitstream_id = hdr.bitstream_id;
439  *frame_size = hdr.frame_size;
440 
441  return 0;
442 }
443 
444 static int ac3_sync(uint64_t state, int *need_next_header, int *new_frame_start)
445 {
446  int err;
447  union {
448  uint64_t u64;
449  uint8_t u8[8 + AV_INPUT_BUFFER_PADDING_SIZE];
450  } tmp = { av_be2ne64(state) };
451  AC3HeaderInfo hdr;
452  GetBitContext gbc;
453 
454  if (tmp.u8[1] == 0x77 && tmp.u8[2] == 0x0b) {
455  FFSWAP(uint8_t, tmp.u8[1], tmp.u8[2]);
456  FFSWAP(uint8_t, tmp.u8[3], tmp.u8[4]);
457  FFSWAP(uint8_t, tmp.u8[5], tmp.u8[6]);
458  }
459 
460  init_get_bits(&gbc, tmp.u8+8-AC3_HEADER_SIZE, 54);
461  err = ff_ac3_parse_header(&gbc, &hdr);
462 
463  if(err < 0)
464  return 0;
465 
466  *new_frame_start = (hdr.frame_type != EAC3_FRAME_TYPE_DEPENDENT);
467  *need_next_header = *new_frame_start || (hdr.frame_type != EAC3_FRAME_TYPE_AC3_CONVERT);
468  return hdr.frame_size;
469 }
470 
471 static av_cold int ac3_parse_init(AVCodecParserContext *s1)
472 {
474  s->header_size = AC3_HEADER_SIZE;
475  s->crc_ctx = av_crc_get_table(AV_CRC_16_ANSI);
476  s->sync = ac3_sync;
477  return 0;
478 }
479 
480 
483  .priv_data_size = sizeof(AACAC3ParseContext),
484  .init = ac3_parse_init,
487 };
488 
489 #else
490 
491 int avpriv_ac3_parse_header(AC3HeaderInfo **phdr, const uint8_t *buf,
492  size_t size)
493 {
494  return AVERROR(ENOSYS);
495 }
496 
497 int av_ac3_parse_header(const uint8_t *buf, size_t size,
498  uint8_t *bitstream_id, uint16_t *frame_size)
499 {
500  return AVERROR(ENOSYS);
501 }
502 #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:276
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:462
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:493
AC3_HEADER_SIZE
#define AC3_HEADER_SIZE
Definition: ac3_parser.c:37
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
av_popcount64
#define av_popcount64
Definition: common.h:157
ff_parse_close
av_cold void ff_parse_close(AVCodecParserContext *s)
Definition: parser.c:298
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:250
aac_ac3_parser.h
parser_internal.h
av_be2ne64
#define av_be2ne64(x)
Definition: bswap.h:90
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:512
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:497
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:379
close
static av_cold void close(AVCodecParserContext *s)
Definition: apv_parser.c:136
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:333
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:109
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:106
init_get_bits8
static int init_get_bits8(GetBitContext *s, const uint8_t *buffer, int byte_size)
Initialize GetBitContext.
Definition: get_bits.h:539
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:2487
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
tmp
static uint8_t tmp[40]
Definition: aes_ctr.c:52
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
state
static struct @541 state
get_bits1
static unsigned int get_bits1(GetBitContext *s)
Definition: get_bits.h:386
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
ff_ac3_parser
const FFCodecParser ff_ac3_parser
AC3HeaderInfo::eac3_extension_type_a
uint8_t eac3_extension_type_a
Definition: ac3_parser_internal.h:80
AACAC3ParseContext
Definition: aac_ac3_parser.h:31
parse
static int parse(AVCodecParserContext *s, AVCodecContext *avctx, const uint8_t **poutbuf, int *poutbuf_size, const uint8_t *buf, int buf_size)
Definition: apv_parser.c:46
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:499
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
init
int(* init)(AVBSFContext *ctx)
Definition: dts2pts.c:368
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
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:411
FFCodecParser
Definition: parser_internal.h:29
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:491
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
PARSER_CODEC_LIST
#define PARSER_CODEC_LIST(...)
Definition: parser_internal.h:76
AC3_CHMODE_MONO
@ AC3_CHMODE_MONO
Definition: ac3defs.h:69
AVCodecParserContext
Definition: avcodec.h:2575
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
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:2576
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