/**************************************************************************** * Copyright 2019 Nreal Techonology Limited. All rights reserved. * * This file is part of NRSDK. * * https://www.nreal.ai/ * *****************************************************************************/ using UnityEngine; using UnityEngine.UI; namespace NRKernal.NRExamples { /// <summary> A controller for handling camera yuv captures. </summary> [HelpURL("https://developer.nreal.ai/develop/unity/rgb-camera")] public class CameraYUVCaptureController : MonoBehaviour { /// <summary> The capture image. </summary> public RawImage CaptureImage; /// <summary> Number of frames. </summary> public Text FrameCount; /// <summary> Gets or sets the yuv camera texture. </summary> /// <value> The yuv camera texture. </value> private NRRGBCamTextureYUV YuvCamTexture { get; set; } void Start() { YuvCamTexture = new NRRGBCamTextureYUV(); BindYuvTexture(YuvCamTexture.GetTexture()); YuvCamTexture.Play(); } /// <summary> Updates this object. </summary> void Update() { if (YuvCamTexture == null) { return; } FrameCount.text = YuvCamTexture.FrameCount.ToString(); } /// <summary> Plays this object. </summary> public void Play() { if (YuvCamTexture == null) { YuvCamTexture = new NRRGBCamTextureYUV(); } YuvCamTexture.Play(); // The origin texture will be destroyed after call "Stop", // Rebind the texture. BindYuvTexture(YuvCamTexture.GetTexture()); } /// <summary> Bind yuv texture. </summary> /// <param name="frame"> The frame.</param> private void BindYuvTexture(NRRGBCamTextureYUV.YUVTextureFrame frame) { CaptureImage.enabled = true; CaptureImage.material.SetTexture("_MainTex", frame.textureY); CaptureImage.material.SetTexture("_UTex", frame.textureU); CaptureImage.material.SetTexture("_VTex", frame.textureV); } /// <summary> Pauses this object. </summary> public void Pause() { YuvCamTexture?.Pause(); } /// <summary> Stops this object. </summary> public void Stop() { YuvCamTexture?.Stop(); YuvCamTexture = null; CaptureImage.enabled = false; } /// <summary> Executes the 'destroy' action. </summary> void OnDestroy() { YuvCamTexture?.Stop(); YuvCamTexture = null; } } }