summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xconfigure2
-rw-r--r--libavcodec/h263dec.c42
-rw-r--r--libavcodec/mpeg4video_parser.c38
-rw-r--r--libavcodec/mpeg4video_parser.h34
-rw-r--r--libavcodec/parser.h3
5 files changed, 74 insertions, 45 deletions
diff --git a/configure b/configure
index cd5221bfe6..68f2715af6 100755
--- a/configure
+++ b/configure
@@ -677,7 +677,7 @@ dxa_decoder_deps="zlib"
flashsv_decoder_deps="zlib"
flashsv_encoder_deps="zlib"
flv_decoder_deps="h263_decoder"
-h263_decoder_deps="h263_parser"
+h263_decoder_deps="h263_parser mpeg4video_parser"
h263i_decoder_deps="h263_decoder"
mpeg_xvmc_decoder_deps="xvmc"
mpeg4_decoder_deps="h263_decoder"
diff --git a/libavcodec/h263dec.c b/libavcodec/h263dec.c
index cbbb9c5065..819866e62d 100644
--- a/libavcodec/h263dec.c
+++ b/libavcodec/h263dec.c
@@ -29,6 +29,7 @@
#include "dsputil.h"
#include "mpegvideo.h"
#include "h263_parser.h"
+#include "mpeg4video_parser.h"
//#define DEBUG
//#define PRINT_FRAME_TIME
@@ -318,47 +319,6 @@ static int decode_slice(MpegEncContext *s){
return -1;
}
-/**
- * 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_mpeg4_find_frame_end(ParseContext *pc, const uint8_t *buf, int buf_size){
- int vop_found, i;
- uint32_t state;
-
- vop_found= pc->frame_start_found;
- state= pc->state;
-
- i=0;
- if(!vop_found){
- for(i=0; i<buf_size; i++){
- state= (state<<8) | buf[i];
- if(state == 0x1B6){
- i++;
- vop_found=1;
- break;
- }
- }
- }
-
- if(vop_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){
- pc->frame_start_found=0;
- pc->state=-1;
- return i-3;
- }
- }
- }
- pc->frame_start_found= vop_found;
- pc->state= state;
- return END_NOT_FOUND;
-}
-
int ff_h263_decode_frame(AVCodecContext *avctx,
void *data, int *data_size,
uint8_t *buf, int buf_size)
diff --git a/libavcodec/mpeg4video_parser.c b/libavcodec/mpeg4video_parser.c
index 4771ca0b44..9accc91265 100644
--- a/libavcodec/mpeg4video_parser.c
+++ b/libavcodec/mpeg4video_parser.c
@@ -22,8 +22,46 @@
#include "parser.h"
#include "mpegvideo.h"
+#include "mpeg4video_parser.h"
+int ff_mpeg4_find_frame_end(ParseContext *pc, const uint8_t *buf, int buf_size){
+ int vop_found, i;
+ uint32_t state;
+
+ vop_found= pc->frame_start_found;
+ state= pc->state;
+
+ i=0;
+ if(!vop_found){
+ for(i=0; i<buf_size; i++){
+ state= (state<<8) | buf[i];
+ if(state == 0x1B6){
+ i++;
+ vop_found=1;
+ break;
+ }
+ }
+ }
+
+ if(vop_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){
+ pc->frame_start_found=0;
+ pc->state=-1;
+ return i-3;
+ }
+ }
+ }
+ pc->frame_start_found= vop_found;
+ pc->state= state;
+ return END_NOT_FOUND;
+}
+
/* XXX: make it use less memory */
static int av_mpeg4_decode_header(AVCodecParserContext *s1,
AVCodecContext *avctx,
diff --git a/libavcodec/mpeg4video_parser.h b/libavcodec/mpeg4video_parser.h
new file mode 100644
index 0000000000..0da1da0586
--- /dev/null
+++ b/libavcodec/mpeg4video_parser.h
@@ -0,0 +1,34 @@
+/*
+ * MPEG4 video parser prototypes
+ * Copyright (c) 2003 Fabrice Bellard.
+ * Copyright (c) 2003 Michael Niedermayer.
+ *
+ * This file is part of FFmpeg.
+ *
+ * FFmpeg is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * FFmpeg is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with FFmpeg; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#ifndef MPEG4VIDEO_PARSER_H
+#define MPEG4VIDEO_PARSER_H
+
+#include "parser.h"
+
+/**
+ * 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_mpeg4_find_frame_end(ParseContext *pc, const uint8_t *buf, int buf_size);
+
+#endif /* MPEG4VIDEO_PARSER_H */
diff --git a/libavcodec/parser.h b/libavcodec/parser.h
index 5cf1fee28e..8492a0c9b0 100644
--- a/libavcodec/parser.h
+++ b/libavcodec/parser.h
@@ -59,7 +59,4 @@ int ff_mpeg4video_split(AVCodecContext *avctx, const uint8_t *buf,
void ff_parse_close(AVCodecParserContext *s);
void ff_parse1_close(AVCodecParserContext *s);
-/* h263dec.c */
-int ff_mpeg4_find_frame_end(ParseContext *pc, const uint8_t *buf, int buf_size);
-
#endif /* !FFMPEG_PARSER_H */