FileRenderDebug(const char *fileName,bool readAccess,bool echoLocally) { mLastDisplayType = PxProcessRenderDebug::DT_LAST; mData = NULL; mPrimitives = NULL; mPrimitiveCount = 0; mCurrentFrame = 0; mFrameItemCount = 0; mFrameStart = 0; mFrameCount = 0; mReadAccess = readAccess; mEchoLocally = NULL; if ( echoLocally ) { mEchoLocally = createProcessRenderDebug(); } mFileBuffer = PX_NEW(PxFileBuffer)(fileName, readAccess ? PxFileBuf::OPEN_READ_ONLY : PxFileBuf::OPEN_WRITE_ONLY); if ( mFileBuffer->isOpen() ) { if ( mReadAccess ) { char temp[4]; PxU32 r = mFileBuffer->read(temp,4); PxU32 version = mFileBuffer->readDword(); if ( r == 4 && magic[0] == temp[0] && magic[1] == temp[1] && magic[2] == temp[2] && magic[3] == temp[3] && version == MAGIC_VERSION ) { // it's valid! FrameHeader h; while ( readFrameHeader(h,*mFileBuffer ) ) { mFrameHeaders.pushBack(h); } mFrameCount = mFrameHeaders.size(); } else { delete mFileBuffer; mFileBuffer = NULL; } } else { mFileBuffer->write(magic, 4 ); mFileBuffer->storeDword(MAGIC_VERSION); mFileBuffer->flush(); } } else { delete mFileBuffer; mFileBuffer = NULL; } }
// E.2.2 Control procedure for decoding a frame void Decode_frame(SetjmpStreamState *in_out_pSetjmpStreamState, ByteStreamInterface in_setjmpStreamReadInterface, uint8_t currentMarker, JpegContext *in_pJpegContext) { readFrameHeader(in_out_pSetjmpStreamState, in_setjmpStreamReadInterface, &in_pJpegContext->frameHeader, currentMarker); currentMarker = readMarker(in_out_pSetjmpStreamState, in_setjmpStreamReadInterface); while (currentMarker != SOS_MARKER) { interpreteMarkersFromTableE1(in_out_pSetjmpStreamState, in_setjmpStreamReadInterface, currentMarker, in_pJpegContext); currentMarker = readMarker(in_out_pSetjmpStreamState, in_setjmpStreamReadInterface); } Decode_scan(in_out_pSetjmpStreamState, in_setjmpStreamReadInterface, in_pJpegContext); // TODO: further markers can occur before EOI }