x264_pps_t *pps;
int i_idr_pic_id;
- int dequant4_mf[4][6][4][4];
- int dequant8_mf[2][6][8][8];
- int quant4_mf[4][6][4][4];
- int quant8_mf[2][6][8][8];
- int unquant4_mf[4][52][16];
- int unquant8_mf[2][52][64];
+ int (*dequant4_mf[4])[4][4]; /* [4][6][4][4] */
+ int (*dequant8_mf[2])[8][8]; /* [2][6][8][8] */
+ int (*quant4_mf[4])[4][4]; /* [4][6][4][4] */
+ int (*quant8_mf[2])[8][8]; /* [2][6][8][8] */
+ int (*unquant4_mf[4])[16]; /* [4][52][16] */
+ int (*unquant8_mf[2])[64]; /* [2][52][64] */
uint32_t nr_residual_sum[2][64];
uint32_t nr_offset[2][64];
int def_quant8[6][64];
int def_dequant4[6][16];
int def_dequant8[6][64];
- int q, i, i_list;
+ int q, i, j, i_list;
+
+ for( i = 0; i < 6; i++ )
+ {
+ int size = i<4 ? 16 : 64;
+ for( j = (i<4 ? 0 : 4); j < i; j++ )
+ if( !memcmp( h->pps->scaling_list[i], h->pps->scaling_list[j], size*sizeof(uint8_t) ) )
+ break;
+ if( j < i )
+ {
+ h-> quant4_mf[i] = h-> quant4_mf[j];
+ h->dequant4_mf[i] = h->dequant4_mf[j];
+ h->unquant4_mf[i] = h->unquant4_mf[j];
+ }
+ else
+ {
+ h-> quant4_mf[i] = x264_malloc( 6*size*sizeof(int) );
+ h->dequant4_mf[i] = x264_malloc( 6*size*sizeof(int) );
+ h->unquant4_mf[i] = x264_malloc(52*size*sizeof(int) );
+ }
+ }
for( q = 0; q < 6; q++ )
{
}
}
+void x264_cqm_delete( x264_t *h )
+{
+ int i, j;
+ for( i = 0; i < 6; i++ )
+ {
+ for( j = 0; j < i; j++ )
+ if( h->quant4_mf[i] == h->quant4_mf[j] )
+ break;
+ if( j == i )
+ {
+ x264_free( h-> quant4_mf[i] );
+ x264_free( h->dequant4_mf[i] );
+ x264_free( h->unquant4_mf[i] );
+ }
+ }
+}
+
int x264_cqm_parse_jmlist( x264_t *h, const char *buf, const char *name,
uint8_t *cqm, const uint8_t *jvt, int length )
{
};
void x264_cqm_init( x264_t *h );
+void x264_cqm_delete( x264_t *h );
int x264_cqm_parse_file( x264_t *h, const char *filename );
#endif
if( h->param.rc.psz_rc_eq )
free( h->param.rc.psz_rc_eq );
+ x264_cqm_delete( h );
x264_macroblock_cache_end( h );
x264_free( h->out.p_bitstream );
for( i = 1; i < h->param.i_threads; i++ )