Add first draft of keyframe extraction for Matroska

This commit is contained in:
cvium
2021-09-23 15:29:12 +02:00
parent 1ebd3c9ac3
commit 9c15f96e12
23 changed files with 893 additions and 112 deletions

View File

@@ -0,0 +1,29 @@
namespace Jellyfin.MediaEncoding.Keyframes.Matroska.Models
{
/// <summary>
/// The matroska Info segment.
/// </summary>
internal class Info
{
/// <summary>
/// Initializes a new instance of the <see cref="Info"/> class.
/// </summary>
/// <param name="timestampScale">The timestamp scale in nanoseconds.</param>
/// <param name="duration">The duration of the entire file.</param>
public Info(long timestampScale, double? duration)
{
TimestampScale = timestampScale;
Duration = duration;
}
/// <summary>
/// Gets the timestamp scale in nanoseconds.
/// </summary>
public long TimestampScale { get; }
/// <summary>
/// Gets the total duration of the file.
/// </summary>
public double? Duration { get; }
}
}

View File

@@ -0,0 +1,36 @@
namespace Jellyfin.MediaEncoding.Keyframes.Matroska.Models
{
/// <summary>
/// The matroska SeekHead segment. All positions are relative to the Segment container.
/// </summary>
internal class SeekHead
{
/// <summary>
/// Initializes a new instance of the <see cref="SeekHead"/> class.
/// </summary>
/// <param name="infoPosition">The relative file position of the info segment.</param>
/// <param name="tracksPosition">The relative file position of the tracks segment.</param>
/// <param name="cuesPosition">The relative file position of the cues segment.</param>
public SeekHead(long infoPosition, long tracksPosition, long cuesPosition)
{
InfoPosition = infoPosition;
TracksPosition = tracksPosition;
CuesPosition = cuesPosition;
}
/// <summary>
/// Gets relative file position of the info segment.
/// </summary>
public long InfoPosition { get; }
/// <summary>
/// Gets the relative file position of the tracks segment.
/// </summary>
public long TracksPosition { get; }
/// <summary>
/// Gets the relative file position of the cues segment.
/// </summary>
public long CuesPosition { get; }
}
}