RV30/RV40 demuxing (untested)
authorMichael Niedermayer <michaelni@gmx.at>
Thu, 6 Jan 2005 00:54:03 +0000 (00:54 +0000)
committerMichael Niedermayer <michaelni@gmx.at>
Thu, 6 Jan 2005 00:54:03 +0000 (00:54 +0000)
Originally committed as revision 3809 to svn://svn.ffmpeg.org/ffmpeg/trunk

libavcodec/avcodec.h
libavformat/rm.c

index a8aa16e..61b0d3f 100644 (file)
@@ -100,6 +100,9 @@ enum CodecID {
     CODEC_ID_PGMYUV,
     CODEC_ID_PAM,
     CODEC_ID_FFVHUFF,
+    CODEC_ID_RV30,
+    CODEC_ID_RV40,
+    
 
     /* various pcm "codecs" */
     CODEC_ID_PCM_S16LE= 0x10000,
@@ -1884,6 +1887,8 @@ extern AVCodec h263i_decoder;
 extern AVCodec flv_decoder;
 extern AVCodec rv10_decoder;
 extern AVCodec rv20_decoder;
+extern AVCodec rv30_decoder;
+extern AVCodec rv40_decoder;
 extern AVCodec svq1_decoder;
 extern AVCodec svq3_decoder;
 extern AVCodec dvvideo_decoder;
index 54ffa02..f0529d0 100644 (file)
@@ -652,7 +652,9 @@ static int rm_read_header(AVFormatContext *s, AVFormatParameters *ap)
                 st->codec.codec_tag = get_le32(pb);
 //                av_log(NULL, AV_LOG_DEBUG, "%X %X\n", st->codec.codec_tag, MKTAG('R', 'V', '2', '0'));
                 if (   st->codec.codec_tag != MKTAG('R', 'V', '1', '0')
-                    && st->codec.codec_tag != MKTAG('R', 'V', '2', '0'))
+                    && st->codec.codec_tag != MKTAG('R', 'V', '2', '0')
+                    && st->codec.codec_tag != MKTAG('R', 'V', '3', '0')
+                    && st->codec.codec_tag != MKTAG('R', 'V', '4', '0'))
                     goto fail1;
                 st->codec.width = get_be16(pb);
                 st->codec.height = get_be16(pb);
@@ -676,10 +678,13 @@ static int rm_read_header(AVFormatContext *s, AVFormatParameters *ap)
                 h263_hack_version = bswap_32(((uint32_t*)st->codec.extradata)[1]);
 #endif
                 st->codec.sub_id = h263_hack_version;
-                if((h263_hack_version>>28)==1)
-                    st->codec.codec_id = CODEC_ID_RV10;
-                else
-                    st->codec.codec_id = CODEC_ID_RV20;
+                switch((h263_hack_version>>28)){
+                case 1: st->codec.codec_id = CODEC_ID_RV10; break;
+                case 2: st->codec.codec_id = CODEC_ID_RV20; break;
+                case 3: st->codec.codec_id = CODEC_ID_RV30; break;
+                case 4: st->codec.codec_id = CODEC_ID_RV40; break;
+                default: goto fail1;
+                }
             }
 skip:
             /* skip codec info */