void AddToDictionary(Cache c) { TimeAndPosition tap = new TimeAndPosition(); tap.timeStamp = c.CacheStart; tap.position = (long)c.SampleStreamLocations[0].StreamOffset; tap.cts = c.SampleStreamLocations[0].CTS; TimeAndPos.Add(c.StartIndex, tap); }
private int Warp(int firstSliceIndexInBlock) { TimeAndPosition timPos = TimeAndPos[firstSliceIndexInBlock]; if (stream.IsMediaStreamFragmented) { // FIXME: fragmented case undefined //GenericFragment frag = track.Fragments[(int)timPos.position]; // use "position" as fragment index //Slice slice = frag[firstSliceIndexInBlock - frag.FirstIndex]; return(0); } else { stream.SynchronizeAllTracks(timPos.position, timPos.timeStamp); // LazyRead from this position stream.LazyRead(GenericMediaStream.MAX_BOXES_TO_READ); // finally, read-in as many blocks as caching allows base.PrepareSampleInfo(firstSliceIndexInBlock); return(0); // this[iFrameIndex]; } }