Handle video frame rotation #84

Former-commit-id: 3b5f677a2c
This commit is contained in:
Malte Rosenbjerg 2020-08-11 00:46:44 +02:00
parent e264c93f67
commit 679b1b4c47

View file

@ -104,31 +104,31 @@ private static FFMpegArguments BuildSnapshotArguments(MediaAnalysis source, Size
.Resize(size); .Resize(size);
} }
private static Size? PrepareSnapshotSize(MediaAnalysis source, Size? size) private static Size? PrepareSnapshotSize(MediaAnalysis source, Size? wantedSize)
{ {
if (size == null || (size.Value.Height == 0 && size.Value.Width == 0)) if (wantedSize == null || (wantedSize.Value.Height <= 0 && wantedSize.Value.Width <= 0))
size = new Size(source.PrimaryVideoStream.Width, source.PrimaryVideoStream.Height); return null;
if (size.Value.Width != size.Value.Height) var currentSize = new Size(source.PrimaryVideoStream.Width, source.PrimaryVideoStream.Height);
if (source.PrimaryVideoStream.Rotation == 90 || source.PrimaryVideoStream.Rotation == 180)
currentSize = new Size(source.PrimaryVideoStream.Height, source.PrimaryVideoStream.Width);
if (wantedSize.Value.Width != currentSize.Width || wantedSize.Value.Height != currentSize.Height)
{ {
if (size.Value.Width == 0) if (wantedSize.Value.Width <= 0 && wantedSize.Value.Height > 0)
{ {
var ratio = (double)size.Value.Height / source.PrimaryVideoStream.Height; var ratio = (double)wantedSize.Value.Height / currentSize.Height;
return new Size((int)(currentSize.Width * ratio), (int)(currentSize.Height * ratio));
size = new Size((int)(source.PrimaryVideoStream.Width * ratio),
(int)(source.PrimaryVideoStream.Height * ratio));
} }
if (wantedSize.Value.Height <= 0 && wantedSize.Value.Width > 0)
if (size.Value.Height == 0)
{ {
var ratio = (double)size.Value.Width / source.PrimaryVideoStream.Width; var ratio = (double)wantedSize.Value.Width / currentSize.Width;
return new Size((int)(currentSize.Width * ratio), (int)(currentSize.Height * ratio));
size = new Size((int)(source.PrimaryVideoStream.Width * ratio),
(int)(source.PrimaryVideoStream.Height * ratio));
} }
return wantedSize;
} }
return size; return null;
} }
/// <summary> /// <summary>