public static Bitmap MFrame2Bitmap(ref MFFrame _mFrame, out M_VID_PROPS _vidProps) { // Clone frame to RGB32 MFFrame mFrame = _mFrame; _mFrame.MFClone(out mFrame, eMFrameClone.eMFC_Reference, eMFCC.eMFCC_ARGB32); // FrameVideoGetBytes(out cbPicture, out pbPicture); int cbSize; long pbVideo; mFrame.MFVideoGetBytes(out cbSize, out pbVideo); // Get Props from frame int audioSample; M_AV_PROPS avProps; mFrame.MFAVPropsGet(out avProps, out audioSample); // Create a bitmap from frame Bitmap bmpPicture = new Bitmap(avProps.vidProps.nWidth, Math.Abs(avProps.vidProps.nHeight), avProps.vidProps.nRowBytes, System.Drawing.Imaging.PixelFormat.Format32bppRgb, new IntPtr(pbVideo)); _vidProps = avProps.vidProps; _mFrame = mFrame; return(bmpPicture); }
private void ConfigPlaylist() { MItem myBack; m_objMPLaylist.PlaylistBackgroundSet(null, "", "", out myBack); if (myBack != null) { System.Runtime.InteropServices.Marshal.ReleaseComObject(myBack); GC.Collect(); } // set convert format M_VID_PROPS mvid; M_AUD_PROPS maud; int fmtind; string fmtname; m_objMPLaylist.FormatVideoGet(eMFormatType.eMFT_Output, out mvid, out fmtind, out fmtname); m_objMPLaylist.FormatAudioGet(eMFormatType.eMFT_Output, out maud, out fmtind, out fmtname); m_objMPLaylist.FormatVideoSet(eMFormatType.eMFT_Convert, ref mvid); m_objMPLaylist.FormatAudioSet(eMFormatType.eMFT_Convert, ref maud); // set properties m_objMPLaylist.PropsSet("loop", "false"); m_objMPLaylist.PropsSet("active_frc", "false"); m_objMPLaylist.PropsSet("preview.drop_frames", "true"); M_VID_PROPS vidProps = new M_VID_PROPS(); vidProps.eVideoFormat = eMVideoFormat.eMVF_Custom; m_objMPLaylist.FormatVideoSet(eMFormatType.eMFT_Convert, ref vidProps); }
private void comboBoxVF_SelectedIndexChanged(object sender, EventArgs e) { M_VID_PROPS vidProps = new M_VID_PROPS(); string strFormat; m_objFile.FormatVideoGetByIndex(eMFormatType.eMFT_Convert, comboBoxVF.SelectedIndex, out vidProps, out strFormat); m_objFile.FormatVideoSet(eMFormatType.eMFT_Convert, ref vidProps); }
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) { M_VID_PROPS vidProps = new M_VID_PROPS(); string strFormat; myPlaylist.FormatVideoGetByIndex(eMFormatType.eMFT_Convert, comboBox1.SelectedIndex, out vidProps, out strFormat); //Set new video format myPlaylist.FormatVideoSet(eMFormatType.eMFT_Convert, ref vidProps); }
private bool isSameVideoProps(M_VID_PROPS vProps1, M_VID_PROPS vProps2) { if (vProps1.fccType == vProps2.fccType && vProps1.nWidth == vProps2.nWidth && vProps1.nHeight == vProps2.nHeight) { return(true); } return(false); }
private void formatList_SelectedIndexChanged(object sender, EventArgs e) { ListBox cbxChanged = (ListBox)sender; M_VID_PROPS vidProps = new M_VID_PROPS(); string strFormat; m_objLive.FormatVideoGetByIndex(eMFormatType.eMFT_Input, cbxChanged.SelectedIndex, out vidProps, out strFormat); //Set new video format m_objLive.FormatVideoSet(eMFormatType.eMFT_Input, ref vidProps); }
private void thread_DoWork(CancellationToken token) { while (!token.IsCancellationRequested) { if (encode || live) { MFFrame frameLive = null; MFFrame frameFile = null; M_AV_PROPS props = new M_AV_PROPS(); if (live) { M_VID_PROPS vidProps = new M_VID_PROPS(); vidProps.eVideoFormat = eMVideoFormat.eMVF_HD1080_5994i; m_objLive.FormatVideoSet(eMFormatType.eMFT_Input, ref vidProps); props.vidProps.eVideoFormat = eMVideoFormat.eMVF_Custom; m_objLive.SourceFrameConvertedGet(ref props, -1, out frameLive, ""); } if (encode) { props.vidProps.eVideoFormat = eMVideoFormat.eMVF_HD1080_5994i; m_objReader.SourceFrameConvertedGet(ref props, -1, out frameFile, ""); if (frameLive != null) { frameLive.MFOverlay(frameFile, null, 0, 0, 0, "audio_gain=0", "ch1"); } } if (frameLive != null) { m_objPreview.ReceiverFramePut(frameLive, -1, ""); } else { m_objPreview.ReceiverFramePut(frameFile, -1, ""); } if (frameLive != null) { Marshal.FinalReleaseComObject(frameLive); } if (frameFile != null) { Marshal.FinalReleaseComObject(frameFile); } } } }
/// <summary> /// Set video format /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void comboBoxVFOut_SelectedIndexChanged(object sender, EventArgs e) { try { if (comboBoxVFOut.SelectedIndex != 0) { // Set video format M_VID_PROPS vidProps = new M_VID_PROPS(); vidProps.eVideoFormat = (eMVideoFormat)comboBoxVFOut.SelectedItem; ((IMFormat)m_objLive).FormatVideoSet(eMFormatType.eMFT_Convert, ref vidProps); } } catch { throw; } }
public OverlayHTMLWindow(Object _objOverlayHTML, Object _source, M_VID_PROPS _vProps) { m_bStateOk = false; InitializeComponent(); m_vProps = _vProps; try { m_objOverlayHTML = (MFOverlayHTMLClass)_objOverlayHTML; m_object = _source; } catch (Exception ex) { return; } if (m_vProps.nHeight == 0 || m_vProps.nWidth == 0) { return; } m_objPreview = new MFPreviewClass(); m_objPreview.PreviewWindowSet("", panelPreview.Handle.ToInt32()); m_objPreview.PreviewEnable("", 0, 1); m_objPreview.PropsSet("preview.downscale", "0"); m_objPreview.PropsSet("deinterlace", "false"); panelPreview.MouseWheel += new MouseEventHandler(panelPreview_MouseWheel); panelPreview.KeyDown += new KeyEventHandler(panelPreview_KeyDown); panelPreview.KeyPress += new KeyPressEventHandler(panelPreview_KeyPress); panelPreview.KeyUp += new KeyEventHandler(panelPreview_KeyUp); mfAttributesList.SetControlledObject((IMProps)m_objOverlayHTML); mfAttributesListPresets1.SetControlledObject(m_objOverlayHTML); mfAttributesListPresets1.OnPropsUpdated += new EventHandler(mfAttributesListPresets1_OnPropsUpdated); m_objOverlayHTML.OnEventSafe += new IMEventsEvent_OnEventSafeEventHandler(m_objOverlayHTML_OnEventSafe); string strCurrURL; m_objOverlayHTML.PropsGet("current_url", out strCurrURL); textBoxPathOrURL.Text = strCurrURL; m_bStateOk = true; }
/// <summary> /// Format changed /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void comboBoxAVF_SelectedIndexChanged(object sender, EventArgs e) { ComboBox cbxChanged = (ComboBox)sender; string strType = (string)cbxChanged.Tag; if (strType == "video") { M_VID_PROPS vidProps = new M_VID_PROPS(); string strFormat; ((IMFormat)m_objLive).FormatVideoGetByIndex(eMFormatType.eMFT_Input, cbxChanged.SelectedIndex, out vidProps, out strFormat); //Set new video format ((IMFormat)m_objLive).FormatVideoSet(0, ref vidProps); } else if (strType == "ext_audio") { M_AUD_PROPS audProps = new M_AUD_PROPS(); string strFormat; ((IMFormat)m_objLive).FormatAudioGetByIndex(eMFormatType.eMFT_Input, cbxChanged.SelectedIndex, out audProps, out strFormat); //Set new audio format ((IMFormat)m_objLive).FormatAudioSet(0, ref audProps); } }
private void buttonHTMLProps_Click(object sender, EventArgs e) { M_VID_PROPS vProps = new M_VID_PROPS(); int idx; string strName; m_objPlaylist.FormatVideoGet(eMFormatType.eMFT_Convert, out vProps, out idx, out strName); OverlayHTMLWindow overlayHTMLWind = new OverlayHTMLWindow(m_objOverlayHTML, m_objPlaylist, vProps); if (overlayHTMLWind.m_bStateOk) { overlayHTMLWind.ShowDialog(); } string strCurrURL; m_objOverlayHTML.PropsGet("current_url", out strCurrURL); if (strCurrURL != null) { textBoxHTMLURL.Text = strCurrURL.Contains("demo.html") ? "demo" : strCurrURL; } }
void StartBug() { // playlist initialization M_VID_PROPS vidProps = new M_VID_PROPS(); vidProps.eVideoFormat = eMVideoFormat.eMVF_Custom; MPlaylist.FormatVideoSet(eMFormatType.eMFT_Convert, ref vidProps); M_AUD_PROPS audioProp = new M_AUD_PROPS(); audioProp.nChannels = 0; //because some writer codecs (such as mp3) do not support 16 audio channels. MPlaylist.FormatAudioSet(eMFormatType.eMFT_Convert, audioProp); // playlist cue //set empty background. In this case playlist doesn't output anything until playback isn't started. MItem myBack; MPlaylist.PlaylistBackgroundSet(null, "", "", out myBack); if (myBack != null) { System.Runtime.InteropServices.Marshal.ReleaseComObject(myBack); GC.Collect(); } // set convert format M_VID_PROPS mvid; M_AUD_PROPS maud; int fmtind; string fmtname; MPlaylist.FormatVideoGet(eMFormatType.eMFT_Output, out mvid, out fmtind, out fmtname); MPlaylist.FormatAudioGet(eMFormatType.eMFT_Output, out maud, out fmtind, out fmtname); MPlaylist.FormatVideoSet(eMFormatType.eMFT_Convert, ref mvid); MPlaylist.FormatAudioSet(eMFormatType.eMFT_Convert, ref maud); // set properties MPlaylist.PropsSet("loop", "false"); MPlaylist.PropsSet("active_frc", "false"); MPlaylist.PropsSet("preview.drop_frames", "true"); vidProps.eVideoFormat = eMVideoFormat.eMVF_Custom; MPlaylist.FormatVideoSet(eMFormatType.eMFT_Convert, ref vidProps); int index = -1; MItem item; MPlaylist.PlaylistAdd(null, @"\\192.168.0.100\MLFiles\Trash\Roman\WorkFiles\FilesFromCostumer\2019.05.27 Etere31929\kom_mult_kosmik_007sh_s.mpg", "", ref index, out item); // writer properties MWriter.PropsSet("rate_control", "true"); MWriter.PropsSet("pull_mode", "false"); MWriter.PropsSet("external_process", "false"); //set audio mapping on first 2 channels only string desc; IMAudioTrack audioTrack; MPlaylist.AudioTrackGetByIndex(0, out desc, out audioTrack); int nChIn; int nChOutIdx; int nChOut; audioTrack.TrackChannelsGet(out nChIn, out nChOutIdx, out nChOut); for (int i = 0; i < nChOut; i++) { int mute; if (i < 2) { // switch on the required audio channels mute = 0; } else { // set mute all other audio channels mute = 1; } audioTrack.TrackMuteSet(i, mute, 0.0); } string encodeConfig = @"format='mp4' start_timecode='00:00:00:00' video::codec='q264sw' video::size='640x360' video::b='1M' video::minrate='1M' video::maxrate='1M' video::ar='' video::ref_frames='3' video::profile='Baseline' video::level='4.1' video::rc_type='cbr' audio::codec='aac' audio::ar='48000'"; MWriter.WriterNameSet(@"\\192.168.0.100\MLFiles\Trash\Roman\WorkFiles\FilesFromCostumer\2019.05.27 Etere31929\test\" + count.ToString() + ".mp4", encodeConfig); MWriter.ObjectStart(MPlaylist); MPlaylist.FilePlayStart(); Marshal.ReleaseComObject(item); //Marshal.ReleaseComObject(myBack); GC.Collect(); }
protected override void OnSelectedFormatChanged() { M_VID_PROPS vidProps = _vidPropsCache[this.SelectedFormat]; this.MFormatObject.FormatVideoSet(this.FormatType, ref vidProps); }