aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs
diff options
context:
space:
mode:
authorLuca Beltrame <lbeltrame@users.noreply.github.com>2019-01-27 09:44:56 +0100
committerBond-009 <bond.009@outlook.com>2019-01-27 09:44:56 +0100
commitee89236fe8e8fbb94969e228df98b9fc6f3ecd77 (patch)
tree4e0db8476e4c5b4631903ad2624b847b871f51bf /MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs
parentfee42e883c6052a8065c17be8fe650834605ad39 (diff)
[VA-API] Fix filter order (#714)
ffmpeg is very picky about the filters to be used when using VA-API, because most of them are incompatible. This is particularly evident when burning-in subtitles.
Diffstat (limited to 'MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs')
-rw-r--r--MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs11
1 files changed, 11 insertions, 0 deletions
diff --git a/MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs b/MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs
index d8d0a1aa3..968e3dbcb 100644
--- a/MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs
+++ b/MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs
@@ -1438,6 +1438,11 @@ namespace MediaBrowser.Controller.MediaEncoding
if (string.Equals(outputVideoCodec, "h264_vaapi", StringComparison.OrdinalIgnoreCase) && outputSizeParam.Length == 0)
{
outputSizeParam = ",format=nv12|vaapi,hwupload";
+
+ // Add parameters to use VAAPI with burn-in subttiles (GH issue #642)
+ if (state.SubtitleStream != null && state.SubtitleStream.IsTextSubtitleStream && state.SubtitleDeliveryMethod == SubtitleDeliveryMethod.Encode) {
+ outputSizeParam += ",hwmap=mode=read+write+direct";
+ }
}
var videoSizeParam = string.Empty;
@@ -1741,6 +1746,12 @@ namespace MediaBrowser.Controller.MediaEncoding
filters.Add(subParam);
+ // Ensure proper filters are passed to ffmpeg in case of hardware acceleration via VA-API
+ // Reference: https://trac.ffmpeg.org/wiki/Hardware/VAAPI
+ if (string.Equals(outputVideoCodec, "h264_vaapi", StringComparison.OrdinalIgnoreCase))
+ {
+ filters.Add("hwmap");
+ }
if (allowTimeStampCopy)
{
output += " -copyts";