diff options
| author | Luke <luke.pulverenti@gmail.com> | 2017-04-07 15:26:59 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2017-04-07 15:26:59 -0400 |
| commit | 7c55cd08cbfc1c4a6ba2823007432316e1efce8d (patch) | |
| tree | b045a71d84deeb89a85975d34a7a2ded2642c0d5 /MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs | |
| parent | 66e901ef93942c631c3ee3b222cc75265e1b17fb (diff) | |
| parent | 6f7d8bb742f3594bdca16fa5c20c55707edad158 (diff) | |
Merge pull request #2567 from MediaBrowser/beta
Beta
Diffstat (limited to 'MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs')
| -rw-r--r-- | MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs | 61 |
1 files changed, 44 insertions, 17 deletions
diff --git a/MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs b/MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs index 1c716a620..90ec5aac7 100644 --- a/MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs +++ b/MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs @@ -377,7 +377,7 @@ namespace MediaBrowser.Controller.MediaEncoding var arg = string.Format("-i {0}", GetInputPathArgument(state)); - if (state.SubtitleStream != null && request.SubtitleMethod == SubtitleDeliveryMethod.Encode) + if (state.SubtitleStream != null && state.SubtitleDeliveryMethod == SubtitleDeliveryMethod.Encode) { if (state.SubtitleStream.IsExternal && !state.SubtitleStream.IsTextSubtitleStream) { @@ -410,7 +410,7 @@ namespace MediaBrowser.Controller.MediaEncoding { if (GetVideoEncoder(state, encodingOptions).IndexOf("vaapi", StringComparison.OrdinalIgnoreCase) != -1) { - var hasGraphicalSubs = state.SubtitleStream != null && !state.SubtitleStream.IsTextSubtitleStream && request.SubtitleMethod == SubtitleDeliveryMethod.Encode; + var hasGraphicalSubs = state.SubtitleStream != null && !state.SubtitleStream.IsTextSubtitleStream && state.SubtitleDeliveryMethod == SubtitleDeliveryMethod.Encode; var hwOutputFormat = "vaapi"; if (hasGraphicalSubs) @@ -751,8 +751,18 @@ namespace MediaBrowser.Controller.MediaEncoding public bool CanStreamCopyVideo(EncodingJobInfo state, MediaStream videoStream) { + if (!videoStream.AllowStreamCopy) + { + return false; + } + var request = state.BaseRequest; + if (!request.AllowVideoStreamCopy) + { + return false; + } + if (videoStream.IsInterlaced) { if (request.DeInterlace) @@ -772,7 +782,7 @@ namespace MediaBrowser.Controller.MediaEncoding // Can't stream copy if we're burning in subtitles if (request.SubtitleStreamIndex.HasValue) { - if (request.SubtitleMethod == SubtitleDeliveryMethod.Encode) + if (state.SubtitleDeliveryMethod == SubtitleDeliveryMethod.Encode) { return false; } @@ -891,8 +901,18 @@ namespace MediaBrowser.Controller.MediaEncoding public bool CanStreamCopyAudio(EncodingJobInfo state, MediaStream audioStream, List<string> supportedAudioCodecs) { + if (!audioStream.AllowStreamCopy) + { + return false; + } + var request = state.BaseRequest; + if (!request.AllowAudioStreamCopy) + { + return false; + } + // Source and target codecs must match if (string.IsNullOrEmpty(audioStream.Codec) || !supportedAudioCodecs.Contains(audioStream.Codec, StringComparer.OrdinalIgnoreCase)) { @@ -1022,7 +1042,7 @@ namespace MediaBrowser.Controller.MediaEncoding var pts = string.Empty; - if (state.SubtitleStream != null && state.SubtitleStream.IsTextSubtitleStream && state.BaseRequest.SubtitleMethod == SubtitleDeliveryMethod.Encode && !state.CopyTimestamps) + if (state.SubtitleStream != null && state.SubtitleStream.IsTextSubtitleStream && state.SubtitleDeliveryMethod == SubtitleDeliveryMethod.Encode && !state.CopyTimestamps) { var seconds = TimeSpan.FromTicks(state.StartTimeTicks ?? 0).TotalSeconds; @@ -1185,7 +1205,7 @@ namespace MediaBrowser.Controller.MediaEncoding args += " -map -0:a"; } - var subtitleMethod = state.BaseRequest.SubtitleMethod; + var subtitleMethod = state.SubtitleDeliveryMethod; if (state.SubtitleStream == null || subtitleMethod == SubtitleDeliveryMethod.Hls) { args += " -map -0:s"; @@ -1401,7 +1421,7 @@ namespace MediaBrowser.Controller.MediaEncoding var output = string.Empty; - if (state.SubtitleStream != null && state.SubtitleStream.IsTextSubtitleStream && request.SubtitleMethod == SubtitleDeliveryMethod.Encode) + if (state.SubtitleStream != null && state.SubtitleStream.IsTextSubtitleStream && state.SubtitleDeliveryMethod == SubtitleDeliveryMethod.Encode) { var subParam = GetTextSubtitleParam(state); @@ -1676,6 +1696,8 @@ namespace MediaBrowser.Controller.MediaEncoding } EnforceResolutionLimit(state); + + NormalizeSubtitleEmbed(state); } else { @@ -1685,6 +1707,21 @@ namespace MediaBrowser.Controller.MediaEncoding state.MediaSource = mediaSource; } + private void NormalizeSubtitleEmbed(EncodingJobInfo state) + { + if (state.SubtitleStream == null || state.SubtitleDeliveryMethod != SubtitleDeliveryMethod.Embed) + { + return ; + } + + // This is tricky to remux in, after converting to dvdsub it's not positioned correctly + // Therefore, let's just burn it in + if (string.Equals(state.SubtitleStream.Codec, "DVBSUB", StringComparison.OrdinalIgnoreCase)) + { + state.SubtitleDeliveryMethod = SubtitleDeliveryMethod.Encode; + } + } + /// <summary> /// Gets the name of the output video codec /// </summary> @@ -1790,16 +1827,6 @@ namespace MediaBrowser.Controller.MediaEncoding codec = format; } - // Muxing in dvbsub via either copy or -codec dvbsub does not seem to work - // It doesn't throw any errors but vlc on android will not render them - // They will need to be converted to an alternative format - // TODO: This is incorrectly assuming that dvdsub will be supported by the player - // The api will need to be expanded to accomodate this. - if (string.Equals(state.SubtitleStream.Codec, "DVBSUB", StringComparison.OrdinalIgnoreCase)) - { - codec = "dvdsub"; - } - var args = " -codec:s:0 " + codec; args += " -disposition:s:0 default"; @@ -1874,7 +1901,7 @@ namespace MediaBrowser.Controller.MediaEncoding args += keyFrameArg; - var hasGraphicalSubs = state.SubtitleStream != null && !state.SubtitleStream.IsTextSubtitleStream && state.BaseRequest.SubtitleMethod == SubtitleDeliveryMethod.Encode; + var hasGraphicalSubs = state.SubtitleStream != null && !state.SubtitleStream.IsTextSubtitleStream && state.SubtitleDeliveryMethod == SubtitleDeliveryMethod.Encode; var hasCopyTs = false; // Add resolution params, if specified |
