示例#1
0
        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);
        }