亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? pindevice.cpp.svn-base

?? PXA270 平臺(tái) Windows Mobile 5 攝像頭驅(qū)動(dòng)
?? SVN-BASE
?? 第 1 頁 / 共 3 頁
字號(hào):
        return ERROR_INVALID_PARAMETER;
    }

    // we support PROPSETID_Pin, so just return success
    if ( CSPROPERTY_TYPE_SETSUPPORT == pCsProp->Flags )
    {
        return ERROR_SUCCESS;
    }

    switch ( pCsProp->Id )
    {
    case CSPROPERTY_CONNECTION_STATE:
        dwError = PinHandleConnStateSubReqs( pCsProp->Flags, pOutBuf, OutBufLen, pdwBytesTransferred ) ;
        break ;

    case CSPROPERTY_CONNECTION_DATAFORMAT:
        
        pCsDataFormatVidInfoHdr = (PCS_DATAFORMAT_VIDEOINFOHEADER) pOutBuf;  
        DWORD dwStructSize;
        if(( OutBufLen < sizeof( PCS_DATAFORMAT_VIDEOINFOHEADER )) || ( pOutBuf == NULL ))
        {
            return dwError;
        }
            
        // The DeviceIOControl function is already taking care of calling MapCallerPointer. 
        // The video info header can be modified by the caller while it's being accessed in the subroutine.
        // The Subroutine needs to make a copy of the video info header before accessing it.

        __try
        {
            dwStructSize = sizeof( CS_DATAFORMAT_VIDEOINFOHEADER ) + pCsDataFormatVidInfoHdr->VideoInfoHeader.bmiHeader.biSize - sizeof( CS_BITMAPINFOHEADER );
            pCsDataFormatVidInfoHdrCopy = (PCS_DATAFORMAT_VIDEOINFOHEADER) LocalAlloc( LMEM_ZEROINIT, dwStructSize );
            if( pCsDataFormatVidInfoHdrCopy == NULL )
            {
                return ERROR_INVALID_PARAMETER; // TODO: change it into out of memory
            }

            if( CeSafeCopyMemory( pCsDataFormatVidInfoHdrCopy, pCsDataFormatVidInfoHdr, dwStructSize ))
            {  
                dwError = PinHandleConnDataFormatSubReqs( pCsProp->Flags, pCsDataFormatVidInfoHdrCopy, pdwBytesTransferred ) ;
            }
        }
        __except( EXCEPTION_EXECUTE_HANDLER )
        {
        }

        LocalFree( pCsDataFormatVidInfoHdrCopy );
        break ;
    
    case CSPROPERTY_CONNECTION_ALLOCATORFRAMING:
        switch ( pCsProp->Flags )
        {
        case CSPROPERTY_TYPE_GET:
        case CSPROPERTY_TYPE_BASICSUPPORT:
            CSALLOCATOR_FRAMING csAllocatorFraming;
            
            if(( OutBufLen < sizeof( CSALLOCATOR_FRAMING )) || ( pOutBuf == NULL ))
            {
                dwError = ERROR_MORE_DATA;
                break;
            }

            csAllocatorFraming.RequirementsFlags = GetCurrentMemoryModel();
            csAllocatorFraming.PoolType          = PagedPool;
            //TODO : put PIN_GUID specific decision about number of max. frames
            // There is only one frame for still image capture
            csAllocatorFraming.Frames            = STILL == m_ulPinId ? 1 : m_ulMaxNumOfBuffers;
            csAllocatorFraming.FrameSize         = m_CsDataRangeVideo.VideoInfoHeader.bmiHeader.biSizeImage;
            csAllocatorFraming.FileAlignment     = FILE_BYTE_ALIGNMENT;
            csAllocatorFraming.Reserved          = 0;
            
            __try
            {
                memcpy( pOutBuf, &csAllocatorFraming, sizeof( CSALLOCATOR_FRAMING ));
                *pdwBytesTransferred = sizeof( CSALLOCATOR_FRAMING );
            }
            __except( EXCEPTION_EXECUTE_HANDLER )
            {
                dwError = ERROR_INVALID_PARAMETER;
                break;
            }

            dwError = ERROR_SUCCESS;
            break ;
        
        case CSPROPERTY_TYPE_SET:
            
            if( OutBufLen < sizeof( CSALLOCATOR_FRAMING ))
            {
                dwError = ERROR_INVALID_PARAMETER;
                break;
            }

            pCsAllocatorFraming = (PCSALLOCATOR_FRAMING) pOutBuf;
            if(( m_CsState != CSSTATE_STOP ) || ( GetCurrentMemoryModel() != pCsAllocatorFraming->RequirementsFlags ))
            {
                dwError = ERROR_INVALID_PARAMETER;
                break;
            }
            m_ulMaxNumOfBuffers = pCsAllocatorFraming->Frames ;
            dwError = ERROR_SUCCESS;
            break ;
        
        default :
            DEBUGMSG(ZONE_IOCTL|ZONE_ERROR, (_T("PIN_IOControl(%08x): CSPROPERTY_CONNECTION_ALLOCATORFRAMING Invalid Request\r\n"), this)) ;
        }
        
        break ;
    
    case CSPROPERTY_CONNECTION_PROPOSEDATAFORMAT :
        // I don't want to support dynamic format changes for this test driver
        DEBUGMSG(ZONE_IOCTL, (_T("PIN_IOControl(%08x): CSPROPERTY_CONNECTION_PROPOSEDATAFORMAT is not supported\r\n"), this)) ;
        break ;
    
    default :
        DEBUGMSG(ZONE_IOCTL|ZONE_ERROR, (_T("PIN_IOControl(%08x): Invalid Request\r\n"), this)) ;

    }
    
    return dwError ;
}


