37 lines
1.0 KiB
C#
37 lines
1.0 KiB
C#
namespace ErsatzTV.FFmpeg.Filter;
|
|
|
|
public class FrameRateFilter : BaseFilter
|
|
{
|
|
private readonly FrameState _currentState;
|
|
private readonly int _frameRate;
|
|
|
|
public FrameRateFilter(FrameState currentState, int frameRate)
|
|
{
|
|
_currentState = currentState;
|
|
_frameRate = frameRate;
|
|
}
|
|
|
|
public override string Filter
|
|
{
|
|
get
|
|
{
|
|
var frameRate = $"framerate=fps={_frameRate}:flags=-scd";
|
|
string pixelFormat = _currentState.PixelFormat.Match(pf => pf.FFmpegName, () => string.Empty);
|
|
|
|
if (_currentState.FrameDataLocation == FrameDataLocation.Hardware)
|
|
{
|
|
if (!string.IsNullOrWhiteSpace(pixelFormat))
|
|
{
|
|
return $"hwdownload,format={pixelFormat},{frameRate}";
|
|
}
|
|
|
|
return $"hwdownload,{frameRate}";
|
|
}
|
|
|
|
return frameRate;
|
|
}
|
|
}
|
|
|
|
public override FrameState NextState(FrameState currentState) => currentState with { FrameRate = _frameRate };
|
|
}
|