here is a snippet of my making the buffer (maybe you guys can figure something out)
//reads frame from valid file
SEECFrame::t_FrameWrapper* firstFrameWrapper = (SEECFrame::t_FrameWrapper*)
new uint8[sizeof(SEECFrame::t_FrameWrapper)];
int frameSize = 0;
file.seek(0);
int filePos = 0;
uint8* m_rawData = NULL;
while (!file.atEnd())
{
//dig frames
filePos = file.pos();
stream.readRawData((char*)firstFrameWrapper, sizeof(SEECFrame::t_FrameWrapper));
frameSize = firstFrameWrapper->lengthL +
(firstFrameWrapper->lengthM << 8) +
(firstFrameWrapper->lengthH<<16) ;
file.seek(filePos);
m_rawData = new uint8 [(int)frameSize]; // where i made the buffer
stream.readRawData((char*)m_rawData, (int)frameSize);
MyFrame* frame = new MyFrame(m_rawData,this); //passed it to the class
if (!frame->isValid())
{
err(tr("Frame No %1 in File : %2 is invalid \n Reason: %3")
.arg(m_VectorFrames.count()+1)
.arg(file.fileName()).arg(frame->errorString()));
delete frame;
delete m_rawData;
break;
}
m_VectorFrames.append(frame);
if (progress.wasCanceled())
{
closeFile();
break;
}
qApp->processEvents();
}
//cleanup firstFrameWrapper
delete[] firstFrameWrapper;
//reads frame from valid file
SEECFrame::t_FrameWrapper* firstFrameWrapper = (SEECFrame::t_FrameWrapper*)
new uint8[sizeof(SEECFrame::t_FrameWrapper)];
int frameSize = 0;
file.seek(0);
int filePos = 0;
uint8* m_rawData = NULL;
while (!file.atEnd())
{
//dig frames
filePos = file.pos();
stream.readRawData((char*)firstFrameWrapper, sizeof(SEECFrame::t_FrameWrapper));
frameSize = firstFrameWrapper->lengthL +
(firstFrameWrapper->lengthM << 8) +
(firstFrameWrapper->lengthH<<16) ;
file.seek(filePos);
m_rawData = new uint8 [(int)frameSize]; // where i made the buffer
stream.readRawData((char*)m_rawData, (int)frameSize);
MyFrame* frame = new MyFrame(m_rawData,this); //passed it to the class
if (!frame->isValid())
{
err(tr("Frame No %1 in File : %2 is invalid \n Reason: %3")
.arg(m_VectorFrames.count()+1)
.arg(file.fileName()).arg(frame->errorString()));
delete frame;
delete m_rawData;
break;
}
m_VectorFrames.append(frame);
if (progress.wasCanceled())
{
closeFile();
break;
}
qApp->processEvents();
}
//cleanup firstFrameWrapper
delete[] firstFrameWrapper;
To copy to clipboard, switch view to plain text mode
myFrame Class constructor and dtor look like these
myFrame
::myFrame( const uint8
* rawFrame,
QObject * parent
){
//ctor
m_rawFrame = rawFrame;
frameWrapper = (t_FrameWrapper*) m_rawFrame;
//determine which type of records
initRecordType();
processFrame();
}
myFrame::~myFrame()
{
//dtor
if (m_rawFrame != NULL)
{
int x = sizeof(m_rawFrame);
delete[] m_rawFrame;
}
}
myFrame::myFrame( const uint8* rawFrame, QObject * parent )
:QObject(parent),m_Validity(false)
{
//ctor
m_rawFrame = rawFrame;
frameWrapper = (t_FrameWrapper*) m_rawFrame;
m_errorString = QString::null;
//determine which type of records
initRecordType();
processFrame();
}
myFrame::~myFrame()
{
//dtor
if (m_rawFrame != NULL)
{
int x = sizeof(m_rawFrame);
delete[] m_rawFrame;
}
}
To copy to clipboard, switch view to plain text mode
this is in may app where i tried to clean up
void UnpackTest::closeFile(void)
{
myFrame* frame = NULL;
while (m_VectorFrames.count())
{
frame = m_VectorFrames.takeLast();
delete frame;
frame = NULL;
}
m_VectorFrames.clear();
gbFrameInfo->clear();
gbSensorInfo->clear();
setWindowTitle("Unpacker");
}
void UnpackTest::closeFile(void)
{
myFrame* frame = NULL;
while (m_VectorFrames.count())
{
frame = m_VectorFrames.takeLast();
delete frame;
frame = NULL;
}
m_VectorFrames.clear();
gbFrameInfo->clear();
gbSensorInfo->clear();
setWindowTitle("Unpacker");
}
To copy to clipboard, switch view to plain text mode
Bookmarks