package com.twilight.h264.decoder;
public class H264PredictionContext {
public static final int CODEC_ID_NONE = 0;
/* video codecs */
public static final int CODEC_ID_MPEG1VIDEO = 1;
public static final int CODEC_ID_MPEG2VIDEO = 2; ///< preferred ID for MPEG-1/2 video decoding
public static final int CODEC_ID_MPEG2VIDEO_XVMC = 3;
public static final int CODEC_ID_H261 = 4;
public static final int CODEC_ID_H263 = 5;
public static final int CODEC_ID_RV10 = 6;
public static final int CODEC_ID_RV20 = 7;
public static final int CODEC_ID_MJPEG = 8;
public static final int CODEC_ID_MJPEGB = 9;
public static final int CODEC_ID_LJPEG = 10;
public static final int CODEC_ID_SP5X = 11;
public static final int CODEC_ID_JPEGLS = 12;
public static final int CODEC_ID_MPEG4 = 13;
public static final int CODEC_ID_RAWVIDEO = 14;
public static final int CODEC_ID_MSMPEG4V1 = 15;
public static final int CODEC_ID_MSMPEG4V2 = 16;
public static final int CODEC_ID_MSMPEG4V3 = 17;
public static final int CODEC_ID_WMV1 = 18;
public static final int CODEC_ID_WMV2 = 19;
public static final int CODEC_ID_H263P = 20;
public static final int CODEC_ID_H263I = 21;
public static final int CODEC_ID_FLV1 = 22;
public static final int CODEC_ID_SVQ1 = 23;
public static final int CODEC_ID_SVQ3 = 24;
public static final int CODEC_ID_DVVIDEO = 25;
public static final int CODEC_ID_HUFFYUV = 26;
public static final int CODEC_ID_CYUV = 27;
public static final int CODEC_ID_H264 = 28;
public static final int CODEC_ID_INDEO3 = 29;
public static final int CODEC_ID_VP3 = 30;
public static final int CODEC_ID_THEORA = 31;
public static final int CODEC_ID_ASV1 = 32;
public static final int CODEC_ID_ASV2 = 33;
public static final int CODEC_ID_FFV1 = 34;
public static final int CODEC_ID_4XM = 35;
public static final int CODEC_ID_VCR1 = 36;
public static final int CODEC_ID_CLJR = 37;
public static final int CODEC_ID_MDEC = 38;
public static final int CODEC_ID_ROQ = 39;
public static final int CODEC_ID_INTERPLAY_VIDEO = 40;
public static final int CODEC_ID_XAN_WC3 = 41;
public static final int CODEC_ID_XAN_WC4 = 42;
public static final int CODEC_ID_RPZA = 43;
public static final int CODEC_ID_CINEPAK = 44;
public static final int CODEC_ID_WS_VQA = 45;
public static final int CODEC_ID_MSRLE = 46;
public static final int CODEC_ID_MSVIDEO1 = 47;
public static final int CODEC_ID_IDCIN = 48;
public static final int CODEC_ID_8BPS = 49;
public static final int CODEC_ID_SMC = 50;
public static final int CODEC_ID_FLIC = 51;
public static final int CODEC_ID_TRUEMOTION1 = 52;
public static final int CODEC_ID_VMDVIDEO = 53;
public static final int CODEC_ID_MSZH = 54;
public static final int CODEC_ID_ZLIB = 55;
public static final int CODEC_ID_QTRLE = 56;
public static final int CODEC_ID_SNOW = 57;
public static final int CODEC_ID_TSCC = 58;
public static final int CODEC_ID_ULTI = 59;
public static final int CODEC_ID_QDRAW = 60;
public static final int CODEC_ID_VIXL = 61;
public static final int CODEC_ID_QPEG = 62;
public static final int CODEC_ID_PNG = 63;
public static final int CODEC_ID_PPM = 64;
public static final int CODEC_ID_PBM = 65;
public static final int CODEC_ID_PGM = 66;
public static final int CODEC_ID_PGMYUV = 67;
public static final int CODEC_ID_PAM = 68;
public static final int CODEC_ID_FFVHUFF = 69;
public static final int CODEC_ID_RV30 = 70;
public static final int CODEC_ID_RV40 = 71;
public static final int CODEC_ID_VC1 = 72;
public static final int CODEC_ID_WMV3 = 73;
public static final int CODEC_ID_LOCO = 74;
public static final int CODEC_ID_WNV1 = 75;
public static final int CODEC_ID_AASC = 76;
public static final int CODEC_ID_INDEO2 = 77;
public static final int CODEC_ID_FRAPS = 78;
public static final int CODEC_ID_TRUEMOTION2 = 79;
public static final int CODEC_ID_BMP = 80;
public static final int CODEC_ID_CSCD = 81;
public static final int CODEC_ID_MMVIDEO = 82;
public static final int CODEC_ID_ZMBV = 83;
public static final int CODEC_ID_AVS = 84;
public static final int CODEC_ID_SMACKVIDEO = 85;
public static final int CODEC_ID_NUV = 86;
public static final int CODEC_ID_KMVC = 87;
public static final int CODEC_ID_FLASHSV = 88;
public static final int CODEC_ID_CAVS = 89;
public static final int CODEC_ID_JPEG2000 = 90;
public static final int CODEC_ID_VMNC = 91;
public static final int CODEC_ID_VP5 = 92;
public static final int CODEC_ID_VP6 = 93;
public static final int CODEC_ID_VP6F = 94;
public static final int CODEC_ID_TARGA = 95;
public static final int CODEC_ID_DSICINVIDEO = 96;
public static final int CODEC_ID_TIERTEXSEQVIDEO = 97;
public static final int CODEC_ID_TIFF = 98;
public static final int CODEC_ID_GIF = 99;
public static final int CODEC_ID_FFH264 = 100;
public static final int CODEC_ID_DXA = 101;
public static final int CODEC_ID_DNXHD = 102;
public static final int CODEC_ID_THP = 103;
public static final int CODEC_ID_SGI = 104;
public static final int CODEC_ID_C93 = 105;
public static final int CODEC_ID_BETHSOFTVID = 106;
public static final int CODEC_ID_PTX = 107;
public static final int CODEC_ID_TXD = 108;
public static final int CODEC_ID_VP6A = 109;
public static final int CODEC_ID_AMV = 110;
public static final int CODEC_ID_VB = 111;
public static final int CODEC_ID_PCX = 112;
public static final int CODEC_ID_SUNRAST = 113;
public static final int CODEC_ID_INDEO4 = 114;
public static final int CODEC_ID_INDEO5 = 115;
public static final int CODEC_ID_MIMIC = 116;
public static final int CODEC_ID_RL2 = 117;
public static final int CODEC_ID_8SVX_EXP = 118;
public static final int CODEC_ID_8SVX_FIB = 119;
public static final int CODEC_ID_ESCAPE124 = 120;
public static final int CODEC_ID_DIRAC = 121;
public static final int CODEC_ID_BFI = 122;
public static final int CODEC_ID_CMV = 123;
public static final int CODEC_ID_MOTIONPIXELS = 124;
public static final int CODEC_ID_TGV = 125;
public static final int CODEC_ID_TGQ = 126;
public static final int CODEC_ID_TQI = 127;
public static final int CODEC_ID_AURA = 128;
public static final int CODEC_ID_AURA2 = 129;
public static final int CODEC_ID_V210X = 130;
public static final int CODEC_ID_TMV = 131;
public static final int CODEC_ID_V210 = 132;
public static final int CODEC_ID_DPX = 133;
public static final int CODEC_ID_MAD = 134;
public static final int CODEC_ID_FRWU = 135;
public static final int CODEC_ID_FLASHSV2 = 136;
public static final int CODEC_ID_CDGRAPHICS = 137;
public static final int CODEC_ID_R210 = 138;
public static final int CODEC_ID_ANM = 139;
public static final int CODEC_ID_BINKVIDEO = 140;
public static final int CODEC_ID_IFF_ILBM = 141;
public static final int CODEC_ID_IFF_BYTERUN1 = 142;
public static final int CODEC_ID_KGV1 = 143;
public static final int CODEC_ID_YOP = 144;
public static final int CODEC_ID_VP8 = 145;
public static final int CODEC_ID_PICTOR = 146;
public static final int CODEC_ID_ANSI = 147;
public static final int CODEC_ID_A64_MULTI = 148;
public static final int CODEC_ID_A64_MULTI5 = 149;
public static final int CODEC_ID_R10K = 150;
public static final int CODEC_ID_MXPEG = 151;
public static final int CODEC_ID_LAGARITH = 152;
/**
* Prediction types
*/
//@{
public static final int VERT_PRED = 0;
public static final int HOR_PRED = 1;
public static final int DC_PRED = 2;
public static final int DIAG_DOWN_LEFT_PRED = 3;
public static final int DIAG_DOWN_RIGHT_PRED = 4;
public static final int VERT_RIGHT_PRED = 5;
public static final int HOR_DOWN_PRED = 6;
public static final int VERT_LEFT_PRED = 7;
public static final int HOR_UP_PRED = 8;
// DC edge (not for VP8)
public static final int LEFT_DC_PRED = 9;
public static final int TOP_DC_PRED = 10;
public static final int DC_128_PRED = 11;
// RV40 specific
public static final int DIAG_DOWN_LEFT_PRED_RV40_NODOWN = 12;
public static final int HOR_UP_PRED_RV40_NODOWN = 13;
public static final int VERT_LEFT_PRED_RV40_NODOWN = 14;
// VP8 specific
public static final int TM_VP8_PRED = 9; ///< "True Motion", used instead of plane
public static final int VERT_VP8_PRED = 10; ///< for VP8, #VERT_PRED is the average of
///< (left col+cur col x2+right col) / 4;
///< this is the "unaveraged" one
public static final int HOR_VP8_PRED = 11; ///< unaveraged version of #HOR_PRED, see
///< #VERT_VP8_PRED for details
public static final int DC_127_PRED = 12;
public static final int DC_129_PRED = 13;
public static final int DC_PRED8x8 = 0;
public static final int HOR_PRED8x8 = 1;
public static final int VERT_PRED8x8 = 2;
public static final int PLANE_PRED8x8 = 3;
// DC edge
public static final int LEFT_DC_PRED8x8 = 4;
public static final int TOP_DC_PRED8x8 = 5;
public static final int DC_128_PRED8x8 = 6;
// H264/SVQ3 (8x8) specific
public static final int ALZHEIMER_DC_L0T_PRED8x8 =7;
public static final int ALZHEIMER_DC_0LT_PRED8x8 =8;
public static final int ALZHEIMER_DC_L00_PRED8x8 =9;
public static final int ALZHEIMER_DC_0L0_PRED8x8 =10;
// VP8 specific
public static final int DC_127_PRED8x8 =7;
public static final int DC_129_PRED8x8 =8;
//@}
public interface IPrediction4x4 {
public void pred4x4(int[] src, int src_offset, int[] topright, int topright_offset, int stride);//FIXME move to dsp?
}
public interface IPrediction8x8L {
public void pred8x8l(int[] src, int src_offset, int topleft, int topright, int stride);
}
public interface IPrediction8x8 {
public void pred8x8(int[] src, int src_offset, int stride);
}
public interface IPrediction16x16 {
public void pred16x16(int[] src, int src_offset, int stride);
}
public interface IPrediction4x4_add {
public void pred4x4_add(int[] pix, int pix_offset/*align 4*/, short[] block/*align 16*/, int _block_offset, int stride);
}
public interface IPrediction8x8L_add {
public void pred8x8l_add(int[] pix, int pix_offset/*align 8*/, short[] block/*align 16*/, int _block_offset, int stride);
}
public interface IPrediction8x8_add {
public void pred8x8_add(int[] pix, int pix_offset/*align 8*/, int[] block_offset, int block_offset_offset, short[] block/*align 16*/, int _block_offset, int stride);
}
public interface IPrediction16x16_add {
public void pred16x16_add(int[] pix, int pix_offset/*align 16*/, int[] block_offset, int block_offset_offset, short[] block/*align 16*/, int _block_offset, int stride);
}
public IPrediction4x4[] pred4x4 = new IPrediction4x4[9+3+3];
public IPrediction8x8L[] pred8x8l = new IPrediction8x8L[9+3];
public IPrediction8x8[] pred8x8 = new IPrediction8x8[4+3+4];
public IPrediction16x16[] pred16x16 = new IPrediction16x16[4+3+2];
public IPrediction4x4_add[] pred4x4_add = new IPrediction4x4_add[2];
public IPrediction8x8L_add[] pred8x8l_add = new IPrediction8x8L_add[2];
public IPrediction8x8_add[] pred8x8_add = new IPrediction8x8_add[3];
public IPrediction16x16_add[] pred16x16_add = new IPrediction16x16_add[3];
public void initializePredictionContext(int codec_id) {
if(codec_id != CODEC_ID_RV40){
if(codec_id == CODEC_ID_VP8) {
pred4x4[VERT_PRED ] = new IPrediction4x4() {
public void pred4x4(int[] src, int src_offset, int[] topright, int topright_offset, int stride) {
pred4x4_vertical_vp8_c(src, src_offset, topright, topright_offset, stride);
}
};
pred4x4[HOR_PRED ] = new IPrediction4x4() {
public void pred4x4(int[] src, int src_offset, int[] topright, int topright_offset, int stride) {
pred4x4_horizontal_vp8_c(src, src_offset, topright, topright_offset, stride);
}
};
} else {
pred4x4[VERT_PRED ] = new IPrediction4x4() {
public void pred4x4(int[] src, int src_offset, int[] topright, int topright_offset, int stride) {
pred4x4_vertical_c(src, src_offset, topright, topright_offset, stride);
}
};
pred4x4[HOR_PRED ] = new IPrediction4x4() {
public void pred4x4(int[] src, int src_offset, int[] topright, int topright_offset, int stride) {
pred4x4_horizontal_c(src, src_offset, topright, topright_offset, stride);
}
};
}
pred4x4[DC_PRED ] = new IPrediction4x4() {
public void pred4x4(int[] src, int src_offset, int[] topright, int topright_offset, int stride) {
pred4x4_dc_c(src, src_offset, topright, topright_offset, stride);
}
};
if(codec_id == CODEC_ID_SVQ3)
pred4x4[DIAG_DOWN_LEFT_PRED ] = new IPrediction4x4() {
public void pred4x4(int[] src, int src_offset, int[] topright, int topright_offset, int stride) {
pred4x4_down_left_svq3_c(src, src_offset, topright, topright_offset, stride);
}
};
else
pred4x4[DIAG_DOWN_LEFT_PRED ] = new IPrediction4x4() {
public void pred4x4(int[] src, int src_offset, int[] topright, int topright_offset, int stride) {
pred4x4_down_left_c(src, src_offset, topright, topright_offset, stride);
}
};
pred4x4[DIAG_DOWN_RIGHT_PRED] = new IPrediction4x4() {
public void pred4x4(int[] src, int src_offset, int[] topright, int topright_offset, int stride) {
pred4x4_down_right_c(src, src_offset, topright, topright_offset, stride);
}
};
pred4x4[VERT_RIGHT_PRED ] = new IPrediction4x4() {
public void pred4x4(int[] src, int src_offset, int[] topright, int topright_offset, int stride) {
pred4x4_vertical_right_c(src, src_offset, topright, topright_offset, stride);
}
};
pred4x4[HOR_DOWN_PRED ] = new IPrediction4x4() {
public void pred4x4(int[] src, int src_offset, int[] topright, int topright_offset, int stride) {
pred4x4_horizontal_down_c(src, src_offset, topright, topright_offset, stride);
}
};
if (codec_id == CODEC_ID_VP8) {
pred4x4[VERT_LEFT_PRED ] = new IPrediction4x4() {
public void pred4x4(int[] src, int src_offset, int[] topright, int topright_offset, int stride) {
pred4x4_vertical_left_vp8_c(src, src_offset, topright, topright_offset, stride);
}
};
} else
pred4x4[VERT_LEFT_PRED ] = new IPrediction4x4() {
public void pred4x4(int[] src, int src_offset, int[] topright, int topright_offset, int stride) {
pred4x4_vertical_left_c(src, src_offset, topright, topright_offset, stride);
}
};
pred4x4[HOR_UP_PRED ] = new IPrediction4x4() {
public void pred4x4(int[] src, int src_offset, int[] topright, int topright_offset, int stride) {
pred4x4_horizontal_up_c(src, src_offset, topright, topright_offset, stride);
}
};
if(codec_id != CODEC_ID_VP8) {
pred4x4[LEFT_DC_PRED ] = new IPrediction4x4() {
public void pred4x4(int[] src, int src_offset, int[] topright, int topright_offset, int stride) {
pred4x4_left_dc_c(src, src_offset, topright, topright_offset, stride);
}
};
pred4x4[TOP_DC_PRED ] = new IPrediction4x4() {
public void pred4x4(int[] src, int src_offset, int[] topright, int topright_offset, int stride) {
pred4x4_top_dc_c(src, src_offset, topright, topright_offset, stride);
}
};
pred4x4[DC_128_PRED ] = new IPrediction4x4() {
public void pred4x4(int[] src, int src_offset, int[] topright, int topright_offset, int stride) {
pred4x4_128_dc_c(src, src_offset, topright, topright_offset, stride);
}
};
} else {
pred4x4[TM_VP8_PRED ] = new IPrediction4x4() {
public void pred4x4(int[] src, int src_offset, int[] topright, int topright_offset, int stride) {
pred4x4_tm_vp8_c(src, src_offset, topright, topright_offset, stride);
}
};
pred4x4[DC_127_PRED ] = new IPrediction4x4() {
public void pred4x4(int[] src, int src_offset, int[] topright, int topright_offset, int stride) {
pred4x4_127_dc_c(src, src_offset, topright, topright_offset, stride);
}
};
pred4x4[DC_129_PRED ] = new IPrediction4x4() {
public void pred4x4(int[] src, int src_offset, int[] topright, int topright_offset, int stride) {
pred4x4_129_dc_c(src, src_offset, topright, topright_offset, stride);
}
};
pred4x4[VERT_VP8_PRED ] = new IPrediction4x4() {
public void pred4x4(int[] src, int src_offset, int[] topright, int topright_offset, int stride) {
pred4x4_vertical_c(src, src_offset, topright, topright_offset, stride);
}
};
pred4x4[HOR_VP8_PRED ] = new IPrediction4x4() {
public void pred4x4(int[] src, int src_offset, int[] topright, int topright_offset, int stride) {
pred4x4_horizontal_c(src, src_offset, topright, topright_offset, stride);
}
};
}
}else{
pred4x4[VERT_PRED ] = new IPrediction4x4() {
public void pred4x4(int[] src, int src_offset, int[] topright, int topright_offset, int stride) {
pred4x4_vertical_c(src, src_offset, topright, topright_offset, stride);
}
};
pred4x4[HOR_PRED ] = new IPrediction4x4() {
public void pred4x4(int[] src, int src_offset, int[] topright, int topright_offset, int stride) {
pred4x4_horizontal_c(src, src_offset, topright, topright_offset, stride);
}
};
pred4x4[DC_PRED ] = new IPrediction4x4() {
public void pred4x4(int[] src, int src_offset, int[] topright, int topright_offset, int stride) {
pred4x4_dc_c(src, src_offset, topright, topright_offset, stride);
}
};
pred4x4[DIAG_DOWN_LEFT_PRED ] = new IPrediction4x4() {
public void pred4x4(int[] src, int src_offset, int[] topright, int topright_offset, int stride) {
pred4x4_down_left_rv40_c(src, src_offset, topright, topright_offset, stride);
}
};
pred4x4[DIAG_DOWN_RIGHT_PRED] = new IPrediction4x4() {
public void pred4x4(int[] src, int src_offset, int[] topright, int topright_offset, int stride) {
pred4x4_down_right_c(src, src_offset, topright, topright_offset, stride);
}
};
pred4x4[VERT_RIGHT_PRED ] = new IPrediction4x4() {
public void pred4x4(int[] src, int src_offset, int[] topright, int topright_offset, int stride) {
pred4x4_vertical_right_c(src, src_offset, topright, topright_offset, stride);
}
};
pred4x4[HOR_DOWN_PRED ] = new IPrediction4x4() {
public void pred4x4(int[] src, int src_offset, int[] topright, int topright_offset, int stride) {
pred4x4_horizontal_down_c(src, src_offset, topright, topright_offset, stride);
}
};
pred4x4[VERT_LEFT_PRED ] = new IPrediction4x4() {
public void pred4x4(int[] src, int src_offset, int[] topright, int topright_offset, int stride) {
pred4x4_vertical_left_rv40_c(src, src_offset, topright, topright_offset, stride);
}
};
pred4x4[HOR_UP_PRED ] = new IPrediction4x4() {
public void pred4x4(int[] src, int src_offset, int[] topright, int topright_offset, int stride) {
pred4x4_horizontal_up_rv40_c(src, src_offset, topright, topright_offset, stride);
}
};
pred4x4[LEFT_DC_PRED ] = new IPrediction4x4() {
public void pred4x4(int[] src, int src_offset, int[] topright, int topright_offset, int stride) {
pred4x4_left_dc_c(src, src_offset, topright, topright_offset, stride);
}
};
pred4x4[TOP_DC_PRED ] = new IPrediction4x4() {
public void pred4x4(int[] src, int src_offset, int[] topright, int topright_offset, int stride) {
pred4x4_top_dc_c(src, src_offset, topright, topright_offset, stride);
}
};
pred4x4[DC_128_PRED ] = new IPrediction4x4() {
public void pred4x4(int[] src, int src_offset, int[] topright, int topright_offset, int stride) {
pred4x4_128_dc_c(src, src_offset, topright, topright_offset, stride);
}
};
pred4x4[DIAG_DOWN_LEFT_PRED_RV40_NODOWN] = new IPrediction4x4() {
public void pred4x4(int[] src, int src_offset, int[] topright, int topright_offset, int stride) {
pred4x4_down_left_rv40_nodown_c(src, src_offset, topright, topright_offset, stride);
}
};
pred4x4[HOR_UP_PRED_RV40_NODOWN] = new IPrediction4x4() {
public void pred4x4(int[] src, int src_offset, int[] topright, int topright_offset, int stride) {
pred4x4_horizontal_up_rv40_nodown_c(src, src_offset, topright, topright_offset, stride);
}
};
pred4x4[VERT_LEFT_PRED_RV40_NODOWN] = new IPrediction4x4() {
public void pred4x4(int[] src, int src_offset, int[] topright, int topright_offset, int stride) {
pred4x4_vertical_left_rv40_nodown_c(src, src_offset, topright, topright_offset, stride);
}
};
}
pred8x8l[VERT_PRED ] = new IPrediction8x8L() {
public void pred8x8l(int[] src, int src_offset, int topleft, int topright, int stride) {
pred8x8l_vertical_c(src, src_offset, topleft, topright, stride);
}
};
pred8x8l[HOR_PRED ] = new IPrediction8x8L() {
public void pred8x8l(int[] src, int src_offset, int topleft, int topright, int stride) {
pred8x8l_horizontal_c(src, src_offset, topleft, topright, stride);
}
};
pred8x8l[DC_PRED ] = new IPrediction8x8L() {
public void pred8x8l(int[] src, int src_offset, int topleft, int topright, int stride) {
pred8x8l_dc_c(src, src_offset, topleft, topright, stride);
}
};
pred8x8l[DIAG_DOWN_LEFT_PRED ] = new IPrediction8x8L() {
public void pred8x8l(int[] src, int src_offset, int topleft, int topright, int stride) {
pred8x8l_down_left_c(src, src_offset, topleft, topright, stride);
}
};
pred8x8l[DIAG_DOWN_RIGHT_PRED] = new IPrediction8x8L() {
public void pred8x8l(int[] src, int src_offset, int topleft, int topright, int stride) {
pred8x8l_down_right_c(src, src_offset, topleft, topright, stride);
}
};
pred8x8l[VERT_RIGHT_PRED ] = new IPrediction8x8L() {
public void pred8x8l(int[] src, int src_offset, int topleft, int topright, int stride) {
pred8x8l_vertical_right_c(src, src_offset, topleft, topright, stride);
}
};
pred8x8l[HOR_DOWN_PRED ] = new IPrediction8x8L() {
public void pred8x8l(int[] src, int src_offset, int topleft, int topright, int stride) {
pred8x8l_horizontal_down_c(src, src_offset, topleft, topright, stride);
}
};
pred8x8l[VERT_LEFT_PRED ] = new IPrediction8x8L() {
public void pred8x8l(int[] src, int src_offset, int topleft, int topright, int stride) {
pred8x8l_vertical_left_c(src, src_offset, topleft, topright, stride);
}
};
pred8x8l[HOR_UP_PRED ] = new IPrediction8x8L() {
public void pred8x8l(int[] src, int src_offset, int topleft, int topright, int stride) {
pred8x8l_horizontal_up_c(src, src_offset, topleft, topright, stride);
}
};
pred8x8l[LEFT_DC_PRED ] = new IPrediction8x8L() {
public void pred8x8l(int[] src, int src_offset, int topleft, int topright, int stride) {
pred8x8l_left_dc_c(src, src_offset, topleft, topright, stride);
}
};
pred8x8l[TOP_DC_PRED ] = new IPrediction8x8L() {
public void pred8x8l(int[] src, int src_offset, int topleft, int topright, int stride) {
pred8x8l_top_dc_c(src, src_offset, topleft, topright, stride);
}
};
pred8x8l[DC_128_PRED ] = new IPrediction8x8L() {
public void pred8x8l(int[] src, int src_offset, int topleft, int topright, int stride) {
pred8x8l_128_dc_c(src, src_offset, topleft, topright, stride);
}
};
pred8x8[VERT_PRED8x8 ] = new IPrediction8x8() {
public void pred8x8(int[] src, int src_offset, int stride) {
pred8x8_vertical_c(src, src_offset, stride);
}
};
pred8x8[HOR_PRED8x8 ] = new IPrediction8x8() {
public void pred8x8(int[] src, int src_offset, int stride) {
pred8x8_horizontal_c(src, src_offset, stride);
}
};
if (codec_id != CODEC_ID_VP8) {
pred8x8[PLANE_PRED8x8] = new IPrediction8x8() {
public void pred8x8(int[] src, int src_offset, int stride) {
pred8x8_plane_c(src, src_offset, stride);
}
};
} else
pred8x8[PLANE_PRED8x8] = new IPrediction8x8() {
public void pred8x8(int[] src, int src_offset, int stride) {
pred8x8_tm_vp8_c(src, src_offset, stride);
}
};
if(codec_id != CODEC_ID_RV40 && codec_id != CODEC_ID_VP8){
pred8x8[DC_PRED8x8 ] = new IPrediction8x8() {
public void pred8x8(int[] src, int src_offset, int stride) {
pred8x8_dc_c(src, src_offset, stride);
}
};
pred8x8[LEFT_DC_PRED8x8] = new IPrediction8x8() {
public void pred8x8(int[] src, int src_offset, int stride) {
pred8x8_left_dc_c(src, src_offset, stride);
}
};
pred8x8[TOP_DC_PRED8x8 ] = new IPrediction8x8() {
public void pred8x8(int[] src, int src_offset, int stride) {
pred8x8_top_dc_c(src, src_offset, stride);
}
};
pred8x8[ALZHEIMER_DC_L0T_PRED8x8 ] = new IPrediction8x8() {
public void pred8x8(int[] src, int src_offset, int stride) {
pred8x8_mad_cow_dc_l0t(src, src_offset, stride);
}
};
pred8x8[ALZHEIMER_DC_0LT_PRED8x8 ] = new IPrediction8x8() {
public void pred8x8(int[] src, int src_offset, int stride) {
pred8x8_mad_cow_dc_0lt(src, src_offset, stride);
}
};
pred8x8[ALZHEIMER_DC_L00_PRED8x8 ] = new IPrediction8x8() {
public void pred8x8(int[] src, int src_offset, int stride) {
pred8x8_mad_cow_dc_l00(src, src_offset, stride);
}
};
pred8x8[ALZHEIMER_DC_0L0_PRED8x8 ] = new IPrediction8x8() {
public void pred8x8(int[] src, int src_offset, int stride) {
pred8x8_mad_cow_dc_0l0(src, src_offset, stride);
}
};
}else{
pred8x8[DC_PRED8x8 ] = new IPrediction8x8() {
public void pred8x8(int[] src, int src_offset, int stride) {
pred8x8_dc_rv40_c(src, src_offset, stride);
}
};
pred8x8[LEFT_DC_PRED8x8] = new IPrediction8x8() {
public void pred8x8(int[] src, int src_offset, int stride) {
pred8x8_left_dc_rv40_c(src, src_offset, stride);
}
};
pred8x8[TOP_DC_PRED8x8 ] = new IPrediction8x8() {
public void pred8x8(int[] src, int src_offset, int stride) {
pred8x8_top_dc_rv40_c(src, src_offset, stride);
}
};
if (codec_id == CODEC_ID_VP8) {
pred8x8[DC_127_PRED8x8] = new IPrediction8x8() {
public void pred8x8(int[] src, int src_offset, int stride) {
pred8x8_127_dc_c(src, src_offset, stride);
}
};
pred8x8[DC_129_PRED8x8] = new IPrediction8x8() {
public void pred8x8(int[] src, int src_offset, int stride) {
pred8x8_129_dc_c(src, src_offset, stride);
}
};
}
}
pred8x8[DC_128_PRED8x8 ] = new IPrediction8x8() {
public void pred8x8(int[] src, int src_offset, int stride) {
pred8x8_128_dc_c(src, src_offset, stride);
}
};
pred16x16[DC_PRED8x8 ] = new IPrediction16x16() {
public void pred16x16(int[] src, int src_offset, int stride) {
pred16x16_dc_c(src, src_offset, stride);
}
};
pred16x16[VERT_PRED8x8 ] = new IPrediction16x16() {
public void pred16x16(int[] src, int src_offset, int stride) {
pred16x16_vertical_c(src, src_offset, stride);
}
};
pred16x16[HOR_PRED8x8 ] = new IPrediction16x16() {
public void pred16x16(int[] src, int src_offset, int stride) {
pred16x16_horizontal_c(src, src_offset, stride);
}
};
switch(codec_id){
case CODEC_ID_SVQ3:
pred16x16[PLANE_PRED8x8 ] = new IPrediction16x16() {
public void pred16x16(int[] src, int src_offset, int stride) {
pred16x16_plane_svq3_c(src, src_offset, stride);
}
};
break;
case CODEC_ID_RV40:
pred16x16[PLANE_PRED8x8 ] = new IPrediction16x16() {
public void pred16x16(int[] src, int src_offset, int stride) {
pred16x16_plane_rv40_c(src, src_offset, stride);
}
};
break;
case CODEC_ID_VP8:
pred16x16[PLANE_PRED8x8 ] = new IPrediction16x16() {
public void pred16x16(int[] src, int src_offset, int stride) {
pred16x16_tm_vp8_c(src, src_offset, stride);
}
};
pred16x16[DC_127_PRED8x8] = new IPrediction16x16() {
public void pred16x16(int[] src, int src_offset, int stride) {
pred16x16_127_dc_c(src, src_offset, stride);
}
};
pred16x16[DC_129_PRED8x8] = new IPrediction16x16() {
public void pred16x16(int[] src, int src_offset, int stride) {
pred16x16_129_dc_c(src, src_offset, stride);
}
};
break;
default:
pred16x16[PLANE_PRED8x8 ] = new IPrediction16x16() {
public void pred16x16(int[] src, int src_offset, int stride) {
pred16x16_plane_c(src, src_offset, stride);
}
};
break;
}
pred16x16[LEFT_DC_PRED8x8] = new IPrediction16x16() {
public void pred16x16(int[] src, int src_offset, int stride) {
pred16x16_left_dc_c(src, src_offset, stride);
}
};
pred16x16[TOP_DC_PRED8x8 ] = new IPrediction16x16() {
public void pred16x16(int[] src, int src_offset, int stride) {
pred16x16_top_dc_c(src, src_offset, stride);
}
};
pred16x16[DC_128_PRED8x8 ] = new IPrediction16x16() {
public void pred16x16(int[] src, int src_offset, int stride) {
pred16x16_128_dc_c(src, src_offset, stride);
}
};
//special lossless h/v prediction for h264
pred4x4_add [VERT_PRED ] = new IPrediction4x4_add() {
public void pred4x4_add(int[] pix, int pix_offset/*align 4*/, short[] block/*align 16*/, int _block_offset, int stride) {
pred4x4_vertical_add_c(pix, pix_offset, block, _block_offset, stride);
}
};
pred4x4_add [ HOR_PRED ] = new IPrediction4x4_add() {
public void pred4x4_add(int[] pix, int pix_offset/*align 4*/, short[] block/*align 16*/, int _block_offset, int stride) {
pred4x4_horizontal_add_c(pix, pix_offset, block, _block_offset, stride);
}
};
pred8x8l_add [VERT_PRED ] = new IPrediction8x8L_add() {
public void pred8x8l_add(int[] pix, int pix_offset/*align 8*/, short[] block/*align 16*/, int _block_offset, int stride) {
pred8x8l_vertical_add_c(pix, pix_offset, block, _block_offset, stride);
}
};
pred8x8l_add [ HOR_PRED ] = new IPrediction8x8L_add() {
public void pred8x8l_add(int[] pix, int pix_offset/*align 8*/, short[] block/*align 16*/, int _block_offset, int stride) {
pred8x8l_horizontal_add_c(pix, pix_offset, block, _block_offset, stride);
}
};
pred8x8_add [VERT_PRED8x8] = new IPrediction8x8_add() {
public void pred8x8_add(int[] pix, int pix_offset/*align 8*/, int[] block_offset, int block_offset_offset, short[] block/*align 16*/, int _block_offset, int stride) {
pred8x8_vertical_add_c(pix, pix_offset, block_offset, block_offset_offset, block, _block_offset, stride);
}
};
pred8x8_add [ HOR_PRED8x8] = new IPrediction8x8_add() {
public void pred8x8_add(int[] pix, int pix_offset/*align 8*/, int[] block_offset, int block_offset_offset, short[] block/*align 16*/, int _block_offset, int stride) {
pred8x8_horizontal_add_c(pix, pix_offset, block_offset, block_offset_offset, block, _block_offset, stride);
}
};
pred16x16_add[VERT_PRED8x8] = new IPrediction16x16_add() {
public void pred16x16_add(int[] pix, int pix_offset/*align 16*/, int[] block_offset, int block_offset_offset, short[] block/*align 16*/, int _block_offset, int stride) {
pred16x16_vertical_add_c(pix, pix_offset, block_offset, block_offset_offset, block, _block_offset, stride);
}
};
pred16x16_add[ HOR_PRED8x8] = new IPrediction16x16_add() {
public void pred16x16_add(int[] pix, int pix_offset/*align 16*/, int[] block_offset, int block_offset_offset, short[] block/*align 16*/, int _block_offset, int stride) {
pred16x16_horizontal_add_c(pix, pix_offset, block_offset, block_offset_offset, block, _block_offset, stride);
}
};
}
/*
* a0 a1 a2 a3
* | | | |
* V V V V
* a0 a1 a2 a3
* a0 a1 a2 a3
* a0 a1 a2 a3
* a0 a1 a2 a3
*/
public static void pred4x4_vertical_c(int[] src, int src_offset, int[] topright, int topright_offset, int stride){
int a0 = src[src_offset - stride + 0];
int a1 = src[src_offset - stride + 1];
int a2 = src[src_offset - stride + 2];
int a3 = src[src_offset - stride + 3];
src[src_offset + 0*stride + 0] = a0;
src[src_offset + 0*stride + 1] = a1;
src[src_offset + 0*stride + 2] = a2;
src[src_offset + 0*stride + 3] = a3;
src[src_offset + 1*stride + 0] = a0;
src[src_offset + 1*stride + 1] = a1;
src[src_offset + 1*stride + 2] = a2;
src[src_offset + 1*stride + 3] = a3;
src[src_offset + 2*stride + 0] = a0;
src[src_offset + 2*stride + 1] = a1;
src[src_offset + 2*stride + 2] = a2;
src[src_offset + 2*stride + 3] = a3;
src[src_offset + 3*stride + 0] = a0;
src[src_offset + 3*stride + 1] = a1;
src[src_offset + 3*stride + 2] = a2;
src[src_offset + 3*stride + 3] = a3;
}
/*
* a0 -> a0 a0 a0 a0
* a1 -> a1 a1 a1 a1
* a2 -> a2 a2 a2 a2
* a3 -> a3 a3 a3 a3
*/
public static void pred4x4_horizontal_c(int[] src, int src_offset, int[] topright, int topright_offset, int stride){
int a = src[src_offset -1 + 0*stride + 0];
src[src_offset + 0*stride + 0] = a;
src[src_offset + 0*stride + 1] = a;
src[src_offset + 0*stride + 2] = a;
src[src_offset + 0*stride + 3] = a;
a = src[src_offset -1 + 1*stride + 0];
src[src_offset + 1*stride + 0] = a;
src[src_offset + 1*stride + 1] = a;
src[src_offset + 1*stride + 2] = a;
src[src_offset + 1*stride + 3] = a;
a = src[src_offset -1 + 2*stride + 0];
src[src_offset + 2*stride + 0] = a;
src[src_offset + 2*stride + 1] = a;
src[src_offset + 2*stride + 2] = a;
src[src_offset + 2*stride + 3] = a;
a = src[src_offset -1 + 3*stride + 0];
src[src_offset + 3*stride + 0] = a;
src[src_offset + 3*stride + 1] = a;
src[src_offset + 3*stride + 2] = a;
src[src_offset + 3*stride + 3] = a;
}
/*
* [dc = (SUM(X) + 4) / 8]
* X X X X
* X dc dc dc dc
* X dc dc dc dc
* X dc dc dc dc
* X dc dc dc dc
*/
public static void pred4x4_dc_c(int[] src, int src_offset, int[] topright, int topright_offset, int stride){
int dc= ( src[src_offset -stride] + src[src_offset +1-stride] + src[src_offset +2-stride] + src[src_offset +3-stride]
+ src[src_offset -1+0*stride] + src[src_offset -1+1*stride] + src[src_offset -1+2*stride] + src[src_offset -1+3*stride] + 4) >>3;
src[src_offset +0*stride + 0] = dc;
src[src_offset +1*stride + 0] = dc;
src[src_offset +2*stride + 0] = dc;
src[src_offset +3*stride + 0] = dc;
src[src_offset +0*stride + 1] = dc;
src[src_offset +1*stride + 1] = dc;
src[src_offset +2*stride + 1] = dc;
src[src_offset +3*stride + 1] = dc;
src[src_offset +0*stride + 2] = dc;
src[src_offset +1*stride + 2] = dc;
src[src_offset +2*stride + 2] = dc;
src[src_offset +3*stride + 2] = dc;
src[src_offset +0*stride + 3] = dc;
src[src_offset +1*stride + 3] = dc;
src[src_offset +2*stride + 3] = dc;
src[src_offset +3*stride + 3] = dc;
}
/*
* [dc = (SUM(X) + 2) / 4]
*
* X dc dc dc dc
* X dc dc dc dc
* X dc dc dc dc
* X dc dc dc dc
*/
public static void pred4x4_left_dc_c(int[] src, int src_offset, int[] topright, int topright_offset, int stride){
int dc= ( src[src_offset -1+0*stride] + src[src_offset -1+1*stride] + src[src_offset -1+2*stride] + src[src_offset -1+3*stride] + 2) >>2;
src[src_offset +0*stride + 0] = dc;
src[src_offset +1*stride + 0] = dc;
src[src_offset +2*stride + 0] = dc;
src[src_offset +3*stride + 0] = dc;
src[src_offset +0*stride + 1] = dc;
src[src_offset +1*stride + 1] = dc;
src[src_offset +2*stride + 1] = dc;
src[src_offset +3*stride + 1] = dc;
src[src_offset +0*stride + 2] = dc;
src[src_offset +1*stride + 2] = dc;
src[src_offset +2*stride + 2] = dc;
src[src_offset +3*stride + 2] = dc;
src[src_offset +0*stride + 3] = dc;
src[src_offset +1*stride + 3] = dc;
src[src_offset +2*stride + 3] = dc;
src[src_offset +3*stride + 3] = dc;
}
/*
* [dc = (SUM(X) + 2) / 4]
* X X X X
* dc dc dc dc
* dc dc dc dc
* dc dc dc dc
* dc dc dc dc
*/
public static void pred4x4_top_dc_c(int[] src, int src_offset, int[] topright, int topright_offset, int stride){
int dc= ( src[src_offset -stride] + src[src_offset +1-stride] + src[src_offset +2-stride] + src[src_offset +3-stride] + 2) >>2;
src[src_offset +0*stride + 0] = dc;
src[src_offset +1*stride + 0] = dc;
src[src_offset +2*stride + 0] = dc;
src[src_offset +3*stride + 0] = dc;
src[src_offset +0*stride + 1] = dc;
src[src_offset +1*stride + 1] = dc;
src[src_offset +2*stride + 1] = dc;
src[src_offset +3*stride + 1] = dc;
src[src_offset +0*stride + 2] = dc;
src[src_offset +1*stride + 2] = dc;
src[src_offset +2*stride + 2] = dc;
src[src_offset +3*stride + 2] = dc;
src[src_offset +0*stride + 3] = dc;
src[src_offset +1*stride + 3] = dc;
src[src_offset +2*stride + 3] = dc;
src[src_offset +3*stride + 3] = dc;
}
/*
* [dc = 128]
* dc dc dc dc
* dc dc dc dc
* dc dc dc dc
* dc dc dc dc
*/
public static void pred4x4_128_dc_c(int[] src, int src_offset, int[] topright, int topright_offset, int stride){
int dc = 128;
src[src_offset +0*stride + 0] = dc;
src[src_offset +1*stride + 0] = dc;
src[src_offset +2*stride + 0] = dc;
src[src_offset +3*stride + 0] = dc;
src[src_offset +0*stride + 1] = dc;
src[src_offset +1*stride + 1] = dc;
src[src_offset +2*stride + 1] = dc;
src[src_offset +3*stride + 1] = dc;
src[src_offset +0*stride + 2] = dc;
src[src_offset +1*stride + 2] = dc;
src[src_offset +2*stride + 2] = dc;
src[src_offset +3*stride + 2] = dc;
src[src_offset +0*stride + 3] = dc;
src[src_offset +1*stride + 3] = dc;
src[src_offset +2*stride + 3] = dc;
src[src_offset +3*stride + 3] = dc;
}
/*
* [dc = 127]
* dc dc dc dc
* dc dc dc dc
* dc dc dc dc
* dc dc dc dc
*/
public static void pred4x4_127_dc_c(int[] src, int src_offset, int[] topright, int topright_offset, int stride){
int dc = 127;
src[src_offset +0*stride + 0] = dc;
src[src_offset +1*stride + 0] = dc;
src[src_offset +2*stride + 0] = dc;
src[src_offset +3*stride + 0] = dc;
src[src_offset +0*stride + 1] = dc;
src[src_offset +1*stride + 1] = dc;
src[src_offset +2*stride + 1] = dc;
src[src_offset +3*stride + 1] = dc;
src[src_offset +0*stride + 2] = dc;
src[src_offset +1*stride + 2] = dc;
src[src_offset +2*stride + 2] = dc;
src[src_offset +3*stride + 2] = dc;
src[src_offset +0*stride + 3] = dc;
src[src_offset +1*stride + 3] = dc;
src[src_offset +2*stride + 3] = dc;
src[src_offset +3*stride + 3] = dc;
}
/*
* [dc = 129]
* dc dc dc dc
* dc dc dc dc
* dc dc dc dc
* dc dc dc dc
*/
public static void pred4x4_129_dc_c(int[] src, int src_offset, int[] topright, int topright_offset, int stride){
int dc = 129;
src[src_offset +0*stride + 0] =
src[src_offset +1*stride + 0] =
src[src_offset +2*stride + 0] =
src[src_offset +3*stride + 0] =
src[src_offset +0*stride + 1] =
src[src_offset +1*stride + 1] =
src[src_offset +2*stride + 1] =
src[src_offset +3*stride + 1] =
src[src_offset +0*stride + 2] =
src[src_offset +1*stride + 2] =
src[src_offset +2*stride + 2] =
src[src_offset +3*stride + 2] =
src[src_offset +0*stride + 3] =
src[src_offset +1*stride + 3] =
src[src_offset +2*stride + 3] =
src[src_offset +3*stride + 3] = dc;
}
public static void pred4x4_vertical_vp8_c(int[] src, int src_offset, int[] topright, int topright_offset, int stride){
int lt= src[src_offset -1-1*stride];
int t0= src[src_offset +0-1*stride];
int t1= src[src_offset +1-1*stride];
int t2= src[src_offset +2-1*stride];
int t3= src[src_offset +3-1*stride];
int t4= topright[topright_offset + 0];
//int t5= topright[topright_offset + 1];
//int t6= topright[topright_offset + 2];
//int t7= topright[topright_offset + 3];
src[src_offset +0*stride + 0] = (lt + 2*t0 + t1 + 2) >> 2;
src[src_offset +0*stride + 1] = (t0 + 2*t1 + t2 + 2) >> 2;
src[src_offset +0*stride + 2] = (t1 + 2*t2 + t3 + 2) >> 2;
src[src_offset +0*stride + 3] = (t2 + 2*t3 + t4 + 2) >> 2;
src[src_offset +1*stride + 0] = (lt + 2*t0 + t1 + 2) >> 2;
src[src_offset +1*stride + 1] = (t0 + 2*t1 + t2 + 2) >> 2;
src[src_offset +1*stride + 2] = (t1 + 2*t2 + t3 + 2) >> 2;
src[src_offset +1*stride + 3] = (t2 + 2*t3 + t4 + 2) >> 2;
src[src_offset +2*stride + 0] = (lt + 2*t0 + t1 + 2) >> 2;
src[src_offset +2*stride + 1] = (t0 + 2*t1 + t2 + 2) >> 2;
src[src_offset +2*stride + 2] = (t1 + 2*t2 + t3 + 2) >> 2;
src[src_offset +2*stride + 3] = (t2 + 2*t3 + t4 + 2) >> 2;
src[src_offset +3*stride + 0] = (lt + 2*t0 + t1 + 2) >> 2;
src[src_offset +3*stride + 1] = (t0 + 2*t1 + t2 + 2) >> 2;
src[src_offset +3*stride + 2] = (t1 + 2*t2 + t3 + 2) >> 2;
src[src_offset +3*stride + 3] = (t2 + 2*t3 + t4 + 2) >> 2;
}
public static void pred4x4_horizontal_vp8_c(int[] src, int src_offset, int[] topright, int topright_offset, int stride){
int lt= src[src_offset -1-1*stride];
int l0= src[src_offset -1+0*stride];
int l1= src[src_offset -1+1*stride];
int l2= src[src_offset -1+2*stride];
int l3= src[src_offset -1+3*stride];
src[src_offset +0*stride + 0] =
src[src_offset +0*stride + 1] =
src[src_offset +0*stride + 2] =
src[src_offset +0*stride + 3] = (lt + 2*l0 + l1 + 2) >> 2;
src[src_offset +1*stride + 0] =
src[src_offset +1*stride + 1] =
src[src_offset +1*stride + 2] =
src[src_offset +1*stride + 3] = (l0 + 2*l1 + l2 + 2) >> 2;
src[src_offset +2*stride + 0] =
src[src_offset +2*stride + 1] =
src[src_offset +2*stride + 2] =
src[src_offset +2*stride + 3] = (l1 + 2*l2 + l3 + 2) >> 2;
src[src_offset +3*stride + 0] =
src[src_offset +3*stride + 1] =
src[src_offset +3*stride + 2] =
src[src_offset +3*stride + 3] = (l2 + 2*l3 + l3 + 2) >> 2;
}
public static void pred4x4_down_right_c(int[] src, int src_offset, int[] topright, int topright_offset, int stride){
int lt= src[src_offset -1-1*stride];
int t0= src[src_offset +0-1*stride];
int t1= src[src_offset +1-1*stride];
int t2= src[src_offset +2-1*stride];
int t3= src[src_offset +3-1*stride];
int l0= src[src_offset -1+0*stride];
int l1= src[src_offset -1+1*stride];
int l2= src[src_offset -1+2*stride];
int l3= src[src_offset -1+3*stride];
src[src_offset +0+3*stride]=(l3 + 2*l2 + l1 + 2)>>2;
src[src_offset +0+2*stride]=
src[src_offset +1+3*stride]=(l2 + 2*l1 + l0 + 2)>>2;
src[src_offset +0+1*stride]=
src[src_offset +1+2*stride]=
src[src_offset +2+3*stride]=(l1 + 2*l0 + lt + 2)>>2;
src[src_offset +0+0*stride]=
src[src_offset +1+1*stride]=
src[src_offset +2+2*stride]=
src[src_offset +3+3*stride]=(l0 + 2*lt + t0 + 2)>>2;
src[src_offset +1+0*stride]=
src[src_offset +2+1*stride]=
src[src_offset +3+2*stride]=(lt + 2*t0 + t1 + 2)>>2;
src[src_offset +2+0*stride]=
src[src_offset +3+1*stride]=(t0 + 2*t1 + t2 + 2)>>2;
src[src_offset +3+0*stride]=(t1 + 2*t2 + t3 + 2)>>2;
}
public static void pred4x4_down_left_c(int[] src, int src_offset, int[] topright, int topright_offset, int stride){
int t0= src[src_offset +0-1*stride];
int t1= src[src_offset +1-1*stride];
int t2= src[src_offset +2-1*stride];
int t3= src[src_offset +3-1*stride];
int t4= topright[topright_offset + 0];
int t5= topright[topright_offset + 1];
int t6= topright[topright_offset + 2];
int t7= topright[topright_offset + 3];
// LOAD_LEFT_EDGE
src[src_offset +0+0*stride]=(t0 + t2 + 2*t1 + 2)>>2;
src[src_offset +1+0*stride]=
src[src_offset +0+1*stride]=(t1 + t3 + 2*t2 + 2)>>2;
src[src_offset +2+0*stride]=
src[src_offset +1+1*stride]=
src[src_offset +0+2*stride]=(t2 + t4 + 2*t3 + 2)>>2;
src[src_offset +3+0*stride]=
src[src_offset +2+1*stride]=
src[src_offset +1+2*stride]=
src[src_offset +0+3*stride]=(t3 + t5 + 2*t4 + 2)>>2;
src[src_offset +3+1*stride]=
src[src_offset +2+2*stride]=
src[src_offset +1+3*stride]=(t4 + t6 + 2*t5 + 2)>>2;
src[src_offset +3+2*stride]=
src[src_offset +2+3*stride]=(t5 + t7 + 2*t6 + 2)>>2;
src[src_offset +3+3*stride]=(t6 + 3*t7 + 2)>>2;
}
public static void pred4x4_down_left_svq3_c(int[] src, int src_offset, int[] topright, int topright_offset, int stride){
//int t0= src[src_offset +0-1*stride];
int t1= src[src_offset +1-1*stride];
int t2= src[src_offset +2-1*stride];
int t3= src[src_offset +3-1*stride];
//int l0= src[src_offset -1+0*stride];
int l1= src[src_offset -1+1*stride];
int l2= src[src_offset -1+2*stride];
int l3= src[src_offset -1+3*stride];
src[src_offset +0+0*stride]=(l1 + t1)>>1;
src[src_offset +1+0*stride]=
src[src_offset +0+1*stride]=(l2 + t2)>>1;
src[src_offset +2+0*stride]=
src[src_offset +1+1*stride]=
src[src_offset +0+2*stride]=
src[src_offset +3+0*stride]=
src[src_offset +2+1*stride]=
src[src_offset +1+2*stride]=
src[src_offset +0+3*stride]=
src[src_offset +3+1*stride]=
src[src_offset +2+2*stride]=
src[src_offset +1+3*stride]=
src[src_offset +3+2*stride]=
src[src_offset +2+3*stride]=
src[src_offset +3+3*stride]=(l3 + t3)>>1;
}
public static void pred4x4_down_left_rv40_c(int[] src, int src_offset, int[] topright, int topright_offset, int stride){
int t0= src[src_offset +0-1*stride];
int t1= src[src_offset +1-1*stride];
int t2= src[src_offset +2-1*stride];
int t3= src[src_offset +3-1*stride];
int t4= topright[topright_offset + 0];
int t5= topright[topright_offset + 1];
int t6= topright[topright_offset + 2];
int t7= topright[topright_offset + 3];
int l0= src[src_offset -1+0*stride];
int l1= src[src_offset -1+1*stride];
int l2= src[src_offset -1+2*stride];
int l3= src[src_offset -1+3*stride];
int l4= src[src_offset -1+4*stride];
int l5= src[src_offset -1+5*stride];
int l6= src[src_offset -1+6*stride];
int l7= src[src_offset -1+7*stride];
src[src_offset +0+0*stride]=(t0 + t2 + 2*t1 + 2 + l0 + l2 + 2*l1 + 2)>>3;
src[src_offset +1+0*stride]=
src[src_offset +0+1*stride]=(t1 + t3 + 2*t2 + 2 + l1 + l3 + 2*l2 + 2)>>3;
src[src_offset +2+0*stride]=
src[src_offset +1+1*stride]=
src[src_offset +0+2*stride]=(t2 + t4 + 2*t3 + 2 + l2 + l4 + 2*l3 + 2)>>3;
src[src_offset +3+0*stride]=
src[src_offset +2+1*stride]=
src[src_offset +1+2*stride]=
src[src_offset +0+3*stride]=(t3 + t5 + 2*t4 + 2 + l3 + l5 + 2*l4 + 2)>>3;
src[src_offset +3+1*stride]=
src[src_offset +2+2*stride]=
src[src_offset +1+3*stride]=(t4 + t6 + 2*t5 + 2 + l4 + l6 + 2*l5 + 2)>>3;
src[src_offset +3+2*stride]=
src[src_offset +2+3*stride]=(t5 + t7 + 2*t6 + 2 + l5 + l7 + 2*l6 + 2)>>3;
src[src_offset +3+3*stride]=(t6 + t7 + 1 + l6 + l7 + 1)>>2;
}
public static void pred4x4_down_left_rv40_nodown_c(int[] src, int src_offset, int[] topright, int topright_offset, int stride){
int t0= src[src_offset +0-1*stride];
int t1= src[src_offset +1-1*stride];
int t2= src[src_offset +2-1*stride];
int t3= src[src_offset +3-1*stride];
int t4= topright[topright_offset + 0];
int t5= topright[topright_offset + 1];
int t6= topright[topright_offset + 2];
int t7= topright[topright_offset + 3];
int l0= src[src_offset -1+0*stride];
int l1= src[src_offset -1+1*stride];
int l2= src[src_offset -1+2*stride];
int l3= src[src_offset -1+3*stride];
src[src_offset +0+0*stride]=(t0 + t2 + 2*t1 + 2 + l0 + l2 + 2*l1 + 2)>>3;
src[src_offset +1+0*stride]=
src[src_offset +0+1*stride]=(t1 + t3 + 2*t2 + 2 + l1 + l3 + 2*l2 + 2)>>3;
src[src_offset +2+0*stride]=
src[src_offset +1+1*stride]=
src[src_offset +0+2*stride]=(t2 + t4 + 2*t3 + 2 + l2 + 3*l3 + 2)>>3;
src[src_offset +3+0*stride]=
src[src_offset +2+1*stride]=
src[src_offset +1+2*stride]=
src[src_offset +0+3*stride]=(t3 + t5 + 2*t4 + 2 + l3*4 + 2)>>3;
src[src_offset +3+1*stride]=
src[src_offset +2+2*stride]=
src[src_offset +1+3*stride]=(t4 + t6 + 2*t5 + 2 + l3*4 + 2)>>3;
src[src_offset +3+2*stride]=
src[src_offset +2+3*stride]=(t5 + t7 + 2*t6 + 2 + l3*4 + 2)>>3;
src[src_offset +3+3*stride]=(t6 + t7 + 1 + 2*l3 + 1)>>2;
}
public static void pred4x4_vertical_right_c(int[] src, int src_offset, int[] topright, int topright_offset, int stride){
int lt= src[src_offset -1-1*stride];
int t0= src[src_offset +0-1*stride];
int t1= src[src_offset +1-1*stride];
int t2= src[src_offset +2-1*stride];
int t3= src[src_offset +3-1*stride];
int l0= src[src_offset -1+0*stride];
int l1= src[src_offset -1+1*stride];
int l2= src[src_offset -1+2*stride];
//int l3= src[src_offset -1+3*stride];
src[src_offset +0+0*stride]=
src[src_offset +1+2*stride]=(lt + t0 + 1)>>1;
src[src_offset +1+0*stride]=
src[src_offset +2+2*stride]=(t0 + t1 + 1)>>1;
src[src_offset +2+0*stride]=
src[src_offset +3+2*stride]=(t1 + t2 + 1)>>1;
src[src_offset +3+0*stride]=(t2 + t3 + 1)>>1;
src[src_offset +0+1*stride]=
src[src_offset +1+3*stride]=(l0 + 2*lt + t0 + 2)>>2;
src[src_offset +1+1*stride]=
src[src_offset +2+3*stride]=(lt + 2*t0 + t1 + 2)>>2;
src[src_offset +2+1*stride]=
src[src_offset +3+3*stride]=(t0 + 2*t1 + t2 + 2)>>2;
src[src_offset +3+1*stride]=(t1 + 2*t2 + t3 + 2)>>2;
src[src_offset +0+2*stride]=(lt + 2*l0 + l1 + 2)>>2;
src[src_offset +0+3*stride]=(l0 + 2*l1 + l2 + 2)>>2;
}
public static void pred4x4_vertical_left_c(int[] src, int src_offset, int[] topright, int topright_offset, int stride){
int t0= src[src_offset +0-1*stride];
int t1= src[src_offset +1-1*stride];
int t2= src[src_offset +2-1*stride];
int t3= src[src_offset +3-1*stride];
int t4= topright[topright_offset + 0];
int t5= topright[topright_offset + 1];
int t6= topright[topright_offset + 2];
//int t7= topright[topright_offset + 3];
src[src_offset +0+0*stride]=(t0 + t1 + 1)>>1;
src[src_offset +1+0*stride]=
src[src_offset +0+2*stride]=(t1 + t2 + 1)>>1;
src[src_offset +2+0*stride]=
src[src_offset +1+2*stride]=(t2 + t3 + 1)>>1;
src[src_offset +3+0*stride]=
src[src_offset +2+2*stride]=(t3 + t4+ 1)>>1;
src[src_offset +3+2*stride]=(t4 + t5+ 1)>>1;
src[src_offset +0+1*stride]=(t0 + 2*t1 + t2 + 2)>>2;
src[src_offset +1+1*stride]=
src[src_offset +0+3*stride]=(t1 + 2*t2 + t3 + 2)>>2;
src[src_offset +2+1*stride]=
src[src_offset +1+3*stride]=(t2 + 2*t3 + t4 + 2)>>2;
src[src_offset +3+1*stride]=
src[src_offset +2+3*stride]=(t3 + 2*t4 + t5 + 2)>>2;
src[src_offset +3+3*stride]=(t4 + 2*t5 + t6 + 2)>>2;
}
public static void pred4x4_vertical_left_rv40(int[] src, int src_offset, int[] topright, int topright_offset, int stride,
int l0, int l1, int l2, int l3, int l4){
int t0= src[src_offset +0-1*stride];
int t1= src[src_offset +1-1*stride];
int t2= src[src_offset +2-1*stride];
int t3= src[src_offset +3-1*stride];
int t4= topright[topright_offset + 0];
int t5= topright[topright_offset + 1];
int t6= topright[topright_offset + 2];
//int t7= topright[topright_offset + 3];
src[src_offset +0+0*stride]=(2*t0 + 2*t1 + l1 + 2*l2 + l3 + 4)>>3;
src[src_offset +1+0*stride]=
src[src_offset +0+2*stride]=(t1 + t2 + 1)>>1;
src[src_offset +2+0*stride]=
src[src_offset +1+2*stride]=(t2 + t3 + 1)>>1;
src[src_offset +3+0*stride]=
src[src_offset +2+2*stride]=(t3 + t4+ 1)>>1;
src[src_offset +3+2*stride]=(t4 + t5+ 1)>>1;
src[src_offset +0+1*stride]=(t0 + 2*t1 + t2 + l2 + 2*l3 + l4 + 4)>>3;
src[src_offset +1+1*stride]=
src[src_offset +0+3*stride]=(t1 + 2*t2 + t3 + 2)>>2;
src[src_offset +2+1*stride]=
src[src_offset +1+3*stride]=(t2 + 2*t3 + t4 + 2)>>2;
src[src_offset +3+1*stride]=
src[src_offset +2+3*stride]=(t3 + 2*t4 + t5 + 2)>>2;
src[src_offset +3+3*stride]=(t4 + 2*t5 + t6 + 2)>>2;
}
public static void pred4x4_vertical_left_rv40_c(int[] src, int src_offset, int[] topright, int topright_offset, int stride){
int l0= src[src_offset -1+0*stride];
int l1= src[src_offset -1+1*stride];
int l2= src[src_offset -1+2*stride];
int l3= src[src_offset -1+3*stride];
int l4= src[src_offset -1+4*stride];
//int l5= src[src_offset -1+5*stride];
//int l6= src[src_offset -1+6*stride];
//int l7= src[src_offset -1+7*stride];
pred4x4_vertical_left_rv40(src, src_offset, topright, topright_offset, stride, l0, l1, l2, l3, l4);
}
public static void pred4x4_vertical_left_rv40_nodown_c(int[] src, int src_offset, int[] topright, int topright_offset, int stride){
int l0= src[src_offset -1+0*stride];
int l1= src[src_offset -1+1*stride];
int l2= src[src_offset -1+2*stride];
int l3= src[src_offset -1+3*stride];
pred4x4_vertical_left_rv40(src, src_offset, topright, topright_offset, stride, l0, l1, l2, l3, l3);
}
public static void pred4x4_vertical_left_vp8_c(int[] src, int src_offset, int[] topright, int topright_offset, int stride){
int t0= src[src_offset +0-1*stride];
int t1= src[src_offset +1-1*stride];
int t2= src[src_offset +2-1*stride];
int t3= src[src_offset +3-1*stride];
int t4= topright[topright_offset + 0];
int t5= topright[topright_offset + 1];
int t6= topright[topright_offset + 2];
int t7= topright[topright_offset + 3];
src[src_offset +0+0*stride]=(t0 + t1 + 1)>>1;
src[src_offset +1+0*stride]=
src[src_offset +0+2*stride]=(t1 + t2 + 1)>>1;
src[src_offset +2+0*stride]=
src[src_offset +1+2*stride]=(t2 + t3 + 1)>>1;
src[src_offset +3+0*stride]=
src[src_offset +2+2*stride]=(t3 + t4 + 1)>>1;
src[src_offset +0+1*stride]=(t0 + 2*t1 + t2 + 2)>>2;
src[src_offset +1+1*stride]=
src[src_offset +0+3*stride]=(t1 + 2*t2 + t3 + 2)>>2;
src[src_offset +2+1*stride]=
src[src_offset +1+3*stride]=(t2 + 2*t3 + t4 + 2)>>2;
src[src_offset +3+1*stride]=
src[src_offset +2+3*stride]=(t3 + 2*t4 + t5 + 2)>>2;
src[src_offset +3+2*stride]=(t4 + 2*t5 + t6 + 2)>>2;
src[src_offset +3+3*stride]=(t5 + 2*t6 + t7 + 2)>>2;
}
public static void pred4x4_horizontal_up_c(int[] src, int src_offset, int[] topright, int topright_offset, int stride){
int l0= src[src_offset -1+0*stride];
int l1= src[src_offset -1+1*stride];
int l2= src[src_offset -1+2*stride];
int l3= src[src_offset -1+3*stride];
src[src_offset +0+0*stride]=(l0 + l1 + 1)>>1;
src[src_offset +1+0*stride]=(l0 + 2*l1 + l2 + 2)>>2;
src[src_offset +2+0*stride]=
src[src_offset +0+1*stride]=(l1 + l2 + 1)>>1;
src[src_offset +3+0*stride]=
src[src_offset +1+1*stride]=(l1 + 2*l2 + l3 + 2)>>2;
src[src_offset +2+1*stride]=
src[src_offset +0+2*stride]=(l2 + l3 + 1)>>1;
src[src_offset +3+1*stride]=
src[src_offset +1+2*stride]=(l2 + 2*l3 + l3 + 2)>>2;
src[src_offset +3+2*stride]=
src[src_offset +1+3*stride]=
src[src_offset +0+3*stride]=
src[src_offset +2+2*stride]=
src[src_offset +2+3*stride]=
src[src_offset +3+3*stride]=l3;
}
public static void pred4x4_horizontal_up_rv40_c(int[] src, int src_offset, int[] topright, int topright_offset, int stride){
int l0= src[src_offset -1+0*stride];
int l1= src[src_offset -1+1*stride];
int l2= src[src_offset -1+2*stride];
int l3= src[src_offset -1+3*stride];
int l4= src[src_offset -1+4*stride];
int l5= src[src_offset -1+5*stride];
int l6= src[src_offset -1+6*stride];
//int l7= src[src_offset -1+7*stride];
//int t0= src[src_offset +0-1*stride];
int t1= src[src_offset +1-1*stride];
int t2= src[src_offset +2-1*stride];
int t3= src[src_offset +3-1*stride];
int t4= topright[topright_offset + 0];
int t5= topright[topright_offset + 1];
int t6= topright[topright_offset + 2];
int t7= topright[topright_offset + 3];
src[src_offset +0+0*stride]=(t1 + 2*t2 + t3 + 2*l0 + 2*l1 + 4)>>3;
src[src_offset +1+0*stride]=(t2 + 2*t3 + t4 + l0 + 2*l1 + l2 + 4)>>3;
src[src_offset +2+0*stride]=
src[src_offset +0+1*stride]=(t3 + 2*t4 + t5 + 2*l1 + 2*l2 + 4)>>3;
src[src_offset +3+0*stride]=
src[src_offset +1+1*stride]=(t4 + 2*t5 + t6 + l1 + 2*l2 + l3 + 4)>>3;
src[src_offset +2+1*stride]=
src[src_offset +0+2*stride]=(t5 + 2*t6 + t7 + 2*l2 + 2*l3 + 4)>>3;
src[src_offset +3+1*stride]=
src[src_offset +1+2*stride]=(t6 + 3*t7 + l2 + 3*l3 + 4)>>3;
src[src_offset +3+2*stride]=
src[src_offset +1+3*stride]=(l3 + 2*l4 + l5 + 2)>>2;
src[src_offset +0+3*stride]=
src[src_offset +2+2*stride]=(t6 + t7 + l3 + l4 + 2)>>2;
src[src_offset +2+3*stride]=(l4 + l5 + 1)>>1;
src[src_offset +3+3*stride]=(l4 + 2*l5 + l6 + 2)>>2;
}
public static void pred4x4_horizontal_up_rv40_nodown_c(int[] src, int src_offset, int[] topright, int topright_offset, int stride){
int l0= src[src_offset -1+0*stride];
int l1= src[src_offset -1+1*stride];
int l2= src[src_offset -1+2*stride];
int l3= src[src_offset -1+3*stride];
//int t0= src[src_offset +0-1*stride];
int t1= src[src_offset +1-1*stride];
int t2= src[src_offset +2-1*stride];
int t3= src[src_offset +3-1*stride];
int t4= topright[topright_offset + 0];
int t5= topright[topright_offset + 1];
int t6= topright[topright_offset + 2];
int t7= topright[topright_offset + 3];
src[src_offset +0+0*stride]=(t1 + 2*t2 + t3 + 2*l0 + 2*l1 + 4)>>3;
src[src_offset +1+0*stride]=(t2 + 2*t3 + t4 + l0 + 2*l1 + l2 + 4)>>3;
src[src_offset +2+0*stride]=
src[src_offset +0+1*stride]=(t3 + 2*t4 + t5 + 2*l1 + 2*l2 + 4)>>3;
src[src_offset +3+0*stride]=
src[src_offset +1+1*stride]=(t4 + 2*t5 + t6 + l1 + 2*l2 + l3 + 4)>>3;
src[src_offset +2+1*stride]=
src[src_offset +0+2*stride]=(t5 + 2*t6 + t7 + 2*l2 + 2*l3 + 4)>>3;
src[src_offset +3+1*stride]=
src[src_offset +1+2*stride]=(t6 + 3*t7 + l2 + 3*l3 + 4)>>3;
src[src_offset +3+2*stride]=
src[src_offset +1+3*stride]=l3;
src[src_offset +0+3*stride]=
src[src_offset +2+2*stride]=(t6 + t7 + 2*l3 + 2)>>2;
src[src_offset +2+3*stride]=
src[src_offset +3+3*stride]=l3;
}
public static void pred4x4_horizontal_down_c(int[] src, int src_offset, int[] topright, int topright_offset, int stride){
int lt= src[src_offset -1-1*stride];
int t0= src[src_offset +0-1*stride];
int t1= src[src_offset +1-1*stride];
int t2= src[src_offset +2-1*stride];
//int t3= src[src_offset +3-1*stride];
int l0= src[src_offset -1+0*stride];
int l1= src[src_offset -1+1*stride];
int l2= src[src_offset -1+2*stride];
int l3= src[src_offset -1+3*stride];
src[src_offset +0+0*stride]=
src[src_offset +2+1*stride]=(lt + l0 + 1)>>1;
src[src_offset +1+0*stride]=
src[src_offset +3+1*stride]=(l0 + 2*lt + t0 + 2)>>2;
src[src_offset +2+0*stride]=(lt + 2*t0 + t1 + 2)>>2;
src[src_offset +3+0*stride]=(t0 + 2*t1 + t2 + 2)>>2;
src[src_offset +0+1*stride]=
src[src_offset +2+2*stride]=(l0 + l1 + 1)>>1;
src[src_offset +1+1*stride]=
src[src_offset +3+2*stride]=(lt + 2*l0 + l1 + 2)>>2;
src[src_offset +0+2*stride]=
src[src_offset +2+3*stride]=(l1 + l2+ 1)>>1;
src[src_offset +1+2*stride]=
src[src_offset +3+3*stride]=(l0 + 2*l1 + l2 + 2)>>2;
src[src_offset +0+3*stride]=(l2 + l3 + 1)>>1;
src[src_offset +1+3*stride]=(l1 + 2*l2 + l3 + 2)>>2;
}
public static void pred4x4_tm_vp8_c(int[] src, int src_offset, int[] topright, int topright_offset, int stride){
int cm_offset = H264DSPContext.MAX_NEG_CROP - src[src_offset -1-stride];
int top_offset = src_offset -stride;
int y;
for (y = 0; y < 4; y++) {
int cm_in_offset = cm_offset + src[src_offset -1];
src[src_offset +0] = H264DSPContext.ff_cropTbl[ cm_in_offset + src[top_offset +0] ];
src[src_offset +1] = H264DSPContext.ff_cropTbl[ cm_in_offset + src[top_offset +1] ];
src[src_offset +2] = H264DSPContext.ff_cropTbl[ cm_in_offset + src[top_offset +2] ];
src[src_offset +3] = H264DSPContext.ff_cropTbl[ cm_in_offset + src[top_offset +3] ];
src_offset += stride;
}
}
public static void pred16x16_vertical_c(int[] src, int src_offset, int stride){
int i;
int a0 = src[src_offset -stride + 0];
int a1 = src[src_offset -stride + 1];
int a2 = src[src_offset -stride + 2];
int a3 = src[src_offset -stride + 3];
int b0 = src[src_offset -stride + 4];
int b1 = src[src_offset -stride + 5];
int b2 = src[src_offset -stride + 6];
int b3 = src[src_offset -stride + 7];
int c0 = src[src_offset -stride + 8];
int c1 = src[src_offset -stride + 9];
int c2 = src[src_offset -stride + 10];
int c3 = src[src_offset -stride + 11];
int d0 = src[src_offset -stride + 12];
int d1 = src[src_offset -stride + 13];
int d2 = src[src_offset -stride + 14];
int d3 = src[src_offset -stride + 15];
for(i=0; i<16; i++){
src[src_offset +i*stride + 0] = a0;
src[src_offset +i*stride + 1] = a1;
src[src_offset +i*stride + 2] = a2;
src[src_offset +i*stride + 3] = a3;
src[src_offset +i*stride + 4] = b0;
src[src_offset +i*stride + 5] = b1;
src[src_offset +i*stride + 6] = b2;
src[src_offset +i*stride + 7] = b3;
src[src_offset +i*stride + 8] = c0;
src[src_offset +i*stride + 9] = c1;
src[src_offset +i*stride + 10] = c2;
src[src_offset +i*stride + 11] = c3;
src[src_offset +i*stride + 12] = d0;
src[src_offset +i*stride + 13] = d1;
src[src_offset +i*stride + 14] = d2;
src[src_offset +i*stride + 15] = d3;
}
}
public static void pred16x16_horizontal_c(int[] src, int src_offset, int stride){
int i;
for(i=0; i<16; i++){
src[src_offset +i*stride + 0] =
src[src_offset +i*stride + 1] =
src[src_offset +i*stride + 2] =
src[src_offset +i*stride + 3] =
src[src_offset +i*stride + 4] =
src[src_offset +i*stride + 5] =
src[src_offset +i*stride + 6] =
src[src_offset +i*stride + 7] =
src[src_offset +i*stride + 8] =
src[src_offset +i*stride + 9] =
src[src_offset +i*stride + 10] =
src[src_offset +i*stride + 11] =
src[src_offset +i*stride + 12] =
src[src_offset +i*stride + 13] =
src[src_offset +i*stride + 14] =
src[src_offset +i*stride + 15] = src[src_offset -1+i*stride];
}
}
public static void pred16x16_dc_c(int[] src, int src_offset, int stride){
int i, dc=0;
for(i=0;i<16; i++){
dc+= src[src_offset -1+i*stride];
}
for(i=0;i<16; i++){
dc+= src[src_offset +i-stride];
}
dc = ((dc + 16)>>5);
for(i=0; i<16; i++){
src[src_offset +i*stride + 0] =
src[src_offset +i*stride + 1] =
src[src_offset +i*stride + 2] =
src[src_offset +i*stride + 3] =
src[src_offset +i*stride + 4] =
src[src_offset +i*stride + 5] =
src[src_offset +i*stride + 6] =
src[src_offset +i*stride + 7] =
src[src_offset +i*stride + 8] =
src[src_offset +i*stride + 9] =
src[src_offset +i*stride + 10] =
src[src_offset +i*stride + 11] =
src[src_offset +i*stride + 12] =
src[src_offset +i*stride + 13] =
src[src_offset +i*stride + 14] =
src[src_offset +i*stride + 15] = dc;
}
}
public static void pred16x16_left_dc_c(int[] src, int src_offset, int stride){
int i, dc=0;
for(i=0;i<16; i++){
// DebugTool.printDebugString(" **** dc += "+src[src_offset -1+i*stride]+" ["+(src_offset-1+i*stride)+"]\n");
dc+= src[src_offset -1+i*stride];
}
dc = ((dc + 8)>>4);
// DebugTool.printDebugString(" **** avg dc = "+dc+"\n");
for(i=0; i<16; i++){
src[src_offset +i*stride + 0] =
src[src_offset +i*stride + 1] =
src[src_offset +i*stride + 2] =
src[src_offset +i*stride + 3] =
src[src_offset +i*stride + 4] =
src[src_offset +i*stride + 5] =
src[src_offset +i*stride + 6] =
src[src_offset +i*stride + 7] =
src[src_offset +i*stride + 8] =
src[src_offset +i*stride + 9] =
src[src_offset +i*stride + 10] =
src[src_offset +i*stride + 11] =
src[src_offset +i*stride + 12] =
src[src_offset +i*stride + 13] =
src[src_offset +i*stride + 14] =
src[src_offset +i*stride + 15] = dc;
}
}
public static void pred16x16_top_dc_c(int[] src, int src_offset, int stride){
int i, dc=0;
for(i=0;i<16; i++){
dc+= src[src_offset +i-stride];
}
dc = ((dc + 8)>>4);
for(i=0; i<16; i++){
src[src_offset +i*stride + 0] =
src[src_offset +i*stride + 1] =
src[src_offset +i*stride + 2] =
src[src_offset +i*stride + 3] =
src[src_offset +i*stride + 4] =
src[src_offset +i*stride + 5] =
src[src_offset +i*stride + 6] =
src[src_offset +i*stride + 7] =
src[src_offset +i*stride + 8] =
src[src_offset +i*stride + 9] =
src[src_offset +i*stride + 10] =
src[src_offset +i*stride + 11] =
src[src_offset +i*stride + 12] =
src[src_offset +i*stride + 13] =
src[src_offset +i*stride + 14] =
src[src_offset +i*stride + 15] = dc;
}
}
public static void pred16x16_128_dc_c(int[] src, int src_offset, int stride){
int i;
for(i=0; i<16; i++){
src[src_offset +i*stride + 0] =
src[src_offset +i*stride + 1] =
src[src_offset +i*stride + 2] =
src[src_offset +i*stride + 3] =
src[src_offset +i*stride + 4] =
src[src_offset +i*stride + 5] =
src[src_offset +i*stride + 6] =
src[src_offset +i*stride + 7] =
src[src_offset +i*stride + 8] =
src[src_offset +i*stride + 9] =
src[src_offset +i*stride + 10] =
src[src_offset +i*stride + 11] =
src[src_offset +i*stride + 12] =
src[src_offset +i*stride + 13] =
src[src_offset +i*stride + 14] =
src[src_offset +i*stride + 15] = 128;
}
}
public static void pred16x16_127_dc_c(int[] src, int src_offset, int stride){
int i;
for(i=0; i<16; i++){
src[src_offset +i*stride + 0] =
src[src_offset +i*stride + 1] =
src[src_offset +i*stride + 2] =
src[src_offset +i*stride + 3] =
src[src_offset +i*stride + 4] =
src[src_offset +i*stride + 5] =
src[src_offset +i*stride + 6] =
src[src_offset +i*stride + 7] =
src[src_offset +i*stride + 8] =
src[src_offset +i*stride + 9] =
src[src_offset +i*stride + 10] =
src[src_offset +i*stride + 11] =
src[src_offset +i*stride + 12] =
src[src_offset +i*stride + 13] =
src[src_offset +i*stride + 14] =
src[src_offset +i*stride + 15] = 127;
}
}
public static void pred16x16_129_dc_c(int[] src, int src_offset, int stride){
int i;
for(i=0; i<16; i++){
src[src_offset +i*stride + 0] =
src[src_offset +i*stride + 1] =
src[src_offset +i*stride + 2] =
src[src_offset +i*stride + 3] =
src[src_offset +i*stride + 4] =
src[src_offset +i*stride + 5] =
src[src_offset +i*stride + 6] =
src[src_offset +i*stride + 7] =
src[src_offset +i*stride + 8] =
src[src_offset +i*stride + 9] =
src[src_offset +i*stride + 10] =
src[src_offset +i*stride + 11] =
src[src_offset +i*stride + 12] =
src[src_offset +i*stride + 13] =
src[src_offset +i*stride + 14] =
src[src_offset +i*stride + 15] = 129;
}
}
public static void pred16x16_plane_compat_c(int[] src, int src_offset, int stride, int svq3, int rv40){
int i, j, k;
int a;
int cm_offset = H264DSPContext.MAX_NEG_CROP;
int src0_offset = src_offset +7-stride;
int src1_offset = src_offset +8*stride-1;
int src2_offset = src1_offset -2*stride; // == src+6*stride-1;
int H = src[src0_offset + 1] - src[src0_offset - 1];
int V = src[src1_offset + 0] - src[src2_offset + 0];
for(k=2; k<=8; ++k) {
src1_offset += stride; src2_offset -= stride;
H += k*(src[src0_offset + k] - src[src0_offset - k]);
V += k*(src[src1_offset + 0] - src[src2_offset + 0]);
}
if(svq3 != 0 ){
H = ( 5*(H/4) ) / 16;
V = ( 5*(V/4) ) / 16;
/* required for 100% accuracy */
i = H; H = V; V = i;
}else if(rv40 != 0){
H = ( H + (H>>2) ) >> 4;
V = ( V + (V>>2) ) >> 4;
}else{
H = ( 5*H+32 ) >> 6;
V = ( 5*V+32 ) >> 6;
}
a = 16*(src[src1_offset + 0] + src[src2_offset + 16] + 1) - 7*(V+H);
for(j=16; j>0; --j) {
int b = a;
a += V;
for(i=-16; i<0; i+=4) {
src[src_offset +16+i] = H264DSPContext.ff_cropTbl[cm_offset + ( (b ) >> 5 )];
src[src_offset +17+i] = H264DSPContext.ff_cropTbl[cm_offset + ( (b+ H) >> 5 )];
src[src_offset +18+i] = H264DSPContext.ff_cropTbl[cm_offset + ( (b+2*H) >> 5 )];
src[src_offset +19+i] = H264DSPContext.ff_cropTbl[cm_offset + ( (b+3*H) >> 5 )];
b += 4*H;
}
src_offset += stride;
}
}
public static void pred16x16_plane_c(int[] src, int src_offset, int stride){
pred16x16_plane_compat_c(src, src_offset, stride, 0, 0);
}
public static void pred16x16_plane_svq3_c(int[] src, int src_offset, int stride){
pred16x16_plane_compat_c(src, src_offset, stride, 1, 0);
}
public static void pred16x16_plane_rv40_c(int[] src, int src_offset, int stride){
pred16x16_plane_compat_c(src, src_offset, stride, 0, 1);
}
public static void pred16x16_tm_vp8_c(int[] src, int src_offset, int stride){
int cm_offset = H264DSPContext.MAX_NEG_CROP - src[src_offset -1-stride];
int top_offset = src_offset -stride;
int y;
for (y = 0; y < 16; y++) {
int cm_in_offset = cm_offset + src[src_offset -1];
src[src_offset +0] = H264DSPContext.ff_cropTbl[cm_in_offset + src[top_offset +0]];
src[src_offset +1] = H264DSPContext.ff_cropTbl[cm_in_offset + src[top_offset +1]];
src[src_offset +2] = H264DSPContext.ff_cropTbl[cm_in_offset + src[top_offset +2]];
src[src_offset +3] = H264DSPContext.ff_cropTbl[cm_in_offset + src[top_offset +3]];
src[src_offset +4] = H264DSPContext.ff_cropTbl[cm_in_offset + src[top_offset +4]];
src[src_offset +5] = H264DSPContext.ff_cropTbl[cm_in_offset + src[top_offset +5]];
src[src_offset +6] = H264DSPContext.ff_cropTbl[cm_in_offset + src[top_offset +6]];
src[src_offset +7] = H264DSPContext.ff_cropTbl[cm_in_offset + src[top_offset +7]];
src[src_offset +8] = H264DSPContext.ff_cropTbl[cm_in_offset + src[top_offset +8]];
src[src_offset +9] = H264DSPContext.ff_cropTbl[cm_in_offset + src[top_offset +9]];
src[src_offset +10] = H264DSPContext.ff_cropTbl[cm_in_offset + src[top_offset +10]];
src[src_offset +11] = H264DSPContext.ff_cropTbl[cm_in_offset + src[top_offset +11]];
src[src_offset +12] = H264DSPContext.ff_cropTbl[cm_in_offset + src[top_offset +12]];
src[src_offset +13] = H264DSPContext.ff_cropTbl[cm_in_offset + src[top_offset +13]];
src[src_offset +14] = H264DSPContext.ff_cropTbl[cm_in_offset + src[top_offset +14]];
src[src_offset +15] = H264DSPContext.ff_cropTbl[cm_in_offset + src[top_offset +15]];
src_offset += stride;
}
}
public static void pred8x8_vertical_c(int[] src, int src_offset, int stride){
int i;
int a0 = src[src_offset -stride + 0];
int a1 = src[src_offset -stride + 1];
int a2 = src[src_offset -stride + 2];
int a3 = src[src_offset -stride + 3];
int b0 = src[src_offset -stride + 4];
int b1 = src[src_offset -stride + 5];
int b2 = src[src_offset -stride + 6];
int b3 = src[src_offset -stride + 7];
for(i=0; i<8; i++){
src[src_offset +i*stride + 0] = a0;
src[src_offset +i*stride + 1] = a1;
src[src_offset +i*stride + 2] = a2;
src[src_offset +i*stride + 3] = a3;
src[src_offset +i*stride + 4] = b0;
src[src_offset +i*stride + 5] = b1;
src[src_offset +i*stride + 6] = b2;
src[src_offset +i*stride + 7] = b3;
}
}
public static void pred8x8_horizontal_c(int[] src, int src_offset, int stride){
int i;
for(i=0; i<8; i++){
src[src_offset +i*stride + 0] =
src[src_offset +i*stride + 1] =
src[src_offset +i*stride + 2] =
src[src_offset +i*stride + 3] =
src[src_offset +i*stride + 4] =
src[src_offset +i*stride + 5] =
src[src_offset +i*stride + 6] =
src[src_offset +i*stride + 7] = src[src_offset -1+i*stride];
}
}
public static void pred8x8_128_dc_c(int[] src, int src_offset, int stride){
int i;
for(i=0; i<8; i++){
src[src_offset +i*stride + 0] =
src[src_offset +i*stride + 1] =
src[src_offset +i*stride + 2] =
src[src_offset +i*stride + 3] =
src[src_offset +i*stride + 4] =
src[src_offset +i*stride + 5] =
src[src_offset +i*stride + 6] =
src[src_offset +i*stride + 7] = 128;
}
}
public static void pred8x8_127_dc_c(int[] src, int src_offset, int stride){
int i;
for(i=0; i<8; i++){
src[src_offset +i*stride + 0] =
src[src_offset +i*stride + 1] =
src[src_offset +i*stride + 2] =
src[src_offset +i*stride + 3] =
src[src_offset +i*stride + 4] =
src[src_offset +i*stride + 5] =
src[src_offset +i*stride + 6] =
src[src_offset +i*stride + 7] = 127;
}
}
public static void pred8x8_129_dc_c(int[] src, int src_offset, int stride){
int i;
for(i=0; i<8; i++){
src[src_offset +i*stride + 0] =
src[src_offset +i*stride + 1] =
src[src_offset +i*stride + 2] =
src[src_offset +i*stride + 3] =
src[src_offset +i*stride + 4] =
src[src_offset +i*stride + 5] =
src[src_offset +i*stride + 6] =
src[src_offset +i*stride + 7] = 129;
}
}
public static void pred8x8_left_dc_c(int[] src, int src_offset, int stride){
int i;
int dc0, dc2;
dc0=dc2=0;
for(i=0;i<4; i++){
dc0+= src[src_offset -1+i*stride];
dc2+= src[src_offset -1+(i+4)*stride];
}
dc0= ((dc0 + 2)>>2);
dc2= ((dc2 + 2)>>2);
for(i=0; i<4; i++){
src[src_offset +i*stride + 0] =
src[src_offset +i*stride + 1] =
src[src_offset +i*stride + 2] =
src[src_offset +i*stride + 3] =
src[src_offset +i*stride + 4] =
src[src_offset +i*stride + 5] =
src[src_offset +i*stride + 6] =
src[src_offset +i*stride + 7] = dc0;
}
for(i=4; i<8; i++){
src[src_offset +i*stride + 0] =
src[src_offset +i*stride + 1] =
src[src_offset +i*stride + 2] =
src[src_offset +i*stride + 3] =
src[src_offset +i*stride + 4] =
src[src_offset +i*stride + 5] =
src[src_offset +i*stride + 6] =
src[src_offset +i*stride + 7] = dc2;
}
}
public static void pred8x8_left_dc_rv40_c(int[] src, int src_offset, int stride){
int i;
int dc0;
dc0=0;
for(i=0;i<8; i++)
dc0+= src[src_offset -1+i*stride];
dc0= ((dc0 + 4)>>3);
for(i=0; i<8; i++){
src[src_offset +i*stride + 0] =
src[src_offset +i*stride + 1] =
src[src_offset +i*stride + 2] =
src[src_offset +i*stride + 3] =
src[src_offset +i*stride + 4] =
src[src_offset +i*stride + 5] =
src[src_offset +i*stride + 6] =
src[src_offset +i*stride + 7] = dc0;
}
}
public static void pred8x8_top_dc_c(int[] src, int src_offset, int stride){
int i;
int dc0, dc1;
dc0=dc1=0;
for(i=0;i<4; i++){
dc0+= src[src_offset +i-stride];
dc1+= src[src_offset +4+i-stride];
}
dc0= ((dc0 + 2)>>2);
dc1= ((dc1 + 2)>>2);
for(i=0; i<4; i++){
src[src_offset +i*stride + 0] =
src[src_offset +i*stride + 1] =
src[src_offset +i*stride + 2] =
src[src_offset +i*stride + 3] = dc0;
src[src_offset +i*stride + 4] =
src[src_offset +i*stride + 5] =
src[src_offset +i*stride + 6] =
src[src_offset +i*stride + 7] = dc1;
}
for(i=4; i<8; i++){
src[src_offset +i*stride + 0] =
src[src_offset +i*stride + 1] =
src[src_offset +i*stride + 2] =
src[src_offset +i*stride + 3] = dc0;
src[src_offset +i*stride + 4] =
src[src_offset +i*stride + 5] =
src[src_offset +i*stride + 6] =
src[src_offset +i*stride + 7] = dc1;
}
}
public static void pred8x8_top_dc_rv40_c(int[] src, int src_offset, int stride){
int i;
int dc0;
dc0=0;
for(i=0;i<8; i++)
dc0+= src[src_offset +i-stride];
dc0 = ((dc0 + 4)>>3);
for(i=0; i<8; i++){
src[src_offset +i*stride + 0] =
src[src_offset +i*stride + 1] =
src[src_offset +i*stride + 2] =
src[src_offset +i*stride + 3] =
src[src_offset +i*stride + 4] =
src[src_offset +i*stride + 5] =
src[src_offset +i*stride + 6] =
src[src_offset +i*stride + 7] = dc0;
}
}
public static void pred8x8_dc_c(int[] src, int src_offset, int stride){
int i;
int dc0, dc1, dc2, dc3;
dc0=dc1=dc2=0;
for(i=0;i<4; i++){
dc0+= src[src_offset -1+i*stride] + src[src_offset +i-stride];
dc1+= src[src_offset +4+i-stride];
dc2+= src[src_offset -1+(i+4)*stride];
}
dc3 = ((dc1 + dc2 + 4)>>3);
dc0 = ((dc0 + 4)>>3);
dc1 = ((dc1 + 2)>>2);
dc2 = ((dc2 + 2)>>2);
for(i=0; i<4; i++){
src[src_offset +i*stride + 0] =
src[src_offset +i*stride + 1] =
src[src_offset +i*stride + 2] =
src[src_offset +i*stride + 3] = dc0;
src[src_offset +i*stride + 4] =
src[src_offset +i*stride + 5] =
src[src_offset +i*stride + 6] =
src[src_offset +i*stride + 7] = dc1;
}
for(i=4; i<8; i++){
src[src_offset +i*stride + 0] =
src[src_offset +i*stride + 1] =
src[src_offset +i*stride + 2] =
src[src_offset +i*stride + 3] = dc2;
src[src_offset +i*stride + 4] =
src[src_offset +i*stride + 5] =
src[src_offset +i*stride + 6] =
src[src_offset +i*stride + 7] = dc3;
}
}
//the following 4 function should not be optimized!
public static void pred8x8_mad_cow_dc_l0t(int[] src, int src_offset, int stride){
pred8x8_top_dc_c(src, src_offset, stride);
pred4x4_dc_c(src, src_offset, null, 0, stride);
}
public static void pred8x8_mad_cow_dc_0lt(int[] src, int src_offset, int stride){
pred8x8_dc_c(src, src_offset, stride);
pred4x4_top_dc_c(src, src_offset, null, 0, stride);
}
public static void pred8x8_mad_cow_dc_l00(int[] src, int src_offset, int stride){
pred8x8_left_dc_c(src, src_offset, stride);
pred4x4_128_dc_c(src, src_offset +4*stride , null, 0, stride);
pred4x4_128_dc_c(src, src_offset +4*stride + 4, null, 0, stride);
}
public static void pred8x8_mad_cow_dc_0l0(int[] src, int src_offset, int stride){
pred8x8_left_dc_c(src, src_offset, stride);
pred4x4_128_dc_c(src, src_offset , null, 0, stride);
pred4x4_128_dc_c(src, src_offset + 4, null, 0, stride);
}
public static void pred8x8_dc_rv40_c(int[] src, int src_offset, int stride){
int i;
int dc0=0;
for(i=0;i<4; i++){
dc0+= src[src_offset -1+i*stride] + src[src_offset +i-stride];
dc0+= src[src_offset +4+i-stride];
dc0+= src[src_offset -1+(i+4)*stride];
}
dc0 = ((dc0 + 8)>>4);
for(i=0; i<4; i++){
src[src_offset +i*stride + 0] =
src[src_offset +i*stride + 1] =
src[src_offset +i*stride + 2] =
src[src_offset +i*stride + 3] = dc0;
src[src_offset +i*stride + 4] =
src[src_offset +i*stride + 5] =
src[src_offset +i*stride + 6] =
src[src_offset +i*stride + 7] = dc0;
}
for(i=4; i<8; i++){
src[src_offset +i*stride + 0] =
src[src_offset +i*stride + 1] =
src[src_offset +i*stride + 2] =
src[src_offset +i*stride + 3] = dc0;
src[src_offset +i*stride + 4] =
src[src_offset +i*stride + 5] =
src[src_offset +i*stride + 6] =
src[src_offset +i*stride + 7] = dc0;
}
}
public static void pred8x8_plane_c(int[] src, int src_offset, int stride){
int j, k;
int a;
int cm_offset = H264DSPContext.MAX_NEG_CROP;
int src0_offset = src_offset +3-stride;
int src1_offset = src_offset +4*stride-1;
int src2_offset = src1_offset -2*stride; // == src+2*stride-1;
int H = src[src0_offset + 1] - src[src0_offset - 1];
int V = src[src1_offset + 0] - src[src2_offset + 0];
for(k=2; k<=4; ++k) {
src1_offset += stride; src2_offset -= stride;
H += k*(src[src0_offset + k] - src[src0_offset - k]);
V += k*(src[src1_offset + 0] - src[src2_offset + 0]);
}
H = ( 17*H+16 ) >> 5;
V = ( 17*V+16 ) >> 5;
a = 16*(src[src1_offset + 0] + src[src2_offset + 8]+1) - 3*(V+H);
for(j=8; j>0; --j) {
int b = a;
a += V;
src[src_offset +0] = H264DSPContext.ff_cropTbl[cm_offset +((b ) >> 5) ];
src[src_offset +1] = H264DSPContext.ff_cropTbl[cm_offset +((b+ H) >> 5) ];
src[src_offset +2] = H264DSPContext.ff_cropTbl[cm_offset +((b+2*H) >> 5) ];
src[src_offset +3] = H264DSPContext.ff_cropTbl[cm_offset +((b+3*H) >> 5) ];
src[src_offset +4] = H264DSPContext.ff_cropTbl[cm_offset +((b+4*H) >> 5) ];
src[src_offset +5] = H264DSPContext.ff_cropTbl[cm_offset +((b+5*H) >> 5) ];
src[src_offset +6] = H264DSPContext.ff_cropTbl[cm_offset +((b+6*H) >> 5) ];
src[src_offset +7] = H264DSPContext.ff_cropTbl[cm_offset +((b+7*H) >> 5) ];
src_offset += stride;
}
}
public static void pred8x8_tm_vp8_c(int[] src, int src_offset, int stride){
int cm_offset = H264DSPContext.MAX_NEG_CROP - src[src_offset -1-stride];
int top_offset = src_offset -stride;
int y;
for (y = 0; y < 8; y++) {
int cm_in_offset = cm_offset + src[src_offset -1];
src[src_offset +0] = H264DSPContext.ff_cropTbl[cm_in_offset +src[top_offset +0]];
src[src_offset +1] = H264DSPContext.ff_cropTbl[cm_in_offset +src[top_offset +1]];
src[src_offset +2] = H264DSPContext.ff_cropTbl[cm_in_offset +src[top_offset +2]];
src[src_offset +3] = H264DSPContext.ff_cropTbl[cm_in_offset +src[top_offset +3]];
src[src_offset +4] = H264DSPContext.ff_cropTbl[cm_in_offset +src[top_offset +4]];
src[src_offset +5] = H264DSPContext.ff_cropTbl[cm_in_offset +src[top_offset +5]];
src[src_offset +6] = H264DSPContext.ff_cropTbl[cm_in_offset +src[top_offset +6]];
src[src_offset +7] = H264DSPContext.ff_cropTbl[cm_in_offset +src[top_offset +7]];
src_offset += stride;
}
}
//////////////////
//////////////////
public static void pred8x8l_128_dc_c(int[] src, int src_offset, int has_topleft, int has_topright, int stride)
{
int y;
for( y = 0; y < 8; y++ ) {
src[src_offset + 0] =
src[src_offset + 1] =
src[src_offset + 2] =
src[src_offset + 3] =
src[src_offset + 4] =
src[src_offset + 5] =
src[src_offset + 6] =
src[src_offset + 7] = 128;
src_offset += stride;
}
}
public static void pred8x8l_left_dc_c(int[] src, int src_offset, int has_topleft, int has_topright, int stride)
{
int l0 = ((has_topleft!=0 ? src[src_offset -1 -1*stride] : src[src_offset -1 +0*stride] )
+ 2*src[src_offset -1 +0*stride] + src[src_offset -1 +1*stride] + 2) >> 2;
int l1 = (src[src_offset -1 +0*stride] + 2*src[src_offset -1 +1*stride] + src[src_offset -1 +2*stride] + 2) >> 2;
int l2 = (src[src_offset -1 +1*stride] + 2*src[src_offset -1 +2*stride] + src[src_offset -1 +3*stride] + 2) >> 2;
int l3 = (src[src_offset -1 +2*stride] + 2*src[src_offset -1 +3*stride] + src[src_offset -1 +4*stride] + 2) >> 2;
int l4 = (src[src_offset -1 +3*stride] + 2*src[src_offset -1 +4*stride] + src[src_offset -1 +5*stride] + 2) >> 2;
int l5 = (src[src_offset -1 +4*stride] + 2*src[src_offset -1 +5*stride] + src[src_offset -1 +6*stride] + 2) >> 2;
int l6 = (src[src_offset -1 +5*stride] + 2*src[src_offset -1 +6*stride] + src[src_offset -1 +7*stride] + 2) >> 2;
int l7 = (src[src_offset -1 +6*stride] + 3*src[src_offset -1 +7*stride] + 2) >> 2;
int dc = ((l0+l1+l2+l3+l4+l5+l6+l7+4) >> 3);
int y;
for( y = 0; y < 8; y++ ) {
src[src_offset + 0] =
src[src_offset + 1] =
src[src_offset + 2] =
src[src_offset + 3] =
src[src_offset + 4] =
src[src_offset + 5] =
src[src_offset + 6] =
src[src_offset + 7] = dc;
src_offset += stride;
}
}
public static void pred8x8l_top_dc_c(int[] src, int src_offset, int has_topleft, int has_topright, int stride)
{
int t0 = ((has_topleft!=0 ? src[src_offset -1 -1*stride] : src[src_offset +0 -1*stride])
+ 2*src[src_offset +0 -1*stride] + src[src_offset +1 -1*stride] + 2) >> 2;
int t1 = (src[src_offset +0 -1*stride] + 2*src[src_offset +1 -1*stride] + src[src_offset +2 -1*stride] + 2) >> 2;
int t2 = (src[src_offset +1 -1*stride] + 2*src[src_offset +2 -1*stride] + src[src_offset +3 -1*stride] + 2) >> 2;
int t3 = (src[src_offset +2 -1*stride] + 2*src[src_offset +3 -1*stride] + src[src_offset +4 -1*stride] + 2) >> 2;
int t4 = (src[src_offset +3 -1*stride] + 2*src[src_offset +4 -1*stride] + src[src_offset +5 -1*stride] + 2) >> 2;
int t5 = (src[src_offset +4 -1*stride] + 2*src[src_offset +5 -1*stride] + src[src_offset +6 -1*stride] + 2) >> 2;
int t6 = (src[src_offset +5 -1*stride] + 2*src[src_offset +6 -1*stride] + src[src_offset +7 -1*stride] + 2) >> 2;
int t7 = ((has_topright!=0 ? src[src_offset +8 -1*stride] : src[src_offset +7 -1*stride])
+ 2*src[src_offset +7 -1*stride] + src[src_offset +6 -1*stride] + 2) >> 2;
int dc = ((t0+t1+t2+t3+t4+t5+t6+t7+4) >> 3);
int y;
for( y = 0; y < 8; y++ ) {
src[src_offset + 0] =
src[src_offset + 1] =
src[src_offset + 2] =
src[src_offset + 3] =
src[src_offset + 4] =
src[src_offset + 5] =
src[src_offset + 6] =
src[src_offset + 7] = dc;
src_offset += stride;
}
}
public static void pred8x8l_dc_c(int[] src, int src_offset, int has_topleft, int has_topright, int stride)
{
int l0 = ((has_topleft!=0 ? src[src_offset -1 -1*stride] : src[src_offset -1 +0*stride] )
+ 2*src[src_offset -1 +0*stride] + src[src_offset -1 +1*stride] + 2) >> 2;
int l1 = (src[src_offset -1 +0*stride] + 2*src[src_offset -1 +1*stride] + src[src_offset -1 +2*stride] + 2) >> 2;
int l2 = (src[src_offset -1 +1*stride] + 2*src[src_offset -1 +2*stride] + src[src_offset -1 +3*stride] + 2) >> 2;
int l3 = (src[src_offset -1 +2*stride] + 2*src[src_offset -1 +3*stride] + src[src_offset -1 +4*stride] + 2) >> 2;
int l4 = (src[src_offset -1 +3*stride] + 2*src[src_offset -1 +4*stride] + src[src_offset -1 +5*stride] + 2) >> 2;
int l5 = (src[src_offset -1 +4*stride] + 2*src[src_offset -1 +5*stride] + src[src_offset -1 +6*stride] + 2) >> 2;
int l6 = (src[src_offset -1 +5*stride] + 2*src[src_offset -1 +6*stride] + src[src_offset -1 +7*stride] + 2) >> 2;
int l7 = (src[src_offset -1 +6*stride] + 3*src[src_offset -1 +7*stride] + 2) >> 2;
int t0 = ((has_topleft!=0 ? src[src_offset -1 -1*stride] : src[src_offset +0 -1*stride])
+ 2*src[src_offset +0 -1*stride] + src[src_offset +1 -1*stride] + 2) >> 2;
int t1 = (src[src_offset +0 -1*stride] + 2*src[src_offset +1 -1*stride] + src[src_offset +2 -1*stride] + 2) >> 2;
int t2 = (src[src_offset +1 -1*stride] + 2*src[src_offset +2 -1*stride] + src[src_offset +3 -1*stride] + 2) >> 2;
int t3 = (src[src_offset +2 -1*stride] + 2*src[src_offset +3 -1*stride] + src[src_offset +4 -1*stride] + 2) >> 2;
int t4 = (src[src_offset +3 -1*stride] + 2*src[src_offset +4 -1*stride] + src[src_offset +5 -1*stride] + 2) >> 2;
int t5 = (src[src_offset +4 -1*stride] + 2*src[src_offset +5 -1*stride] + src[src_offset +6 -1*stride] + 2) >> 2;
int t6 = (src[src_offset +5 -1*stride] + 2*src[src_offset +6 -1*stride] + src[src_offset +7 -1*stride] + 2) >> 2;
int t7 = ((has_topright!=0 ? src[src_offset +8 -1*stride] : src[src_offset +7 -1*stride])
+ 2*src[src_offset +7 -1*stride] + src[src_offset +6 -1*stride] + 2) >> 2;
int dc = ((l0+l1+l2+l3+l4+l5+l6+l7
+t0+t1+t2+t3+t4+t5+t6+t7+8) >> 4);
int y;
for( y = 0; y < 8; y++ ) {
src[src_offset + 0] =
src[src_offset + 1] =
src[src_offset + 2] =
src[src_offset + 3] =
src[src_offset + 4] =
src[src_offset + 5] =
src[src_offset + 6] =
src[src_offset + 7] = dc;
src_offset += stride;
}
}
public static void pred8x8l_horizontal_c(int[] src, int src_offset, int has_topleft, int has_topright, int stride)
{
int l0 = ((has_topleft!=0 ? src[src_offset -1 -1*stride] : src[src_offset -1 +0*stride] )
+ 2*src[src_offset -1 +0*stride] + src[src_offset -1 +1*stride] + 2) >> 2;
int l1 = (src[src_offset -1 +0*stride] + 2*src[src_offset -1 +1*stride] + src[src_offset -1 +2*stride] + 2) >> 2;
int l2 = (src[src_offset -1 +1*stride] + 2*src[src_offset -1 +2*stride] + src[src_offset -1 +3*stride] + 2) >> 2;
int l3 = (src[src_offset -1 +2*stride] + 2*src[src_offset -1 +3*stride] + src[src_offset -1 +4*stride] + 2) >> 2;
int l4 = (src[src_offset -1 +3*stride] + 2*src[src_offset -1 +4*stride] + src[src_offset -1 +5*stride] + 2) >> 2;
int l5 = (src[src_offset -1 +4*stride] + 2*src[src_offset -1 +5*stride] + src[src_offset -1 +6*stride] + 2) >> 2;
int l6 = (src[src_offset -1 +5*stride] + 2*src[src_offset -1 +6*stride] + src[src_offset -1 +7*stride] + 2) >> 2;
int l7 = (src[src_offset -1 +6*stride] + 3*src[src_offset -1 +7*stride] + 2) >> 2;
src[src_offset + 0 * stride + 0] =
src[src_offset + 0 * stride + 1] =
src[src_offset + 0 * stride + 2] =
src[src_offset + 0 * stride + 3] =
src[src_offset + 0 * stride + 4] =
src[src_offset + 0 * stride + 5] =
src[src_offset + 0 * stride + 6] =
src[src_offset + 0 * stride + 7] = l0;
src[src_offset + 1 * stride + 0] =
src[src_offset + 1 * stride + 1] =
src[src_offset + 1 * stride + 2] =
src[src_offset + 1 * stride + 3] =
src[src_offset + 1 * stride + 4] =
src[src_offset + 1 * stride + 5] =
src[src_offset + 1 * stride + 6] =
src[src_offset + 1 * stride + 7] = l1;
src[src_offset + 2 * stride + 0] =
src[src_offset + 2 * stride + 1] =
src[src_offset + 2 * stride + 2] =
src[src_offset + 2 * stride + 3] =
src[src_offset + 2 * stride + 4] =
src[src_offset + 2 * stride + 5] =
src[src_offset + 2 * stride + 6] =
src[src_offset + 2 * stride + 7] = l2;
src[src_offset + 3 * stride + 0] =
src[src_offset + 3 * stride + 1] =
src[src_offset + 3 * stride + 2] =
src[src_offset + 3 * stride + 3] =
src[src_offset + 3 * stride + 4] =
src[src_offset + 3 * stride + 5] =
src[src_offset + 3 * stride + 6] =
src[src_offset + 3 * stride + 7] = l3;
src[src_offset + 4 * stride + 0] =
src[src_offset + 4 * stride + 1] =
src[src_offset + 4 * stride + 2] =
src[src_offset + 4 * stride + 3] =
src[src_offset + 4 * stride + 4] =
src[src_offset + 4 * stride + 5] =
src[src_offset + 4 * stride + 6] =
src[src_offset + 4 * stride + 7] = l4;
src[src_offset + 5 * stride + 0] =
src[src_offset + 5 * stride + 1] =
src[src_offset + 5 * stride + 2] =
src[src_offset + 5 * stride + 3] =
src[src_offset + 5 * stride + 4] =
src[src_offset + 5 * stride + 5] =
src[src_offset + 5 * stride + 6] =
src[src_offset + 5 * stride + 7] = l5;
src[src_offset + 6 * stride + 0] =
src[src_offset + 6 * stride + 1] =
src[src_offset + 6 * stride + 2] =
src[src_offset + 6 * stride + 3] =
src[src_offset + 6 * stride + 4] =
src[src_offset + 6 * stride + 5] =
src[src_offset + 6 * stride + 6] =
src[src_offset + 6 * stride + 7] = l6;
src[src_offset + 7 * stride + 0] =
src[src_offset + 7 * stride + 1] =
src[src_offset + 7 * stride + 2] =
src[src_offset + 7 * stride + 3] =
src[src_offset + 7 * stride + 4] =
src[src_offset + 7 * stride + 5] =
src[src_offset + 7 * stride + 6] =
src[src_offset + 7 * stride + 7] = l7;
}
public static void pred8x8l_vertical_c(int[] src, int src_offset, int has_topleft, int has_topright, int stride)
{
int y;
int t0 = ((has_topleft!=0 ? src[src_offset -1 -1*stride] : src[src_offset +0 -1*stride])
+ 2*src[src_offset +0 -1*stride] + src[src_offset +1 -1*stride] + 2) >> 2;
int t1 = (src[src_offset +0 -1*stride] + 2*src[src_offset +1 -1*stride] + src[src_offset +2 -1*stride] + 2) >> 2;
int t2 = (src[src_offset +1 -1*stride] + 2*src[src_offset +2 -1*stride] + src[src_offset +3 -1*stride] + 2) >> 2;
int t3 = (src[src_offset +2 -1*stride] + 2*src[src_offset +3 -1*stride] + src[src_offset +4 -1*stride] + 2) >> 2;
int t4 = (src[src_offset +3 -1*stride] + 2*src[src_offset +4 -1*stride] + src[src_offset +5 -1*stride] + 2) >> 2;
int t5 = (src[src_offset +4 -1*stride] + 2*src[src_offset +5 -1*stride] + src[src_offset +6 -1*stride] + 2) >> 2;
int t6 = (src[src_offset +5 -1*stride] + 2*src[src_offset +6 -1*stride] + src[src_offset +7 -1*stride] + 2) >> 2;
int t7 = ((has_topright!=0 ? src[src_offset +8 -1*stride] : src[src_offset +7 -1*stride])
+ 2*src[src_offset +7 -1*stride] + src[src_offset +6 -1*stride] + 2) >> 2;
src[src_offset +0] = t0;
src[src_offset +1] = t1;
src[src_offset +2] = t2;
src[src_offset +3] = t3;
src[src_offset +4] = t4;
src[src_offset +5] = t5;
src[src_offset +6] = t6;
src[src_offset +7] = t7;
for( y = 1; y < 8; y++ ) {
src[src_offset +y*stride +0] = src[src_offset +0];
src[src_offset +y*stride +1] = src[src_offset +1];
src[src_offset +y*stride +2] = src[src_offset +2];
src[src_offset +y*stride +3] = src[src_offset +3];
src[src_offset +y*stride +4] = src[src_offset +4];
src[src_offset +y*stride +5] = src[src_offset +5];
src[src_offset +y*stride +6] = src[src_offset +6];
src[src_offset +y*stride +7] = src[src_offset +7];
} // for
}
public static void pred8x8l_down_left_c(int[] src, int src_offset, int has_topleft, int has_topright, int stride)
{
int t0 = ((has_topleft!=0 ? src[src_offset -1 -1*stride] : src[src_offset +0 -1*stride])
+ 2*src[src_offset +0 -1*stride] + src[src_offset +1 -1*stride] + 2) >> 2;
int t1 = (src[src_offset +0 -1*stride] + 2*src[src_offset +1 -1*stride] + src[src_offset +2 -1*stride] + 2) >> 2;
int t2 = (src[src_offset +1 -1*stride] + 2*src[src_offset +2 -1*stride] + src[src_offset +3 -1*stride] + 2) >> 2;
int t3 = (src[src_offset +2 -1*stride] + 2*src[src_offset +3 -1*stride] + src[src_offset +4 -1*stride] + 2) >> 2;
int t4 = (src[src_offset +3 -1*stride] + 2*src[src_offset +4 -1*stride] + src[src_offset +5 -1*stride] + 2) >> 2;
int t5 = (src[src_offset +4 -1*stride] + 2*src[src_offset +5 -1*stride] + src[src_offset +6 -1*stride] + 2) >> 2;
int t6 = (src[src_offset +5 -1*stride] + 2*src[src_offset +6 -1*stride] + src[src_offset +7 -1*stride] + 2) >> 2;
int t7 = ((has_topright!=0 ? src[src_offset +8 -1*stride] : src[src_offset +7 -1*stride])
+ 2*src[src_offset +7 -1*stride] + src[src_offset +6 -1*stride] + 2) >> 2;
int t8, t9, t10, t11, t12, t13, t14, t15;
if(has_topright!=0) {
t8 = (src[src_offset +7 -1*stride] + 2*src[src_offset +8 -1*stride] + src[src_offset +9 -1*stride] + 2) >> 2;
t9 = (src[src_offset +8 -1*stride] + 2*src[src_offset +9 -1*stride] + src[src_offset +10 -1*stride] + 2) >> 2;
t10 = (src[src_offset +9 -1*stride] + 2*src[src_offset +10 -1*stride] + src[src_offset +11 -1*stride] + 2) >> 2;
t11 = (src[src_offset +10 -1*stride] + 2*src[src_offset +11 -1*stride] + src[src_offset +12 -1*stride] + 2) >> 2;
t12 = (src[src_offset +11 -1*stride] + 2*src[src_offset +12 -1*stride] + src[src_offset +13 -1*stride] + 2) >> 2;
t13 = (src[src_offset +12 -1*stride] + 2*src[src_offset +13 -1*stride] + src[src_offset +14 -1*stride] + 2) >> 2;
t14 = (src[src_offset +13 -1*stride] + 2*src[src_offset +14 -1*stride] + src[src_offset +15 -1*stride] + 2) >> 2;
t15 = (src[src_offset +14 -1*stride] + 3*src[src_offset +15 -1*stride] + 2) >> 2;
} else t8=t9=t10=t11=t12=t13=t14=t15= src[src_offset +7 -1*stride];
src[src_offset +0 +0*stride]= (t0 + 2*t1 + t2 + 2) >> 2;
src[src_offset +0 +1*stride]=
src[src_offset +1 +0*stride]= (t1 + 2*t2 + t3 + 2) >> 2;
src[src_offset +0 +2*stride]=
src[src_offset +1 +1*stride]=
src[src_offset +2 +0*stride]= (t2 + 2*t3 + t4 + 2) >> 2;
src[src_offset +0 +3*stride]=
src[src_offset +1 +2*stride]=
src[src_offset +2 +1*stride]=
src[src_offset +3 +0*stride]= (t3 + 2*t4 + t5 + 2) >> 2;
src[src_offset +0 +4*stride]=
src[src_offset +1 +3*stride]=
src[src_offset +2 +2*stride]=
src[src_offset +3 +1*stride]=
src[src_offset +4 +0*stride]= (t4 + 2*t5 + t6 + 2) >> 2;
src[src_offset +0 +5*stride]=
src[src_offset +1 +4*stride]=
src[src_offset +2 +3*stride]=
src[src_offset +3 +2*stride]=
src[src_offset +4 +1*stride]=
src[src_offset +5 +0*stride]= (t5 + 2*t6 + t7 + 2) >> 2;
src[src_offset +0 +6*stride]=
src[src_offset +1 +5*stride]=
src[src_offset +2 +4*stride]=
src[src_offset +3 +3*stride]=
src[src_offset +4 +2*stride]=
src[src_offset +5 +1*stride]=
src[src_offset +6 +0*stride]= (t6 + 2*t7 + t8 + 2) >> 2;
src[src_offset +0 +7*stride]=
src[src_offset +1 +6*stride]=
src[src_offset +2 +5*stride]=
src[src_offset +3 +4*stride]=
src[src_offset +4 +3*stride]=
src[src_offset +5 +2*stride]=
src[src_offset +6 +1*stride]=
src[src_offset +7 +0*stride]= (t7 + 2*t8 + t9 + 2) >> 2;
src[src_offset +(1) +(7)*stride]=
src[src_offset +(2) +(6)*stride]=
src[src_offset +(3) +(5)*stride]=
src[src_offset +(4) +(4)*stride]=
src[src_offset +(5) +(3)*stride]=
src[src_offset +(6) +(2)*stride]=
src[src_offset +(7) +(1)*stride]= (t8 + 2*t9 + t10 + 2) >> 2;
src[src_offset +(2) +(7)*stride]=
src[src_offset +(3) +(6)*stride]=
src[src_offset +(4) +(5)*stride]=
src[src_offset +(5) +(4)*stride]=
src[src_offset +(6) +(3)*stride]=
src[src_offset +(7) +(2)*stride]= (t9 + 2*t10 + t11 + 2) >> 2;
src[src_offset +(3) +(7)*stride]=
src[src_offset +(4) +(6)*stride]=
src[src_offset +(5) +(5)*stride]=
src[src_offset +(6) +(4)*stride]=
src[src_offset +(7) +(3)*stride]= (t10 + 2*t11 + t12 + 2) >> 2;
src[src_offset +(4) +(7)*stride]=
src[src_offset +(5) +(6)*stride]=
src[src_offset +(6) +(5)*stride]=
src[src_offset +(7) +(4)*stride]= (t11 + 2*t12 + t13 + 2) >> 2;
src[src_offset +(5) +(7)*stride]=
src[src_offset +(6) +(6)*stride]=
src[src_offset +(7) +(5)*stride]= (t12 + 2*t13 + t14 + 2) >> 2;
src[src_offset +(6) +(7)*stride]=
src[src_offset +(7) +(6)*stride]= (t13 + 2*t14 + t15 + 2) >> 2;
src[src_offset +(7) +(7)*stride]= (t14 + 3*t15 + 2) >> 2;
}
public static void pred8x8l_down_right_c(int[] src, int src_offset, int has_topleft, int has_topright, int stride)
{
int t0 = ((has_topleft!=0 ? src[src_offset -1 -1*stride] : src[src_offset +0 -1*stride])
+ 2*src[src_offset +0 -1*stride] + src[src_offset +1 -1*stride] + 2) >> 2;
int t1 = (src[src_offset +0 -1*stride] + 2*src[src_offset +1 -1*stride] + src[src_offset +2 -1*stride] + 2) >> 2;
int t2 = (src[src_offset +1 -1*stride] + 2*src[src_offset +2 -1*stride] + src[src_offset +3 -1*stride] + 2) >> 2;
int t3 = (src[src_offset +2 -1*stride] + 2*src[src_offset +3 -1*stride] + src[src_offset +4 -1*stride] + 2) >> 2;
int t4 = (src[src_offset +3 -1*stride] + 2*src[src_offset +4 -1*stride] + src[src_offset +5 -1*stride] + 2) >> 2;
int t5 = (src[src_offset +4 -1*stride] + 2*src[src_offset +5 -1*stride] + src[src_offset +6 -1*stride] + 2) >> 2;
int t6 = (src[src_offset +5 -1*stride] + 2*src[src_offset +6 -1*stride] + src[src_offset +7 -1*stride] + 2) >> 2;
int t7 = ((has_topright!=0 ? src[src_offset +8 -1*stride] : src[src_offset +7 -1*stride])
+ 2*src[src_offset +7 -1*stride] + src[src_offset +6 -1*stride] + 2) >> 2;
int l0 = ((has_topleft!=0 ? src[src_offset -1 -1*stride] : src[src_offset -1 +0*stride] )
+ 2*src[src_offset -1 +0*stride] + src[src_offset -1 +1*stride] + 2) >> 2;
int l1 = (src[src_offset -1 +0*stride] + 2*src[src_offset -1 +1*stride] + src[src_offset -1 +2*stride] + 2) >> 2;
int l2 = (src[src_offset -1 +1*stride] + 2*src[src_offset -1 +2*stride] + src[src_offset -1 +3*stride] + 2) >> 2;
int l3 = (src[src_offset -1 +2*stride] + 2*src[src_offset -1 +3*stride] + src[src_offset -1 +4*stride] + 2) >> 2;
int l4 = (src[src_offset -1 +3*stride] + 2*src[src_offset -1 +4*stride] + src[src_offset -1 +5*stride] + 2) >> 2;
int l5 = (src[src_offset -1 +4*stride] + 2*src[src_offset -1 +5*stride] + src[src_offset -1 +6*stride] + 2) >> 2;
int l6 = (src[src_offset -1 +5*stride] + 2*src[src_offset -1 +6*stride] + src[src_offset -1 +7*stride] + 2) >> 2;
int l7 = (src[src_offset -1 +6*stride] + 3*src[src_offset -1 +7*stride] + 2) >> 2;
int lt = (src[src_offset -1 +0*stride] + 2*src[src_offset -1 -1*stride] + src[src_offset +0 -1*stride] + 2) >> 2;
src[src_offset +(0) +(7)*stride]= (l7 + 2*l6 + l5 + 2) >> 2;
src[src_offset +(0) +(6)*stride]=
src[src_offset +(1) +(7)*stride]= (l6 + 2*l5 + l4 + 2) >> 2;
src[src_offset +(0) +(5)*stride]=
src[src_offset +(1) +(6)*stride]=
src[src_offset +(2) +(7)*stride]= (l5 + 2*l4 + l3 + 2) >> 2;
src[src_offset +(0) +(4)*stride]=
src[src_offset +(1) +(5)*stride]=
src[src_offset +(2) +(6)*stride]=
src[src_offset +(3) +(7)*stride]= (l4 + 2*l3 + l2 + 2) >> 2;
src[src_offset +(0) +(3)*stride]=
src[src_offset +(1) +(4)*stride]=
src[src_offset +(2) +(5)*stride]=
src[src_offset +(3) +(6)*stride]=
src[src_offset +(4) +(7)*stride]= (l3 + 2*l2 + l1 + 2) >> 2;
src[src_offset +(0) +(2)*stride]=
src[src_offset +(1) +(3)*stride]=
src[src_offset +(2) +(4)*stride]=
src[src_offset +(3) +(5)*stride]=
src[src_offset +(4) +(6)*stride]=
src[src_offset +(5) +(7)*stride]= (l2 + 2*l1 + l0 + 2) >> 2;
src[src_offset +(0) +(1)*stride]=
src[src_offset +(1) +(2)*stride]=
src[src_offset +(2) +(3)*stride]=
src[src_offset +(3) +(4)*stride]=
src[src_offset +(4) +(5)*stride]=
src[src_offset +(5) +(6)*stride]=
src[src_offset +(6) +(7)*stride]= (l1 + 2*l0 + lt + 2) >> 2;
src[src_offset +(0) +(0)*stride]=
src[src_offset +(1) +(1)*stride]=
src[src_offset +(2) +(2)*stride]=
src[src_offset +(3) +(3)*stride]=
src[src_offset +(4) +(4)*stride]=
src[src_offset +(5) +(5)*stride]=
src[src_offset +(6) +(6)*stride]=
src[src_offset +(7) +(7)*stride]= (l0 + 2*lt + t0 + 2) >> 2;
src[src_offset +(1) +(0)*stride]=
src[src_offset +(2) +(1)*stride]=
src[src_offset +(3) +(2)*stride]=
src[src_offset +(4) +(3)*stride]=
src[src_offset +(5) +(4)*stride]=
src[src_offset +(6) +(5)*stride]=
src[src_offset +(7) +(6)*stride]= (lt + 2*t0 + t1 + 2) >> 2;
src[src_offset +(2) +(0)*stride]=
src[src_offset +(3) +(1)*stride]=
src[src_offset +(4) +(2)*stride]=
src[src_offset +(5) +(3)*stride]=
src[src_offset +(6) +(4)*stride]=
src[src_offset +(7) +(5)*stride]= (t0 + 2*t1 + t2 + 2) >> 2;
src[src_offset +(3) +(0)*stride]=
src[src_offset +(4) +(1)*stride]=
src[src_offset +(5) +(2)*stride]=
src[src_offset +(6) +(3)*stride]=
src[src_offset +(7) +(4)*stride]= (t1 + 2*t2 + t3 + 2) >> 2;
src[src_offset +(4) +(0)*stride]=
src[src_offset +(5) +(1)*stride]=
src[src_offset +(6) +(2)*stride]=
src[src_offset +(7) +(3)*stride]= (t2 + 2*t3 + t4 + 2) >> 2;
src[src_offset +(5) +(0)*stride]=
src[src_offset +(6) +(1)*stride]=
src[src_offset +(7) +(2)*stride]= (t3 + 2*t4 + t5 + 2) >> 2;
src[src_offset +(6) +(0)*stride]=
src[src_offset +(7) +(1)*stride]= (t4 + 2*t5 + t6 + 2) >> 2;
src[src_offset +(7) +(0)*stride]= (t5 + 2*t6 + t7 + 2) >> 2;
}
public static void pred8x8l_vertical_right_c(int[] src, int src_offset, int has_topleft, int has_topright, int stride)
{
int t0 = ((has_topleft!=0 ? src[src_offset -1 -1*stride] : src[src_offset +0 -1*stride])
+ 2*src[src_offset +0 -1*stride] + src[src_offset +1 -1*stride] + 2) >> 2;
int t1 = (src[src_offset +0 -1*stride] + 2*src[src_offset +1 -1*stride] + src[src_offset +2 -1*stride] + 2) >> 2;
int t2 = (src[src_offset +1 -1*stride] + 2*src[src_offset +2 -1*stride] + src[src_offset +3 -1*stride] + 2) >> 2;
int t3 = (src[src_offset +2 -1*stride] + 2*src[src_offset +3 -1*stride] + src[src_offset +4 -1*stride] + 2) >> 2;
int t4 = (src[src_offset +3 -1*stride] + 2*src[src_offset +4 -1*stride] + src[src_offset +5 -1*stride] + 2) >> 2;
int t5 = (src[src_offset +4 -1*stride] + 2*src[src_offset +5 -1*stride] + src[src_offset +6 -1*stride] + 2) >> 2;
int t6 = (src[src_offset +5 -1*stride] + 2*src[src_offset +6 -1*stride] + src[src_offset +7 -1*stride] + 2) >> 2;
int t7 = ((has_topright!=0 ? src[src_offset +8 -1*stride] : src[src_offset +7 -1*stride])
+ 2*src[src_offset +7 -1*stride] + src[src_offset +6 -1*stride] + 2) >> 2;
int l0 = ((has_topleft!=0 ? src[src_offset -1 -1*stride] : src[src_offset -1 +0*stride] )
+ 2*src[src_offset -1 +0*stride] + src[src_offset -1 +1*stride] + 2) >> 2;
int l1 = (src[src_offset -1 +0*stride] + 2*src[src_offset -1 +1*stride] + src[src_offset -1 +2*stride] + 2) >> 2;
int l2 = (src[src_offset -1 +1*stride] + 2*src[src_offset -1 +2*stride] + src[src_offset -1 +3*stride] + 2) >> 2;
int l3 = (src[src_offset -1 +2*stride] + 2*src[src_offset -1 +3*stride] + src[src_offset -1 +4*stride] + 2) >> 2;
int l4 = (src[src_offset -1 +3*stride] + 2*src[src_offset -1 +4*stride] + src[src_offset -1 +5*stride] + 2) >> 2;
int l5 = (src[src_offset -1 +4*stride] + 2*src[src_offset -1 +5*stride] + src[src_offset -1 +6*stride] + 2) >> 2;
int l6 = (src[src_offset -1 +5*stride] + 2*src[src_offset -1 +6*stride] + src[src_offset -1 +7*stride] + 2) >> 2;
//int l7 = (src[src_offset -1 +6*stride] + 3*src[src_offset -1 +7*stride] + 2) >> 2;
int lt = (src[src_offset -1 +0*stride] + 2*src[src_offset -1 -1*stride] + src[src_offset +0 -1*stride] + 2) >> 2;
src[src_offset +(0) +(6)*stride]= (l5 + 2*l4 + l3 + 2) >> 2;
src[src_offset +(0) +(7)*stride]= (l6 + 2*l5 + l4 + 2) >> 2;
src[src_offset +(0) +(4)*stride]=
src[src_offset +(1) +(6)*stride]= (l3 + 2*l2 + l1 + 2) >> 2;
src[src_offset +(0) +(5)*stride]=
src[src_offset +(1) +(7)*stride]= (l4 + 2*l3 + l2 + 2) >> 2;
src[src_offset +(0) +(2)*stride]=
src[src_offset +(1) +(4)*stride]=
src[src_offset +(2) +(6)*stride]= (l1 + 2*l0 + lt + 2) >> 2;
src[src_offset +(0) +(3)*stride]=
src[src_offset +(1) +(5)*stride]=
src[src_offset +(2) +(7)*stride]= (l2 + 2*l1 + l0 + 2) >> 2;
src[src_offset +(0) +(1)*stride]=
src[src_offset +(1) +(3)*stride]=
src[src_offset +(2) +(5)*stride]=
src[src_offset +(3) +(7)*stride]= (l0 + 2*lt + t0 + 2) >> 2;
src[src_offset +(0) +(0)*stride]=
src[src_offset +(1) +(2)*stride]=
src[src_offset +(2) +(4)*stride]=
src[src_offset +(3) +(6)*stride]= (lt + t0 + 1) >> 1;
src[src_offset +(1) +(1)*stride]=
src[src_offset +(2) +(3)*stride]=
src[src_offset +(3) +(5)*stride]=
src[src_offset +(4) +(7)*stride]= (lt + 2*t0 + t1 + 2) >> 2;
src[src_offset +(1) +(0)*stride]=
src[src_offset +(2) +(2)*stride]=
src[src_offset +(3) +(4)*stride]=
src[src_offset +(4) +(6)*stride]= (t0 + t1 + 1) >> 1;
src[src_offset +(2) +(1)*stride]=
src[src_offset +(3) +(3)*stride]=
src[src_offset +(4) +(5)*stride]=
src[src_offset +(5) +(7)*stride]= (t0 + 2*t1 + t2 + 2) >> 2;
src[src_offset +(2) +(0)*stride]=
src[src_offset +(3) +(2)*stride]=
src[src_offset +(4) +(4)*stride]=
src[src_offset +(5) +(6)*stride]= (t1 + t2 + 1) >> 1;
src[src_offset +(3) +(1)*stride]=
src[src_offset +(4) +(3)*stride]=
src[src_offset +(5) +(5)*stride]=
src[src_offset +(6) +(7)*stride]= (t1 + 2*t2 + t3 + 2) >> 2;
src[src_offset +(3) +(0)*stride]=
src[src_offset +(4) +(2)*stride]=
src[src_offset +(5) +(4)*stride]=
src[src_offset +(6) +(6)*stride]= (t2 + t3 + 1) >> 1;
src[src_offset +(4) +(1)*stride]=
src[src_offset +(5) +(3)*stride]=
src[src_offset +(6) +(5)*stride]=
src[src_offset +(7) +(7)*stride]= (t2 + 2*t3 + t4 + 2) >> 2;
src[src_offset +(4) +(0)*stride]=
src[src_offset +(5) +(2)*stride]=
src[src_offset +(6) +(4)*stride]=
src[src_offset +(7) +(6)*stride]= (t3 + t4 + 1) >> 1;
src[src_offset +(5) +(1)*stride]=
src[src_offset +(6) +(3)*stride]=
src[src_offset +(7) +(5)*stride]= (t3 + 2*t4 + t5 + 2) >> 2;
src[src_offset +(5) +(0)*stride]=
src[src_offset +(6) +(2)*stride]=
src[src_offset +(7) +(4)*stride]= (t4 + t5 + 1) >> 1;
src[src_offset +(6) +(1)*stride]=
src[src_offset +(7) +(3)*stride]= (t4 + 2*t5 + t6 + 2) >> 2;
src[src_offset +(6) +(0)*stride]=
src[src_offset +(7) +(2)*stride]= (t5 + t6 + 1) >> 1;
src[src_offset +(7) +(1)*stride]= (t5 + 2*t6 + t7 + 2) >> 2;
src[src_offset +(7) +(0)*stride]= (t6 + t7 + 1) >> 1;
}
public static void pred8x8l_horizontal_down_c(int[] src, int src_offset, int has_topleft, int has_topright, int stride)
{
int t0 = ((has_topleft!=0 ? src[src_offset -1 -1*stride] : src[src_offset +0 -1*stride])
+ 2*src[src_offset +0 -1*stride] + src[src_offset +1 -1*stride] + 2) >> 2;
int t1 = (src[src_offset +0 -1*stride] + 2*src[src_offset +1 -1*stride] + src[src_offset +2 -1*stride] + 2) >> 2;
int t2 = (src[src_offset +1 -1*stride] + 2*src[src_offset +2 -1*stride] + src[src_offset +3 -1*stride] + 2) >> 2;
int t3 = (src[src_offset +2 -1*stride] + 2*src[src_offset +3 -1*stride] + src[src_offset +4 -1*stride] + 2) >> 2;
int t4 = (src[src_offset +3 -1*stride] + 2*src[src_offset +4 -1*stride] + src[src_offset +5 -1*stride] + 2) >> 2;
int t5 = (src[src_offset +4 -1*stride] + 2*src[src_offset +5 -1*stride] + src[src_offset +6 -1*stride] + 2) >> 2;
int t6 = (src[src_offset +5 -1*stride] + 2*src[src_offset +6 -1*stride] + src[src_offset +7 -1*stride] + 2) >> 2;
//int t7 = ((has_topright!=0 ? src[src_offset +8 -1*stride] : src[src_offset +7 -1*stride])
// + 2*src[src_offset +7 -1*stride] + src[src_offset +6 -1*stride] + 2) >> 2;
int l0 = ((has_topleft!=0 ? src[src_offset -1 -1*stride] : src[src_offset -1 +0*stride] )
+ 2*src[src_offset -1 +0*stride] + src[src_offset -1 +1*stride] + 2) >> 2;
int l1 = (src[src_offset -1 +0*stride] + 2*src[src_offset -1 +1*stride] + src[src_offset -1 +2*stride] + 2) >> 2;
int l2 = (src[src_offset -1 +1*stride] + 2*src[src_offset -1 +2*stride] + src[src_offset -1 +3*stride] + 2) >> 2;
int l3 = (src[src_offset -1 +2*stride] + 2*src[src_offset -1 +3*stride] + src[src_offset -1 +4*stride] + 2) >> 2;
int l4 = (src[src_offset -1 +3*stride] + 2*src[src_offset -1 +4*stride] + src[src_offset -1 +5*stride] + 2) >> 2;
int l5 = (src[src_offset -1 +4*stride] + 2*src[src_offset -1 +5*stride] + src[src_offset -1 +6*stride] + 2) >> 2;
int l6 = (src[src_offset -1 +5*stride] + 2*src[src_offset -1 +6*stride] + src[src_offset -1 +7*stride] + 2) >> 2;
int l7 = (src[src_offset -1 +6*stride] + 3*src[src_offset -1 +7*stride] + 2) >> 2;
int lt = (src[src_offset -1 +0*stride] + 2*src[src_offset -1 -1*stride] + src[src_offset +0 -1*stride] + 2) >> 2;
src[src_offset +(0) +(7)*stride]= (l6 + l7 + 1) >> 1;
src[src_offset +(1) +(7)*stride]= (l5 + 2*l6 + l7 + 2) >> 2;
src[src_offset +(0) +(6)*stride]=
src[src_offset +(2) +(7)*stride]= (l5 + l6 + 1) >> 1;
src[src_offset +(1) +(6)*stride]=
src[src_offset +(3) +(7)*stride]= (l4 + 2*l5 + l6 + 2) >> 2;
src[src_offset +(0) +(5)*stride]=
src[src_offset +(2) +(6)*stride]=
src[src_offset +(4) +(7)*stride]= (l4 + l5 + 1) >> 1;
src[src_offset +(1) +(5)*stride]=
src[src_offset +(3) +(6)*stride]=
src[src_offset +(5) +(7)*stride]= (l3 + 2*l4 + l5 + 2) >> 2;
src[src_offset +(0) +(4)*stride]=
src[src_offset +(2) +(5)*stride]=
src[src_offset +(4) +(6)*stride]=
src[src_offset +(6) +(7)*stride]= (l3 + l4 + 1) >> 1;
src[src_offset +(1) +(4)*stride]=
src[src_offset +(3) +(5)*stride]=
src[src_offset +(5) +(6)*stride]=
src[src_offset +(7) +(7)*stride]= (l2 + 2*l3 + l4 + 2) >> 2;
src[src_offset +(0) +(3)*stride]=
src[src_offset +(2) +(4)*stride]=
src[src_offset +(4) +(5)*stride]=
src[src_offset +(6) +(6)*stride]= (l2 + l3 + 1) >> 1;
src[src_offset +(1) +(3)*stride]=
src[src_offset +(3) +(4)*stride]=
src[src_offset +(5) +(5)*stride]=
src[src_offset +(7) +(6)*stride]= (l1 + 2*l2 + l3 + 2) >> 2;
src[src_offset +(0) +(2)*stride]=
src[src_offset +(2) +(3)*stride]=
src[src_offset +(4) +(4)*stride]=
src[src_offset +(6) +(5)*stride]= (l1 + l2 + 1) >> 1;
src[src_offset +(1) +(2)*stride]=
src[src_offset +(3) +(3)*stride]=
src[src_offset +(5) +(4)*stride]=
src[src_offset +(7) +(5)*stride]= (l0 + 2*l1 + l2 + 2) >> 2;
src[src_offset +(0) +(1)*stride]=
src[src_offset +(2) +(2)*stride]=
src[src_offset +(4) +(3)*stride]=
src[src_offset +(6) +(4)*stride]= (l0 + l1 + 1) >> 1;
src[src_offset +(1) +(1)*stride]=
src[src_offset +(3) +(2)*stride]=
src[src_offset +(5) +(3)*stride]=
src[src_offset +(7) +(4)*stride]= (lt + 2*l0 + l1 + 2) >> 2;
src[src_offset +(0) +(0)*stride]=
src[src_offset +(2) +(1)*stride]=
src[src_offset +(4) +(2)*stride]=
src[src_offset +(6) +(3)*stride]= (lt + l0 + 1) >> 1;
src[src_offset +(1) +(0)*stride]=
src[src_offset +(3) +(1)*stride]=
src[src_offset +(5) +(2)*stride]=
src[src_offset +(7) +(3)*stride]= (l0 + 2*lt + t0 + 2) >> 2;
src[src_offset +(2) +(0)*stride]=
src[src_offset +(4) +(1)*stride]=
src[src_offset +(6) +(2)*stride]= (t1 + 2*t0 + lt + 2) >> 2;
src[src_offset +(3) +(0)*stride]=
src[src_offset +(5) +(1)*stride]=
src[src_offset +(7) +(2)*stride]= (t2 + 2*t1 + t0 + 2) >> 2;
src[src_offset +(4) +(0)*stride]=
src[src_offset +(6) +(1)*stride]= (t3 + 2*t2 + t1 + 2) >> 2;
src[src_offset +(5) +(0)*stride]=
src[src_offset +(7) +(1)*stride]= (t4 + 2*t3 + t2 + 2) >> 2;
src[src_offset +(6) +(0)*stride]= (t5 + 2*t4 + t3 + 2) >> 2;
src[src_offset +(7) +(0)*stride]= (t6 + 2*t5 + t4 + 2) >> 2;
}
public static void pred8x8l_vertical_left_c(int[] src, int src_offset, int has_topleft, int has_topright, int stride)
{
int t0 = ((has_topleft!=0 ? src[src_offset -1 -1*stride] : src[src_offset +0 -1*stride])
+ 2*src[src_offset +0 -1*stride] + src[src_offset +1 -1*stride] + 2) >> 2;
int t1 = (src[src_offset +0 -1*stride] + 2*src[src_offset +1 -1*stride] + src[src_offset +2 -1*stride] + 2) >> 2;
int t2 = (src[src_offset +1 -1*stride] + 2*src[src_offset +2 -1*stride] + src[src_offset +3 -1*stride] + 2) >> 2;
int t3 = (src[src_offset +2 -1*stride] + 2*src[src_offset +3 -1*stride] + src[src_offset +4 -1*stride] + 2) >> 2;
int t4 = (src[src_offset +3 -1*stride] + 2*src[src_offset +4 -1*stride] + src[src_offset +5 -1*stride] + 2) >> 2;
int t5 = (src[src_offset +4 -1*stride] + 2*src[src_offset +5 -1*stride] + src[src_offset +6 -1*stride] + 2) >> 2;
int t6 = (src[src_offset +5 -1*stride] + 2*src[src_offset +6 -1*stride] + src[src_offset +7 -1*stride] + 2) >> 2;
int t7 = ((has_topright!=0 ? src[src_offset +8 -1*stride] : src[src_offset +7 -1*stride])
+ 2*src[src_offset +7 -1*stride] + src[src_offset +6 -1*stride] + 2) >> 2;
int t8, t9, t10, t11, t12/*, t13, t14, t15*/;
if(has_topright!=0) {
t8 = (src[src_offset +7 -1*stride] + 2*src[src_offset +8 -1*stride] + src[src_offset +9 -1*stride] + 2) >> 2;
t9 = (src[src_offset +8 -1*stride] + 2*src[src_offset +9 -1*stride] + src[src_offset +10 -1*stride] + 2) >> 2;
t10 = (src[src_offset +9 -1*stride] + 2*src[src_offset +10 -1*stride] + src[src_offset +11 -1*stride] + 2) >> 2;
t11 = (src[src_offset +10 -1*stride] + 2*src[src_offset +11 -1*stride] + src[src_offset +12 -1*stride] + 2) >> 2;
t12 = (src[src_offset +11 -1*stride] + 2*src[src_offset +12 -1*stride] + src[src_offset +13 -1*stride] + 2) >> 2;
//t13 = (src[src_offset +12 -1*stride] + 2*src[src_offset +13 -1*stride] + src[src_offset +14 -1*stride] + 2) >> 2;
//t14 = (src[src_offset +13 -1*stride] + 2*src[src_offset +14 -1*stride] + src[src_offset +15 -1*stride] + 2) >> 2;
//t15 = (src[src_offset +14 -1*stride] + 3*src[src_offset +15 -1*stride] + 2) >> 2;
} else t8=t9=t10=t11=t12/*=t13=t14=t15*/= src[src_offset +7 -1*stride];
src[src_offset +(0) +(0)*stride]= (t0 + t1 + 1) >> 1;
src[src_offset +(0) +(1)*stride]= (t0 + 2*t1 + t2 + 2) >> 2;
src[src_offset +(0) +(2)*stride]=
src[src_offset +(1) +(0)*stride]= (t1 + t2 + 1) >> 1;
src[src_offset +(0) +(3)*stride]=
src[src_offset +(1) +(1)*stride]= (t1 + 2*t2 + t3 + 2) >> 2;
src[src_offset +(0) +(4)*stride]=
src[src_offset +(1) +(2)*stride]=
src[src_offset +(2) +(0)*stride]= (t2 + t3 + 1) >> 1;
src[src_offset +(0) +(5)*stride]=
src[src_offset +(1) +(3)*stride]=
src[src_offset +(2) +(1)*stride]= (t2 + 2*t3 + t4 + 2) >> 2;
src[src_offset +(0) +(6)*stride]=
src[src_offset +(1) +(4)*stride]=
src[src_offset +(2) +(2)*stride]=
src[src_offset +(3) +(0)*stride]= (t3 + t4 + 1) >> 1;
src[src_offset +(0) +(7)*stride]=
src[src_offset +(1) +(5)*stride]=
src[src_offset +(2) +(3)*stride]=
src[src_offset +(3) +(1)*stride]= (t3 + 2*t4 + t5 + 2) >> 2;
src[src_offset +(1) +(6)*stride]=
src[src_offset +(2) +(4)*stride]=
src[src_offset +(3) +(2)*stride]=
src[src_offset +(4) +(0)*stride]= (t4 + t5 + 1) >> 1;
src[src_offset +(1) +(7)*stride]=
src[src_offset +(2) +(5)*stride]=
src[src_offset +(3) +(3)*stride]=
src[src_offset +(4) +(1)*stride]= (t4 + 2*t5 + t6 + 2) >> 2;
src[src_offset +(2) +(6)*stride]=
src[src_offset +(3) +(4)*stride]=
src[src_offset +(4) +(2)*stride]=
src[src_offset +(5) +(0)*stride]= (t5 + t6 + 1) >> 1;
src[src_offset +(2) +(7)*stride]=
src[src_offset +(3) +(5)*stride]=
src[src_offset +(4) +(3)*stride]=
src[src_offset +(5) +(1)*stride]= (t5 + 2*t6 + t7 + 2) >> 2;
src[src_offset +(3) +(6)*stride]=
src[src_offset +(4) +(4)*stride]=
src[src_offset +(5) +(2)*stride]=
src[src_offset +(6) +(0)*stride]= (t6 + t7 + 1) >> 1;
src[src_offset +(3) +(7)*stride]=
src[src_offset +(4) +(5)*stride]=
src[src_offset +(5) +(3)*stride]=
src[src_offset +(6) +(1)*stride]= (t6 + 2*t7 + t8 + 2) >> 2;
src[src_offset +(4) +(6)*stride]=
src[src_offset +(5) +(4)*stride]=
src[src_offset +(6) +(2)*stride]=
src[src_offset +(7) +(0)*stride]= (t7 + t8 + 1) >> 1;
src[src_offset +(4) +(7)*stride]=
src[src_offset +(5) +(5)*stride]=
src[src_offset +(6) +(3)*stride]=
src[src_offset +(7) +(1)*stride]= (t7 + 2*t8 + t9 + 2) >> 2;
src[src_offset +(5) +(6)*stride]=
src[src_offset +(6) +(4)*stride]=
src[src_offset +(7) +(2)*stride]= (t8 + t9 + 1) >> 1;
src[src_offset +(5) +(7)*stride]=
src[src_offset +(6) +(5)*stride]=
src[src_offset +(7) +(3)*stride]= (t8 + 2*t9 + t10 + 2) >> 2;
src[src_offset +(6) +(6)*stride]=
src[src_offset +(7) +(4)*stride]= (t9 + t10 + 1) >> 1;
src[src_offset +(6) +(7)*stride]=
src[src_offset +(7) +(5)*stride]= (t9 + 2*t10 + t11 + 2) >> 2;
src[src_offset +(7) +(6)*stride]= (t10 + t11 + 1) >> 1;
src[src_offset +(7) +(7)*stride]= (t10 + 2*t11 + t12 + 2) >> 2;
}
public static void pred8x8l_horizontal_up_c(int[] src, int src_offset, int has_topleft, int has_topright, int stride)
{
int l0 = ((has_topleft!=0 ? src[src_offset -1 -1*stride] : src[src_offset -1 +0*stride] )
+ 2*src[src_offset -1 +0*stride] + src[src_offset -1 +1*stride] + 2) >> 2;
int l1 = (src[src_offset -1 +0*stride] + 2*src[src_offset -1 +1*stride] + src[src_offset -1 +2*stride] + 2) >> 2;
int l2 = (src[src_offset -1 +1*stride] + 2*src[src_offset -1 +2*stride] + src[src_offset -1 +3*stride] + 2) >> 2;
int l3 = (src[src_offset -1 +2*stride] + 2*src[src_offset -1 +3*stride] + src[src_offset -1 +4*stride] + 2) >> 2;
int l4 = (src[src_offset -1 +3*stride] + 2*src[src_offset -1 +4*stride] + src[src_offset -1 +5*stride] + 2) >> 2;
int l5 = (src[src_offset -1 +4*stride] + 2*src[src_offset -1 +5*stride] + src[src_offset -1 +6*stride] + 2) >> 2;
int l6 = (src[src_offset -1 +5*stride] + 2*src[src_offset -1 +6*stride] + src[src_offset -1 +7*stride] + 2) >> 2;
int l7 = (src[src_offset -1 +6*stride] + 3*src[src_offset -1 +7*stride] + 2) >> 2;
src[src_offset +(0) +(0)*stride]= (l0 + l1 + 1) >> 1;
src[src_offset +(1) +(0)*stride]= (l0 + 2*l1 + l2 + 2) >> 2;
src[src_offset +(0) +(1)*stride]=
src[src_offset +(2) +(0)*stride]= (l1 + l2 + 1) >> 1;
src[src_offset +(1) +(1)*stride]=
src[src_offset +(3) +(0)*stride]= (l1 + 2*l2 + l3 + 2) >> 2;
src[src_offset +(0) +(2)*stride]=
src[src_offset +(2) +(1)*stride]=
src[src_offset +(4) +(0)*stride]= (l2 + l3 + 1) >> 1;
src[src_offset +(1) +(2)*stride]=
src[src_offset +(3) +(1)*stride]=
src[src_offset +(5) +(0)*stride]= (l2 + 2*l3 + l4 + 2) >> 2;
src[src_offset +(0) +(3)*stride]=
src[src_offset +(2) +(2)*stride]=
src[src_offset +(4) +(1)*stride]=
src[src_offset +(6) +(0)*stride]= (l3 + l4 + 1) >> 1;
src[src_offset +(1) +(3)*stride]=
src[src_offset +(3) +(2)*stride]=
src[src_offset +(5) +(1)*stride]=
src[src_offset +(7) +(0)*stride]= (l3 + 2*l4 + l5 + 2) >> 2;
src[src_offset +(0) +(4)*stride]=
src[src_offset +(2) +(3)*stride]=
src[src_offset +(4) +(2)*stride]=
src[src_offset +(6) +(1)*stride]= (l4 + l5 + 1) >> 1;
src[src_offset +(1) +(4)*stride]=
src[src_offset +(3) +(3)*stride]=
src[src_offset +(5) +(2)*stride]=
src[src_offset +(7) +(1)*stride]= (l4 + 2*l5 + l6 + 2) >> 2;
src[src_offset +(0) +(5)*stride]=
src[src_offset +(2) +(4)*stride]=
src[src_offset +(4) +(3)*stride]=
src[src_offset +(6) +(2)*stride]= (l5 + l6 + 1) >> 1;
src[src_offset +(1) +(5)*stride]=
src[src_offset +(3) +(4)*stride]=
src[src_offset +(5) +(3)*stride]=
src[src_offset +(7) +(2)*stride]= (l5 + 2*l6 + l7 + 2) >> 2;
src[src_offset +(0) +(6)*stride]=
src[src_offset +(2) +(5)*stride]=
src[src_offset +(4) +(4)*stride]=
src[src_offset +(6) +(3)*stride]= (l6 + l7 + 1) >> 1;
src[src_offset +(1) +(6)*stride]=
src[src_offset +(3) +(5)*stride]=
src[src_offset +(5) +(4)*stride]=
src[src_offset +(7) +(3)*stride]= (l6 + 3*l7 + 2) >> 2;
src[src_offset +(0) +(7)*stride]=
src[src_offset +(1) +(7)*stride]=
src[src_offset +(2) +(6)*stride]=
src[src_offset +(2) +(7)*stride]=
src[src_offset +(3) +(6)*stride]=
src[src_offset +(3) +(7)*stride]=
src[src_offset +(4) +(5)*stride]=
src[src_offset +(4) +(6)*stride]=
src[src_offset +(4) +(7)*stride]=
src[src_offset +(5) +(5)*stride]=
src[src_offset +(5) +(6)*stride]=
src[src_offset +(5) +(7)*stride]=
src[src_offset +(6) +(4)*stride]=
src[src_offset +(6) +(5)*stride]=
src[src_offset +(6) +(6)*stride]=
src[src_offset +(6) +(7)*stride]=
src[src_offset +(7) +(4)*stride]=
src[src_offset +(7) +(5)*stride]=
src[src_offset +(7) +(6)*stride]=
src[src_offset +(7) +(7)*stride]= l7;
}
public static void pred4x4_vertical_add_c(int[] pix, int pix_offset, short[] block, int block_offset, int stride){
int i;
pix_offset -= stride;
for(i=0; i<4; i++){
int v = pix[pix_offset +0];
pix[pix_offset +1*stride]= v += block[block_offset +0];
pix[pix_offset +2*stride]= v += block[block_offset +4];
pix[pix_offset +3*stride]= v += block[block_offset +8];
pix[pix_offset +4*stride]= v + block[block_offset +12];
pix_offset++;
block_offset++;
}
}
public static void pred4x4_horizontal_add_c(int[] pix, int pix_offset, short[] block, int block_offset, int stride){
int i;
for(i=0; i<4; i++){
int v = pix[pix_offset -1];
pix[pix_offset +0]= v += block[block_offset +0];
pix[pix_offset +1]= v += block[block_offset +1];
pix[pix_offset +2]= v += block[block_offset +2];
pix[pix_offset +3]= v + block[block_offset +3];
pix_offset += stride;
block_offset+= 4;
}
}
public static void pred8x8l_vertical_add_c(int[] pix, int pix_offset, short[] block, int block_offset, int stride){
int i;
pix_offset -= stride;
for(i=0; i<8; i++){
int v = pix[pix_offset +0];
pix[pix_offset +1*stride]= v += block[block_offset +0];
pix[pix_offset +2*stride]= v += block[block_offset +8];
pix[pix_offset +3*stride]= v += block[block_offset +16];
pix[pix_offset +4*stride]= v += block[block_offset +24];
pix[pix_offset +5*stride]= v += block[block_offset +32];
pix[pix_offset +6*stride]= v += block[block_offset +40];
pix[pix_offset +7*stride]= v += block[block_offset +48];
pix[pix_offset +8*stride]= v + block[block_offset +56];
pix_offset++;
block_offset++;
}
}
public static void pred8x8l_horizontal_add_c(int[] pix, int pix_offset, short[] block, int block_offset, int stride){
int i;
for(i=0; i<8; i++){
int v = pix[pix_offset -1];
pix[pix_offset +0]= v += block[block_offset +0];
pix[pix_offset +1]= v += block[block_offset +1];
pix[pix_offset +2]= v += block[block_offset +2];
pix[pix_offset +3]= v += block[block_offset +3];
pix[pix_offset +4]= v += block[block_offset +4];
pix[pix_offset +5]= v += block[block_offset +5];
pix[pix_offset +6]= v += block[block_offset +6];
pix[pix_offset +7]= v + block[block_offset +7];
pix_offset += stride;
block_offset+= 8;
}
}
public static void pred16x16_vertical_add_c(int[] pix, int pix_offset, int[] block_offset, int block_offset_offset, short[] block, int _block_offset, int stride){
int i;
for(i=0; i<16; i++)
pred4x4_vertical_add_c(pix, pix_offset + block_offset[block_offset_offset + i], block, _block_offset + i*16, stride);
}
public static void pred16x16_horizontal_add_c(int[] pix, int pix_offset, int[] block_offset, int block_offset_offset, short[] block, int _block_offset, int stride){
int i;
for(i=0; i<16; i++)
pred4x4_horizontal_add_c(pix, pix_offset + block_offset[block_offset_offset + i], block, _block_offset + i*16, stride);
}
public static void pred8x8_vertical_add_c(int[] pix, int pix_offset, int[] block_offset, int block_offset_offset, short[] block, int _block_offset, int stride){
int i;
for(i=0; i<4; i++)
pred4x4_vertical_add_c(pix, pix_offset + block_offset[block_offset_offset + i], block, _block_offset + i*16, stride);
}
public static void pred8x8_horizontal_add_c(int[] pix, int pix_offset, int[] block_offset, int block_offset_offset, short[] block, int _block_offset, int stride){
int i;
for(i=0; i<4; i++)
pred4x4_horizontal_add_c(pix, pix_offset + block_offset[block_offset_offset + i], block, _block_offset + i*16, stride);
}
}