source-engine/video/videoservices.h

199 lines
7.5 KiB
C
Raw Permalink Normal View History

2020-04-22 16:56:21 +00:00
//========= 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