|
@@ -1351,7 +1351,7 @@ namespace MediaBrowser.Controller.MediaEncoding
|
|
transcoderChannelLimit = 6;
|
|
transcoderChannelLimit = 6;
|
|
}
|
|
}
|
|
|
|
|
|
- var isTranscodingAudio = !EncodingHelper.IsCopyCodec(codec);
|
|
|
|
|
|
+ var isTranscodingAudio = !IsCopyCodec(codec);
|
|
|
|
|
|
int? resultChannels = state.GetRequestedAudioChannels(codec);
|
|
int? resultChannels = state.GetRequestedAudioChannels(codec);
|
|
if (isTranscodingAudio)
|
|
if (isTranscodingAudio)
|
|
@@ -2264,7 +2264,7 @@ namespace MediaBrowser.Controller.MediaEncoding
|
|
flags.Add("+ignidx");
|
|
flags.Add("+ignidx");
|
|
}
|
|
}
|
|
|
|
|
|
- if (state.GenPtsInput || EncodingHelper.IsCopyCodec(state.OutputVideoCodec))
|
|
|
|
|
|
+ if (state.GenPtsInput || IsCopyCodec(state.OutputVideoCodec))
|
|
{
|
|
{
|
|
flags.Add("+genpts");
|
|
flags.Add("+genpts");
|
|
}
|
|
}
|
|
@@ -2523,21 +2523,21 @@ namespace MediaBrowser.Controller.MediaEncoding
|
|
}
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// <summary>
|
|
- /// Gets the name of the output video codec.
|
|
|
|
|
|
+ /// Gets the ffmpeg option string for the hardware accelerated video decoder.
|
|
/// </summary>
|
|
/// </summary>
|
|
|
|
+ /// <param name="state">The encoding job info.</param>
|
|
|
|
+ /// <param name="encodingOptions">The encoding options.</param>
|
|
|
|
+ /// <returns>The option string or null if none available.</returns>
|
|
protected string GetHardwareAcceleratedVideoDecoder(EncodingJobInfo state, EncodingOptions encodingOptions)
|
|
protected string GetHardwareAcceleratedVideoDecoder(EncodingJobInfo state, EncodingOptions encodingOptions)
|
|
{
|
|
{
|
|
- var videoType = state.MediaSource.VideoType ?? VideoType.VideoFile;
|
|
|
|
var videoStream = state.VideoStream;
|
|
var videoStream = state.VideoStream;
|
|
- var isColorDepth10 = !string.IsNullOrEmpty(videoStream.Profile) && (videoStream.Profile.Contains("Main 10", StringComparison.OrdinalIgnoreCase)
|
|
|
|
- || videoStream.Profile.Contains("High 10", StringComparison.OrdinalIgnoreCase));
|
|
|
|
-
|
|
|
|
|
|
|
|
- if (EncodingHelper.IsCopyCodec(state.OutputVideoCodec))
|
|
|
|
|
|
+ if (videoStream == null)
|
|
{
|
|
{
|
|
return null;
|
|
return null;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ var videoType = state.MediaSource.VideoType ?? VideoType.VideoFile;
|
|
// Only use alternative encoders for video files.
|
|
// Only use alternative encoders for video files.
|
|
// When using concat with folder rips, if the mfx session fails to initialize, ffmpeg will be stuck retrying and will not exit gracefully
|
|
// When using concat with folder rips, if the mfx session fails to initialize, ffmpeg will be stuck retrying and will not exit gracefully
|
|
// Since transcoding of folder rips is expiremental anyway, it's not worth adding additional variables such as this.
|
|
// Since transcoding of folder rips is expiremental anyway, it's not worth adding additional variables such as this.
|
|
@@ -2546,10 +2546,16 @@ namespace MediaBrowser.Controller.MediaEncoding
|
|
return null;
|
|
return null;
|
|
}
|
|
}
|
|
|
|
|
|
- if (videoStream != null
|
|
|
|
- && !string.IsNullOrEmpty(videoStream.Codec)
|
|
|
|
- && !string.IsNullOrEmpty(encodingOptions.HardwareAccelerationType))
|
|
|
|
|
|
+ if (IsCopyCodec(state.OutputVideoCodec))
|
|
{
|
|
{
|
|
|
|
+ return null;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (!string.IsNullOrEmpty(videoStream.Codec) && !string.IsNullOrEmpty(encodingOptions.HardwareAccelerationType))
|
|
|
|
+ {
|
|
|
|
+ var isColorDepth10 = !string.IsNullOrEmpty(videoStream.Profile)
|
|
|
|
+ && (videoStream.Profile.Contains("Main 10", StringComparison.OrdinalIgnoreCase) || videoStream.Profile.Contains("High 10", StringComparison.OrdinalIgnoreCase));
|
|
|
|
+
|
|
// Only hevc and vp9 formats have 10-bit hardware decoder support now.
|
|
// Only hevc and vp9 formats have 10-bit hardware decoder support now.
|
|
if (isColorDepth10 && !(string.Equals(videoStream.Codec, "hevc", StringComparison.OrdinalIgnoreCase)
|
|
if (isColorDepth10 && !(string.Equals(videoStream.Codec, "hevc", StringComparison.OrdinalIgnoreCase)
|
|
|| string.Equals(videoStream.Codec, "h265", StringComparison.OrdinalIgnoreCase)
|
|
|| string.Equals(videoStream.Codec, "h265", StringComparison.OrdinalIgnoreCase)
|
|
@@ -3002,7 +3008,7 @@ namespace MediaBrowser.Controller.MediaEncoding
|
|
args += " -mpegts_m2ts_mode 1";
|
|
args += " -mpegts_m2ts_mode 1";
|
|
}
|
|
}
|
|
|
|
|
|
- if (EncodingHelper.IsCopyCodec(videoCodec))
|
|
|
|
|
|
+ if (IsCopyCodec(videoCodec))
|
|
{
|
|
{
|
|
if (state.VideoStream != null
|
|
if (state.VideoStream != null
|
|
&& string.Equals(state.OutputContainer, "ts", StringComparison.OrdinalIgnoreCase)
|
|
&& string.Equals(state.OutputContainer, "ts", StringComparison.OrdinalIgnoreCase)
|
|
@@ -3104,7 +3110,7 @@ namespace MediaBrowser.Controller.MediaEncoding
|
|
|
|
|
|
var args = "-codec:a:0 " + codec;
|
|
var args = "-codec:a:0 " + codec;
|
|
|
|
|
|
- if (EncodingHelper.IsCopyCodec(codec))
|
|
|
|
|
|
+ if (IsCopyCodec(codec))
|
|
{
|
|
{
|
|
return args;
|
|
return args;
|
|
}
|
|
}
|