Native.SupportedCodecCallback cb = (codecType, _) =>
{
+ codecType = TypeConverter.ToPublic((SupportedCodecType)codecType);
if ((codecType & CodecKindMask) == CodecKindVideo)
{
MediaFormatVideoMimeType mimeType = 0;
private void ConfigureAudio(AudioMediaFormat format, bool encoder,
MediaCodecTypes supportType)
{
- int codecType = (int)format.MimeType & CodecTypeMask;
+ int codecType = TypeConverter.ToNative(format.MimeType);
if (!Enum.IsDefined(typeof(SupportedCodecType), codecType))
{
private void ConfigureVideo(VideoMediaFormat format, bool encoder,
MediaCodecTypes supportType)
{
- int codecType = (int)format.MimeType & CodecTypeMask;
+ int codecType = TypeConverter.ToNative(format.MimeType);
if (!Enum.IsDefined(typeof(SupportedCodecType), codecType))
{
{
ValidateNotDisposed();
- if (CheckMimeType(typeof(MediaFormatVideoMimeType), (int)type) == false)
+ if (CheckMimeType(typeof(MediaFormatVideoMimeType), type) == false)
{
return 0;
}
- return GetCodecType((int)type, encoder);
+ return GetCodecType(type, typeof(MediaFormatVideoMimeType), encoder);
}
/// <summary>
{
ValidateNotDisposed();
- if (CheckMimeType(typeof(MediaFormatAudioMimeType), (int)type) == false)
+ if (CheckMimeType(typeof(MediaFormatAudioMimeType), type) == false)
{
return 0;
}
- return GetCodecType((int)type, encoder);
+ return GetCodecType(type, typeof(MediaFormatAudioMimeType), encoder);
}
- private MediaCodecTypes GetCodecType(int mimeType, bool isEncoder)
+ private MediaCodecTypes GetCodecType<T>(T mimeType, Type type, bool isEncoder)
{
- int codecType = mimeType & CodecTypeMask;
+ dynamic changedType = Convert.ChangeType(mimeType, type);
+ int codecType = TypeConverter.ToNative(changedType);
Native.GetSupportedType(_handle, codecType, isEncoder, out int value).
ThrowIfFailed("Failed to get supported media codec type.");
return (MediaCodecTypes)value;
}
- private bool CheckMimeType(Type type, int value)
+ private bool CheckMimeType<T>(Type mimeType, T value)
{
- int codecType = value & CodecTypeMask;
-
- if (!Enum.IsDefined(type, value))
+ if (!Enum.IsDefined(mimeType, value))
{
throw new ArgumentException($"The mime type value is invalid : { value }.");
}
+ dynamic changedType = Convert.ChangeType(value, mimeType);
+ var codecType = TypeConverter.ToNative(changedType);
+
return Enum.IsDefined(typeof(SupportedCodecType), codecType);
}
Wma2 = 0x10A1,
WmaPro = 0x10A2,
WmaLossless = 0x10A3,
+ Opus = 0x10D0,
H261 = 0x2010,
H263 = 0x2020,
// VP9 = 0x20A0,
// VC1 = 0x20B0,
}
+
+ internal static class TypeConverter
+ {
+ private const int CodecTypeMask = 0xFFFF;
+
+ internal static int ToPublic(SupportedCodecType type)
+ {
+ int ret = (int)type;
+
+ switch (type)
+ {
+ case SupportedCodecType.Opus:
+ ret = (int)MediaFormatAudioMimeType.Opus & CodecTypeMask;
+ break;
+ }
+
+ return ret;
+ }
+
+ internal static int ToNative(MediaFormatAudioMimeType type)
+ {
+ int ret = (int)type & CodecTypeMask;
+ switch (type)
+ {
+ case MediaFormatAudioMimeType.Opus:
+ ret = (int)SupportedCodecType.Opus;
+ break;
+ }
+
+ return ret;
+ }
+
+ internal static int ToNative(MediaFormatVideoMimeType type)
+ {
+ return (int)type & CodecTypeMask;
+ }
+ }
}