typedefenum
{
MTDEC_PARSE_CONTINUE, // continue this block with more input data
MTDEC_PARSE_OVERFLOW, // MT buffers overflow, need switch to single-thread
MTDEC_PARSE_NEW, // new block
MTDEC_PARSE_END // end of block threading. But we still can return to threading after Write(&needContinue)pan>
} EMtDecParseState;
typedefstruct
{ // in int startCall; const Byte *src;
size_t srcSize; // in : (srcSize == 0) is allowed // out : it's allowed to return less that actually was used ? int srcFinished;
// out
EMtDecParseState state; Bool canCreateNewThread;
UInt64 outPos; // check it (size_t)
} CMtDecCallbackInfo;
// PreCode() and Code(): // (SRes_return_result != SZ_OK) means stop decoding, no need another blocks
SRes (*PreCode)(void *p, unsigned coderIndex);
SRes (*Code)(void *p, unsigned coderIndex, const Byte *src, size_t srcSize, int srcFinished,
UInt64 *inCodePos, UInt64 *outCodePos, int *stop); // stop - means stop another Code calls
/* Write() must be called, if Parse() was called set (needWrite) if { && (was not interrupted by progress) && (was not interrupted in previous block) }
out: if (*needContinue), decoder still need to continue decoding with new iteration, even after MTDEC_PARSE_END if (*canRecode), we didn't flush current block data, so we still can decode current block later.
*/
SRes (*Write)(void *p, unsigned coderIndex, Bool needWriteToStream, const Byte *src, size_t srcSize, // int srcFinished, Bool *needContinue, Bool *canRecode);
} IMtDecCallback;
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.