134 lines
4.8 KiB
C++
134 lines
4.8 KiB
C++
//========= 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 ¶ms) = 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
|