changeset 1458:40b69d238beb libavcodec

AVI stream header FCC / more reliable detection of old xvid files
author michaelni
date Wed, 10 Sep 2003 23:40:55 +0000
parents 460e5ead6722
children 201d4e25c207
files avcodec.h h263dec.c mpegvideo.c
diffstat 3 files changed, 21 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/avcodec.h	Wed Sep 10 11:28:18 2003 +0000
+++ b/avcodec.h	Wed Sep 10 23:40:55 2003 +0000
@@ -15,8 +15,8 @@
 
 #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 @@
      */
     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;
 
 
--- a/h263dec.c	Wed Sep 10 11:28:18 2003 +0000
+++ b/h263dec.c	Wed Sep 10 23:40:55 2003 +0000
@@ -482,13 +482,17 @@
     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
     }
--- a/mpegvideo.c	Wed Sep 10 11:28:18 2003 +0000
+++ b/mpegvideo.c	Wed Sep 10 23:40:55 2003 +0000
@@ -371,6 +371,11 @@
                         + (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 @@
     MPV_common_end(s);
     if (s->out_format == FMT_MJPEG)
         mjpeg_close(s);
-        
+
     av_freep(&avctx->extradata);
       
     return 0;