aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2002-08-28 21:47:28 +0000
committerMichael Niedermayer <michaelni@gmx.at>2002-08-28 21:47:28 +0000
commit255b3ac27d78be9c8ed57f1c3ba90d28e0ffb63d (patch)
tree0a0222bc871504e106c4f8c666c81b1cc535c3ec
parent59925ef2044e3ba2b5be49a35d37929550e3d6bc (diff)
downloadffmpeg-255b3ac27d78be9c8ed57f1c3ba90d28e0ffb63d.tar.gz
use extradata for h263_long_vector mode detection
Originally committed as revision 876 to svn://svn.ffmpeg.org/ffmpeg/trunk
-rw-r--r--libavcodec/rv10.c29
1 files changed, 23 insertions, 6 deletions
diff --git a/libavcodec/rv10.c b/libavcodec/rv10.c
index 373ae6fc68..e484ee2095 100644
--- a/libavcodec/rv10.c
+++ b/libavcodec/rv10.c
@@ -290,7 +290,7 @@ static int rv10_decode_picture_header(MpegEncContext *s)
else
s->pict_type = I_TYPE;
//printf("h:%d ver:%d\n",h,s->rv10_version);
-if(!marker) printf("marker missing\n");
+ if(!marker) printf("marker missing\n");
pb_frame = get_bits(&s->gb, 1);
#ifdef DEBUG
@@ -335,12 +335,9 @@ if(!marker) printf("marker missing\n");
}
unk= get_bits(&s->gb, 3); /* ignored */
//printf("%d\n", unk);
-s->h263_long_vectors = s->mb_num<100; //FIXME check if this is ok (100 i just guessed)
s->f_code = 1;
s->unrestricted_mv = 1;
-#if 0
- s->h263_long_vectors = 1;
-#endif
+
return mb_count;
}
@@ -356,7 +353,27 @@ static int rv10_decode_init(AVCodecContext *avctx)
s->height = avctx->height;
s->h263_rv10 = 1;
- s->rv10_version = avctx->sub_id;
+ if(avctx->extradata_size >= 8){
+ switch(((uint32_t*)avctx->extradata)[1]){
+ case 0x10000000:
+ s->rv10_version= 0;
+ s->h263_long_vectors=0;
+ break;
+ case 0x10003000:
+ s->rv10_version= 3;
+ s->h263_long_vectors=1;
+ break;
+ case 0x10003001:
+ s->rv10_version= 3;
+ s->h263_long_vectors=0;
+ break;
+ default:
+ fprintf(stderr, "unknown header %X\n", ((uint32_t*)avctx->extradata)[1]);
+ }
+ }else{
+ // for backward compatibility
+ s->rv10_version= avctx->sub_id;
+ }
s->flags= avctx->flags;