• Home
  • Raw
  • Download

Lines Matching +full:- +full:p

1 /* XzEnc.c -- Xz Encode
2 2018-07-04 : Igor Pavlov : Public domain */
30 #define XZ_GET_PAD_SIZE(dataSize) ((4 - ((unsigned)(dataSize) & 3)) & 3)
32 /* max pack size for LZMA2 block + check-64bytrs: */
38 #define XzBlock_ClearFlags(p) (p)->flags = 0; argument
39 #define XzBlock_SetNumFilters(p, n) (p)->flags |= ((n) - 1); argument
40 #define XzBlock_SetHasPackSize(p) (p)->flags |= XZ_BF_PACK_SIZE; argument
41 #define XzBlock_SetHasUnpackSize(p) (p)->flags |= XZ_BF_UNPACK_SIZE; argument
69 static SRes XzBlock_WriteHeader(const CXzBlock *p, ISeqOutStream *s) in XzBlock_WriteHeader() argument
75 header[pos++] = p->flags; in XzBlock_WriteHeader()
77 if (XzBlock_HasPackSize(p)) pos += Xz_WriteVarInt(header + pos, p->packSize); in XzBlock_WriteHeader()
78 if (XzBlock_HasUnpackSize(p)) pos += Xz_WriteVarInt(header + pos, p->unpackSize); in XzBlock_WriteHeader()
79 numFilters = XzBlock_GetNumFilters(p); in XzBlock_WriteHeader()
83 const CXzFilter *f = &p->filters[i]; in XzBlock_WriteHeader()
84 pos += Xz_WriteVarInt(header + pos, f->id); in XzBlock_WriteHeader()
85 pos += Xz_WriteVarInt(header + pos, f->propsSize); in XzBlock_WriteHeader()
86 memcpy(header + pos, f->props, f->propsSize); in XzBlock_WriteHeader()
87 pos += f->propsSize; in XzBlock_WriteHeader()
110 static void XzEncIndex_Construct(CXzEncIndex *p) in XzEncIndex_Construct() argument
112 p->numBlocks = 0; in XzEncIndex_Construct()
113 p->size = 0; in XzEncIndex_Construct()
114 p->allocated = 0; in XzEncIndex_Construct()
115 p->blocks = NULL; in XzEncIndex_Construct()
118 static void XzEncIndex_Init(CXzEncIndex *p) in XzEncIndex_Init() argument
120 p->numBlocks = 0; in XzEncIndex_Init()
121 p->size = 0; in XzEncIndex_Init()
124 static void XzEncIndex_Free(CXzEncIndex *p, ISzAllocPtr alloc) in XzEncIndex_Free() argument
126 if (p->blocks) in XzEncIndex_Free()
128 ISzAlloc_Free(alloc, p->blocks); in XzEncIndex_Free()
129 p->blocks = NULL; in XzEncIndex_Free()
131 p->numBlocks = 0; in XzEncIndex_Free()
132 p->size = 0; in XzEncIndex_Free()
133 p->allocated = 0; in XzEncIndex_Free()
137 static SRes XzEncIndex_ReAlloc(CXzEncIndex *p, size_t newSize, ISzAllocPtr alloc) in XzEncIndex_ReAlloc() argument
142 if (p->size != 0) in XzEncIndex_ReAlloc()
143 memcpy(blocks, p->blocks, p->size); in XzEncIndex_ReAlloc()
144 if (p->blocks) in XzEncIndex_ReAlloc()
145 ISzAlloc_Free(alloc, p->blocks); in XzEncIndex_ReAlloc()
146 p->blocks = blocks; in XzEncIndex_ReAlloc()
147 p->allocated = newSize; in XzEncIndex_ReAlloc()
152 static SRes XzEncIndex_PreAlloc(CXzEncIndex *p, UInt64 numBlocks, UInt64 unpackSize, UInt64 totalSi… in XzEncIndex_PreAlloc() argument
162 if (pos <= p->allocated - p->size) in XzEncIndex_PreAlloc()
165 UInt64 newSize64 = p->size + pos; in XzEncIndex_PreAlloc()
169 return XzEncIndex_ReAlloc(p, newSize, alloc); in XzEncIndex_PreAlloc()
174 static SRes XzEncIndex_AddIndexRecord(CXzEncIndex *p, UInt64 unpackSize, UInt64 totalSize, ISzAlloc… in XzEncIndex_AddIndexRecord() argument
180 if (pos > p->allocated - p->size) in XzEncIndex_AddIndexRecord()
182 size_t newSize = p->allocated * 2 + 16 * 2; in XzEncIndex_AddIndexRecord()
183 if (newSize < p->size + pos) in XzEncIndex_AddIndexRecord()
185 RINOK(XzEncIndex_ReAlloc(p, newSize, alloc)); in XzEncIndex_AddIndexRecord()
187 memcpy(p->blocks + p->size, buf, pos); in XzEncIndex_AddIndexRecord()
188 p->size += pos; in XzEncIndex_AddIndexRecord()
189 p->numBlocks++; in XzEncIndex_AddIndexRecord()
194 static SRes XzEncIndex_WriteFooter(const CXzEncIndex *p, CXzStreamFlags flags, ISeqOutStream *s) in XzEncIndex_WriteFooter() argument
199 unsigned pos = 1 + Xz_WriteVarInt(buf + 1, p->numBlocks); in XzEncIndex_WriteFooter()
204 RINOK(WriteBytesUpdateCrc(s, p->blocks, p->size, &crc)); in XzEncIndex_WriteFooter()
205 globalPos += p->size; in XzEncIndex_WriteFooter()
213 crc = CrcUpdate(crc, buf + 4 - pos, pos); in XzEncIndex_WriteFooter()
223 return WriteBytes(s, buf + 4 - pos, pos + 4 + 12); in XzEncIndex_WriteFooter()
228 /* ---------- CSeqCheckInStream ---------- */
241 static void SeqCheckInStream_Init(CSeqCheckInStream *p, unsigned checkMode) in SeqCheckInStream_Init() argument
243 p->limit = (UInt64)(Int64)-1; in SeqCheckInStream_Init()
244 p->processed = 0; in SeqCheckInStream_Init()
245 p->realStreamFinished = 0; in SeqCheckInStream_Init()
246 XzCheck_Init(&p->check, checkMode); in SeqCheckInStream_Init()
249 static void SeqCheckInStream_GetDigest(CSeqCheckInStream *p, Byte *digest) in SeqCheckInStream_GetDigest() argument
251 XzCheck_Final(&p->check, digest); in SeqCheckInStream_GetDigest()
256 CSeqCheckInStream *p = CONTAINER_FROM_VTBL(pp, CSeqCheckInStream, vt); in SeqCheckInStream_Read() local
260 if (p->limit != (UInt64)(Int64)-1) in SeqCheckInStream_Read()
262 UInt64 rem = p->limit - p->processed; in SeqCheckInStream_Read()
268 if (p->realStream) in SeqCheckInStream_Read()
270 res = ISeqInStream_Read(p->realStream, data, &size2); in SeqCheckInStream_Read()
271 p->realStreamFinished = (size2 == 0) ? 1 : 0; in SeqCheckInStream_Read()
274 memcpy(data, p->data + (size_t)p->processed, size2); in SeqCheckInStream_Read()
275 XzCheck_Update(&p->check, data, size2); in SeqCheckInStream_Read()
276 p->processed += size2; in SeqCheckInStream_Read()
283 /* ---------- CSeqSizeOutStream ---------- */
296 CSeqSizeOutStream *p = CONTAINER_FROM_VTBL(pp, CSeqSizeOutStream, vt); in SeqSizeOutStream_Write() local
297 if (p->realStream) in SeqSizeOutStream_Write()
298 size = ISeqOutStream_Write(p->realStream, data, size); in SeqSizeOutStream_Write()
301 if (size > p->outBufLimit - (size_t)p->processed) in SeqSizeOutStream_Write()
303 memcpy(p->outBuf + (size_t)p->processed, data, size); in SeqSizeOutStream_Write()
305 p->processed += size; in SeqSizeOutStream_Write()
310 /* ---------- CSeqInFilter ---------- */
316 ISeqInStream p; member
326 SRes BraState_SetFromMethod(IStateCoder *p, UInt64 id, int encodeMode, ISzAllocPtr alloc);
328 static SRes SeqInFilter_Init(CSeqInFilter *p, const CXzFilter *props, ISzAllocPtr alloc) in SeqInFilter_Init() argument
330 if (!p->buf) in SeqInFilter_Init()
332 p->buf = (Byte *)ISzAlloc_Alloc(alloc, FILTER_BUF_SIZE); in SeqInFilter_Init()
333 if (!p->buf) in SeqInFilter_Init()
336 p->curPos = p->endPos = 0; in SeqInFilter_Init()
337 p->srcWasFinished = 0; in SeqInFilter_Init()
338 RINOK(BraState_SetFromMethod(&p->StateCoder, props->id, 1, alloc)); in SeqInFilter_Init()
339 RINOK(p->StateCoder.SetProps(p->StateCoder.p, props->props, props->propsSize, alloc)); in SeqInFilter_Init()
340 p->StateCoder.Init(p->StateCoder.p); in SeqInFilter_Init()
347 CSeqInFilter *p = CONTAINER_FROM_VTBL(pp, CSeqInFilter, p); in SeqInFilter_Read() local
355 if (!p->srcWasFinished && p->curPos == p->endPos) in SeqInFilter_Read()
357 p->curPos = 0; in SeqInFilter_Read()
358 p->endPos = FILTER_BUF_SIZE; in SeqInFilter_Read()
359 RINOK(ISeqInStream_Read(p->realStream, p->buf, &p->endPos)); in SeqInFilter_Read()
360 if (p->endPos == 0) in SeqInFilter_Read()
361 p->srcWasFinished = 1; in SeqInFilter_Read()
364 SizeT srcLen = p->endPos - p->curPos; in SeqInFilter_Read()
368 res = p->StateCoder.Code2(p->StateCoder.p, in SeqInFilter_Read()
370 p->buf + p->curPos, &srcLen, in SeqInFilter_Read()
371 p->srcWasFinished, CODER_FINISH_ANY, in SeqInFilter_Read()
373 p->curPos += srcLen; in SeqInFilter_Read()
380 static void SeqInFilter_Construct(CSeqInFilter *p) in SeqInFilter_Construct() argument
382 p->buf = NULL; in SeqInFilter_Construct()
383 p->StateCoder.p = NULL; in SeqInFilter_Construct()
384 p->p.Read = SeqInFilter_Read; in SeqInFilter_Construct()
387 static void SeqInFilter_Free(CSeqInFilter *p, ISzAllocPtr alloc) in SeqInFilter_Free() argument
389 if (p->StateCoder.p) in SeqInFilter_Free()
391 p->StateCoder.Free(p->StateCoder.p, alloc); in SeqInFilter_Free()
392 p->StateCoder.p = NULL; in SeqInFilter_Free()
394 if (p->buf) in SeqInFilter_Free()
396 ISzAlloc_Free(alloc, p->buf); in SeqInFilter_Free()
397 p->buf = NULL; in SeqInFilter_Free()
402 /* ---------- CSbEncInStream ---------- */
415 CSbEncInStream *p = CONTAINER_FROM_VTBL(pp, CSbEncInStream, vt); in SbEncInStream_Read() local
422 if (p->enc.needRead && !p->enc.readWasFinished) in SbEncInStream_Read()
424 size_t processed = p->enc.needReadSizeMax; in SbEncInStream_Read()
425 RINOK(p->inStream->Read(p->inStream, p->enc.buf + p->enc.readPos, &processed)); in SbEncInStream_Read()
426 p->enc.readPos += processed; in SbEncInStream_Read()
429 p->enc.readWasFinished = True; in SbEncInStream_Read()
430 p->enc.isFinalFinished = True; in SbEncInStream_Read()
432 p->enc.needRead = False; in SbEncInStream_Read()
436 RINOK(SbEnc_Read(&p->enc, data, size)); in SbEncInStream_Read()
437 if (*size != 0 || !p->enc.needRead) in SbEncInStream_Read()
442 void SbEncInStream_Construct(CSbEncInStream *p, ISzAllocPtr alloc) in SbEncInStream_Construct() argument
444 SbEnc_Construct(&p->enc, alloc); in SbEncInStream_Construct()
445 p->vt.Read = SbEncInStream_Read; in SbEncInStream_Construct()
448 SRes SbEncInStream_Init(CSbEncInStream *p) in SbEncInStream_Init() argument
450 return SbEnc_Init(&p->enc); in SbEncInStream_Init()
453 void SbEncInStream_Free(CSbEncInStream *p) in SbEncInStream_Free() argument
455 SbEnc_Free(&p->enc); in SbEncInStream_Free()
462 /* ---------- CXzProps ---------- */
465 void XzFilterProps_Init(CXzFilterProps *p) in XzFilterProps_Init() argument
467 p->id = 0; in XzFilterProps_Init()
468 p->delta = 0; in XzFilterProps_Init()
469 p->ip = 0; in XzFilterProps_Init()
470 p->ipDefined = False; in XzFilterProps_Init()
473 void XzProps_Init(CXzProps *p) in XzProps_Init() argument
475 p->checkId = XZ_CHECK_CRC32; in XzProps_Init()
476 p->blockSize = XZ_PROPS__BLOCK_SIZE__AUTO; in XzProps_Init()
477 p->numBlockThreads_Reduced = -1; in XzProps_Init()
478 p->numBlockThreads_Max = -1; in XzProps_Init()
479 p->numTotalThreads = -1; in XzProps_Init()
480 p->reduceSize = (UInt64)(Int64)-1; in XzProps_Init()
481 p->forceWriteSizesInHeader = 0; in XzProps_Init()
482 // p->forceWriteSizesInHeader = 1; in XzProps_Init()
484 XzFilterProps_Init(&p->filterProps); in XzProps_Init()
485 Lzma2EncProps_Init(&p->lzma2Props); in XzProps_Init()
489 static void XzEncProps_Normalize_Fixed(CXzProps *p) in XzEncProps_Normalize_Fixed() argument
494 CLzma2EncProps tp = p->lzma2Props; in XzEncProps_Normalize_Fixed()
496 tp.numTotalThreads = p->numTotalThreads; in XzEncProps_Normalize_Fixed()
501 t1 = p->lzma2Props.numTotalThreads; in XzEncProps_Normalize_Fixed()
502 t2 = p->numBlockThreads_Max; in XzEncProps_Normalize_Fixed()
503 t3 = p->numTotalThreads; in XzEncProps_Normalize_Fixed()
534 p->lzma2Props.numTotalThreads = t1; in XzEncProps_Normalize_Fixed()
538 fileSize = p->reduceSize; in XzEncProps_Normalize_Fixed()
540 if ((p->blockSize < fileSize || fileSize == (UInt64)(Int64)-1)) in XzEncProps_Normalize_Fixed()
541 p->lzma2Props.lzmaProps.reduceSize = p->blockSize; in XzEncProps_Normalize_Fixed()
543 Lzma2EncProps_Normalize(&p->lzma2Props); in XzEncProps_Normalize_Fixed()
545 t1 = p->lzma2Props.numTotalThreads; in XzEncProps_Normalize_Fixed()
548 if (t2 > 1 && fileSize != (UInt64)(Int64)-1) in XzEncProps_Normalize_Fixed()
550 UInt64 numBlocks = fileSize / p->blockSize; in XzEncProps_Normalize_Fixed()
551 if (numBlocks * p->blockSize != fileSize) in XzEncProps_Normalize_Fixed()
563 p->numBlockThreads_Max = t2; in XzEncProps_Normalize_Fixed()
564 p->numBlockThreads_Reduced = t2r; in XzEncProps_Normalize_Fixed()
565 p->numTotalThreads = t3; in XzEncProps_Normalize_Fixed()
569 static void XzProps_Normalize(CXzProps *p) in XzProps_Normalize() argument
574 if (p->blockSize == XZ_PROPS__BLOCK_SIZE__SOLID) in XzProps_Normalize()
576 p->lzma2Props.lzmaProps.reduceSize = p->reduceSize; in XzProps_Normalize()
577 p->numBlockThreads_Reduced = 1; in XzProps_Normalize()
578 p->numBlockThreads_Max = 1; in XzProps_Normalize()
579 if (p->lzma2Props.numTotalThreads <= 0) in XzProps_Normalize()
580 p->lzma2Props.numTotalThreads = p->numTotalThreads; in XzProps_Normalize()
585 CLzma2EncProps *lzma2 = &p->lzma2Props; in XzProps_Normalize()
586 if (p->blockSize == LZMA2_ENC_PROPS__BLOCK_SIZE__AUTO) in XzProps_Normalize()
588 // xz-auto in XzProps_Normalize()
589 p->lzma2Props.lzmaProps.reduceSize = p->reduceSize; in XzProps_Normalize()
591 if (lzma2->blockSize == LZMA2_ENC_PROPS__BLOCK_SIZE__SOLID) in XzProps_Normalize()
593 // if (xz-auto && lzma2-solid) - we use solid for both in XzProps_Normalize()
594 p->blockSize = XZ_PROPS__BLOCK_SIZE__SOLID; in XzProps_Normalize()
595 p->numBlockThreads_Reduced = 1; in XzProps_Normalize()
596 p->numBlockThreads_Max = 1; in XzProps_Normalize()
597 if (p->lzma2Props.numTotalThreads <= 0) in XzProps_Normalize()
598 p->lzma2Props.numTotalThreads = p->numTotalThreads; in XzProps_Normalize()
602 // if (xz-auto && (lzma2-auto || lzma2-fixed_) in XzProps_Normalize()
603 …// we calculate block size for lzma2 and use that block size for xz, lzma2 uses single-chunk per… in XzProps_Normalize()
604 CLzma2EncProps tp = p->lzma2Props; in XzProps_Normalize()
606 tp.numTotalThreads = p->numTotalThreads; in XzProps_Normalize()
610 p->blockSize = tp.blockSize; // fixed or solid in XzProps_Normalize()
611 p->numBlockThreads_Reduced = tp.numBlockThreads_Reduced; in XzProps_Normalize()
612 p->numBlockThreads_Max = tp.numBlockThreads_Max; in XzProps_Normalize()
613 if (lzma2->blockSize == LZMA2_ENC_PROPS__BLOCK_SIZE__AUTO) in XzProps_Normalize()
614 lzma2->blockSize = tp.blockSize; // fixed or solid, LZMA2_ENC_PROPS__BLOCK_SIZE__SOLID in XzProps_Normalize()
615 …if (lzma2->lzmaProps.reduceSize > tp.blockSize && tp.blockSize != LZMA2_ENC_PROPS__BLOCK_SIZE__SOL… in XzProps_Normalize()
616 lzma2->lzmaProps.reduceSize = tp.blockSize; in XzProps_Normalize()
617 lzma2->numBlockThreads_Reduced = 1; in XzProps_Normalize()
618 lzma2->numBlockThreads_Max = 1; in XzProps_Normalize()
624 // xz-fixed in XzProps_Normalize()
627 p->lzma2Props.lzmaProps.reduceSize = p->reduceSize; in XzProps_Normalize()
629 UInt64 r = p->reduceSize; in XzProps_Normalize()
630 if (r > p->blockSize || r == (UInt64)(Int64)-1) in XzProps_Normalize()
631 r = p->blockSize; in XzProps_Normalize()
632 lzma2->lzmaProps.reduceSize = r; in XzProps_Normalize()
634 if (lzma2->blockSize == LZMA2_ENC_PROPS__BLOCK_SIZE__AUTO) in XzProps_Normalize()
635 lzma2->blockSize = LZMA2_ENC_PROPS__BLOCK_SIZE__SOLID; in XzProps_Normalize()
636 …else if (lzma2->blockSize > p->blockSize && lzma2->blockSize != LZMA2_ENC_PROPS__BLOCK_SIZE__SOLID) in XzProps_Normalize()
637 lzma2->blockSize = p->blockSize; in XzProps_Normalize()
639 XzEncProps_Normalize_Fixed(p); in XzProps_Normalize()
645 /* ---------- CLzma2WithFilters ---------- */
658 static void Lzma2WithFilters_Construct(CLzma2WithFilters *p) in Lzma2WithFilters_Construct() argument
660 p->lzma2 = NULL; in Lzma2WithFilters_Construct()
661 SeqInFilter_Construct(&p->filter); in Lzma2WithFilters_Construct()
664 SbEncInStream_Construct(&p->sb, alloc); in Lzma2WithFilters_Construct()
669 static SRes Lzma2WithFilters_Create(CLzma2WithFilters *p, ISzAllocPtr alloc, ISzAllocPtr bigAlloc) in Lzma2WithFilters_Create() argument
671 if (!p->lzma2) in Lzma2WithFilters_Create()
673 p->lzma2 = Lzma2Enc_Create(alloc, bigAlloc); in Lzma2WithFilters_Create()
674 if (!p->lzma2) in Lzma2WithFilters_Create()
681 static void Lzma2WithFilters_Free(CLzma2WithFilters *p, ISzAllocPtr alloc) in Lzma2WithFilters_Free() argument
684 SbEncInStream_Free(&p->sb); in Lzma2WithFilters_Free()
687 SeqInFilter_Free(&p->filter, alloc); in Lzma2WithFilters_Free()
688 if (p->lzma2) in Lzma2WithFilters_Free()
690 Lzma2Enc_Destroy(p->lzma2); in Lzma2WithFilters_Free()
691 p->lzma2 = NULL; in Lzma2WithFilters_Free()
714 size_t inBufSize, // used if (!inStream), it's block size, props->blockSize is ignored in Xz_CompressBlock()
728 const CXzFilterProps *fp = &props->filterProps; in Xz_CompressBlock()
729 if (fp->id == 0) in Xz_CompressBlock()
736 RINOK(Lzma2Enc_SetProps(lzmaf->lzma2, &props->lzma2Props)); in Xz_CompressBlock()
744 filter->id = fp->id; in Xz_CompressBlock()
745 filter->propsSize = 0; in Xz_CompressBlock()
747 if (fp->id == XZ_ID_Delta) in Xz_CompressBlock()
749 filter->props[0] = (Byte)(fp->delta - 1); in Xz_CompressBlock()
750 filter->propsSize = 1; in Xz_CompressBlock()
752 else if (fp->ipDefined) in Xz_CompressBlock()
754 SetUi32(filter->props, fp->ip); in Xz_CompressBlock()
755 filter->propsSize = 4; in Xz_CompressBlock()
761 f->id = XZ_ID_LZMA2; in Xz_CompressBlock()
762 f->propsSize = 1; in Xz_CompressBlock()
763 f->props[0] = Lzma2Enc_WriteProperties(lzmaf->lzma2); in Xz_CompressBlock()
773 if (expectedSize != (UInt64)(Int64)-1) in Xz_CompressBlock()
776 if (props->blockSize != (UInt64)(Int64)-1) in Xz_CompressBlock()
777 if (expectedSize > props->blockSize) in Xz_CompressBlock()
778 block.unpackSize = props->blockSize; in Xz_CompressBlock()
789 SeqCheckInStream_Init(&checkInStream, props->checkId); in Xz_CompressBlock()
793 checkInStream.limit = props->blockSize; in Xz_CompressBlock()
800 if (fp->id == XZ_ID_Subblock) in Xz_CompressBlock()
802 lzmaf->sb.inStream = &checkInStream.vt; in Xz_CompressBlock()
803 RINOK(SbEncInStream_Init(&lzmaf->sb)); in Xz_CompressBlock()
808 lzmaf->filter.realStream = &checkInStream.vt; in Xz_CompressBlock()
809 RINOK(SeqInFilter_Init(&lzmaf->filter, filter, alloc)); in Xz_CompressBlock()
829 outSize = seqSizeOutStream.outBufLimit; // - (size_t)seqSizeOutStream.processed; in Xz_CompressBlock()
832 res = Lzma2Enc_Encode2(lzmaf->lzma2, in Xz_CompressBlock()
841 (fp->id == XZ_ID_Subblock) ? &lzmaf->sb.vt: in Xz_CompressBlock()
843 &lzmaf->filter.p) : in Xz_CompressBlock()
855 blockSizes->unpackSize = checkInStream.processed; in Xz_CompressBlock()
868 …K(WriteBytes(&seqSizeOutStream.vt, buf + (4 - padSize), padSize + XzFlags_GetCheckSize((CXzStreamF… in Xz_CompressBlock()
870 blockSizes->totalSize = seqSizeOutStream.processed - padSize; in Xz_CompressBlock()
878 block.unpackSize = blockSizes->unpackSize; in Xz_CompressBlock()
886 blockSizes->headerSize = (size_t)seqSizeOutStream.processed; in Xz_CompressBlock()
887 blockSizes->totalSize += seqSizeOutStream.processed; in Xz_CompressBlock()
916 …const CCompressProgress_XzEncOffset *p = CONTAINER_FROM_VTBL(pp, CCompressProgress_XzEncOffset, vt… in CompressProgress_XzEncOffset_Progress() local
917 inSize += p->inOffset; in CompressProgress_XzEncOffset_Progress()
918 outSize += p->outOffset; in CompressProgress_XzEncOffset_Progress()
919 return ICompressProgress_Progress(p->progress, inSize, outSize); in CompressProgress_XzEncOffset_Progress()
951 static void XzEnc_Construct(CXzEnc *p) in XzEnc_Construct() argument
955 XzEncIndex_Construct(&p->xzIndex); in XzEnc_Construct()
958 Lzma2WithFilters_Construct(&p->lzmaf_Items[i]); in XzEnc_Construct()
961 p->mtCoder_WasConstructed = False; in XzEnc_Construct()
964 p->outBufs[i] = NULL; in XzEnc_Construct()
965 p->outBufSize = 0; in XzEnc_Construct()
971 static void XzEnc_FreeOutBufs(CXzEnc *p) in XzEnc_FreeOutBufs() argument
975 if (p->outBufs[i]) in XzEnc_FreeOutBufs()
977 ISzAlloc_Free(p->alloc, p->outBufs[i]); in XzEnc_FreeOutBufs()
978 p->outBufs[i] = NULL; in XzEnc_FreeOutBufs()
980 p->outBufSize = 0; in XzEnc_FreeOutBufs()
984 static void XzEnc_Free(CXzEnc *p, ISzAllocPtr alloc) in XzEnc_Free() argument
988 XzEncIndex_Free(&p->xzIndex, alloc); in XzEnc_Free()
991 Lzma2WithFilters_Free(&p->lzmaf_Items[i], alloc); in XzEnc_Free()
994 if (p->mtCoder_WasConstructed) in XzEnc_Free()
996 MtCoder_Destruct(&p->mtCoder); in XzEnc_Free()
997 p->mtCoder_WasConstructed = False; in XzEnc_Free()
999 XzEnc_FreeOutBufs(p); in XzEnc_Free()
1006 CXzEnc *p = (CXzEnc *)ISzAlloc_Alloc(alloc, sizeof(CXzEnc)); in XzEnc_Create() local
1007 if (!p) in XzEnc_Create()
1009 XzEnc_Construct(p); in XzEnc_Create()
1010 XzProps_Init(&p->xzProps); in XzEnc_Create()
1011 XzProps_Normalize(&p->xzProps); in XzEnc_Create()
1012 p->expectedDataSize = (UInt64)(Int64)-1; in XzEnc_Create()
1013 p->alloc = alloc; in XzEnc_Create()
1014 p->allocBig = allocBig; in XzEnc_Create()
1015 return p; in XzEnc_Create()
1021 CXzEnc *p = (CXzEnc *)pp; in XzEnc_Destroy() local
1022 XzEnc_Free(p, p->alloc); in XzEnc_Destroy()
1023 ISzAlloc_Free(p->alloc, p); in XzEnc_Destroy()
1029 CXzEnc *p = (CXzEnc *)pp; in XzEnc_SetProps() local
1030 p->xzProps = *props; in XzEnc_SetProps()
1031 XzProps_Normalize(&p->xzProps); in XzEnc_SetProps()
1038 CXzEnc *p = (CXzEnc *)pp; in XzEnc_SetDataSize() local
1039 p->expectedDataSize = expectedDataSiize; in XzEnc_SetDataSize()
1054 Byte *dest = me->outBufs[outBufIndex]; in XzEnc_MtCallback_Code()
1059 CXzEncBlockInfo *bInfo = &me->EncBlocks[outBufIndex]; in XzEnc_MtCallback_Code()
1060 bInfo->totalSize = 0; in XzEnc_MtCallback_Code()
1061 bInfo->unpackSize = 0; in XzEnc_MtCallback_Code()
1062 bInfo->headerSize = 0; in XzEnc_MtCallback_Code()
1067 dest = (Byte *)ISzAlloc_Alloc(me->alloc, me->outBufSize); in XzEnc_MtCallback_Code()
1070 me->outBufs[outBufIndex] = dest; in XzEnc_MtCallback_Code()
1074 progressThunk.mtProgress = &me->mtCoder.mtProgress; in XzEnc_MtCallback_Code()
1082 &me->lzmaf_Items[coderIndex], in XzEnc_MtCallback_Code()
1086 dest + XZ_BLOCK_HEADER_SIZE_MAX, me->outBufSize - XZ_BLOCK_HEADER_SIZE_MAX, in XzEnc_MtCallback_Code()
1092 &me->xzProps, in XzEnc_MtCallback_Code()
1096 me->alloc, in XzEnc_MtCallback_Code()
1097 me->allocBig); in XzEnc_MtCallback_Code()
1100 me->EncBlocks[outBufIndex] = blockSizes; in XzEnc_MtCallback_Code()
1111 const CXzEncBlockInfo *bInfo = &me->EncBlocks[outBufIndex]; in XzEnc_MtCallback_Write()
1112 const Byte *data = me->outBufs[outBufIndex]; in XzEnc_MtCallback_Write()
1114 RINOK(WriteBytes(me->outStream, data, bInfo->headerSize)); in XzEnc_MtCallback_Write()
1117 UInt64 totalPackFull = bInfo->totalSize + XZ_GET_PAD_SIZE(bInfo->totalSize); in XzEnc_MtCallback_Write()
1118 …RINOK(WriteBytes(me->outStream, data + XZ_BLOCK_HEADER_SIZE_MAX, (size_t)totalPackFull - bInfo->he… in XzEnc_MtCallback_Write()
1121 return XzEncIndex_AddIndexRecord(&me->xzIndex, bInfo->unpackSize, bInfo->totalSize, me->alloc); in XzEnc_MtCallback_Write()
1130 CXzEnc *p = (CXzEnc *)pp; in XzEnc_Encode() local
1132 const CXzProps *props = &p->xzProps; in XzEnc_Encode()
1134 XzEncIndex_Init(&p->xzIndex); in XzEnc_Encode()
1137 UInt64 blockSize = props->blockSize; in XzEnc_Encode()
1140 && props->reduceSize != (UInt64)(Int64)-1) in XzEnc_Encode()
1142 numBlocks = props->reduceSize / blockSize; in XzEnc_Encode()
1143 if (numBlocks * blockSize != props->reduceSize) in XzEnc_Encode()
1149 …RINOK(XzEncIndex_PreAlloc(&p->xzIndex, numBlocks, blockSize, XZ_GET_ESTIMATED_BLOCK_TOTAL_PACK_SIZ… in XzEnc_Encode()
1152 RINOK(Xz_WriteHeader((CXzStreamFlags)props->checkId, outStream)); in XzEnc_Encode()
1156 if (props->numBlockThreads_Reduced > 1) in XzEnc_Encode()
1160 if (!p->mtCoder_WasConstructed) in XzEnc_Encode()
1162 p->mtCoder_WasConstructed = True; in XzEnc_Encode()
1163 MtCoder_Construct(&p->mtCoder); in XzEnc_Encode()
1169 p->checkType = props->checkId; in XzEnc_Encode()
1170 p->xzProps = *props; in XzEnc_Encode()
1172 p->outStream = outStream; in XzEnc_Encode()
1174 p->mtCoder.allocBig = p->allocBig; in XzEnc_Encode()
1175 p->mtCoder.progress = progress; in XzEnc_Encode()
1176 p->mtCoder.inStream = inStream; in XzEnc_Encode()
1177 p->mtCoder.inData = NULL; in XzEnc_Encode()
1178 p->mtCoder.inDataSize = 0; in XzEnc_Encode()
1179 p->mtCoder.mtCallback = &vt; in XzEnc_Encode()
1180 p->mtCoder.mtCallbackObject = p; in XzEnc_Encode()
1182 if ( props->blockSize == XZ_PROPS__BLOCK_SIZE__SOLID in XzEnc_Encode()
1183 || props->blockSize == XZ_PROPS__BLOCK_SIZE__AUTO) in XzEnc_Encode()
1186 p->mtCoder.blockSize = (size_t)props->blockSize; in XzEnc_Encode()
1187 if (p->mtCoder.blockSize != props->blockSize) in XzEnc_Encode()
1191 …size_t destBlockSize = XZ_BLOCK_HEADER_SIZE_MAX + XZ_GET_MAX_BLOCK_PACK_SIZE(p->mtCoder.blockSize); in XzEnc_Encode()
1192 if (destBlockSize < p->mtCoder.blockSize) in XzEnc_Encode()
1194 if (p->outBufSize != destBlockSize) in XzEnc_Encode()
1195 XzEnc_FreeOutBufs(p); in XzEnc_Encode()
1196 p->outBufSize = destBlockSize; in XzEnc_Encode()
1199 p->mtCoder.numThreadsMax = props->numBlockThreads_Max; in XzEnc_Encode()
1200 p->mtCoder.expectedDataSize = p->expectedDataSize; in XzEnc_Encode()
1202 RINOK(MtCoder_Code(&p->mtCoder)); in XzEnc_Encode()
1219 if (props->blockSize != XZ_PROPS__BLOCK_SIZE__SOLID) in XzEnc_Encode()
1221 writeStartSizes = (props->forceWriteSizesInHeader > 0); in XzEnc_Encode()
1226 size_t t = (size_t)props->blockSize; in XzEnc_Encode()
1227 if (t != props->blockSize) in XzEnc_Encode()
1230 if (t < props->blockSize) in XzEnc_Encode()
1233 if (!p->outBufs[0] || t2 != p->outBufSize) in XzEnc_Encode()
1235 XzEnc_FreeOutBufs(p); in XzEnc_Encode()
1236 p->outBufs[0] = (Byte *)ISzAlloc_Alloc(p->alloc, t2); in XzEnc_Encode()
1237 if (!p->outBufs[0]) in XzEnc_Encode()
1239 p->outBufSize = t2; in XzEnc_Encode()
1241 bufData = p->outBufs[0] + XZ_BLOCK_HEADER_SIZE_MAX; in XzEnc_Encode()
1252 UInt64 rem = (UInt64)(Int64)-1; in XzEnc_Encode()
1253 if (props->reduceSize != (UInt64)(Int64)-1 in XzEnc_Encode()
1254 && props->reduceSize >= progress2.inOffset) in XzEnc_Encode()
1255 rem = props->reduceSize - progress2.inOffset; in XzEnc_Encode()
1261 &p->lzmaf_Items[0], in XzEnc_Encode()
1264 writeStartSizes ? p->outBufs[0] : NULL, in XzEnc_Encode()
1275 p->alloc, in XzEnc_Encode()
1276 p->allocBig)); in XzEnc_Encode()
1283 RINOK(WriteBytes(outStream, p->outBufs[0], blockSizes.headerSize)); in XzEnc_Encode()
1284 RINOK(WriteBytes(outStream, bufData, (size_t)totalPackFull - blockSizes.headerSize)); in XzEnc_Encode()
1287 …RINOK(XzEncIndex_AddIndexRecord(&p->xzIndex, blockSizes.unpackSize, blockSizes.totalSize, p->alloc… in XzEnc_Encode()
1298 return XzEncIndex_WriteFooter(&p->xzIndex, (CXzStreamFlags)props->checkId, outStream); in XzEnc_Encode()