private void sEnumDRMProfiles() { if (ComboBox_DRMProfile.Items.Count > 0) { return; } try { WMEncoder tempEncoder = new WMEncoder(); IWMDRMContentAuthor DRM = tempEncoder.EncoderDRMContentAuthor; IWMDRMProfileCollection DRMProColl = DRM.DRMProfileCollection; int i; ComboBox_DRMProfile.Items.Add("None"); for (i = 0; i < DRMProColl.Count; i++) { ComboBox_DRMProfile.Items.Add(DRMProColl.Item(i).Name); } ComboBox_DRMProfile.SelectedIndex = 0; tempEncoder = null; } catch (System.Runtime.InteropServices.COMException ex) { InstallEncoderQuery(ex); } catch (Exception ex) { string strError = ex.ToString(); } }
void _backgroundWorker_DoWork(object sender, DoWorkEventArgs e) { string glbstrErrLocation; WMEncoder Encoder = null; WMEncProfile2 Profile = null; IWMDRMContentAuthor DRMAuthor = null; IWMDRMProfileCollection DRMProColl = null; IWMDRMProfile DRMPro = null; IWMEncSourceGroup SrcGrp = null; IWMEncAudioSource SrcAud = null; IWMEncVideoSource2 SrcVid = null; _TwoPassEncoding = false; bool glbboolEncodingContinue = true;; DateTime time = DateTime.Now; try { Encoder = new WMEncoder(); Encoder.OnStateChange += new _IWMEncoderEvents_OnStateChangeEventHandler(this.Encoder_OnStateChange); _SrcGrpColl = Encoder.SourceGroupCollection; try { DRMAuthor = Encoder.EncoderDRMContentAuthor; DRMProColl = DRMAuthor.DRMProfileCollection; DRMPro = null; object vKeyID = null; if (_encodeInfo.DRMProfile != "None") { int intDRMProCount = 0; for (intDRMProCount = 0; intDRMProCount <= DRMProColl.Count - 1; intDRMProCount++) { if (DRMProColl.Item(intDRMProCount).Name == _encodeInfo.DRMProfile) { DRMPro = DRMProColl.Item(intDRMProCount); break; } } DRMAuthor.SetSessionDRMProfile(DRMPro.ID, ref vKeyID); } else { DRMAuthor.SetSessionDRMProfile(System.DBNull.Value.ToString(), ref vKeyID); DRMAuthor = null; DRMProColl = null; DRMPro = null; vKeyID = null; } } catch (Exception ex) { glbstrErrLocation = "Specify DRM Profile - " + ex.Message.ToString(); throw new ApplicationException(glbstrErrLocation, ex); } Profile = new WMEncProfile2(); Int32 intProContentType = 0; int intProVBRModeAudio = 0; int intProVBRModeVideo = 0; try { Profile.LoadFromFile(_encodeInfo.Profile); intProContentType = Profile.ContentType; intProVBRModeAudio = (int)Profile.get_VBRMode(WMENC_SOURCE_TYPE.WMENC_AUDIO, 0); intProVBRModeVideo = (int)Profile.get_VBRMode(WMENC_SOURCE_TYPE.WMENC_VIDEO, 0); } catch (Exception ex) { glbstrErrLocation = "Load Profile - " + ex.Message.ToString(); throw new ApplicationException(glbstrErrLocation, ex); } try { SrcGrp = _SrcGrpColl.Add("BatchEncode"); } catch (Exception ex) { glbstrErrLocation = "Source Group - " + ex.Message.ToString(); throw new ApplicationException(glbstrErrLocation, ex); } string strDestExtension = System.IO.Path.GetExtension(_encodeInfo.Destination); try { if (intProContentType == 1) { SrcAud = (WMEncoderLib.IWMEncAudioSource)SrcGrp.AddSource(WMENC_SOURCE_TYPE.WMENC_AUDIO); SrcAud.SetInput(_encodeInfo.Source, "", ""); } else if (intProContentType == 16) { SrcVid = (WMEncoderLib.IWMEncVideoSource2)SrcGrp.AddSource(WMENC_SOURCE_TYPE.WMENC_VIDEO); SrcVid.SetInput(_encodeInfo.Source, "", ""); } else if (intProContentType == 17) { SrcAud = (WMEncoderLib.IWMEncAudioSource)SrcGrp.AddSource(WMENC_SOURCE_TYPE.WMENC_AUDIO); SrcAud.SetInput(_encodeInfo.Source, "", ""); SrcVid = (WMEncoderLib.IWMEncVideoSource2)SrcGrp.AddSource(WMENC_SOURCE_TYPE.WMENC_VIDEO); SrcVid.SetInput(_encodeInfo.Source, "", ""); } else { _backgroundWorker.ReportProgress(0, "BatchEncode does not support this type of profile"); } } catch (Exception ex) { glbstrErrLocation = "Video / Audio Source - " + ex.Message.ToString(); throw new ApplicationException(glbstrErrLocation, ex); } try { SrcGrp.set_Profile(Profile); } catch (Exception ex) { glbstrErrLocation = "Encoding Profile - " + ex.Message.ToString(); throw new ApplicationException(glbstrErrLocation, ex); } IWMEncDisplayInfo Descr = Encoder.DisplayInfo; try { if (_encodeInfo.Title != "") { Descr.Title = _encodeInfo.Title; } if (_encodeInfo.Description != "") { Descr.Description = _encodeInfo.Description; } if (_encodeInfo.Author != "") { Descr.Author = _encodeInfo.Author; } if (_encodeInfo.Copyright != "") { Descr.Copyright = _encodeInfo.Copyright; } } catch (Exception ex) { glbstrErrLocation = "Display Information - " + ex.Message.ToString(); throw new ApplicationException(glbstrErrLocation, ex); } try { if (intProContentType == 16 || intProContentType == 17) { if (_encodeInfo.Crop == true) { SrcVid.CroppingBottomMargin = (int)_encodeInfo.CropBottom; SrcVid.CroppingTopMargin = (int)_encodeInfo.CropTop; SrcVid.CroppingLeftMargin = (int)_encodeInfo.CropLeft; SrcVid.CroppingRightMargin = (int)_encodeInfo.CropRight; } } } catch (Exception ex) { glbstrErrLocation = "Cropping - " + ex.Message.ToString(); throw new ApplicationException(glbstrErrLocation, ex); } try { if (intProContentType == 16 || intProContentType == 17) { SrcVid.Optimization = _encodeInfo.Preproc; } } catch (Exception ex) { glbstrErrLocation = "Video Optimization - " + ex.Message.ToString(); throw new ApplicationException(glbstrErrLocation, ex); } try { if (intProContentType == 1) { if (_encodeInfo.TwoPass == false) { SrcAud.PreProcessPass = 0; _TwoPassEncoding = false; } else { SrcAud.PreProcessPass = 1; _TwoPassEncoding = true; glbPassNumber = 1; } } else if (intProContentType == 16) { if (_encodeInfo.TwoPass == false) { SrcVid.PreProcessPass = 0; _TwoPassEncoding = false; } else { SrcVid.PreProcessPass = 1; _TwoPassEncoding = true; glbPassNumber = 1; } } else if (intProContentType == 17) { if (_encodeInfo.TwoPass == false) { SrcAud.PreProcessPass = 0; SrcVid.PreProcessPass = 0; _TwoPassEncoding = false; } else { switch (intProVBRModeAudio) { case 1: SrcAud.PreProcessPass = 1; break; case 2: SrcAud.PreProcessPass = 1; break; case 3: SrcAud.PreProcessPass = 0; break; case 4: SrcAud.PreProcessPass = 1; break; } switch (intProVBRModeVideo) { case 1: SrcVid.PreProcessPass = 1; break; case 2: SrcVid.PreProcessPass = 1; break; case 3: SrcVid.PreProcessPass = 0; break; case 4: SrcVid.PreProcessPass = 1; break; } _TwoPassEncoding = true; glbPassNumber = 1; } } else { _backgroundWorker.ReportProgress(0, "BatchEncode does not support this type of profile"); } } catch (Exception ex) { glbstrErrLocation = "Passes - " + ex.Message.ToString(); throw new ApplicationException(glbstrErrLocation, ex); } IWMEncFile2 File = (IWMEncFile2)Encoder.File; try { File.LocalFileName = _encodeInfo.Destination; } catch (Exception ex) { glbstrErrLocation = "Output File - " + ex.Message.ToString(); throw new ApplicationException(glbstrErrLocation, ex); } int intDurationAudio = 0; int intDurationVideo = 0; int intDurationFinal; try { _backgroundWorker.ReportProgress(0, "Preparing to encode"); Encoder.PrepareToEncode(true); } catch (Exception ex) { glbstrErrLocation = "Encoder Prepare - " + ex.Message.ToString(); throw new ApplicationException(glbstrErrLocation, ex); } try { if (SrcAud != null) { intDurationAudio = System.Convert.ToInt32(SrcAud.Duration / 1000); } } catch (Exception) { } try { if (SrcVid != null) { intDurationVideo = System.Convert.ToInt32(SrcVid.Duration / 1000); } } catch (Exception) { } if (intDurationAudio == 0) { intDurationFinal = intDurationVideo; } else if (intDurationVideo == 0) { intDurationFinal = intDurationAudio; } else { if (intDurationVideo >= intDurationAudio) { intDurationFinal = intDurationVideo; } else { intDurationFinal = intDurationAudio; } } glbintSourceDuration = intDurationFinal; try { if (glbboolEncodingContinue == true) { Encoder.Start(); do { if (_backgroundWorker.CancellationPending) { Encoder.Stop(); e.Cancel = true; _ev.Set(); } sReportPercentComplete(Encoder); }while (!_ev.WaitOne(1000)); } } catch (Exception ex) { glbstrErrLocation = "Encoder Start - " + ex.Message.ToString(); throw new ApplicationException(glbstrErrLocation, ex); } if (e.Cancel) { return; } else { _backgroundWorker.ReportProgress(0, "Encoding Complete"); return; } } finally { if (_SrcGrpColl != null) { try { Encoder.Stop(); _SrcGrpColl.Remove(0); } catch { } Marshal.ReleaseComObject(_SrcGrpColl); _SrcGrpColl = null; } if (Profile != null) { Marshal.ReleaseComObject(Profile); Profile = null; } if (Encoder != null) { Encoder.OnStateChange -= new _IWMEncoderEvents_OnStateChangeEventHandler(this.Encoder_OnStateChange); Marshal.ReleaseComObject(Encoder); Encoder = null; } e.Result = DateTime.Now - time; } }