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

📄 klttce3d_lossless.c

📁 spiht for linux this is used to decod and encode vedio i wich all enjoy
💻 C
📖 第 1 页 / 共 5 页
字号:
                                    threshold)                                  {                                    symbol = 1;                                    coefficients->volume[current_frame][current_row][current_col] -=                                      threshold;                                  }                                else                                  symbol = 0;                                                          return_value =                                  QccENTArithmeticEncode(&symbol, 1, model, buffer);                                if (return_value == 1)                                  return(1);                                else                                  {                                    if (return_value == 2)                                      return(2);                                  }                              }                            else                              {                                if (QccENTArithmeticDecode(buffer,                                                           model,                                                           &symbol,                                                           1))                                     return(2);                                                          if (symbol)                                  coefficients->volume[current_frame][current_row][current_col] =                                                                     threshold + (threshold >> 1);                              }                            p =                              p * QCCWAVKLTTCE3D_ALPHA_1D + symbol * QCCWAVKLTTCE3D_ALPHA_1D_O;			                               if (symbol)                              {                                subband_significance[subband]++;                                significance_map[current_frame][current_row][current_col] =                                  QCCWAVKLTTCE3D_S_NEW;                                                          if (QccWAVTce3DUpdateModel(model, 0.5))                                  {                                    QccErrorAddMessage("(QccWAVklttce3DIntNZNPass): Error calling QccWAVklttceUpdateModel()");                                    return(1);                                  }                                                          if (buffer->type == QCCBITBUFFER_OUTPUT)                                  {                                    symbol =                                      (int)(sign_array[current_frame][current_row][current_col]);                                                                  return_value =                                      QccENTArithmeticEncode(&symbol,                                                             1,                                                             model,                                                             buffer);                                    if (return_value == 1)                                      return(1);                                    else                                      {                                        if (return_value == 2)                                          return(2);                                      }                                         }                                else                                  {                                    if (QccENTArithmeticDecode(buffer,                                                               model,                                                               &symbol,                                                               1))                                      return(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);                              }                          }                      }                  }                   }          }      }    }  return(0);}static int QccWAVklttce3DIntIPBand(QccWAVSubbandPyramid3DInt *coefficients,                                   char ***significance_map,                                   char ***sign_array,                                   double ***p_estimation,                                   double *subband_significance,                                   int subband,                                   int threshold,                                   QccENTArithmeticModel *model,                                   QccBitBuffer *buffer,                                   double alpha,int **max_coefficient_bits){    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;  QccMatrix p1=NULL;  QccVector p2 = NULL;  QccMatrix p3=NULL;  QccMatrix p4=NULL;  QccVector p5 = NULL;  double p;  double p_forward;  double p_parent = 0;  int parent_subband;     double scale;  double parent_density = 0;  double child_density;   int v;  int symbol;  double p_lowerbound = 0;  double weight[2];  double filter_coef;  double increment;  char *p_char;   // initialization all the constants  filter_coef = (1 - alpha) * (1 - alpha)*(1 - alpha) / (3*alpha + alpha*alpha*alpha)/3;   weight[0] = (1 - alpha) * (1 - alpha)* (1 - alpha)/((1 + alpha)*(1 + alpha)*(1 + alpha));  weight[1] = (2*3*alpha + 2*alpha*alpha*alpha) / ((1 + alpha)*(1 + alpha)*(1 + alpha));  if (QccWAVSubbandPyramid3DIntSubbandSize(coefficients,                                           subband,                                           &subband_num_frames,                                           &subband_num_rows,                                           &subband_num_cols))    {      QccErrorAddMessage("(QccWAVklttce3DIntIPBand): Error calling QccWAVSubbandPyramid3DIntSubbandSize()");      goto Error;    }  if (QccWAVSubbandPyramid3DIntSubbandOffsets(coefficients,                                              subband,                                              &subband_origin_frame,                                              &subband_origin_row,                                              &subband_origin_col))    {      QccErrorAddMessage("(QccWAVklttce3DIntIPBand): Error calling QccWAVSubbandPyramid3DSubbandOffsets()");      goto Error;    }           if ((p1 = QccMatrixAlloc(subband_num_rows,subband_num_cols)) == NULL)    {      QccErrorAddMessage("(QccWAVklttce3DIntIPBand): Error calling QccMatrixAlloc()");      goto Error;    }  if ((p2 = QccVectorAlloc(subband_num_cols)) == NULL)    {      QccErrorAddMessage("(QccWAVklttce3DIntIPBand): Error calling QccVectorAlloc()");      goto Error;    }  if ((p3 = QccMatrixAlloc(subband_num_rows,subband_num_cols)) == NULL)    {      QccErrorAddMessage("(QccWAVklttce3DIntIPBand): Error calling QccMatrixAlloc()");      goto Error;    }  if ((p4 = QccMatrixAlloc(subband_num_rows,subband_num_cols)) == NULL)    {      QccErrorAddMessage("(QccWAVklttce3DIPBand): Error calling QccMatrixAlloc()");      goto Error;    }  if ((p5 = QccVectorAlloc(subband_num_cols)) == NULL)    {      QccErrorAddMessage("(QccWAVklttce3DIntIPBand): Error calling QccVectorAlloc()");      goto Error;    }  child_density =    subband_significance[subband] / (subband_num_frames*subband_num_rows * subband_num_cols);  p_lowerbound = 1.0 / (subband_num_frames*subband_num_rows * subband_num_cols);    if((subband%(3*coefficients->spatial_num_levels+1))<=3)    {      if((subband%(3*coefficients->spatial_num_levels+1))==0)	{	            parent_subband = 0;          parent_density =            subband_significance[parent_subband] /            (subband_num_frames*subband_num_rows * subband_num_cols) ;	    	}      if((subband%(3*coefficients->spatial_num_levels+1))==1)	{	 	  parent_subband = subband - 1;          parent_density =            subband_significance[parent_subband] /            (subband_num_frames*subband_num_rows * subband_num_cols) ;	}      if((subband%(3*coefficients->spatial_num_levels+1))==2)	{	  parent_subband = subband - 2;          parent_density =            subband_significance[parent_subband] /            (subband_num_frames*subband_num_rows * subband_num_cols) ;	}      if((subband%(3*coefficients->spatial_num_levels+1))==3)	{	  parent_subband = subband - 3;          parent_density =            subband_significance[parent_subband] /            (subband_num_frames*subband_num_rows * subband_num_cols) ;	}    }  else    {      parent_subband = subband - 3;      parent_density =        subband_significance[parent_subband] /        (subband_num_frames*subband_num_rows * subband_num_cols) * 4;    }    for (row = 0; row < subband_num_rows; row++)    for (col = 0; col < subband_num_cols; col++)      p3[row][col]= p_estimation[0][subband_origin_row+row][subband_origin_col+col];  scale =    QccMathMax(child_density, p_lowerbound) /    QccMathMax(parent_density, p_lowerbound);   increment =    1.0 / (subband_num_frames*subband_num_rows * subband_num_cols) /    QccMathMax(parent_density, p_lowerbound);  for (frame = 0; frame < subband_num_frames; frame++)    {//aaaa      current_frame=subband_origin_frame+frame;      if ((threshold - 0.000001) <          pow((double)2, (double)max_coefficient_bits[subband][frame]))        {          for (col = 0; col < subband_num_cols; col++)            p2[col] =p_estimation[current_frame][subband_origin_row][subband_origin_col+col];	           for (row = 0; row < subband_num_rows; row++)            {  //aaa                current_row = subband_origin_row + row;              for (col = 0; col < subband_num_cols; col++)                { //aa                    current_col = subband_origin_col + col;                  p_char = &(significance_map[current_frame][current_row][current_col]);                  if (col == 0)                    p_forward =alpha * (QCCWAVKLTTCE3D_BOUNDARY_VALUE + p2[col] +                                        p3[row][col]);                  else                    p_forward = alpha * (p1[row][col-1] + p2[col] + p3[row][col]);                  if (*p_char < QCCWAVKLTTCE3D_S)                    { //a                           p = p_forward + p_estimation[current_frame][current_row][current_col];                      if (current_frame!= 0)                        { //b                          if((subband%(3*coefficients->spatial_num_levels+1))<=3)                            {		              if((subband%(3*coefficients->spatial_num_levels+1))==0)                                {                                  if((subband/(3*coefficients->spatial_num_levels+1))<=1)                                    p_parent = p_estimation[current_frame-1][current_row][current_col];	   			          else                                    p_parent = p_estimation[current_frame/2][current_row][current_col];                                } 			      if ((subband%(3*coefficients->spatial_num_levels+1))==1)			        p_parent = p_estimation[current_frame][current_row-subband_num_rows][current_col];			      if((subband%(3*coefficients->spatial_num_levels+1))==2)			        p_parent = p_estimation[current_frame][current_row][current_col-subband_num_cols];			      if((subband%(3*coefficients->spatial_num_levels+1))==3)			        p_parent = p_estimation[current_frame][current_row-subband_num_rows][current_col-subband_num_cols];			    }                          else                            p_parent = p_estimation[current_frame][current_row/2][current_col/2];                          {                                      p_parent = QccMathMin(p_parent*scale, 0.8);                            p =                              p * QCCWAVKLTTCE3D_CURRENT_SCALE +                              QCCWAVKLTTCE3D_PARENT_SCALE * p_parent;                          }                        }//b                      if(p>1)                        {                          p=1;                        }                      if (QccWAVTce3DUpdateModel(model, p))                        {                          QccErrorAddMessage("(QccWAVklttce3DIntIPBand): Error calling QccWAVklttceUpdateModel()");                          return_value = 1;                          goto Error;                        }                      if (buffer->type == QCCBITBUFFER_OUTPUT)                        {                          if (coefficients->volume[current_frame][current_row][current_col] >=                              threshold)                            {                              symbol = 1;                              coefficients->volume[current_frame][current_row][current_col] -=                                threshold;                            }                          else                            symbol = 0;                          return_value =                            QccENTArithmeticEncode(&symbol, 1,model, buffer);                        }

⌨️ 快捷键说明

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