]> git.sesse.net Git - ffmpeg/blobdiff - libavcodec/truemotion1.c
Make sure the EC code does not attempt to use inter based concealment if there
[ffmpeg] / libavcodec / truemotion1.c
index 50948fdda3d0cac40a607442fe97094122dc83fb..ae08bfe0b2337dd9e898ea43e9f98d6e0eb24bf4 100644 (file)
@@ -20,7 +20,7 @@
  */
 
 /**
- * @file truemotion1.c
+ * @file libavcodec/truemotion1.c
  * Duck TrueMotion v1 Video Decoder by
  * Alex Beregszaszi and
  * Mike Melanson (melanson@pcisys.net)
@@ -32,7 +32,6 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
-#include <unistd.h>
 
 #include "avcodec.h"
 #include "dsputil.h"
@@ -117,7 +116,7 @@ typedef struct comp_types {
 } comp_types;
 
 /* { valid for metatype }, algorithm, num of deltas, vert res, horiz res */
-static comp_types compression_types[17] = {
+static const comp_types compression_types[17] = {
     { ALGO_NOP,    0, 0, 0 },
 
     { ALGO_RGB16V, 4, 4, BLOCK_4x4 },
@@ -164,7 +163,7 @@ static void select_delta_tables(TrueMotion1Context *s, int delta_table_index)
     }
 }
 
-#ifdef WORDS_BIGENDIAN
+#if HAVE_BIGENDIAN
 static int make_ydt15_entry(int p2, int p1, int16_t *ydt)
 #else
 static int make_ydt15_entry(int p1, int p2, int16_t *ydt)
@@ -176,10 +175,10 @@ static int make_ydt15_entry(int p1, int p2, int16_t *ydt)
     lo += (lo << 5) + (lo << 10);
     hi = ydt[p2];
     hi += (hi << 5) + (hi << 10);
-    return ((lo + (hi << 16)) << 1);
+    return (lo + (hi << 16)) << 1;
 }
 
-#ifdef WORDS_BIGENDIAN
+#if HAVE_BIGENDIAN
 static int make_cdt15_entry(int p2, int p1, int16_t *cdt)
 #else
 static int make_cdt15_entry(int p1, int p2, int16_t *cdt)
@@ -190,10 +189,10 @@ static int make_cdt15_entry(int p1, int p2, int16_t *cdt)
     b = cdt[p2];
     r = cdt[p1] << 10;
     lo = b + r;
-    return ((lo + (lo << 16)) << 1);
+    return (lo + (lo << 16)) << 1;
 }
 
-#ifdef WORDS_BIGENDIAN
+#if HAVE_BIGENDIAN
 static int make_ydt16_entry(int p2, int p1, int16_t *ydt)
 #else
 static int make_ydt16_entry(int p1, int p2, int16_t *ydt)
@@ -205,10 +204,10 @@ static int make_ydt16_entry(int p1, int p2, int16_t *ydt)
     lo += (lo << 6) + (lo << 11);
     hi = ydt[p2];
     hi += (hi << 6) + (hi << 11);
-    return ((lo + (hi << 16)) << 1);
+    return (lo + (hi << 16)) << 1;
 }
 
-#ifdef WORDS_BIGENDIAN
+#if HAVE_BIGENDIAN
 static int make_cdt16_entry(int p2, int p1, int16_t *cdt)
 #else
 static int make_cdt16_entry(int p1, int p2, int16_t *cdt)
@@ -219,10 +218,10 @@ static int make_cdt16_entry(int p1, int p2, int16_t *cdt)
     b = cdt[p2];
     r = cdt[p1] << 11;
     lo = b + r;
-    return ((lo + (lo << 16)) << 1);
+    return (lo + (lo << 16)) << 1;
 }
 
-#ifdef WORDS_BIGENDIAN
+#if HAVE_BIGENDIAN
 static int make_ydt24_entry(int p2, int p1, int16_t *ydt)
 #else
 static int make_ydt24_entry(int p1, int p2, int16_t *ydt)
@@ -232,10 +231,10 @@ static int make_ydt24_entry(int p1, int p2, int16_t *ydt)
 
     lo = ydt[p1];
     hi = ydt[p2];
-    return ((lo + (hi << 8) + (hi << 16)) << 1);
+    return (lo + (hi << 8) + (hi << 16)) << 1;
 }
 
-#ifdef WORDS_BIGENDIAN
+#if HAVE_BIGENDIAN
 static int make_cdt24_entry(int p2, int p1, int16_t *cdt)
 #else
 static int make_cdt24_entry(int p1, int p2, int16_t *cdt)
@@ -245,7 +244,7 @@ static int make_cdt24_entry(int p1, int p2, int16_t *cdt)
 
     b = cdt[p2];
     r = cdt[p1]<<16;
-    return ((b+r) << 1);
+    return (b+r) << 1;
 }
 
 static void gen_vector_table15(TrueMotion1Context *s, const uint8_t *sel_vector_table)
@@ -393,7 +392,7 @@ static int truemotion1_decode_header(TrueMotion1Context *s)
         }
     }
 
-    if (header.compression > 17) {
+    if (header.compression >= 17) {
         av_log(s->avctx, AV_LOG_ERROR, "invalid compression type (%d)\n", header.compression);
         return -1;
     }
@@ -461,7 +460,7 @@ static int truemotion1_decode_header(TrueMotion1Context *s)
     return header.header_size;
 }
 
-static int truemotion1_decode_init(AVCodecContext *avctx)
+static av_cold int truemotion1_decode_init(AVCodecContext *avctx)
 {
     TrueMotion1Context *s = avctx->priv_data;
 
@@ -846,8 +845,10 @@ static void truemotion1_decode_24bit(TrueMotion1Context *s)
 
 static int truemotion1_decode_frame(AVCodecContext *avctx,
                                     void *data, int *data_size,
-                                    const uint8_t *buf, int buf_size)
+                                    AVPacket *avpkt)
 {
+    const uint8_t *buf = avpkt->data;
+    int buf_size = avpkt->size;
     TrueMotion1Context *s = avctx->priv_data;
 
     s->buf = buf;
@@ -877,7 +878,7 @@ static int truemotion1_decode_frame(AVCodecContext *avctx,
     return buf_size;
 }
 
-static int truemotion1_decode_end(AVCodecContext *avctx)
+static av_cold int truemotion1_decode_end(AVCodecContext *avctx)
 {
     TrueMotion1Context *s = avctx->priv_data;
 
@@ -899,4 +900,5 @@ AVCodec truemotion1_decoder = {
     truemotion1_decode_end,
     truemotion1_decode_frame,
     CODEC_CAP_DR1,
+    .long_name = NULL_IF_CONFIG_SMALL("Duck TrueMotion 1.0"),
 };