public bool GetOutputFrame(WaitHandle hExit, int msWait = 0) { bool success = false; switch (WaitHandle.WaitAny(new WaitHandle[] { m_OutputQueueEncoderSemaphore, hExit }, msWait)) { case 0: { IntPtr frame; int numBytes; int haveFrame = CudaTools.VideoEncoder_GetNextEncodedFrame64(m_videoEncoder, out frame, out numBytes); //Debug.Print(size.ToString()); if (haveFrame == 1) { m_frameStore = new byte[numBytes]; Marshal.Copy(frame, m_frameStore, 0, (int)numBytes); CudaTools.VideoEncoder_ReleaseFrame64(m_videoEncoder); success = true; } } break; case 1: break; case WaitHandle.WaitTimeout: break; } return(success); }