You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
174 lines
6.2 KiB
174 lines
6.2 KiB
//========= 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 IQUICKTIME_H |
|
#define IQUICKTIME_H |
|
|
|
#ifdef _WIN32 |
|
#pragma once |
|
#endif |
|
|
|
|
|
#include "appframework/IAppSystem.h" |
|
|
|
//----------------------------------------------------------------------------- |
|
// Forward declarations |
|
//----------------------------------------------------------------------------- |
|
struct BGR888_t; |
|
class IMaterial; |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Handle to a QUICKTIME |
|
//----------------------------------------------------------------------------- |
|
typedef unsigned short QUICKTIMEHandle_t; |
|
enum |
|
{ |
|
QUICKTIMEHANDLE_INVALID = (QUICKTIMEHandle_t)~0 |
|
}; |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Handle to an QUICKTIME material |
|
//----------------------------------------------------------------------------- |
|
typedef unsigned short QUICKTIMEMaterial_t; |
|
enum |
|
{ |
|
QUICKTIMEMATERIAL_INVALID = (QUICKTIMEMaterial_t)~0 |
|
}; |
|
|
|
typedef unsigned int MovieHandle_t; |
|
const MovieHandle_t cInvalidMovieHandle = (MovieHandle_t) ~0; |
|
|
|
enum eVideoSystemStatus |
|
{ |
|
cVideoSystem_OK = 0, |
|
cVideoSystem_NotInstalled, |
|
cVideoSystem_NotCurrentVersion, |
|
cVideoSystem_InitializationError, |
|
|
|
cVideoSystem_ForceInt32 = 0x7FFFFFFF // Make sure eNum is (at least) an int32 |
|
}; |
|
|
|
|
|
enum eVideoSystemFeatures |
|
{ |
|
cVideoSystem_NoFeatures = 0x00000000, |
|
cVideoSystem_PlayMoviesFromFile = 0x00000001, |
|
cVideoSystem_RenderVideoFrameToMaterial = 0x00000002, |
|
cVideoSystem_EncodeVideoToFile = 0x00000010, |
|
cVideoSystem_EncodeAudioToFile = 0x00000020, |
|
|
|
cVideoSystem_ForceInt32a = 0x7FFFFFFF |
|
}; |
|
|
|
DEFINE_ENUM_BITWISE_OPERATORS( eVideoSystemFeatures ); |
|
|
|
enum eVideoEncodeQuality |
|
{ |
|
cVEQuality_Min = 0, |
|
cVEQuality_Low = 25, |
|
cVEQuality_Normal = 50, |
|
cVEQuality_High = 75, |
|
cVEQuality_Max = 100 |
|
}; |
|
|
|
// ----------------------------------------------------------------------- |
|
// eVideoFrameFormat_t - bit format for quicktime video frames |
|
// ----------------------------------------------------------------------- |
|
enum eVideoFrameFormat_t |
|
{ |
|
cVFF_Undefined = 0, |
|
cVFF_R8G8B8A8_32Bit, |
|
cVFF_R8G8B8_24Bit, |
|
|
|
cVFF_Count, // Auto list counter |
|
cVFF_ForceInt32 = 0x7FFFFFFF // Make sure eNum is (at least) an int32 |
|
}; |
|
|
|
// ----------------------------------------------------------------------- |
|
// eAudioSourceFormat_t - Audio encoding source options |
|
// ----------------------------------------------------------------------- |
|
enum eAudioSourceFormat_t |
|
{ |
|
cASF_Undefined = 0, |
|
cASF_None, |
|
cASF_16BitPCMStereo, |
|
|
|
cASF_Count, // Auto list counter |
|
cASF_ForceInt32 = 0x7FFFFFFF // Make sure eNum is (at least) an int32 |
|
}; |
|
|
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// IQuickTimeMovieMaker interface |
|
//----------------------------------------------------------------------------- |
|
class IQuickTimeMovieMaker : public IBaseInterface |
|
{ |
|
public: |
|
virtual bool CreateNewMovieFile( MovieHandle_t &theMovie, const char *pFilename, int nWidth, int nHeight, int nFps, eVideoEncodeQuality quality, eAudioSourceFormat_t srcAudioFormat = cASF_None, int audioSampleRate = 0 ) = 0; |
|
virtual bool AppendVideoFrame( MovieHandle_t theMovie, unsigned char *pFrame ) = 0; |
|
virtual bool AppendAudioSamples( MovieHandle_t theMovie, void *sampleBuffer, size_t sampleSize ) = 0; |
|
virtual bool FinishMovie( MovieHandle_t theMovie, bool success = true ) = 0; |
|
}; |
|
|
|
//----------------------------------------------------------------------------- |
|
// Main QUICKTIME interface |
|
//----------------------------------------------------------------------------- |
|
#define QUICKTIME_INTERFACE_VERSION "IQuickTime002" |
|
|
|
class IQuickTime : public IAppSystem |
|
{ |
|
public: |
|
virtual bool IsVideoSystemAvailable() = 0; |
|
virtual eVideoSystemStatus GetVideoSystemStatus() = 0; |
|
virtual eVideoSystemFeatures GetVideoSystemFeatures() = 0; |
|
|
|
// Create/destroy a QUICKTIME material (a materialsystem IMaterial) |
|
virtual QUICKTIMEMaterial_t CreateMaterial( const char *pMaterialName, const char *pFileName, const char *pPathID ) = 0; |
|
virtual void DestroyMaterial( QUICKTIMEMaterial_t hMaterial ) = 0; |
|
|
|
// Create/destroy a quicktime movie maker, which will encode audio/video |
|
virtual IQuickTimeMovieMaker *CreateMovieMaker() = 0; |
|
virtual void DestroyMovieMaker( IQuickTimeMovieMaker *&pMovieMaker ) = 0; |
|
|
|
// Update the frame (if necessary) |
|
virtual bool Update( QUICKTIMEMaterial_t hMaterial ) = 0; |
|
|
|
// Gets the IMaterial associated with an BINK material |
|
virtual IMaterial* GetMaterial( QUICKTIMEMaterial_t hMaterial ) = 0; |
|
|
|
// Returns the max texture coordinate of the BINK |
|
virtual void GetTexCoordRange( QUICKTIMEMaterial_t hMaterial, float *pMaxU, float *pMaxV ) = 0; |
|
|
|
// Returns the frame size of the QUICKTIME Image Frame (stored in a subrect of the material itself) |
|
virtual void GetFrameSize( QUICKTIMEMaterial_t hMaterial, int *pWidth, int *pHeight ) = 0; |
|
|
|
// Returns the frame rate of the QUICKTIME |
|
virtual int GetFrameRate( QUICKTIMEMaterial_t hMaterial ) = 0; |
|
|
|
// Sets the frame for an BINK material (use instead of SetTime) |
|
virtual void SetFrame( QUICKTIMEMaterial_t hMaterial, float flFrame ) = 0; |
|
|
|
// Returns the total frame count of the BINK |
|
virtual int GetFrameCount( QUICKTIMEMaterial_t hMaterial ) = 0; |
|
|
|
virtual bool SetSoundDevice( void *pDevice ) = 0; |
|
|
|
// Plays a given MOV file until it completes or the user presses ESC, SPACE, or ENTER |
|
virtual void PlayQuicktimeVideo( const char *filename, void *mainWindow, int windowWidth, int windowHeight, int desktopWidth, int desktopHeight, bool windowed, float forcedMinTime ) = 0; |
|
|
|
// Estimates the size of a recorded movie |
|
virtual bool EstimateMovieSize( unsigned long &EstSize, int nWidth, int nHeight, int nFps, float duration, eVideoEncodeQuality quality, eAudioSourceFormat_t srcAudioFormat = cASF_None, int audioSampleRate = 0 ) = 0; |
|
|
|
}; |
|
|
|
|
|
#endif // IQUICKTIME_H
|
|
|