diff --git a/ErsatzTV.Core/FFmpeg/FFmpegLibraryProcessService.cs b/ErsatzTV.Core/FFmpeg/FFmpegLibraryProcessService.cs index e74f6b286..d934038b2 100644 --- a/ErsatzTV.Core/FFmpeg/FFmpegLibraryProcessService.cs +++ b/ErsatzTV.Core/FFmpeg/FFmpegLibraryProcessService.cs @@ -94,12 +94,13 @@ public class FFmpegLibraryProcessService : IFFmpegProcessService } // TODO: need formats for these codecs - string videoFormat = channel.FFmpegProfile.VideoCodec switch + string videoFormat = playbackSettings.VideoCodec switch { "libx265" or "hevc_nvenc" or "hevc_qsv" or "hevc_vaapi" or "hevc_videotoolbox" => VideoFormat.Hevc, "libx264" or "h264_nvenc" or "h264_qsv" or "h264_vaapi" or "h264_videotoolbox" => VideoFormat.H264, "mpeg2video" => VideoFormat.Mpeg2Video, - _ => throw new ArgumentOutOfRangeException($"unexpected video codec {channel.FFmpegProfile.VideoCodec}") + "copy" => VideoFormat.Copy, + _ => throw new ArgumentOutOfRangeException($"unexpected video codec {playbackSettings.VideoCodec}") }; HardwareAccelerationMode hwAccel = playbackSettings.HardwareAcceleration switch @@ -142,8 +143,8 @@ public class FFmpegLibraryProcessService : IFFmpegProcessService playbackSettings.VideoBufferSize, playbackSettings.VideoTrackTimeScale, playbackSettings.Deinterlace, - channel.FFmpegProfile.AudioCodec, - channel.FFmpegProfile.AudioChannels, + playbackSettings.AudioCodec, + playbackSettings.AudioChannels, playbackSettings.AudioBitrate, playbackSettings.AudioBufferSize, playbackSettings.AudioSampleRate, diff --git a/ErsatzTV.FFmpeg/Decoder/AvailableDecoders.cs b/ErsatzTV.FFmpeg/Decoder/AvailableDecoders.cs index ab56ff76d..b3ad730d8 100644 --- a/ErsatzTV.FFmpeg/Decoder/AvailableDecoders.cs +++ b/ErsatzTV.FFmpeg/Decoder/AvailableDecoders.cs @@ -52,6 +52,7 @@ public static class AvailableDecoders (_, VideoFormat.Vp9, _) => new DecoderVp9(), (_, VideoFormat.Undetermined, _) => new DecoderImplicit(), + (_, VideoFormat.Copy, _) => new DecoderImplicit(), var (accel, videoFormat, pixelFormat) => LogUnknownDecoder(accel, videoFormat, pixelFormat, logger) }; diff --git a/ErsatzTV.FFmpeg/Encoder/AvailableEncoders.cs b/ErsatzTV.FFmpeg/Encoder/AvailableEncoders.cs index 3d3c612e9..98e7361b9 100644 --- a/ErsatzTV.FFmpeg/Encoder/AvailableEncoders.cs +++ b/ErsatzTV.FFmpeg/Encoder/AvailableEncoders.cs @@ -30,6 +30,7 @@ public static class AvailableEncoders (_, VideoFormat.Mpeg2Video) => new EncoderMpeg2Video(), (_, VideoFormat.Undetermined) => new EncoderImplicitVideo(), + (_, VideoFormat.Copy) => new EncoderCopyVideo(), var (accel, videoFormat) => LogUnknownEncoder(accel, videoFormat, logger) }; @@ -54,6 +55,7 @@ public static class AvailableEncoders { AudioFormat.Aac => (Option)new EncoderAac(), AudioFormat.Ac3 => new EncoderAc3(), + AudioFormat.Copy => new EncoderCopyAudio(), _ => LogUnknownEncoder(audioFormat, logger) }, () => LogUnknownEncoder(string.Empty, logger)); diff --git a/ErsatzTV.FFmpeg/Format/AudioFormat.cs b/ErsatzTV.FFmpeg/Format/AudioFormat.cs index b708981e1..a22009c0e 100644 --- a/ErsatzTV.FFmpeg/Format/AudioFormat.cs +++ b/ErsatzTV.FFmpeg/Format/AudioFormat.cs @@ -4,4 +4,6 @@ public static class AudioFormat { public const string Aac = "aac"; public const string Ac3 = "ac3"; + + public const string Copy = "copy"; } diff --git a/ErsatzTV.FFmpeg/Format/VideoFormat.cs b/ErsatzTV.FFmpeg/Format/VideoFormat.cs index dc7e2c2e6..87e80cc2a 100644 --- a/ErsatzTV.FFmpeg/Format/VideoFormat.cs +++ b/ErsatzTV.FFmpeg/Format/VideoFormat.cs @@ -14,5 +14,6 @@ public static class VideoFormat public const string Av1 = "av1"; public const string MpegTs = "mpegts"; + public const string Copy = "copy"; public const string Undetermined = ""; }