diff options
| author | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
|---|---|---|
| committer | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
| commit | 3bf9df6b2785fa6d951086978a3e66f49427166a (patch) | |
| tree | 2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /video/videoservices.h | |
| download | archived-source-engine-2018-hl2-src-master.tar.xz archived-source-engine-2018-hl2-src-master.zip | |
Diffstat (limited to 'video/videoservices.h')
| -rw-r--r-- | video/videoservices.h | 198 |
1 files changed, 198 insertions, 0 deletions
diff --git a/video/videoservices.h b/video/videoservices.h new file mode 100644 index 0000000..cc30b75 --- /dev/null +++ b/video/videoservices.h @@ -0,0 +1,198 @@ +//========= 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 VIDEOSERVICES_H +#define VIDEOSERVICES_H + +#if defined ( WIN32 ) + #pragma once +#endif + + +#include "video/ivideoservices.h" + +#include "videosubsystem.h" + + +struct CVideFileoExtInfo_t +{ + const char *m_pExtension; // extension including "." + VideoSystem_t m_VideoSystemSupporting; + VideoSystemFeature_t m_VideoFeaturesSupporting; +}; + + +struct CActiveVideoObjectRecord_t +{ + void *m_pObject; + int m_VideoSystem; +}; + + +//----------------------------------------------------------------------------- +// Main VIDEO_SERVICES interface +//----------------------------------------------------------------------------- + +class CValveVideoServices : public CTier3AppSystem< IVideoServices > +{ + typedef CTier3AppSystem< IVideoServices > BaseClass; + + public: + CValveVideoServices(); + ~CValveVideoServices(); + + // Inherited from IAppSystem + virtual bool Connect( CreateInterfaceFn factory ); + virtual void Disconnect(); + virtual void *QueryInterface( const char *pInterfaceName ); + virtual InitReturnVal_t Init(); + virtual void Shutdown(); + + // Inherited from IVideoServices + + // Query the available video systems + virtual int GetAvailableVideoSystemCount(); + virtual VideoSystem_t GetAvailableVideoSystem( int n ); + + virtual bool IsVideoSystemAvailable( VideoSystem_t videoSystem ); + virtual VideoSystemStatus_t GetVideoSystemStatus( VideoSystem_t videoSystem ); + virtual VideoSystemFeature_t GetVideoSystemFeatures( VideoSystem_t videoSystem ); + virtual const char *GetVideoSystemName( VideoSystem_t videoSystem ); + + virtual VideoSystem_t FindNextSystemWithFeature( VideoSystemFeature_t features, VideoSystem_t startAfter = VideoSystem::NONE ); + + virtual VideoResult_t GetLastResult(); + + // deal with video file extensions and video system mappings + virtual int GetSupportedFileExtensionCount( VideoSystem_t videoSystem ); + virtual const char *GetSupportedFileExtension( VideoSystem_t videoSystem, int extNum = 0 ); + virtual VideoSystemFeature_t GetSupportedFileExtensionFeatures( VideoSystem_t videoSystem, int extNum = 0 ); + + + virtual VideoSystem_t LocateVideoSystemForPlayingFile( const char *pFileName, VideoSystemFeature_t playMode = VideoSystemFeature::PLAY_VIDEO_FILE_IN_MATERIAL ); + virtual VideoResult_t LocatePlayableVideoFile( const char *pSearchFileName, const char *pPathID, VideoSystem_t *pPlaybackSystem, char *pPlaybackFileName, int fileNameMaxLen, VideoSystemFeature_t playMode = VideoSystemFeature::FULL_PLAYBACK ); + + // Create/destroy a video material + virtual IVideoMaterial *CreateVideoMaterial( const char *pMaterialName, const char *pVideoFileName, const char *pPathID = nullptr, + VideoPlaybackFlags_t playbackFlags = VideoPlaybackFlags::DEFAULT_MATERIAL_OPTIONS, + VideoSystem_t videoSystem = VideoSystem::DETERMINE_FROM_FILE_EXTENSION, bool PlayAlternateIfNotAvailable = true ); + + virtual VideoResult_t DestroyVideoMaterial( IVideoMaterial* pVideoMaterial ); + virtual int GetUniqueMaterialID(); + + // Create/destroy a video encoder + virtual VideoResult_t IsRecordCodecAvailable( VideoSystem_t videoSystem, VideoEncodeCodec_t codec ); + + virtual IVideoRecorder *CreateVideoRecorder( VideoSystem_t videoSystem ); + virtual VideoResult_t DestroyVideoRecorder( IVideoRecorder *pVideoRecorder ); + + // Plays a given video file until it completes or the user presses ESC, SPACE, or ENTER + virtual VideoResult_t PlayVideoFileFullScreen( const char *pFileName, const char *pPathID, void *mainWindow, int windowWidth, int windowHeight, int desktopWidth, int desktopHeight, bool windowed, float forcedMinTime, + VideoPlaybackFlags_t playbackFlags = VideoPlaybackFlags::DEFAULT_FULLSCREEN_OPTIONS, + VideoSystem_t videoSystem = VideoSystem::DETERMINE_FROM_FILE_EXTENSION, bool PlayAlternateIfNotAvailable = true ); + + // Sets the sound devices that the video will decode to + virtual VideoResult_t SoundDeviceCommand( VideoSoundDeviceOperation_t operation, void *pDevice = nullptr, void *pData = nullptr, VideoSystem_t videoSystem = VideoSystem::ALL_VIDEO_SYSTEMS ); + + // Get the name of a codec as a string + const wchar_t *GetCodecName( VideoEncodeCodec_t nCodec ); + + private: + + VideoResult_t ResolveToPlayableVideoFile( const char *pFileName, const char *pPathID, VideoSystem_t videoSystem, VideoSystemFeature_t requiredFeature, bool PlayAlternateIfNotAvailable, + char *pResolvedFileName, int resolvedFileNameMaxLen, VideoSystem_t *pResolvedVideoSystem ); + + + VideoSystem_t LocateSystemAndFeaturesForFileName( const char *pFileName, VideoSystemFeature_t *pFeatures = nullptr, VideoSystemFeature_t requiredFeatures = VideoSystemFeature::NO_FEATURES ); + + bool IsMatchAnyExtension( const char *pFileName ); + + bool ConnectVideoLibraries( CreateInterfaceFn factory ); + bool DisconnectVideoLibraries(); + + int DestroyAllVideoInterfaces(); + + int GetIndexForSystem( VideoSystem_t n ); + VideoSystem_t GetSystemForIndex( int n ); + + VideoResult_t SetResult( VideoResult_t resultCode ); + + const char *GetFileExtension( const char *pFileName ); + + + static const int SYSTEM_NOT_FOUND = -1; + + VideoResult_t m_LastResult; + + int m_nInstalledSystems; + bool m_bInitialized; + + CSysModule *m_VideoSystemModule[VideoSystem::VIDEO_SYSTEM_COUNT]; + IVideoSubSystem *m_VideoSystems[VideoSystem::VIDEO_SYSTEM_COUNT]; + VideoSystem_t m_VideoSystemType[VideoSystem::VIDEO_SYSTEM_COUNT]; + VideoSystemFeature_t m_VideoSystemFeatures[VideoSystem::VIDEO_SYSTEM_COUNT]; + + CUtlVector< VideoFileExtensionInfo_t > m_ExtInfo; // info about supported file extensions + + CUtlVector< CActiveVideoObjectRecord_t > m_RecorderList; + CUtlVector< CActiveVideoObjectRecord_t > m_MaterialList; + + int m_nMaterialCount; + +}; + + +class CVideoCommonServices : public IVideoCommonServices +{ + public: + + CVideoCommonServices(); + ~CVideoCommonServices(); + + + virtual bool CalculateVideoDimensions( int videoWidth, int videoHeight, int displayWidth, int displayHeight, VideoPlaybackFlags_t playbackFlags, + int *pOutputWidth, int *pOutputHeight, int *pXOffset, int *pYOffset ); + + virtual float GetSystemVolume(); + + virtual VideoResult_t InitFullScreenPlaybackInputHandler( VideoPlaybackFlags_t playbackFlags, float forcedMinTime, bool windowed ); + + virtual bool ProcessFullScreenInput( bool &bAbortEvent, bool &bPauseEvent, bool &bQuitEvent ); + + virtual VideoResult_t TerminateFullScreenPlaybackInputHandler(); + + + private: + + void ResetInputHandlerState(); + + bool m_bInputHandlerInitialized; + + bool m_bScanAll; + bool m_bScanEsc; + bool m_bScanReturn; + bool m_bScanSpace; + bool m_bPauseEnabled; + bool m_bAbortEnabled; + bool m_bEscLast; + bool m_bReturnLast; + bool m_bSpaceLast; + bool m_bForceMinPlayTime; + + bool m_bWindowed; + VideoPlaybackFlags_t m_playbackFlags; + float m_forcedMinTime; + + double m_StartTime; + + +}; + + +#endif // VIDEOSERVICES_H |