[Ffmpeg-cvslog] r6993 - in trunk/libavcodec: Makefile cavs.c cavsdata.h parser.c parser.h
stefang
subversion
Sun Nov 12 21:18:08 CET 2006
Author: stefang
Date: Sun Nov 12 21:18:07 2006
New Revision: 6993
Modified:
trunk/libavcodec/Makefile
trunk/libavcodec/cavs.c
trunk/libavcodec/cavsdata.h
trunk/libavcodec/parser.c
trunk/libavcodec/parser.h
Log:
move all cavs-parsing to cavs.c
This should help building parser without decoder
Modified: trunk/libavcodec/Makefile
==============================================================================
--- trunk/libavcodec/Makefile (original)
+++ trunk/libavcodec/Makefile Sun Nov 12 21:18:07 2006
@@ -294,7 +294,7 @@
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
Modified: trunk/libavcodec/cavs.c
==============================================================================
--- trunk/libavcodec/cavs.c (original)
+++ trunk/libavcodec/cavs.c Sun Nov 12 21:18:07 2006
@@ -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 @@
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 @@
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 */
Modified: trunk/libavcodec/cavsdata.h
==============================================================================
--- trunk/libavcodec/cavsdata.h (original)
+++ trunk/libavcodec/cavsdata.h Sun Nov 12 21:18:07 2006
@@ -131,6 +131,7 @@
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 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 */
Modified: trunk/libavcodec/parser.c
==============================================================================
--- trunk/libavcodec/parser.c (original)
+++ trunk/libavcodec/parser.c Sun Nov 12 21:18:07 2006
@@ -361,32 +361,6 @@
}
#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 @@
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 },
Modified: trunk/libavcodec/parser.h
==============================================================================
--- trunk/libavcodec/parser.h (original)
+++ trunk/libavcodec/parser.h Sun Nov 12 21:18:07 2006
@@ -60,7 +60,4 @@
/* 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 */
More information about the ffmpeg-cvslog
mailing list