📄 basepin.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 + -