public BlockImgStream(Stream inStream, TransferList transferList) { outStream = TempFileStream.Create(); long total = transferList.TotalBlocks * TransferList.BLOCKSIZE; var done = 0L; foreach (var entry in transferList.Entries) { done += entry.Perform(inStream, outStream) * TransferList.BLOCKSIZE; FileInfoBase.ReportProgress(done, total); } }
public static Stream DecodeTarSin(Stream stream, long totalSize) { var tarStream = new ReadOnlyStream(stream); // to track Position var tarReader = TarReader.Open(tarStream); var outStream = TempFileStream.Create(); while (tarReader.MoveToNextEntry()) { using (var s = new ReadOnlyStream(tarReader.OpenEntryStream())) { var sparseStream = new SonySparseStream(s); sparseStream.CopyToEx(outStream, () => { ReportProgress(tarStream.Position, totalSize); }); } } return(outStream); }
public static Stream DecodeSin(Stream stream, long totalSize) { var rewindable = new RewindableStream(stream); rewindable.StartRecording(); var reader = new BinaryReader(rewindable); var version = reader.ReadByte(); switch (version) { case 1: case 2: throw new Exception($"SIN version 1 and 2 not supported."); case 3: rewindable.Rewind(true); var tempStream = TempFileStream.Create(); SinParserV3.CopyTo(reader, tempStream); return(tempStream); } rewindable.Rewind(true); return(DecodeTarSin(rewindable, totalSize)); }