⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 camerawindow.cpp

📁 Microsoft WinCE 6.0 BSP FINAL release source code for use with the i.MX27ADS TO2 WCE600_FINAL_MX27_S
💻 CPP
📖 第 1 页 / 共 5 页
字号:
                        &CsPropStreamEx,                   // in buffer
                        sizeof(CSPROPERTY_STREAMEX_S),     // in buffer size
                        NULL,                              // out buffer
                        0,                                 // out buffer size
                        &dwBytesTransferred,               // number of bytes returned
                        NULL);                             // ignored (=NULL)

    LeaveCriticalSection(&m_csStill); 

    if (!bResult)
    {
        RETAILMSG(CAMAPP_ERROR_MSG, (TEXT("LoadCamDriver: create still pin instance failed!\r\n")));
        return FALSE;
    }

    // create capture pin instance
    CsPropStreamEx.hMsgQueue = m_hCaptureMsgQ; 
    CsPropStreamEx.CsPin.PinId = CAPTURE;     // 0=CAPTURE,1=STILL,2=PREVIEW
    CsPropStreamEx.CsPin.Property.Set = CSPROPSETID_StreamEx;
    CsPropStreamEx.CsPin.Property.Id = CSPROPERTY_STREAMEX_INIT;
    CsPropStreamEx.CsPin.Property.Flags = CSPROPERTY_TYPE_SET;

    EnterCriticalSection(&m_csCapture); 

    bResult = DeviceIoControl(m_hCapturePinDll,             // file handle to the driver
                        IOCTL_STREAM_INSTANTIATE,           // I/O control code
                        &CsPropStreamEx,                    // in buffer
                        sizeof(CSPROPERTY_STREAMEX_S),      // in buffer size
                        NULL,                               // out buffer
                        0,                                  // out buffer size
                        &dwBytesTransferred,                // number of bytes returned
                        NULL);                              // ignored (=NULL)
    LeaveCriticalSection(&m_csCapture); 
                        
    if (!bResult)
    {
        RETAILMSG(CAMAPP_ERROR_MSG, (TEXT("LoadCamDriver: create capture pin instance failed!\r\n")));
        return FALSE;
    }

    // Get Display Info from Display driver
    DISPLAY_CHARACTERISTIC displayCharacteristics;
    
    HDC hDisplay = CreateDC(TEXT("DISPLAY"), NULL, NULL, NULL);
    
    if (ExtEscape(hDisplay, VF_GET_DISPLAY_INFO, NULL, NULL,
            sizeof(DISPLAY_CHARACTERISTIC), (LPSTR) &displayCharacteristics) < 0)
    {
        RETAILMSG(CAMAPP_ERROR_MSG, (TEXT("LoadCamDriver: Get Display Info from Display driver failed!\r\n")));
        return FALSE;
    }
    m_iPanelWidth = displayCharacteristics.width;
    m_iPanelHeight = displayCharacteristics.height;
    m_iPanelBpp = displayCharacteristics.bpp;

    //Get pin Data ranges.
    ReadPinDataRanges(PREVIEW);
    ReadPinDataRanges(STILL);
    ReadPinDataRanges(CAPTURE);

    if (!PreviewPinStop())
    {
        RETAILMSG(CAMAPP_ERROR_MSG, (TEXT("LoadCamDriver: Stop Preview pin failed.\r\n")));
        return FALSE;
    }

    if (!CapturePinStop())
    {
        RETAILMSG(CAMAPP_ERROR_MSG, (TEXT("LoadCamDriver: Stop Capture pin failed.\r\n")));
        return FALSE;
    }

    if (!StillPinStop())
    {
        RETAILMSG(CAMAPP_ERROR_MSG, (TEXT("LoadCamDriver: Stop Still pin failed.\r\n")));
        return FALSE;
    }
    
    if (!ChangeResolution(PREVIEW, m_dwResolution))
    {
        RETAILMSG(CAMAPP_ERROR_MSG, (TEXT("LoadCamDriver: Set Preivew Resolution failed.\r\n")));
        return FALSE;
    }

    if (!ChangeResolution(CAPTURE, m_dwResolution))
    {
        RETAILMSG(CAMAPP_ERROR_MSG, (TEXT("LoadCamDriver: Set Capture Resolution failed.\r\n")));
        return FALSE;
    }

    if (!ChangeResolution(STILL, m_dwResolution))
    {
        RETAILMSG(CAMAPP_ERROR_MSG, (TEXT("LoadCamDriver: Set Still Resolution failed.\r\n")));
        return FALSE;
    }   

