public void StartPreview(DeviceCamera camera, Action startCallback, Action frameCallback) { this.startCallback = startCallback; this.frameCallback = frameCallback; NatCamBridge.StartPreview((IntPtr)(camera as DeviceCameraiOS)); OnOrient(); }
public NatCamiOS() { NatCamBridge.RegisterCoreCallbacks(onStart, onFrame, onPhoto, null); Device = new NatCamDeviceiOS(); OrientationUtility.onOrient += OnOrient; Debug.Log("NatCam: Initialized NatCam 2.0 iOS backend"); }
public void StopPreview() { NatCamBridge.StopPreview(); Texture2D.Destroy(preview); preview = null; startCallback = frameCallback = null; }
public void CaptureFrame(Texture2D frame) { // Get buffer info IntPtr ptr; NatCamBridge.CaptureFrame(out ptr); // Copy frame.LoadRawTextureData(ptr, preview.width * preview.height * 4); frame.Apply(); }
public void Release() { OnStart = OnFrame = null; NatCamBridge.Release(); if (preview) { Texture2D.Destroy(preview); } preview = null; }
public NatCamiOS() { NatCamBridge.RegisterCoreCallbacks(onStart, onFrame, onPhoto); Device = new NatCamDeviceiOS(); #if NATCAM_CORE DispatchUtility.onOrient += OnOrient; #endif #if NATCAM_PRO || NATCAM_PROFESSIONAL NatCamBridge.RegisterProCallbacks(OnVideo); #endif Utilities.Log("Initialized NatCam 1.6 iOS backend"); }
public void Release() { OnStart = OnFrame = null; #if NATCAM_PRO || NATCAM_PROFESSIONAL NatCamBridge.ReleaseBuffer(); #endif NatCamBridge.Release(); if (preview != null) { MonoBehaviour.Destroy(preview); } preview = null; }
private static void onPhoto(IntPtr imgPtr, int width, int height) { using (var dispatch = new MainDispatch()) { if (instance.photoCallback != null && imgPtr != IntPtr.Zero) { var photo = new Texture2D(width, height, TextureFormat.BGRA32, false); photo.LoadRawTextureData(unchecked ((IntPtr)(long)(ulong)imgPtr), width * height * 4); photo.Apply(); NatCamBridge.ReleasePhoto(imgPtr); instance.photoCallback(photo); } instance.photoCallback = null; } }
public void Release() { OnStart = OnFrame = null; #if NATCAM_PRO // ... #endif NatCamBridge.Release(); if (preview != null) { MonoBehaviour.Destroy(preview); } preview = null; }
public void CaptureFrame(Texture2D frame) { // Get buffer info IntPtr ptr; NatCamBridge.CaptureFrame(out ptr); if (ptr == IntPtr.Zero) { return; // Only happens in frame when app is suspended } // Copy frame.LoadRawTextureData(ptr, preview.width * preview.height * 4); frame.Apply(); }
public void CaptureFrame(byte[] pixels, bool flip) { // Handle flip specially if (flip) { var handle = GCHandle.Alloc(pixels, GCHandleType.Pinned); NatCamBridge.InvertFrame(handle.AddrOfPinnedObject()); handle.Free(); } else { IntPtr ptr; NatCamBridge.CaptureFrame(out ptr); Marshal.Copy(ptr, pixels, 0, preview.width * preview.height * 4); } }
public NatCamAndroid() { using (var player = new AndroidJavaClass("com.unity3d.player.UnityPlayer")) { var cacheDir = player .GetStatic <AndroidJavaObject>("currentActivity") .Call <AndroidJavaObject>("getCacheDir") .Call <string>("toString"); NatCamBridge.RegisterCoreCallbacks(onStart, onFrame, onPhoto, cacheDir); } natcam = new AndroidJavaObject("com.yusufolokoba.natcam.NatCam"); Device = new NatCamDeviceAndroid(); RenderDispatch.Initialize(); DispatchUtility.onPause += OnPause; OrientationUtility.onOrient += OnOrient; Debug.Log("NatCam: Initialized NatCam 2.0 Android backend"); }
public void PreviewBuffer(out IntPtr ptr, out int width, out int height, out int size) { width = preview.width; height = preview.height; if (buffer != null && buffer.Length != width * height) { ReleaseBuffer(); } if (buffer == null) { InitializeBuffer(); } preview.GetPixels32(buffer); size = buffer.Length * Marshal.SizeOf(typeof(Color32)); GCHandle pin = GCHandle.Alloc(buffer, GCHandleType.Pinned); NatCamBridge.memcpy(handle, pin.AddrOfPinnedObject(), (UIntPtr)size); pin.Free(); ptr = handle; }
private static void onPhoto(IntPtr imgPtr, int width, int height, int size) { using (var dispatch = new MainDispatch()) { if (instance.photoCallback == null) { NatCamBridge.ReleasePhoto(); return; } if (imgPtr == IntPtr.Zero) { return; } var photo = new Texture2D(width, height, TextureFormat.BGRA32, false); photo.LoadRawTextureData(unchecked ((IntPtr)(long)(ulong)imgPtr), size); photo.Apply(); NatCamBridge.ReleasePhoto(); instance.photoCallback(photo, 0); instance.photoCallback = null; } }
public void CaptureFrame(byte[] pixels, bool flip) { // Handle flip specially if (flip) { var handle = GCHandle.Alloc(pixels, GCHandleType.Pinned); NatCamBridge.InvertFrame(handle.AddrOfPinnedObject()); handle.Free(); } else { IntPtr ptr; NatCamBridge.CaptureFrame(out ptr); if (ptr == IntPtr.Zero) { return; // Only happens in frame when app is suspended } Marshal.Copy(ptr, pixels, 0, preview.width * preview.height * 4); } }
private void OnOrient() { #if NATCAM_CORE NatCamBridge.SetOrientation((byte)DispatchUtility.Orientation); #endif }
public void CapturePhoto(PhotoCallback callback) { photoCallback = callback; NatCamBridge.CapturePhoto(); }
public void Play() { NatCamBridge.Play(); }
public void CaptureFrame(byte[] dest) { NatCamBridge.CaptureFrame(dest); }
public void Pause() { NatCamBridge.Pause(); }
public void PreviewBuffer(out IntPtr ptr, out int width, out int height, out int size) { NatCamBridge.PreviewBuffer(out ptr, out width, out height, out size); }
public NatCamiOS() { NatCamBridge.RegisterCoreCallbacks(OnStart, OnFrame, OnPhoto, null); OrientationUtility.onOrient += OnOrient; Debug.Log("NatCam: Initialized NatCam 2.1 iOS backend"); }
private void OnOrient() { NatCamBridge.OnOrient((int)OrientationUtility.Orientation); }
public void Play() { OnOrient(); NatCamBridge.Play(); }
public void StartRecording(Configuration configuration, SaveCallback callback) { recordingCallback = callback; NatCamBridge.StartRecording(configuration.bitrate, configuration.keyframeInterval, configuration.recordAudio); }
public void StopRecording() { NatCamBridge.StopRecording(); }
public void CapturePhoto(Action <Texture2D> callback) { photoCallback = callback; NatCamBridge.CapturePhoto(); }