DWORD
CPinDevice::PinHandleVPConfigRequests(
    PCSPROPERTY pCsProp,
    PUCHAR      pOutBuf,
    DWORD       OutBufLen,
    PDWORD      pdwBytesTransferred
    )
{
    return ERROR_NOT_SUPPORTED;
}


DWORD
CPinDevice::PinHandleBufferRequest(
    DWORD   dwCommand,
    PUCHAR  pOutBuf,        // This is an unsafe parameter, use with caution
    DWORD   OutBufLen
    )
{
    DWORD   dwError = ERROR_INVALID_PARAMETER;

    if(( pOutBuf == NULL ) || ( OutBufLen < sizeof( CS_STREAM_DESCRIPTOR )))
    {
        return dwError;
    }


    PCS_STREAM_DESCRIPTOR pCsDescriptor = (PCS_STREAM_DESCRIPTOR) pOutBuf;

    // The pOutBuf argument has already been probed with MapCallerPointer, and the upper layer 
    // has already checked for the size of the buffer to be at least sizeof( CS_STREAM_DESCRIPTOR )

    switch( dwCommand )
    {
        case CS_ALLOCATE:
            dwError = AllocateBuffer( pOutBuf );
            break;

        case CS_ENQUEUE:
            dwError = EnqueueDescriptor( pOutBuf );
            break;

        case CS_DEALLOCATE:
            dwError = DeallocateBuffer( pOutBuf );

        default:
            break;
    }

    return dwError;
}


