}
}
+void ff_init_scantable_permutation(uint8_t *idct_permutation,
+ int idct_permutation_type)
+{
+ int i;
+
+ switch(idct_permutation_type){
+ case FF_NO_IDCT_PERM:
+ for(i=0; i<64; i++)
+ idct_permutation[i]= i;
+ break;
+ case FF_LIBMPEG2_IDCT_PERM:
+ for(i=0; i<64; i++)
+ idct_permutation[i]= (i & 0x38) | ((i & 6) >> 1) | ((i & 1) << 2);
+ break;
+ case FF_SIMPLE_IDCT_PERM:
+ for(i=0; i<64; i++)
+ idct_permutation[i]= simple_mmx_permutation[i];
+ break;
+ case FF_TRANSPOSE_IDCT_PERM:
+ for(i=0; i<64; i++)
+ idct_permutation[i]= ((i&7)<<3) | (i>>3);
+ break;
+ case FF_PARTTRANS_IDCT_PERM:
+ for(i=0; i<64; i++)
+ idct_permutation[i]= (i&0x24) | ((i&3)<<3) | ((i>>3)&3);
+ break;
+ case FF_SSE2_IDCT_PERM:
+ for(i=0; i<64; i++)
+ idct_permutation[i]= (i&0x38) | idct_sse2_row_perm[i&7];
+ break;
+ default:
+ av_log(NULL, AV_LOG_ERROR, "Internal error, IDCT permutation not set\n");
+ }
+}
+
static int pix_sum_c(uint8_t * pix, int line_size)
{
int s, i, j;
}
}
-static void put_pixels_nonclamped_c(const DCTELEM *block, uint8_t *restrict pixels,
- int line_size)
-{
- int i;
-
- /* read the pixels */
- for(i=0;i<8;i++) {
- pixels[0] = block[0];
- pixels[1] = block[1];
- pixels[2] = block[2];
- pixels[3] = block[3];
- pixels[4] = block[4];
- pixels[5] = block[5];
- pixels[6] = block[6];
- pixels[7] = block[7];
-
- pixels += line_size;
- block += 8;
- }
-}
-
void ff_add_pixels_clamped_c(const DCTELEM *block, uint8_t *restrict pixels,
int line_size)
{
}
}
-static void scale_block_c(const uint8_t src[64]/*align 8*/, uint8_t *dst/*align 8*/, int linesize)
-{
- int i, j;
- uint16_t *dst1 = (uint16_t *) dst;
- uint16_t *dst2 = (uint16_t *)(dst + linesize);
-
- for (j = 0; j < 8; j++) {
- for (i = 0; i < 8; i++) {
- dst1[i] = dst2[i] = src[i] * 0x0101;
- }
- src += 8;
- dst1 += linesize;
- dst2 += linesize;
- }
-}
-
#define avg2(a,b) ((a+b+1)>>1)
#define avg4(a,b,c,d) ((a+b+c+d+2)>>2)
}
#if CONFIG_RV40_DECODER
-static void put_rv40_qpel16_mc33_c(uint8_t *dst, uint8_t *src, int stride){
+void ff_put_rv40_qpel16_mc33_c(uint8_t *dst, uint8_t *src, int stride){
put_pixels16_xy2_8_c(dst, src, stride, 16);
}
-static void avg_rv40_qpel16_mc33_c(uint8_t *dst, uint8_t *src, int stride){
+void ff_avg_rv40_qpel16_mc33_c(uint8_t *dst, uint8_t *src, int stride){
avg_pixels16_xy2_8_c(dst, src, stride, 16);
}
-static void put_rv40_qpel8_mc33_c(uint8_t *dst, uint8_t *src, int stride){
+void ff_put_rv40_qpel8_mc33_c(uint8_t *dst, uint8_t *src, int stride){
put_pixels8_xy2_8_c(dst, src, stride, 8);
}
-static void avg_rv40_qpel8_mc33_c(uint8_t *dst, uint8_t *src, int stride){
+void ff_avg_rv40_qpel8_mc33_c(uint8_t *dst, uint8_t *src, int stride){
avg_pixels8_xy2_8_c(dst, src, stride, 8);
}
#endif /* CONFIG_RV40_DECODER */
dst[i] = src[i] * mul;
}
-static void vector_fmul_sv_scalar_2_c(float *dst, const float *src,
- const float **sv, float mul, int len)
-{
- int i;
- for (i = 0; i < len; i += 2, sv++) {
- dst[i ] = src[i ] * sv[0][0] * mul;
- dst[i+1] = src[i+1] * sv[0][1] * mul;
- }
-}
-
-static void vector_fmul_sv_scalar_4_c(float *dst, const float *src,
- const float **sv, float mul, int len)
-{
- int i;
- for (i = 0; i < len; i += 4, sv++) {
- dst[i ] = src[i ] * sv[0][0] * mul;
- dst[i+1] = src[i+1] * sv[0][1] * mul;
- dst[i+2] = src[i+2] * sv[0][2] * mul;
- dst[i+3] = src[i+3] * sv[0][3] * mul;
- }
-}
-
-static void sv_fmul_scalar_2_c(float *dst, const float **sv, float mul,
- int len)
-{
- int i;
- for (i = 0; i < len; i += 2, sv++) {
- dst[i ] = sv[0][0] * mul;
- dst[i+1] = sv[0][1] * mul;
- }
-}
-
-static void sv_fmul_scalar_4_c(float *dst, const float **sv, float mul,
- int len)
+static void vector_fmac_scalar_c(float *dst, const float *src, float mul,
+ int len)
{
int i;
- for (i = 0; i < len; i += 4, sv++) {
- dst[i ] = sv[0][0] * mul;
- dst[i+1] = sv[0][1] * mul;
- dst[i+2] = sv[0][2] * mul;
- dst[i+3] = sv[0][3] * mul;
- }
+ for (i = 0; i < len; i++)
+ dst[i] += src[i] * mul;
}
static void butterflies_float_c(float *restrict v1, float *restrict v2,
}else if(CONFIG_EATGQ_DECODER && avctx->idct_algo==FF_IDCT_EA) {
c->idct_put= ff_ea_idct_put_c;
c->idct_permutation_type= FF_NO_IDCT_PERM;
- }else if(CONFIG_BINK_DECODER && avctx->idct_algo==FF_IDCT_BINK) {
- c->idct = ff_bink_idct_c;
- c->idct_add = ff_bink_idct_add_c;
- c->idct_put = ff_bink_idct_put_c;
- c->idct_permutation_type = FF_NO_IDCT_PERM;
}else{ //accurate/default
c->idct_put = ff_simple_idct_put_8;
c->idct_add = ff_simple_idct_add_8;
c->diff_pixels = diff_pixels_c;
c->put_pixels_clamped = ff_put_pixels_clamped_c;
c->put_signed_pixels_clamped = ff_put_signed_pixels_clamped_c;
- c->put_pixels_nonclamped = put_pixels_nonclamped_c;
c->add_pixels_clamped = ff_add_pixels_clamped_c;
c->sum_abs_dctelem = sum_abs_dctelem_c;
c->gmc1 = gmc1_c;
c->fill_block_tab[0] = fill_block16_c;
c->fill_block_tab[1] = fill_block8_c;
- c->scale_block = scale_block_c;
/* TODO [0] 16 [1] 8 */
c->pix_abs[0][0] = pix_abs16_c;
#if CONFIG_WMV2_DECODER || CONFIG_VC1_DECODER
ff_intrax8dsp_init(c,avctx);
#endif
-#if CONFIG_RV30_DECODER
- ff_rv30dsp_init(c,avctx);
-#endif
-#if CONFIG_RV40_DECODER
- ff_rv40dsp_init(c,avctx);
- c->put_rv40_qpel_pixels_tab[0][15] = put_rv40_qpel16_mc33_c;
- c->avg_rv40_qpel_pixels_tab[0][15] = avg_rv40_qpel16_mc33_c;
- c->put_rv40_qpel_pixels_tab[1][15] = put_rv40_qpel8_mc33_c;
- c->avg_rv40_qpel_pixels_tab[1][15] = avg_rv40_qpel8_mc33_c;
-#endif
c->put_mspel_pixels_tab[0]= ff_put_pixels8x8_c;
c->put_mspel_pixels_tab[1]= put_mspel8_mc10_c;
c->scalarproduct_float = scalarproduct_float_c;
c->butterflies_float = butterflies_float_c;
c->vector_fmul_scalar = vector_fmul_scalar_c;
-
- c->vector_fmul_sv_scalar[0] = vector_fmul_sv_scalar_2_c;
- c->vector_fmul_sv_scalar[1] = vector_fmul_sv_scalar_4_c;
-
- c->sv_fmul_scalar[0] = sv_fmul_scalar_2_c;
- c->sv_fmul_scalar[1] = sv_fmul_scalar_4_c;
+ c->vector_fmac_scalar = vector_fmac_scalar_c;
c->shrink[0]= av_image_copy_plane;
c->shrink[1]= ff_shrink22;
c->avg_2tap_qpel_pixels_tab[0][i]= c->avg_h264_qpel_pixels_tab[0][i];
}
- c->put_rv30_tpel_pixels_tab[0][0] = c->put_h264_qpel_pixels_tab[0][0];
- c->put_rv30_tpel_pixels_tab[1][0] = c->put_h264_qpel_pixels_tab[1][0];
- c->avg_rv30_tpel_pixels_tab[0][0] = c->avg_h264_qpel_pixels_tab[0][0];
- c->avg_rv30_tpel_pixels_tab[1][0] = c->avg_h264_qpel_pixels_tab[1][0];
-
- c->put_rv40_qpel_pixels_tab[0][0] = c->put_h264_qpel_pixels_tab[0][0];
- c->put_rv40_qpel_pixels_tab[1][0] = c->put_h264_qpel_pixels_tab[1][0];
- c->avg_rv40_qpel_pixels_tab[0][0] = c->avg_h264_qpel_pixels_tab[0][0];
- c->avg_rv40_qpel_pixels_tab[1][0] = c->avg_h264_qpel_pixels_tab[1][0];
-
- switch(c->idct_permutation_type){
- case FF_NO_IDCT_PERM:
- for(i=0; i<64; i++)
- c->idct_permutation[i]= i;
- break;
- case FF_LIBMPEG2_IDCT_PERM:
- for(i=0; i<64; i++)
- c->idct_permutation[i]= (i & 0x38) | ((i & 6) >> 1) | ((i & 1) << 2);
- break;
- case FF_SIMPLE_IDCT_PERM:
- for(i=0; i<64; i++)
- c->idct_permutation[i]= simple_mmx_permutation[i];
- break;
- case FF_TRANSPOSE_IDCT_PERM:
- for(i=0; i<64; i++)
- c->idct_permutation[i]= ((i&7)<<3) | (i>>3);
- break;
- case FF_PARTTRANS_IDCT_PERM:
- for(i=0; i<64; i++)
- c->idct_permutation[i]= (i&0x24) | ((i&3)<<3) | ((i>>3)&3);
- break;
- case FF_SSE2_IDCT_PERM:
- for(i=0; i<64; i++)
- c->idct_permutation[i]= (i&0x38) | idct_sse2_row_perm[i&7];
- break;
- default:
- av_log(avctx, AV_LOG_ERROR, "Internal error, IDCT permutation not set\n");
- }
+ ff_init_scantable_permutation(c->idct_permutation,
+ c->idct_permutation_type);
}