Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

73 lines
2.0 KiB

//***************************************************************************
// 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__