source-engine/video/videosubsystem.h

98 lines
3.6 KiB
C
Raw 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 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