protected MkvSeekPosition findPosition(TimeSpan ts) { MkvSeekPosition res = FindSeekPosition.find(clusters, ts, trackNumber); Logger.logDebug("{0} findPosition: {1} -> {2} ", typeName, ts, res); return(res); }
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); }
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)); }