summaryrefslogtreecommitdiff
path: root/libavcodec
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2003-09-10 23:40:55 +0000
committerMichael Niedermayer <michaelni@gmx.at>2003-09-10 23:40:55 +0000
commit541ae14095cf7757bc5034a6d09f9a41e385802d (patch)
tree96e12e8bdbcb311ddf8e6ae02c98e7186e9488e7 /libavcodec
parentcb0c448a8d026fe7fec546837d87e5d258f42123 (diff)
AVI stream header FCC / more reliable detection of old xvid files
Originally committed as revision 2258 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavcodec')
-rw-r--r--libavcodec/avcodec.h11
-rw-r--r--libavcodec/h263dec.c8
-rw-r--r--libavcodec/mpegvideo.c7
3 files changed, 21 insertions, 5 deletions
diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h
index 8d5b30c62a..4088c978c0 100644
--- a/libavcodec/avcodec.h
+++ b/libavcodec/avcodec.h
@@ -15,8 +15,8 @@ extern "C" {
#define LIBAVCODEC_VERSION_INT 0x000408
#define LIBAVCODEC_VERSION "0.4.8"
-#define LIBAVCODEC_BUILD 4678
-#define LIBAVCODEC_BUILD_STR "4678"
+#define LIBAVCODEC_BUILD 4679
+#define LIBAVCODEC_BUILD_STR "4679"
#define LIBAVCODEC_IDENT "FFmpeg" LIBAVCODEC_VERSION "b" LIBAVCODEC_BUILD_STR
@@ -1219,6 +1219,13 @@ typedef struct AVCodecContext {
*/
uint16_t *inter_matrix;
+ /**
+ * fourcc from the AVI stream header (LSB first, so "ABCD" -> ('D'<<24) + ('C'<<16) + ('B'<<8) + 'A').
+ * this is used to workaround some encoder bugs
+ * - encoding: unused
+ * - decoding: set by user, will be converted to upper case by lavc during init
+ */
+ unsigned int stream_codec_tag;
} AVCodecContext;
diff --git a/libavcodec/h263dec.c b/libavcodec/h263dec.c
index 3701aa51f2..4778851267 100644
--- a/libavcodec/h263dec.c
+++ b/libavcodec/h263dec.c
@@ -482,13 +482,17 @@ retry:
avctx->has_b_frames= !s->low_delay;
if(s->xvid_build==0 && s->divx_version==0 && s->lavc_build==0){
- if(s->avctx->codec_tag == ff_get_fourcc("XVID") || s->avctx->codec_tag == ff_get_fourcc("XVIX"))
+ if(s->avctx->stream_codec_tag == ff_get_fourcc("XVID") ||
+ s->avctx->codec_tag == ff_get_fourcc("XVID") || s->avctx->codec_tag == ff_get_fourcc("XVIX"))
s->xvid_build= -1;
-
+#if 0
if(s->avctx->codec_tag == ff_get_fourcc("DIVX") && s->vo_type==0 && s->vol_control_parameters==1
&& s->padding_bug_score > 0 && s->low_delay) // XVID with modified fourcc
s->xvid_build= -1;
+#endif
+ }
+ if(s->xvid_build==0 && s->divx_version==0 && s->lavc_build==0){
if(s->avctx->codec_tag == ff_get_fourcc("DIVX") && s->vo_type==0 && s->vol_control_parameters==0)
s->divx_version= 400; //divx 4
}
diff --git a/libavcodec/mpegvideo.c b/libavcodec/mpegvideo.c
index 90567c0980..04e614d71b 100644
--- a/libavcodec/mpegvideo.c
+++ b/libavcodec/mpegvideo.c
@@ -371,6 +371,11 @@ int MPV_common_init(MpegEncContext *s)
+ (toupper((s->avctx->codec_tag>>16)&0xFF)<<16)
+ (toupper((s->avctx->codec_tag>>24)&0xFF)<<24);
+ s->avctx->stream_codec_tag= toupper( s->avctx->stream_codec_tag &0xFF)
+ + (toupper((s->avctx->stream_codec_tag>>8 )&0xFF)<<8 )
+ + (toupper((s->avctx->stream_codec_tag>>16)&0xFF)<<16)
+ + (toupper((s->avctx->stream_codec_tag>>24)&0xFF)<<24);
+
CHECKED_ALLOCZ(s->allocated_edge_emu_buffer, (s->width+64)*2*17*2); //(width + edge + align)*interlaced*MBsize*tolerance
s->edge_emu_buffer= s->allocated_edge_emu_buffer + (s->width+64)*2*17;
@@ -874,7 +879,7 @@ int MPV_encode_end(AVCodecContext *avctx)
MPV_common_end(s);
if (s->out_format == FMT_MJPEG)
mjpeg_close(s);
-
+
av_freep(&avctx->extradata);
return 0;