/*
    BOOL    bDirectDisplayMode = FALSE;
    bResult = DeviceIoControl(m_hPreviewPinDll,                  // file handle to the driver
                        IOCTL_SET_DIRECT_DISPLAY_MODE,           // I/O control code
                        NULL,                                    // in buffer
                        bDirectDisplayMode,                      // in buffer size
                        NULL,                                    // out buffer
                        0,                                       // out buffer size
                        &dwBytesTransferred,                     // number of bytes returned
                        NULL);                                   // ignored =NULL
    if (!bResult)
    {
        RETAILMSG(CAMAPP_ERROR_MSG, (TEXT("LoadCamDriver: set bDirectDisplayMode failed!\r\n")));
        return FALSE;
    }

    //So far we don't enable capture pin

    BOOL    bDirectCaptureMode = TRUE;
    bResult = DeviceIoControl(m_hPreviewPinDll,                  // file handle to the driver
                        IOCTL_SET_DIRECT_CAPTURE_MODE,           // I/O control code
                        &bDirectCaptureMode,                     // in buffer
                        sizeof(BOOL),                            // in buffer size
                        &bDirectCaptureMode,                     // out buffer
                        sizeof(BOOL),                            // out buffer size
                        &dwBytesTransferred,                     // number of bytes returned
                        NULL);                                   // ignored =NULL
    if (!bResult)
    {
        RETAILMSG(CAMAPP_DEBUG_MSG, (TEXT("LoadCamDriver: set bDirectCaptureMode failed!\r\n")));
    }
    */
    
    RETAILMSG(CAMAPP_DEBUG_MSG, (TEXT("LoadCamDriver: LoadCamDriver Done!\r\n")));

    return TRUE;
}


/********************************************************************
 *
 *    FUNCTION:       PinStart
 *
 *    DESCRIPTION:    Start  Pin
 *
 *    PARAMETERS:     None
 *
 *    RETURNS:        TRUE if successfully, otherwise return FALSE
 *
 ********************************************************************/
BOOL CCameraWindow::PinStart(DWORD pinId)
{
    CSPROPERTY IOCTLInput;
    CSSTATE state;
    DWORD dwBytesTransferred;
    BOOL bResult;
    HANDLE h_PinDll;
    CRITICAL_SECTION  cs_Pin;    

    RETAILMSG(CAMAPP_DEBUG_MSG, (TEXT("PinStart+!\r\n")));

    switch (pinId)
    {
      case CAPTURE:
        {
            cs_Pin = m_csCapture;
            h_PinDll = m_hCapturePinDll;
        }
        break;
        
      case STILL:
        {
            cs_Pin = m_csStill;
            h_PinDll = m_hStillPinDll;
        }
        break;
        
      case PREVIEW:
        {
            cs_Pin = m_csPreview;
            h_PinDll = m_hPreviewPinDll;
        }
        break;
        
      default:
         {
            RETAILMSG(CAMAPP_ERROR_MSG, (TEXT("PinStart: The pinId is incorrect!\r\n")));
            return FALSE;
         }
    }

    IOCTLInput.Set = CSPROPSETID_Connection;
    IOCTLInput.Id = CSPROPERTY_CONNECTION_STATE;
    IOCTLInput.Flags = CSPROPERTY_TYPE_SET;
    state = CSSTATE_PAUSE;

    EnterCriticalSection(&cs_Pin); 

    bResult = DeviceIoControl(h_PinDll,                // file handle to the driver
                            IOCTL_CS_PROPERTY,         // I/O control code
                            &IOCTLInput,               // in buffer
                            sizeof(CSPROPERTY),        // in buffer size
                            &state,                    // out buffer
                            sizeof(CSSTATE),           // out buffer size
                            &dwBytesTransferred,       // number of bytes returned
                            NULL);                     // ignored (=NULL)
    if (!bResult)
    {
        RETAILMSG(CAMAPP_ERROR_MSG, (TEXT("PinStart: PAUSE  pin failed!\r\n")));
        LeaveCriticalSection(&cs_Pin); 
        return FALSE;
    }
    
    state = CSSTATE_RUN;
    bResult = DeviceIoControl(h_PinDll,                // file handle to the driver
                            IOCTL_CS_PROPERTY,         // I/O control code
                            &IOCTLInput,               // in buffer
                            sizeof(CSPROPERTY),        // in buffer size
                            &state,                    // out buffer
                            sizeof(CSSTATE),           // out buffer size
                            &dwBytesTransferred,       // number of bytes returned
                            NULL);                     // ignored (=NULL)

    LeaveCriticalSection(&cs_Pin); 

    if (!bResult)
    {
        RETAILMSG(CAMAPP_ERROR_MSG, (TEXT("PinStart: RUN pin failed!\r\n")));
        return FALSE;
    }

    RETAILMSG(CAMAPP_DEBUG_MSG, (TEXT("PinStart-!\r\n")));
    return TRUE;
}



