X-Git-Url: https://git.piment-noir.org/?p=deb_x265.git;a=blobdiff_plain;f=source%2Fcommon%2Fprimitives.h;h=0c93f98249f9e821671ecf2345094237e0671f9d;hp=8300c2134dff07c7408686f0a6107ec091fb62b1;hb=b53f7c52d8280ab63876efd6eb292c21430ac607;hpb=5c9b45285dd64723ad1dac380b98a7b1f3095674 diff --git a/source/common/primitives.h b/source/common/primitives.h index 8300c21..0c93f98 100644 --- a/source/common/primitives.h +++ b/source/common/primitives.h @@ -132,162 +132,147 @@ inline int partitionFromLog2Size(int log2Size) return log2Size - 2; } -typedef int (*pixelcmp_t)(pixel *fenc, intptr_t fencstride, pixel *fref, intptr_t frefstride); // fenc is aligned -typedef int (*pixelcmp_ss_t)(int16_t *fenc, intptr_t fencstride, int16_t *fref, intptr_t frefstride); -typedef int (*pixelcmp_sp_t)(int16_t *fenc, intptr_t fencstride, pixel *fref, intptr_t frefstride); -typedef int (*pixel_ssd_s_t)(int16_t *fenc, intptr_t fencstride); -typedef void (*pixelcmp_x4_t)(pixel *fenc, pixel *fref0, pixel *fref1, pixel *fref2, pixel *fref3, intptr_t frefstride, int32_t *res); -typedef void (*pixelcmp_x3_t)(pixel *fenc, pixel *fref0, pixel *fref1, pixel *fref2, intptr_t frefstride, int32_t *res); -typedef void (*blockcpy_sp_t)(int bx, int by, int16_t *dst, intptr_t dstride, pixel *src, intptr_t sstride); // dst is aligned -typedef void (*blockcpy_sc_t)(int bx, int by, int16_t *dst, intptr_t dstride, uint8_t *src, intptr_t sstride); // dst is aligned -typedef void (*pixelsub_ps_t)(int bx, int by, int16_t *dst, intptr_t dstride, pixel *src0, pixel *src1, intptr_t sstride0, intptr_t sstride1); -typedef void (*pixelavg_pp_t)(pixel *dst, intptr_t dstride, pixel *src0, intptr_t sstride0, pixel *src1, intptr_t sstride1, int weight); -typedef void (*blockfill_s_t)(int16_t *dst, intptr_t dstride, int16_t val); - -typedef void (*intra_pred_t)(pixel* dst, intptr_t dstStride, pixel *refLeft, pixel *refAbove, int dirMode, int bFilter); -typedef void (*intra_allangs_t)(pixel *dst, pixel *above0, pixel *left0, pixel *above1, pixel *left1, int bLuma); - -typedef void (*cvt16to32_shl_t)(int32_t *dst, int16_t *src, intptr_t, int, int); -typedef void (*cvt16to32_shr_t)(int32_t *dst, int16_t *src, intptr_t, int, int); -typedef void (*cvt32to16_shr_t)(int16_t *dst, int32_t *src, intptr_t, int, int); -typedef void (*cvt32to16_shl_t)(int16_t *dst, int32_t *src, intptr_t, int); -typedef uint32_t (*copy_cnt_t)(int16_t* coeff, int16_t* residual, intptr_t stride); -typedef void (*copy_shr_t)(int16_t *dst, int16_t *src, intptr_t stride, int shift, int size); -typedef void (*copy_shl_t)(int16_t *dst, int16_t *src, intptr_t stride, int shift); - -typedef void (*dct_t)(int16_t *src, int32_t *dst, intptr_t stride); -typedef void (*idct_t)(int32_t *src, int16_t *dst, intptr_t stride); -typedef void (*denoiseDct_t)(int32_t* dctCoef, uint32_t* resSum, uint16_t* offset, int numCoeff); - -typedef void (*calcresidual_t)(pixel *fenc, pixel *pred, int16_t *residual, intptr_t stride); -typedef void (*calcrecon_t)(pixel* pred, int16_t* residual, int16_t* reconqt, pixel *reconipred, int stride, int strideqt, int strideipred); -typedef void (*transpose_t)(pixel* dst, pixel* src, intptr_t stride); -typedef uint32_t (*quant_t)(int32_t *coef, int32_t *quantCoeff, int32_t *deltaU, int16_t *qCoef, int qBits, int add, int numCoeff); -typedef uint32_t (*nquant_t)(int32_t *coef, int32_t *quantCoeff, int16_t *qCoef, int qBits, int add, int numCoeff); -typedef void (*dequant_scaling_t)(const int16_t* src, const int32_t *dequantCoef, int32_t* dst, int num, int mcqp_miper, int shift); -typedef void (*dequant_normal_t)(const int16_t* quantCoef, int32_t* coef, int num, int scale, int shift); -typedef int (*count_nonzero_t)(const int16_t *quantCoeff, int numCoeff); - -typedef void (*weightp_pp_t)(pixel *src, pixel *dst, intptr_t stride, int width, int height, int w0, int round, int shift, int offset); -typedef void (*weightp_sp_t)(int16_t *src, pixel *dst, intptr_t srcStride, intptr_t dstStride, int width, int height, int w0, int round, int shift, int offset); -typedef void (*scale_t)(pixel *dst, pixel *src, intptr_t stride); -typedef void (*downscale_t)(pixel *src0, pixel *dstf, pixel *dsth, pixel *dstv, pixel *dstc, +typedef int (*pixelcmp_t)(const pixel* fenc, intptr_t fencstride, const pixel* fref, intptr_t frefstride); // fenc is aligned +typedef int (*pixelcmp_ss_t)(const int16_t* fenc, intptr_t fencstride, const int16_t* fref, intptr_t frefstride); +typedef int (*pixelcmp_sp_t)(const int16_t* fenc, intptr_t fencstride, const pixel* fref, intptr_t frefstride); +typedef int (*pixel_ssd_s_t)(const int16_t* fenc, intptr_t fencstride); +typedef void (*pixelcmp_x4_t)(const pixel* fenc, const pixel* fref0, const pixel* fref1, const pixel* fref2, const pixel* fref3, intptr_t frefstride, int32_t* res); +typedef void (*pixelcmp_x3_t)(const pixel* fenc, const pixel* fref0, const pixel* fref1, const pixel* fref2, intptr_t frefstride, int32_t* res); +typedef void (*pixelavg_pp_t)(pixel* dst, intptr_t dstride, const pixel* src0, intptr_t sstride0, const pixel* src1, intptr_t sstride1, int weight); +typedef void (*blockfill_s_t)(int16_t* dst, intptr_t dstride, int16_t val); + +typedef void (*intra_pred_t)(pixel* dst, intptr_t dstStride, pixel* refLeft, pixel* refAbove, int dirMode, int bFilter); +typedef void (*intra_allangs_t)(pixel* dst, pixel* above0, pixel* left0, pixel* above1, pixel* left1, int bLuma); + +typedef void (*cpy2Dto1D_shl_t)(int16_t* dst, const int16_t* src, intptr_t srcStride, int shift); +typedef void (*cpy2Dto1D_shr_t)(int16_t* dst, const int16_t* src, intptr_t srcStride, int shift); +typedef void (*cpy1Dto2D_shl_t)(int16_t* dst, const int16_t* src, intptr_t dstStride, int shift); +typedef void (*cpy1Dto2D_shr_t)(int16_t* dst, const int16_t* src, intptr_t dstStride, int shift); +typedef uint32_t (*copy_cnt_t)(int16_t* coeff, const int16_t* residual, intptr_t resiStride); + +typedef void (*dct_t)(const int16_t* src, int16_t* dst, intptr_t srcStride); +typedef void (*idct_t)(const int16_t* src, int16_t* dst, intptr_t dstStride); +typedef void (*denoiseDct_t)(int16_t* dctCoef, uint32_t* resSum, const uint16_t* offset, int numCoeff); + +typedef void (*calcresidual_t)(const pixel* fenc, const pixel* pred, int16_t* residual, intptr_t stride); +typedef void (*transpose_t)(pixel* dst, const pixel* src, intptr_t stride); +typedef uint32_t (*quant_t)(const int16_t* coef, const int32_t* quantCoeff, int32_t* deltaU, int16_t* qCoef, int qBits, int add, int numCoeff); +typedef uint32_t (*nquant_t)(const int16_t* coef, const int32_t* quantCoeff, int16_t* qCoef, int qBits, int add, int numCoeff); +typedef void (*dequant_scaling_t)(const int16_t* src, const int32_t* dequantCoef, int16_t* dst, int num, int mcqp_miper, int shift); +typedef void (*dequant_normal_t)(const int16_t* quantCoef, int16_t* coef, int num, int scale, int shift); +typedef int (*count_nonzero_t)(const int16_t* quantCoeff, int numCoeff); + +typedef void (*weightp_pp_t)(const pixel* src, pixel* dst, intptr_t stride, int width, int height, int w0, int round, int shift, int offset); +typedef void (*weightp_sp_t)(const int16_t* src, pixel* dst, intptr_t srcStride, intptr_t dstStride, int width, int height, int w0, int round, int shift, int offset); +typedef void (*scale_t)(pixel* dst, const pixel* src, intptr_t stride); +typedef void (*downscale_t)(const pixel* src0, pixel* dstf, pixel* dsth, pixel* dstv, pixel* dstc, intptr_t src_stride, intptr_t dst_stride, int width, int height); typedef void (*extendCURowBorder_t)(pixel* txt, intptr_t stride, int width, int height, int marginX); -typedef void (*ssim_4x4x2_core_t)(const pixel *pix1, intptr_t stride1, const pixel *pix2, intptr_t stride2, int sums[2][4]); +typedef void (*ssim_4x4x2_core_t)(const pixel* pix1, intptr_t stride1, const pixel* pix2, intptr_t stride2, int sums[2][4]); typedef float (*ssim_end4_t)(int sum0[5][4], int sum1[5][4], int width); -typedef uint64_t (*var_t)(pixel *pix, intptr_t stride); -typedef void (*plane_copy_deinterleave_t)(pixel *dstu, intptr_t dstuStride, pixel *dstv, intptr_t dstvStride, pixel *src, intptr_t srcStride, int w, int h); +typedef uint64_t (*var_t)(const pixel* pix, intptr_t stride); +typedef void (*plane_copy_deinterleave_t)(pixel* dstu, intptr_t dstuStride, pixel* dstv, intptr_t dstvStride, const pixel* src, intptr_t srcStride, int w, int h); -typedef void (*filter_pp_t) (pixel *src, intptr_t srcStride, pixel *dst, intptr_t dstStride, int coeffIdx); -typedef void (*filter_hps_t) (pixel *src, intptr_t srcStride, int16_t *dst, intptr_t dstStride, int coeffIdx, int isRowExt); -typedef void (*filter_ps_t) (pixel *src, intptr_t srcStride, int16_t *dst, intptr_t dstStride, int coeffIdx); -typedef void (*filter_sp_t) (int16_t *src, intptr_t srcStride, pixel *dst, intptr_t dstStride, int coeffIdx); -typedef void (*filter_ss_t) (int16_t *src, intptr_t srcStride, int16_t *dst, intptr_t dstStride, int coeffIdx); -typedef void (*filter_hv_pp_t) (pixel *src, intptr_t srcStride, pixel *dst, intptr_t dstStride, int idxX, int idxY); -typedef void (*filter_p2s_t)(pixel *src, intptr_t srcStride, int16_t *dst, int width, int height); +typedef void (*filter_pp_t) (const pixel* src, intptr_t srcStride, pixel* dst, intptr_t dstStride, int coeffIdx); +typedef void (*filter_hps_t) (const pixel* src, intptr_t srcStride, int16_t* dst, intptr_t dstStride, int coeffIdx, int isRowExt); +typedef void (*filter_ps_t) (const pixel* src, intptr_t srcStride, int16_t* dst, intptr_t dstStride, int coeffIdx); +typedef void (*filter_sp_t) (const int16_t* src, intptr_t srcStride, pixel* dst, intptr_t dstStride, int coeffIdx); +typedef void (*filter_ss_t) (const int16_t* src, intptr_t srcStride, int16_t* dst, intptr_t dstStride, int coeffIdx); +typedef void (*filter_hv_pp_t) (const pixel* src, intptr_t srcStride, pixel* dst, intptr_t dstStride, int idxX, int idxY); +typedef void (*filter_p2s_t)(const pixel* src, intptr_t srcStride, int16_t* dst, int width, int height); -typedef void (*copy_pp_t)(pixel *dst, intptr_t dstride, pixel *src, intptr_t sstride); // dst is aligned -typedef void (*copy_sp_t)(pixel *dst, intptr_t dstStride, int16_t *src, intptr_t srcStride); -typedef void (*copy_ps_t)(int16_t *dst, intptr_t dstStride, pixel *src, intptr_t srcStride); -typedef void (*copy_ss_t)(int16_t *dst, intptr_t dstStride, int16_t *src, intptr_t srcStride); +typedef void (*copy_pp_t)(pixel* dst, intptr_t dstStride, const pixel* src, intptr_t srcStride); // dst is aligned +typedef void (*copy_sp_t)(pixel* dst, intptr_t dstStride, const int16_t* src, intptr_t srcStride); +typedef void (*copy_ps_t)(int16_t* dst, intptr_t dstStride, const pixel* src, intptr_t srcStride); +typedef void (*copy_ss_t)(int16_t* dst, intptr_t dstStride, const int16_t* src, intptr_t srcStride); -typedef void (*pixel_sub_ps_t)(int16_t *dst, intptr_t dstride, pixel *src0, pixel *src1, intptr_t sstride0, intptr_t sstride1); -typedef void (*pixel_add_ps_t)(pixel *a, intptr_t dstride, pixel *b0, int16_t *b1, intptr_t sstride0, intptr_t sstride1); -typedef void (*addAvg_t)(int16_t* src0, int16_t* src1, pixel* dst, intptr_t src0Stride, intptr_t src1Stride, intptr_t dstStride); +typedef void (*pixel_sub_ps_t)(int16_t* dst, intptr_t dstride, const pixel* src0, const pixel* src1, intptr_t sstride0, intptr_t sstride1); +typedef void (*pixel_add_ps_t)(pixel* a, intptr_t dstride, const pixel* b0, const int16_t* b1, intptr_t sstride0, intptr_t sstride1); +typedef void (*addAvg_t)(const int16_t* src0, const int16_t* src1, pixel* dst, intptr_t src0Stride, intptr_t src1Stride, intptr_t dstStride); -typedef void (*saoCuOrgE0_t)(pixel * rec, int8_t * offsetEo, int width, int8_t signLeft); -typedef void (*planecopy_cp_t) (uint8_t *src, intptr_t srcStride, pixel *dst, intptr_t dstStride, int width, int height, int shift); -typedef void (*planecopy_sp_t) (uint16_t *src, intptr_t srcStride, pixel *dst, intptr_t dstStride, int width, int height, int shift, uint16_t mask); +typedef void (*saoCuOrgE0_t)(pixel* rec, int8_t* offsetEo, int width, int8_t signLeft); +typedef void (*planecopy_cp_t) (const uint8_t* src, intptr_t srcStride, pixel* dst, intptr_t dstStride, int width, int height, int shift); +typedef void (*planecopy_sp_t) (const uint16_t* src, intptr_t srcStride, pixel* dst, intptr_t dstStride, int width, int height, int shift, uint16_t mask); -typedef void (*cutree_propagate_cost) (int *dst, uint16_t *propagateIn, int32_t *intraCosts, uint16_t *interCosts, int32_t *invQscales, double *fpsFactor, int len); +typedef void (*cutree_propagate_cost) (int* dst, const uint16_t* propagateIn, const int32_t* intraCosts, const uint16_t* interCosts, const int32_t* invQscales, const double* fpsFactor, int len); /* Define a structure containing function pointers to optimized encoder * primitives. Each pointer can reference either an assembly routine, * a vectorized primitive, or a C function. */ struct EncoderPrimitives { - pixelcmp_t sad[NUM_LUMA_PARTITIONS]; // Sum of Differences for each size - pixelcmp_x3_t sad_x3[NUM_LUMA_PARTITIONS]; // Sum of Differences 3x for each size - pixelcmp_x4_t sad_x4[NUM_LUMA_PARTITIONS]; // Sum of Differences 4x for each size - pixelcmp_t sse_pp[NUM_LUMA_PARTITIONS]; // Sum of Square Error (pixel, pixel) fenc alignment not assumed - pixelcmp_ss_t sse_ss[NUM_LUMA_PARTITIONS]; // Sum of Square Error (short, short) fenc alignment not assumed - pixelcmp_sp_t sse_sp[NUM_LUMA_PARTITIONS]; // Sum of Square Error (short, pixel) fenc alignment not assumed - pixel_ssd_s_t ssd_s[NUM_SQUARE_BLOCKS - 1]; // Sum of Square Error (short) fenc alignment not assumed - pixelcmp_t satd[NUM_LUMA_PARTITIONS]; // Sum of Transformed differences (HADAMARD) - pixelcmp_t sa8d_inter[NUM_LUMA_PARTITIONS]; // sa8d primitives for motion search partitions - pixelcmp_t sa8d[NUM_SQUARE_BLOCKS]; // sa8d primitives for square intra blocks - pixelcmp_t psy_cost_pp[NUM_SQUARE_BLOCKS]; // difference in AC energy between two blocks - pixelcmp_ss_t psy_cost_ss[NUM_SQUARE_BLOCKS]; - - blockfill_s_t blockfill_s[NUM_SQUARE_BLOCKS]; // block fill with value - cvt16to32_shl_t cvt16to32_shl; - cvt16to32_shr_t cvt16to32_shr[NUM_SQUARE_BLOCKS - 1]; - cvt32to16_shr_t cvt32to16_shr; - cvt32to16_shl_t cvt32to16_shl[NUM_SQUARE_BLOCKS - 1]; - copy_cnt_t copy_cnt[NUM_SQUARE_BLOCKS - 1]; - copy_shr_t copy_shr; - copy_shl_t copy_shl[NUM_SQUARE_BLOCKS - 1]; - - copy_pp_t luma_copy_pp[NUM_LUMA_PARTITIONS]; - copy_sp_t luma_copy_sp[NUM_LUMA_PARTITIONS]; - copy_ps_t luma_copy_ps[NUM_LUMA_PARTITIONS]; - copy_ss_t luma_copy_ss[NUM_LUMA_PARTITIONS]; - pixel_sub_ps_t luma_sub_ps[NUM_SQUARE_BLOCKS]; - pixel_add_ps_t luma_add_ps[NUM_SQUARE_BLOCKS]; - copy_pp_t square_copy_pp[NUM_SQUARE_BLOCKS]; - copy_sp_t square_copy_sp[NUM_SQUARE_BLOCKS]; - copy_ps_t square_copy_ps[NUM_SQUARE_BLOCKS]; - copy_ss_t square_copy_ss[NUM_SQUARE_BLOCKS]; - - filter_pp_t luma_hpp[NUM_LUMA_PARTITIONS]; - filter_hps_t luma_hps[NUM_LUMA_PARTITIONS]; - filter_pp_t luma_vpp[NUM_LUMA_PARTITIONS]; - filter_ps_t luma_vps[NUM_LUMA_PARTITIONS]; - filter_sp_t luma_vsp[NUM_LUMA_PARTITIONS]; - filter_ss_t luma_vss[NUM_LUMA_PARTITIONS]; - filter_hv_pp_t luma_hvpp[NUM_LUMA_PARTITIONS]; - filter_p2s_t luma_p2s; - filter_p2s_t chroma_p2s[X265_CSP_COUNT]; - - weightp_sp_t weight_sp; - weightp_pp_t weight_pp; - pixelavg_pp_t pixelavg_pp[NUM_LUMA_PARTITIONS]; - addAvg_t luma_addAvg[NUM_LUMA_PARTITIONS]; - - intra_pred_t intra_pred[NUM_INTRA_MODE][NUM_TR_SIZE]; - intra_allangs_t intra_pred_allangs[NUM_TR_SIZE]; - scale_t scale1D_128to64; - scale_t scale2D_64to32; - - dct_t dct[NUM_DCTS]; - idct_t idct[NUM_IDCTS]; - quant_t quant; - nquant_t nquant; - dequant_scaling_t dequant_scaling; - dequant_normal_t dequant_normal; - count_nonzero_t count_nonzero; - denoiseDct_t denoiseDct; - - calcresidual_t calcresidual[NUM_SQUARE_BLOCKS]; - transpose_t transpose[NUM_SQUARE_BLOCKS]; - - var_t var[NUM_SQUARE_BLOCKS]; - ssim_4x4x2_core_t ssim_4x4x2_core; - ssim_end4_t ssim_end_4; - - downscale_t frame_init_lowres_core; - plane_copy_deinterleave_t plane_copy_deinterleave_c; - extendCURowBorder_t extendRowBorder; - // sao primitives - saoCuOrgE0_t saoCuOrgE0; - planecopy_cp_t planecopy_cp; - planecopy_sp_t planecopy_sp; - - cutree_propagate_cost propagateCost; + pixelcmp_t sad[NUM_LUMA_PARTITIONS]; // Sum of Differences for each size + pixelcmp_x3_t sad_x3[NUM_LUMA_PARTITIONS]; // Sum of Differences 3x for each size + pixelcmp_x4_t sad_x4[NUM_LUMA_PARTITIONS]; // Sum of Differences 4x for each size + pixelcmp_t sse_pp[NUM_LUMA_PARTITIONS]; // Sum of Square Error (pixel, pixel) fenc alignment not assumed + pixelcmp_ss_t sse_ss[NUM_LUMA_PARTITIONS]; // Sum of Square Error (short, short) fenc alignment not assumed + pixelcmp_sp_t sse_sp[NUM_LUMA_PARTITIONS]; // Sum of Square Error (short, pixel) fenc alignment not assumed + pixel_ssd_s_t ssd_s[NUM_SQUARE_BLOCKS - 1]; // Sum of Square Error (short) fenc alignment not assumed + pixelcmp_t satd[NUM_LUMA_PARTITIONS]; // Sum of Transformed differences (HADAMARD) + pixelcmp_t sa8d_inter[NUM_LUMA_PARTITIONS]; // sa8d primitives for motion search partitions + pixelcmp_t sa8d[NUM_SQUARE_BLOCKS]; // sa8d primitives for square intra blocks + pixelcmp_t psy_cost_pp[NUM_SQUARE_BLOCKS]; // difference in AC energy between two blocks + pixelcmp_ss_t psy_cost_ss[NUM_SQUARE_BLOCKS]; + + dct_t dct[NUM_DCTS]; + idct_t idct[NUM_IDCTS]; + quant_t quant; + nquant_t nquant; + dequant_scaling_t dequant_scaling; + dequant_normal_t dequant_normal; + count_nonzero_t count_nonzero; + denoiseDct_t denoiseDct; + calcresidual_t calcresidual[NUM_SQUARE_BLOCKS]; + blockfill_s_t blockfill_s[NUM_SQUARE_BLOCKS]; // block fill with value + cpy2Dto1D_shl_t cpy2Dto1D_shl[NUM_SQUARE_BLOCKS - 1]; + cpy2Dto1D_shr_t cpy2Dto1D_shr[NUM_SQUARE_BLOCKS - 1]; + cpy1Dto2D_shl_t cpy1Dto2D_shl[NUM_SQUARE_BLOCKS - 1]; + cpy1Dto2D_shr_t cpy1Dto2D_shr[NUM_SQUARE_BLOCKS - 1]; + copy_cnt_t copy_cnt[NUM_SQUARE_BLOCKS - 1]; + + intra_pred_t intra_pred[NUM_INTRA_MODE][NUM_TR_SIZE]; + intra_allangs_t intra_pred_allangs[NUM_TR_SIZE]; + transpose_t transpose[NUM_SQUARE_BLOCKS]; + scale_t scale1D_128to64; + scale_t scale2D_64to32; + + var_t var[NUM_SQUARE_BLOCKS]; + ssim_4x4x2_core_t ssim_4x4x2_core; + ssim_end4_t ssim_end_4; + + saoCuOrgE0_t saoCuOrgE0; + + downscale_t frameInitLowres; + cutree_propagate_cost propagateCost; + + extendCURowBorder_t extendRowBorder; + planecopy_cp_t planecopy_cp; + planecopy_sp_t planecopy_sp; + + weightp_sp_t weight_sp; + weightp_pp_t weight_pp; + pixelavg_pp_t pixelavg_pp[NUM_LUMA_PARTITIONS]; + addAvg_t luma_addAvg[NUM_LUMA_PARTITIONS]; + + filter_pp_t luma_hpp[NUM_LUMA_PARTITIONS]; + filter_hps_t luma_hps[NUM_LUMA_PARTITIONS]; + filter_pp_t luma_vpp[NUM_LUMA_PARTITIONS]; + filter_ps_t luma_vps[NUM_LUMA_PARTITIONS]; + filter_sp_t luma_vsp[NUM_LUMA_PARTITIONS]; + filter_ss_t luma_vss[NUM_LUMA_PARTITIONS]; + filter_hv_pp_t luma_hvpp[NUM_LUMA_PARTITIONS]; + filter_p2s_t luma_p2s; + + copy_pp_t luma_copy_pp[NUM_LUMA_PARTITIONS]; + copy_sp_t luma_copy_sp[NUM_LUMA_PARTITIONS]; + copy_ps_t luma_copy_ps[NUM_LUMA_PARTITIONS]; + copy_ss_t luma_copy_ss[NUM_LUMA_PARTITIONS]; + pixel_sub_ps_t luma_sub_ps[NUM_SQUARE_BLOCKS]; + pixel_add_ps_t luma_add_ps[NUM_SQUARE_BLOCKS]; struct { + pixelcmp_t satd[NUM_LUMA_PARTITIONS]; filter_pp_t filter_vpp[NUM_LUMA_PARTITIONS]; filter_ps_t filter_vps[NUM_LUMA_PARTITIONS]; filter_sp_t filter_vsp[NUM_LUMA_PARTITIONS]; @@ -301,7 +286,8 @@ struct EncoderPrimitives copy_ss_t copy_ss[NUM_LUMA_PARTITIONS]; pixel_sub_ps_t sub_ps[NUM_SQUARE_BLOCKS]; pixel_add_ps_t add_ps[NUM_SQUARE_BLOCKS]; - } chroma[4]; // X265_CSP_COUNT - do not want to include x265.h here + filter_p2s_t p2s; + } chroma[X265_CSP_COUNT]; }; void extendPicBorder(pixel* recon, intptr_t stride, int width, int height, int marginX, int marginY);