133 lines
3.7 KiB
C
133 lines
3.7 KiB
C
|
// Copyright (C) 2004 Id Software, Inc.
|
||
|
//
|
||
|
#ifndef __CINEMATIC_H__
|
||
|
#define __CINEMATIC_H__
|
||
|
|
||
|
// RAVEN BEGIN
|
||
|
//nrausch: I made some semi-heavy changes to this entire file
|
||
|
// - changed to idCinematic to use a private implementation which
|
||
|
// is determined & allocated when InitFromFile is called. A different
|
||
|
// PIMPL is used depending on if the video file is a roq or a wmv.
|
||
|
// This replaces the functionality that was in a few versions ago under the
|
||
|
// "StandaloneCinematic" name.
|
||
|
// RAVEN END
|
||
|
|
||
|
/*
|
||
|
===============================================================================
|
||
|
|
||
|
RoQ cinematic
|
||
|
|
||
|
Multiple idCinematics can run simultaniously.
|
||
|
A single idCinematic can be reused for multiple files if desired.
|
||
|
|
||
|
===============================================================================
|
||
|
*/
|
||
|
|
||
|
// cinematic states
|
||
|
typedef enum {
|
||
|
FMV_IDLE,
|
||
|
FMV_PLAY, // play
|
||
|
FMV_EOF, // all other conditions, i.e. stop/EOF/abort
|
||
|
FMV_ID_BLT,
|
||
|
FMV_ID_IDLE,
|
||
|
FMV_LOOPED,
|
||
|
FMV_ID_WAIT
|
||
|
} cinStatus_t;
|
||
|
|
||
|
// a cinematic stream generates an image buffer, which the caller will upload to a texture
|
||
|
typedef struct {
|
||
|
int imageWidth, imageHeight; // will be a power of 2
|
||
|
const byte * image; // RGBA format, alpha will be 255
|
||
|
int status;
|
||
|
} cinData_t;
|
||
|
|
||
|
class idCinematic {
|
||
|
idCinematic* PIMPL;
|
||
|
|
||
|
// Store off the current mode - wmv or roq
|
||
|
// If the cinematic is in the same mode if InitFromFile
|
||
|
// is called again on it, this will prevent reallocation
|
||
|
// of the PIMPL
|
||
|
int mode;
|
||
|
public:
|
||
|
// initialize cinematic play back data
|
||
|
static void InitCinematic( void );
|
||
|
|
||
|
// shutdown cinematic play back data
|
||
|
static void ShutdownCinematic( void );
|
||
|
|
||
|
// allocates and returns a private subclass that implements the methods
|
||
|
// This should be used instead of new
|
||
|
static idCinematic *Alloc();
|
||
|
|
||
|
idCinematic();
|
||
|
|
||
|
// frees all allocated memory
|
||
|
virtual ~idCinematic();
|
||
|
|
||
|
enum {
|
||
|
SUPPORT_DRAW = 1,
|
||
|
SUPPORT_IMAGEFORTIME = 2,
|
||
|
SUPPORT_DEFAULT = SUPPORT_IMAGEFORTIME
|
||
|
};
|
||
|
|
||
|
// returns false if it failed to load
|
||
|
// this interface can take either a wmv or roq file
|
||
|
// wmv will imply movie audio, unless there is no audio encoded in the stream
|
||
|
// right now there is no way to disable this.
|
||
|
virtual bool InitFromFile(const char *qpath, bool looping, int options = SUPPORT_DEFAULT);
|
||
|
|
||
|
// returns the length of the animation in milliseconds
|
||
|
virtual int AnimationLength();
|
||
|
|
||
|
// the pointers in cinData_t will remain valid until the next UpdateForTime() call
|
||
|
// will do nothing if InitFromFile was not called with SUPPORT_IMAGEFORTIME
|
||
|
virtual cinData_t ImageForTime(int milliseconds);
|
||
|
|
||
|
// closes the file and frees all allocated memory
|
||
|
virtual void Close();
|
||
|
|
||
|
// closes the file and frees all allocated memory
|
||
|
virtual void ResetTime(int time);
|
||
|
|
||
|
// draw the current animation frame to screen
|
||
|
// will do nothing if InitFromFile was not called with SUPPORT_DRAW
|
||
|
virtual void Draw();
|
||
|
|
||
|
// Set draw position & size
|
||
|
// will do nothing if InitFromFile was not called with SUPPORT_DRAW
|
||
|
virtual void SetScreenRect(int left, int right, int bottom, int top);
|
||
|
|
||
|
// Get draw position & size
|
||
|
// will do nothing if InitFromFile was not called with SUPPORT_DRAW
|
||
|
virtual void GetScreenRect(int &left, int &right, int &bottom, int &top);
|
||
|
|
||
|
// True if the video is playing
|
||
|
// will do nothing if InitFromFile was not called with SUPPORT_DRAW
|
||
|
virtual bool IsPlaying();
|
||
|
};
|
||
|
|
||
|
/*
|
||
|
===============================================
|
||
|
|
||
|
Sound meter.
|
||
|
|
||
|
===============================================
|
||
|
*/
|
||
|
|
||
|
class idSndWindow : public idCinematic {
|
||
|
public:
|
||
|
|
||
|
idSndWindow() { showWaveform = false; }
|
||
|
~idSndWindow() {}
|
||
|
|
||
|
bool InitFromFile( const char *qpath, bool looping, int options );
|
||
|
cinData_t ImageForTime( int milliseconds );
|
||
|
int AnimationLength();
|
||
|
|
||
|
private:
|
||
|
bool showWaveform;
|
||
|
};
|
||
|
|
||
|
#endif /* !__CINEMATIC_H__ */
|