#ifndef NULLSOFT_VIDEOLAYERH #define NULLSOFT_VIDEOLAYERH #include "WMHandler.h" #include "OutputStream.h" #include #include "VideoDataConverter.h" #include "Config.h" #include "VideoThread.h" #define VIDEO_ACCEPTABLE_JITTER (config_video_jitter*10000) #define VIDEO_ACCEPTABLE_JITTER_MS (config_video_jitter) class VideoLayer : public WMHandler { public: VideoLayer(IWMReader *_reader); ~VideoLayer(); bool IsOpen(); void Kill(); private: // WMHandler void VideoFrameDrop(DWORD lateness); void SampleReceived(QWORD &timeStamp, QWORD &duration, unsigned long &outputNum, unsigned long &flags, INSSBuffer *&sample); void Opened(); void AudioBufferMilliseconds(long ms); void Closed(); void Started(); void Stopped(); void HasVideo(bool &video); // utility methods bool AttemptOpenVideo(VideoOutputStream *attempt); bool OpenVideo(); // other people's data IWMReader *reader; // our data IWMReaderAdvanced2 *reader2; IWMHeaderInfo *header; int videoOutputNum; DWORD offset; long nextRest; VideoDataConverter *converter; VideoOutputStream *videoStream; bool videoOpened; QWORD catchupTime; double aspect; int fourcc; bool flip; int videoWidth, videoHeight; HANDLE killSwitch; DWORD earlyDelivery; bool drmProtected; bool video_output_opened; VideoThread videoThread; }; #endif