| 36 | |
| 37 | namespace { |
| 38 | FrameInfo ReadFrame(ZipFile &stream, FrameInfo const& prev, const FFMS_TrackType TT) { |
| 39 | FrameInfo f{}; |
| 40 | f.PTS = stream.Read<int64_t>() + prev.PTS; |
| 41 | f.OriginalPTS = stream.Read<int64_t>() + prev.OriginalPTS; |
| 42 | f.KeyFrame = !!stream.Read<int8_t>(); |
| 43 | f.FilePos = stream.Read<int64_t>() + prev.FilePos; |
| 44 | f.MarkedHidden = !!stream.Read<int8_t>(); |
| 45 | |
| 46 | if (TT == FFMS_TYPE_AUDIO) { |
| 47 | f.SampleStart = prev.SampleStart + prev.SampleCount; |
| 48 | f.SampleCount = stream.Read<uint32_t>() + prev.SampleCount; |
| 49 | } else if (TT == FFMS_TYPE_VIDEO) { |
| 50 | f.OriginalPos = static_cast<size_t>(stream.Read<uint64_t>() + prev.OriginalPos + 1); |
| 51 | f.PosInDecodingOrder = static_cast<size_t>(stream.Read<uint64_t>() + prev.PosInDecodingOrder + 1); |
| 52 | f.RepeatPict = stream.Read<int32_t>(); |
| 53 | f.SecondField = !!stream.Read<int8_t>(); |
| 54 | } |
| 55 | return f; |
| 56 | } |
| 57 | |
| 58 | static void WriteFrame(ZipFile &stream, FrameInfo const& f, FrameInfo const& prev, const FFMS_TrackType TT) { |
| 59 | stream.Write(f.PTS - prev.PTS); |