// // This event handler is triggered through a MFC message posted by the frame observer // // Parameters: // [in] status The frame receive status (complete, incomplete, ...) // [in] lParam [Unused, demanded by MFC signature] // // Returns: // Nothing, always returns 0 // LRESULT CAsynchronousGrabDlg::OnFrameReady( WPARAM status, LPARAM lParam ) { if( true == m_bIsStreaming ) { // Pick up frame FramePtr pFrame = m_ApiController.GetFrame(); if( SP_ISNULL( pFrame) ) { Log( _TEXT("frame ptr is NULL, late call") ); return 0; } // See if it is not corrupt if( VmbFrameStatusComplete == status ) { VmbUchar_t *pBuffer; VmbUchar_t *pColorBuffer = NULL; VmbErrorType err = pFrame->GetImage( pBuffer ); if( VmbErrorSuccess == err ) { VmbUint32_t nSize; err = pFrame->GetImageSize( nSize ); if( VmbErrorSuccess == err ) { VmbPixelFormatType ePixelFormat = m_ApiController.GetPixelFormat(); CopyToImage( pBuffer,ePixelFormat, m_Image ); // Display it RECT rect; m_PictureBoxStream.GetWindowRect( &rect ); ScreenToClient( &rect ); InvalidateRect( &rect, false ); } } } else { // If we receive an incomplete image we do nothing but logging Log( _TEXT( "Failure in receiving image" ), VmbErrorOther ); } // And queue it to continue streaming m_ApiController.QueueFrame( pFrame ); } return 0; }