DecodeMrSIDToMemory.cpp
#include "main.h"
#include "support.h"
#include "lt_fileSpec.h"
#include "lti_scene.h"
#include "lti_sceneBuffer.h"
#include "lti_utils.h"
#include "MrSIDImageReader.h"
LT_USE_NAMESPACE(LizardTech);
LT_STATUS DecodeMrSIDToMemory()
{
LT_STATUS sts = LT_STS_Uninit;
const LTFileSpec fileSpec(INPUT_PATH("meg_cr20.sid"));
MrSIDImageReader *reader = MrSIDImageReader::create();
TEST_BOOL(reader != NULL);
TEST_SUCCESS(reader->initialize(fileSpec));
const LTIScene scene(0, 0, 640, 480, 1.0);
lt_uint16 numBands = reader->getNumBands();
LTIDataType datatype = reader->getDataType();
const lt_uint32 bytesPerSample = LTIUtils::getNumBytes(datatype);
const lt_uint32 numPixels = scene.getNumCols() * scene.getNumRows();
const lt_uint32 bytesPerBands = numPixels * bytesPerSample;
lt_uint8 **bsqData = new lt_uint8 *[numBands];
for(lt_uint16 i = 0; i < numBands; i++)
bsqData[i] = new lt_uint8[bytesPerBands];
LTISceneBuffer sceneBuffer(reader->getPixelProps(),
scene.getNumCols(),
scene.getNumRows(),
reinterpret_cast<void **>(bsqData));
reader->setMaxWorkerThreads(1);
TEST_SUCCESS(reader->read(scene, sceneBuffer));
FILE* fp = fopen(OUTPUT_PATH("meg_cr20.raw"), "wb");
TEST_BOOL(fp != NULL);
for(lt_uint32 offset = 0; offset < bytesPerBands; offset += bytesPerSample)
{
for(lt_uint16 i = 0; i < numBands; i++)
TEST_BOOL(fwrite(bsqData[i] + offset, bytesPerSample, 1, fp) == 1);
}
fclose(fp);
for(lt_uint16 i = 0; i < numBands; i++)
delete [] bsqData[i];
delete [] bsqData;
TEST_BOOL(Compare(OUTPUT_PATH("meg_cr20.raw"), INPUT_PATH("meg_cr20.raw")));
Remove(OUTPUT_PATH("meg_cr20.raw"));
return LT_STS_Success;
}