Ejemplo n.º 1
0
        protected MkvSeekPosition findPosition(TimeSpan ts)
        {
            MkvSeekPosition res = FindSeekPosition.find(clusters, ts, trackNumber);

            Logger.logDebug("{0} findPosition: {1} -> {2} ", typeName, ts, res);
            return(res);
        }
Ejemplo n.º 2
0
        protected void seekMedia(StreamPosition streamPosition)
        {
            MkvSeekPosition pos = (MkvSeekPosition)streamPosition;

            clusterIndex = pos.cluster;
            if (!loadCluster(clusterIndex, false))
            {
                throw new ApplicationException("Seek failed");
            }

            blobIndex = pos.blob;
            var block = blobs[blobIndex];

            lock (clusters.syncRoot)
                stream.unpackFrames(ref block, ref laced);
            updateTimestamp(block.timestamp);
        }
Ejemplo n.º 3
0
        StreamPosition findKeyFrame(MkvSeekPosition pos)
        {
            SeekPoint search = new SeekPoint(pos.cluster, default);
            int       idx    = Array.BinarySearch(seekIndex, search, seekPointComparer);

            if (idx >= 0)
            {
                return(clusterStartPosition(pos.cluster));
            }

            idx = ~idx - 1;
            if (idx >= 0)
            {
                return(clusterStartPosition(seekIndex[idx].cluster));
            }

            return(clusterStartPosition(0));
        }