X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavcodec%2Fsheervideo.c;h=fb5a39303e0cb8fd16d65ee5a27744e418549b00;hb=a247ac640df3da573cd661065bf53f37863e2b46;hp=50c3ebcee72a07ecb42e08b33d03b9f5d769884a;hpb=f32d2939555706365ad1d39aadd5ee7ce1d9fa4f;p=ffmpeg diff --git a/libavcodec/sheervideo.c b/libavcodec/sheervideo.c index 50c3ebcee72..fb5a39303e0 100644 --- a/libavcodec/sheervideo.c +++ b/libavcodec/sheervideo.c @@ -23,6 +23,9 @@ #include #include +#define CACHED_BITSTREAM_READER !ARCH_X86_32 +#define SHEER_VLC_BITS 12 + #include "libavutil/intreadwrite.h" #include "avcodec.h" #include "get_bits.h" @@ -62,10 +65,10 @@ static void decode_ca4i(AVCodecContext *avctx, AVFrame *p, GetBitContext *gb) for (x = 0; x < avctx->width; x++) { int y, u, v, a; - a = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2); - y = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2); - u = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2); - v = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2); + a = get_vlc2(gb, s->vlc[1].table, SHEER_VLC_BITS, 2); + y = get_vlc2(gb, s->vlc[0].table, SHEER_VLC_BITS, 2); + u = get_vlc2(gb, s->vlc[1].table, SHEER_VLC_BITS, 2); + v = get_vlc2(gb, s->vlc[1].table, SHEER_VLC_BITS, 2); dst_a[x] = pred[3] = (a + pred[3]) & 0x3ff; dst_y[x] = pred[0] = (y + pred[0]) & 0x3ff; @@ -105,10 +108,10 @@ static void decode_ca4p(AVCodecContext *avctx, AVFrame *p, GetBitContext *gb) for (x = 0; x < avctx->width; x++) { int y, u, v, a; - a = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2); - y = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2); - u = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2); - v = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2); + a = get_vlc2(gb, s->vlc[1].table, SHEER_VLC_BITS, 2); + y = get_vlc2(gb, s->vlc[0].table, SHEER_VLC_BITS, 2); + u = get_vlc2(gb, s->vlc[1].table, SHEER_VLC_BITS, 2); + v = get_vlc2(gb, s->vlc[1].table, SHEER_VLC_BITS, 2); dst_a[x] = pred[3] = (a + pred[3]) & 0x3ff; dst_y[x] = pred[0] = (y + pred[0]) & 0x3ff; @@ -145,10 +148,10 @@ static void decode_ca4p(AVCodecContext *avctx, AVFrame *p, GetBitContext *gb) pred_T[2] = dst_v[-p->linesize[2] / 2 + x]; pred_T[3] = dst_a[-p->linesize[3] / 2 + x]; - a = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2); - y = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2); - u = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2); - v = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2); + a = get_vlc2(gb, s->vlc[1].table, SHEER_VLC_BITS, 2); + y = get_vlc2(gb, s->vlc[0].table, SHEER_VLC_BITS, 2); + u = get_vlc2(gb, s->vlc[1].table, SHEER_VLC_BITS, 2); + v = get_vlc2(gb, s->vlc[1].table, SHEER_VLC_BITS, 2); dst_a[x] = pred_L[3] = (a + ((3 * (pred_T[3] + pred_L[3]) - 2 * pred_TL[3]) >> 2)) & 0x3ff; dst_y[x] = pred_L[0] = (y + ((3 * (pred_T[0] + pred_L[0]) - 2 * pred_TL[0]) >> 2)) & 0x3ff; @@ -192,9 +195,9 @@ static void decode_ybr10i(AVCodecContext *avctx, AVFrame *p, GetBitContext *gb) for (x = 0; x < avctx->width; x++) { int y, u, v; - y = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2); - u = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2); - v = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2); + y = get_vlc2(gb, s->vlc[0].table, SHEER_VLC_BITS, 2); + u = get_vlc2(gb, s->vlc[1].table, SHEER_VLC_BITS, 2); + v = get_vlc2(gb, s->vlc[1].table, SHEER_VLC_BITS, 2); dst_y[x] = pred[0] = (y + pred[0]) & 0x3ff; dst_u[x] = pred[1] = (u + pred[1]) & 0x3ff; @@ -230,9 +233,9 @@ static void decode_ybr10(AVCodecContext *avctx, AVFrame *p, GetBitContext *gb) for (x = 0; x < avctx->width; x++) { int y, u, v; - y = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2); - u = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2); - v = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2); + y = get_vlc2(gb, s->vlc[0].table, SHEER_VLC_BITS, 2); + u = get_vlc2(gb, s->vlc[1].table, SHEER_VLC_BITS, 2); + v = get_vlc2(gb, s->vlc[1].table, SHEER_VLC_BITS, 2); dst_y[x] = pred[0] = (y + pred[0]) & 0x3ff; dst_u[x] = pred[1] = (u + pred[1]) & 0x3ff; @@ -264,9 +267,9 @@ static void decode_ybr10(AVCodecContext *avctx, AVFrame *p, GetBitContext *gb) pred_T[1] = dst_u[-p->linesize[1] / 2 + x]; pred_T[2] = dst_v[-p->linesize[2] / 2 + x]; - y = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2); - u = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2); - v = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2); + y = get_vlc2(gb, s->vlc[0].table, SHEER_VLC_BITS, 2); + u = get_vlc2(gb, s->vlc[1].table, SHEER_VLC_BITS, 2); + v = get_vlc2(gb, s->vlc[1].table, SHEER_VLC_BITS, 2); dst_y[x] = pred_L[0] = (y + ((3 * (pred_T[0] + pred_L[0]) - 2 * pred_TL[0]) >> 2)) & 0x3ff; dst_u[x] = pred_L[1] = (u + ((3 * (pred_T[1] + pred_L[1]) - 2 * pred_TL[1]) >> 2)) & 0x3ff; @@ -308,10 +311,10 @@ static void decode_yry10i(AVCodecContext *avctx, AVFrame *p, GetBitContext *gb) for (x = 0; x < avctx->width; x += 2) { int y1, y2, u, v; - y1 = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2); - u = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2); - y2 = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2); - v = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2); + y1 = get_vlc2(gb, s->vlc[0].table, SHEER_VLC_BITS, 2); + u = get_vlc2(gb, s->vlc[1].table, SHEER_VLC_BITS, 2); + y2 = get_vlc2(gb, s->vlc[0].table, SHEER_VLC_BITS, 2); + v = get_vlc2(gb, s->vlc[1].table, SHEER_VLC_BITS, 2); dst_y[x ] = pred[0] = (y1 + pred[0]) & 0x3ff; dst_u[x / 2] = pred[1] = (u + pred[1]) & 0x3ff; @@ -349,10 +352,10 @@ static void decode_yry10(AVCodecContext *avctx, AVFrame *p, GetBitContext *gb) for (x = 0; x < avctx->width; x += 2) { int y1, y2, u, v; - y1 = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2); - u = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2); - y2 = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2); - v = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2); + y1 = get_vlc2(gb, s->vlc[0].table, SHEER_VLC_BITS, 2); + u = get_vlc2(gb, s->vlc[1].table, SHEER_VLC_BITS, 2); + y2 = get_vlc2(gb, s->vlc[0].table, SHEER_VLC_BITS, 2); + v = get_vlc2(gb, s->vlc[1].table, SHEER_VLC_BITS, 2); dst_y[x ] = pred[0] = (y1 + pred[0]) & 0x3ff; dst_u[x / 2] = pred[1] = (u + pred[1]) & 0x3ff; @@ -387,10 +390,10 @@ static void decode_yry10(AVCodecContext *avctx, AVFrame *p, GetBitContext *gb) pred_T[1] = dst_u[-p->linesize[1] / 2 + x / 2]; pred_T[2] = dst_v[-p->linesize[2] / 2 + x / 2]; - y1 = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2); - u = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2); - y2 = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2); - v = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2); + y1 = get_vlc2(gb, s->vlc[0].table, SHEER_VLC_BITS, 2); + u = get_vlc2(gb, s->vlc[1].table, SHEER_VLC_BITS, 2); + y2 = get_vlc2(gb, s->vlc[0].table, SHEER_VLC_BITS, 2); + v = get_vlc2(gb, s->vlc[1].table, SHEER_VLC_BITS, 2); dst_y[x ] = pred_L[0] = (y1 + ((3 * (pred_T[0] + pred_L[0]) - 2 * pred_TL[0]) >> 2)) & 0x3ff; dst_u[x / 2] = pred_L[1] = (u + (((pred_L[1] - pred_TL[1]) >> 1) + pred_T[1])) & 0x3ff; @@ -436,12 +439,12 @@ static void decode_ca2i(AVCodecContext *avctx, AVFrame *p, GetBitContext *gb) for (x = 0; x < avctx->width; x += 2) { int y1, y2, u, v, a1, a2; - a1 = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2); - y1 = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2); - u = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2); - a2 = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2); - y2 = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2); - v = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2); + a1 = get_vlc2(gb, s->vlc[1].table, SHEER_VLC_BITS, 2); + y1 = get_vlc2(gb, s->vlc[0].table, SHEER_VLC_BITS, 2); + u = get_vlc2(gb, s->vlc[1].table, SHEER_VLC_BITS, 2); + a2 = get_vlc2(gb, s->vlc[1].table, SHEER_VLC_BITS, 2); + y2 = get_vlc2(gb, s->vlc[0].table, SHEER_VLC_BITS, 2); + v = get_vlc2(gb, s->vlc[1].table, SHEER_VLC_BITS, 2); dst_y[x ] = pred[0] = (y1 + pred[0]) & 0x3ff; dst_u[x / 2] = pred[1] = (u + pred[1]) & 0x3ff; @@ -485,12 +488,12 @@ static void decode_ca2p(AVCodecContext *avctx, AVFrame *p, GetBitContext *gb) for (x = 0; x < avctx->width; x += 2) { int y1, y2, u, v, a1, a2; - a1 = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2); - y1 = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2); - u = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2); - a2 = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2); - y2 = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2); - v = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2); + a1 = get_vlc2(gb, s->vlc[1].table, SHEER_VLC_BITS, 2); + y1 = get_vlc2(gb, s->vlc[0].table, SHEER_VLC_BITS, 2); + u = get_vlc2(gb, s->vlc[1].table, SHEER_VLC_BITS, 2); + a2 = get_vlc2(gb, s->vlc[1].table, SHEER_VLC_BITS, 2); + y2 = get_vlc2(gb, s->vlc[0].table, SHEER_VLC_BITS, 2); + v = get_vlc2(gb, s->vlc[1].table, SHEER_VLC_BITS, 2); dst_y[x ] = pred[0] = (y1 + pred[0]) & 0x3ff; dst_u[x / 2] = pred[1] = (u + pred[1]) & 0x3ff; @@ -533,12 +536,12 @@ static void decode_ca2p(AVCodecContext *avctx, AVFrame *p, GetBitContext *gb) pred_T[4] = dst_a[-p->linesize[3] / 2 + x]; pred_T[5] = dst_a[-p->linesize[3] / 2 + x + 1]; - a1 = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2); - y1 = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2); - u = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2); - a2 = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2); - y2 = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2); - v = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2); + a1 = get_vlc2(gb, s->vlc[1].table, SHEER_VLC_BITS, 2); + y1 = get_vlc2(gb, s->vlc[0].table, SHEER_VLC_BITS, 2); + u = get_vlc2(gb, s->vlc[1].table, SHEER_VLC_BITS, 2); + a2 = get_vlc2(gb, s->vlc[1].table, SHEER_VLC_BITS, 2); + y2 = get_vlc2(gb, s->vlc[0].table, SHEER_VLC_BITS, 2); + v = get_vlc2(gb, s->vlc[1].table, SHEER_VLC_BITS, 2); dst_y[x ] = pred_L[0] = (y1 + ((3 * (pred_T[0] + pred_L[0]) - 2 * pred_TL[0]) >> 2)) & 0x3ff; dst_u[x / 2] = pred_L[1] = (u + (((pred_L[1] - pred_TL[1]) >> 1) + pred_T[1])) & 0x3ff; @@ -588,12 +591,12 @@ static void decode_c82i(AVCodecContext *avctx, AVFrame *p, GetBitContext *gb) for (x = 0; x < avctx->width; x += 2) { int y1, y2, u, v, a1, a2; - a1 = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2); - y1 = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2); - u = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2); - a2 = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2); - y2 = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2); - v = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2); + a1 = get_vlc2(gb, s->vlc[1].table, SHEER_VLC_BITS, 2); + y1 = get_vlc2(gb, s->vlc[0].table, SHEER_VLC_BITS, 2); + u = get_vlc2(gb, s->vlc[1].table, SHEER_VLC_BITS, 2); + a2 = get_vlc2(gb, s->vlc[1].table, SHEER_VLC_BITS, 2); + y2 = get_vlc2(gb, s->vlc[0].table, SHEER_VLC_BITS, 2); + v = get_vlc2(gb, s->vlc[1].table, SHEER_VLC_BITS, 2); dst_y[x ] = pred[0] = (y1 + pred[0]) & 0xff; dst_y[x + 1] = pred[0] = (y2 + pred[0]) & 0xff; @@ -637,12 +640,12 @@ static void decode_c82p(AVCodecContext *avctx, AVFrame *p, GetBitContext *gb) for (x = 0; x < avctx->width; x += 2) { int y1, y2, u, v, a1, a2; - a1 = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2); - y1 = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2); - u = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2); - a2 = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2); - y2 = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2); - v = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2); + a1 = get_vlc2(gb, s->vlc[1].table, SHEER_VLC_BITS, 2); + y1 = get_vlc2(gb, s->vlc[0].table, SHEER_VLC_BITS, 2); + u = get_vlc2(gb, s->vlc[1].table, SHEER_VLC_BITS, 2); + a2 = get_vlc2(gb, s->vlc[1].table, SHEER_VLC_BITS, 2); + y2 = get_vlc2(gb, s->vlc[0].table, SHEER_VLC_BITS, 2); + v = get_vlc2(gb, s->vlc[1].table, SHEER_VLC_BITS, 2); dst_y[x ] = pred[0] = (y1 + pred[0]) & 0xff; dst_u[x / 2] = pred[1] = (u + pred[1]) & 0xff; @@ -685,12 +688,12 @@ static void decode_c82p(AVCodecContext *avctx, AVFrame *p, GetBitContext *gb) pred_T[4] = dst_a[-p->linesize[3] + x]; pred_T[5] = dst_a[-p->linesize[3] + x + 1]; - a1 = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2); - y1 = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2); - u = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2); - a2 = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2); - y2 = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2); - v = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2); + a1 = get_vlc2(gb, s->vlc[1].table, SHEER_VLC_BITS, 2); + y1 = get_vlc2(gb, s->vlc[0].table, SHEER_VLC_BITS, 2); + u = get_vlc2(gb, s->vlc[1].table, SHEER_VLC_BITS, 2); + a2 = get_vlc2(gb, s->vlc[1].table, SHEER_VLC_BITS, 2); + y2 = get_vlc2(gb, s->vlc[0].table, SHEER_VLC_BITS, 2); + v = get_vlc2(gb, s->vlc[1].table, SHEER_VLC_BITS, 2); dst_y[x ] = pred_L[0] = (y1 + ((3 * (pred_T[0] + pred_L[0]) - 2 * pred_TL[0]) >> 2)) & 0xff; dst_u[x / 2] = pred_L[1] = (u + (((pred_L[1] - pred_TL[1]) >> 1) + pred_T[1])) & 0xff; @@ -736,10 +739,10 @@ static void decode_ybyr(AVCodecContext *avctx, AVFrame *p, GetBitContext *gb) for (x = 0; x < avctx->width; x += 2) { int y1, y2, u, v; - y1 = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2); - u = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2); - y2 = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2); - v = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2); + y1 = get_vlc2(gb, s->vlc[0].table, SHEER_VLC_BITS, 2); + u = get_vlc2(gb, s->vlc[1].table, SHEER_VLC_BITS, 2); + y2 = get_vlc2(gb, s->vlc[0].table, SHEER_VLC_BITS, 2); + v = get_vlc2(gb, s->vlc[1].table, SHEER_VLC_BITS, 2); dst_y[x ] = pred[0] = (y1 + pred[0]) & 0xff; dst_u[x / 2] = pred[1] = (u + pred[1]) & 0xff; @@ -774,10 +777,10 @@ static void decode_ybyr(AVCodecContext *avctx, AVFrame *p, GetBitContext *gb) pred_T[1] = dst_u[-p->linesize[1] + x / 2]; pred_T[2] = dst_v[-p->linesize[2] + x / 2]; - y1 = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2); - u = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2); - y2 = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2); - v = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2); + y1 = get_vlc2(gb, s->vlc[0].table, SHEER_VLC_BITS, 2); + u = get_vlc2(gb, s->vlc[1].table, SHEER_VLC_BITS, 2); + y2 = get_vlc2(gb, s->vlc[0].table, SHEER_VLC_BITS, 2); + v = get_vlc2(gb, s->vlc[1].table, SHEER_VLC_BITS, 2); dst_y[x ] = pred_L[0] = (y1 + ((3 * (pred_T[0] + pred_L[0]) - 2 * pred_TL[0]) >> 2)) & 0xff; dst_u[x / 2] = pred_L[1] = (u + (((pred_L[1] - pred_TL[1]) >> 1) + pred_T[1])) & 0xff; @@ -819,10 +822,10 @@ static void decode_byryi(AVCodecContext *avctx, AVFrame *p, GetBitContext *gb) for (x = 0; x < avctx->width; x += 2) { int y1, y2, u, v; - y1 = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2); - u = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2); - y2 = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2); - v = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2); + y1 = get_vlc2(gb, s->vlc[0].table, SHEER_VLC_BITS, 2); + u = get_vlc2(gb, s->vlc[1].table, SHEER_VLC_BITS, 2); + y2 = get_vlc2(gb, s->vlc[0].table, SHEER_VLC_BITS, 2); + v = get_vlc2(gb, s->vlc[1].table, SHEER_VLC_BITS, 2); dst_y[x ] = pred[0] = (y1 + pred[0]) & 0xff; dst_u[x / 2] = pred[1] = (u + pred[1]) & 0xff; @@ -852,10 +855,10 @@ static void decode_byryi(AVCodecContext *avctx, AVFrame *p, GetBitContext *gb) pred_L[2] = dst_v[-p->linesize[2]]; for (x = 0; x < avctx->width; x += 2) { - y1 = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2); - u = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2); - y2 = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2); - v = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2); + y1 = get_vlc2(gb, s->vlc[0].table, SHEER_VLC_BITS, 2); + u = get_vlc2(gb, s->vlc[1].table, SHEER_VLC_BITS, 2); + y2 = get_vlc2(gb, s->vlc[0].table, SHEER_VLC_BITS, 2); + v = get_vlc2(gb, s->vlc[1].table, SHEER_VLC_BITS, 2); dst_y[x ] = pred_L[0] = (y1 + pred_L[0]) & 0xff; dst_u[x / 2] = pred_L[1] = (u + pred_L[1]) & 0xff; @@ -893,10 +896,10 @@ static void decode_byry(AVCodecContext *avctx, AVFrame *p, GetBitContext *gb) for (x = 0; x < avctx->width; x += 2) { int y1, y2, u, v; - y1 = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2); - u = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2); - y2 = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2); - v = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2); + y1 = get_vlc2(gb, s->vlc[0].table, SHEER_VLC_BITS, 2); + u = get_vlc2(gb, s->vlc[1].table, SHEER_VLC_BITS, 2); + y2 = get_vlc2(gb, s->vlc[0].table, SHEER_VLC_BITS, 2); + v = get_vlc2(gb, s->vlc[1].table, SHEER_VLC_BITS, 2); dst_y[x ] = pred[0] = (y1 + pred[0]) & 0xff; dst_u[x / 2] = pred[1] = (u + pred[1]) & 0xff; @@ -931,10 +934,10 @@ static void decode_byry(AVCodecContext *avctx, AVFrame *p, GetBitContext *gb) pred_T[1] = dst_u[-p->linesize[1] + x / 2]; pred_T[2] = dst_v[-p->linesize[2] + x / 2]; - y1 = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2); - u = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2); - y2 = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2); - v = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2); + y1 = get_vlc2(gb, s->vlc[0].table, SHEER_VLC_BITS, 2); + u = get_vlc2(gb, s->vlc[1].table, SHEER_VLC_BITS, 2); + y2 = get_vlc2(gb, s->vlc[0].table, SHEER_VLC_BITS, 2); + v = get_vlc2(gb, s->vlc[1].table, SHEER_VLC_BITS, 2); dst_y[x ] = pred_L[0] = (y1 + ((3 * (pred_T[0] + pred_L[0]) - 2 * pred_TL[0]) >> 2)) & 0xff; dst_u[x / 2] = pred_L[1] = (u + (((pred_L[1] - pred_TL[1]) >> 1) + pred_T[1])) & 0xff; @@ -975,9 +978,9 @@ static void decode_ybri(AVCodecContext *avctx, AVFrame *p, GetBitContext *gb) for (x = 0; x < avctx->width; x++) { int y, u, v; - y = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2); - u = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2); - v = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2); + y = get_vlc2(gb, s->vlc[0].table, SHEER_VLC_BITS, 2); + u = get_vlc2(gb, s->vlc[1].table, SHEER_VLC_BITS, 2); + v = get_vlc2(gb, s->vlc[1].table, SHEER_VLC_BITS, 2); dst_y[x] = pred[0] = (y + pred[0]) & 0xff; dst_u[x] = pred[1] = (u + pred[1]) & 0xff; @@ -1005,9 +1008,9 @@ static void decode_ybri(AVCodecContext *avctx, AVFrame *p, GetBitContext *gb) pred_L[2] = dst_v[-p->linesize[2]]; for (x = 0; x < avctx->width; x++) { - y = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2); - u = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2); - v = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2); + y = get_vlc2(gb, s->vlc[0].table, SHEER_VLC_BITS, 2); + u = get_vlc2(gb, s->vlc[1].table, SHEER_VLC_BITS, 2); + v = get_vlc2(gb, s->vlc[1].table, SHEER_VLC_BITS, 2); dst_y[x] = pred_L[0] = (y + pred_L[0]) & 0xff; dst_u[x] = pred_L[1] = (u + pred_L[1]) & 0xff; @@ -1043,9 +1046,9 @@ static void decode_ybr(AVCodecContext *avctx, AVFrame *p, GetBitContext *gb) for (x = 0; x < avctx->width; x++) { int y, u, v; - y = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2); - u = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2); - v = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2); + y = get_vlc2(gb, s->vlc[0].table, SHEER_VLC_BITS, 2); + u = get_vlc2(gb, s->vlc[1].table, SHEER_VLC_BITS, 2); + v = get_vlc2(gb, s->vlc[1].table, SHEER_VLC_BITS, 2); dst_y[x] = pred[0] = (y + pred[0]) & 0xff; dst_u[x] = pred[1] = (u + pred[1]) & 0xff; @@ -1077,9 +1080,9 @@ static void decode_ybr(AVCodecContext *avctx, AVFrame *p, GetBitContext *gb) pred_T[1] = dst_u[-p->linesize[1] + x]; pred_T[2] = dst_v[-p->linesize[2] + x]; - y = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2); - u = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2); - v = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2); + y = get_vlc2(gb, s->vlc[0].table, SHEER_VLC_BITS, 2); + u = get_vlc2(gb, s->vlc[1].table, SHEER_VLC_BITS, 2); + v = get_vlc2(gb, s->vlc[1].table, SHEER_VLC_BITS, 2); dst_y[x] = pred_L[0] = (y + ((3 * (pred_T[0] + pred_L[0]) - 2 * pred_TL[0]) >> 2)) & 0xff; dst_u[x] = pred_L[1] = (u + ((3 * (pred_T[1] + pred_L[1]) - 2 * pred_TL[1]) >> 2)) & 0xff; @@ -1121,10 +1124,10 @@ static void decode_aybri(AVCodecContext *avctx, AVFrame *p, GetBitContext *gb) for (x = 0; x < avctx->width; x++) { int a, y, u, v; - a = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2); - y = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2); - u = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2); - v = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2); + a = get_vlc2(gb, s->vlc[1].table, SHEER_VLC_BITS, 2); + y = get_vlc2(gb, s->vlc[0].table, SHEER_VLC_BITS, 2); + u = get_vlc2(gb, s->vlc[1].table, SHEER_VLC_BITS, 2); + v = get_vlc2(gb, s->vlc[1].table, SHEER_VLC_BITS, 2); dst_a[x] = pred[0] = (a + pred[0]) & 0xff; dst_y[x] = pred[1] = (y + pred[1]) & 0xff; @@ -1156,10 +1159,10 @@ static void decode_aybri(AVCodecContext *avctx, AVFrame *p, GetBitContext *gb) pred_L[3] = dst_v[-p->linesize[2]]; for (x = 0; x < avctx->width; x++) { - a = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2); - y = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2); - u = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2); - v = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2); + a = get_vlc2(gb, s->vlc[1].table, SHEER_VLC_BITS, 2); + y = get_vlc2(gb, s->vlc[0].table, SHEER_VLC_BITS, 2); + u = get_vlc2(gb, s->vlc[1].table, SHEER_VLC_BITS, 2); + v = get_vlc2(gb, s->vlc[1].table, SHEER_VLC_BITS, 2); dst_a[x] = pred_L[0] = (a + pred_L[0]) & 0xff; dst_y[x] = pred_L[1] = (y + pred_L[1]) & 0xff; @@ -1199,10 +1202,10 @@ static void decode_aybr(AVCodecContext *avctx, AVFrame *p, GetBitContext *gb) for (x = 0; x < avctx->width; x++) { int a, y, u, v; - a = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2); - y = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2); - u = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2); - v = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2); + a = get_vlc2(gb, s->vlc[1].table, SHEER_VLC_BITS, 2); + y = get_vlc2(gb, s->vlc[0].table, SHEER_VLC_BITS, 2); + u = get_vlc2(gb, s->vlc[1].table, SHEER_VLC_BITS, 2); + v = get_vlc2(gb, s->vlc[1].table, SHEER_VLC_BITS, 2); dst_a[x] = pred[0] = (a + pred[0]) & 0xff; dst_y[x] = pred[1] = (y + pred[1]) & 0xff; @@ -1239,10 +1242,10 @@ static void decode_aybr(AVCodecContext *avctx, AVFrame *p, GetBitContext *gb) pred_T[2] = dst_u[-p->linesize[1] + x]; pred_T[3] = dst_v[-p->linesize[2] + x]; - a = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2); - y = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2); - u = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2); - v = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2); + a = get_vlc2(gb, s->vlc[1].table, SHEER_VLC_BITS, 2); + y = get_vlc2(gb, s->vlc[0].table, SHEER_VLC_BITS, 2); + u = get_vlc2(gb, s->vlc[1].table, SHEER_VLC_BITS, 2); + v = get_vlc2(gb, s->vlc[1].table, SHEER_VLC_BITS, 2); dst_a[x] = pred_L[0] = (a + ((3 * (pred_T[0] + pred_L[0]) - 2 * pred_TL[0]) >> 2)) & 0xff; dst_y[x] = pred_L[1] = (y + ((3 * (pred_T[1] + pred_L[1]) - 2 * pred_TL[1]) >> 2)) & 0xff; @@ -1288,10 +1291,10 @@ static void decode_argxi(AVCodecContext *avctx, AVFrame *p, GetBitContext *gb) for (x = 0; x < avctx->width; x++) { int r, g, b, a; - a = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2); - r = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2); - g = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2); - b = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2); + a = get_vlc2(gb, s->vlc[1].table, SHEER_VLC_BITS, 2); + r = get_vlc2(gb, s->vlc[0].table, SHEER_VLC_BITS, 2); + g = get_vlc2(gb, s->vlc[1].table, SHEER_VLC_BITS, 2); + b = get_vlc2(gb, s->vlc[1].table, SHEER_VLC_BITS, 2); dst_a[x] = pred[3] = (a + pred[3]) & 0x3ff; dst_r[x] = pred[0] = (r + pred[0]) & 0x3ff; @@ -1331,10 +1334,10 @@ static void decode_argx(AVCodecContext *avctx, AVFrame *p, GetBitContext *gb) for (x = 0; x < avctx->width; x++) { int r, g, b, a; - a = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2); - r = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2); - g = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2); - b = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2); + a = get_vlc2(gb, s->vlc[1].table, SHEER_VLC_BITS, 2); + r = get_vlc2(gb, s->vlc[0].table, SHEER_VLC_BITS, 2); + g = get_vlc2(gb, s->vlc[1].table, SHEER_VLC_BITS, 2); + b = get_vlc2(gb, s->vlc[1].table, SHEER_VLC_BITS, 2); dst_a[x] = pred[3] = (a + pred[3]) & 0x3ff; dst_r[x] = pred[0] = (r + pred[0]) & 0x3ff; @@ -1371,10 +1374,10 @@ static void decode_argx(AVCodecContext *avctx, AVFrame *p, GetBitContext *gb) pred_T[2] = dst_b[-p->linesize[1] / 2 + x]; pred_T[3] = dst_a[-p->linesize[3] / 2 + x]; - a = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2); - r = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2); - g = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2); - b = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2); + a = get_vlc2(gb, s->vlc[1].table, SHEER_VLC_BITS, 2); + r = get_vlc2(gb, s->vlc[0].table, SHEER_VLC_BITS, 2); + g = get_vlc2(gb, s->vlc[1].table, SHEER_VLC_BITS, 2); + b = get_vlc2(gb, s->vlc[1].table, SHEER_VLC_BITS, 2); dst_a[x] = pred_L[3] = (a + ((3 * (pred_T[3] + pred_L[3]) - 2 * pred_TL[3]) >> 2)) & 0x3ff; dst_r[x] = pred_L[0] = (r + ((3 * (pred_T[0] + pred_L[0]) - 2 * pred_TL[0]) >> 2)) & 0x3ff; @@ -1418,9 +1421,9 @@ static void decode_rgbxi(AVCodecContext *avctx, AVFrame *p, GetBitContext *gb) for (x = 0; x < avctx->width; x++) { int r, g, b; - r = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2); - g = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2); - b = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2); + r = get_vlc2(gb, s->vlc[0].table, SHEER_VLC_BITS, 2); + g = get_vlc2(gb, s->vlc[1].table, SHEER_VLC_BITS, 2); + b = get_vlc2(gb, s->vlc[1].table, SHEER_VLC_BITS, 2); dst_r[x] = pred[0] = (r + pred[0]) & 0x3ff; dst_g[x] = pred[1] = (r + g + pred[1]) & 0x3ff; @@ -1456,9 +1459,9 @@ static void decode_rgbx(AVCodecContext *avctx, AVFrame *p, GetBitContext *gb) for (x = 0; x < avctx->width; x++) { int r, g, b; - r = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2); - g = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2); - b = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2); + r = get_vlc2(gb, s->vlc[0].table, SHEER_VLC_BITS, 2); + g = get_vlc2(gb, s->vlc[1].table, SHEER_VLC_BITS, 2); + b = get_vlc2(gb, s->vlc[1].table, SHEER_VLC_BITS, 2); dst_r[x] = pred[0] = (r + pred[0]) & 0x3ff; dst_g[x] = pred[1] = (r + g + pred[1]) & 0x3ff; @@ -1490,9 +1493,9 @@ static void decode_rgbx(AVCodecContext *avctx, AVFrame *p, GetBitContext *gb) pred_T[1] = dst_g[-p->linesize[0] / 2 + x]; pred_T[2] = dst_b[-p->linesize[1] / 2 + x]; - r = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2); - g = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2); - b = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2); + r = get_vlc2(gb, s->vlc[0].table, SHEER_VLC_BITS, 2); + g = get_vlc2(gb, s->vlc[1].table, SHEER_VLC_BITS, 2); + b = get_vlc2(gb, s->vlc[1].table, SHEER_VLC_BITS, 2); dst_r[x] = pred_L[0] = (r + ((3 * (pred_T[0] + pred_L[0]) - 2 * pred_TL[0]) >> 2)) & 0x3ff; dst_g[x] = pred_L[1] = (r + g + ((3 * (pred_T[1] + pred_L[1]) - 2 * pred_TL[1]) >> 2)) & 0x3ff; @@ -1530,10 +1533,10 @@ static void decode_argbi(AVCodecContext *avctx, AVFrame *p, GetBitContext *gb) for (x = 0; x < avctx->width; x++) { int a, r, g, b; - a = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2); - r = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2); - g = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2); - b = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2); + a = get_vlc2(gb, s->vlc[1].table, SHEER_VLC_BITS, 2); + r = get_vlc2(gb, s->vlc[0].table, SHEER_VLC_BITS, 2); + g = get_vlc2(gb, s->vlc[1].table, SHEER_VLC_BITS, 2); + b = get_vlc2(gb, s->vlc[1].table, SHEER_VLC_BITS, 2); dst[4 * x + 0] = pred[0] = (a + pred[0]) & 0xff; dst[4 * x + 1] = pred[1] = (r + pred[1]) & 0xff; @@ -1561,10 +1564,10 @@ static void decode_argbi(AVCodecContext *avctx, AVFrame *p, GetBitContext *gb) pred_L[3] = dst[-p->linesize[0] + 3]; for (x = 0; x < avctx->width; x++) { - a = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2); - r = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2); - g = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2); - b = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2); + a = get_vlc2(gb, s->vlc[1].table, SHEER_VLC_BITS, 2); + r = get_vlc2(gb, s->vlc[0].table, SHEER_VLC_BITS, 2); + g = get_vlc2(gb, s->vlc[1].table, SHEER_VLC_BITS, 2); + b = get_vlc2(gb, s->vlc[1].table, SHEER_VLC_BITS, 2); dst[4 * x + 0] = pred_L[0] = (a + pred_L[0]) & 0xff; dst[4 * x + 1] = pred_L[1] = (r + pred_L[1]) & 0xff; @@ -1596,10 +1599,10 @@ static void decode_argb(AVCodecContext *avctx, AVFrame *p, GetBitContext *gb) for (x = 0; x < avctx->width; x++) { int a, r, g, b; - a = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2); - r = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2); - g = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2); - b = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2); + a = get_vlc2(gb, s->vlc[1].table, SHEER_VLC_BITS, 2); + r = get_vlc2(gb, s->vlc[0].table, SHEER_VLC_BITS, 2); + g = get_vlc2(gb, s->vlc[1].table, SHEER_VLC_BITS, 2); + b = get_vlc2(gb, s->vlc[1].table, SHEER_VLC_BITS, 2); dst[4 * x + 0] = pred[0] = (a + pred[0]) & 0xff; dst[4 * x + 1] = pred[1] = (r + pred[1]) & 0xff; @@ -1632,10 +1635,10 @@ static void decode_argb(AVCodecContext *avctx, AVFrame *p, GetBitContext *gb) pred_T[2] = dst[-p->linesize[0] + 4 * x + 2]; pred_T[3] = dst[-p->linesize[0] + 4 * x + 3]; - a = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2); - r = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2); - g = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2); - b = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2); + a = get_vlc2(gb, s->vlc[1].table, SHEER_VLC_BITS, 2); + r = get_vlc2(gb, s->vlc[0].table, SHEER_VLC_BITS, 2); + g = get_vlc2(gb, s->vlc[1].table, SHEER_VLC_BITS, 2); + b = get_vlc2(gb, s->vlc[1].table, SHEER_VLC_BITS, 2); dst[4 * x + 0] = pred_L[0] = (a + ((3 * (pred_T[0] + pred_L[0]) - 2 * pred_TL[0]) >> 2)) & 0xff; dst[4 * x + 1] = pred_L[1] = (r + ((3 * (pred_T[1] + pred_L[1]) - 2 * pred_TL[1]) >> 2)) & 0xff; @@ -1671,9 +1674,9 @@ static void decode_rgbi(AVCodecContext *avctx, AVFrame *p, GetBitContext *gb) for (x = 0; x < avctx->width; x++) { int r, g, b; - r = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2); - g = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2); - b = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2); + r = get_vlc2(gb, s->vlc[0].table, SHEER_VLC_BITS, 2); + g = get_vlc2(gb, s->vlc[1].table, SHEER_VLC_BITS, 2); + b = get_vlc2(gb, s->vlc[1].table, SHEER_VLC_BITS, 2); dst[4 * x + 0] = pred[0] = (r + pred[0]) & 0xff; dst[4 * x + 1] = pred[1] = (r + g + pred[1]) & 0xff; @@ -1698,9 +1701,9 @@ static void decode_rgbi(AVCodecContext *avctx, AVFrame *p, GetBitContext *gb) pred_L[2] = dst[-p->linesize[0] + 2]; for (x = 0; x < avctx->width; x++) { - r = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2); - g = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2); - b = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2); + r = get_vlc2(gb, s->vlc[0].table, SHEER_VLC_BITS, 2); + g = get_vlc2(gb, s->vlc[1].table, SHEER_VLC_BITS, 2); + b = get_vlc2(gb, s->vlc[1].table, SHEER_VLC_BITS, 2); dst[4 * x + 0] = pred_L[0] = (r + pred_L[0]) & 0xff; dst[4 * x + 1] = pred_L[1] = (r + g + pred_L[1]) & 0xff; @@ -1730,9 +1733,9 @@ static void decode_rgb(AVCodecContext *avctx, AVFrame *p, GetBitContext *gb) for (x = 0; x < avctx->width; x++) { int r, g, b; - r = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2); - g = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2); - b = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2); + r = get_vlc2(gb, s->vlc[0].table, SHEER_VLC_BITS, 2); + g = get_vlc2(gb, s->vlc[1].table, SHEER_VLC_BITS, 2); + b = get_vlc2(gb, s->vlc[1].table, SHEER_VLC_BITS, 2); dst[4 * x + 0] = pred[0] = (r + pred[0]) & 0xff; dst[4 * x + 1] = pred[1] = (r + g + pred[1]) & 0xff; @@ -1761,9 +1764,9 @@ static void decode_rgb(AVCodecContext *avctx, AVFrame *p, GetBitContext *gb) pred_T[1] = dst[-p->linesize[0] + 4 * x + 1]; pred_T[2] = dst[-p->linesize[0] + 4 * x + 2]; - r = get_vlc2(gb, s->vlc[0].table, s->vlc[0].bits, 2); - g = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2); - b = get_vlc2(gb, s->vlc[1].table, s->vlc[1].bits, 2); + r = get_vlc2(gb, s->vlc[0].table, SHEER_VLC_BITS, 2); + g = get_vlc2(gb, s->vlc[1].table, SHEER_VLC_BITS, 2); + b = get_vlc2(gb, s->vlc[1].table, SHEER_VLC_BITS, 2); dst[4 * x + 0] = pred_L[0] = (r + ((3 * (pred_T[0] + pred_L[0]) - 2 * pred_TL[0]) >> 2)) & 0xff; dst[4 * x + 1] = pred_L[1] = (r + g + ((3 * (pred_T[1] + pred_L[1]) - 2 * pred_TL[1]) >> 2)) & 0xff; @@ -1778,27 +1781,28 @@ static void decode_rgb(AVCodecContext *avctx, AVFrame *p, GetBitContext *gb) } } -static int build_vlc(VLC *vlc, const uint8_t *len, int count) +static av_cold int build_vlc(VLC *vlc, const SheerTable *table) { - uint32_t codes[1024]; - uint8_t bits[1024]; - uint16_t syms[1024]; - uint64_t index; - int i; - - index = 0; - for (i = 0; i < count; i++) { - codes[i] = index >> (32 - len[i]); - bits[i] = len[i]; - syms[i] = i; - index += 1ULL << (32 - len[i]); + const uint8_t *cur = table->lens; + uint8_t lens[1024]; + unsigned count = 0; + + for (int step = 1, len = 1; len > 0; len += step) { + unsigned new_count = count; + + if (len == 16) { + new_count += table->nb_16s; + step = -1; + } else + new_count += *cur++; + + for (; count < new_count; count++) + lens[count] = len; } ff_free_vlc(vlc); - return ff_init_vlc_sparse(vlc, 16, count, - bits, sizeof(*bits), sizeof(*bits), - codes, sizeof(*codes), sizeof(*codes), - syms, sizeof(*syms), sizeof(*syms), 0); + return ff_init_vlc_from_lengths(vlc, SHEER_VLC_BITS, count, + lens, sizeof(*lens), NULL, 0, 0, 0, 0, NULL); } static int decode_frame(AVCodecContext *avctx, @@ -1807,6 +1811,7 @@ static int decode_frame(AVCodecContext *avctx, { SheerVideoContext *s = avctx->priv_data; ThreadFrame frame = { .f = data }; + const SheerTable *table; AVFrame *p = data; GetBitContext gb; unsigned format; @@ -1826,226 +1831,153 @@ static int decode_frame(AVCodecContext *avctx, case MKTAG(' ', 'R', 'G', 'B'): avctx->pix_fmt = AV_PIX_FMT_RGB0; s->decode_frame = decode_rgb; - if (s->format != format) { - ret = build_vlc(&s->vlc[0], l_r_rgb, 256); - ret |= build_vlc(&s->vlc[1], l_g_rgb, 256); - } + table = rgb; break; case MKTAG(' ', 'r', 'G', 'B'): avctx->pix_fmt = AV_PIX_FMT_RGB0; s->decode_frame = decode_rgbi; - if (s->format != format) { - ret = build_vlc(&s->vlc[0], l_r_rgbi, 256); - ret |= build_vlc(&s->vlc[1], l_g_rgbi, 256); - } + table = rgbi; break; case MKTAG('A', 'R', 'G', 'X'): avctx->pix_fmt = AV_PIX_FMT_GBRAP10; s->decode_frame = decode_argx; - if (s->format != format) { - ret = build_vlc(&s->vlc[0], l_r_rgbx, 1024); - ret |= build_vlc(&s->vlc[1], l_g_rgbx, 1024); - } + table = rgbx; break; case MKTAG('A', 'r', 'G', 'X'): avctx->pix_fmt = AV_PIX_FMT_GBRAP10; s->decode_frame = decode_argxi; - if (s->format != format) { - ret = build_vlc(&s->vlc[0], l_r_rgbxi, 1024); - ret |= build_vlc(&s->vlc[1], l_g_rgbxi, 1024); - } + table = rgbxi; break; case MKTAG('R', 'G', 'B', 'X'): avctx->pix_fmt = AV_PIX_FMT_GBRP10; s->decode_frame = decode_rgbx; - if (s->format != format) { - ret = build_vlc(&s->vlc[0], l_r_rgbx, 1024); - ret |= build_vlc(&s->vlc[1], l_g_rgbx, 1024); - } + table = rgbx; break; case MKTAG('r', 'G', 'B', 'X'): avctx->pix_fmt = AV_PIX_FMT_GBRP10; s->decode_frame = decode_rgbxi; - if (s->format != format) { - ret = build_vlc(&s->vlc[0], l_r_rgbxi, 1024); - ret |= build_vlc(&s->vlc[1], l_g_rgbxi, 1024); - } + table = rgbxi; break; case MKTAG('A', 'R', 'G', 'B'): avctx->pix_fmt = AV_PIX_FMT_ARGB; s->decode_frame = decode_argb; - if (s->format != format) { - ret = build_vlc(&s->vlc[0], l_r_rgb, 256); - ret |= build_vlc(&s->vlc[1], l_g_rgb, 256); - } + table = rgb; break; case MKTAG('A', 'r', 'G', 'B'): avctx->pix_fmt = AV_PIX_FMT_ARGB; s->decode_frame = decode_argbi; - if (s->format != format) { - ret = build_vlc(&s->vlc[0], l_r_rgbi, 256); - ret |= build_vlc(&s->vlc[1], l_g_rgbi, 256); - } + table = rgbi; break; case MKTAG('A', 'Y', 'B', 'R'): s->alt = 1; case MKTAG('A', 'Y', 'b', 'R'): avctx->pix_fmt = AV_PIX_FMT_YUVA444P; s->decode_frame = decode_aybr; - if (s->format != format) { - ret = build_vlc(&s->vlc[0], l_y_ybr, 256); - ret |= build_vlc(&s->vlc[1], l_u_ybr, 256); - } + table = ybr; break; case MKTAG('A', 'y', 'B', 'R'): s->alt = 1; case MKTAG('A', 'y', 'b', 'R'): avctx->pix_fmt = AV_PIX_FMT_YUVA444P; s->decode_frame = decode_aybri; - if (s->format != format) { - ret = build_vlc(&s->vlc[0], l_y_ybri, 256); - ret |= build_vlc(&s->vlc[1], l_u_ybri, 256); - } + table = ybri; break; case MKTAG(' ', 'Y', 'B', 'R'): s->alt = 1; case MKTAG(' ', 'Y', 'b', 'R'): avctx->pix_fmt = AV_PIX_FMT_YUV444P; s->decode_frame = decode_ybr; - if (s->format != format) { - ret = build_vlc(&s->vlc[0], l_y_ybr, 256); - ret |= build_vlc(&s->vlc[1], l_u_ybr, 256); - } + table = ybr; break; case MKTAG(' ', 'y', 'B', 'R'): s->alt = 1; case MKTAG(' ', 'y', 'b', 'R'): avctx->pix_fmt = AV_PIX_FMT_YUV444P; s->decode_frame = decode_ybri; - if (s->format != format) { - ret = build_vlc(&s->vlc[0], l_y_ybri, 256); - ret |= build_vlc(&s->vlc[1], l_u_ybri, 256); - } + table = ybri; break; case MKTAG('Y', 'B', 'R', 0x0a): avctx->pix_fmt = AV_PIX_FMT_YUV444P10; s->decode_frame = decode_ybr10; - if (s->format != format) { - ret = build_vlc(&s->vlc[0], l_y_ybr10, 1024); - ret |= build_vlc(&s->vlc[1], l_u_ybr10, 1024); - } + table = ybr10; break; case MKTAG('y', 'B', 'R', 0x0a): avctx->pix_fmt = AV_PIX_FMT_YUV444P10; s->decode_frame = decode_ybr10i; - if (s->format != format) { - ret = build_vlc(&s->vlc[0], l_y_ybr10i, 1024); - ret |= build_vlc(&s->vlc[1], l_u_ybr10i, 1024); - } + table = ybr10i; break; case MKTAG('C', 'A', '4', 'p'): avctx->pix_fmt = AV_PIX_FMT_YUVA444P10; s->decode_frame = decode_ca4p; - if (s->format != format) { - ret = build_vlc(&s->vlc[0], l_y_ybr10, 1024); - ret |= build_vlc(&s->vlc[1], l_u_ybr10, 1024); - } + table = ybr10; break; case MKTAG('C', 'A', '4', 'i'): avctx->pix_fmt = AV_PIX_FMT_YUVA444P10; s->decode_frame = decode_ca4i; - if (s->format != format) { - ret = build_vlc(&s->vlc[0], l_y_ybr10i, 1024); - ret |= build_vlc(&s->vlc[1], l_u_ybr10i, 1024); - } + table = ybr10i; break; case MKTAG('B', 'Y', 'R', 'Y'): avctx->pix_fmt = AV_PIX_FMT_YUV422P; s->decode_frame = decode_byry; - if (s->format != format) { - ret = build_vlc(&s->vlc[0], l_y_byry, 256); - ret |= build_vlc(&s->vlc[1], l_u_byry, 256); - } + table = byry; break; case MKTAG('B', 'Y', 'R', 'y'): avctx->pix_fmt = AV_PIX_FMT_YUV422P; s->decode_frame = decode_byryi; - if (s->format != format) { - ret = build_vlc(&s->vlc[0], l_y_byryi, 256); - ret |= build_vlc(&s->vlc[1], l_u_byryi, 256); - } + table = byryi; break; case MKTAG('Y', 'b', 'Y', 'r'): avctx->pix_fmt = AV_PIX_FMT_YUV422P; s->decode_frame = decode_ybyr; - if (s->format != format) { - ret = build_vlc(&s->vlc[0], l_y_ybyr, 256); - ret |= build_vlc(&s->vlc[1], l_u_ybyr, 256); - } + table = ybyr; break; case MKTAG('C', '8', '2', 'p'): avctx->pix_fmt = AV_PIX_FMT_YUVA422P; s->decode_frame = decode_c82p; - if (s->format != format) { - ret = build_vlc(&s->vlc[0], l_y_byry, 256); - ret |= build_vlc(&s->vlc[1], l_u_byry, 256); - } + table = byry; break; case MKTAG('C', '8', '2', 'i'): avctx->pix_fmt = AV_PIX_FMT_YUVA422P; s->decode_frame = decode_c82i; - if (s->format != format) { - ret = build_vlc(&s->vlc[0], l_y_byryi, 256); - ret |= build_vlc(&s->vlc[1], l_u_byryi, 256); - } + table = byryi; break; case MKTAG(0xa2, 'Y', 'R', 'Y'): avctx->pix_fmt = AV_PIX_FMT_YUV422P10; s->decode_frame = decode_yry10; - if (s->format != format) { - ret = build_vlc(&s->vlc[0], l_y_yry10, 1024); - ret |= build_vlc(&s->vlc[1], l_u_yry10, 1024); - } + table = yry10; break; case MKTAG(0xa2, 'Y', 'R', 'y'): avctx->pix_fmt = AV_PIX_FMT_YUV422P10; s->decode_frame = decode_yry10i; - if (s->format != format) { - ret = build_vlc(&s->vlc[0], l_y_yry10i, 1024); - ret |= build_vlc(&s->vlc[1], l_u_yry10i, 1024); - } + table = yry10i; break; case MKTAG('C', 'A', '2', 'p'): avctx->pix_fmt = AV_PIX_FMT_YUVA422P10; s->decode_frame = decode_ca2p; - if (s->format != format) { - ret = build_vlc(&s->vlc[0], l_y_yry10, 1024); - ret |= build_vlc(&s->vlc[1], l_u_yry10, 1024); - } + table = yry10; break; case MKTAG('C', 'A', '2', 'i'): avctx->pix_fmt = AV_PIX_FMT_YUVA422P10; s->decode_frame = decode_ca2i; - if (s->format != format) { - ret = build_vlc(&s->vlc[0], l_y_yry10i, 1024); - ret |= build_vlc(&s->vlc[1], l_u_yry10i, 1024); - } + table = yry10i; break; default: avpriv_request_sample(avctx, "unsupported format: 0x%X", format); return AVERROR_PATCHWELCOME; } - if (avpkt->size < 20 + avctx->width * avctx->height / 16) { - av_log(avctx, AV_LOG_ERROR, "Input packet too small\n"); - return AVERROR_INVALIDDATA; - } - if (s->format != format) { - if (ret < 0) + if ((ret = build_vlc(&s->vlc[0], &table[0])) < 0 || + (ret = build_vlc(&s->vlc[1], &table[1])) < 0) { + s->format = 0; return ret; + } s->format = format; } + if (avpkt->size < 20 + avctx->width * avctx->height / 16) { + av_log(avctx, AV_LOG_ERROR, "Input packet too small\n"); + return AVERROR_INVALIDDATA; + } p->pict_type = AV_PICTURE_TYPE_I; p->key_frame = 1; @@ -2063,19 +1995,6 @@ static int decode_frame(AVCodecContext *avctx, return avpkt->size; } -#if HAVE_THREADS -static int decode_init_thread_copy(AVCodecContext *avctx) -{ - SheerVideoContext *s = avctx->priv_data; - - s->format = 0; - memset(&s->vlc[0], 0, sizeof(s->vlc[0])); - memset(&s->vlc[1], 0, sizeof(s->vlc[1])); - - return 0; -} -#endif - static av_cold int decode_end(AVCodecContext *avctx) { SheerVideoContext *s = avctx->priv_data; @@ -2086,13 +2005,12 @@ static av_cold int decode_end(AVCodecContext *avctx) return 0; } -AVCodec ff_sheervideo_decoder = { +const AVCodec ff_sheervideo_decoder = { .name = "sheervideo", .long_name = NULL_IF_CONFIG_SMALL("BitJazz SheerVideo"), .type = AVMEDIA_TYPE_VIDEO, .id = AV_CODEC_ID_SHEERVIDEO, .priv_data_size = sizeof(SheerVideoContext), - .init_thread_copy = ONLY_IF_THREADS_ENABLED(decode_init_thread_copy), .close = decode_end, .decode = decode_frame, .capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_FRAME_THREADS,