# HG changeset patch # User michaelni # Date 1033122477 0 # Node ID 85b071dfc7e3c002e05a3f9c2b4c95ac07b66f86 # Parent 0fb4c66527e18d8b3a0127747e773d0712aa0997 ff_get_fourcc() & XVIX support diff -r 0fb4c66527e1 -r 85b071dfc7e3 avcodec.h --- 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; diff -r 0fb4c66527e1 -r 85b071dfc7e3 common.h --- 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 (\ diff -r 0fb4c66527e1 -r 85b071dfc7e3 h263.c --- 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++; diff -r 0fb4c66527e1 -r 85b071dfc7e3 h263dec.c --- 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; diff -r 0fb4c66527e1 -r 85b071dfc7e3 mpegvideo.c --- 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 */ + +#include #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)){