unsafe void OnReadback(AsyncGPUReadbackRequest request)
        {
            // Ignore errors.
            if (request.hasError)
            {
                return;
            }

            // Ignore it if the NDI object has been already disposed.
            if (_send == null || _send.IsInvalid || _send.IsClosed)
            {
                return;
            }

            // Readback data retrieval
            var data  = request.GetData <byte>();
            var pdata = NativeArrayUnsafeUtility.GetUnsafeReadOnlyPtr(data);

            // Data size verification
            if (data.Length / sizeof(uint) !=
                Util.FrameDataCount(_width, _height, _enableAlpha))
            {
                return;
            }

            // Frame data setup
            var frame = new Interop.VideoFrame
            {
                Width       = _width,
                Height      = _height,
                LineStride  = _width * 2,
                FourCC      = _enableAlpha ? Interop.FourCC.UYVA : Interop.FourCC.UYVY,
                FrameFormat = Interop.FrameFormat.Progressive,
                Data        = (System.IntPtr)pdata
            };

            // Send via NDI
            _send.SendVideoAsync(frame);
        }