void StartTest() { bool reading = true; while (reading) { // Read the next frame from our source video m_objRed.SourceFrameGet(-1, out MFORMATSLib.MFFrame sourceFrame, ""); // Get the information about the frame and stop reading if we reached the last frame sourceFrame.MFAllGet(out MFORMATSLib.MF_FRAME_INFO frameInfo); if ((frameInfo.mTime.eFFlags & MFORMATSLib.eMFrameFlags.eMFF_Last) != 0) { reading = false; } // Send the frame to the encoder m_objWriter.ReceiverFramePut(sourceFrame, -1, ""); m_objPrev.ReceiverFramePut(sourceFrame, -1, ""); // Release the source frame Marshal.ReleaseComObject(sourceFrame); } m_objRed.ReaderClose(); m_objWriter.WriterClose(1); }
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); } } } }
private void thread_DoWork(CancellationToken token) { while (!token.IsCancellationRequested) { if (start) { count++; if (count >= 0 && count <= 3000) { MFFrame frame; m_objReader.SourceFrameGet(-1, out frame, ""); m_objPreview.ReceiverFramePut(frame, -1, ""); //m_objWriter.ReceiverFramePut(frame, -1, ""); Marshal.ReleaseComObject(frame); } if (count > 3000) { endTime = DateTime.Now; //m_objWriter.WriterClose(0); m_objReader.ReaderClose(); BeginInvoke(new InvokeDelegate(UpdateButton)); start = false; } BeginInvoke(new InvokeDelegate(UpdateLabel)); } } }
private void thread_DoWork(CancellationToken token) { while (!token.IsCancellationRequested) { if (encode) { MFFrame frame = null; M_AV_PROPS props = new M_AV_PROPS(); props.vidProps.eVideoFormat = eMVideoFormat.eMVF_HD1080_25p; //m_objReader.IMFSource_SourceFrameGet(-1, out frame, ""); m_objReader.SourceFrameConvertedGet(ref props, -1, out frame, ""); if (cg) { ShowPluggin(m_objCharGen, ref frame); } m_objWriter.ReceiverFramePut(frame, -1, ""); m_objPreview.ReceiverFramePut(frame, -1, ""); Marshal.FinalReleaseComObject(frame); } } }
private void thread_DoWork(CancellationToken token) { while (!token.IsCancellationRequested) { if (decode) { if (firstFrame) { prevFrameTime = DateTime.Now; firstFrame = false; } MFFrame frame = null; m_objReader.SourceFrameGet(-1, out frame, ""); m_objPreview.ReceiverFramePut(frame, -1, ""); TimeSpan tick = DateTime.Now - prevFrameTime; framesTimes.Add(tick.TotalMilliseconds); frame.MFTimeGet(out M_TIME time); mes += $"start_time ={time.rtStartTime}, end_time = {time.rtEndTime}, span ={tick.TotalMilliseconds}, dif = {framesTimes[framesTimes.Count-1] - framesTimes[framesTimes.Count-2]}"; BeginInvoke(new InvokeDelegate(UpdateListBox)); Marshal.FinalReleaseComObject(frame); } } }
private void thread_DoWork(CancellationToken token) { while (!token.IsCancellationRequested) { if (start && path != null) { MFFrame pFrame = null; m_objReader.SourceFrameGet(-1, out pFrame, ""); M_TIME timeF; pFrame.MFTimeGet(out timeF); if (TC) { GetTC(timeF); } m_objPrev.ReceiverFramePut(pFrame, -1, ""); Marshal.ReleaseComObject(pFrame); } } }
private void thread_DoWork(CancellationToken token) { while (!token.IsCancellationRequested) { if (decode) { MFFrame frame = null; M_AV_PROPS properties = new M_AV_PROPS { vidProps = new M_VID_PROPS { eVideoFormat = eMVideoFormat.eMVF_Custom, nWidth = 800, nHeight = 600, fccType = eMFCC.eMFCC_ARGB32 } }; //M_AV_PROPS properties = new M_AV_PROPS { vidProps = new M_VID_PROPS { eVideoFormat = eMVideoFormat.eMVF_HD720_50p, fccType = eMFCC.eMFCC_ARGB32 } }; m_objReader.SourceFrameConvertedGet(ref properties, -1, out frame, ""); frame.MFVideoGetBytes(out var size, out var buffer); Console.Out.WriteLine($"Frame size: {size}"); frame.MFAVPropsGet(out var frameProperties, out var sampleCount); Console.Out.WriteLine($"Expected: {properties.vidProps.nWidth}, {properties.vidProps.nHeight}, {properties.vidProps.fccType}"); Console.Out.WriteLine($"Found: {frameProperties.vidProps.nWidth}, {frameProperties.vidProps.nHeight}, {frameProperties.vidProps.fccType}"); m_objPreview.ReceiverFramePut(frame, -1, ""); Marshal.FinalReleaseComObject(frame); } } }
public void UpdatePreview(MFFrame _pFrame) { int nASamples = 0; _pFrame.MFAVPropsGet(out m_avProps, out nASamples); m_objPreview.ReceiverFramePut(_pFrame, -1, ""); }
private void thread_DoWork(CancellationToken token) { while (!token.IsCancellationRequested) { MFFrame frame = null; if (!decoder) { noSignalFrame.MFClone(out frame, eMFrameClone.eMFC_Full, eMFCC.eMFCC_Default); m_objPreview.ReceiverFramePut(frame, -1, ""); } if (decoder) { m_objLive.SourceFrameGet(-1, out frame, ""); m_objPreview.ReceiverFramePut(frame, -1, ""); } if (frame != null) { Marshal.ReleaseComObject(frame); } } }
private void GetFrame_btn_Click(object sender, EventArgs e) { m_objReaderFrame.ReaderOpen(path, ""); m_objReaderFrame.SourceAVPropsGet(out M_AV_PROPS props); m_objReaderFrame.ReaderDurationGet(out double duration); m_objReaderFrame.SourceFrameConvertedGetByTime(ref props, duration / 2, -1, out MFFrame frameTumbnail, ""); m_objPreviewFrame.ReceiverFramePut(frameTumbnail, -1, ""); Marshal.ReleaseComObject(frameTumbnail); }
private void thread_DoWork(CancellationToken token) { while (!token.IsCancellationRequested) { MFFrame pFrame = null; m_objMFReader.SourceFrameGetByTime(90000000000000, -1, out pFrame, ""); //m_objMFReader.SourceFrameConvertedGetByTime(ref m_avProps, dblRequest, -1, out pFrame, strParams); m_objPreview.ReceiverFramePut(pFrame, -1, ""); Marshal.ReleaseComObject(pFrame); } }
private void thread_DoWork(CancellationToken cancelSource) { while (!cancelSource.IsCancellationRequested) { if (isWorking) { MFFrame frame = null; mLive.SourceFrameConvertedGet(ref avProps, -1, out frame, ""); if (frame != null) { if (isRec) { btnRecord.Enabled = false; btnRecord.Text = "Recording"; btnRecord.BackColor = Color.Red; try { mWriter.ReceiverFramePut(frame, -1, ""); //UpdateStatistic() } catch (Exception e) { MessageBox.Show("Error: " + e.ToString()); } } } else { btnRecord.Enabled = true; btnRecord.Text = "Record"; btnRecord.BackColor = Color.AntiqueWhite; } mPreview.ReceiverFramePut(frame, -1, ""); Marshal.ReleaseComObject(frame); } else { Thread.Sleep(1); } } }
private void thread_DoWork(CancellationToken token) { while (!token.IsCancellationRequested) { if (encode) { MFFrame frame = null; M_AV_PROPS props = new M_AV_PROPS(); props.vidProps.eVideoFormat = eMVideoFormat.eMVF_Disabled; m_objReader.SourceFrameConvertedGet(ref props, -1, out frame, ""); m_objPreview.ReceiverFramePut(frame, -1, ""); Marshal.FinalReleaseComObject(frame); } } }
private void Button1_Click(object sender, EventArgs e) { reader.PropsSet("experimental.mfcodecs", "true"); reader.PropsSet("experimental.out_video_packets", "true"); reader.PropsSet("external_process", "false"); reader.ReaderOpen(@"M:\TEST_VIDEOS\Moneyball.2011.720p.BluRay.x264-HiDt.mkv", ""); writer.PropsSet("external_process", "false"); writer.WriterSet(@"M:\TempVideo\mariovideo.mp4", 0, "format='mp4' video::codec='packets' audio::codec='audio_packets'"); //writer.PropsSet("rate_control", "true"); //writer.PropsSet("pull_mode", "false"); var w = new Stopwatch(); w.Start(); DateTime start = DateTime.Now; while (count <= 2000) { count++; if (count >= 1000) { MFFrame frame; reader.SourceFrameGet(-1, out frame, ""); writer.ReceiverFramePut(frame, -1, ""); prev.ReceiverFramePut(frame, -1, ""); Marshal.ReleaseComObject(frame); BeginInvoke(new InvokeDelegate(UpdateLabel)); } } DateTime end = DateTime.Now; w.Stop(); writer.WriterClose(0); reader.ReaderClose(); int dif = (end.Millisecond + end.Second * 1000 + end.Minute * 60 * 1000) - (start.Millisecond + start.Second * 1000 + start.Minute * 60 * 1000); button1.Text = "END. Dif ==" + dif.ToString(); }
private void thread_DoWork(CancellationToken token) { while (!token.IsCancellationRequested) { try { if (starFile) { MFFrame frame; m_objReaderFile.SourceFrameConvertedGet(ref props, 0, out frame, ""); m_objWriter.ReceiverFramePut(frame, -1, ""); m_objPreviewPub.ReceiverFramePut(frame, -1, ""); openAndPublish_btn.BackColor = Color.Green; Marshal.ReleaseComObject(frame); } } catch (Exception ex) { openAndPublish_btn.BackColor = Color.Red; MessageBox.Show(ex.ToString()); } try { if (startStream) { MFFrame frame; m_objReaderStream.SourceFrameConvertedGet(ref props, -1, out frame, ""); m_objPreviewRec.ReceiverFramePut(frame, 0, ""); receiveStream_btn.BackColor = Color.Green; Marshal.ReleaseComObject(frame); } } catch (Exception ex) { receiveStream_btn.BackColor = Color.Red; MessageBox.Show(ex.ToString()); } } }
bool NextFrame() { MFFrame pFrame = null; if (start) { count++; if (count > 150) { WriterSet(); count = 0; } m_objRed.SourceFrameGet(-1, out pFrame, ""); m_objWr1.ReceiverFramePut(pFrame, -1, ""); m_objPrev.ReceiverFramePut(pFrame, -1, ""); Marshal.ReleaseComObject(pFrame); } return(true); }
private bool NextFrame() { if (m_objReader != null) { MFFrame frame = null; MFFrame frameOver = null; MFFrame frameClone = null; M_AV_PROPS props; m_objReader.SourceAVPropsGet(out props); props.vidProps.eVideoFormat = eMVideoFormat.eMVF_HD1080_50i; m_objReader.SourceFrameConvertedGet(ref props, -1, out frame, ""); if (start) { m_objReader.SourceFrameConvertedGet(ref props, 0, out frameOver, ""); //frame.MFOverlayRect(frameOver, null, ref overlayRect, eMFOverlayFlags.eMFOF_Crop, 1, "", ""); //frame.MFOverlay(frameOver, null, 10, 10, 1, "", "ch1"); } frame.MFClone(out frameClone, eMFrameClone.eMFC_Reference, eMFCC.eMFCC_RGB24); m_objPrev.ReceiverFramePut(frameClone, -1, ""); Marshal.ReleaseComObject(frame); if (frameOver != null) { Marshal.ReleaseComObject(frameOver); } if (frameClone != null) { Marshal.ReleaseComObject(frameClone); } } return(true); }
private Task RenderAsync(MFFrame frame) { return(Task.Run(() => mfPreview.ReceiverFramePut(frame, -1, ""))); }
private bool NextFrame() { // Get request pos and set pause and reverse flags double dblRequest = -1.0; string strParams = string.Empty; // Update player state lock (playerState.stateLock) { if (playerState.state == eState.eST_Pause) { strParams = " pause=true"; } else if (playerState.state == eState.eST_PlayRev || playerState.state == eState.eST_StepRev) { strParams = " reverse=true"; } // Update player state if (playerState.state == eState.eST_StepFwd || playerState.state == eState.eST_StepRev) { // Pause on next iteration - because single frame was requested playerState.state = eState.eST_Pause; } // Get request time and set next cycle request to next frame // -1 as first parameter means "give me next frame", -5 means "give me next next 5th frame" etc, // this works accordingly when the reverse=true parameter is set. // positive values are uninterpreted as "give me frame at position" dblRequest = playerState.dblFrameRequest; playerState.dblFrameRequest = -1 * (int)(playerState.dblRate); } // Next frame cycle: // Get frame from reader and send to preview // Note: Preview keep frame according to frame time MFFrame pFrame = null; lock (objLock) // For prevent reader replace in OpenFile() and overlay change { // Get next frame or frame by position // -1 as first parameter means "give me next frame", -5 means "give me next next 5th frame" etc, // this works accordingly when the reverse=true parameter is set. // positive values are uninterpreted as "give me frame at position" try { if (objMFReader != null) { objMFReader.SourceFrameConvertedGetByTime(ref avProps, dblRequest, -1, out pFrame, strParams); } // Update avProps if (pFrame != null) { int nASamples = 0; pFrame.MFAVPropsGet(out avProps, out nASamples); } } catch (System.Exception ex) { MessageBox.Show("Error occurs during file decoding:\n\n" + ex.Message, playerState.strFileName, MessageBoxButtons.OK, MessageBoxIcon.Warning); } } if (pFrame != null) { try { objPreview.ReceiverFramePut(pFrame, -1, ""); releaseComObj(pFrame); } catch (System.Exception ex) { MessageBox.Show("Error occurs during frame processing:\n\n" + ex.Message, playerState.strFileName, MessageBoxButtons.OK, MessageBoxIcon.Warning); return(false); } } // Check for the last frame if ((Time.eFFlags & eMFrameFlags.eMFF_Last) != 0) { lock (playerState.stateLock) { // Pause playback at the end of the file if loop is disabled if (!playerState.bLoop) { pause(); } if (playerState.state == eState.eST_PlayRev) { // Rewind to end in case of reverse playback seek(playerState.dblDuration); } else if (playerState.state == eState.eST_PlayFwd) { // Rewind to start in case of direct playback seek(0); } } } return(true); }
private void thread_DoWork(CancellationToken token) { while (!token.IsCancellationRequested) { if (start) { MFFrame frame1 = null; MFFrame frame2 = null; MFFrame frame3 = null; MFFrame frame4 = null; MFFrame frame5 = null; MFFrame frame6 = null; MFFrame frame7 = null; MFFrame frame8 = null; MFFrame frame9 = null; MFFrame frame10 = null; MFFrame frame11 = null; MFFrame frame12 = null; MFFrame frame13 = null; MFFrame frame14 = null; MFFrame frame15 = null; MFFrame frame16 = null; MFFrame frame17 = null; MFFrame frame18 = null; MFFrame frame19 = null; MFFrame frame20 = null; MFFrame frame21 = null; MFFrame frame22 = null; MFFrame frame23 = null; MFFrame frame24 = null; if (first_chb.Checked) { m_objReader1.SourceFrameGet(-1, out frame1, ""); m_objReader2.SourceFrameGet(-1, out frame2, ""); m_objReader3.SourceFrameGet(-1, out frame3, ""); m_objReader4.SourceFrameGet(-1, out frame4, ""); m_objReader5.SourceFrameGet(-1, out frame5, ""); m_objReader6.SourceFrameGet(-1, out frame6, ""); m_objReader7.SourceFrameGet(-1, out frame7, ""); m_objReader8.SourceFrameGet(-1, out frame8, ""); m_objPrev1.ReceiverFramePut(frame1, -1, ""); m_objPrev2.ReceiverFramePut(frame2, -1, ""); m_objPrev3.ReceiverFramePut(frame3, -1, ""); m_objPrev4.ReceiverFramePut(frame4, -1, ""); m_objPrev5.ReceiverFramePut(frame5, -1, ""); m_objPrev6.ReceiverFramePut(frame6, -1, ""); m_objPrev7.ReceiverFramePut(frame7, -1, ""); m_objPrev8.ReceiverFramePut(frame8, -1, ""); } if (second_chb.Checked) { m_objReader9.SourceFrameGet(-1, out frame9, ""); m_objReader10.SourceFrameGet(-1, out frame10, ""); m_objReader11.SourceFrameGet(-1, out frame11, ""); m_objReader12.SourceFrameGet(-1, out frame12, ""); m_objReader13.SourceFrameGet(-1, out frame13, ""); m_objReader14.SourceFrameGet(-1, out frame14, ""); m_objReader15.SourceFrameGet(-1, out frame15, ""); m_objReader16.SourceFrameGet(-1, out frame16, ""); m_objPrev9.ReceiverFramePut(frame9, -1, ""); m_objPrev10.ReceiverFramePut(frame10, -1, ""); m_objPrev11.ReceiverFramePut(frame11, -1, ""); m_objPrev12.ReceiverFramePut(frame12, -1, ""); m_objPrev13.ReceiverFramePut(frame13, -1, ""); m_objPrev14.ReceiverFramePut(frame14, -1, ""); m_objPrev15.ReceiverFramePut(frame15, -1, ""); m_objPrev16.ReceiverFramePut(frame16, -1, ""); } if (third_chb.Checked) { m_objReader17.SourceFrameGet(-1, out frame17, ""); m_objReader18.SourceFrameGet(-1, out frame18, ""); m_objReader19.SourceFrameGet(-1, out frame19, ""); m_objReader20.SourceFrameGet(-1, out frame20, ""); m_objReader21.SourceFrameGet(-1, out frame21, ""); m_objReader22.SourceFrameGet(-1, out frame22, ""); m_objReader23.SourceFrameGet(-1, out frame23, ""); m_objReader24.SourceFrameGet(-1, out frame24, ""); m_objPrev17.ReceiverFramePut(frame17, -1, ""); m_objPrev18.ReceiverFramePut(frame18, -1, ""); m_objPrev19.ReceiverFramePut(frame19, -1, ""); m_objPrev20.ReceiverFramePut(frame20, -1, ""); m_objPrev21.ReceiverFramePut(frame21, -1, ""); m_objPrev22.ReceiverFramePut(frame22, -1, ""); m_objPrev23.ReceiverFramePut(frame23, -1, ""); m_objPrev24.ReceiverFramePut(frame24, -1, ""); } if (frame1 != null) { Marshal.ReleaseComObject(frame1); Marshal.ReleaseComObject(frame2); Marshal.ReleaseComObject(frame3); Marshal.ReleaseComObject(frame4); Marshal.ReleaseComObject(frame5); Marshal.ReleaseComObject(frame6); Marshal.ReleaseComObject(frame7); Marshal.ReleaseComObject(frame8); } if (frame9 != null) { Marshal.ReleaseComObject(frame9); Marshal.ReleaseComObject(frame10); Marshal.ReleaseComObject(frame11); Marshal.ReleaseComObject(frame12); Marshal.ReleaseComObject(frame13); Marshal.ReleaseComObject(frame14); Marshal.ReleaseComObject(frame15); Marshal.ReleaseComObject(frame16); } if (frame17 != null) { Marshal.ReleaseComObject(frame17); Marshal.ReleaseComObject(frame18); Marshal.ReleaseComObject(frame19); Marshal.ReleaseComObject(frame20); Marshal.ReleaseComObject(frame21); Marshal.ReleaseComObject(frame22); Marshal.ReleaseComObject(frame23); Marshal.ReleaseComObject(frame24); } } } }
private bool NextFrame() { // Get request pos and set pause and reverse flags double dblRequest = -1.0; string strParams = string.Empty; // Update player state lock (m_playerState.stateLock) { if (m_playerState.state == eState.eST_Pause) { strParams = " pause=true"; } else if (m_playerState.state == eState.eST_PlayRev || m_playerState.state == eState.eST_StepRev) { strParams = " reverse=true"; } // Update player state if (m_playerState.state == eState.eST_StepFwd || m_playerState.state == eState.eST_StepRev) { // Pause on next iteration - because single frame was requested m_playerState.state = eState.eST_Pause; } // Get request time and set next cycle request to next frame // -1 as first parameter means "give me next frame", -5 means "give me next next 5th frame" etc, // this works accordingly when the reverse=true parameter is set. // positive values are uninterpreted as "give me frame at position" dblRequest = m_playerState.dblFrameRequest; m_playerState.dblFrameRequest = -1 * (int)(m_playerState.dblRate); } // Next frame cycle: // Get frame from reader and send to preview // Note: Preview keep frame according to frame time MFFrame pFrame = null; lock (m_objLock) // For prevent reader replace in OpenFile() and overlay change { // Get next frame or frame by position // -1 as first parameter means "give me next frame", -5 means "give me next next 5th frame" etc, // this works accordingly when the reverse=true parameter is set. // positive values are uninterpreted as "give me frame at position" try { if (m_objMFReader != null) { m_objMFReader.SourceFrameConvertedGetByTime(ref m_avProps, dblRequest, -1, out pFrame, strParams + " rate=0.1"); } int samples; pFrame.MFAVPropsGet(out currentProps, out samples); } catch (System.Exception ex) { MessageBox.Show("Error occurs during file decoding:\n\n" + ex.Message, m_playerState.strFileName, MessageBoxButtons.OK, MessageBoxIcon.Warning); return(false); } } if (pFrame == null) { Thread.Sleep(5); return(true); } try { // Demonstrate overlay - overlay another frame if any if (m_frOverlay != null) { pFrame.MFOverlay(m_frOverlay, null, 50, 100, 0.5, "", ""); } // Show CG object if (checkBoxCG.Checked) { ShowPluggin(m_objCharGen, ref pFrame); if (cgEditor != null) { cgEditor.m_objEditor_FrameProcessed(pFrame, null); } } // Show CC if (checkBoxCC.Checked) { if (m_objCCDisplay != null) { ShowPluggin(m_objCCDisplay, ref pFrame); } } // Show HTML if (checkBoxHTML.Checked) { lock (m_objHTMLLock) { if (m_objOverlayHTML != null) { ShowPluggin(m_objOverlayHTML, ref pFrame); if (overlayHTMLWind != null && !overlayHTMLWind.IsDisposed) { overlayHTMLWind.UpdatePreview(pFrame); } } } } mAudioMeter1.pFrame = pFrame; mAudioMeter1.SetValues(); // Get frame timings pFrame.MFTimeGet(out mTime); double dblDur = 0; m_objMFReader.ReaderDurationGet(out dblDur); if (m_playerState.dblDuration != dblDur) { m_playerState.dblDuration = dblDur; } // Send frame to Renderer SendToRenderer(pFrame); //Send frame to the preview m_objPreview.ReceiverFramePut(pFrame, checkBoxRenderer.Checked ? 0 : -1, ""); //Send to Sink SendToSink(pFrame); //Release frame - DO NOT FORGOT TO DO THIS !!! releaseComObj(pFrame); } catch (System.Exception ex) { MessageBox.Show("Error occurs during frame processing:\n\n" + ex.Message, m_playerState.strFileName, MessageBoxButtons.OK, MessageBoxIcon.Warning); return(false); } // Check for the last frame if ((mTime.eFFlags & eMFrameFlags.eMFF_Last) != 0) { lock (m_playerState.stateLock) { // Pause playback at the end of the file if loop is disabled if (!m_playerState.bLoop) { pause(); } if (m_playerState.state == eState.eST_PlayRev) { // Rewind to end in case of reverse playback rewindToEnd(); } else if (m_playerState.state == eState.eST_PlayFwd) { // Rewind to start in case of direct playback rewindToStart(); } } } return(true); }
private void thread_DoWork(CancellationToken token) { while (!token.IsCancellationRequested) { MFFrame pFrame = null; int audioSamples = 0; if (startAudio) { M_AUD_PROPS AduioProps = new M_AUD_PROPS(); try { m_objReaderAudio.SourceFrameGet(-1, out pFrame, ""); m_objAudBuff.BufferFramePut("", pFrame, ""); m_objAudBuff.BufferPropsGet("", out AduioProps, out audioSamples); #region BeforeBuffer pFrame.MFAVPropsGet(out VolumeProps, out asamp); levelOrigin = VolumeProps.ancData.audOriginal.arrVUMeter[0]; leverOutPut = VolumeProps.ancData.audOutput.arrVUMeter[0]; BeginInvoke(new ChangeLabel(UpdateLabel1)); BeginInvoke(new ChangeLabel(UpdateLabel2)); BeginInvoke(new ChangeLabel(UpdateBar)); #endregion Marshal.ReleaseComObject(pFrame); } catch { pFrame = null; MessageBox.Show("Start Audio Part!"); } if (startVideo) { m_objReaderFile.SourceFrameGet(-1, out pFrame, ""); int samples = 0; if (audioSamples > 2000) { m_objAudBuff.BufferFrameFill("", pFrame, ref samples, ""); } m_objPreview.ReceiverFramePut(pFrame, -1, ""); #region AfterBuffer pFrame.MFAVPropsGet(out VolumeProps, out asamp); levelOrigin = VolumeProps.ancData.audOriginal.arrVUMeter[0]; leverOutPut = VolumeProps.ancData.audOutput.arrVUMeter[0]; BeginInvoke(new ChangeLabel(UpdateLabel3)); BeginInvoke(new ChangeLabel(UpdateLabel4)); #endregion m_objAudBuff.BufferRemove("", ref samples); Marshal.ReleaseComObject(pFrame); } } } }
private void thread_DoWork(CancellationToken token) { while (!token.IsCancellationRequested) { if (m_bWork) { MFFrame pFrame = null; try { if (comboBoxExtSources.SelectedIndex > 0) { m_objReader.SourceFrameConvertedGet(ref m_avProps, -1, out pFrame, ""); } else { m_objLive.SourceFrameConvertedGet(ref m_avProps, -1, out pFrame, ""); } } catch { } if (pFrame != null) { // Show CC if (checkBoxCC.Checked) { if (m_objCCDisplay != null) { ShowPluggin(m_objCCDisplay, ref pFrame); } } if (rec) { buttonStartRec.Enabled = false; buttonStartRec.Text = "Recording"; try { // Encode frame m_objWriter.ReceiverFramePut(pFrame, 0, ""); UpdateStatistic(); } catch (Exception ex) { MessageBox.Show("Error capture " + ex.ToString()); rec = false; } } else { buttonStartRec.Enabled = true; buttonStartRec.Text = "Start record"; labelStatistic.BackColor = Color.FromArgb(222, 232, 254); } //Send frame to the preview m_objPreview.ReceiverFramePut(pFrame, -1, ""); //Release frame - DO NOT FORGOT TO DO THIS !!! Marshal.ReleaseComObject(pFrame); } } else { Thread.Sleep(1); } } }
private void thread_DoWork(CancellationToken token) { while (!token.IsCancellationRequested) { MFFrame frame1 = null; MFFrame frame2 = null; MFFrame frame3 = null; MFFrame frame4 = null; MFFrame frame5 = null; M_AV_PROPS props = new M_AV_PROPS(); props.vidProps.eInterlace = eMInterlace.eMI_Progressive; if (start1) { m_objReader1.SourceFrameConvertedGet(ref props, -1, out frame1, ""); m_objWriter1.ReceiverFramePut(frame1, -1, ""); m_objPreview1.ReceiverFramePut(frame1, -1, ""); } if (start2) { m_objReader2.SourceFrameConvertedGet(ref props, -1, out frame2, ""); m_objWriter2.ReceiverFramePut(frame2, -1, ""); m_objPreview2.ReceiverFramePut(frame2, -1, ""); } if (start3) { m_objReader3.SourceFrameConvertedGet(ref props, -1, out frame3, ""); m_objWriter3.ReceiverFramePut(frame3, -1, ""); m_objPreview3.ReceiverFramePut(frame3, -1, ""); } if (start4) { m_objReader4.SourceFrameConvertedGet(ref props, -1, out frame4, ""); m_objWriter4.ReceiverFramePut(frame4, -1, ""); m_objPreview4.ReceiverFramePut(frame4, -1, ""); } if (start5) { m_objReader5.SourceFrameConvertedGet(ref props, -1, out frame5, ""); m_objWriter5.ReceiverFramePut(frame5, -1, ""); m_objPreview5.ReceiverFramePut(frame5, -1, ""); } if (frame1 != null) { Marshal.ReleaseComObject(frame1); } if (frame2 != null) { Marshal.ReleaseComObject(frame2); } if (frame3 != null) { Marshal.ReleaseComObject(frame3); } if (frame4 != null) { Marshal.ReleaseComObject(frame4); } if (frame5 != null) { Marshal.ReleaseComObject(frame5); } } }
private void thread_DoWork(CancellationToken token) { while (!token.IsCancellationRequested) { MFFrame frame1 = null; MFFrame frame2 = null; MFFrame frame3 = null; MFFrame frame4 = null; MFFrame frame5 = null; if (Encoder1) { m_objLive1.SourceFrameConvertedGet(ref avProps, -1, out frame1, ""); m_objWriter1.ReceiverFramePut(frame1, -1, ""); m_objPrev1.ReceiverFramePut(frame1, -1, ""); m_objWriter1.PropsGet("stat::frames_in", out fIn); m_objWriter1.PropsGet("stat::buffers_overflow", out fDrops); m_objWriter1.PropsGet("stat::breaks_in", out bIn); BeginInvoke(new InvokeDelegate(UpdateLabel1)); } if (Encoder2) { m_objLive2.SourceFrameConvertedGet(ref avProps, -1, out frame2, ""); m_objWriter2.ReceiverFramePut(frame2, -1, ""); m_objPrev2.ReceiverFramePut(frame2, -1, ""); m_objWriter2.PropsGet("stat::frames_in", out fIn); m_objWriter2.PropsGet("stat::buffers_overflow", out fDrops); m_objWriter2.PropsGet("stat::breaks_in", out bIn); BeginInvoke(new InvokeDelegate(UpdateLabel2)); } if (Encoder3) { m_objLive3.SourceFrameConvertedGet(ref avProps, -1, out frame3, ""); m_objWriter3.ReceiverFramePut(frame3, -1, ""); m_objPrev3.ReceiverFramePut(frame3, -1, ""); m_objWriter3.PropsGet("stat::frames_in", out fIn); m_objWriter3.PropsGet("stat::buffers_overflow", out fDrops); m_objWriter3.PropsGet("stat::breaks_in", out bIn); BeginInvoke(new InvokeDelegate(UpdateLabel3)); } if (Encoder4) { m_objLive4.SourceFrameConvertedGet(ref avProps, -1, out frame4, ""); m_objWriter4.ReceiverFramePut(frame4, -1, ""); m_objPrev4.ReceiverFramePut(frame4, -1, ""); m_objWriter4.PropsGet("stat::frames_in", out fIn); m_objWriter4.PropsGet("stat::buffers_overflow", out fDrops); m_objWriter4.PropsGet("stat::breaks_in", out bIn); BeginInvoke(new InvokeDelegate(UpdateLabel4)); } if (Encoder5) { m_objLive5.SourceFrameConvertedGet(ref avProps, -1, out frame5, ""); m_objWriter5.ReceiverFramePut(frame5, -1, ""); m_objPrev5.ReceiverFramePut(frame5, -1, ""); m_objWriter5.PropsGet("stat::frames_in", out fIn); m_objWriter5.PropsGet("stat::buffers_overflow", out fDrops); m_objWriter5.PropsGet("stat::breaks_in", out bIn); BeginInvoke(new InvokeDelegate(UpdateLabel5)); } if (frame1 != null) { Marshal.ReleaseComObject(frame1); } if (frame2 != null) { Marshal.ReleaseComObject(frame2); } if (frame3 != null) { Marshal.ReleaseComObject(frame3); } if (frame4 != null) { Marshal.ReleaseComObject(frame4); } if (frame5 != null) { Marshal.ReleaseComObject(frame5); } } }
private void thread_DoWork(CancellationToken token) { MFFactoryClass _factory = new MFFactoryClass(); while (!token.IsCancellationRequested) { if (decode) { MFFrame frame = null; string path = String.Format(@"\\MLDiskStation\MLFiles\Trash\Roman\NetTestFiles\LG_jazz\LG_jazz\LG_jazz{0:d7}.jpg", index); Debug.WriteLine("Picture:" + index.ToString()); index = ++index == 291 ? 0 : index; //291 is count of pictures in image sequences { Bitmap bmp = (Bitmap)System.Drawing.Image.FromFile(path); Rectangle rect = new Rectangle(0, 0, bmp.Width, bmp.Height); System.Drawing.Imaging.BitmapData bmpData = bmp.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadOnly, PixelFormat.Format32bppPArgb); M_AV_PROPS avProps = new M_AV_PROPS(); avProps.vidProps.eVideoFormat = eMVideoFormat.eMVF_HD1080_30p; avProps.vidProps.fccType = eMFCC.eMFCC_RGB32; avProps.vidProps.nWidth = bmp.Width; avProps.vidProps.nHeight = -1 * bmp.Height; // Negative height for top-bottom RGB images (if positive->bottom-top) avProps.vidProps.nRowBytes = bmpData.Stride; // distance between lines _factory.MFFrameCreateFromMem(ref avProps, bmpData.Scan0.ToInt64(), 0, 0, out frame, ""); bmp.UnlockBits(bmpData); bmp.Dispose(); } M_AV_PROPS props; int samples; frame.MFAVPropsGet(out props, out samples); props.vidProps.eVideoFormat = eMVideoFormat.eMVF_HD1080_30p; props.vidProps.dblRate = 30.0; props.vidProps.nAspectX = 16; props.vidProps.nAspectY = 9; MFFrame frameConvert; int nRest = 0; frame.MFConvert(ref props, out frameConvert, out nRest, "", ""); m_objPreview.ReceiverFramePut(frameConvert, 0, ""); m_objWriter.ReceiverFramePut(frameConvert, -1, ""); if (stopWr) { m_objWriter.WriterClose(0); } Marshal.ReleaseComObject(frameConvert); Marshal.ReleaseComObject(frame); GC.Collect(); } } }
public void UpdatePreview(MFFrame _pFrame) { m_objPreview.ReceiverFramePut(_pFrame, -1, ""); }