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

📄 pindriver.h

📁 freescale i.mx31 BSP CE5.0全部源码
💻 H
字号:
//-----------------------------------------------------------------------------
//
// Copyright (C) 2003-2004, MOTOROLA, INC. All Rights Reserved
// THIS SOURCE CODE IS CONFIDENTIAL AND PROPRIETARY AND MAY NOT
// BE USED OR DISTRIBUTED WITHOUT THE WRITTEN PERMISSION OF
// MOTOROLA, INC.
//
//------------------------------------------------------------------------------
//
//  Copyright (C) 2004, Freescale Semiconductor, Inc. All Rights Reserved
//  THIS SOURCE CODE IS CONFIDENTIAL AND PROPRIETARY AND MAY NOT
//  BE USED OR DISTRIBUTED WITHOUT THE WRITTEN PERMISSION OF
//  Freescale Semiconductor, Inc.
//
//------------------------------------------------------------------------------

//------------------------------------------------------------------------------
//
//  File:  PinDriver.h
//
//  Header file for PinDevice class
//
//------------------------------------------------------------------------------

#include "CameraDriver.h"

#ifndef __PIN_DD
#define __PIN_DD

#ifdef __cplusplus
extern "C" {
#endif

//------------------------------------------------------------------------------
// Defines
#define PIN_TIMEOUT    250


//------------------------------------------------------------------------------
// Types
typedef MMRESULT (WINAPI *FNTIMEKILLEVENT)(UINT);
typedef MMRESULT (WINAPI *FNTIMESETEVENT)(UINT, UINT, LPTIMECALLBACK, DWORD, UINT );

typedef enum _ImageCommands
{
    IMAGE_NTSC_EIA_100AMP_100SAT = 0,      
    IMAGE_NTSC_EIA_75AMP_100SAT,           
    IMAGE_BLACK,
    IMAGE_WHITE,
    IMAGE_GRAY_INCREASING, 
    IMAGE_LIST_TERMINATOR                  // Always keep this guy last
} IMAGECOMMAND;

typedef struct CPinInitHandle
{
    PCAMERADEVICE pCamDevice;
} PININITHANDLE, * PPININITHANDLE;

typedef class CPinDevice 
{
    public:
        CPinDevice();

        ~CPinDevice();

        bool InitializeSubDevice(PCAMERADEVICE pCamDevice);

        DWORD StreamInstantiate(
            PCSPROPERTY_STREAMEX_S pCsPropStreamEx,
            PUCHAR                 pOutBuf,
            DWORD                  OutBufLen,
            PDWORD                 pdwBytesTransferred
        );

        DWORD PinHandleConnectionRequests(
            PUCHAR pInBuf,
            DWORD  InBufLen,
            PUCHAR pOutBuf,
            DWORD  OutBufLen,
            PDWORD pdwBytesTransferred
        );

        DWORD PinHandleStreamRequests(
            PUCHAR pInBuf,
            DWORD  InBufLen,
            PUCHAR pOutBuf,
            DWORD  OutBufLen,
            PDWORD pdwBytesTransferred
        );

        DWORD PinHandleVPConfigRequests(
            PUCHAR pInBuf,
            DWORD  InBufLen,
            PUCHAR pOutBuf,
            DWORD  OutBufLen,
            PDWORD pdwBytesTransferred
        );

        DWORD PinHandleReadStreamRequests(
            PUCHAR pInBuf,
            DWORD  InBufLen,
            PUCHAR pOutBuf,
            DWORD  OutBufLen,
            PDWORD pdwBytesTransferred
        );

        DWORD PinHandleAllocateBuffers(
            PUCHAR pInBuf,
            DWORD  InBufLen,
            PUCHAR pOutBuf,
            DWORD  OutBufLen,
            PDWORD pdwBytesTransferred
        );

        DWORD PinSetDirectDisplayMode(BOOL bDirectDisplayMode);

        DWORD PinSetDirectCaptureMode(BOOL bDirectCaptureMode);

        void HandlePinIO( );

        void SetState(
            CSSTATE   CsState,
            CSSTATE * CsPrevState
        );

        static void TimerCallBack(
            UINT uTimerID,
            UINT uMsg,
            DWORD_PTR dwUser,
            DWORD_PTR dw1,
            DWORD_PTR dw2
        ); 

        bool PauseStream( );

        bool CloseSubDevice( );

        CS_DATARANGE_VIDEO m_CsDataRangeVideo;
        CSSTATE m_CsState;
    
        bool m_fPrpChannelEnabled;
        bool m_fJustEnablePrp;
        HANDLE m_hPrPBuffFilled;
        UINT8 m_BufferFilled;

        ULONG m_ulCurrNumOfBuffers;

    private:
        bool AllocateBuffers( );

        bool CreateTimer( );

        inline bool IsBufferListEmpty( )
        {
            return (NULL == m_pHeadBuffer);
        }

        void BufferFill(
            PCSSTREAM_HEADER pCsStreamHeader,
            PCS_FRAME_INFO   pCsFrameInfo,
            IMAGECOMMAND     Command,
            bool             FlipHorizontal
        );

        bool AddFreeBuf(
            bool fDriverAllocating,
            PCS_STREAM_DESCRIPTOR pCsStreamDesc
        );

        bool RemoveBufferFromList(PCS_STREAM_DESCRIPTOR * ppCsStreamDesc);

        bool DeleteBufferList();
    
        DWORD PinHandleConnStateSubReqs(
            ULONG  ulReqFlags,
            PUCHAR pOutBuf,
            DWORD  OutBufLen,
            PDWORD pdwBytesTransferred
        );

        DWORD PinHandleConnDataFormatSubReqs(
            ULONG                          ulReqFlags,
            PCS_DATAFORMAT_VIDEOINFOHEADER pCsDataFormatVidInfoHdr,
            PDWORD                         pdwBytesTransferred
        );

        ULONG              m_ulPinId;
        ULONG              m_ulMaxNumOfBuffers;
        ULONG              m_ulFrameSize;
        ULONG              m_ulFramesDropped;
        ULONG              m_ulPictureNumber;

        FNTIMESETEVENT     m_pfnTimeSetEvent; 
        FNTIMEKILLEVENT    m_pfnTimeKillEvent;

        PSTREAM_BUFFERNODE m_pHeadBuffer;
        PSTREAM_BUFFERNODE m_pHeadBufferOri;
        PCAMERADEVICE      m_pCamAdapter;

        MMRESULT           m_TimerIdentifier;
        REFERENCE_TIME     m_RtAveTimePerFrame;

        HANDLE             m_hMsgQ;
        HANDLE             m_hIOThread;
        HMODULE            m_hTimerDll;

        CRITICAL_SECTION   m_csStreamBuffer;

        bool               m_bBuffersAllocated;

        bool               m_fClientAllocateBuffers;
        bool               m_fClientInitialized;
        bool               m_fDiscontinuity;

} PINDEVICE, * PPINDEVICE;

//------------------------------------------------------------------------------
// Functions

#ifdef __cplusplus
}
#endif

#endif //__PIN_DD

⌨️ 快捷键说明

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