{
DECLARE_ALIGNED( int16_t, luma16x16_dc[16], 16 );
DECLARE_ALIGNED( int16_t, chroma_dc[2][4], 16 );
- // FIXME merge with union
+ // FIXME share memory?
DECLARE_ALIGNED( int16_t, luma8x8[4][64], 16 );
- union
- {
- DECLARE_ALIGNED( int16_t, residual_ac[15], 16 );
- DECLARE_ALIGNED( int16_t, luma4x4[16], 16 );
- } block[16+8];
+ DECLARE_ALIGNED( int16_t, luma4x4[16+8][16], 16 );
} dct;
/* MB table and cache for current frame/mb */
*(uint64_t*)(level+12) = *(uint64_t*)(*dct+12);
}
-static void zigzag_scan_4x4ac_frame( int16_t level[15], int16_t dct[4][4] )
-{
- ZIG( 0,0,1) ZIG( 1,1,0) ZIG( 2,2,0)
- ZIG( 3,1,1) ZIG( 4,0,2) ZIG( 5,0,3) ZIG( 6,1,2)
- ZIG( 7,2,1) ZIG( 8,3,0) ZIG( 9,3,1) ZIG(10,2,2)
- ZIG(11,1,3) ZIG(12,2,3) ZIG(13,3,2) ZIG(14,3,3)
-}
-
-static void zigzag_scan_4x4ac_field( int16_t level[15], int16_t dct[4][4] )
-{
- ZIG( 0,1,0) ZIG( 1,0,1) ZIG( 2,2,0)
- ZIG( 3,3,0) ZIG( 4,1,1) ZIG( 5,2,1) ZIG( 6,3,1)
- ZIG( 7,0,2) ZIG( 8,1,2) ZIG( 9,2,2) ZIG(10,3,2)
- ZIG(11,0,3) ZIG(12,1,3) ZIG(13,2,3) ZIG(14,3,3)
-}
-
#undef ZIG
#define ZIG(i,y,x) {\
int oe = x+y*FENC_STRIDE;\
COPY4x4
}
-static void zigzag_sub_4x4ac_frame( int16_t level[15], const uint8_t *p_src, uint8_t *p_dst )
-{
- ZIG( 0,0,1) ZIG( 1,1,0) ZIG( 2,2,0)
- ZIG( 3,1,1) ZIG( 4,0,2) ZIG( 5,0,3) ZIG( 6,1,2)
- ZIG( 7,2,1) ZIG( 8,3,0) ZIG( 9,3,1) ZIG(10,2,2)
- ZIG(11,1,3) ZIG(12,2,3) ZIG(13,3,2) ZIG(14,3,3)
- COPY4x4
-}
-
-static void zigzag_sub_4x4ac_field( int16_t level[15], const uint8_t *p_src, uint8_t *p_dst )
-{
- ZIG( 0,1,0) ZIG( 1,0,1) ZIG( 2,2,0)
- ZIG( 3,3,0) ZIG( 4,1,1) ZIG( 5,2,1) ZIG( 6,3,1)
- ZIG( 7,0,2) ZIG( 8,1,2) ZIG( 9,2,2) ZIG(10,3,2)
- ZIG(11,0,3) ZIG(12,1,3) ZIG(13,2,3) ZIG(14,3,3)
- COPY4x4
-}
-
#undef ZIG
#undef COPY4x4
{
pf->scan_8x8 = zigzag_scan_8x8_field;
pf->scan_4x4 = zigzag_scan_4x4_field;
- pf->scan_4x4ac = zigzag_scan_4x4ac_field;
pf->sub_4x4 = zigzag_sub_4x4_field;
- pf->sub_4x4ac = zigzag_sub_4x4ac_field;
#ifdef HAVE_MMX
if( cpu&X264_CPU_MMXEXT )
pf->scan_4x4 = x264_zigzag_scan_4x4_field_mmxext;
#ifdef ARCH_PPC
if( cpu&X264_CPU_ALTIVEC )
- {
pf->scan_4x4 = x264_zigzag_scan_4x4_field_altivec;
- pf->scan_4x4ac = x264_zigzag_scan_4x4ac_field_altivec;
- }
#endif
}
else
{
pf->scan_8x8 = zigzag_scan_8x8_frame;
pf->scan_4x4 = zigzag_scan_4x4_frame;
- pf->scan_4x4ac = zigzag_scan_4x4ac_frame;
pf->sub_4x4 = zigzag_sub_4x4_frame;
- pf->sub_4x4ac = zigzag_sub_4x4ac_frame;
-
#ifdef HAVE_SSE3
if( cpu&X264_CPU_SSSE3 )
pf->sub_4x4 = x264_zigzag_sub_4x4_frame_ssse3;
#ifdef ARCH_PPC
if( cpu&X264_CPU_ALTIVEC )
- {
pf->scan_4x4 = x264_zigzag_scan_4x4_frame_altivec;
- pf->scan_4x4ac = x264_zigzag_scan_4x4ac_frame_altivec;
- }
#endif
}
}
{
void (*scan_8x8)( int16_t level[64], int16_t dct[8][8] );
void (*scan_4x4)( int16_t level[16], int16_t dct[4][4] );
- void (*scan_4x4ac)( int16_t level[15], int16_t dct[4][4] );
void (*sub_4x4)( int16_t level[16], const uint8_t *p_src, uint8_t *p_dst );
- void (*sub_4x4ac)( int16_t level[15], const uint8_t *p_src, uint8_t *p_dst );
} x264_zigzag_function_t;
vec_st( tmp1v, 0x10, level );
}
-void x264_zigzag_scan_4x4ac_frame_altivec( int16_t level[15], int16_t dct[4][4] )
-{
- vec_s16_t dct0v, dct1v;
- vec_s16_t tmp0v, tmp1v;
-
- dct0v = vec_ld(0x00, (int16_t*)dct);
- dct1v = vec_ld(0x10, (int16_t*)dct);
-
- const vec_u8_t sel0 = (vec_u8_t) CV(8,9,2,3,4,5,10,11,16,17,24,25,18,19,12,13);
- const vec_u8_t sel1 = (vec_u8_t) CV(6,7,14,15,20,21,26,27,28,29,22,23,30,31,0,1);
-
- tmp0v = vec_perm( dct0v, dct1v, sel0 );
- tmp1v = vec_perm( dct0v, dct1v, sel1 );
-
- vec_st( tmp0v, 0x00, level );
- vec_st( tmp1v, 0x10, level );
-}
-
-void x264_zigzag_scan_4x4ac_field_altivec( int16_t level[15], int16_t dct[4][4] )
-{
- vec_s16_t dct0v, dct1v;
- vec_s16_t tmp0v, tmp1v;
-
- dct0v = vec_ld(0x00, (int16_t*)dct);
- dct1v = vec_ld(0x10, (int16_t*)dct);
-
- const vec_u8_t sel0 = (vec_u8_t) CV(2,3,8,9,4,5,6,7,10,11,12,13,14,15,16,17);
- const vec_u8_t sel1 = (vec_u8_t) CV(18,19,20,21,22,23,24,25,26,27,28,29,30,31,0,1);
-
- tmp0v = vec_perm( dct0v, dct1v, sel0 );
- tmp1v = vec_perm( dct0v, dct1v, sel1 );
-
- vec_st( tmp0v, 0x00, level );
- vec_st( tmp1v, 0x10, level );
-}
void x264_add16x16_idct8_altivec( uint8_t *dst, int16_t dct[4][8][8] );
void x264_zigzag_scan_4x4_frame_altivec( int16_t level[16], int16_t dct[4][4] );
-void x264_zigzag_scan_4x4ac_frame_altivec( int16_t level[15], int16_t dct[4][4] );
-
void x264_zigzag_scan_4x4_field_altivec( int16_t level[16], int16_t dct[4][4] );
-void x264_zigzag_scan_4x4ac_field_altivec( int16_t level[15], int16_t dct[4][4] );
#endif
{
h->mc.copy[PIXEL_16x16]( h->mb.pic.i4x4_fdec_buf, 16, p_dst, FDEC_STRIDE, 16 );
if( h->mb.i_skip_intra == 2 )
- h->mc.memcpy_aligned( h->mb.pic.i4x4_dct_buf, h->dct.block, sizeof(h->mb.pic.i4x4_dct_buf) );
+ h->mc.memcpy_aligned( h->mb.pic.i4x4_dct_buf, h->dct.luma4x4, sizeof(h->mb.pic.i4x4_dct_buf) );
}
}
else
/* AC Luma */
if( h->mb.i_cbp_luma != 0 )
for( i = 0; i < 16; i++ )
- block_residual_write_cabac( h, cb, DCT_LUMA_AC, i, h->dct.block[i].residual_ac, 15 );
+ block_residual_write_cabac( h, cb, DCT_LUMA_AC, i, h->dct.luma4x4[i]+1, 15 );
}
else if( h->mb.b_transform_8x8 )
{
{
for( i = 0; i < 16; i++ )
if( h->mb.i_cbp_luma & ( 1 << ( i / 4 ) ) )
- block_residual_write_cabac( h, cb, DCT_LUMA_4x4, i, h->dct.block[i].luma4x4, 16 );
+ block_residual_write_cabac( h, cb, DCT_LUMA_4x4, i, h->dct.luma4x4[i], 16 );
}
if( h->mb.i_cbp_chroma &0x03 ) /* Chroma DC residual present */
if( h->mb.i_cbp_chroma&0x02 ) /* Chroma AC residual present */
{
for( i = 16; i < 24; i++ )
- block_residual_write_cabac( h, cb, DCT_CHROMA_AC, i, h->dct.block[i].residual_ac, 15 );
+ block_residual_write_cabac( h, cb, DCT_CHROMA_AC, i, h->dct.luma4x4[i]+1, 15 );
}
}
{
int i4;
for( i4 = 0; i4 < 4; i4++ )
- block_residual_write_cabac( h, cb, DCT_LUMA_4x4, i4+i8*4, h->dct.block[i4+i8*4].luma4x4, 16 );
+ block_residual_write_cabac( h, cb, DCT_LUMA_4x4, i4+i8*4, h->dct.luma4x4[i4+i8*4], 16 );
}
}
- block_residual_write_cabac( h, cb, DCT_CHROMA_AC, 16+i8, h->dct.block[16+i8].residual_ac, 15 );
- block_residual_write_cabac( h, cb, DCT_CHROMA_AC, 20+i8, h->dct.block[20+i8].residual_ac, 15 );
+ block_residual_write_cabac( h, cb, DCT_CHROMA_AC, 16+i8, h->dct.luma4x4[16+i8]+1, 15 );
+ block_residual_write_cabac( h, cb, DCT_CHROMA_AC, 20+i8, h->dct.luma4x4[20+i8]+1, 15 );
i8 += x264_pixel_size[i_pixel].h >> 3;
}
const int i_pred = x264_mb_predict_intra4x4_mode( h, i4 );
i_mode = x264_mb_pred_mode4x4_fix( i_mode );
x264_cabac_mb_intra4x4_pred_mode( cb, i_pred, i_mode );
- block_residual_write_cabac( h, cb, DCT_LUMA_4x4, i4, h->dct.block[i4].luma4x4, 16 );
+ block_residual_write_cabac( h, cb, DCT_LUMA_4x4, i4, h->dct.luma4x4[i4], 16 );
}
static void x264_i8x8_chroma_size_cabac( x264_t *h, x264_cabac_t *cb )
{
int i;
for( i = 16; i < 24; i++ )
- block_residual_write_cabac( h, cb, DCT_CHROMA_AC, i, h->dct.block[i].residual_ac, 15 );
+ block_residual_write_cabac( h, cb, DCT_CHROMA_AC, i, h->dct.luma4x4[i]+1, 15 );
}
}
}
for( i4 = 0; i4 < 4; i4++ )
{
for( i = 0; i < 16; i++ )
- h->dct.block[i4+i8*4].luma4x4[i] = h->dct.luma8x8[i8][i4+i*4];
+ h->dct.luma4x4[i4+i8*4][i] = h->dct.luma8x8[i8][i4+i*4];
h->mb.cache.non_zero_count[x264_scan8[i4+i8*4]] =
- array_non_zero_count( h->dct.block[i4+i8*4].luma4x4, 16 );
+ array_non_zero_count( h->dct.luma4x4[i4+i8*4], 16 );
}
}
for( i8 = i8start; i8 <= i8end; i8++ )
if( h->mb.i_cbp_luma & (1 << i8) )
for( i4 = 0; i4 < 4; i4++ )
- block_residual_write_cavlc( h, s, i4+i8*4, h->dct.block[i4+i8*4].luma4x4, 16 );
+ block_residual_write_cavlc( h, s, i4+i8*4, h->dct.luma4x4[i4+i8*4], 16 );
}
/*****************************************************************************
/* AC Luma */
if( h->mb.i_cbp_luma != 0 )
for( i = 0; i < 16; i++ )
- block_residual_write_cavlc( h, s, i, h->dct.block[i].residual_ac, 15 );
+ block_residual_write_cavlc( h, s, i, h->dct.luma4x4[i]+1, 15 );
}
else if( h->mb.i_cbp_luma != 0 || h->mb.i_cbp_chroma != 0 )
{
block_residual_write_cavlc( h, s, BLOCK_INDEX_CHROMA_DC, h->dct.chroma_dc[1], 4 );
if( h->mb.i_cbp_chroma&0x02 ) /* Chroma AC residual present */
for( i = 16; i < 24; i++ )
- block_residual_write_cavlc( h, s, i, h->dct.block[i].residual_ac, 15 );
+ block_residual_write_cavlc( h, s, i, h->dct.luma4x4[i]+1, 15 );
}
#ifndef RDO_SKIP_BS
{
x264_macroblock_luma_write_cavlc( h, &s, i8, i8 );
- block_residual_write_cavlc( h, &s, 16+i8, h->dct.block[16+i8].residual_ac, 15 );
- block_residual_write_cavlc( h, &s, 20+i8, h->dct.block[20+i8].residual_ac, 15 );
+ block_residual_write_cavlc( h, &s, 16+i8, h->dct.luma4x4[16+i8]+1, 15 );
+ block_residual_write_cavlc( h, &s, 20+i8, h->dct.luma4x4[20+i8]+1, 15 );
i8 += x264_pixel_size[i_pixel].h >> 3;
}
for( i4 = 0; i4 < 4; i4++ )
{
for( i = 0; i < 16; i++ )
- h->dct.block[i4+i8*4].luma4x4[i] = h->dct.luma8x8[i8][i4+i*4];
+ h->dct.luma4x4[i4+i8*4][i] = h->dct.luma8x8[i8][i4+i*4];
h->mb.cache.non_zero_count[x264_scan8[i4+i8*4]] =
- array_non_zero_count( h->dct.block[i4+i8*4].luma4x4, 16 );
- block_residual_write_cavlc( h, &h->out.bs, i4+i8*4, h->dct.block[i4+i8*4].luma4x4, 16 );
+ array_non_zero_count( h->dct.luma4x4[i4+i8*4], 16 );
+ block_residual_write_cavlc( h, &h->out.bs, i4+i8*4, h->dct.luma4x4[i4+i8*4], 16 );
}
return h->out.bs.i_bits_encoded;
}
static int x264_partition_i4x4_size_cavlc( x264_t *h, int i4, int i_mode )
{
h->out.bs.i_bits_encoded = cavlc_intra4x4_pred_size( h, i4, i_mode );
- block_residual_write_cavlc( h, &h->out.bs, i4, h->dct.block[i4].luma4x4, 16 );
+ block_residual_write_cavlc( h, &h->out.bs, i4, h->dct.luma4x4[i4], 16 );
return h->out.bs.i_bits_encoded;
}
{
int i;
for( i = 16; i < 24; i++ )
- block_residual_write_cavlc( h, &h->out.bs, i, h->dct.block[i].residual_ac, 15 );
+ block_residual_write_cavlc( h, &h->out.bs, i, h->dct.luma4x4[i]+1, 15 );
}
}
return h->out.bs.i_bits_encoded;
if( h->mb.b_lossless )
{
- h->zigzagf.sub_4x4( h->dct.block[idx].luma4x4, p_src, p_dst );
+ h->zigzagf.sub_4x4( h->dct.luma4x4[idx], p_src, p_dst );
return;
}
else
h->quantf.quant_4x4( dct4x4, h->quant4_mf[CQM_4IY][i_qscale], h->quant4_bias[CQM_4IY][i_qscale] );
- h->zigzagf.scan_4x4( h->dct.block[idx].luma4x4, dct4x4 );
+ h->zigzagf.scan_4x4( h->dct.luma4x4[idx], dct4x4 );
h->quantf.dequant_4x4( dct4x4, h->dequant4_mf[CQM_4IY], i_qscale );
/* output samples to fdec */
{
int oe = block_idx_x[i]*4 + block_idx_y[i]*4*FENC_STRIDE;
int od = block_idx_x[i]*4 + block_idx_y[i]*4*FDEC_STRIDE;
- h->zigzagf.sub_4x4ac( h->dct.block[i].residual_ac, p_src+oe, p_dst+od );
+ h->zigzagf.sub_4x4( h->dct.luma4x4[i], p_src+oe, p_dst+od );
dct4x4[0][block_idx_x[i]][block_idx_y[i]] = p_src[oe] - p_dst[od];
p_dst[od] = p_src[oe];
}
else
h->quantf.quant_4x4( dct4x4[1+i], h->quant4_mf[CQM_4IY][i_qscale], h->quant4_bias[CQM_4IY][i_qscale] );
- h->zigzagf.scan_4x4ac( h->dct.block[i].residual_ac, dct4x4[1+i] );
+ h->zigzagf.scan_4x4( h->dct.luma4x4[i], dct4x4[1+i] );
h->quantf.dequant_4x4( dct4x4[1+i], h->dequant4_mf[CQM_4IY], i_qscale );
}
{
int oe = block_idx_x[i]*4 + block_idx_y[i]*4*FENC_STRIDE;
int od = block_idx_x[i]*4 + block_idx_y[i]*4*FDEC_STRIDE;
- h->zigzagf.sub_4x4ac( h->dct.block[16+i+ch*4].residual_ac, p_src+oe, p_dst+od );
+ h->zigzagf.sub_4x4( h->dct.luma4x4[16+i+ch*4], p_src+oe, p_dst+od );
h->dct.chroma_dc[ch][i] = p_src[oe] - p_dst[od];
p_dst[od] = p_src[oe];
}
/* no trellis; it doesn't seem to help chroma noticeably */
h->quantf.quant_4x4( dct4x4[i], h->quant4_mf[CQM_4IC+b_inter][i_qscale], h->quant4_bias[CQM_4IC+b_inter][i_qscale] );
- h->zigzagf.scan_4x4ac( h->dct.block[16+i+ch*4].residual_ac, dct4x4[i] );
+ h->zigzagf.scan_4x4( h->dct.luma4x4[16+i+ch*4], dct4x4[i] );
if( b_decimate )
{
- i_decimate_score += x264_mb_decimate_score( h->dct.block[16+i+ch*4].residual_ac, 15 );
+ i_decimate_score += x264_mb_decimate_score( h->dct.luma4x4[16+i+ch*4]+1, 15 );
}
}
if( b_decimate && i_decimate_score < 7 )
{
/* Near null chroma 8x8 block so make it null (bits saving) */
- memset( &h->dct.block[16+ch*4], 0, 4 * sizeof( *h->dct.block ) );
+ memset( &h->dct.luma4x4[16+ch*4], 0, 4 * sizeof( *h->dct.luma4x4 ) );
if( !array_non_zero( dct2x2 ) )
continue;
memset( dct4x4, 0, sizeof( dct4x4 ) );
h->mb.i_cbp_chroma = 0;
for( i = 0; i < 8; i++ )
{
- int nz = array_non_zero_count( h->dct.block[16+i].residual_ac, 15 );
+ int nz = array_non_zero_count( h->dct.luma4x4[16+i]+1, 15 );
h->mb.cache.non_zero_count[x264_scan8[16+i]] = nz;
h->mb.i_cbp_chroma |= nz;
}
h->mc.copy[PIXEL_16x16]( h->mb.pic.p_fdec[0], FDEC_STRIDE, h->mb.pic.i4x4_fdec_buf, 16, 16 );
/* In RD mode, restore the now-overwritten DCT data. */
if( h->mb.i_skip_intra == 2 )
- h->mc.memcpy_aligned( h->dct.block, h->mb.pic.i4x4_dct_buf, sizeof(h->mb.pic.i4x4_dct_buf) );
+ h->mc.memcpy_aligned( h->dct.luma4x4, h->mb.pic.i4x4_dct_buf, sizeof(h->mb.pic.i4x4_dct_buf) );
}
for( i = h->mb.i_skip_intra ? 15 : 0 ; i < 16; i++ )
{
{
int x = 4*block_idx_x[i4x4];
int y = 4*block_idx_y[i4x4];
- h->zigzagf.sub_4x4( h->dct.block[i4x4].luma4x4,
+ h->zigzagf.sub_4x4( h->dct.luma4x4[i4x4],
h->mb.pic.p_fenc[0]+x+y*FENC_STRIDE,
h->mb.pic.p_fdec[0]+x+y*FDEC_STRIDE );
}
else
h->quantf.quant_4x4( dct4x4[idx], h->quant4_mf[CQM_4PY][i_qp], h->quant4_bias[CQM_4PY][i_qp] );
- h->zigzagf.scan_4x4( h->dct.block[idx].luma4x4, dct4x4[idx] );
+ h->zigzagf.scan_4x4( h->dct.luma4x4[idx], dct4x4[idx] );
if( b_decimate )
- i_decimate_8x8 += x264_mb_decimate_score( h->dct.block[idx].luma4x4, 16 );
+ i_decimate_8x8 += x264_mb_decimate_score( h->dct.luma4x4[idx], 16 );
}
/* decimate this 8x8 block */
if( i_decimate_8x8 < 4 && b_decimate )
{
memset( &dct4x4[i8x8*4], 0, 4 * sizeof( *dct4x4 ) );
- memset( &h->dct.block[i8x8*4], 0, 4 * sizeof( *h->dct.block ) );
+ memset( &h->dct.luma4x4[i8x8*4], 0, 4 * sizeof( *h->dct.luma4x4 ) );
nnz8x8[i8x8] = 0;
}
}
if( i_decimate_mb < 6 && b_decimate )
- memset( h->dct.block, 0, 16 * sizeof( *h->dct.block ) );
+ memset( h->dct.luma4x4, 0, 16 * sizeof( *h->dct.luma4x4 ) );
else
{
for( i8x8 = 0; i8x8 < 4; i8x8++ )
{
for( i = 0; i < 16; i++ )
{
- const int nz = array_non_zero_count( h->dct.block[i].residual_ac, 15 );
+ const int nz = array_non_zero_count( h->dct.luma4x4[i]+1, 15 );
h->mb.cache.non_zero_count[x264_scan8[i]] = nz;
if( nz > 0 )
h->mb.i_cbp_luma = 0x0f;
{
for( i = 0; i < 16; i++ )
{
- const int nz = array_non_zero_count( h->dct.block[i].luma4x4, 16 );
+ const int nz = array_non_zero_count( h->dct.luma4x4[i], 16 );
h->mb.cache.non_zero_count[x264_scan8[i]] = nz;
if( nz > 0 )
h->mb.i_cbp_luma |= 1 << (i/4);
for( i4x4 = 0, i_decimate_mb = 0; i4x4 < 4; i4x4++ )
{
h->quantf.quant_4x4( dct4x4[i4x4], h->quant4_mf[CQM_4PC][i_qp], h->quant4_bias[CQM_4PC][i_qp] );
- h->zigzagf.scan_4x4ac( dctscan, dct4x4[i4x4] );
+ h->zigzagf.scan_4x4( dctscan, dct4x4[i4x4] );
- i_decimate_mb += x264_mb_decimate_score( dctscan, 15 );
+ i_decimate_mb += x264_mb_decimate_score( dctscan+1, 15 );
if( i_decimate_mb >= 7 )
{
return 0;
h->quantf.quant_4x4( dct4x4[2], h->quant4_mf[CQM_4PY][i_qp], h->quant4_bias[CQM_4PY][i_qp] );
h->quantf.quant_4x4( dct4x4[3], h->quant4_mf[CQM_4PY][i_qp], h->quant4_bias[CQM_4PY][i_qp] );
for( i4 = 0; i4 < 4; i4++ )
- h->zigzagf.scan_4x4( h->dct.block[i8*4+i4].luma4x4, dct4x4[i4] );
+ h->zigzagf.scan_4x4( h->dct.luma4x4[i8*4+i4], dct4x4[i4] );
if( b_decimate )
{
int i_decimate_8x8 = 0;
for( i4 = 0; i4 < 4 && i_decimate_8x8 < 4; i4++ )
- i_decimate_8x8 += x264_mb_decimate_score( h->dct.block[i8*4+i4].luma4x4, 16 );
+ i_decimate_8x8 += x264_mb_decimate_score( h->dct.luma4x4[i8*4+i4], 16 );
nnz8x8 = 4 <= i_decimate_8x8;
}
else
h->dctf.sub4x4_dct( dct4x4, p_fenc, p_fdec );
h->quantf.quant_4x4( dct4x4, h->quant4_mf[CQM_4PC][i_qp], h->quant4_bias[CQM_4PC][i_qp] );
- h->zigzagf.scan_4x4ac( h->dct.block[16+i8+ch*4].residual_ac, dct4x4 );
+ h->zigzagf.scan_4x4( h->dct.luma4x4[16+i8+ch*4], dct4x4 );
if( array_non_zero( dct4x4 ) )
{
h->quantf.dequant_4x4( dct4x4, h->dequant4_mf[CQM_4PC], i_qp );
ok = 1; used_asm = 0;
TEST_ZIGZAG_SCAN( scan_8x8, level1, level2, (void*)dct1, 64 );
TEST_ZIGZAG_SCAN( scan_4x4, level1, level2, dct1[0], 16 );
- TEST_ZIGZAG_SCAN( scan_4x4ac, level1, level2, dct1[0], 15 );
TEST_ZIGZAG_SUB( sub_4x4, level1, level2, 16 );
- TEST_ZIGZAG_SUB( sub_4x4ac, level1, level2, 15 );
report( "zigzag_frame :" );
x264_zigzag_init( 0, &zigzag_c, 1 );
ok = 1; used_asm = 0;
TEST_ZIGZAG_SCAN( scan_8x8, level1, level2, (void*)dct1, 64 );
TEST_ZIGZAG_SCAN( scan_4x4, level1, level2, dct1[0], 16 );
- TEST_ZIGZAG_SCAN( scan_4x4ac, level1, level2, dct1[0], 15 );
TEST_ZIGZAG_SUB( sub_4x4, level1, level2, 16 );
- TEST_ZIGZAG_SUB( sub_4x4ac, level1, level2, 15 );
report( "zigzag_field :" );
#undef TEST_ZIGZAG_SCAN
#undef TEST_ZIGZAG_SUB