# HG changeset patch # User bwolowiec # Date 1206734398 0 # Node ID 04763b6fd4f014b331acf7fdf083596fa2d9c693 # Parent b8f886bce6f56c5929a76ffd561bcdf03e956b42 removal of stream_type in AACAC3ParseContext and adding AACAC3FrameFlag diff -r b8f886bce6f5 -r 04763b6fd4f0 aac_ac3_parser.c --- a/aac_ac3_parser.c Wed Mar 26 22:36:41 2008 +0000 +++ b/aac_ac3_parser.c Fri Mar 28 19:59:58 2008 +0000 @@ -29,6 +29,7 @@ const uint8_t *buf, int buf_size) { AACAC3ParseContext *s = s1->priv_data; + AACAC3FrameFlag frame_flag; const uint8_t *buf_ptr; int len; @@ -50,7 +51,7 @@ if (s->frame_size == 0) { if ((s->inbuf_ptr - s->inbuf) == s->header_size) { - len = s->sync(s); + len = s->sync(s, &frame_flag); if (len == 0) { /* no sync found : move by one byte (inefficient, but simple!) */ memmove(s->inbuf, s->inbuf + 1, s->header_size - 1); diff -r b8f886bce6f5 -r 04763b6fd4f0 aac_ac3_parser.h --- a/aac_ac3_parser.h Wed Mar 26 22:36:41 2008 +0000 +++ b/aac_ac3_parser.h Fri Mar 28 19:59:58 2008 +0000 @@ -26,18 +26,23 @@ #include #include "avcodec.h" +typedef enum{ + FRAME_COMPLETE, ///< Complete frame, ends previous frame + FRAME_START, ///< Frame start, ends previous frame + FRAME_CONTINUATION ///< Part of the previous frame +}AACAC3FrameFlag; + typedef struct AACAC3ParseContext { uint8_t *inbuf_ptr; int frame_size; int header_size; - int (*sync)(struct AACAC3ParseContext *hdr_info); + int (*sync)(struct AACAC3ParseContext *hdr_info, AACAC3FrameFlag *flag); uint8_t inbuf[8192]; /* input buffer */ int channels; int sample_rate; int bit_rate; int samples; - uint8_t stream_type; } AACAC3ParseContext; int ff_aac_ac3_parse(AVCodecParserContext *s1, diff -r b8f886bce6f5 -r 04763b6fd4f0 aac_parser.c --- a/aac_parser.c Wed Mar 26 22:36:41 2008 +0000 +++ b/aac_parser.c Fri Mar 28 19:59:58 2008 +0000 @@ -23,7 +23,6 @@ #include "parser.h" #include "aac_ac3_parser.h" #include "bitstream.h" -#include "ac3.h" #define AAC_HEADER_SIZE 7 @@ -39,7 +38,7 @@ }; -static int aac_sync(AACAC3ParseContext *hdr_info) +static int aac_sync(AACAC3ParseContext *hdr_info, AACAC3FrameFlag *flag) { GetBitContext bits; int size, rdb, ch, sr; @@ -77,6 +76,7 @@ hdr_info->sample_rate = aac_sample_rates[sr]; hdr_info->samples = (rdb + 1) * 1024; hdr_info->bit_rate = size * 8 * hdr_info->sample_rate / hdr_info->samples; + *flag = FRAME_COMPLETE; return size; } @@ -84,7 +84,6 @@ static av_cold int aac_parse_init(AVCodecParserContext *s1) { AACAC3ParseContext *s = s1->priv_data; - s->stream_type = EAC3_STREAM_TYPE_INDEPENDENT; s->inbuf_ptr = s->inbuf; s->header_size = AAC_HEADER_SIZE; s->sync = aac_sync; diff -r b8f886bce6f5 -r 04763b6fd4f0 ac3_parser.c --- a/ac3_parser.c Wed Mar 26 22:36:41 2008 +0000 +++ b/ac3_parser.c Fri Mar 28 19:59:58 2008 +0000 @@ -123,7 +123,7 @@ return 0; } -static int ac3_sync(AACAC3ParseContext *hdr_info) +static int ac3_sync(AACAC3ParseContext *hdr_info, AACAC3FrameFlag *flag) { int err; AC3HeaderInfo hdr; @@ -137,6 +137,18 @@ hdr_info->bit_rate = hdr.bit_rate; hdr_info->channels = hdr.channels; hdr_info->samples = AC3_FRAME_SIZE; + + switch(hdr.stream_type){ + case EAC3_STREAM_TYPE_INDEPENDENT: + *flag = FRAME_START; + break; + case EAC3_STREAM_TYPE_DEPENDENT: + *flag = FRAME_CONTINUATION; + break; + case EAC3_STREAM_TYPE_AC3_CONVERT: + *flag = FRAME_COMPLETE; + break; + } return hdr.frame_size; }