📄 klttce3d.c
字号:
{//c subband_significance[subband]++; scale += increment; *p_char = QCCWAVKLTTCE3D_S_NEW; if (QccWAVTce3DUpdateModel(model, 0.5)) { QccErrorAddMessage("(QccWAVklttce3DIPBand): Error calling QccWAVklttceUpdateModel()"); goto Error; } if (buffer->type == QCCBITBUFFER_OUTPUT) { symbol = (int)(sign_array[current_frame][current_row][current_col]); return_value = QccENTArithmeticEncode(&symbol, 1,model, buffer); } else { if (QccENTArithmeticDecode(buffer,model,&symbol, 1)) return_value = 2; sign_array[current_frame][current_row][current_col] = (char)symbol; } QccWAV3DUpdateNZNStatus(subband_origin_frame, subband_origin_row, subband_origin_col, subband_num_frames, subband_num_rows, subband_num_cols, frame, row, col, significance_map, subband); }//c if (return_value == 2) goto Return; else { if (return_value) { QccErrorAddMessage("(QccWAVklttce3DIPBand): QccWAVklttceIPBand()"); goto Error; } } if (col == 0) p1[row][col] = alpha * p_forward + filter_coef * v; else p1[row][col] = alpha * p1[row][col-1] + filter_coef * v; p2[col] = p1[row][col] + alpha * p2[col]; }//a else { if (col == 0) p1[row][col] = alpha * p_forward + filter_coef * QCCWAVKLTTCE3D_REFINE_HOLDER; else p1[row][col] = alpha* p1[row][col-1] + filter_coef * QCCWAVKLTTCE3D_REFINE_HOLDER; p2[col] = p1[row][col] + alpha * p2[col]; } p_estimation[subband_origin_frame+frame][subband_origin_row + row][subband_origin_col + col] = p_forward; }//aa for (col = subband_num_cols - 1; col >= 0; col--) { if (col ==( subband_num_cols - 1)) p2[col] = p2[col] + alpha * p_estimation[subband_origin_frame+frame][subband_origin_row +row][subband_origin_col + col]; else p2[col] = p2[col] + alpha * p4[row][col+1]; p3[row][col]=p2[col]+alpha*p3[row][col]; p_char = &(significance_map[current_frame][current_row][subband_origin_col + col]); if (*p_char == QCCWAVKLTTCE3D_S) { if (col == (subband_num_cols - 1)) p4[row][col] = alpha * p_estimation[subband_origin_frame+frame][subband_origin_row +row][subband_origin_col + col] + filter_coef * QCCWAVKLTTCE3D_REFINE_HOLDER; else p4[row][col] = alpha * p4[row][col+1] + filter_coef * QCCWAVKLTTCE3D_REFINE_HOLDER;; } else { v = (*p_char == QCCWAVKLTTCE3D_S_NEW); if (col == subband_num_cols - 1) p4[row][col] = alpha * p_estimation[subband_origin_frame+frame][subband_origin_row +row][subband_origin_col + col] + filter_coef * v; else p4[row][col] = alpha * p4[row][col+1] + filter_coef * v; } } }//aaa for (col = 0; col < subband_num_cols; col++) p5[col]=p_estimation[current_frame][subband_origin_row +subband_num_rows - 1][subband_origin_col+col]; for (row = subband_num_rows - 1; row >= 0; row--) { for (col = 0; col < subband_num_cols; col++) { p3[row][col]=p3[row][col]+alpha*p5[col]; if (col ==( subband_num_cols - 1)) p5[col]=p1[row][col]+alpha*p5[col]+alpha*p_estimation[subband_origin_frame+frame][subband_origin_row +row][subband_origin_col + col] ; else p5[col]=p1[row][col]+alpha*p5[col]+alpha*p4[row][col+1]; } } } }//aaaa for (frame = subband_num_frames-1;frame >= 0; frame--) {//bbb current_frame=subband_origin_frame+frame; if ((threshold - 0.000001) < pow((double)2, (double)max_coefficient_bits[subband][frame])) { for (row = subband_num_rows - 1; row >= 0; row--) {//bb current_row = subband_origin_row + row; for (col = subband_num_cols-1; col >=0; col--) { current_col = subband_origin_col + col; p_char = &(significance_map[current_frame][current_row][current_col]); if (col ==( subband_num_cols-1) ) p_estimation[current_frame][current_row][current_col]+=alpha * (p_estimation[subband_origin_frame+frame][subband_origin_row +row][subband_origin_col + col] + p2[col] + p3[row][col]); else p_estimation[current_frame][current_row][current_col] +=alpha *(p1[row][col+1]+p2[col]+p3[row][col]); if (*p_char == QCCWAVKLTTCE3D_S) { p_estimation[current_frame][current_row][current_col]= QCCWAVKLTTCE3D_REFINE_HOLDER * weight[0] + p_estimation[current_frame][current_row][current_col] * weight[1]; if (col == (subband_num_cols-1) ) p1[row][col] = alpha * p_estimation[subband_origin_frame+frame][subband_origin_row +row][subband_origin_col + col] + filter_coef * QCCWAVKLTTCE3D_REFINE_HOLDER; else p1[row][col] = alpha * p1[row][col+1] + filter_coef * QCCWAVKLTTCE3D_REFINE_HOLDER; } else { v = (*p_char == QCCWAVKLTTCE3D_S_NEW); p_estimation[current_frame][current_row][current_col] = v * weight[0] +p_estimation[current_frame][current_row][current_col] * weight[1]; if (col == (subband_num_cols-1) ) p1[row][col] = alpha * p_estimation[subband_origin_frame+frame][subband_origin_row +row][subband_origin_col + col] + filter_coef * v; else p1[row][col] = alpha * p1[row][col+1] + filter_coef * v; } p2[col] = p1[row][col] + alpha * p2[col]; } for (col = 0; col < subband_num_cols; col++) { if (col==0) p2[col] = p2[col] + alpha * p_estimation[subband_origin_frame+frame][subband_origin_row +row][subband_origin_col + col]; else p2[col] = p2[col] + alpha * p4[row][col-1]; current_col = subband_origin_col + col; p_char = &(significance_map[current_frame][current_row][current_col]); if (*p_char == QCCWAVKLTTCE3D_S) { if (col==0) p4[row][col] = alpha * p_estimation[subband_origin_frame+frame][subband_origin_row +row][subband_origin_col + col] + filter_coef * QCCWAVKLTTCE3D_REFINE_HOLDER; else p4[row][col] = alpha * p4[row][col-1] + filter_coef * QCCWAVKLTTCE3D_REFINE_HOLDER; } else { v = (*p_char == QCCWAVKLTTCE3D_S_NEW); if (col==0) p4[row][col] = alpha * p_estimation[subband_origin_frame+frame][subband_origin_row +row][subband_origin_col + col] + filter_coef * v; else p4[row][col] = alpha * p4[row][col-1] + filter_coef *v; } } }//bb for (row = 0; row < subband_num_rows; row++) for (col = 0; col < subband_num_cols; col++) { p3[row][col]=p3[row][col]+alpha*p5[col]; if (col==0) p5[col]=p1[row][col]+alpha*p5[col]+alpha* p_estimation[subband_origin_frame+frame][subband_origin_row +row][subband_origin_col + col]; else p5[col]=p1[row][col]+alpha*p5[col]+alpha*p4[row][col-1]; } } }//bbb return_value = 0; goto Return; Error: return_value = 1; Return: QccVectorFree(p2); QccVectorFree(p5); QccMatrixFree(p1,subband_num_rows); QccMatrixFree(p3,subband_num_rows); QccMatrixFree(p4,subband_num_rows); return(return_value); }static int QccWAVklttce3DIPPass(QccWAVSubbandPyramid3D *coefficients, char ***significance_map, char ***sign_array, double threshold, double ***p_estimation, double *subband_significance, QccENTArithmeticModel *model, QccBitBuffer *buffer, int **max_coefficient_bits, double alpha){ int subband,num_subbands; int return_value; num_subbands = QccWAVSubbandPyramid3DNumLevelsToNumSubbandsPacket(coefficients->temporal_num_levels, coefficients->spatial_num_levels); for (subband = 0; subband < num_subbands; subband++) { { return_value = QccWAVklttce3DRevEst(coefficients, significance_map, subband, subband_significance, p_estimation, alpha); if (return_value == 1) { QccErrorAddMessage("(QccWAVklttce3DIPPass): Error calling QccWAVklttce3DRevEst()"); return(1); } else { if (return_value == 2) return(2); } return_value = QccWAVklttce3DIPBand(coefficients, significance_map, sign_array, p_estimation, subband_significance, subband, threshold, model, buffer, alpha,max_coefficient_bits); if (return_value == 1) { QccErrorAddMessage("(QccWAVklttce3DIPPass): Error calling QccWAVklttce3DIPBand()"); return(1); } else { if (return_value == 2) return(2); } } } return(0);}int static QccWAVklttce3DSPass(QccWAVSubbandPyramid3D *coefficients, char ***significance_map, double threshold, QccENTArithmeticModel *model, QccBitBuffer *buffer, int **max_coefficient_bits){ int subband,num_subbands; int return_value; int subband_origin_frame; int subband_origin_row; int subband_origin_col; int subband_num_frames; int subband_num_rows; int subband_num_cols; int frame,row, col; int current_frame,current_row, current_col; char *p_char; int symbol; double p = 0.4; num_subbands = QccWAVSubbandPyramid3DNumLevelsToNumSubbandsPacket(coefficients->temporal_num_levels, coefficients->spatial_num_levels); for (subband = 0; subband < num_subbands; subband++) { if (QccWAVSubbandPyramid3DSubbandSize(coefficients, subband, &subband_num_frames, &subband_num_rows, &subband_num_cols)) { QccErrorAddMessage("(QccWAVklttce3DSPass): Error calling QccWAVSubbandPyramid3DSubbandSize()"); return(1); } if (QccWAVSubbandPyramid3DSubbandOffsets(coefficients, subband, &subband_origin_frame, &subband_origin_row, &subband_origin_col)) { QccErrorAddMessage("(QccWAVklttce3DSPass): Error calling QccWAVSubbandPyramid3DSubbandOffsets()"); return(1); } for (frame = 0; frame < subband_num_frames; frame++) { current_frame = subband_origin_frame + frame; if ((threshold - 0.000001) < pow((double)2, (double)(max_coefficient_bits[subband][frame]))) { for (row = 0; row < subband_num_rows; row++) { current_row = subband_origin_row + row; for (col = 0; col < subband_num_cols; col++) { current_col = subband_origin_col + col; p_char = &(significance_map[current_frame][current_row][current_col]); if (*p_char == QCCWAVKLTTCE3D_S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -