Mercurial > libavcodec.hg
changeset 6539:04763b6fd4f0 libavcodec
removal of stream_type in AACAC3ParseContext and adding AACAC3FrameFlag
author | bwolowiec |
---|---|
date | Fri, 28 Mar 2008 19:59:58 +0000 |
parents | b8f886bce6f5 |
children | b0d44aec1ec0 |
files | aac_ac3_parser.c aac_ac3_parser.h aac_parser.c ac3_parser.c |
diffstat | 4 files changed, 24 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- 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);
--- 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 <stdint.h> #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,
--- 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;
--- 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; }