changeset 701:85b071dfc7e3 libavcodec

ff_get_fourcc() & XVIX support
author michaelni
date Fri, 27 Sep 2002 10:27:57 +0000
parents 0fb4c66527e1
children 2cff6fc37716
files avcodec.h common.h h263.c h263dec.c mpegvideo.c
diffstat 5 files changed, 24 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/avcodec.h	Thu Sep 26 23:27:22 2002 +0000
+++ b/avcodec.h	Fri Sep 27 10:27:57 2002 +0000
@@ -680,7 +680,7 @@
      * fourcc (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
+     * decoding: set by user, will be converted to upper case by lavc during init
      */
     int fourcc;
 
--- a/common.h	Thu Sep 26 23:27:22 2002 +0000
+++ b/common.h	Fri Sep 27 10:27:57 2002 +0000
@@ -922,6 +922,16 @@
     }
     return ret;
 }
+
+/**
+ * converts fourcc string to int
+ */
+static inline int ff_get_fourcc(char *s){
+    assert( strlen(s)==4 );
+    
+    return (s[0]) + (s[1]<<8) + (s[2]<<16) + (s[3]<<24);
+}
+
 #if __CPU__ >= 686 && !defined(RUNTIME_CPUDETECT)
 #define COPY3_IF_LT(x,y,a,b,c,d)\
 asm volatile (\
--- a/h263.c	Thu Sep 26 23:27:22 2002 +0000
+++ b/h263.c	Fri Sep 27 10:27:57 2002 +0000
@@ -4231,7 +4231,7 @@
         s->last_time_base= s->time_base;
         s->time_base+= time_incr;
         s->time= s->time_base*s->time_increment_resolution + time_increment;
-        if(s->workaround_bugs==3 || s->avctx->fourcc== 'U' + ('M'<<8) + ('P'<<16) + ('4'<<24)){
+        if(s->workaround_bugs==3 || s->avctx->fourcc == ff_get_fourcc("UMP4")){
             if(s->time < s->last_non_b_time){
 //                fprintf(stderr, "header is not mpeg4 compatible, broken encoder, trying to workaround\n");
                 s->time_base++;
--- a/h263dec.c	Thu Sep 26 23:27:22 2002 +0000
+++ b/h263dec.c	Fri Sep 27 10:27:57 2002 +0000
@@ -144,7 +144,11 @@
 
     s->hurry_up= avctx->hurry_up;
     s->error_resilience= avctx->error_resilience;
+
     s->workaround_bugs= avctx->workaround_bugs;
+    if(s->avctx->fourcc == ff_get_fourcc("XVIX") && s->workaround_bugs==0) 
+        s->workaround_bugs=2;
+
     s->flags= avctx->flags;
 
     *data_size = 0;
--- a/mpegvideo.c	Thu Sep 26 23:27:22 2002 +0000
+++ b/mpegvideo.c	Fri Sep 27 10:27:57 2002 +0000
@@ -18,6 +18,8 @@
  *
  * 4MV & hq & b-frame encoding stuff by Michael Niedermayer <michaelni@gmx.at>
  */
+ 
+#include <ctype.h>
 #include "avcodec.h"
 #include "dsputil.h"
 #include "mpegvideo.h"
@@ -162,6 +164,12 @@
     /* set default edge pos, will be overriden in decode_header if needed */
     s->h_edge_pos= s->mb_width*16;
     s->v_edge_pos= s->mb_height*16;
+    
+    /* convert fourcc to upper case */
+    s->avctx->fourcc=   toupper( s->avctx->fourcc     &0xFF)          
+                     + (toupper((s->avctx->fourcc>>8 )&0xFF)<<8 )
+                     + (toupper((s->avctx->fourcc>>16)&0xFF)<<16) 
+                     + (toupper((s->avctx->fourcc>>24)&0xFF)<<24);
 
     s->mb_num = s->mb_width * s->mb_height;
     if(!(s->flags&CODEC_FLAG_DR1)){