⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dcttce.c

📁 spiht for linux this is used to decod and encode vedio i wich all enjoy
💻 C
📖 第 1 页 / 共 5 页
字号:
                                          max_coefficient_bits);                if (return_value == 1)          {            QccErrorAddMessage("(QccWAVdcttceEncode): Error calling QccWAVdcttceIPPass()");            goto Error;          }        else          {            if (return_value == 2)              goto Finished;          }                return_value = QccWAVdcttceSPass(&image_subband_pyramid,                                             significance_map,                                         threshold,                                         model,                                         output_buffer,                                         max_coefficient_bits);        if (return_value == 1)          {            QccErrorAddMessage("(QccWAVdcttceEncode): Error calling QccWAVdcttceSPass()");            goto Error;          }        else          {            if (return_value == 2)              goto Finished;          }                  threshold /= 2.0;      }  else    while (threshold > 0.75)      {        return_value = QccWAVdcttceNZNPass(&image_subband_pyramid,                                               significance_map,                                           sign_array,                                           threshold,                                           p_estimation,                                           subband_significance,                                           model,                                           output_buffer,                                           max_coefficient_bits);                if (return_value == 1)          {            QccErrorAddMessage("(QccWAVdcttceEncode): Error calling QccWAVdcttceNZNPass()");            goto Error;          }        else          {            if (return_value == 2)              goto Finished;          }                return_value = QccWAVdcttceIPPass(&image_subband_pyramid,                                              significance_map,                                          sign_array,                                          threshold,                                          p_estimation,                                          subband_significance,                                          model,                                          output_buffer,                                          max_coefficient_bits);                if (return_value == 1)          {            QccErrorAddMessage("(QccWAVdcttceEncode): Error calling QccWAVdcttceIPPass()");            goto Error;          }        else          {            if (return_value == 2)              goto Finished;          }                return_value = QccWAVdcttceSPass(&image_subband_pyramid,                                             significance_map,                                         threshold,                                         model,                                         output_buffer,                                         max_coefficient_bits);        if (return_value == 1)          {            QccErrorAddMessage("(QccWAVdcttceEncode): Error calling QccWAVdcttceSPass()");            goto Error;          }        else          {            if (return_value == 2)              goto Finished;          }                bitplane_cnt++;        threshold /= 2.0;      }    QccENTArithmeticEncodeFlush(model, output_buffer);   Finished:  return_value = 0;  goto Return; Error:  return_value = 1; Return:  QccENTArithmeticFreeModel(model);  QccWAVSubbandPyramidFree(&image_subband_pyramid);  if (sign_array != NULL)    {      for (row = 0; row < image->num_rows; row++)        if (sign_array[row] != NULL)          QccFree(sign_array[row]);      QccFree(sign_array);    }  if (significance_map != NULL)    {      for (row = 0; row < image->num_rows; row++)        if (significance_map[row] != NULL)          QccFree(significance_map[row]);      QccFree(significance_map);    }  if (p_estimation != NULL)    {      for (row = 0; row < image->num_rows; row++)        if (p_estimation[row] != NULL)          QccFree(p_estimation[row]);      QccFree(p_estimation);    }  if (subband_significance != NULL)    QccFree(subband_significance);  if (max_coefficient_bits != NULL)    QccFree(max_coefficient_bits);  return(return_value);}static int QccWAVdcttceDecodeInverseDCT(QccWAVSubbandPyramid                                        *image_subband_pyramid,                                        char **sign_array,                                        QccIMGImageComponent *image,                                        double image_mean,                                        double stepsize,                                        int overlap_sample,                                        double  smooth_factor){  int return_value;  int row, col;  int m, n;  int num_subbands,subband;  int subband_origin_row;  int subband_origin_col;  int subband_num_rows;  int subband_num_cols;  int num_levels;  QccMatrixInt dctrow_array = NULL;  int block_size;  num_subbands =    QccWAVSubbandPyramidNumLevelsToNumSubbands(image_subband_pyramid->num_levels);    if (stepsize > 0)    for (subband = 0; subband < num_subbands; subband++)      {        if (QccWAVSubbandPyramidSubbandSize(image_subband_pyramid,                                            subband,                                            &subband_num_rows,                                            &subband_num_cols))          {            QccErrorAddMessage("(QccWAVdcttceDecodeInverseDCT): Error calling QccWAVSubbandPyramidSubbandSize()");            goto Error;          }        if (QccWAVSubbandPyramidSubbandOffsets(image_subband_pyramid,                                               subband,                                               &subband_origin_row,                                               &subband_origin_col))          {            QccErrorAddMessage("(QccWAVdcttceDecodeInverseDCT): Error calling QccWAVSubbandPyramidSubbandOffsets()");            goto Error;          }                 for (row = 0; row < subband_num_rows; row++)          for (col = 0; col < subband_num_cols; col++)            {              if (sign_array[subband_origin_row + row]                  [subband_origin_col + col])                image_subband_pyramid->matrix                  [subband_origin_row + row][subband_origin_col + col] *= -1;              image_subband_pyramid->matrix                [subband_origin_row + row][subband_origin_col + col] *=                stepsize;            }      }  else    {      for (row = 0; row < image_subband_pyramid->num_rows; row++)        for (col = 0; col < image_subband_pyramid->num_cols; col++)          if (sign_array[row][col])            image_subband_pyramid->matrix[row][col] *= -1;      }    if ((dctrow_array = QccMatrixIntAlloc(image->num_rows,                                        image->num_cols)) == NULL)    {      QccErrorAddMessage("(QccWAVdcttceDecodeInverseDCT): Error calling QccMatrixIntAlloc()");      goto Error;    }    num_levels = image_subband_pyramid->num_levels;  block_size = (1 << num_levels);    if (QccWAVdcttceCreateDCTSubbandMatrix(dctrow_array,                                         num_levels,                                         block_size,                                         image->num_rows))    {      QccErrorAddMessage("(QccWAVdcttceDecodeInverseDCT): Error calling QccDCT2SubnandMatrix()");      goto Error;    }    for (m = 0; m < image->num_rows; m++)    for (n = 0; n < image->num_cols; n++)      image->image[dctrow_array[m][n]][dctrow_array[n][m]] =        image_subband_pyramid->matrix[m][n];    if (QccIMGImageComponentInverseLBT(image,                                     image,                                     overlap_sample,                                     block_size,                                     smooth_factor))    {      QccErrorAddMessage("(QccWAVTarpDecodeInverseDCT): Error calling QccIMGImageComponentInverseLBT()");      goto Error;    }    if (QccIMGImageComponentAddMean(image,                                  image_mean))    {      QccErrorAddMessage("(QccWAVTarpDecodeInverseDCT): Error calling QccWAVSubbandPyramidAddMean()");      goto Error;    }    if (QccIMGImageComponentSetMaxMin(image))    {      QccErrorAddMessage("(QccWAVdcttceDecodeInverseDCT): Error calling QccIMGImageComponentSetMaxMin()");      goto Error;    }    return_value = 0;  goto Return; Error:  return_value = 1; Return:  QccMatrixIntFree(dctrow_array, image->num_rows);  return(return_value);}int QccWAVdcttceDecodeHeader(QccBitBuffer *input_buffer,                              int *num_levels,                              int *num_rows,                             int *num_cols,                             double *image_mean,                             double *stepsize,                             int *max_coefficient_bits,                             int *overlap_sample,                             double *smooth_factor){  int return_value;  unsigned char ch;    if (QccBitBufferGetChar(input_buffer, &ch))    {      QccErrorAddMessage("(QccWAVdcttceDecodeHeader): Error calling QccBitBufferPuChar()");      goto Error;    }  *num_levels = (int)ch;    if (QccBitBufferGetInt(input_buffer, num_rows))    {      QccErrorAddMessage("(QccWAVdcttceDecodeHeader): Error calling QccBitBufferGetInt()");      goto Error;    }    if (QccBitBufferGetInt(input_buffer, num_cols))    {      QccErrorAddMessage("(QccWAVdcttceDecodeHeader): Error calling QccBitBufferGetInt()");      goto Error;    }    if (QccBitBufferGetDouble(input_buffer, image_mean))    {      QccErrorAddMessage("(QccWAVdcttceDecodeHeader): Error calling QccBitBufferGetDouble()");      goto Error;    }  if (QccBitBufferGetDouble(input_buffer, stepsize))    {      QccErrorAddMessage("(QccWAVdcttceDecodeHeader): Error calling QccBitBufferGetDouble()");      goto Error;    }    if (QccBitBufferGetInt(input_buffer, max_coefficient_bits))    {      QccErrorAddMessage("(QccWAVdcttceDecodeHeader): Error calling QccBitBufferGetChar()");      goto Error;    }  if (QccBitBufferGetInt(input_buffer, overlap_sample))    {      QccErrorAddMessage("(QccWAVdcttceDecodeHeader): Error calling QccBitBufferGetChar()");      goto Error;    }  if (QccBitBufferGetDouble(input_buffer, smooth_factor))    {      QccErrorAddMessage("(QccWAVdcttceDecodeHeader): Error calling QccBitBufferGetDouble()");      goto Error;    }    return_value = 0;  goto Return; Error:  return_value = 1; Return:  return(return_value);}int QccWAVdcttceDecode(QccBitBuffer *input_buffer,                       QccIMGImageComponent *image,                       int num_levels,                       double image_mean,                       double stepsize,                       int max_coefficient_bits,                       int target_bit_cnt,                       int overlap_sample,                       double smooth_factor){  int return_value;  QccENTArithmeticModel *model = NULL;  QccWAVSubbandPyramid image_subband_pyramid;  char **sign_array = NULL;  char **significance_map = NULL;  double **p_estimation = NULL;  int *max_bits = NULL;  double *subband_significance = NULL;  double threshold;  int row, col;  int num_symbols[1] = { 2 };  int num_subbands;  int bitplane_cnt = 0;    if (image == NULL)    return(0);  if (input_buffer == NULL)    return(0);    num_subbands = QccWAVSubbandPyramidNumLevelsToNumSubbands(num_levels);    if ((max_bits = (int *)malloc(sizeof(int) * num_subbands)) == NULL)    {      QccErrorAddMessage("(QccWAVdcttceDecode): Error allocating memory");      goto Error;    }    if (QccWAVdcttceDecodeBitPlaneInfo(input_buffer,                                     num_subbands,                                     max_bits,                                     max_coefficient_bits))    {      QccErrorAddMessage("(QccWAVdcttceDecode): Error calling QccWAVdcttceEncodeBitPlaneInfo()");      goto Error;    }    QccWAVSubbandPyramidInitialize(&image_subband_pyramid);    image_subband_pyramid.num_levels = num_levels;  image_subband_pyramid.num_rows = image->num_rows;  image_subband_pyramid.num_cols = image->num_c

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -