Beispiel #1
0
        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);
        }
Beispiel #2
0
        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();
        }
Beispiel #3
0
        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);
        }
Beispiel #4
0
        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();
        }
Beispiel #5
0
        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();
        }
Beispiel #6
0
 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();
 }
Beispiel #7
0
        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);
            }
        }
Beispiel #8
0
        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();
        }
Beispiel #9
0
        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);
        }