aboutsummaryrefslogtreecommitdiffstats
path: root/libavcodec
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2002-09-27 10:27:57 +0000
committerMichael Niedermayer <michaelni@gmx.at>2002-09-27 10:27:57 +0000
commit202ef8b8196a107df242b29ebee8cbbd72549057 (patch)
tree5f6ac42c30e27ed2a3307c6c79f7f3c159267ec9 /libavcodec
parent0c2dd16eb65bb0ade97346aabecc4762f6bcac31 (diff)
downloadffmpeg-202ef8b8196a107df242b29ebee8cbbd72549057.tar.gz
ff_get_fourcc() & XVIX support
Originally committed as revision 975 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavcodec')
-rw-r--r--libavcodec/avcodec.h2
-rw-r--r--libavcodec/common.h10
-rw-r--r--libavcodec/h263.c2
-rw-r--r--libavcodec/h263dec.c4
-rw-r--r--libavcodec/mpegvideo.c8
5 files changed, 24 insertions, 2 deletions
diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h
index 0d2c342550..6c33a304fe 100644
--- a/libavcodec/avcodec.h
+++ b/libavcodec/avcodec.h
@@ -680,7 +680,7 @@ typedef struct AVCodecContext {
* 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 --git a/libavcodec/common.h b/libavcodec/common.h
index c3010896e9..9fce80f8a1 100644
--- a/libavcodec/common.h
+++ b/libavcodec/common.h
@@ -922,6 +922,16 @@ static inline int ff_sqrt(int a)
}
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 --git a/libavcodec/h263.c b/libavcodec/h263.c
index a6d73d2089..6a59906a08 100644
--- a/libavcodec/h263.c
+++ b/libavcodec/h263.c
@@ -4231,7 +4231,7 @@ int mpeg4_decode_picture_header(MpegEncContext * s)
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 --git a/libavcodec/h263dec.c b/libavcodec/h263dec.c
index ffecbc932b..c8c38cac87 100644
--- a/libavcodec/h263dec.c
+++ b/libavcodec/h263dec.c
@@ -144,7 +144,11 @@ uint64_t time= rdtsc();
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 --git a/libavcodec/mpegvideo.c b/libavcodec/mpegvideo.c
index 3bd5a6fe7e..98bc596b49 100644
--- a/libavcodec/mpegvideo.c
+++ b/libavcodec/mpegvideo.c
@@ -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 @@ int MPV_common_init(MpegEncContext *s)
/* 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)){