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];
            }
        }
 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);
 }