74 lines
2 KiB
C
74 lines
2 KiB
C
|
//***************************************************************************
|
||
|
// Queue header
|
||
|
//
|
||
|
//***************************************************************************
|
||
|
|
||
|
#ifndef __QUE_H__
|
||
|
#define __QUE_H__
|
||
|
|
||
|
#define SRBIndex(srb) (((PSRB_EXTENSION)(srb->SRBExtension))->Index)
|
||
|
#define SRBpfnEndSrb(srb) (((PSRB_EXTENSION)(srb->SRBExtension))->pfnEndSrb)
|
||
|
#define SRBparamSrb(srb) (((PSRB_EXTENSION)(srb->SRBExtension))->parmSrb)
|
||
|
|
||
|
#define BLOCK_SIZE 2048
|
||
|
|
||
|
typedef enum
|
||
|
{
|
||
|
Video,
|
||
|
Audio,
|
||
|
SubPicture
|
||
|
} StreamType;
|
||
|
|
||
|
class DeviceQueue
|
||
|
{
|
||
|
private:
|
||
|
ULONG count; // srb count in this queue
|
||
|
PHW_STREAM_REQUEST_BLOCK top;
|
||
|
PHW_STREAM_REQUEST_BLOCK bottom;
|
||
|
PHW_STREAM_REQUEST_BLOCK video;
|
||
|
PHW_STREAM_REQUEST_BLOCK audio;
|
||
|
PHW_STREAM_REQUEST_BLOCK subpic;
|
||
|
PVOID top_addr; // buffer address of the first srb
|
||
|
PVOID bottom_addr; // buffer address of the bottom srb
|
||
|
BOOLEAN v_first, a_first, s_first;
|
||
|
ULONG v_count, a_count, s_count;
|
||
|
// ULONG check;
|
||
|
// KSTIME kt[100];
|
||
|
|
||
|
void put( PHW_STREAM_REQUEST_BLOCK pOrigin, PHW_STREAM_REQUEST_BLOCK pSrb );
|
||
|
void put_from_bottom( PHW_STREAM_REQUEST_BLOCK pSrb );
|
||
|
void put_first( PHW_STREAM_REQUEST_BLOCK pSrb );
|
||
|
|
||
|
public:
|
||
|
void init( void );
|
||
|
void put_video( PHW_STREAM_REQUEST_BLOCK pSrb );
|
||
|
void put_audio( PHW_STREAM_REQUEST_BLOCK pSrb );
|
||
|
void put_subpic( PHW_STREAM_REQUEST_BLOCK pSrb );
|
||
|
PHW_STREAM_REQUEST_BLOCK get( PULONG index, PBOOLEAN last );
|
||
|
PHW_STREAM_REQUEST_BLOCK refer1st( PULONG index, PBOOLEAN last );
|
||
|
PHW_STREAM_REQUEST_BLOCK refer2nd( PULONG index, PBOOLEAN last );
|
||
|
void remove( PHW_STREAM_REQUEST_BLOCK pSrb );
|
||
|
BOOL setEndAddress( PHW_TIMER_ROUTINE pfn, PHW_STREAM_REQUEST_BLOCK pSrb );
|
||
|
//--- 97.09.14 K.Chujo
|
||
|
BOOL isEmpty( void );
|
||
|
ULONG getCount( void );
|
||
|
//--- End.
|
||
|
};
|
||
|
|
||
|
class CCQueue
|
||
|
{
|
||
|
private:
|
||
|
ULONG count; // srb count in this queue
|
||
|
PHW_STREAM_REQUEST_BLOCK top;
|
||
|
PHW_STREAM_REQUEST_BLOCK bottom;
|
||
|
|
||
|
public:
|
||
|
void init( void );
|
||
|
void put( PHW_STREAM_REQUEST_BLOCK pSrb );
|
||
|
PHW_STREAM_REQUEST_BLOCK get( void );
|
||
|
void remove( PHW_STREAM_REQUEST_BLOCK pSrb );
|
||
|
BOOL isEmpty( void );
|
||
|
};
|
||
|
|
||
|
#endif // __QUE_H__
|