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

📄 subband_pyramid.c

📁 spiht for linux this is used to decod and encode vedio i wich all enjoy
💻 C
📖 第 1 页 / 共 4 页
字号:
      subband_images[subband].num_cols = subband_num_cols;      if (QccIMGImageComponentAlloc(&(subband_images[subband])))        {          QccErrorAddMessage("(QccWAVSubbandPyramidAssembleFromDat): Error calling QccIMGImageComponentAlloc()");          goto Error;        }            tile_dimension =         sqrt((double)vector_dimensions[subband]);      if (QccIMGDatasetToImageComponent(&subband_images[subband],                                        &input_datasets[subband],                                         tile_dimension, tile_dimension))        {          QccErrorAddMessage("(QccWAVSubbandPyramidAssembleFromDat): Error calling QccIMGDatToImageComponent()");          goto Error;        }    }    if (QccWAVSubbandPyramidAssembleFromImageComponent(subband_images,                                                     subband_pyramid))    {      QccErrorAddMessage("(QccWAVSubbandPyramidAssembleFromDat): Error calling QccWAVSubbandPyramidAssembleFromImageComponent()");      goto Error;    }    return_value = 0;  goto Return; Error:  return_value = 1; Return:  if (subband_images != NULL)    {      for (subband = 0; subband < num_subbands; subband++)        QccIMGImageComponentFree(&(subband_images[subband]));      QccFree(subband_images);    }  return(return_value);}int QccWAVSubbandPyramidRasterScan(const QccWAVSubbandPyramid *subband_pyramid,                                   QccVector scanned_coefficients){  int num_subbands;  int subband;  int subband_num_rows, subband_num_cols;  int subband_row_offset, subband_col_offset;  int row, col;  int coefficient;    if (subband_pyramid == NULL)    return(0);  if (scanned_coefficients == NULL)    return(0);    num_subbands =    QccWAVSubbandPyramidNumLevelsToNumSubbands(subband_pyramid->num_levels);    coefficient = 0;  for (subband = 0; subband < num_subbands; subband++)    {      if (QccWAVSubbandPyramidSubbandSize(subband_pyramid,                                          subband,                                          &subband_num_rows,                                          &subband_num_cols))        {          QccErrorAddMessage("(QccWAVSubbandPyramidRasterScan): Error calling QccWAVSubbandPyramidSubbandSize()");          return(1);        }      if (QccWAVSubbandPyramidSubbandOffsets(subband_pyramid,                                             subband,                                             &subband_row_offset,                                             &subband_col_offset))        {          QccErrorAddMessage("(QccWAVSubbandPyramidRasterScan): Error calling QccWAVSubbandPyramidSubbandOffsets()");          return(1);        }            for (row = 0; row < subband_num_rows; row++)        for (col = 0; col < subband_num_cols; col++)          scanned_coefficients[coefficient++] =            subband_pyramid->matrix            [subband_row_offset + row]            [subband_col_offset + col];    }    return(0);}int QccWAVSubbandPyramidInverseRasterScan(QccWAVSubbandPyramid                                          *subband_pyramid,                                          const QccVector                                          scanned_coefficients){  int num_subbands;  int subband;  int subband_num_rows, subband_num_cols;  int subband_row_offset, subband_col_offset;  int row, col;  int coefficient;  if (subband_pyramid == NULL)    return(0);  if (scanned_coefficients == NULL)    return(0);    num_subbands =    QccWAVSubbandPyramidNumLevelsToNumSubbands(subband_pyramid->num_levels);    coefficient = 0;  for (subband = 0; subband < num_subbands; subband++)    {      if (QccWAVSubbandPyramidSubbandSize(subband_pyramid,                                          subband,                                          &subband_num_rows,                                          &subband_num_cols))        {          QccErrorAddMessage("(QccWAVSubbandPyramidInverseRasterScan): Error calling QccWAVSubbandPyramidSubbandSize()");          return(1);        }      if (QccWAVSubbandPyramidSubbandOffsets(subband_pyramid,                                             subband,                                             &subband_row_offset,                                             &subband_col_offset))        {          QccErrorAddMessage("(QccWAVSubbandPyramidInverseRasterScan): Error calling QccWAVSubbandPyramidSubbandOffsets()");          return(1);        }            for (row = 0; row < subband_num_rows; row++)        for (col = 0; col < subband_num_cols; col++)          subband_pyramid->matrix            [subband_row_offset + row]            [subband_col_offset + col] =            scanned_coefficients[coefficient++];    }    return(0);}int QccWAVSubbandPyramidDWT(QccWAVSubbandPyramid *subband_pyramid,                            int num_levels,                            const QccWAVWavelet *wavelet){  int return_value;  if (subband_pyramid == NULL)    return(0);  if (wavelet == NULL)    return(0);    if (subband_pyramid->num_levels != 0)    {      QccErrorAddMessage("(QccWAVSubbandPyramidDWT): Subband pyramid is already decomposed");      goto Error;    }  subband_pyramid->num_levels = num_levels;    if (QccWAVWaveletDWT2D(subband_pyramid->matrix,                         subband_pyramid->num_rows,                         subband_pyramid->num_cols,                         subband_pyramid->origin_row,                         subband_pyramid->origin_col,                         subband_pyramid->subsample_pattern_row,                         subband_pyramid->subsample_pattern_col,                         num_levels,                         wavelet))    {      QccErrorAddMessage("(QccWAVSubbandPyramidDWT): Error calling QccWAVWaveletDWT2D()");      goto Error;    }    return_value = 0;  goto Return; Error:  return_value = 1; Return:  return(return_value);}int QccWAVSubbandPyramidInverseDWT(QccWAVSubbandPyramid *subband_pyramid,                                   const QccWAVWavelet *wavelet){  int return_value;    if (subband_pyramid == NULL)    return(0);  if (wavelet == NULL)    return(0);    if (subband_pyramid->num_levels <= 0)    return(0);  if (QccWAVWaveletInverseDWT2D(subband_pyramid->matrix,                                subband_pyramid->num_rows,                                subband_pyramid->num_cols,                                subband_pyramid->origin_row,                                subband_pyramid->origin_col,                                subband_pyramid->subsample_pattern_row,                                subband_pyramid->subsample_pattern_col,                                subband_pyramid->num_levels,                                wavelet))    {      QccErrorAddMessage("(QccWAVSubbandPyramidInverseDWT): Error calling QccWAVWaveletDWT2D()");      goto Error;    }    subband_pyramid->num_levels = 0;    return_value = 0;  goto Return; Error:  return_value = 1; Return:  return(return_value);}int QccWAVSubbandPyramidShapeAdaptiveDWT(QccWAVSubbandPyramid *subband_pyramid,                                         QccWAVSubbandPyramid *mask,                                         int num_levels,                                         const QccWAVWavelet *wavelet){  int return_value;  if (subband_pyramid == NULL)    return(0);  if (mask == NULL)    return(0);  if (wavelet == NULL)    return(0);    if (subband_pyramid->num_levels != 0)    {      QccErrorAddMessage("(QccWAVSubbandPyramidShapeAdaptiveDWT): Subband pyramid is already decomposed");      goto Error;    }  if ((subband_pyramid->num_rows != mask->num_rows) ||      (subband_pyramid->num_cols != mask->num_cols))    {      QccErrorAddMessage("(QccWAVSubbandPyramidShapeAdaptiveDWT): Subband pyramid and mask must have same number of rows and columns");      goto Error;    }  if (QccWAVWaveletShapeAdaptiveDWT2D(subband_pyramid->matrix,                                      mask->matrix,                                      subband_pyramid->num_rows,                                      subband_pyramid->num_cols,                                      num_levels,                                      wavelet))    {      QccErrorAddMessage("(QccWAVSubbandPyramidShapeAdaptiveDWT): Error calling QccWAVWaveletShapeAdaptiveDWT2D()");      goto Error;    }    subband_pyramid->num_levels = num_levels;  mask->num_levels = num_levels;  return_value = 0;  goto Return; Error:  return_value = 1; Return:  return(return_value);}int QccWAVSubbandPyramidInverseShapeAdaptiveDWT(QccWAVSubbandPyramid                                                *subband_pyramid,                                                QccWAVSubbandPyramid *mask,                                                const QccWAVWavelet *wavelet){  int return_value;  if (subband_pyramid == NULL)    return(0);  if (mask == NULL)    return(0);  if (wavelet == NULL)    return(0);    if (subband_pyramid->num_levels <= 0)    return(0);    if ((subband_pyramid->num_rows != mask->num_rows) ||      (subband_pyramid->num_cols != mask->num_cols))    {      QccErrorAddMessage("(QccWAVSubbandPyramidInverseShapeAdaptiveDWT): Subband pyramid and mask must have same number of rows and columns");      goto Error;    }    if (subband_pyramid->num_levels != mask->num_levels)    {      QccErrorAddMessage("(QccWAVSubbandPyramidInverseShapeAdaptiveDWT): Subband pyramid and mask must have same number of levels of decomposition");      goto Error;    }    if (QccWAVWaveletInverseShapeAdaptiveDWT2D(subband_pyramid->matrix,                                             mask->matrix,                                             subband_pyramid->num_rows,                                             subband_pyramid->num_cols,                                             subband_pyramid->num_levels,                                             wavelet))    {      QccErrorAddMessage("(QccWAVSubbandPyramidInverseShapeAdaptiveDWT): Error calling QccWAVWaveletInverseShapeAdaptiveDWT2D()");      goto Error;    }    subband_pyramid->num_levels = 0;  mask->num_levels = 0;    return_value = 0;  goto Return; Error:  return_value = 1; Return:  return(return_value);}int QccWAVSubbandPyramidRedundantDWTSubsample(const QccMatrix *input_matrices,                                              QccWAVSubbandPyramid                                              *subband_pyramid,                                              const QccWAVWavelet *wavelet){  if (input_matrices == NULL)    return(0);  if (subband_pyramid == NULL)    return(0);  if (subband_pyramid->matrix == NULL)    {      QccErrorAddMessage("(QccWAVSubbandPyramidRedundantDWTSubsample): Subband pyramid is not allocated");      return(1);    }  if ((subband_pyramid->num_rows <= 0) ||      (subband_pyramid->num_cols <= 0) ||      (subband_pyramid->num_levels < 0))    {      QccErrorAddMessage("(QccWAVSubbandPyramidRedundantDWTSubsample): Subband pyramid is not setup properly");      return(1);    }  if (QccWAVWaveletRedundantDWT2DSubsample(input_matrices,                                           subband_pyramid->matrix,                                           subband_pyramid->num_rows,                                           subband_pyramid->num_cols,                                           subband_pyramid->num_levels,                                           subband_pyramid->subsample_pattern_row,                                           subband_pyramid->subsample_pattern_col,                                           wavelet))    {      QccErrorAddMessage("(QccWAVSubbandPyramidRedundantDWTSubsample): Error calling QccWAVWaveletRedundantDWT2DSubsample()");      return(1);    }  return(0);}

⌨️ 快捷键说明

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