134 lines
4.4 KiB
C
134 lines
4.4 KiB
C
|
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||
|
//
|
||
|
// Purpose:
|
||
|
//
|
||
|
//=============================================================================
|
||
|
|
||
|
|
||
|
#ifndef WEBM_VIDEO_H
|
||
|
#define WEBM_VIDEO_H
|
||
|
|
||
|
#ifdef _WIN32
|
||
|
#pragma once
|
||
|
#endif
|
||
|
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Forward declarations
|
||
|
//-----------------------------------------------------------------------------
|
||
|
class IFileSystem;
|
||
|
class IMaterialSystem;
|
||
|
class CQuickTimeMaterial;
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Global interfaces - you already did the needed includes, right?
|
||
|
//-----------------------------------------------------------------------------
|
||
|
extern IFileSystem *g_pFileSystem;
|
||
|
extern IMaterialSystem *materials;
|
||
|
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// WebM Header files, anything that seems strange here is to make it so their headers
|
||
|
// can mesh with ours
|
||
|
//-----------------------------------------------------------------------------
|
||
|
#define VPX_CODEC_DISABLE_COMPAT 1
|
||
|
#include "vpx/vpx_codec.h"
|
||
|
#include "vpx/vpx_encoder.h"
|
||
|
#include "vpx/vpx_image.h"
|
||
|
#include "vpx/vp8cx.h"
|
||
|
#ifdef UNUSED
|
||
|
#undef UNUSED
|
||
|
#endif
|
||
|
|
||
|
// libwebm, support for reading/writing webm files
|
||
|
#include "mkvreader.hpp"
|
||
|
#include "mkvparser.hpp"
|
||
|
#include "mkvmuxer.hpp"
|
||
|
#include "mkvwriter.hpp"
|
||
|
#include "mkvmuxerutil.hpp"
|
||
|
|
||
|
#include "vorbis/vorbisenc.h"
|
||
|
#include "vorbis/codec.h"
|
||
|
|
||
|
#include "video/ivideoservices.h"
|
||
|
#include "videosubsystem.h"
|
||
|
|
||
|
#include "utlvector.h"
|
||
|
#include "tier1/KeyValues.h"
|
||
|
#include "tier0/platform.h"
|
||
|
|
||
|
// -----------------------------------------------------------------------------
|
||
|
// CQuickTimeVideoSubSystem - Implementation of IVideoSubSystem
|
||
|
// -----------------------------------------------------------------------------
|
||
|
class CWebMVideoSubSystem : public CTier2AppSystem< IVideoSubSystem >
|
||
|
{
|
||
|
typedef CTier2AppSystem< IVideoSubSystem > BaseClass;
|
||
|
|
||
|
public:
|
||
|
CWebMVideoSubSystem();
|
||
|
~CWebMVideoSubSystem();
|
||
|
|
||
|
// 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 IVideoSubSystem
|
||
|
|
||
|
// SubSystem Identification functions
|
||
|
virtual VideoSystem_t GetSystemID();
|
||
|
virtual VideoSystemStatus_t GetSystemStatus();
|
||
|
virtual VideoSystemFeature_t GetSupportedFeatures();
|
||
|
virtual const char *GetVideoSystemName();
|
||
|
|
||
|
// Setup & Shutdown Services
|
||
|
virtual bool InitializeVideoSystem( IVideoCommonServices *pCommonServices );
|
||
|
virtual bool ShutdownVideoSystem();
|
||
|
|
||
|
virtual VideoResult_t VideoSoundDeviceCMD( VideoSoundDeviceOperation_t operation, void *pDevice = nullptr, void *pData = nullptr );
|
||
|
|
||
|
// get list of file extensions and features we support
|
||
|
virtual int GetSupportedFileExtensionCount();
|
||
|
virtual const char *GetSupportedFileExtension( int num );
|
||
|
virtual VideoSystemFeature_t GetSupportedFileExtensionFeatures( int num );
|
||
|
|
||
|
// 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 );
|
||
|
|
||
|
// Create/destroy a video material
|
||
|
virtual IVideoMaterial *CreateVideoMaterial( const char *pMaterialName, const char *pVideoFileName, VideoPlaybackFlags_t flags );
|
||
|
virtual VideoResult_t DestroyVideoMaterial( IVideoMaterial *pVideoMaterial );
|
||
|
|
||
|
// Create/destroy a video encoder
|
||
|
virtual IVideoRecorder *CreateVideoRecorder();
|
||
|
virtual VideoResult_t DestroyVideoRecorder( IVideoRecorder *pRecorder );
|
||
|
|
||
|
virtual VideoResult_t CheckCodecAvailability( VideoEncodeCodec_t codec );
|
||
|
|
||
|
virtual VideoResult_t GetLastResult();
|
||
|
|
||
|
private:
|
||
|
|
||
|
bool SetupWebM();
|
||
|
bool ShutdownWebM();
|
||
|
|
||
|
VideoResult_t SetResult( VideoResult_t status );
|
||
|
|
||
|
bool m_bWebMInitialized;
|
||
|
VideoResult_t m_LastResult;
|
||
|
|
||
|
VideoSystemStatus_t m_CurrentStatus;
|
||
|
VideoSystemFeature_t m_AvailableFeatures;
|
||
|
|
||
|
IVideoCommonServices *m_pCommonServices;
|
||
|
|
||
|
CUtlVector< IVideoMaterial* > m_MaterialList;
|
||
|
CUtlVector< IVideoRecorder* > m_RecorderList;
|
||
|
|
||
|
static const VideoSystemFeature_t DEFAULT_FEATURE_SET;
|
||
|
};
|
||
|
|
||
|
#endif // WEBM_VIDEO_H
|