Example #1
0
    private void onAirXRMediaStreamStopped(AirXRServerMessage message)
    {
        onStopRender();
        disableCameras();

        _mediaStreamJustStopped = true; // StopCoroutine(_CallPluginEndOfFrame) executes the routine one more in the next frame after the call.
                                        // so use a flag to completely stop the routine.

        GL.IssuePluginEvent(AXRServerPlugin.ResetStreams_RenderThread_Func, AXRServerPlugin.RenderEventArg((uint)playerID));

        inputStream.Stop();
    }
Example #2
0
    private void onAirXRMediaStreamInitialized(AirXRServerMessage message)
    {
        Assert.IsNull(mediaStream);

        initializeCamerasForMediaStream();
        AXRServerPlugin.SendCameraClipPlanes(playerID, cameras[0].nearClipPlane, cameras[0].farClipPlane);

        mediaStream = new AirXRServerMediaStream(playerID, _config, cameras.Length);
        GL.IssuePluginEvent(AXRServerPlugin.InitStreams_RenderThread_Func, AXRServerPlugin.RenderEventArg((uint)playerID));

        inputStream.Init();
    }
Example #3
0
    private void onAirXRMediaStreamCleanedUp(AirXRServerMessage message)
    {
        Assert.IsNotNull(mediaStream);

        inputStream.Cleanup();

        GL.IssuePluginEvent(AXRServerPlugin.CleanupStreams_RenderThread_Func, AXRServerPlugin.RenderEventArg((uint)playerID));

        mediaStream.Destroy();
        mediaStream = null;

        foreach (Camera cam in cameras)
        {
            cam.targetTexture = null;
        }
    }
Example #4
0
    private IEnumerator CallPluginEndOfFrame()
    {
        yield return(new WaitForEndOfFrame());

        Assert.IsNotNull(mediaStream);
        GL.IssuePluginEvent(AXRServerPlugin.EncodeVideoFrame_RenderThread_Func, AXRServerPlugin.RenderEventArg((uint)playerID, (uint)_viewNumber, (uint)mediaStream.currentFramebufferIndex));    // the first render event

        while (_mediaStreamJustStopped == false)
        {
            yield return(new WaitForEndOfFrame());

            if (_mediaStreamJustStopped)
            {
                yield break;
            }
            else if (_encodeVideoFrameRequested)
            {
                Assert.IsNotNull(mediaStream);

                GL.IssuePluginEvent(AXRServerPlugin.EncodeVideoFrame_RenderThread_Func, AXRServerPlugin.RenderEventArg((uint)playerID, (uint)_viewNumber, (uint)mediaStream.currentFramebufferIndex));
                _encodeVideoFrameRequested = false;
            }
        }
    }
Example #5
0
 public void OnPreRender()
 {
     if (bound)
     {
         GL.IssuePluginEvent(AXRServerPlugin.GameFrameRenderingStarted_RenderThread_Func, AXRServerPlugin.RenderEventArg((uint)_playerID, (uint)_viewNumber, 0));
     }
 }