diff options
Diffstat (limited to 'public/avi')
| -rw-r--r-- | public/avi/iavi.h | 134 | ||||
| -rw-r--r-- | public/avi/ibik.h | 132 | ||||
| -rw-r--r-- | public/avi/iquicktime.h | 174 |
3 files changed, 440 insertions, 0 deletions
diff --git a/public/avi/iavi.h b/public/avi/iavi.h new file mode 100644 index 0000000..1143310 --- /dev/null +++ b/public/avi/iavi.h @@ -0,0 +1,134 @@ +//========= 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 IAVI_H +#define IAVI_H + +#ifdef _WIN32 +#pragma once +#endif + +#include "appframework/IAppSystem.h" + +//----------------------------------------------------------------------------- +// Forward declarations +//----------------------------------------------------------------------------- +struct BGR888_t; +class IMaterial; + + +//----------------------------------------------------------------------------- +// Parameters for creating a new AVI +//----------------------------------------------------------------------------- +struct AVIParams_t +{ + AVIParams_t() : + m_nFrameRate( 0 ), m_nFrameScale( 1 ), m_nWidth( 0 ), m_nHeight( 0 ), + m_nSampleRate( 0 ), m_nSampleBits( 0 ), m_nNumChannels( 0 ), m_bGetCodecFromUser( true ) + { + m_pFileName[ 0 ] = 0; + } + + char m_pFileName[ 256 ]; + char m_pPathID[ 256 ]; + + // fps = m_nFrameRate / m_nFrameScale + // for integer framerates, set framerate to the fps, and framescale to 1 + // for ntsc-style framerates like 29.97 (or 23.976 or 59.94), + // set framerate to 30,000 (or 24,000 or 60,000) and framescale to 1001 + // yes, framescale is an odd naming choice, but it matching MS's AVI api + int m_nFrameRate; + int m_nFrameScale; + + int m_nWidth; + int m_nHeight; + + // Sound/.wav info + int m_nSampleRate; + int m_nSampleBits; + int m_nNumChannels; + + // The user will be asked to select a compressor if true, otherwise the + // previous or default will be used. + bool m_bGetCodecFromUser; +}; + + +//----------------------------------------------------------------------------- +// Handle to an AVI +//----------------------------------------------------------------------------- +typedef unsigned short AVIHandle_t; +enum +{ + AVIHANDLE_INVALID = (AVIHandle_t)~0 +}; + + +//----------------------------------------------------------------------------- +// Handle to an AVI material +//----------------------------------------------------------------------------- +typedef unsigned short AVIMaterial_t; +enum +{ + AVIMATERIAL_INVALID = (AVIMaterial_t)~0 +}; + + +//----------------------------------------------------------------------------- +// Main AVI interface +//----------------------------------------------------------------------------- +#define AVI_INTERFACE_VERSION "VAvi001" + +class IAvi : public IAppSystem +{ +public: + // Necessary to call this before any other AVI interface methods + virtual void SetMainWindow( void* hWnd ) = 0; + + // Start/stop recording an AVI + virtual AVIHandle_t StartAVI( const AVIParams_t& params ) = 0; + virtual void FinishAVI( AVIHandle_t handle ) = 0; + + // Add frames to an AVI + virtual void AppendMovieSound( AVIHandle_t h, short *buf, size_t bufsize ) = 0; + virtual void AppendMovieFrame( AVIHandle_t h, const BGR888_t *pRGBData ) = 0; + + // Create/destroy an AVI material (a materialsystem IMaterial) + virtual AVIMaterial_t CreateAVIMaterial( const char *pMaterialName, const char *pFileName, const char *pPathID ) = 0; + virtual void DestroyAVIMaterial( AVIMaterial_t hMaterial ) = 0; + + // Sets the time for an AVI material + virtual void SetTime( AVIMaterial_t hMaterial, float flTime ) = 0; + + // Gets the IMaterial associated with an AVI material + virtual IMaterial* GetMaterial( AVIMaterial_t hMaterial ) = 0; + + // Returns the max texture coordinate of the AVI + virtual void GetTexCoordRange( AVIMaterial_t hMaterial, float *pMaxU, float *pMaxV ) = 0; + + // Returns the frame size of the AVI (stored in a subrect of the material itself) + virtual void GetFrameSize( AVIMaterial_t hMaterial, int *pWidth, int *pHeight ) = 0; + + // Returns the frame rate of the AVI + virtual int GetFrameRate( AVIMaterial_t hMaterial ) = 0; + + // Returns the total frame count of the AVI + virtual int GetFrameCount( AVIMaterial_t hMaterial ) = 0; + + // Sets the frame for an AVI material (use instead of SetTime) + virtual void SetFrame( AVIMaterial_t hMaterial, float flFrame ) = 0; + + // Plays a given AVI/WMV file until it completes or the user presses ESC, SPACE, or ENTER + virtual void PlayWindowsMediaVideo( const char *filename, void *mainWindow, int width, int height, float forcedMinTime ) = 0; + +}; + + + +#endif // IAVI_H diff --git a/public/avi/ibik.h b/public/avi/ibik.h new file mode 100644 index 0000000..36e86f6 --- /dev/null +++ b/public/avi/ibik.h @@ -0,0 +1,132 @@ +//========= 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 IBIK_H +#define IBIK_H + +#ifdef _WIN32 +#pragma once +#endif + +#include "appframework/IAppSystem.h" + +//----------------------------------------------------------------------------- +// Forward declarations +//----------------------------------------------------------------------------- +struct BGR888_t; +class IMaterial; + +//----------------------------------------------------------------------------- +// Parameters for creating a new BINK +//----------------------------------------------------------------------------- +struct BIKParams_t +{ + BIKParams_t() : + m_nFrameRate( 0 ), m_nFrameScale( 1 ), m_nWidth( 0 ), m_nHeight( 0 ), + m_nSampleRate( 0 ), m_nSampleBits( 0 ), m_nNumChannels( 0 ) + { + m_pFileName[ 0 ] = 0; + } + + char m_pFileName[ 256 ]; + char m_pPathID[ 256 ]; + + // fps = m_nFrameRate / m_nFrameScale + // for integer framerates, set framerate to the fps, and framescale to 1 + // for ntsc-style framerates like 29.97 (or 23.976 or 59.94), + // set framerate to 30,000 (or 24,000 or 60,000) and framescale to 1001 + // yes, framescale is an odd naming choice, but it matching MS's AVI api + int m_nFrameRate; + int m_nFrameScale; + + int m_nWidth; + int m_nHeight; + + // Sound/.wav info + int m_nSampleRate; + int m_nSampleBits; + int m_nNumChannels; +}; + +//----------------------------------------------------------------------------- +// Handle to an BINK +//----------------------------------------------------------------------------- +typedef unsigned short BIKHandle_t; +enum +{ + BIKHANDLE_INVALID = (BIKHandle_t)~0 +}; + + +//----------------------------------------------------------------------------- +// Handle to an BINK material +//----------------------------------------------------------------------------- +typedef unsigned short BIKMaterial_t; +enum +{ + BIKMATERIAL_INVALID = (BIKMaterial_t)~0 +}; + + +//----------------------------------------------------------------------------- +// Main AVI interface +//----------------------------------------------------------------------------- +#define BIK_INTERFACE_VERSION "VBik001" + +class IBik : public IAppSystem +{ +public: + // Create/destroy a BINK material (a materialsystem IMaterial) + virtual BIKMaterial_t CreateMaterial( const char *pMaterialName, const char *pFileName, const char *pPathID ) = 0; + virtual void DestroyMaterial( BIKMaterial_t hMaterial ) = 0; + + // Update the frame (if necessary) + virtual bool Update( BIKMaterial_t hMaterial ) = 0; + + // Gets the IMaterial associated with an BINK material + virtual IMaterial* GetMaterial( BIKMaterial_t hMaterial ) = 0; + + // Returns the max texture coordinate of the BINK + virtual void GetTexCoordRange( BIKMaterial_t hMaterial, float *pMaxU, float *pMaxV ) = 0; + + // Returns the frame size of the BINK (stored in a subrect of the material itself) + virtual void GetFrameSize( BIKMaterial_t hMaterial, int *pWidth, int *pHeight ) = 0; + + // Returns the frame rate of the BINK + virtual int GetFrameRate( BIKMaterial_t hMaterial ) = 0; + + // Returns the total frame count of the BINK + virtual int GetFrameCount( BIKMaterial_t hMaterial ) = 0; + + // Sets the frame for an BINK material (use instead of SetTime) + virtual void SetFrame( BIKMaterial_t hMaterial, float flFrame ) = 0; + +#ifdef WIN32 +#if !defined( _X360 ) + // Sets the direct sound device that Bink will decode to + virtual bool SetDirectSoundDevice( void *pDevice ) = 0; +#else + //needs to be called after xaudio is initialized + virtual bool HookXAudio( void ) = 0; +#endif +#elif defined( LINUX ) + // Sets the SDL device that Bink will decode to + virtual bool SetSDLDevice( int frequency, uint16 format, int nchannels ) = 0; + + // Called to mix in Bink audio. Returns true if audio was mixed in, false otherwise. + virtual bool SDLMixerAudioCallback( void *stream, int len ) = 0; +#endif + + // Plays a given Bink file until it completes or the user presses ESC, SPACE, or ENTER + virtual void PlayBinkVideo( const char *filename, void *mainWindow, int width, int height, float forcedMinTime ) = 0; +}; + + + +#endif // IBIK_H diff --git a/public/avi/iquicktime.h b/public/avi/iquicktime.h new file mode 100644 index 0000000..83867e7 --- /dev/null +++ b/public/avi/iquicktime.h @@ -0,0 +1,174 @@ +//========= 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 |