mirror of
https://github.com/rosenbjerg/FFMpegCore.git
synced 2024-11-10 08:34:12 +01:00
Handle video frame rotation #84
This commit is contained in:
parent
0c19874be3
commit
3b5f677a2c
1 changed files with 17 additions and 17 deletions
|
@ -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>
|
||||||
|
|
Loading…
Reference in a new issue