]> git.sesse.net Git - ffmpeg/blobdiff - libavcodec/4xm.c
cleanup get_unary()
[ffmpeg] / libavcodec / 4xm.c
index b82797d49301d1e480cc5f4c7d74b52e720d75d4..7af22c7963aea1cfe4fc580cd4b41da3d9218867 100644 (file)
@@ -27,6 +27,7 @@
 #include "avcodec.h"
 #include "dsputil.h"
 #include "mpegvideo.h"
+#include "bytestream.h"
 
 //#undef NDEBUG
 //#include <assert.h>
@@ -248,7 +249,10 @@ static void init_mv(FourXContext *f){
     int i;
 
     for(i=0; i<256; i++){
-        f->mv[i] = mv[i][0] + mv[i][1]*f->current_picture.linesize[0]/2;
+        if(f->version)
+            f->mv[i] = mv[i][0]   + mv[i][1]  *f->current_picture.linesize[0]/2;
+        else
+            f->mv[i] = (i&15) - 8 + ((i>>4)-8)*f->current_picture.linesize[0]/2;
     }
 }
 
@@ -311,6 +315,8 @@ static void decode_p_block(FourXContext *f, uint16_t *dst, uint16_t *src, int lo
         log2w--;
         decode_p_block(f, dst             , src             , log2w, log2h, stride);
         decode_p_block(f, dst + (1<<log2w), src + (1<<log2w), log2w, log2h, stride);
+    }else if(code == 3 && f->version==0){
+        mcdc(dst, src, log2w, h, stride, 1, 0);
     }else if(code == 4){
         src += f->mv[ *f->bytestream++ ];
         mcdc(dst, src, log2w, h, stride, 1, le2me_16(*f->wordstream++));
@@ -592,8 +598,8 @@ static int decode_i2_frame(FourXContext *f, uint8_t *buf, int length){
             unsigned int color[4], bits;
             memset(color, 0, sizeof(color));
 //warning following is purely guessed ...
-            color[0]= AV_RN16(buf); buf+=2; //FIXME use bytestream
-            color[1]= AV_RN16(buf); buf+=2;
+            color[0]= bytestream_get_le16(&buf);
+            color[1]= bytestream_get_le16(&buf);
 
             if(color[0]&0x8000) av_log(NULL, AV_LOG_ERROR, "unk bit 1\n");
             if(color[1]&0x8000) av_log(NULL, AV_LOG_ERROR, "unk bit 2\n");
@@ -601,7 +607,7 @@ static int decode_i2_frame(FourXContext *f, uint8_t *buf, int length){
             color[2]= mix(color[0], color[1]);
             color[3]= mix(color[1], color[0]);
 
-            bits= AV_RL32(buf); buf+= 4;
+            bits= bytestream_get_le32(&buf);
             for(y2=0; y2<16; y2++){
                 for(x2=0; x2<16; x2++){
                     int index= 2*(x2>>2) + 8*(y2>>2);