+ for( int i_list = 0; i_list < num_8x8_lists; i_list++ )
+ for( int i = 0; i < 64; i++ )
+ {
+ h->unquant8_mf[i_list][q][i] = (1ULL << (q/6 + 16 + 8)) / quant8_mf[i_list][q%6][i];
+ j = SHIFT(quant8_mf[i_list][q%6][i], q/6);
+ h->quant8_mf[i_list][q][i] = (uint16_t)j;
+
+ if( !j )
+ {
+ min_qp_err = X264_MIN( min_qp_err, q );
+ continue;
+ }
+ h->quant8_bias[i_list][q][i] = X264_MIN( DIV(deadzone[i_list]<<10, j), (1<<15)/j );
+ h->quant8_bias0[i_list][q][i] = (1<<15)/j;
+ if( j > 0xffff && q > max_qp_err && (i_list == CQM_8IY || i_list == CQM_8PY) )
+ max_qp_err = q;
+ if( j > 0xffff && q > max_chroma_qp_err && (i_list == CQM_8IC || i_list == CQM_8PC) )
+ max_chroma_qp_err = q;
+ }
+ }
+
+ /* Emergency mode denoising. */
+ x264_emms();
+ CHECKED_MALLOC( h->nr_offset_emergency, sizeof(*h->nr_offset_emergency)*(QP_MAX-QP_MAX_SPEC) );
+ for( int q = 0; q < QP_MAX - QP_MAX_SPEC; q++ )
+ for( int cat = 0; cat < 3 + CHROMA444; cat++ )
+ {
+ int dct8x8 = cat&1;
+ if( !h->param.analyse.b_transform_8x8 && dct8x8 )
+ continue;
+
+ int size = dct8x8 ? 64 : 16;
+ udctcoef *nr_offset = h->nr_offset_emergency[q][cat];
+ /* Denoise chroma first (due to h264's chroma QP offset), then luma, then DC. */
+ int dc_threshold = (QP_MAX-QP_MAX_SPEC)*2/3;
+ int luma_threshold = (QP_MAX-QP_MAX_SPEC)*2/3;
+ int chroma_threshold = 0;
+
+ for( int i = 0; i < size; i++ )