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

📄 subband_pyramid3d.c

📁 spiht for linux this is used to decod and encode vedio i wich all enjoy
💻 C
📖 第 1 页 / 共 4 页
字号:
      break;    case QCCWAVSUBBANDPYRAMID3D_PACKET:      subband_pyramid->transform_type = QCCWAVSUBBANDPYRAMID3D_PACKET;      subband_pyramid->spatial_num_levels = spatial_num_levels;      subband_pyramid->temporal_num_levels = temporal_num_levels;      if (QccWAVWaveletPacketDWT3D(subband_pyramid->volume,                                    subband_pyramid->num_frames,                                   subband_pyramid->num_rows,                                   subband_pyramid->num_cols,                                   subband_pyramid->origin_frame,                                   subband_pyramid->origin_row,                                   subband_pyramid->origin_col,                                   subband_pyramid->subsample_pattern_frame,                                   subband_pyramid->subsample_pattern_row,                                   subband_pyramid->subsample_pattern_col,                                   temporal_num_levels,                                   spatial_num_levels,                                   wavelet))        {          QccErrorAddMessage("(QccWAVSubbandPyramid3DDWT): Error calling QccWAVWaveletPacketDWT3D()");          goto Error;        }      break;    default:      QccErrorAddMessage("(QccWAVSubbandPyramid3DDWT): Unrecognized transform type");      goto Error;    }    return_value = 0;  goto Return; Error:  return_value = 1; Return:  return(return_value);}int QccWAVSubbandPyramid3DInverseDWT(QccWAVSubbandPyramid3D *subband_pyramid,                                     const QccWAVWavelet *wavelet){  int return_value;    if (subband_pyramid == NULL)    return(0);  if (wavelet == NULL)    return(0);    if ((subband_pyramid->spatial_num_levels <= 0) &&      (subband_pyramid->temporal_num_levels <= 0))    return(0);  switch (subband_pyramid->transform_type)    {    case QCCWAVSUBBANDPYRAMID3D_DYADIC:      if (QccWAVWaveletInverseDyadicDWT3D(subband_pyramid->volume,                                          subband_pyramid->num_frames,                                          subband_pyramid->num_rows,                                          subband_pyramid->num_cols,                                          subband_pyramid->origin_frame,                                          subband_pyramid->origin_row,                                          subband_pyramid->origin_col,                                          subband_pyramid->subsample_pattern_frame,                                          subband_pyramid->subsample_pattern_row,                                          subband_pyramid->subsample_pattern_col,                                          subband_pyramid->spatial_num_levels,                                          wavelet))        {          QccErrorAddMessage("(QccWAVSubbandPyramid3DInverseDWT): Error calling QccWAVWaveletDyadicInverseDWT3D()");          goto Error;        }      break;    case QCCWAVSUBBANDPYRAMID3D_PACKET:      if (QccWAVWaveletInversePacketDWT3D(subband_pyramid->volume,                                          subband_pyramid->num_frames,                                          subband_pyramid->num_rows,                                          subband_pyramid->num_cols,                                          subband_pyramid->origin_frame,                                          subband_pyramid->origin_row,                                          subband_pyramid->origin_col,                                          subband_pyramid->subsample_pattern_frame,                                          subband_pyramid->subsample_pattern_row,                                          subband_pyramid->subsample_pattern_col,                                          subband_pyramid->temporal_num_levels,                                          subband_pyramid->spatial_num_levels,                                          wavelet))        {          QccErrorAddMessage("(QccWAVSubbandPyramid3DInverseDWT): Error calling QccWAVWaveletPacketInverseDWT3D()");          goto Error;        }      break;    default:      QccErrorAddMessage("(QccWAVSubbandPyramid3DInverseDWT): Unrecognized transform type");      goto Error;    }    subband_pyramid->spatial_num_levels = 0;  subband_pyramid->temporal_num_levels = 0;    return_value = 0;  goto Return; Error:  return_value = 1; Return:  return(return_value);}int QccWAVSubbandPyramid3DShapeAdaptiveDWT(QccWAVSubbandPyramid3D                                           *subband_pyramid,                                           QccWAVSubbandPyramid3D *mask,                                           int transform_type,                                           int temporal_num_levels,                                           int spatial_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->spatial_num_levels ||      subband_pyramid->temporal_num_levels)    {      QccErrorAddMessage("(QccWAVSubbandPyramid3DShapeAdaptiveDWT): Subband pyramid is already decomposed");      goto Error;    }    if ((subband_pyramid->num_frames != mask->num_frames) ||      (subband_pyramid->num_rows != mask->num_rows) ||      (subband_pyramid->num_cols != mask->num_cols))    {      QccErrorAddMessage("(QccWAVSubbandPyramid3DShapeAdaptiveDWT): Subband pyramid and mask must have same number of frames, rows, and columns");      goto Error;    }    switch (transform_type)    {    case QCCWAVSUBBANDPYRAMID3D_DYADIC:      subband_pyramid->transform_type = QCCWAVSUBBANDPYRAMID3D_DYADIC;      mask->transform_type = QCCWAVSUBBANDPYRAMID3D_DYADIC;      if (spatial_num_levels != temporal_num_levels)        {          QccErrorAddMessage("(QccWAVSubbandPyramid3DDWT): Spatial and temporal number of levels must be identical for a dyadic transform");          goto Error;        }      subband_pyramid->spatial_num_levels =        subband_pyramid->temporal_num_levels = spatial_num_levels;      mask->spatial_num_levels =        mask->temporal_num_levels = spatial_num_levels;      if (QccWAVWaveletShapeAdaptiveDyadicDWT3D(subband_pyramid->volume,                                                mask->volume,                                                subband_pyramid->num_frames,                                                subband_pyramid->num_rows,                                                subband_pyramid->num_cols,                                                spatial_num_levels,                                                wavelet))        {          QccErrorAddMessage("(QccWAVSubbandPyramid3DShapeAdaptiveDWT): Error calling QccWAVWaveletShapeAdaptiveDyadicDWT3D()");          goto Error;        }      break;    case QCCWAVSUBBANDPYRAMID3D_PACKET:      subband_pyramid->transform_type = QCCWAVSUBBANDPYRAMID3D_PACKET;      subband_pyramid->spatial_num_levels = spatial_num_levels;      subband_pyramid->temporal_num_levels = temporal_num_levels;      mask->transform_type = QCCWAVSUBBANDPYRAMID3D_PACKET;      mask->spatial_num_levels = spatial_num_levels;      mask->temporal_num_levels = temporal_num_levels;      if (QccWAVWaveletShapeAdaptivePacketDWT3D(subband_pyramid->volume,                                                mask->volume,                                                subband_pyramid->num_frames,                                                subband_pyramid->num_rows,                                                subband_pyramid->num_cols,                                                temporal_num_levels,                                                spatial_num_levels,                                                wavelet))        {          QccErrorAddMessage("(QccWAVSubbandPyramid3DShapeAdaptiveDWT): Error calling QccWAVWaveletShapeAdaptivePacketDWT3D()");          goto Error;        }      break;    default:      QccErrorAddMessage("(QccWAVSubbandPyramid3DShapeAdaptiveDWT): Unrecognized transform type");      goto Error;    }    return_value = 0;  goto Return; Error:  return_value = 1; Return:  return(return_value);}int QccWAVSubbandPyramid3DInverseShapeAdaptiveDWT(QccWAVSubbandPyramid3D                                                  *subband_pyramid,                                                  QccWAVSubbandPyramid3D *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->spatial_num_levels <= 0) &&      (subband_pyramid->temporal_num_levels <= 0))    return(0);    if ((subband_pyramid->num_frames != mask->num_frames) ||      (subband_pyramid->num_rows != mask->num_rows) ||      (subband_pyramid->num_cols != mask->num_cols))    {      QccErrorAddMessage("(QccWAVSubbandPyramid3DInverseShapeAdaptiveDWT): Subband pyramid and mask must have same number of frames, rows, and columns");      goto Error;    }    if ((subband_pyramid->spatial_num_levels != mask->spatial_num_levels) ||      (subband_pyramid->temporal_num_levels != mask->temporal_num_levels))    {      QccErrorAddMessage("(QccWAVSubbandPyramid3DInverseShapeAdaptiveDWT): Subband pyramid and mask must have same number of levels of decomposition");      goto Error;    }    switch (subband_pyramid->transform_type)    {    case QCCWAVSUBBANDPYRAMID3D_DYADIC:      if (QccWAVWaveletInverseShapeAdaptiveDyadicDWT3D(subband_pyramid->volume,                                                       mask->volume,                                                       subband_pyramid->num_frames,                                                       subband_pyramid->num_rows,                                                       subband_pyramid->num_cols,                                                       subband_pyramid->spatial_num_levels,                                                       wavelet))        {          QccErrorAddMessage("(QccWAVSubbandPyramid3DInverseShapeAdaptiveDWT): Error calling QccWAVWaveletInverseShapeAdaptiveDyadicDWT3D)");          goto Error;        }      break;    case QCCWAVSUBBANDPYRAMID3D_PACKET:      if (QccWAVWaveletInverseShapeAdaptivePacketDWT3D(subband_pyramid->volume,                                                       mask->volume,                                                       subband_pyramid->num_frames,                                                       subband_pyramid->num_rows,                                                       subband_pyramid->num_cols,                                                       subband_pyramid->temporal_num_levels,                                                       subband_pyramid->spatial_num_levels,                                                       wavelet))        {          QccErrorAddMessage("(QccWAVSubbandPyramid3DInverseShapeAdaptiveDWT): Error calling QccWAVWaveletInverseShapeAdaptiveDyadicDWT3D)");          goto Error;        }      break;    default:      QccErrorAddMessage("(QccWAVSubbandPyramid3DInverseShapeAdaptiveDWT): Unrecognized transform type");      goto Error;    }    subband_pyramid->spatial_num_levels = 0;  subband_pyramid->temporal_num_levels = 0;  mask->spatial_num_levels = 0;  mask->temporal_num_levels = 0;    return_value = 0;  goto Return; Error:  return_value = 1; Return:  return(return_value);}int QccWAVSubbandPyramid3DPacketToDyadic(QccWAVSubbandPyramid3D                                         *subband_pyramid,                                         int num_levels){  int return_value;  QccWAVWavelet lazy_wavelet_transform;  QccWAVWaveletInitialize(&lazy_wavelet_transform);  if (subband_pyramid == NULL)    return(0);  if (subband_pyramid->volume == NULL)    return(0);  if (subband_pyramid->transform_type != QCCWAVSUBBANDPYRAMID3D_PACKET)    {      QccErrorAddMessage("(QccWAVSubbandPyramid3DPacketToDyadic): Subband pyramid is not a packet decomposition");      goto Error;    }  if (QccWAVWaveletCreate(&lazy_wavelet_transform, "LWT.lft", "symmetric"))    {      QccErrorAddMessage("(QccWAVSubbandPyramid3DPacketToDyadic): Error calling QccWAVWaveletCreate()");      goto Error;    }        if (QccWAVSubbandPyramid3DInverseDWT(subband_pyramid,                                       &lazy_wavelet_transform))    {      QccErrorAddMessage("(QccWAVSubbandPyramid3DPacketToDyadic): Error calling QccWAVSubbandPyramid3DInverseDWT()");      goto Error;    }  if (QccWAVSubbandPyramid3DDWT(subband_pyramid,                                QCCWAVSUBBANDPYRAMID3D_DYADIC,                                num_levels,                                num_levels,                                &lazy_wavelet_transform))    {      QccErrorAddMessage("(QccWAVSubbandPyramid3DPacketToDyadic): Error calling QccWAVSubbandPyramid3DDWT()");      goto Error;    }  return_value = 0;  goto Return; Error:  return_value = 1; Return:  QccWAVWaveletFree(&lazy_wavelet_transform);  return(return_value);}int QccWAVSubbandPyramid3DDyadicToPacket(QccWAVSubbandPyramid3D                                         *subband_pyramid,                                         int temporal_num_levels,                                         int spatial_num_levels){  int return_value;  QccWAVWavelet lazy_wavelet_transform;  QccWAVWaveletInitialize(&lazy_wavelet_transform);  if (subband_pyramid == NULL)    return(0);  if (subband_pyramid->volume == NULL)    return(0);  if (subband_pyramid->transform_type != QCCWAVSUBBANDPYRAMID3D_DYADIC)    {      QccErrorAddMessage("(QccWAVSubbandPyramid3DDyadicToPacket): Subband pyramid is not a dyadic decomposition");      goto Error;    }  if (QccWAVWaveletCreate(&lazy_wavelet_transform, "LWT.lft", "symmetric"))    {      QccErrorAddMessage("(QccWAVSubbandPyramid3DDyadicToPacket): Error calling QccWAVWaveletCreate()");      goto Error;    }        if (QccWAVSubbandPyramid3DInverseDWT(subband_pyramid,                                       &lazy_wavelet_transform))    {      QccErrorAddMessage("(QccWAVSubbandPyramid3DDyadicToPacket): Error calling QccWAVSubbandPyramid3DInverseDWT()");      goto Error;    }  if (QccWAVSubbandPyramid3DDWT(subband_pyramid,                                QCCWAVSUBBANDPYRAMID3D_PACKET,                                temporal_num_levels,                                spatial_num_levels,                                &lazy_wavelet_transform))    {      QccErrorAddMessage("(QccWAVSubbandPyramid3DDyadicToPacket): Error calling QccWAVSubbandPyramid3DDWT()");      goto Error;    }  return_value = 0;  goto Return; Error:  return_value = 1; Return:  QccWAVWaveletFree(&lazy_wavelet_transform);  return(return_value);}

⌨️ 快捷键说明

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