From 8c6d097305d06640e7e05c01982ce1266f7a2a67 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9C=D0=B0=D0=BA=D1=81=D0=B8=D0=BC=20=D0=91=D0=B0=D0=B3?= =?UTF-8?q?=D1=80=D1=8F=D0=BD=D1=86=D0=B5=D0=B2?= Date: Tue, 12 May 2020 17:54:39 +0300 Subject: [PATCH] Renamed files Former-commit-id: 18cc364fff087ece1e6e5654b72eba1826b8aff8 --- FFMpegCore/FFMpeg/Enums/Codec.cs | 188 ++++++++++++++++++++------ FFMpegCore/FFMpeg/Enums/Enums.cs | 54 ++++++++ FFMpegCore/FFMpeg/Enums/VideoCodec.cs | 154 --------------------- 3 files changed, 198 insertions(+), 198 deletions(-) create mode 100644 FFMpegCore/FFMpeg/Enums/Enums.cs delete mode 100644 FFMpegCore/FFMpeg/Enums/VideoCodec.cs diff --git a/FFMpegCore/FFMpeg/Enums/Codec.cs b/FFMpegCore/FFMpeg/Enums/Codec.cs index 2bbab5f..1c4ce31 100644 --- a/FFMpegCore/FFMpeg/Enums/Codec.cs +++ b/FFMpegCore/FFMpeg/Enums/Codec.cs @@ -1,54 +1,154 @@ -namespace FFMpegCore.Enums +using FFMpegCore.Exceptions; +using System; +using System.Collections.Generic; +using System.Text; +using System.Text.RegularExpressions; + +namespace FFMpegCore.Enums { - public enum CodecType + public enum FeatureStatus { - Unknown = 0, - Video = 1 << 1, - Audio = 1 << 2, - Subtitle = 1 << 3, - Data = 1 << 4, + Unknown, + NotSupported, + Supported, } - public static class VideoCodec + public class Codec { - public static Codec LibX264 => FFMpeg.GetCodec("libx264"); - public static Codec LibVpx => FFMpeg.GetCodec("libvpx"); - public static Codec LibTheora => FFMpeg.GetCodec("libtheora"); - public static Codec Png => FFMpeg.GetCodec("png"); - public static Codec MpegTs => FFMpeg.GetCodec("mpegts"); - } + private static readonly Regex _codecsFormatRegex = new Regex(@"([D\.])([E\.])([VASD\.])([I\.])([L\.])([S\.])\s+([a-z0-9_-]+)\s+(.+)"); + private static readonly Regex _decodersEncodersFormatRegex = new Regex(@"([VASD\.])([F\.])([S\.])([X\.])([B\.])([D\.])\s+([a-z0-9_-]+)\s+(.+)"); - public static class AudioCodec - { - public static Codec Aac => FFMpeg.GetCodec("aac"); - public static Codec LibVorbis => FFMpeg.GetCodec("libvorbis"); - public static Codec LibFdk_Aac => FFMpeg.GetCodec("libfdk_aac"); - public static Codec Ac3 => FFMpeg.GetCodec("ac3"); - public static Codec Eac3 => FFMpeg.GetCodec("eac3"); - public static Codec LibMp3Lame => FFMpeg.GetCodec("libmp3lame"); - } + public class FeatureLevel + { + public bool IsExperimental { get; internal set; } + public FeatureStatus SupportsFrameLevelMultithreading { get; internal set; } + public FeatureStatus SupportsSliceLevelMultithreading { get; internal set; } + public FeatureStatus SupportsDrawHorizBand { get; internal set; } + public FeatureStatus SupportsDirectRendering { get; internal set; } - public static class VideoType - { - public static ContainerFormat MpegTs => FFMpeg.GetContinerFormat("mpegts"); - public static ContainerFormat Ts => FFMpeg.GetContinerFormat("mpegts"); - public static ContainerFormat Mp4 => FFMpeg.GetContinerFormat("mp4"); - public static ContainerFormat Mov => FFMpeg.GetContinerFormat("mov"); - public static ContainerFormat Avi => FFMpeg.GetContinerFormat("avi"); - public static ContainerFormat Ogv => FFMpeg.GetContinerFormat("ogv"); - public static ContainerFormat WebM => FFMpeg.GetContinerFormat("webm"); - } + internal void Merge(FeatureLevel other) + { + IsExperimental |= other.IsExperimental; + SupportsFrameLevelMultithreading = (FeatureStatus)Math.Max((int)SupportsFrameLevelMultithreading, (int)other.SupportsFrameLevelMultithreading); + SupportsSliceLevelMultithreading = (FeatureStatus)Math.Max((int)SupportsSliceLevelMultithreading, (int)other.SupportsSliceLevelMultithreading); + SupportsDrawHorizBand = (FeatureStatus)Math.Max((int)SupportsDrawHorizBand, (int)other.SupportsDrawHorizBand); + SupportsDirectRendering = (FeatureStatus)Math.Max((int)SupportsDirectRendering, (int)other.SupportsDirectRendering); + } + } - public enum Filter - { - H264_Mp4ToAnnexB, - Aac_AdtstoAsc - } + public string Name { get; private set; } + public CodecType Type { get; private set; } + public bool DecodingSupported { get; private set; } + public bool EncodingSupported { get; private set; } + public bool IsIntraFrameOnly { get; private set; } + public bool IsLossy { get; private set; } + public bool IsLossless { get; private set; } + public string Description { get; private set; } = null!; - public enum Channel - { - Audio, - Video, - Both + public FeatureLevel EncoderFeatureLevel { get; private set; } + public FeatureLevel DecoderFeatureLevel { get; private set; } + + internal Codec(string name, CodecType type) + { + EncoderFeatureLevel = new FeatureLevel(); + DecoderFeatureLevel = new FeatureLevel(); + Name = name; + Type = type; + } + + internal static bool TryParseFromCodecs(string line, out Codec codec) + { + var match = _codecsFormatRegex.Match(line); + if (!match.Success) + { + codec = null!; + return false; + } + + var name = match.Groups[7].Value; + var type = match.Groups[3].Value switch + { + "V" => CodecType.Video, + "A" => CodecType.Audio, + "D" => CodecType.Data, + "S" => CodecType.Subtitle, + _ => CodecType.Unknown + }; + + if(type == CodecType.Unknown) + { + codec = null!; + return false; + } + + codec = new Codec(name, type); + + codec.DecodingSupported = match.Groups[1].Value != "."; + codec.EncodingSupported = match.Groups[2].Value != "."; + codec.IsIntraFrameOnly = match.Groups[4].Value != "."; + codec.IsLossy = match.Groups[5].Value != "."; + codec.IsLossless = match.Groups[6].Value != "."; + codec.Description = match.Groups[8].Value; + + return true; + } + internal static bool TryParseFromEncodersDecoders(string line, out Codec codec, bool isEncoder) + { + var match = _decodersEncodersFormatRegex.Match(line); + if (!match.Success) + { + codec = null!; + return false; + } + + var name = match.Groups[7].Value; + var type = match.Groups[1].Value switch + { + "V" => CodecType.Video, + "A" => CodecType.Audio, + "D" => CodecType.Data, + "S" => CodecType.Subtitle, + _ => CodecType.Unknown + }; + + if (type == CodecType.Unknown) + { + codec = null!; + return false; + } + + codec = new Codec(name, type); + + var featureLevel = isEncoder ? codec.EncoderFeatureLevel : codec.DecoderFeatureLevel; + + codec.DecodingSupported = !isEncoder; + codec.EncodingSupported = isEncoder; + featureLevel.SupportsFrameLevelMultithreading = match.Groups[2].Value != "." ? FeatureStatus.Supported : FeatureStatus.NotSupported; + featureLevel.SupportsSliceLevelMultithreading = match.Groups[3].Value != "." ? FeatureStatus.Supported : FeatureStatus.NotSupported; + featureLevel.IsExperimental = match.Groups[4].Value != "."; + featureLevel.SupportsDrawHorizBand = match.Groups[5].Value != "." ? FeatureStatus.Supported : FeatureStatus.NotSupported; + featureLevel.SupportsDirectRendering = match.Groups[6].Value != "." ? FeatureStatus.Supported : FeatureStatus.NotSupported; + codec.Description = match.Groups[8].Value; + + return true; + } + internal void Merge(Codec other) + { + if (Name != other.Name) + throw new FFMpegException(FFMpegExceptionType.Operation, "different codecs enable to merge"); + + Type |= other.Type; + DecodingSupported |= other.DecodingSupported; + EncodingSupported |= other.EncodingSupported; + IsIntraFrameOnly |= other.IsIntraFrameOnly; + IsLossy |= other.IsLossy; + IsLossless |= other.IsLossless; + + EncoderFeatureLevel.Merge(other.EncoderFeatureLevel); + DecoderFeatureLevel.Merge(other.DecoderFeatureLevel); + + if (Description != other.Description) + Description += "\r\n" + other.Description; + } } -} \ No newline at end of file +} diff --git a/FFMpegCore/FFMpeg/Enums/Enums.cs b/FFMpegCore/FFMpeg/Enums/Enums.cs new file mode 100644 index 0000000..2bbab5f --- /dev/null +++ b/FFMpegCore/FFMpeg/Enums/Enums.cs @@ -0,0 +1,54 @@ +namespace FFMpegCore.Enums +{ + public enum CodecType + { + Unknown = 0, + Video = 1 << 1, + Audio = 1 << 2, + Subtitle = 1 << 3, + Data = 1 << 4, + } + + public static class VideoCodec + { + public static Codec LibX264 => FFMpeg.GetCodec("libx264"); + public static Codec LibVpx => FFMpeg.GetCodec("libvpx"); + public static Codec LibTheora => FFMpeg.GetCodec("libtheora"); + public static Codec Png => FFMpeg.GetCodec("png"); + public static Codec MpegTs => FFMpeg.GetCodec("mpegts"); + } + + public static class AudioCodec + { + public static Codec Aac => FFMpeg.GetCodec("aac"); + public static Codec LibVorbis => FFMpeg.GetCodec("libvorbis"); + public static Codec LibFdk_Aac => FFMpeg.GetCodec("libfdk_aac"); + public static Codec Ac3 => FFMpeg.GetCodec("ac3"); + public static Codec Eac3 => FFMpeg.GetCodec("eac3"); + public static Codec LibMp3Lame => FFMpeg.GetCodec("libmp3lame"); + } + + public static class VideoType + { + public static ContainerFormat MpegTs => FFMpeg.GetContinerFormat("mpegts"); + public static ContainerFormat Ts => FFMpeg.GetContinerFormat("mpegts"); + public static ContainerFormat Mp4 => FFMpeg.GetContinerFormat("mp4"); + public static ContainerFormat Mov => FFMpeg.GetContinerFormat("mov"); + public static ContainerFormat Avi => FFMpeg.GetContinerFormat("avi"); + public static ContainerFormat Ogv => FFMpeg.GetContinerFormat("ogv"); + public static ContainerFormat WebM => FFMpeg.GetContinerFormat("webm"); + } + + public enum Filter + { + H264_Mp4ToAnnexB, + Aac_AdtstoAsc + } + + public enum Channel + { + Audio, + Video, + Both + } +} \ No newline at end of file diff --git a/FFMpegCore/FFMpeg/Enums/VideoCodec.cs b/FFMpegCore/FFMpeg/Enums/VideoCodec.cs deleted file mode 100644 index 1c4ce31..0000000 --- a/FFMpegCore/FFMpeg/Enums/VideoCodec.cs +++ /dev/null @@ -1,154 +0,0 @@ -using FFMpegCore.Exceptions; -using System; -using System.Collections.Generic; -using System.Text; -using System.Text.RegularExpressions; - -namespace FFMpegCore.Enums -{ - public enum FeatureStatus - { - Unknown, - NotSupported, - Supported, - } - - public class Codec - { - private static readonly Regex _codecsFormatRegex = new Regex(@"([D\.])([E\.])([VASD\.])([I\.])([L\.])([S\.])\s+([a-z0-9_-]+)\s+(.+)"); - private static readonly Regex _decodersEncodersFormatRegex = new Regex(@"([VASD\.])([F\.])([S\.])([X\.])([B\.])([D\.])\s+([a-z0-9_-]+)\s+(.+)"); - - public class FeatureLevel - { - public bool IsExperimental { get; internal set; } - public FeatureStatus SupportsFrameLevelMultithreading { get; internal set; } - public FeatureStatus SupportsSliceLevelMultithreading { get; internal set; } - public FeatureStatus SupportsDrawHorizBand { get; internal set; } - public FeatureStatus SupportsDirectRendering { get; internal set; } - - internal void Merge(FeatureLevel other) - { - IsExperimental |= other.IsExperimental; - SupportsFrameLevelMultithreading = (FeatureStatus)Math.Max((int)SupportsFrameLevelMultithreading, (int)other.SupportsFrameLevelMultithreading); - SupportsSliceLevelMultithreading = (FeatureStatus)Math.Max((int)SupportsSliceLevelMultithreading, (int)other.SupportsSliceLevelMultithreading); - SupportsDrawHorizBand = (FeatureStatus)Math.Max((int)SupportsDrawHorizBand, (int)other.SupportsDrawHorizBand); - SupportsDirectRendering = (FeatureStatus)Math.Max((int)SupportsDirectRendering, (int)other.SupportsDirectRendering); - } - } - - public string Name { get; private set; } - public CodecType Type { get; private set; } - public bool DecodingSupported { get; private set; } - public bool EncodingSupported { get; private set; } - public bool IsIntraFrameOnly { get; private set; } - public bool IsLossy { get; private set; } - public bool IsLossless { get; private set; } - public string Description { get; private set; } = null!; - - public FeatureLevel EncoderFeatureLevel { get; private set; } - public FeatureLevel DecoderFeatureLevel { get; private set; } - - internal Codec(string name, CodecType type) - { - EncoderFeatureLevel = new FeatureLevel(); - DecoderFeatureLevel = new FeatureLevel(); - Name = name; - Type = type; - } - - internal static bool TryParseFromCodecs(string line, out Codec codec) - { - var match = _codecsFormatRegex.Match(line); - if (!match.Success) - { - codec = null!; - return false; - } - - var name = match.Groups[7].Value; - var type = match.Groups[3].Value switch - { - "V" => CodecType.Video, - "A" => CodecType.Audio, - "D" => CodecType.Data, - "S" => CodecType.Subtitle, - _ => CodecType.Unknown - }; - - if(type == CodecType.Unknown) - { - codec = null!; - return false; - } - - codec = new Codec(name, type); - - codec.DecodingSupported = match.Groups[1].Value != "."; - codec.EncodingSupported = match.Groups[2].Value != "."; - codec.IsIntraFrameOnly = match.Groups[4].Value != "."; - codec.IsLossy = match.Groups[5].Value != "."; - codec.IsLossless = match.Groups[6].Value != "."; - codec.Description = match.Groups[8].Value; - - return true; - } - internal static bool TryParseFromEncodersDecoders(string line, out Codec codec, bool isEncoder) - { - var match = _decodersEncodersFormatRegex.Match(line); - if (!match.Success) - { - codec = null!; - return false; - } - - var name = match.Groups[7].Value; - var type = match.Groups[1].Value switch - { - "V" => CodecType.Video, - "A" => CodecType.Audio, - "D" => CodecType.Data, - "S" => CodecType.Subtitle, - _ => CodecType.Unknown - }; - - if (type == CodecType.Unknown) - { - codec = null!; - return false; - } - - codec = new Codec(name, type); - - var featureLevel = isEncoder ? codec.EncoderFeatureLevel : codec.DecoderFeatureLevel; - - codec.DecodingSupported = !isEncoder; - codec.EncodingSupported = isEncoder; - featureLevel.SupportsFrameLevelMultithreading = match.Groups[2].Value != "." ? FeatureStatus.Supported : FeatureStatus.NotSupported; - featureLevel.SupportsSliceLevelMultithreading = match.Groups[3].Value != "." ? FeatureStatus.Supported : FeatureStatus.NotSupported; - featureLevel.IsExperimental = match.Groups[4].Value != "."; - featureLevel.SupportsDrawHorizBand = match.Groups[5].Value != "." ? FeatureStatus.Supported : FeatureStatus.NotSupported; - featureLevel.SupportsDirectRendering = match.Groups[6].Value != "." ? FeatureStatus.Supported : FeatureStatus.NotSupported; - codec.Description = match.Groups[8].Value; - - return true; - } - internal void Merge(Codec other) - { - if (Name != other.Name) - throw new FFMpegException(FFMpegExceptionType.Operation, "different codecs enable to merge"); - - Type |= other.Type; - DecodingSupported |= other.DecodingSupported; - EncodingSupported |= other.EncodingSupported; - IsIntraFrameOnly |= other.IsIntraFrameOnly; - IsLossy |= other.IsLossy; - IsLossless |= other.IsLossless; - - EncoderFeatureLevel.Merge(other.EncoderFeatureLevel); - DecoderFeatureLevel.Merge(other.DecoderFeatureLevel); - - if (Description != other.Description) - Description += "\r\n" + other.Description; - } - } -}