]> git.sesse.net Git - ffmpeg/commitdiff
Merge remote-tracking branch 'qatar/master'
authorMichael Niedermayer <michaelni@gmx.at>
Wed, 28 Mar 2012 23:41:04 +0000 (01:41 +0200)
committerMichael Niedermayer <michaelni@gmx.at>
Thu, 29 Mar 2012 02:11:10 +0000 (04:11 +0200)
* qatar/master:
  asf: only set index_read if the index contained entries.
  cabac: add overread protection to BRANCHLESS_GET_CABAC().
  cabac: increment jump locations by one in callers of BRANCHLESS_GET_CABAC().
  cabac: remove unused argument from BRANCHLESS_GET_CABAC_UPDATE().
  cabac: use struct+offset instead of memory operand in BRANCHLESS_GET_CABAC().
  h264: add overread protection to get_cabac_bypass_sign_x86().
  h264: reindent get_cabac_bypass_sign_x86().
  h264: use struct offsets in get_cabac_bypass_sign_x86().
  h264: fix overreads in cabac reader.
  wmall: fix seeking.
  lagarith: fix buffer overreads.
  dvdec: drop unnecessary dv_tablegen.h #include
  build: fix doc generation errors in parallel builds
  Replace memset(0) by zero initializations.
  faandct: Remove FAAN_POSTSCALE define and related code.
  dvenc: print allowed profiles if the video doesn't conform to any of them.
  avcodec_encode_{audio,video}: only reallocate output packet when it has non-zero size.
  FATE: add a test for vp8 with changing frame size.
  fate: add kgv1 fate test.
  oggdec: calculate correct timestamps in Ogg/FLAC

Conflicts:
libavcodec/4xm.c
libavcodec/cook.c
libavcodec/dvdata.c
libavcodec/dvdsubdec.c
libavcodec/lagarith.c
libavcodec/lagarithrac.c
libavcodec/utils.c
tests/fate/video.mak

Merged-by: Michael Niedermayer <michaelni@gmx.at>
57 files changed:
1  2 
doc/Makefile
ffplay.c
ffserver.c
libavcodec/4xm.c
libavcodec/aaccoder.c
libavcodec/aacpsy.c
libavcodec/ac3dec.c
libavcodec/alsdec.c
libavcodec/bink.c
libavcodec/cabac_functions.h
libavcodec/cook.c
libavcodec/dct-test.c
libavcodec/dv.c
libavcodec/dvdata.c
libavcodec/dvdata.h
libavcodec/dvdec.c
libavcodec/dvdsubdec.c
libavcodec/dxva2.c
libavcodec/faandct.h
libavcodec/flac_parser.c
libavcodec/intrax8dsp.c
libavcodec/jpeglsenc.c
libavcodec/lagarith.c
libavcodec/lagarithrac.c
libavcodec/libxvid_rc.c
libavcodec/libxvidff.c
libavcodec/mjpegdec.c
libavcodec/motion_est.c
libavcodec/mpegaudiodec.c
libavcodec/mpegvideo_enc.c
libavcodec/ra144enc.c
libavcodec/rangecoder.c
libavcodec/rv34.c
libavcodec/smacker.c
libavcodec/tiff.c
libavcodec/truemotion1.c
libavcodec/wmalosslessdec.c
libavcodec/wmaprodec.c
libavcodec/wmavoice.c
libavcodec/x86/cabac.h
libavcodec/x86/h264_i386.h
libavdevice/bktr.c
libavformat/asfcrypt.c
libavformat/asfdec.c
libavformat/movenc.c
libavformat/oggparseflac.c
libavformat/rtsp.c
libavformat/sapenc.c
libavformat/sdp.c
libavformat/seek-test.c
libavformat/tcp.c
libavformat/udp.c
libavformat/utils.c
libavutil/imgutils.c
libavutil/parseutils.c
tests/fate/video.mak
tests/ref/fate/vp8-size-change

