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

📄 basepin.h

📁 完整的基于Conxant平台的USB电视棒的WIN驱动程序。
💻 H
字号:
/*+++ *******************************************************************\ 
* 
*  Copyright and Disclaimer: 
*  
*     --------------------------------------------------------------- 
*     This software is provided "AS IS" without warranty of any kind, 
*     either expressed or implied, including but not limited to the 
*     implied warranties of noninfringement, merchantability and/or 
*     fitness for a particular purpose.
*     --------------------------------------------------------------- 
*   
*     Copyright (c) 2008 Conexant Systems, Inc. 
*     All rights reserved. 
*
\******************************************************************* ---*/ 

#ifndef _BASEPIN_H
#define _BASEPIN_H

class  Device;
struct IKsReferenceClock;


extern "C" 
{
#include <wdm.h>
}

#include <windef.h>
#define NOBITMAP
#include <mmreg.h>
#undef NOBITMAP
#include <unknown.h>
#include <ks.h>
#include <ksmedia.h>

typedef enum{
    PIN_TYPE_VIDEO = 0,
    PIN_TYPE_AUDIO = 1,
    PIN_TYPE_VBI = 2,
    PIN_TYPE_BDA_ANTENNA = 3,
    PIN_TYPE_TS_MPEG = 4,
    PIN_TYPE_SLICED_CC = 5,
    PIN_TYPE_TS2_MPEG = 6,
    PIN_TYPE_MPEG_INDEX = 7,
    PIN_TYPE_MAX_NUM
}PIN_TYPES;

#define MAX_PIN_TYPES 8

typedef enum
{
    FIELD_1,
    FIELD_2,
    FIELD_BOTH,
    FIELD_INVALID
}FIELD_TYPE;


class BasePin 
{
public:
    BasePin(PKSPIN p_ks_pin);
    virtual   ~BasePin();


    // Statics passed to avstream
    static NTSTATUS dispatchClose(PKSPIN p_ks_pin, PIRP p_irp );
    static NTSTATUS dispatchProcess(PKSPIN p_ks_pin );
    static NTSTATUS dispatchSetState(
        PKSPIN  p_ks_pin, 
        KSSTATE to_state,
        KSSTATE from_state);

    static NTSTATUS getDroppedFrames( 
        PIRP p_irp, 
        PKSPROPERTY p_in,
        PKSPROPERTY_DROPPEDFRAMES_CURRENT_S p_out);

    PKSSTREAM_POINTER getNextBuffer();
    VOID onBufferComplete(FIELD_TYPE field_type = FIELD_BOTH);

    DWORD getBufferSize();

    virtual VOID processCompletedBuffer(PKSSTREAM_POINTER p_buffer){}

    virtual VOID fillFrameInfo(PKSSTREAM_HEADER  p_strm_hdr, FIELD_TYPE field_type) = 0;
    virtual PIN_TYPES getPinType() = 0;
    virtual VOID start(){}

    virtual DWORD getStride(){return 1440;}
    virtual DWORD getLineSize(){return 720;}
    virtual DWORD getLinesPerFrame(){return 480;}
    virtual BOOLEAN isSingleFieldStream(){return FALSE;}
    VOID      releaseClones();

	VOID    setDiscontinuity();

protected:
    // For the derived class to initialize the base class
    NTSTATUS  init(
        ULONG    frames_to_cycle,
        ULONG    frame_size,
        LONGLONG duration);

    VOID timeStamp( 
        PKSSTREAM_HEADER  p_strm_hdr, 
        LONGLONG          time,
        BOOLEAN           time_is_valid,
        FIELD_TYPE        field);

    virtual NTSTATUS  setState(KSSTATE to_state, KSSTATE from_state);


protected:
    LONGLONG           _picture_num;    
    LONGLONG           _dropped_cnt;
    Device*            _p_device;
    PKSPIN             _p_ks_pin;

private:
    NTSTATUS  process();
    VOID      resetCounters();
    VOID      droppedFrame();

private:
    IKsReferenceClock* _p_clock;

    BOOLEAN            _discontinuity;
    ULONG              _frame_size;
    LONGLONG           _duration;
};


inline DWORD BasePin::getBufferSize()
{
    return _frame_size;
}

inline VOID BasePin::setDiscontinuity()
{
	_discontinuity = TRUE;
}

extern
const
KSALLOCATOR_FRAMING_EX
PIN_ALLOCATOR_FRAMING;


extern
const 
KSAUTOMATION_TABLE
PIN_AUTOMATION_TABLE;

#endif

⌨️ 快捷键说明

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