From: Bartlomiej Wolowiec Date: Fri, 28 Mar 2008 19:59:58 +0000 (+0000) Subject: removal of stream_type in AACAC3ParseContext and adding AACAC3FrameFlag X-Git-Tag: v0.5~5313 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=be1e2a2bfa592ff14355c6b97e90c530e2c0fcc0;p=coroid%2Fffmpeg_saccubus.git removal of stream_type in AACAC3ParseContext and adding AACAC3FrameFlag Originally committed as revision 12622 to svn://svn.ffmpeg.org/ffmpeg/trunk --- diff --git a/libavcodec/aac_ac3_parser.c b/libavcodec/aac_ac3_parser.c index c72965a76..1193647e9 100644 --- a/libavcodec/aac_ac3_parser.c +++ b/libavcodec/aac_ac3_parser.c @@ -29,6 +29,7 @@ int ff_aac_ac3_parse(AVCodecParserContext *s1, 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 @@ int ff_aac_ac3_parse(AVCodecParserContext *s1, 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 --git a/libavcodec/aac_ac3_parser.h b/libavcodec/aac_ac3_parser.h index 49982500c..ec9ce48a4 100644 --- a/libavcodec/aac_ac3_parser.h +++ b/libavcodec/aac_ac3_parser.h @@ -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 --git a/libavcodec/aac_parser.c b/libavcodec/aac_parser.c index 45c8b95e7..3a20129c0 100644 --- a/libavcodec/aac_parser.c +++ b/libavcodec/aac_parser.c @@ -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 const int aac_channels[8] = { }; -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 @@ static int aac_sync(AACAC3ParseContext *hdr_info) 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 int aac_sync(AACAC3ParseContext *hdr_info) 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 --git a/libavcodec/ac3_parser.c b/libavcodec/ac3_parser.c index 7f0818b60..ea7f59208 100644 --- a/libavcodec/ac3_parser.c +++ b/libavcodec/ac3_parser.c @@ -123,7 +123,7 @@ int ff_ac3_parse_header(const uint8_t buf[7], AC3HeaderInfo *hdr) 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 @@ static int ac3_sync(AACAC3ParseContext *hdr_info) 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; }