diff --cc doc/Makefile
Simple merge
diff --cc ffplay.c
Simple merge
diff --cc ffserver.c
Simple merge
index 53ee855160838e4ef62dd585bbca01c3e2439e8f,8cc5592c730d87eb99fb03772bb9d8fec2c9a70f..600cf81ccde3201ee54af6e78c0135a13dc6c7da
@@@ -576,19 -550,17 +576,18 @@@ static int decode_i_mb(FourXContext *f
  }
  
  static const uint8_t *read_huffman_tables(FourXContext *f,
 -                                          const uint8_t * const buf)
 +                                          const uint8_t * const buf, int buf_size)
  {
-     int frequency[512];
+     int frequency[512] = { 0 };
      uint8_t flag[512];
      int up[512];
      uint8_t len_tab[257];
      int bits_tab[257];
      int start, end;
      const uint8_t *ptr = buf;
 +    const uint8_t *ptr_end = buf + buf_size;
      int j;
  
-     memset(frequency, 0, sizeof(frequency));
      memset(up, -1, sizeof(up));
  
      start = *ptr++;
@@@ -691,10 -660,7 +690,9 @@@ static int decode_i2_frame(FourXContex
  
      for (y = 0; y < height; y += 16) {
          for (x = 0; x < width; x += 16) {
-             unsigned int color[4], bits;
+             unsigned int color[4] = { 0 }, bits;
 +            if (buf_end - buf < 8)
 +                return -1;
-             memset(color, 0, sizeof(color));
              // warning following is purely guessed ...
              color[0] = bytestream2_get_le16u(&g3);
              color[1] = bytestream2_get_le16u(&g3);
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
index 226edfa0efa2cb1d85941ea09a8332a6c89d10b9,4c74cf7b2316c994f2d611b25d909bdd53fc9405..90af15c243183dc7454ec43ad8f0cf72f6383ec9
@@@ -47,7 -47,8 +47,7 @@@ static void refill(CABACContext *c)
          c->low+= c->bytestream[0]<<1;
  #endif
      c->low -= CABAC_MASK;
-     c->bytestream+= CABAC_BITS/8;
 -    if (c->bytestream < c->bytestream_end)
 -        c->bytestream += CABAC_BITS / 8;
++    c->bytestream += CABAC_BITS / 8;
  }
  
  static inline void renorm_cabac_decoder_once(CABACContext *c){
@@@ -74,7 -75,8 +74,7 @@@ static void refill2(CABACContext *c)
  #endif
  
      c->low += x<<i;
-     c->bytestream+= CABAC_BITS/8;
 -    if (c->bytestream < c->bytestream_end)
 -        c->bytestream += CABAC_BITS/8;
++    c->bytestream += CABAC_BITS/8;
  }
  
  static av_always_inline int get_cabac_inline(CABACContext *c, uint8_t * const state){
index 31b0f1f8b081e729557254db00ca05ba62e38490,217abcf11761cb4f9acc503af455669f326e348c..cde2752ea7f3477c112231e6cc10dbbb3a173a01
@@@ -649,14 -645,11 +645,11 @@@ static void decode_vectors(COOKContext 
   */
  static int mono_decode(COOKContext *q, COOKSubpacket *p, float *mlt_buffer)
  {
-     int category_index[128];
+     int category_index[128] = { 0 };
+     int category[128]       = { 0 };
      int quant_index_table[102];
-     int category[128];
 -    int res;
 +    int res, i;
  
-     memset(&category,       0, sizeof(category));
-     memset(&category_index, 0, sizeof(category_index));
      if ((res = decode_envelope(q, p, quant_index_table)) < 0)
          return res;
      q->num_vectors = get_bits(&q->gb, p->log2_numvector_size);
Simple merge
diff --cc libavcodec/dv.c
Simple merge
index 3dc3ae67858f5822a4ba2f416a380a8eecd9e179,6d123a974145e1962aa73f9f84019b9c04ee6e12..6a29a59e5e2ad4d3a31a79bf734f3eafc368a175
@@@ -25,7 -25,7 +25,8 @@@
   */
  
  #include "libavutil/rational.h"
 +#include "libavutil/intreadwrite.h"
+ #include "libavutil/pixdesc.h"
  #include "avcodec.h"
  #include "dvdata.h"
  
Simple merge
Simple merge
index f4b54396d9c0c68e68a12eb545637eaffb4cf50d,83e71d1238ee98a98a9f242bee72cd9c78f7b234..afc485bf6b13155aab0f9413627197aaa560ec0c
@@@ -124,27 -116,12 +124,27 @@@ static int decode_rle(uint8_t *bitmap, 
  }
  
  static void guess_palette(uint32_t *rgba_palette,
 -                          uint8_t *colormap,
 -                          uint8_t *alpha,
 +                          DVDSubContext* ctx,
                            uint32_t subtitle_color)
  {
-     uint8_t color_used[16];
 +    static const uint8_t level_map[4][4] = {
 +        // this configuration (full range, lowest to highest) in tests
 +        // seemed most common, so assume this
 +        {0xff},
 +        {0x00, 0xff},
 +        {0x00, 0x80, 0xff},
 +        {0x00, 0x55, 0xaa, 0xff},
 +    };
+     uint8_t color_used[16] = { 0 };
      int nb_opaque_colors, i, level, j, r, g, b;
 +    uint8_t *colormap = ctx->colormap, *alpha = ctx->alpha;
 +
 +    if(ctx->has_palette) {
 +        for(i = 0; i < 4; i++)
 +            rgba_palette[i] = (ctx->palette[colormap[i]] & 0x00ffffff)
 +                              | ((alpha[i] * 17) << 24);
 +        return;
 +    }
  
      for(i = 0; i < 4; i++)
          rgba_palette[i] = 0;
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
index ce8af649abe34f296c6c55146f0952cf5808c5e9,201f77dda378c650564a95c7cbace266b7bb42a5..eea5c81a8a70587f7632f891a5e4247973ffedb9
@@@ -334,8 -335,8 +335,8 @@@ output_zeros
          i = 0;
          while (!zero_run && dst + i < end) {
              i++;
-             if (i+2 >= srcend - src)
-                 return src - start;
 -            if (src + i >= src_end)
++            if (i+2 >= src_end - src)
+                 return AVERROR_INVALIDDATA;
              zero_run =
                  !(src[i] | (src[i + 1] & mask1) | (src[i + 2] & mask2));
          }
          } else {
              memcpy(dst, src, i);
              src += i;
+             dst += i;
          }
      }
-     return  src - start;
 -    return src_start - src;
++    return  src - src_start;
  }
  
  
@@@ -366,10 -368,10 +368,10 @@@ static int lag_decode_arith_plane(Lagar
      int read = 0;
      uint32_t length;
      uint32_t offset = 1;
 -    int esc_count = src[0];
 +    int esc_count;
      GetBitContext gb;
      lag_rac rac;
-     const uint8_t *srcend = src + src_size;
+     const uint8_t *src_end = src + src_size;
  
      rac.avctx = l->avctx;
      l->zeros = 0;
@@@ -518,10 -518,15 +524,14 @@@ static int lag_decode_frame(AVCodecCont
          }
          for (i = 0; i < planes; i++)
              srcs[i] = l->rgb_planes + (i + 1) * l->rgb_stride * avctx->height - l->rgb_stride;
-         for (i = 0; i < planes; i++) {
 -        if (offset_ry >= buf_size ||
 -            offset_gu >= buf_size ||
 -            offset_bv >= buf_size ||
 -            (planes == 4 && offs[3] >= buf_size)) {
 -            av_log(avctx, AV_LOG_ERROR,
 -                    "Invalid frame offsets\n");
 -            return AVERROR_INVALIDDATA;
 -        }
++        for (i = 0; i < planes; i++)
 +            if (buf_size <= offs[i]) {
++                av_log(avctx, AV_LOG_ERROR,
++                        "Invalid frame offsets\n");
 +                return AVERROR_INVALIDDATA;
 +            }
++
+         for (i = 0; i < planes; i++)
              lag_decode_arith_plane(l, srcs[i],
                                     avctx->width, avctx->height,
                                     -l->rgb_stride, buf + offs[i],
              av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n");
              return -1;
          }
 +        if (buf_size <= offset_ry || buf_size <= offset_gu || buf_size <= offset_bv) {
 +            return AVERROR_INVALIDDATA;
 +        }
  
+         if (offset_ry >= buf_size ||
+             offset_gu >= buf_size ||
+             offset_bv >= buf_size) {
+             av_log(avctx, AV_LOG_ERROR,
+                    "Invalid frame offsets\n");
+             return AVERROR_INVALIDDATA;
+         }
          lag_decode_arith_plane(l, p->data[0], avctx->width, avctx->height,
                                 p->linesize[0], buf + offset_ry,
                                 buf_size - offset_ry);
index b3ad94189ae94188e015bbc38c143a61e94a7d8c,edfb18fb746851f4c7dc83ee937976ef6de48535..9f7bc41ef52b20c81667c9edca29d030f8c846d2
@@@ -38,9 -38,11 +38,11 @@@ void ff_lag_rac_init(lag_rac *l, GetBit
       * however, it gets skipped by the call to align_get_bits()
       */
      align_get_bits(gb);
+     left                = get_bits_left(gb) >> 3;
      l->bytestream_start =
      l->bytestream       = gb->buffer + get_bits_count(gb) / 8;
-     l->bytestream_end   = l->bytestream_start + get_bits_left(gb) / 8;
 -    l->bytestream_end   = l->bytestream_start + FFMIN(length, left);
++    l->bytestream_end   = l->bytestream_start + left;
      l->range        = 0x80;
      l->low          = *l->bytestream >> 1;
      l->hash_shift   = FFMAX(l->scale - 8, 0);
Simple merge
index 3bca9456f13b5318f5b4e5b0855535777185b36a,0193bc875167bcbf0f5e8a49b31a69cca533cb34..3ec75fe134f1a7edc60012849759c9b3a4dc73d4
@@@ -94,14 -131,14 +94,14 @@@ static av_cold int xvid_encode_init(AVC
      uint16_t *intra, *inter;
      int fd;
  
-     xvid_plugin_single_t single;
-     struct xvid_ff_pass1 rc2pass1;
-     xvid_plugin_2pass2_t rc2pass2;
-     xvid_gbl_init_t xvid_gbl_init;
-     xvid_enc_create_t xvid_enc_create;
+     xvid_plugin_single_t single       = { 0 };
+     struct xvid_ff_pass1 rc2pass1     = { 0 };
+     xvid_plugin_2pass2_t rc2pass2     = { 0 };
+     xvid_gbl_init_t xvid_gbl_init     = { 0 };
+     xvid_enc_create_t xvid_enc_create = { 0 };
      xvid_enc_plugin_t plugins[7];
  
 -    /* Bring in VOP flags from avconv command-line */
 +    /* Bring in VOP flags from ffmpeg command-line */
      x->vop_flags = XVID_VOP_HALFPEL; /* Bare minimum quality */
      if( xvid_flags & CODEC_FLAG_4MV )
          x->vop_flags |= XVID_VOP_INTER4V; /* Level 3 */
@@@ -382,16 -414,17 +377,14 @@@ static int xvid_encode_frame(AVCodecCon
      int mb_width   = (avctx->width  + 15) / 16;
      int mb_height  = (avctx->height + 15) / 16;
  
-     xvid_enc_frame_t xvid_enc_frame;
-     xvid_enc_stats_t xvid_enc_stats;
+     xvid_enc_frame_t xvid_enc_frame = { 0 };
+     xvid_enc_stats_t xvid_enc_stats = { 0 };
  
 -    if (!user_packet &&
 -        (ret = av_new_packet(pkt, mb_width*mb_height*MAX_MB_BYTES + FF_MIN_BUFFER_SIZE)) < 0) {
 -        av_log(avctx, AV_LOG_ERROR, "Error getting output packet.\n");
 +    if ((ret = ff_alloc_packet2(avctx, pkt, mb_width*mb_height*MAX_MB_BYTES + FF_MIN_BUFFER_SIZE)) < 0)
          return ret;
 -    }
  
      /* Start setting up the frame */
-     memset(&xvid_enc_frame, 0, sizeof(xvid_enc_frame));
      xvid_enc_frame.version = XVID_VERSION;
-     memset(&xvid_enc_stats, 0, sizeof(xvid_enc_stats));
      xvid_enc_stats.version = XVID_VERSION;
      *p = *picture;
  
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
index 2bb0be63748d2d2f8e5ef14108f942dc3d298d5d,a6ec22831dcff6e575b175b28c5a670c0364cacd..0c4419b4f3f8ea99f3bce379af7d6c586cd81893
          "shl    %%cl        , "low"                                     \n\t"\
          "mov    "tmpbyte"   , "statep"                                  \n\t"\
          "test   "lowword"   , "lowword"                                 \n\t"\
-         " jnz   1f                                                      \n\t"\
+         " jnz   2f                                                      \n\t"\
          "mov    "byte"      , %%"REG_c"                                 \n\t"\
 -        "cmp    "end"       , %%"REG_c"                                 \n\t"\
 -        "jge    1f                                                      \n\t"\
          "add"OPSIZE" $2     , "byte"                                    \n\t"\
 -        "1:                                                             \n\t"\
          "movzwl (%%"REG_c")     , "tmp"                                 \n\t"\
          "lea    -1("low")   , %%ecx                                     \n\t"\
          "xor    "low"       , %%ecx                                     \n\t"\
          "add    $7          , %%ecx                                     \n\t"\
          "shl    %%cl        , "tmp"                                     \n\t"\
          "add    "tmp"       , "low"                                     \n\t"\
-         "1:                                                             \n\t"
+         "2:                                                             \n\t"
  
 -#if HAVE_7REGS && !defined(BROKEN_RELOCATIONS)
 +
 +#if HAVE_7REGS && !defined(BROKEN_RELOCATIONS) && !(defined(__i386) && defined(__clang__) && (__clang_major__<2 || (__clang_major__==2 && __clang_minor__<10)))\
 +                                               && !(defined(__i386) && !defined(__clang__) && defined(__llvm__) && __GNUC__==4 && __GNUC_MINOR__==2 && __GNUC_PATCHLEVEL__<=1)
  #define get_cabac_inline get_cabac_inline_x86
  static av_always_inline int get_cabac_inline_x86(CABACContext *c,
                                                   uint8_t *const state)
@@@ -107,32 -110,37 +109,36 @@@ static av_always_inline int get_cabac_b
  {
      x86_reg tmp;
      __asm__ volatile(
-         "movl %4, %k1                           \n\t"
-         "movl %2, %%eax                         \n\t"
-         "shl $17, %k1                           \n\t"
-         "add %%eax, %%eax                       \n\t"
-         "sub %k1, %%eax                         \n\t"
-         "cltd                                   \n\t"
-         "and %%edx, %k1                         \n\t"
-         "add %k1, %%eax                         \n\t"
-         "xor %%edx, %%ecx                       \n\t"
-         "sub %%edx, %%ecx                       \n\t"
-         "test %%ax, %%ax                        \n\t"
-         " jnz 1f                                \n\t"
-         "mov  %3, %1                            \n\t"
-         "subl $0xFFFF, %%eax                    \n\t"
-         "movzwl (%1), %%edx                     \n\t"
-         "bswap %%edx                            \n\t"
-         "shrl $15, %%edx                        \n\t"
-         "add  $2, %1                            \n\t"
-         "addl %%edx, %%eax                      \n\t"
-         "mov  %1, %3                            \n\t"
-         "1:                                     \n\t"
-         "movl %%eax, %2                         \n\t"
+         "movl        %a6(%2), %k1       \n\t"
+         "movl        %a3(%2), %%eax     \n\t"
+         "shl             $17, %k1       \n\t"
+         "add           %%eax, %%eax     \n\t"
+         "sub             %k1, %%eax     \n\t"
+         "cltd                           \n\t"
+         "and           %%edx, %k1       \n\t"
+         "add             %k1, %%eax     \n\t"
+         "xor           %%edx, %%ecx     \n\t"
+         "sub           %%edx, %%ecx     \n\t"
+         "test           %%ax, %%ax      \n\t"
+         "jnz              1f            \n\t"
+         "mov         %a4(%2), %1        \n\t"
+         "subl        $0xFFFF, %%eax     \n\t"
+         "movzwl         (%1), %%edx     \n\t"
+         "bswap         %%edx            \n\t"
+         "shrl            $15, %%edx     \n\t"
++        "add              $2, %1        \n\t"
+         "addl          %%edx, %%eax     \n\t"
 -        "cmp         %a5(%2), %1        \n\t"
 -        "jge              1f            \n\t"
 -        "add"OPSIZE"      $2, %a4(%2)   \n\t"
++        "mov              %1, %a4(%2)   \n\t"
+         "1:                             \n\t"
+         "movl          %%eax, %a3(%2)   \n\t"
  
-         :"+c"(val), "=&r"(tmp), "+m"(c->low), "+m"(c->bytestream)
-         :"m"(c->range)
-         : "%eax", "%edx"
+         : "+c"(val), "=&r"(tmp)
+         : "r"(c),
+           "i"(offsetof(CABACContext, low)),
+           "i"(offsetof(CABACContext, bytestream)),
+           "i"(offsetof(CABACContext, bytestream_end)),
+           "i"(offsetof(CABACContext, range))
+         : "%eax", "%edx", "memory"
      );
      return val;
  }
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
index 02aa39598cecc49b481ff8806c52c1cca058b2a0,a676cd10d16b994b66f22f8922afd024b407bf17..c790fd4e7c37a24484bf4f3db0aaed89df7d1be3
@@@ -124,52 -124,56 +124,55 @@@ fate-iff-fibonacci: CMD = md5 -i $(SAMP
  FATE_IFF += fate-iff-ilbm
  fate-iff-ilbm: CMD = framecrc -i $(SAMPLES)/iff/lms-matriks.ilbm -pix_fmt rgb24
  
 -FATE_TESTS += $(FATE_IFF)
 +FATE_VIDEO += $(FATE_IFF)
  fate-iff: $(FATE_IFF)
  
 -FATE_TESTS += fate-kgv1
++FATE_VIDEO += fate-kgv1
+ fate-kgv1: CMD = framecrc -i $(SAMPLES)/kega/kgv1.avi -pix_fmt rgb555le -an
 -FATE_TESTS += fate-kmvc
 +FATE_VIDEO += fate-kmvc
  fate-kmvc: CMD = framecrc -i $(SAMPLES)/KMVC/LOGO1.AVI -an -t 3 -pix_fmt rgb24
  
 -FATE_TESTS += fate-mimic
 +FATE_VIDEO += fate-mimic
  fate-mimic: CMD = framecrc -idct simple -i $(SAMPLES)/mimic/mimic2-womanloveffmpeg.cam
  
 -FATE_TESTS += fate-mjpegb
 +FATE_VIDEO += fate-mjpegb
  fate-mjpegb: CMD = framecrc -idct simple -flags +bitexact -i $(SAMPLES)/mjpegb/mjpegb_part.mov -an
  
 -FATE_TESTS += fate-motionpixels
 +FATE_VIDEO += fate-motionpixels
  fate-motionpixels: CMD = framecrc -i $(SAMPLES)/motion-pixels/INTRO-partial.MVI -an -pix_fmt rgb24 -vframes 111
  
 -FATE_TESTS += fate-mpeg2-field-enc
 +FATE_VIDEO += fate-mpeg2-field-enc
  fate-mpeg2-field-enc: CMD = framecrc -flags +bitexact -dct fastint -idct simple -i $(SAMPLES)/mpeg2/mpeg2_field_encoding.ts -an
  
 -# FIXME dropped frames in this test because of coarse timebase
 -FATE_TESTS += fate-nuv
 +FATE_VIDEO += fate-nuv
  fate-nuv: CMD = framecrc -idct simple -i $(SAMPLES)/nuv/Today.nuv -an
  
 -FATE_TESTS += fate-qpeg
 +FATE_VIDEO += fate-qpeg
  fate-qpeg: CMD = framecrc -i $(SAMPLES)/qpeg/Clock.avi -an -pix_fmt rgb24
  
 -FATE_TESTS += fate-r210
 +FATE_VIDEO += fate-r210
  fate-r210: CMD = framecrc -i $(SAMPLES)/r210/r210.avi -pix_fmt rgb48le
  
 -FATE_TESTS += fate-rl2
 +FATE_VIDEO += fate-rl2
  fate-rl2: CMD = framecrc -i $(SAMPLES)/rl2/Z4915300.RL2 -pix_fmt rgb24 -an
  
 -FATE_TESTS += fate-smacker
 +FATE_VIDEO += fate-smacker
  fate-smacker: CMD = framecrc -i $(SAMPLES)/smacker/wetlogo.smk -pix_fmt rgb24
  
 -FATE_TESTS += fate-smc
 +FATE_VIDEO += fate-smc
  fate-smc: CMD = framecrc -i $(SAMPLES)/smc/cass_schi.qt -pix_fmt rgb24
  
 -FATE_TESTS += fate-sp5x
 +FATE_VIDEO += fate-sp5x
  fate-sp5x: CMD = framecrc -idct simple -i $(SAMPLES)/sp5x/sp5x_problem.avi
  
 -FATE_TESTS += fate-sub-srt
 +FATE_VIDEO += fate-sub-srt
  fate-sub-srt: CMD = md5 -i $(SAMPLES)/sub/SubRip_capability_tester.srt -f ass
  
 -FATE_TESTS += fate-tiertex-seq
 +FATE_VIDEO += fate-tiertex-seq
  fate-tiertex-seq: CMD = framecrc -i $(SAMPLES)/tiertex-seq/Gameover.seq -pix_fmt rgb24
  
 -FATE_TESTS += fate-tmv
 +FATE_VIDEO += fate-tmv
  fate-tmv: CMD = framecrc -i $(SAMPLES)/tmv/pop-partial.tmv -pix_fmt rgb24
  
  FATE_TXD += fate-txd-16bpp
index 0000000000000000000000000000000000000000,d87c563b7db00849b4f4e85fa0b751cddbe8e80f..85e27411bc4ca09d21edd500dd1a110a86280710
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,31 +1,31 @@@
 -#tb 0: 1/1000
 -0,          0,          0,        0,  3110400, 649f0f2e3e09e6938161bb07bede5282
 -0,         33,         33,        0,  3110400, f24f632d50eafef73fa89391ca98c375
 -0,         67,         67,        0,  3110400, 57b6d2ed51bfaf6588f39eb73e7922b8
 -0,        100,        100,        0,  3110400, 463e0988ce28eb1c30669c06113deb4c
 -0,        133,        133,        0,  3110400, 3c4ac119f998a0ccd7d3a6361f4d10a0
 -0,        167,        167,        0,  3110400, 0f11c5cc9c1ac9055e21e417e1259c69
 -0,        200,        200,        0,  3110400, 08c6e70f101c61013f2969b6a370d3f9
 -0,        233,        233,        0,  3110400, ea8cb37017d8a9d20bf443b730fd8365
 -0,        267,        267,        0,  3110400, 3f614203f054c89151680f4b1b0c6c4c
 -0,        300,        300,        0,  3110400, 90488ee40d06c0f05eee8348dde57325
 -0,        333,        333,        0,  3110400, f48117b74ac7455e69fd14e9b68ce95d
 -0,        367,        367,        0,  3110400, 37ee06b6267b5ec25fd642525cf4469a
 -0,        400,        400,        0,  3110400, cd5e0988e7c084f29bda4a18cb38c1e8
 -0,        433,        433,        0,  3110400, 1fe943b01f00b8bc0cb5722010cef03c
 -0,        467,        467,        0,  3110400, 40d8e8150326c7eb061d3f6cfd307d97
 -0,        500,        500,        0,  3110400, 49812cbf928858cb56331c8c8aaaf556
 -0,        533,        533,        0,  3110400, 3df607c752273ebcac21123e2c4c010c
 -0,        567,        567,        0,  3110400, 020a0ae162c8326f83f8f4d8bf1627d2
 -0,        600,        600,        0,  3110400, 459ac9f9488a6a2f4e378703a6b2a45a
 -0,        633,        633,        0,  3110400, b1baf9a56f7667e4b8f4e3007b9ebe0f
 -0,        667,        667,        0,  3110400, eea61a72a05c380450a96b575ba25f65
 -0,        700,        700,        0,  3110400, e013a9f233824631d8c6e3f93106eebe
 -0,        733,        733,        0,  3110400, 6c64147ebdee4b36728c6978b290ffb5
 -0,        767,        767,        0,  3110400, c37956235667345d92fdfc7c62496e84
 -0,        800,        800,        0,  3110400, 0ac58c28575b804d9e63395653c3aef2
 -0,        833,        833,        0,  3110400, 641f2a78e338c733ef159bd36ec7966f
 -0,        867,        867,        0,  3110400, 9402d455fa5bd556b85f479c42c3a4d2
 -0,        900,        900,        0,  3110400, ca86e16b05db0c79b028d709c19e1f13
 -0,        933,        933,        0,  3110400, 9167d622809df07eef9bcb3cb09de0f0
 -0,        967,        967,        0,  3110400, e1d52ae2a2eb6aabb9bdc7e7ed05253e
++#tb 0: 1/30
++0,          0,          0,        1,  3110400, f9b685c9aaa7652faeded50ed1005414
++0,          1,          1,        1,  3110400, d22c3d6a1e57ba4af2bd19e09ad7bdb1
++0,          2,          2,        1,  3110400, 0d516dc90992321576a1f090b382beab
++0,          3,          3,        1,  3110400, a306b1c732dbaea18ad1efd9d3820094
++0,          4,          4,        1,  3110400, faddd965d3e70e62cad07dc72225e8c2
++0,          5,          5,        1,  3110400, 375795188ae0ce026179aea29cb8a1b4
++0,          6,          6,        1,  3110400, aa372227e1630513116ff6678a2c4fcf
++0,          7,          7,        1,  3110400, e4937f5756a3bbbe2660c0874514479b
++0,          8,          8,        1,  3110400, ad7d1f6a28ac9f6490f1ee7595ef6b94
++0,          9,          9,        1,  3110400, 305414d3ca8aca36242e08041b92ad69
++0,         10,         10,        1,  3110400, b719401bd210e4fc02be258ca866e50e
++0,         11,         11,        1,  3110400, a25f312e44492715f334ab97f50e73ad
++0,         12,         12,        1,  3110400, 1da8d6815b3ce412690e86f18444c621
++0,         13,         13,        1,  3110400, 0522ee62ed61c900b71f3fff2030026b
++0,         14,         14,        1,  3110400, 523d2a4f5571a952f68d5768eb3336dc
++0,         15,         15,        1,  3110400, 03a9b1f05d48c25d689f74db4d2cdbe1
++0,         16,         16,        1,  3110400, 6ae91271da4f5c6e604df8e04a40ea45
++0,         17,         17,        1,  3110400, 5b3e7bac9f61c4248999a2587a630d28
++0,         18,         18,        1,  3110400, 60069876ccffeee06a535e471b8916e8
++0,         19,         19,        1,  3110400, 9f5101c81bc7702d98baee78c4ffe65d
++0,         20,         20,        1,  3110400, c02641360b4d8af4640aa330d9eb8bb0
++0,         21,         21,        1,  3110400, 63274292e7d3f2482c3c282722ae3f02
++0,         22,         22,        1,  3110400, ae39b5a18260046e96b4b44520ef0f7d
++0,         23,         23,        1,  3110400, bb89af6f8f2b13d0cd668d445669f655
++0,         24,         24,        1,  3110400, 0ac58c28575b804d9e63395653c3aef2
++0,         25,         25,        1,  3110400, 641f2a78e338c733ef159bd36ec7966f
++0,         26,         26,        1,  3110400, 9402d455fa5bd556b85f479c42c3a4d2
++0,         27,         27,        1,  3110400, fa2407483a8e169a161e45ac6cfa7831
++0,         28,         28,        1,  3110400, 087744a0ac52ef96803fc9c4fb17635b
++0,         29,         29,        1,  3110400, b62328f2bd00b269cd3a359360b613b7