summaryrefslogtreecommitdiff
path: root/video/videoservices.h
diff options
context:
space:
mode:
authorFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
committerFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
commit3bf9df6b2785fa6d951086978a3e66f49427166a (patch)
tree2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /video/videoservices.h
downloadarchived-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.h198
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