//========= Copyright Valve Corporation, All rights reserved. ============// // // The copyright to the contents herein is the property of Valve, L.L.C. // The contents may be used and/or copied only with the written permission of // Valve, L.L.C., or in accordance with the terms and conditions stipulated in // the agreement/contract under which the contents have been supplied. // //============================================================================= #ifndef VIDEOSUBSYSTEM_H #define VIDEOSUBSYSTEM_H #if defined ( WIN32 ) #pragma once #endif #include "tier2/tier2.h" #include "appframework/IAppSystem.h" //----------------------------------------------------------------------------- // Common structure used to store supported file types //----------------------------------------------------------------------------- struct VideoFileExtensionInfo_t { const char *m_FileExtension; VideoSystem_t m_VideoSubSystem; VideoSystemFeature_t m_VideoFeatures; }; class IVideoCommonServices { public: virtual bool CalculateVideoDimensions( int videoWidth, int videoHeight, int displayWidth, int displayHeight, VideoPlaybackFlags_t playbackFlags, int *pOutputWidth, int *pOutputHeight, int *pXOffset, int *pYOffset ) = 0; virtual float GetSystemVolume() = 0; virtual VideoResult_t InitFullScreenPlaybackInputHandler( VideoPlaybackFlags_t playbackFlags, float forcedMinTime, bool windowed ) = 0; virtual bool ProcessFullScreenInput( bool &bAbortEvent, bool &bPauseEvent, bool &bQuitEvent ) = 0; virtual VideoResult_t TerminateFullScreenPlaybackInputHandler() = 0; }; //----------------------------------------------------------------------------- // Main VIDEO_SERVICES interface //----------------------------------------------------------------------------- #define VIDEO_SUBSYSTEM_INTERFACE_VERSION "IVideoSubSystem002" class IVideoSubSystem : public IAppSystem { public: // SubSystem Identification functions virtual VideoSystem_t GetSystemID() = 0; virtual VideoSystemStatus_t GetSystemStatus() = 0; virtual VideoSystemFeature_t GetSupportedFeatures() = 0; virtual const char *GetVideoSystemName() = 0; // Setup & Shutdown Services virtual bool InitializeVideoSystem( IVideoCommonServices *pCommonServices ) = 0; virtual bool ShutdownVideoSystem() = 0; virtual VideoResult_t VideoSoundDeviceCMD( VideoSoundDeviceOperation_t operation, void *pDevice, void *pData = nullptr ) = 0; // get list of file extensions and features we support virtual int GetSupportedFileExtensionCount() = 0; virtual const char *GetSupportedFileExtension( int num ) = 0; virtual VideoSystemFeature_t GetSupportedFileExtensionFeatures( int num ) = 0; // Video Playback and Recording Services virtual VideoResult_t PlayVideoFileFullScreen( const char *filename, void *mainWindow, int windowWidth, int windowHeight, int desktopWidth, int desktopHeight, bool windowed, float forcedMinTime, VideoPlaybackFlags_t playbackFlags ) = 0; // Create/destroy a video material virtual IVideoMaterial *CreateVideoMaterial( const char *pMaterialName, const char *pVideoFileName, VideoPlaybackFlags_t flags ) = 0; virtual VideoResult_t DestroyVideoMaterial( IVideoMaterial* pVideoMaterial ) = 0; // Create/destroy a video encoder virtual IVideoRecorder *CreateVideoRecorder() = 0; virtual VideoResult_t DestroyVideoRecorder( IVideoRecorder *pRecorder ) = 0; virtual VideoResult_t CheckCodecAvailability( VideoEncodeCodec_t codec ) = 0; virtual VideoResult_t GetLastResult() = 0; }; #endif