DWORD
CPinDevice::PinHandleConnStateSubReqs(
    ULONG  ulReqFlags,
    PUCHAR pOutBuf,                 // Unsafe, use with caution
    DWORD  OutBufLen,
    PDWORD pdwBytesTransferred
    )
{
    DWORD    dwError  = ERROR_INVALID_PARAMETER;
    PCSSTATE pCsState = NULL;
    
    switch( ulReqFlags )
    {
    case CSPROPERTY_TYPE_GET:
        if( OutBufLen < sizeof ( CSSTATE ) )
        {
            dwError = ERROR_MORE_DATA;
            break;
        }

        __try
        {
            memcpy( pOutBuf, &m_CsState, sizeof ( CSSTATE ) );
            *pdwBytesTransferred = sizeof ( CSSTATE );
        }
        __except( EXCEPTION_EXECUTE_HANDLER )        
        {
            dwError = ERROR_MORE_DATA;
            break;
        }
        
        dwError = ERROR_SUCCESS;
        break;
    
    case CSPROPERTY_TYPE_SET:

        CSSTATE csState;
        if( OutBufLen < sizeof( CSSTATE ))
        {
            dwError = ERROR_MORE_DATA;
            break;
        }

        if( !CeSafeCopyMemory( &csState, pOutBuf, sizeof( CSSTATE )))
        {
            dwError = ERROR_MORE_DATA;
            break;
        }

        if( csState == m_CsState )
        { 
            dwError = ERROR_SUCCESS;
            break;
        }

        switch ( csState )
        {
        case CSSTATE_STOP:

            m_ulPictureNumber = 0;
            m_ulFramesDropped = 0;
            m_msLastPT        = 0;

            // We can get to the CSSTATE_STOP state from any other state.
            if ( CSSTATE_STOP == m_CsState ) 
            {
                DEBUGMSG( ZONE_IOCTL, ( _T("PIN_IOControl(%08x): State to set = CSSTATE_STOP but we are already Stopped.\r\n"), this ) );
                dwError = ERROR_SUCCESS;
                break;
            }

            m_CsState = CSSTATE_STOP;

            m_pCamAdapter->StopHWCapture( );
            
            // The buffer queue needs to be emptied if the driver is not allocating the buffers
            FlushBufferQueue();
            dwError = ERROR_SUCCESS;

            break;

        case CSSTATE_PAUSE:
            
            if ( CSSTATE_PAUSE == m_CsState ) 
            {
                DEBUGMSG( ZONE_IOCTL, ( _T("PIN_IOControl(%08x): State to set = CSSTATE_PAUSE but we are already Paused.\r\n"), this ) );
                dwError = ERROR_SUCCESS;
                break;
            }

            if( m_CsState == CSSTATE_STOP )
            {
                // Let's allocate our resources
                if( m_pStreamDescriptorList == NULL )
                {
                    m_pStreamDescriptorList = (PCS_STREAM_DESCRIPTOR_SHADOW) LocalAlloc( LMEM_ZEROINIT, sizeof( CS_STREAM_DESCRIPTOR_SHADOW ) * m_ulMaxNumOfBuffers );
                    if( NULL == m_pStreamDescriptorList )
                    {
                        dwError = ERROR_OUTOFMEMORY;
                        break;
                    }
                }

                m_dwBufferCount = 0;
            }
            else if ( m_CsState == CSSTATE_RUN )
            {
                m_pCamAdapter->StopHWCapture();
            }

            m_CsState    = CSSTATE_PAUSE ;

            dwError = ERROR_SUCCESS;
            break;

        case CSSTATE_RUN:
            
            //TODO : not sure if we should completely block transitioning from STOP->RUN state.
            if ( CSSTATE_STOP == m_CsState ) 
            {
                DEBUGMSG( ZONE_IOCTL, ( _T("PIN_IOControl(%08x): CSSTATE_STOP to CSSTATE_RUN is not a supported transition .\r\n"), this ) );
                dwError = ERROR_INVALID_STATE;
                break;
            }

            // We only allow Still Pin to goto Run state through PROPSETID_VIDCAP_VIDEOCONTROL
            if ( STILL == m_ulPinId )
            {
                break;
            }

            m_CsState = CSSTATE_RUN;
            m_msStart = 0xFFFFFFFF;

            m_pCamAdapter->StartHWCapture( );

            dwError = ERROR_SUCCESS;
                     
            break;

        default :
            DEBUGMSG( ZONE_IOCTL|ZONE_ERROR, ( _T("PIN_IOControl(%08x): Incorrect State\r\n"), this ) );
            dwError = ERROR_INVALID_PARAMETER;
        }

        break;

    default:
        DEBUGMSG( ZONE_IOCTL|ZONE_ERROR, ( _T("PIN_IOControl(%08x): Invalid Request\r\n"), this ) );

        break;
    }

    return dwError;
}


DWORD
CPinDevice::PinHandleConnDataFormatSubReqs(
    ULONG                          ulReqFlags,
    PCS_DATAFORMAT_VIDEOINFOHEADER pCsDataFormatVidInfoHdr,  // Warning: this buffer is unsafe, use with caution
    PDWORD                         pdwBytesTransferred
    )
{
    DWORD    dwError  = ERROR_INVALID_PARAMETER;
    PCSSTATE pCsState = NULL;

    PCS_DATARANGE_VIDEO pCsDataRangeVideoMatched = NULL;

    // We must have called IOCTL_STREAM_INSTANTIATE before setting format
    if ( -1 == m_ulPinId )
    {
        return dwError;
    }
    
    // The incoming video info header is unsafe. The data might change on a separate thread
    // while it's being accessed. For security purposes, let's make a copy of the data
    // before any attempt to access them is done, and then work off the copy

    switch( ulReqFlags )
    {
    case CSPROPERTY_TYPE_SET:
        if ( true == m_pCamAdapter->AdapterCompareFormat( m_ulPinId, pCsDataFormatVidInfoHdr, &pCsDataRangeVideoMatched, true ) )
        {
            // We found our format
            memcpy( &m_CsDataRangeVideo, pCsDataRangeVideoMatched, sizeof ( CS_DATARANGE_VIDEO ) );
            memcpy( &m_CsDataRangeVideo, &pCsDataFormatVidInfoHdr->DataFormat, sizeof ( CSDATARANGE ) );
            memcpy( &m_CsDataRangeVideo.VideoInfoHeader, &pCsDataFormatVidInfoHdr->VideoInfoHeader, sizeof ( CS_VIDEOINFOHEADER ) );

            m_RtAveTimePerFrame = m_CsDataRangeVideo.VideoInfoHeader.AvgTimePerFrame;
            //*pdwBytesTransferred = sizeof ( CS_DATARANGE_VIDEO );
            dwError = ERROR_SUCCESS;
        }

        break;

    default:
        DEBUGMSG( ZONE_IOCTL|ZONE_ERROR, ( _T("PIN_IOControl(%08x): Invalid Request\r\n"), this ) );
    }

    return dwError;
}


