}
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++;
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);
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){
#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){
*/
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);
*/
#include "libavutil/rational.h"
+#include "libavutil/intreadwrite.h"
+ #include "libavutil/pixdesc.h"
#include "avcodec.h"
#include "dvdata.h"
}
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;
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;
}
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;
}
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);
* 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);
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 */
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;
"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)
{
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;
}
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
--- /dev/null
-#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