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

📄 rdwtblockencode.c

📁 QccPack-0.54-1 released (2007-04-30) is being developed and tested on Fedora Core Linux. QccPack pro
💻 C
字号:
/* * * QccPack: Quantization, compression, and coding utilities * Copyright (C) 1997-2007  James E. Fowler *  * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. *  * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. *  * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * *//* *  This code was written by Joe Boettcher <jbb15@msstate.edu> based on *  the originally developed algorithm and code by Suxia Cui. */#include "rdwtblockencode.h"#define USG_STRING "[-fp %:] [-hp %:] [-qp %:] [-ep %:] [-f1 %: %s:filter1] [-f2 %: %s:filter2] [-f3 %: %s:filter3] [-w %s:wavelet] [-b %s:boundary] [-nl %d:num_levels] [-mv %: %s:mvfile] [-rmv %:] [-bs %d:blocksize] [-sf %: %d:startframe] [-ef %: %d:endframe] [-q %:] %f:rate %s:sequence %s:bitstream"QccIMGImageSequence ImageSequence;QccBitBuffer OutputBuffer;int FullPixelSpecified = 0;int HalfPixelSpecified = 0;int QuarterPixelSpecified = 0;int EighthPixelSpecified = 0;int MotionAccuracy = QCCVID_ME_FULLPIXEL;int FilterSpecified1 = 0;QccString FilterFilename1;QccFilter Filter1;int FilterSpecified2 = 0;QccString FilterFilename2;QccFilter Filter2;int FilterSpecified3 = 0;QccString FilterFilename3;QccFilter Filter3;int StartFrameNumSpecified = 0;int StartFrameNum;int EndFrameNumSpecified = 0;int EndFrameNum;int Quiet = 0;float Rate = 0.5;int TargetBitCnt;int NumRows;int NumCols;int NumLevels = 3;QccWAVWavelet Wavelet;QccString WaveletFilename = QCCWAVWAVELET_DEFAULT_WAVELET;QccString Boundary = "symmetric";int MVFilenameSpecified = 0;QccString MVFilename;int ReadMotionVectors = 0;int Blocksize = 8;int main(int argc, char *argv[]){  FILE *infile;  QccInit(argc, argv);  QccWAVWaveletInitialize(&Wavelet);  QccIMGImageSequenceInitialize(&ImageSequence);  QccBitBufferInitialize(&OutputBuffer);  QccFilterInitialize(&Filter1);  QccFilterInitialize(&Filter2);  QccFilterInitialize(&Filter3);  if (QccParseParameters(argc, argv, USG_STRING,                         &FullPixelSpecified,                         &HalfPixelSpecified,                         &QuarterPixelSpecified,                         &EighthPixelSpecified,                         &FilterSpecified1,                         FilterFilename1,                         &FilterSpecified2,                         FilterFilename2,                         &FilterSpecified3,                         FilterFilename3,                         WaveletFilename,                         Boundary,                          &NumLevels,                         &MVFilenameSpecified,                         &MVFilename,                         &ReadMotionVectors,                         &Blocksize,                         &StartFrameNumSpecified,			 &StartFrameNum,                         &EndFrameNumSpecified,			 &EndFrameNum,			 &Quiet,			 &Rate,			 ImageSequence.filename,                         OutputBuffer.filename))    QccErrorExit();  if (EighthPixelSpecified)    MotionAccuracy = QCCVID_ME_EIGHTHPIXEL;  else    if (QuarterPixelSpecified)      MotionAccuracy = QCCVID_ME_QUARTERPIXEL;    else      if (HalfPixelSpecified)        MotionAccuracy = QCCVID_ME_HALFPIXEL;      else        if (FullPixelSpecified)          MotionAccuracy = QCCVID_ME_FULLPIXEL;    if (FilterSpecified1)    {      if ((infile = QccFileOpen(FilterFilename1, "r")) == NULL)        {          QccErrorAddMessage("%s: Error calling QccFileOpen()",                             argv[0]);          QccErrorExit();        }      if (QccFilterRead(infile, &Filter1))        {          QccErrorAddMessage("%s: Error calling QccFilterRead()",                             argv[0]);          QccErrorExit();        }      QccFileClose(infile);    }  if (FilterSpecified2)    {      if ((infile = QccFileOpen(FilterFilename2, "r")) == NULL)        {          QccErrorAddMessage("%s: Error calling QccFileOpen()",                             argv[0]);          QccErrorExit();        }      if (QccFilterRead(infile, &Filter2))        {          QccErrorAddMessage("%s: Error calling QccFilterRead()",                             argv[0]);          QccErrorExit();        }      QccFileClose(infile);    }  if (FilterSpecified3)    {      if ((infile = QccFileOpen(FilterFilename3, "r")) == NULL)        {          QccErrorAddMessage("%s: Error calling QccFileOpen()",                             argv[0]);          QccErrorExit();        }      if (QccFilterRead(infile, &Filter3))        {          QccErrorAddMessage("%s: Error calling QccFilterRead()",                             argv[0]);          QccErrorExit();        }      QccFileClose(infile);    }  if (QccWAVWaveletCreate(&Wavelet, WaveletFilename, Boundary))    {      QccErrorAddMessage("%s: Error calling QccWAVWaveletCreate()",                         argv[0]);      QccErrorExit();    }  if (QccIMGImageSequenceFindFrameNums(&ImageSequence))    {      QccErrorAddMessage("%s: Error calling QccIMGImageSequenceFindFrameNums()",			 argv[0]);      QccErrorExit();    }  if (StartFrameNumSpecified)    {      if (StartFrameNum < ImageSequence.start_frame_num)        {          QccErrorAddMessage("%s: Start frame %d is out of the range of available frames which start at %d",                             argv[0],                             ImageSequence.start_frame_num);          QccErrorExit();        }      ImageSequence.start_frame_num = StartFrameNum;    }  if (EndFrameNumSpecified)    {      if (EndFrameNum > ImageSequence.end_frame_num)        {          QccErrorAddMessage("%s: End frame %d is out of the range of available frames which end at %d",                             argv[0],                             EndFrameNum,                             ImageSequence.end_frame_num);          QccErrorExit();        }      ImageSequence.end_frame_num = EndFrameNum;    }  if (QccIMGImageSequenceStartRead(&ImageSequence))    {      QccErrorAddMessage("%s: Error calling QccIMGImageSequenceStartRead()",			 argv[0]);      QccErrorExit();    }  if (QccIMGImageColor(&ImageSequence.current_frame))    {      QccErrorAddMessage("%s: Images must be grayscale",			 argv[0]);      QccErrorExit();    }  if (QccIMGImageGetSize(&ImageSequence.current_frame,                         &NumRows, &NumCols))    {      QccErrorAddMessage("%s: Error calling QccIMGImageGetSize()",			 argv[0]);      QccErrorExit();    }  TargetBitCnt = (int)(Rate * NumRows * NumCols);  if ((NumRows % Blocksize) ||      (NumCols % Blocksize))    {      QccErrorAddMessage("%s: Image size must be a multiple of %d",			 argv[0], Blocksize);      QccErrorExit();    }  OutputBuffer.type = QCCBITBUFFER_OUTPUT;  if (QccBitBufferStart(&OutputBuffer))    {      QccErrorAddMessage("%s: Error calling QccBitBufferStart()",                         argv[0]);      QccErrorExit();    }  if (!QccFileSeekable(OutputBuffer.fileptr))    {      QccErrorAddMessage("%s: Output bitstream is not a seekable stream",                         argv[0]);      QccErrorExit();    }  if (ReadMotionVectors && (!MVFilenameSpecified))    {      QccErrorAddMessage("%s: Must provide motion-vectors filename for reading",                         argv[0]);      QccErrorExit();    }  if (QccVIDRDWTBlockEncode(&ImageSequence,                            ((FilterSpecified1) ?                             &Filter1 : NULL),                            ((FilterSpecified2) ?                             &Filter2 : NULL),                            ((FilterSpecified3) ?                             &Filter3 : NULL),                            MotionAccuracy,                            &OutputBuffer,                            Blocksize,                            NumLevels,                            TargetBitCnt,                            &Wavelet,                            ((MVFilenameSpecified) ?                             MVFilename : NULL),                            ReadMotionVectors,                            Quiet))    {      QccErrorAddMessage("%s: Error calling QccVIDRDWTBlockEncode()",			 argv[0]);      QccErrorExit();    }  if (QccBitBufferEnd(&OutputBuffer))    {      QccErrorAddMessage("%s: Error calling QccBitBufferEnd()",                         argv[0]);      QccErrorExit();    }  QccWAVWaveletFree(&Wavelet);  QccIMGImageSequenceFree(&ImageSequence);  QccFilterFree(&Filter1);  QccFilterFree(&Filter2);  QccFilterFree(&Filter3);  QccExit;}

⌨️ 快捷键说明

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