mirror of https://github.com/ErsatzTV/ErsatzTV.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
42 lines
1.7 KiB
42 lines
1.7 KiB
using ErsatzTV.FFmpeg.State; |
|
|
|
namespace ErsatzTV.FFmpeg.Filter; |
|
|
|
public class OverlayWatermarkFilter : BaseFilter |
|
{ |
|
private readonly FrameState _currentState; |
|
private readonly FrameSize _resolution; |
|
private readonly WatermarkState _watermarkState; |
|
|
|
public OverlayWatermarkFilter(FrameState currentState, WatermarkState watermarkState, FrameSize resolution) |
|
{ |
|
_currentState = currentState; |
|
_watermarkState = watermarkState; |
|
_resolution = resolution; |
|
} |
|
|
|
public override string Filter => $"overlay={Position}"; |
|
|
|
protected string Position |
|
{ |
|
get |
|
{ |
|
double horizontalMargin = Math.Round(_watermarkState.HorizontalMarginPercent / 100.0 * _resolution.Width); |
|
double verticalMargin = Math.Round(_watermarkState.VerticalMarginPercent / 100.0 * _resolution.Height); |
|
|
|
return _watermarkState.Location switch |
|
{ |
|
WatermarkLocation.BottomLeft => $"x={horizontalMargin}:y=H-h-{verticalMargin}", |
|
WatermarkLocation.TopLeft => $"x={horizontalMargin}:y={verticalMargin}", |
|
WatermarkLocation.TopRight => $"x=W-w-{horizontalMargin}:y={verticalMargin}", |
|
WatermarkLocation.TopMiddle => $"x=(W-w)/2:y={verticalMargin}", |
|
WatermarkLocation.RightMiddle => $"x=W-w-{horizontalMargin}:y=(H-h)/2", |
|
WatermarkLocation.BottomMiddle => $"x=(W-w)/2:y=H-h-{verticalMargin}", |
|
WatermarkLocation.LeftMiddle => $"x={horizontalMargin}:y=(H-h)/2", |
|
_ => $"x=W-w-{horizontalMargin}:y=H-h-{verticalMargin}" |
|
}; |
|
} |
|
} |
|
|
|
public override FrameState NextState(FrameState currentState) => currentState; |
|
}
|
|
|