private MFSourceReader Initialize(MFSourceReader reader) { try { reader.SetStreamSelection(NativeMethods.MF_SOURCE_READER_ALL_STREAMS, false); reader.SetStreamSelection(NativeMethods.MF_SOURCE_READER_FIRST_AUDIO_STREAM, true); using (MFMediaType mediaType = MFMediaType.CreateEmpty()) { mediaType.MajorType = AudioSubTypes.MediaTypeAudio; mediaType.SubType = AudioSubTypes.Pcm; //variable?? reader.SetCurrentMediaType(NativeMethods.MF_SOURCE_READER_FIRST_AUDIO_STREAM, mediaType); } using ( MFMediaType currentMediaType = reader.GetCurrentMediaType(NativeMethods.MF_SOURCE_READER_FIRST_AUDIO_STREAM)) { if (currentMediaType.MajorType != AudioSubTypes.MediaTypeAudio) { throw new InvalidOperationException(String.Format( "Invalid Majortype set on sourcereader: {0}.", currentMediaType.MajorType)); } AudioEncoding encoding = AudioSubTypes.EncodingFromSubType(currentMediaType.SubType); ChannelMask channelMask; if (currentMediaType.TryGet(MediaFoundationAttributes.MF_MT_AUDIO_CHANNEL_MASK, out channelMask)) //check whether the attribute is available { _waveFormat = new WaveFormatExtensible(currentMediaType.SampleRate, currentMediaType.BitsPerSample, currentMediaType.Channels, currentMediaType.SubType, channelMask); } else { _waveFormat = new WaveFormat(currentMediaType.SampleRate, currentMediaType.BitsPerSample, currentMediaType.Channels, encoding); } } reader.SetStreamSelection(NativeMethods.MF_SOURCE_READER_FIRST_AUDIO_STREAM, true); if (_hasFixedLength) { _length = GetLength(reader); } return(reader); } catch (Exception) { DisposeInternal(); throw; } }
private MFSourceReader Initialize(MFSourceReader reader) { MediaFoundationCore.Startup(); try { reader.SetStreamSelection(MFInterops.MF_SOURCE_READER_ALL_STREAMS, false); reader.SetStreamSelection(MFInterops.MF_SOURCE_READER_FIRST_AUDIO_STREAM, true); using (var mediaType = MFMediaType.CreateEmpty()) { mediaType.MajorType = MediaTypes.MediaTypeAudio; mediaType.SubType = MediaTypes.MEDIATYPE_Pcm; //variable?? reader.SetCurrentMediaType(MFInterops.MF_SOURCE_READER_FIRST_AUDIO_STREAM, mediaType); } using (var currentMediaType = reader.GetCurrentMediaType(MFInterops.MF_SOURCE_READER_FIRST_AUDIO_STREAM)) { if (currentMediaType.MajorType != MediaTypes.MediaTypeAudio) { throw new InvalidOperationException(String.Format("Invalid Majortype set on sourcereader: {0}.", currentMediaType.MajorType.ToString())); } AudioEncoding encoding; if (currentMediaType.SubType == MediaTypes.MEDIATYPE_Pcm) { encoding = AudioEncoding.Pcm; } else if (currentMediaType.SubType == MediaTypes.MEDIATYPE_IeeeFloat) { encoding = AudioEncoding.IeeeFloat; } else { throw new InvalidOperationException(String.Format("Invalid Subtype set on sourcereader: {0}.", currentMediaType.SubType.ToString())); } _waveFormat = new WaveFormat(currentMediaType.SampleRate, currentMediaType.BitsPerSample, currentMediaType.Channels, encoding); } reader.SetStreamSelection(MFInterops.MF_SOURCE_READER_FIRST_AUDIO_STREAM, true); if (_hasFixedLength) { _length = GetLength(reader); } return(reader); } catch (Exception) { Dispose(); throw; } }
private MFSourceReader Initialize(MFSourceReader reader) { try { reader.SetStreamSelection(NativeMethods.MF_SOURCE_READER_ALL_STREAMS, false); reader.SetStreamSelection(NativeMethods.MF_SOURCE_READER_FIRST_AUDIO_STREAM, true); using (MFMediaType mediaType = MFMediaType.CreateEmpty()) { mediaType.MajorType = AudioSubTypes.MediaTypeAudio; mediaType.SubType = AudioSubTypes.Pcm; //variable?? reader.SetCurrentMediaType(NativeMethods.MF_SOURCE_READER_FIRST_AUDIO_STREAM, mediaType); } using ( MFMediaType currentMediaType = reader.GetCurrentMediaType(NativeMethods.MF_SOURCE_READER_FIRST_AUDIO_STREAM)) { if (currentMediaType.MajorType != AudioSubTypes.MediaTypeAudio) { throw new InvalidOperationException(String.Format( "Invalid Majortype set on sourcereader: {0}.", currentMediaType.MajorType)); } AudioEncoding encoding = AudioSubTypes.EncodingFromSubType(currentMediaType.SubType); ChannelMask channelMask; if (currentMediaType.TryGet(MediaFoundationAttributes.MF_MT_AUDIO_CHANNEL_MASK, out channelMask)) //check whether the attribute is available { _waveFormat = new WaveFormatExtensible(currentMediaType.SampleRate, currentMediaType.BitsPerSample, currentMediaType.Channels, currentMediaType.SubType, channelMask); } else { _waveFormat = new WaveFormat(currentMediaType.SampleRate, currentMediaType.BitsPerSample, currentMediaType.Channels, encoding); } } reader.SetStreamSelection(NativeMethods.MF_SOURCE_READER_FIRST_AUDIO_STREAM, true); if (_hasFixedLength) _length = GetLength(reader); return reader; } catch (Exception) { DisposeInternal(); throw; } }
private MFSourceReader Initialize(MFSourceReader reader) { MediaFoundationCore.Startup(); try { reader.SetStreamSelection(MFInterops.MF_SOURCE_READER_ALL_STREAMS, false); reader.SetStreamSelection(MFInterops.MF_SOURCE_READER_FIRST_AUDIO_STREAM, true); using (var mediaType = MFMediaType.CreateEmpty()) { mediaType.MajorType = MediaTypes.MediaTypeAudio; mediaType.SubType = MediaTypes.MEDIATYPE_Pcm; //variable?? reader.SetCurrentMediaType(MFInterops.MF_SOURCE_READER_FIRST_AUDIO_STREAM, mediaType); } using (var currentMediaType = reader.GetCurrentMediaType(MFInterops.MF_SOURCE_READER_FIRST_AUDIO_STREAM)) { if (currentMediaType.MajorType != MediaTypes.MediaTypeAudio) throw new InvalidOperationException(String.Format("Invalid Majortype set on sourcereader: {0}.", currentMediaType.MajorType.ToString())); AudioEncoding encoding; if (currentMediaType.SubType == MediaTypes.MEDIATYPE_Pcm) encoding = AudioEncoding.Pcm; else if (currentMediaType.SubType == MediaTypes.MEDIATYPE_IeeeFloat) encoding = AudioEncoding.IeeeFloat; else throw new InvalidOperationException(String.Format("Invalid Subtype set on sourcereader: {0}.", currentMediaType.SubType.ToString())); _waveFormat = new WaveFormat(currentMediaType.SampleRate, currentMediaType.BitsPerSample, currentMediaType.Channels, encoding); } reader.SetStreamSelection(MFInterops.MF_SOURCE_READER_FIRST_AUDIO_STREAM, true); if (_hasFixedLength) _length = GetLength(reader); return reader; } catch (Exception) { Dispose(); throw; } }