/********************************************************************
 *
 *    FUNCTION:       PinPause
 *
 *    DESCRIPTION:    Pause  Pin
 *
 *    PARAMETERS:     None
 *
 *    RETURNS:        TRUE if successfully, otherwise return FALSE
 *
 ********************************************************************/
BOOL CCameraWindow::PinPause(DWORD pinId)
{
    CSPROPERTY IOCTLInput;
    CSSTATE state;
    DWORD dwBytesTransferred;
    BOOL bResult;
    HANDLE h_PinDll;
    CRITICAL_SECTION  cs_Pin;    

    RETAILMSG(CAMAPP_DEBUG_MSG, (TEXT("PinPause+!\r\n")));

    switch (pinId)
    {
      case CAPTURE:
        {
            cs_Pin = m_csCapture;
            h_PinDll = m_hCapturePinDll;
        }
        break;
        
      case STILL:
        {
            cs_Pin = m_csStill;
            h_PinDll = m_hStillPinDll;
        }
        break;
        
      case PREVIEW:
        {
            cs_Pin = m_csPreview;
            h_PinDll = m_hPreviewPinDll;
        }
        break;
        
      default:
        {
            RETAILMSG(CAMAPP_ERROR_MSG, (TEXT("PinPause: The pinId is incorrect!\r\n")));
            return FALSE;
        }
    }

    IOCTLInput.Set = CSPROPSETID_Connection;
    IOCTLInput.Id = CSPROPERTY_CONNECTION_STATE;
    IOCTLInput.Flags = CSPROPERTY_TYPE_SET;
    state = CSSTATE_PAUSE;

    EnterCriticalSection(&cs_Pin); 

    bResult = DeviceIoControl(h_PinDll,                // file handle to the driver
                            IOCTL_CS_PROPERTY,         // I/O control code
                            &IOCTLInput,               // in buffer
                            sizeof(CSPROPERTY),        // in buffer size
                            &state,                    // out buffer
                            sizeof(CSSTATE),           // out buffer size
                            &dwBytesTransferred,       // number of bytes returned
                            NULL);                     // ignored (=NULL)
  
    LeaveCriticalSection(&cs_Pin); 

    if (!bResult)
    {
        RETAILMSG(CAMAPP_ERROR_MSG, (TEXT("PinPause: PAUSE  pin failed!\r\n")));
        return FALSE;
    }
    
    RETAILMSG(CAMAPP_DEBUG_MSG, (TEXT("PinPause-!\r\n")));
    return TRUE;
}



/********************************************************************
 *
 *    FUNCTION:       PinStop
 *
 *    DESCRIPTION:    Stop Pin
 *
 *    PARAMETERS:     None
 *
 *    RETURNS:        TRUE if successfully, otherwise return FALSE
 *
 ********************************************************************/
BOOL CCameraWindow::PinStop(DWORD pinId)
{
    CSPROPERTY IOCTLInput;
    CSSTATE state;
    DWORD dwBytesTransferred;
    BOOL bResult;
    HANDLE h_PinDll;
    CRITICAL_SECTION  cs_Pin;    

    RETAILMSG(CAMAPP_DEBUG_MSG, (TEXT("PinStop+!\r\n")));

    switch (pinId)
    {
      case CAPTURE:
        {
            cs_Pin = m_csCapture;
            h_PinDll = m_hCapturePinDll;
        }
        break;
        
      case STILL:
        {
            cs_Pin = m_csStill;
            h_PinDll = m_hStillPinDll;
        }
        break;
        
      case PREVIEW:
        {
            cs_Pin = m_csPreview;
      

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -