public void PushFrame(IFrameInfo info, IFrameSound frame) { if (info == null) { throw new ArgumentNullException("info"); } if (frame == null) { throw new ArgumentNullException("frame"); } if (IsSynchronized) { WaitFrame(); } var buffer = LockBuffer(); if (buffer == null) { return; } var srcBuffer = frame.GetBuffer(); Array.Copy(srcBuffer, buffer, buffer.Length); UnlockBuffer(buffer); }
public void PushFrame( IFrameInfo infoFrame, IFrameVideo videoFrame, IFrameSound soundFrame) //IVideoFrame videoFrame, ISoundFrame soundFrame) { if (_threadRecord == null) { return; } var frame = new MediaFrame(); frame.Width = videoFrame.Size.Width; frame.Height = videoFrame.Size.Height; frame.Ratio = videoFrame.Ratio; frame.Image = new int[frame.Width * frame.Height]; Array.Copy(videoFrame.Buffer, frame.Image, frame.Image.Length); frame.SampleRate = _sampleRate;// soundFrame.SampleRate; //frame.Audio = new uint[frame.SampleRate / 50]; //Array.Copy(soundFrame.Buffer, frame.Audio, frame.Audio.Length); _queueMP4.Enqueue(frame); // Process audio... var bufferSrc = soundFrame.GetBuffer(); var bufferWr = new uint[bufferSrc.Length]; Array.Copy(bufferSrc, bufferWr, bufferSrc.Length); _queueWAV.Enqueue(bufferWr); _eventFrame.Set(); }
public void PushFrame(IFrameInfo info, IFrameSound frame) { if (info == null) { throw new ArgumentNullException("info"); } if (frame == null) { throw new ArgumentNullException("frame"); } if (IsSynchronized) { WaitFrame(); } var buffer = LockBuffer(); if (buffer == null) { return; } var srcBuffer = frame.GetBuffer(); fixed(uint *pSrc = srcBuffer) fixed(byte *pbDst = buffer) { NativeMethods.CopyMemory((uint *)pbDst, pSrc, buffer.Length); } UnlockBuffer(buffer); }
public void Clear() { if (m_connected) { throw new InvalidOperationException("Cannot remove device from connected bus!"); } m_ula = null; m_soundFrame = null; m_eventManager.Clear(); m_deviceList.Clear(); }
public void PushFrame(IFrameInfo info, IFrameVideo videoFrame, IFrameSound soundFrame) { if (_threadRecord == null) { return; } var bufferSrc = soundFrame.GetBuffer(); var bufferWr = new uint[bufferSrc.Length]; Array.Copy(bufferSrc, bufferWr, bufferSrc.Length); _queue.Enqueue(bufferWr); _eventFrame.Set(); }
public void Disconnect() { if (!m_connected) { return; } m_connected = false; OnEndFrame(); OnBusDisconnect(); m_soundFrame = null; if (LoadManager != null) { LoadManager.Clear(); } m_iconDescList = new IconDescriptor[0]; if (CommandManager != null) { CommandManager.Clear(); } if (m_debuggable != null) { var jtag = FindDevice <IJtagDevice>(); if (jtag != null) { jtag.Detach(); } } foreach (var device in m_deviceList) { device.ConfigChanged -= Device_OnConfigChanged; try { device.BusDisconnect(); } catch (Exception ex) { Logger.Error(ex); } } m_eventManager.Clear(); }
public void PushFrame( IFrameInfo infoFrame, IFrameVideo videoFrame, IFrameSound soundFrame) { var timeSync = m_timeSync; var sound = m_sound; var video = m_video; if (infoFrame.IsRefresh) { // request from UI, so we don't need sound and sync if (video != null && videoFrame != null) { video.PushFrame(infoFrame, videoFrame); } return; } if (SyncSource == SyncSource.Time && timeSync != null) { timeSync.WaitFrame(); } if (video != null && videoFrame != null) { video.PushFrame(infoFrame, videoFrame); } if (sound != null && soundFrame != null) { sound.PushFrame(infoFrame, soundFrame); } var mediaRecorder = MediaRecorder; if (mediaRecorder != null && videoFrame != null && soundFrame != null) { mediaRecorder.PushFrame(infoFrame, videoFrame, soundFrame); } }
public void PushFrame( IFrameInfo infoFrame, IFrameVideo videoFrame, IFrameSound soundFrame) //IVideoFrame videoFrame, ISoundFrame soundFrame) { if (_threadRecord == null) { return; } var frame = new MediaFrame(); frame.Width = videoFrame.Size.Width; frame.Height = videoFrame.Size.Height; frame.Ratio = videoFrame.Ratio; frame.Image = new int[frame.Width * frame.Height]; Array.Copy(videoFrame.Buffer, frame.Image, frame.Image.Length); frame.SampleRate = soundFrame.SampleRate; //frame.Audio = new uint[frame.SampleRate / 50]; //Array.Copy(soundFrame.Buffer, frame.Audio, frame.Audio.Length); _queue.Enqueue(frame); _eventFrame.Set(); }
public bool Connect() { bool success = true; if (m_connected) { throw new InvalidOperationException("Cannot connect the bus which is already connected!"); } if (m_ula == null) { throw new InvalidOperationException("ULA device is missing!"); } m_connected = true; m_eventManager.Clear(); m_deviceList.Sort(DevicePriorityComparison); for (int i = 0; i < m_deviceList.Count; i++) { m_deviceList[i].BusOrder = i; } var soundRenderers = m_deviceList.OfType <ISoundRenderer>(); foreach (var soundRenderer in soundRenderers) { soundRenderer.SampleRate = SampleRate; } if (LoadManager != null) { LoadManager.Clear(); } m_iconDescList = new IconDescriptor[] { m_iconPause }; if (CommandManager != null) { CommandManager.Clear(); } foreach (var device in m_deviceList) { try { device.BusInit(this); } catch (Exception ex) { Logger.Error(ex); success = false; } } m_frameTactCount = m_ula.FrameTactCount; foreach (var device in m_deviceList) { device.ConfigChanged += Device_OnConfigChanged; try { device.BusConnect(); } catch (Exception ex) { Logger.Error(ex); success = false; } } OnBeginFrame(); if (m_debuggable != null) { var jtag = FindDevice <IJtagDevice>(); if (jtag != null) { jtag.Attach(m_debuggable); } } m_soundFrame = new FrameSound( SampleRate, soundRenderers.Select(sr => sr.AudioBuffer)); OnBusConnected(); return(success); }