123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183 |
-
- namespace NRKernal
- {
- using UnityEngine;
-
- public class CameraModelView
- {
-
-
- public int Width
- {
- get
- {
- return m_NativeCameraProxy.Resolution.width;
- }
- }
-
-
- public int Height
- {
- get
- {
- return m_NativeCameraProxy.Resolution.height;
- }
- }
-
-
- public bool IsPlaying
- {
- get
- {
- return m_State == State.Playing;
- }
- }
-
- public enum State
- {
-
- Playing,
-
- Paused,
-
- Stopped
- }
-
- private State m_State = State.Stopped;
-
-
- public bool DidUpdateThisFrame
- {
- get
- {
- return m_NativeCameraProxy.HasFrame();
- }
- }
-
-
- public int FrameCount { get; protected set; }
-
- protected NativeCameraProxy m_NativeCameraProxy;
-
-
- public NativeCameraProxy NativeCameraProxy
- {
- get
- {
- return this.m_NativeCameraProxy;
- }
- set
- {
- this.m_NativeCameraProxy = value;
- }
- }
- public CameraImageFormat ImageFormat { get; protected set; }
-
- public CameraModelView() { }
-
-
- public CameraModelView(CameraImageFormat format)
- {
- ImageFormat = format;
- this.CreateRGBCameraProxy(format);
- m_NativeCameraProxy.Regist(this);
- }
-
-
- protected void CreateRGBCameraProxy(CameraImageFormat format = CameraImageFormat.RGB_888)
- {
- if (m_NativeCameraProxy != null)
- {
- return;
- }
- m_NativeCameraProxy = CameraProxyFactory.CreateRGBCameraProxy();
- m_NativeCameraProxy.SetImageFormat(format);
- }
-
- public void Play()
- {
- if (m_State == State.Playing)
- {
- return;
- }
- NRKernalUpdater.OnUpdate += UpdateTexture;
- m_NativeCameraProxy.Play();
- m_NativeCameraProxy.Regist(this);
- m_State = State.Playing;
- }
-
- public void Pause()
- {
- if (m_State == State.Paused || m_State == State.Stopped)
- {
- return;
- }
- NRKernalUpdater.OnUpdate -= UpdateTexture;
- m_State = State.Paused;
- }
-
- private void UpdateTexture()
- {
- if (!DidUpdateThisFrame || !IsPlaying)
- {
- return;
- }
- FrameRawData frame = m_NativeCameraProxy.GetFrame();
- if (frame.data == null)
- {
- NRDebugger.Error("[CameraModelView] Get camera raw data faild...");
- return;
- }
- FrameCount++;
- OnRawDataUpdate(frame);
- }
-
- public void Stop()
- {
- if (m_State == State.Stopped)
- {
- return;
- }
- m_NativeCameraProxy.Remove(this);
- m_NativeCameraProxy.Stop();
- NRKernalUpdater.OnUpdate -= UpdateTexture;
- FrameCount = 0;
- m_State = State.Stopped;
- this.OnStopped();
- }
-
-
- protected virtual void OnRawDataUpdate(FrameRawData frame) { }
-
- protected virtual void OnStopped() { }
- }
- }
|