aac_parser.c File Reference

#include "parser.h"
#include "aac_ac3_parser.h"
#include "bitstream.h"
#include "mpeg4audio.h"

Go to the source code of this file.

Defines

#define AAC_HEADER_SIZE   7

Functions

static int aac_sync (uint64_t state, AACAC3ParseContext *hdr_info, int *need_next_header, int *new_frame_start)
static av_cold int aac_parse_init (AVCodecParserContext *s1)

Variables

AVCodecParser aac_parser


Define Documentation

#define AAC_HEADER_SIZE   7

Definition at line 28 of file aac_parser.c.

Referenced by aac_parse_init(), and aac_sync().


Function Documentation

static av_cold int aac_parse_init ( AVCodecParserContext s1  )  [static]

Definition at line 76 of file aac_parser.c.

References AAC_HEADER_SIZE, aac_sync(), AACAC3ParseContext::header_size, s1, and AACAC3ParseContext::sync.

00077 {
00078     AACAC3ParseContext *s = s1->priv_data;
00079     s->header_size = AAC_HEADER_SIZE;
00080     s->sync = aac_sync;
00081     return 0;
00082 }

static int aac_sync ( uint64_t  state,
AACAC3ParseContext hdr_info,
int *  need_next_header,
int *  new_frame_start 
) [static]

Definition at line 30 of file aac_parser.c.

References AAC_HEADER_SIZE, be2me_64, AACAC3ParseContext::bit_rate, bits, AACAC3ParseContext::channels, ff_mpeg4audio_channels, ff_mpeg4audio_sample_rates, get_bits(), init_get_bits(), AACAC3ParseContext::sample_rate, AACAC3ParseContext::samples, size, skip_bits(), and skip_bits1().

Referenced by aac_parse_init().

00032 {
00033     GetBitContext bits;
00034     int size, rdb, ch, sr;
00035     uint64_t tmp = be2me_64(state);
00036 
00037     init_get_bits(&bits, ((uint8_t *)&tmp)+8-AAC_HEADER_SIZE, AAC_HEADER_SIZE * 8);
00038 
00039     if(get_bits(&bits, 12) != 0xfff)
00040         return 0;
00041 
00042     skip_bits1(&bits);          /* id */
00043     skip_bits(&bits, 2);        /* layer */
00044     skip_bits1(&bits);          /* protection_absent */
00045     skip_bits(&bits, 2);        /* profile_objecttype */
00046     sr = get_bits(&bits, 4);    /* sample_frequency_index */
00047     if(!ff_mpeg4audio_sample_rates[sr])
00048         return 0;
00049     skip_bits1(&bits);          /* private_bit */
00050     ch = get_bits(&bits, 3);    /* channel_configuration */
00051     if(!ff_mpeg4audio_channels[ch])
00052         return 0;
00053     skip_bits1(&bits);          /* original/copy */
00054     skip_bits1(&bits);          /* home */
00055 
00056     /* adts_variable_header */
00057     skip_bits1(&bits);          /* copyright_identification_bit */
00058     skip_bits1(&bits);          /* copyright_identification_start */
00059     size = get_bits(&bits, 13); /* aac_frame_length */
00060     if(size < AAC_HEADER_SIZE)
00061         return 0;
00062 
00063     skip_bits(&bits, 11);       /* adts_buffer_fullness */
00064     rdb = get_bits(&bits, 2);   /* number_of_raw_data_blocks_in_frame */
00065 
00066     hdr_info->channels = ff_mpeg4audio_channels[ch];
00067     hdr_info->sample_rate = ff_mpeg4audio_sample_rates[sr];
00068     hdr_info->samples = (rdb + 1) * 1024;
00069     hdr_info->bit_rate = size * 8 * hdr_info->sample_rate / hdr_info->samples;
00070 
00071     *need_next_header = 0;
00072     *new_frame_start  = 1;
00073     return size;
00074 }


Variable Documentation

AVCodecParser aac_parser

Initial value:

Definition at line 85 of file aac_parser.c.


Generated on Thu Aug 28 04:44:30 2008 for libextractor by  doxygen 1.5.1