// private static void ConfigureAudioProfile(IWMEncProfile2 encProfile, IWMEncAudienceObj aud, WmaStreamSettings audStream) // { // Logger.WriteLogMessage("Using audio VBR mode [" + audStream.VbrMode + "], bitrate [" + audStream.Bitrate + "], peak bitrate [" + audStream.PeakBitrate + "]."); // // switch (audStream.VbrMode) // { // case TranscoderSettingsBase.VbrModes.BitrateVBR: // encProfile.set_VBRMode(WMENC_SOURCE_TYPE.WMENC_AUDIO, 0, WMENC_PROFILE_VBR_MODE.WMENC_PVM_BITRATE_BASED); // break; // case TranscoderSettingsBase.VbrModes.BitrateVBRPeak: // encProfile.set_VBRMode(WMENC_SOURCE_TYPE.WMENC_AUDIO, 0, WMENC_PROFILE_VBR_MODE.WMENC_PVM_PEAK); // aud.set_AudioPeakBitrate(0, audStream.PeakBitrate ?? audStream.Bitrate); // break; // case TranscoderSettingsBase.VbrModes.QualityVBR: // encProfile.set_VBRMode(WMENC_SOURCE_TYPE.WMENC_AUDIO, 0, WMENC_PROFILE_VBR_MODE.WMENC_PVM_UNCONSTRAINED); // break; // case TranscoderSettingsBase.VbrModes.CBR: // encProfile.set_VBRMode(WMENC_SOURCE_TYPE.WMENC_AUDIO, 0, WMENC_PROFILE_VBR_MODE.WMENC_PVM_NONE); // break; // } // // int codec = -1; // object codecName; // int fourCC; // // Logger.WriteLogMessage("Attempting to enumerate audio codec [" + audStream.CodecName + "]."); // // for (int i = 0; i < encProfile.AudioCodecCount; i++) // { // fourCC = encProfile.EnumAudioCodec(i, out codecName); // // if (audStream.CodecName == (string)codecName) // { // codec = i; // break; // } // } // // if (codec < 0) // throw new Common.InvalidOperationException("Failed to locate audio codec [" + audStream.CodecName + "]."); // // Logger.WriteLogMessage("Using audio codec [" + audStream.CodecName + "], index [" + codec + "]."); // // aud.set_AudioCodec(0, codec); // // Logger.WriteLogMessage("Using audio sample rate [" + audStream.SampleRate + "], channels [" + audStream.Channels + "], bits per sample [" + audStream.BitsPerSample + "], ."); // // aud.SetAudioConfig(0, (short)audStream.Channels, (int)audStream.SampleRate, audStream.Bitrate, (short)audStream.BitsPerSample); // // Logger.WriteLogMessage("Configured audio profile."); // } public static void ReleaseEncoder(ref WMEncoder encoder) { if (encoder == null) { return; } try { Logger.WriteLogMessage("Attempting to stop WMEncoder application, state: " + encoder.RunState + "."); if (encoder.RunState != WMENC_ENCODER_STATE.WMENC_ENCODER_STOPPED) { encoder.Stop(); } encoder.Reset(); Logger.WriteLogMessage("Successfully stopped WMEncoder application, state: " + encoder.RunState + "."); } catch (COMException e) { Logger.WriteLogError("Failed to kill WMEncoder application. HRESULT [" + String.Format("0x{0:x}", e.ErrorCode) + "].", e); } catch (Exception e) { Logger.WriteLogError("Failed to kill WMEncoder application.", e); } finally { Logger.WriteLogMessage("Releasing runtime callable wrapper."); while (Marshal.ReleaseComObject(encoder) > 0) { Logger.WriteLogMessage("Releasing runtime callable wrapper again."); } encoder = null; Logger.WriteLogMessage("Successfully killed WMEncoder application."); } }
// private static void ConfigureAudioProfile(IWMEncProfile2 encProfile, IWMEncAudienceObj aud, WmaStreamSettings audStream) // { // Logger.WriteLogMessage("Using audio VBR mode [" + audStream.VbrMode + "], bitrate [" + audStream.Bitrate + "], peak bitrate [" + audStream.PeakBitrate + "]."); // // switch (audStream.VbrMode) // { // case TranscoderSettingsBase.VbrModes.BitrateVBR: // encProfile.set_VBRMode(WMENC_SOURCE_TYPE.WMENC_AUDIO, 0, WMENC_PROFILE_VBR_MODE.WMENC_PVM_BITRATE_BASED); // break; // case TranscoderSettingsBase.VbrModes.BitrateVBRPeak: // encProfile.set_VBRMode(WMENC_SOURCE_TYPE.WMENC_AUDIO, 0, WMENC_PROFILE_VBR_MODE.WMENC_PVM_PEAK); // aud.set_AudioPeakBitrate(0, audStream.PeakBitrate ?? audStream.Bitrate); // break; // case TranscoderSettingsBase.VbrModes.QualityVBR: // encProfile.set_VBRMode(WMENC_SOURCE_TYPE.WMENC_AUDIO, 0, WMENC_PROFILE_VBR_MODE.WMENC_PVM_UNCONSTRAINED); // break; // case TranscoderSettingsBase.VbrModes.CBR: // encProfile.set_VBRMode(WMENC_SOURCE_TYPE.WMENC_AUDIO, 0, WMENC_PROFILE_VBR_MODE.WMENC_PVM_NONE); // break; // } // // int codec = -1; // object codecName; // int fourCC; // // Logger.WriteLogMessage("Attempting to enumerate audio codec [" + audStream.CodecName + "]."); // // for (int i = 0; i < encProfile.AudioCodecCount; i++) // { // fourCC = encProfile.EnumAudioCodec(i, out codecName); // // if (audStream.CodecName == (string)codecName) // { // codec = i; // break; // } // } // // if (codec < 0) // throw new Common.InvalidOperationException("Failed to locate audio codec [" + audStream.CodecName + "]."); // // Logger.WriteLogMessage("Using audio codec [" + audStream.CodecName + "], index [" + codec + "]."); // // aud.set_AudioCodec(0, codec); // // Logger.WriteLogMessage("Using audio sample rate [" + audStream.SampleRate + "], channels [" + audStream.Channels + "], bits per sample [" + audStream.BitsPerSample + "], ."); // // aud.SetAudioConfig(0, (short)audStream.Channels, (int)audStream.SampleRate, audStream.Bitrate, (short)audStream.BitsPerSample); // // Logger.WriteLogMessage("Configured audio profile."); // } public static void ReleaseEncoder(ref WMEncoder encoder) { if (encoder == null) return; try { Logger.WriteLogMessage("Attempting to stop WMEncoder application, state: " + encoder.RunState + "."); if (encoder.RunState != WMENC_ENCODER_STATE.WMENC_ENCODER_STOPPED) encoder.Stop(); encoder.Reset(); Logger.WriteLogMessage("Successfully stopped WMEncoder application, state: " + encoder.RunState + "."); } catch (COMException e) { Logger.WriteLogError("Failed to kill WMEncoder application. HRESULT [" + String.Format("0x{0:x}", e.ErrorCode) + "].", e); } catch (Exception e) { Logger.WriteLogError("Failed to kill WMEncoder application.", e); } finally { Logger.WriteLogMessage("Releasing runtime callable wrapper."); while (Marshal.ReleaseComObject(encoder) > 0) { Logger.WriteLogMessage("Releasing runtime callable wrapper again."); } encoder = null; Logger.WriteLogMessage("Successfully killed WMEncoder application."); } }