OPJ_BOOL OPJ_CALLCONV opj_set_MCT(opj_cparameters_t *parameters, OPJ_FLOAT32 * pEncodingMatrix, OPJ_INT32 * p_dc_shift, OPJ_UINT32 pNbComp) { OPJ_UINT32 l_matrix_size = pNbComp * pNbComp * (OPJ_UINT32)sizeof(OPJ_FLOAT32); OPJ_UINT32 l_dc_shift_size = pNbComp * (OPJ_UINT32)sizeof(OPJ_INT32); OPJ_UINT32 l_mct_total_size = l_matrix_size + l_dc_shift_size; /* add MCT capability */ if (OPJ_IS_PART2(parameters->rsiz)) { parameters->rsiz |= OPJ_EXTENSION_MCT; } else { parameters->rsiz = ((OPJ_PROFILE_PART2) | (OPJ_EXTENSION_MCT)); } parameters->irreversible = 1; /* use array based MCT */ parameters->tcp_mct = 2; parameters->mct_data = opj_malloc(l_mct_total_size); if (! parameters->mct_data) { return OPJ_FALSE; } memcpy(parameters->mct_data, pEncodingMatrix, l_matrix_size); memcpy(((OPJ_BYTE *) parameters->mct_data) + l_matrix_size, p_dc_shift, l_dc_shift_size); return OPJ_TRUE; }
bool OPJ_CALLCONV opj_set_MCT(opj_cparameters_t *parameters, float * pEncodingMatrix, int32_t * p_dc_shift,uint32_t pNbComp) { uint32_t l_matrix_size = pNbComp * pNbComp * (uint32_t)sizeof(float); uint32_t l_dc_shift_size = pNbComp * (uint32_t)sizeof(int32_t); uint32_t l_mct_total_size = l_matrix_size + l_dc_shift_size; /* add MCT capability */ if (OPJ_IS_PART2(parameters->rsiz)) { parameters->rsiz |= OPJ_EXTENSION_MCT; } else { parameters->rsiz = ((OPJ_PROFILE_PART2) | (OPJ_EXTENSION_MCT)); } parameters->irreversible = 1; /* use array based MCT */ parameters->tcp_mct = 2; parameters->mct_data = opj_malloc(l_mct_total_size); if (! parameters->mct_data) { return false; } memcpy(parameters->mct_data,pEncodingMatrix,l_matrix_size); memcpy(((uint8_t *) parameters->mct_data) + l_matrix_size,p_dc_shift,l_dc_shift_size); return true; }