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

📄 dcttce.c

📁 spiht for linux this is used to decod and encode vedio i wich all enjoy
💻 C
📖 第 1 页 / 共 5 页
字号:
      if (QccBitBufferPutBit(output_buffer, 1))        return(1);    }    return(0);}static int QccWAVdcttceDecodeBitPlaneInfo(QccBitBuffer *input_buffer,                                          int num_subbands,                                          int *max_bits,                                          int max_coefficient_bits){  int subband;  int bit_value;    max_bits[0] = max_coefficient_bits;    for (subband = 1; subband < num_subbands; subband++)    {      max_bits[subband] = max_coefficient_bits;      do        {          if (QccBitBufferGetBit(input_buffer,&bit_value))            return(1);          max_bits[subband]--;        }      while (bit_value == 0);      max_bits[subband]++;      }    return(0);}int QccWAVdcttceEncodeHeader(QccBitBuffer *output_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;    if (QccBitBufferPutChar(output_buffer, (unsigned char)num_levels))    {      QccErrorAddMessage("(QccWAVdcttceEncodeHeader): Error calling QccBitBufferPuChar()");      goto Error;    }    if (QccBitBufferPutInt(output_buffer, num_rows))    {      QccErrorAddMessage("(QccWAVdcttceEncodeHeader): Error calling QccBitBufferPutInt()");      goto Error;    }    if (QccBitBufferPutInt(output_buffer, num_cols))    {      QccErrorAddMessage("(QccWAVdcttceEncodeHeader): Error calling QccBitBufferPutInt()");      goto Error;    }    if (QccBitBufferPutDouble(output_buffer, image_mean))    {      QccErrorAddMessage("(QccWAVdcttceEncodeHeader): Error calling QccBitBufferPutDouble()");      goto Error;    }    if (QccBitBufferPutDouble(output_buffer, stepsize))    {      QccErrorAddMessage("(QccWAVdcttceEncodeHeader): Error calling QccBitBufferPutDouble()");      goto Error;    }    if (QccBitBufferPutInt(output_buffer, max_coefficient_bits))    {      QccErrorAddMessage("(QccWAVdcttceEncodeHeader): Error calling QccBitBufferPutInt()");      goto Error;    }    if (QccBitBufferPutInt(output_buffer, overlap_sample))    {      QccErrorAddMessage("(QccWAVdcttceEncodeHeader): Error calling QccBitBufferPutInt()");      goto Error;    }  if (QccBitBufferPutDouble(output_buffer, smooth_factor))    {      QccErrorAddMessage("(QccWAVdcttceEncodeHeader): Error calling QccBitBufferPutDouble()");      goto Error;    }  return_value = 0;  goto Return; Error:  return_value = 1; Return:  return(return_value);}static int QccWAVdcttceRevEst(QccWAVSubbandPyramid *coefficients,                              char **significance_map,                              int subband,                              double *subband_significance,                              double **p){  int return_value;  int subband_origin_row;  int subband_origin_col;  int subband_num_rows;  int subband_num_cols;  int row, col;  int current_row, current_col;  double p1, p3;  QccVector p2 = NULL;  char *p_char;  int v;    double filter_coef;  double alpha_v, alpha_h;    if (subband % 3==1)    {       //LH horizental more important?      alpha_h = QCCWAVTCE_ALPHA_HIGH;      alpha_v = QCCWAVTCE_ALPHA_LOW;    }  else    {      if (subband % 3==2)        {          alpha_h = QCCWAVTCE_ALPHA_LOW;          alpha_v = QCCWAVTCE_ALPHA_HIGH;           }      else        {          alpha_h = QCCWAVTCE_ALPHA;          alpha_v = QCCWAVTCE_ALPHA;        }    }    filter_coef = (1 - alpha_h) * (1 - alpha_v) / (2*alpha_h + 2*alpha_v);    subband_significance[subband] = 0.0;    if (QccWAVSubbandPyramidSubbandSize(coefficients,                                      subband,                                      &subband_num_rows,                                      &subband_num_cols))    {      QccErrorAddMessage("(QccWAVdcttceRevEst): Error calling QccWAVSubbandPyramidSubbandSize()");      goto Error;    }  if (QccWAVSubbandPyramidSubbandOffsets(coefficients,                                         subband,                                         &subband_origin_row,                                         &subband_origin_col))    {      QccErrorAddMessage("(QccWAVdcttceRevEst): Error calling QccWAVSubbandPyramidSubbandOffsets()");      goto Error;    }    if ((p2 = QccVectorAlloc(subband_num_cols)) == NULL)    {      QccErrorAddMessage("(QccWAVdcttceRevEst): Error calling QccVectorAlloc()");      goto Error;    }    p1 = QccMathMax(QCCWAVDCTTCE_BOUNDARY_VALUE,                  ((double)subband_significance[subband]) /                   (subband_num_rows*subband_num_cols)) *    (1 + alpha_h) / (2 * alpha_v + 2 * alpha_h);    for (col = 0; col < subband_num_cols; col++)    p2[col] = p1;    for (row = subband_num_rows - 1; row >= 0; row--)    {      p1 = p2[0]*(1 - alpha_v)/(1 + alpha_h);      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_row][current_col]);          p[current_row][current_col] = alpha_h * p1 + alpha_v*p2[col];          if (*p_char == QCCWAVDCTTCE_S)            {              p1 = alpha_h * p1 + filter_coef * QCCWAVTCE_REFINE_HOLDER;              subband_significance[subband] += QCCWAVTCE_REFINE_HOLDER;            }          else            {              v = (*p_char == QCCWAVDCTTCE_S_NEW);              p1 = alpha_h * p1 + filter_coef * v;              subband_significance[subband] += v;            }             p2[col] = p1 + alpha_v * p2[col];           }            p3 = p2[0]*(1 - alpha_v)/(1 + alpha_h);      for (col = 0; col < subband_num_cols; col++)        {          p_char = &(significance_map[current_row][subband_origin_col + col]);          p2[col] = p2[col] + alpha_h * p3;          if (*p_char == QCCWAVDCTTCE_S)            p3 = alpha_h * p3 + filter_coef * QCCWAVTCE_REFINE_HOLDER;          else            {              v = (*p_char == QCCWAVDCTTCE_S_NEW);              p3 = alpha_h * p3 + filter_coef * v;            }                }    }    return_value = 0;  goto Return; Error:  return_value = 1; Return:  QccVectorFree(p2);  return(return_value);}static int QccWAVUpdateNZNStatus(int subband_origin_row,                                 int subband_origin_col,                                 int subband_num_row,                                 int subband_num_col,                                 int row,                                 int col,                                 char** significance_map,                                 int subband){  //Updata neighbors  int current_row, current_col;  int shifted_row, shifted_col;  current_row = subband_origin_row + row;  current_col = subband_origin_col + col;    if (row > 0)    {        shifted_row = current_row - 1;      shifted_col = current_col;      if (significance_map[shifted_row][shifted_col] < QCCWAVDCTTCE_S)        significance_map[shifted_row][shifted_col] = QCCWAVDCTTCE_NZN_NEW;             if (col > 0)        {          shifted_row = current_row - 1;          shifted_col = current_col - 1;          if (significance_map[shifted_row][shifted_col] < QCCWAVDCTTCE_S)            significance_map[shifted_row][shifted_col] = QCCWAVDCTTCE_NZN_NEW;        }      if (col < subband_num_col - 1)        {          shifted_row = current_row - 1;          shifted_col = current_col + 1;          if (significance_map[shifted_row][shifted_col] < QCCWAVDCTTCE_S)            significance_map[shifted_row][shifted_col] = QCCWAVDCTTCE_NZN_NEW;        }    }  if (row < subband_num_row - 1)    {      shifted_row = current_row + 1;      shifted_col = current_col;      if (significance_map[shifted_row][shifted_col] < QCCWAVDCTTCE_S)        significance_map[shifted_row][shifted_col] = QCCWAVDCTTCE_NZN_NEW;            if (col > 0)        {          shifted_row = current_row + 1;          shifted_col = current_col - 1;          if (significance_map[shifted_row][shifted_col] < QCCWAVDCTTCE_S)            significance_map[shifted_row][shifted_col] = QCCWAVDCTTCE_NZN_NEW;        }      if (col < subband_num_col - 1)        {          shifted_row = current_row + 1;          shifted_col = current_col + 1;          if (significance_map[shifted_row][shifted_col] < QCCWAVDCTTCE_S)            significance_map[shifted_row][shifted_col] = QCCWAVDCTTCE_NZN_NEW;        }    }  if (col > 0)    {      shifted_row = current_row;      shifted_col = current_col - 1;        if (significance_map[shifted_row][shifted_col] < QCCWAVDCTTCE_S)        significance_map[shifted_row][shifted_col] = QCCWAVDCTTCE_NZN_NEW;    }  if (col < subband_num_col - 1)    {      shifted_row = current_row;      shifted_col = current_col + 1;      if (significance_map[shifted_row][shifted_col] < QCCWAVDCTTCE_S)        significance_map[shifted_row][shifted_col] = QCCWAVDCTTCE_NZN_NEW;    }    return(0);}static int QccWAVdcttceIPBand(QccWAVSubbandPyramid *coefficients,                              char **significance_map,                              char **sign_array,                              double **p_estimation,                              double *subband_significance,                              int subband,                              double threshold,                              QccENTArithmeticModel *model,                              QccBitBuffer *buffer){  int return_value;  int subband_origin_row;  int subband_origin_col;  int subband_num_rows;  int subband_num_cols;  int row, col;  int current_row, current_col;  double p1;  double p3;  double p;  double p_forward;  double p_parent;  QccVector p2 = NULL;  int parent_subband;     double scale;  double parent_density;  double child_density;   int v;  int symbol;  double p_lowerbound = 0;  double weight[2];  double filter_coef;  double increment;  char *p_char;  double alpha_v, alpha_h;    if (subband % 3==1)    {       //LH horizental more important      alpha_h = QCCWAVTCE_ALPHA_HIGH;      alpha_v = QCCWAVTCE_ALPHA_LOW;    }  else    {      if (subband % 3==2)        {          alpha_h = QCCWAVTCE_ALPHA_LOW;          alpha_v = QCCWAVTCE_ALPHA_HIGH;           }      else        {          alpha_h = QCCWAVTCE_ALPHA;          alpha_v = QCCWAVTCE_ALPHA;        }    }    // initialization all the constants  filter_coef = (1 - alpha_h)*(1 - alpha_v) / (2*alpha_h + 2*alpha_v);  weight[0] = (1 - alpha_h) * (1 - alpha_v)/((1 + alpha_h)*(1 + alpha_v));  weight[1] = (2*alpha_h + 2*alpha_v) / ((1 + alpha_h)*(1 + alpha_v));    if (QccWAVSubbandPyramidSubbandSize(coefficients,                                      subband,                                      &subband_num_rows,                                      &subband_num_cols))    {      QccErrorAddMessage("(QccWAVdcttceIPBand): Error calling QccWAVSubbandPyramidSubbandSize()");      goto Error;    }  if (QccWAVSubbandPyramidSubbandOffsets(coefficients,                                         subband,                                         &subband_origin_row,                                         &subband_origin_col))    {      QccErrorAddMessage("(QccWAVdcttceIPBand): Error calling QccWAVSubbandPyramidSubbandOffsets()");      goto Error;    }  

⌨️ 快捷键说明

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