Example #1
0
//        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.");
            }
        }
Example #2
0
//        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.");
			}
		}