summaryrefslogtreecommitdiff
path: root/libavcodec
diff options
context:
space:
mode:
authorStefan Gehrer <stefan.gehrer@gmx.de>2006-11-12 20:18:07 +0000
committerStefan Gehrer <stefan.gehrer@gmx.de>2006-11-12 20:18:07 +0000
commit53aa68b3290533eeaae7812ad1c30de5f783e9f6 (patch)
treee8e79db08353011f86184bfe93b1c151b562f2d6 /libavcodec
parent55fde95e3bfc0e337a482e2508c3ce60009d8c7b (diff)
move all cavs-parsing to cavs.c
This should help building parser without decoder Originally committed as revision 6993 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavcodec')
-rw-r--r--libavcodec/Makefile2
-rw-r--r--libavcodec/cavs.c124
-rw-r--r--libavcodec/cavsdata.h2
-rw-r--r--libavcodec/parser.c36
-rw-r--r--libavcodec/parser.h3
5 files changed, 84 insertions, 83 deletions
diff --git a/libavcodec/Makefile b/libavcodec/Makefile
index d6d09d2258..dda01f94af 100644
--- a/libavcodec/Makefile
+++ b/libavcodec/Makefile
@@ -294,7 +294,7 @@ OBJS-$(CONFIG_AMR_WB) += amrwb_float/dec_acelp.o \
OBJS-$(CONFIG_AAC_PARSER) += parser.o
OBJS-$(CONFIG_AC3_PARSER) += parser.o
-OBJS-$(CONFIG_CAVS_PARSER) += parser.o
+OBJS-$(CONFIG_CAVSVIDEO_PARSER) += cavs.o parser.o
OBJS-$(CONFIG_DVBSUB_PARSER) += dvbsubdec.o
OBJS-$(CONFIG_DVDSUB_PARSER) += dvdsubdec.o
OBJS-$(CONFIG_H261_PARSER) += h261.o
diff --git a/libavcodec/cavs.c b/libavcodec/cavs.c
index 6ecfb79718..2bedc08324 100644
--- a/libavcodec/cavs.c
+++ b/libavcodec/cavs.c
@@ -31,6 +31,7 @@
#include "mpegvideo.h"
#include "cavsdata.h"
+#ifdef CONFIG_CAVS_DECODER
typedef struct {
MpegEncContext s;
Picture picture; ///< currently decoded frame
@@ -1318,49 +1319,6 @@ static int decode_seq_header(AVSContext *h) {
return 0;
}
-/**
- * finds the end of the current frame in the bitstream.
- * @return the position of the first byte of the next frame, or -1
- */
-int ff_cavs_find_frame_end(ParseContext *pc, const uint8_t *buf, int buf_size) {
- int pic_found, i;
- uint32_t state;
-
- pic_found= pc->frame_start_found;
- state= pc->state;
-
- i=0;
- if(!pic_found){
- for(i=0; i<buf_size; i++){
- state= (state<<8) | buf[i];
- if(state == PIC_I_START_CODE || state == PIC_PB_START_CODE){
- i++;
- pic_found=1;
- break;
- }
- }
- }
-
- if(pic_found){
- /* EOF considered as end of frame */
- if (buf_size == 0)
- return 0;
- for(; i<buf_size; i++){
- state= (state<<8) | buf[i];
- if((state&0xFFFFFF00) == 0x100){
- if(state < SLICE_MIN_START_CODE || state > SLICE_MAX_START_CODE){
- pc->frame_start_found=0;
- pc->state=-1;
- return i-3;
- }
- }
- }
- }
- pc->frame_start_found= pic_found;
- pc->state= state;
- return END_NOT_FOUND;
-}
-
void ff_cavs_flush(AVCodecContext * avctx) {
AVSContext *h = avctx->priv_data;
h->got_keyframe = 0;
@@ -1500,3 +1458,83 @@ AVCodec cavs_decoder = {
CODEC_CAP_DR1 | CODEC_CAP_DELAY,
.flush= ff_cavs_flush,
};
+#endif /* CONFIG_CAVS_DECODER */
+
+#ifdef CONFIG_CAVSVIDEO_PARSER
+/**
+ * finds the end of the current frame in the bitstream.
+ * @return the position of the first byte of the next frame, or -1
+ */
+static int cavs_find_frame_end(ParseContext *pc, const uint8_t *buf,
+ int buf_size) {
+ int pic_found, i;
+ uint32_t state;
+
+ pic_found= pc->frame_start_found;
+ state= pc->state;
+
+ i=0;
+ if(!pic_found){
+ for(i=0; i<buf_size; i++){
+ state= (state<<8) | buf[i];
+ if(state == PIC_I_START_CODE || state == PIC_PB_START_CODE){
+ i++;
+ pic_found=1;
+ break;
+ }
+ }
+ }
+
+ if(pic_found){
+ /* EOF considered as end of frame */
+ if (buf_size == 0)
+ return 0;
+ for(; i<buf_size; i++){
+ state= (state<<8) | buf[i];
+ if((state&0xFFFFFF00) == 0x100){
+ if(state < SLICE_MIN_START_CODE || state > SLICE_MAX_START_CODE){
+ pc->frame_start_found=0;
+ pc->state=-1;
+ return i-3;
+ }
+ }
+ }
+ }
+ pc->frame_start_found= pic_found;
+ pc->state= state;
+ return END_NOT_FOUND;
+}
+
+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= 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;
+}
+
+AVCodecParser cavsvideo_parser = {
+ { CODEC_ID_CAVS },
+ sizeof(ParseContext1),
+ NULL,
+ cavsvideo_parse,
+ ff_parse1_close,
+ ff_mpeg4video_split,
+};
+#endif /* CONFIG_CAVSVIDEO_PARSER */
diff --git a/libavcodec/cavsdata.h b/libavcodec/cavsdata.h
index 983c802be2..d769851360 100644
--- a/libavcodec/cavsdata.h
+++ b/libavcodec/cavsdata.h
@@ -131,6 +131,7 @@ enum mv_loc_t {
MV_BWD_X3
};
+#ifdef CONFIG_CAVS_DECODER
static const uint8_t partition_flags[30] = {
0, //I_8X8
0, //P_SKIP
@@ -639,3 +640,4 @@ static const int_fast8_t left_modifier_l[8] = { 0,-1, 6,-1,-1, 7, 6, 7};
static const int_fast8_t top_modifier_l[8] = {-1, 1, 5,-1,-1, 5, 7, 7};
static const int_fast8_t left_modifier_c[7] = { 5,-1, 2,-1, 6, 5, 6};
static const int_fast8_t top_modifier_c[7] = { 4, 1,-1,-1, 4, 6, 6};
+#endif /* CONFIG_CAVS_DECODER */
diff --git a/libavcodec/parser.c b/libavcodec/parser.c
index 63a1a60944..72a3e55a3a 100644
--- a/libavcodec/parser.c
+++ b/libavcodec/parser.c
@@ -361,32 +361,6 @@ static int mpeg4video_parse(AVCodecParserContext *s,
}
#endif
-#ifdef CONFIG_CAVSVIDEO_PARSER
-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;
-}
-#endif /* CONFIG_CAVSVIDEO_PARSER */
-
int ff_mpeg4video_split(AVCodecContext *avctx,
const uint8_t *buf, int buf_size)
{
@@ -857,16 +831,6 @@ AVCodecParser mpeg4video_parser = {
ff_mpeg4video_split,
};
#endif
-#ifdef CONFIG_CAVSVIDEO_PARSER
-AVCodecParser cavsvideo_parser = {
- { CODEC_ID_CAVS },
- sizeof(ParseContext1),
- NULL,
- cavsvideo_parse,
- ff_parse1_close,
- ff_mpeg4video_split,
-};
-#endif
#ifdef CONFIG_MPEGAUDIO_PARSER
AVCodecParser mpegaudio_parser = {
{ CODEC_ID_MP2, CODEC_ID_MP3 },
diff --git a/libavcodec/parser.h b/libavcodec/parser.h
index 6a0398a391..3496b341f4 100644
--- a/libavcodec/parser.h
+++ b/libavcodec/parser.h
@@ -60,7 +60,4 @@ void ff_parse1_close(AVCodecParserContext *s);
/* h263dec.c */
int ff_mpeg4_find_frame_end(ParseContext *pc, const uint8_t *buf, int buf_size);
-/* cavs.c */
-int ff_cavs_find_frame_end(ParseContext *pc, const uint8_t *buf, int buf_size);
-
#endif /* !FFMPEG_PARSER_H */