DWORD 
CPinDevice::AllocateBuffer( LPVOID pOutBuf )
{
    DWORD                   dwError = ERROR_INVALID_PARAMETER;
    DWORD                   dwResult = -1;
    PCS_STREAM_DESCRIPTOR   pCsDescriptor = (PCS_STREAM_DESCRIPTOR) pOutBuf;

    // pOutBuf has already been validated through MapCallerPtr in the IOCTL function
    if(( pOutBuf == NULL ) || ( m_dwBufferCount >= m_ulMaxNumOfBuffers ))
    {
        return dwError;
    }

    // There are 2 cases here: the buffer comes from the hardware or from the software. 
    // If the buffer comes from the software, we generate a new entry in the table up to the maximum allowed.
    // If the buffer comes from the hardware, we setup the application stream descriptor

    EnterCriticalSection( &m_csStreamBuffer );

    if( GetCurrentMemoryModel() == CSPROPERTY_BUFFER_DRIVER )
    {
        // Get one of the hardware buffers, and setup the descriptor
        ASSERT( m_pStreamDescriptorList[ m_dwBufferCount ].m_fBusy == FALSE );

        dwError = HwSetupStreamDescriptor( m_dwBufferCount );
        if( dwError != ERROR_SUCCESS )
        {
            goto Cleanup;
        }
            
        if( !CeSafeCopyMemory( pCsDescriptor, &(m_pStreamDescriptorList[ m_dwBufferCount ].csStreamDescriptorShadow), sizeof( CS_STREAM_DESCRIPTOR )))
        {
            dwError = ERROR_INVALID_PARAMETER;
            goto Cleanup;
        }

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
三级不卡在线观看| 国产一区二区主播在线| 国产视频一区二区在线| 91福利国产成人精品照片| 韩国av一区二区三区四区| 亚洲精品福利视频网站| 欧美国产激情一区二区三区蜜月 | 美女视频黄 久久| 国产精品传媒在线| xvideos.蜜桃一区二区| 欧美精品在线一区二区| 91麻豆自制传媒国产之光| 国产乱子轮精品视频| 人人超碰91尤物精品国产| 亚洲精品国产无天堂网2021| 日本一区二区免费在线| 欧美一级国产精品| 欧美视频一区在线观看| 99视频有精品| 国产精品一线二线三线精华| 蜜臀久久99精品久久久久久9 | 天天色天天操综合| 亚洲男同性恋视频| 国产精品你懂的| 欧美sm美女调教| 欧美一区二区私人影院日本| 欧美体内she精高潮| 91在线观看地址| 成人av在线资源网站| 国产精品一二三区| 国产精品中文字幕欧美| 国产乱码精品一区二区三区av | 国内精品久久久久影院薰衣草| 视频一区欧美精品| 亚洲成av人片www| 亚洲成人一区在线| 午夜精品久久久久久久久久| 亚洲国产成人porn| 日日摸夜夜添夜夜添亚洲女人| 午夜精品久久久久| 天天操天天干天天综合网| 亚洲第一成人在线| 日韩国产欧美在线观看| 五月激情六月综合| 免费人成黄页网站在线一区二区| 奇米777欧美一区二区| 久久国产精品一区二区| 国精产品一区一区三区mba桃花 | 福利一区二区在线| 成人免费视频caoporn| 99久久精品免费看国产| 91在线视频官网| 国产精品免费网站在线观看| 亚洲国产高清aⅴ视频| 亚洲国产高清aⅴ视频| 亚洲免费观看在线视频| 亚洲国产va精品久久久不卡综合| 亚洲图片自拍偷拍| 美女网站视频久久| 国产精品一级在线| 91小视频在线观看| 欧美日韩一区二区在线视频| 欧美一级国产精品| 日本一二三不卡| 亚洲精品美国一| 免费久久精品视频| 成人av高清在线| 欧美日韩久久久一区| 2023国产一二三区日本精品2022| 国产精品嫩草99a| 亚洲成av人片在www色猫咪| 狠狠色综合色综合网络| 99精品国产热久久91蜜凸| 欧美另类一区二区三区| 久久久美女艺术照精彩视频福利播放| 综合自拍亚洲综合图不卡区| 天天av天天翘天天综合网| 国产美女精品在线| 欧美视频一区在线观看| 国产亚洲一二三区| 亚洲国产精品欧美一二99| 国产一区二区精品在线观看| 色婷婷av一区二区三区软件| 日韩一区二区在线播放| 亚洲天堂福利av| 久久精品久久久精品美女| av激情亚洲男人天堂| 日韩一区二区电影在线| 1区2区3区精品视频| 久久精品国产精品青草| 91免费看`日韩一区二区| 亚洲精品一区二区精华| 亚洲国产欧美另类丝袜| 成人午夜在线播放| 日韩精品资源二区在线| 亚洲伊人色欲综合网| 国产成人综合在线播放| 宅男在线国产精品| 亚洲视频一二区| 国产乱子轮精品视频| 在线电影一区二区三区| 日韩理论片中文av| 国产综合色产在线精品| 欧美高清激情brazzers| 国产精品福利一区| 国产一区二区三区日韩| 欧美一区二区性放荡片| 亚洲国产精品影院| 99久久精品国产导航| 久久久噜噜噜久久中文字幕色伊伊| 亚洲成人自拍网| 色婷婷综合中文久久一本| 国产精品视频一区二区三区不卡| 捆绑紧缚一区二区三区视频| 欧美高清性hdvideosex| 亚洲激情校园春色| 91免费视频观看| 亚洲丝袜美腿综合| 99久久777色| 欧美国产精品一区二区| 国产成人午夜99999| 精品国产乱码久久久久久免费| 日产欧产美韩系列久久99| 欧美日韩日日摸| 亚洲图片欧美视频| 在线视频综合导航| 亚洲精品高清视频在线观看| 92国产精品观看| 亚洲视频每日更新| 91在线精品一区二区| 亚洲图片激情小说| 一本一道久久a久久精品综合蜜臀| 中文字幕视频一区| hitomi一区二区三区精品| 中文字幕永久在线不卡| 99精品欧美一区二区三区小说| 国产精品久久久久久久久免费相片| 国产91露脸合集magnet| 欧美激情综合在线| 91在线观看下载| 亚洲最大成人网4388xx| 欧美日韩一区二区三区免费看| 亚洲综合成人网| 欧美精品国产精品| 免费人成精品欧美精品| 26uuu另类欧美| 成人免费精品视频| 亚洲老妇xxxxxx| 欧美日韩在线三级| 奇米精品一区二区三区在线观看一| 日韩一级视频免费观看在线| 国产一区二区三区久久悠悠色av| 久久精品亚洲乱码伦伦中文| www.欧美.com| 亚洲一区二区三区四区在线观看| 欧美色涩在线第一页| 久久精品国产**网站演员| 久久嫩草精品久久久久| 成人av在线播放网站| 亚洲一区二区五区| 日韩欧美一区在线观看| 国产91富婆露脸刺激对白| 亚洲精品美腿丝袜| 日韩精品一区二区三区中文不卡| 国产精品1区二区.| 一区二区三区四区国产精品| 欧美一区二区三区在| 国产风韵犹存在线视精品| 亚洲综合男人的天堂| 精品少妇一区二区三区在线视频| gogo大胆日本视频一区| 偷拍亚洲欧洲综合| 国产欧美一区二区精品婷婷 | 亚洲国产综合在线| 精品国产乱码91久久久久久网站| 成人动漫一区二区在线| 五月天一区二区| 中文字幕精品一区二区三区精品| 在线精品视频免费播放| 激情综合网激情| 亚洲最大的成人av| 久久久久综合网| 欧美电影一区二区三区| av男人天堂一区| 麻豆一区二区三区| 亚洲精品国久久99热| 久久亚洲精精品中文字幕早川悠里| 99v久久综合狠狠综合久久| 日韩高清欧美激情| 亚洲人成网站色在线观看| 欧美va亚洲va在线观看蝴蝶网| 色综合久久天天| 国产在线精品一区二区三区不卡| 亚洲午夜电影网| 国产精品久久久久婷婷二区次| 日韩精品一区二| 欧美伦理视频网站| 色噜噜狠狠成人中文综合| 国产寡妇亲子伦一区二区| 免费成人av资源网|