Mercurial > libavcodec.hg
diff parser.c @ 3395:adccbf4a1040 libavcodec
CAVS decoder by (Stefan Gehrer stefan.gehrer gmx.de)
author | michael |
---|---|
date | Mon, 03 Jul 2006 00:16:45 +0000 |
parents | f9d739057d6c |
children | b7826511f7b6 |
line wrap: on
line diff
--- a/parser.c Sun Jul 02 22:01:31 2006 +0000 +++ b/parser.c Mon Jul 03 00:16:45 2006 +0000 @@ -533,6 +533,30 @@ return next; } +static int cavsvideo_parse(AVCodecParserContext *s, + AVCodecContext *avctx, + uint8_t **poutbuf, int *poutbuf_size, + const uint8_t *buf, int buf_size) +{ + ParseContext *pc = s->priv_data; + int next; + + if(s->flags & PARSER_FLAG_COMPLETE_FRAMES){ + next= buf_size; + }else{ + next= ff_cavs_find_frame_end(pc, buf, buf_size); + + if (ff_combine_frame(pc, next, (uint8_t **)&buf, &buf_size) < 0) { + *poutbuf = NULL; + *poutbuf_size = 0; + return buf_size; + } + } + *poutbuf = (uint8_t *)buf; + *poutbuf_size = buf_size; + return next; +} + static int mpeg4video_split(AVCodecContext *avctx, const uint8_t *buf, int buf_size) { @@ -987,6 +1011,15 @@ mpeg4video_split, }; +AVCodecParser cavsvideo_parser = { + { CODEC_ID_CAVS }, + sizeof(ParseContext1), + NULL, + cavsvideo_parse, + parse1_close, + mpeg4video_split, +}; + AVCodecParser mpegaudio_parser = { { CODEC_ID_MP2, CODEC_ID_MP3 }, sizeof(MpegAudioParseContext),