private static void CheckAudioFormat(IMFMediaType mediaType, IDictionary<FormatCheckElement, Tuple<bool, object>> ret) { var subType = mediaType.GetSubType(); var isAac = subType == MFMediaType.AAC; ret.Add(FormatCheckElement.AudioCodec, Tuple.Create<bool, object>(isAac, subType)); if (isAac) { var aacObjectType = mediaType.GetAacObjectType(); ret.Add(FormatCheckElement.AudioAacObjectType, Tuple.Create<bool, object>(aacObjectType == 2, aacObjectType)); var channels = mediaType.GetChannel(); ret.Add(FormatCheckElement.AudioChannel, Tuple.Create<bool, object>(channels == 1 || channels == 2, channels)); } }
private static void CheckVideoFormat(IMFMediaType mediaType, IDictionary<FormatCheckElement, Tuple<bool, object>> ret) { var subType = mediaType.GetSubType(); ret.Add(FormatCheckElement.VideoCodec, Tuple.Create<bool, object>(subType == MFMediaType.H264, subType)); var bitrate = mediaType.GetAverageBitrate(); ret.Add(FormatCheckElement.VideoBitrate, Tuple.Create<bool, object>(bitrate < TwitterLimitation.MaxVideoBitrate, bitrate)); var size = mediaType.GetSize(); ret.Add(FormatCheckElement.VideoWidth, Tuple.Create<bool, object>(size.Width >= TwitterLimitation.MinWidth && size.Width <= TwitterLimitation.MaxWidth, size.Width)); ret.Add(FormatCheckElement.VideoHeight, Tuple.Create<bool, object>(size.Height >= TwitterLimitation.MinHeight && size.Height <= TwitterLimitation.MaxHeight, size.Height)); var aspectRatio = (double)size.Width / size.Height; ret.Add(FormatCheckElement.VideoAspectRatio, Tuple.Create<bool, object>(aspectRatio >= TwitterLimitation.MinAspectRatio && aspectRatio <= TwitterLimitation.MaxAspectRatio, aspectRatio)); var framerateDouble = mediaType.GetFramerate().ToDouble(); ret.Add(FormatCheckElement.VideoFramerate, Tuple.Create<bool, object>(framerateDouble <= TwitterLimitation.MaxFramerate, framerateDouble)); var pixelAspectRatio = mediaType.GetPixelAspectRatio(); ret.Add(FormatCheckElement.VideoPixelAspectRatio, Tuple.Create<bool, object>(pixelAspectRatio.Numerator == pixelAspectRatio.Denominator, pixelAspectRatio)); var interlaceMode = mediaType.GetInterlaceMode(); ret.Add(FormatCheckElement.VideoInterlaceMode, Tuple.Create<bool, object>(interlaceMode == MFVideoInterlaceMode.Progressive || interlaceMode == MFVideoInterlaceMode.MixedInterlaceOrProgressive, interlaceMode)); }