mirror of
https://github.com/vcmi/vcmi.git
synced 2025-08-13 19:54:17 +02:00
* compilation error fix
This commit is contained in:
@@ -58,6 +58,9 @@ extern TTF_Font * GEOR16;
|
||||
extern std::queue<SDL_Event*> events;
|
||||
extern boost::mutex eventsM;
|
||||
|
||||
#undef min
|
||||
#undef max
|
||||
|
||||
static StackState* getStackState(const CGObjectInstance *obj, int pos, bool town)
|
||||
{
|
||||
const CGHeroInstance *h = dynamic_cast<const CGHeroInstance *>(obj);
|
||||
|
@@ -103,8 +103,8 @@ CBIKHandler::CBIKHandler()
|
||||
//binkGetError = FindAddress("_BinkGetError@0");
|
||||
binkOpen = (BinkOpen)FindAddress("_BinkOpen@8");
|
||||
binkSetSoundSystem = (BinkSetSoundSystem)FindAddress("_BinkSetSoundSystem@8");
|
||||
//getPalette = (BinkGetPalette)FindAddress("_BinkGetPalette@4");
|
||||
binkNextFrame = (BinkNextFrame)FindAddress("_BinkNextFrame@4");
|
||||
//getPalette = (BinkGetPalette)FindAddress("_BinkGetPalette@4");
|
||||
binkNextFrame = (BinkNextFrame)FindAddress("_BinkNextFrame@4");
|
||||
binkDoFrame = (BinkDoFrame)FindAddress("_BinkDoFrame@4");
|
||||
binkCopyToBuffer = (BinkCopyToBuffer)FindAddress("_BinkCopyToBuffer@28");
|
||||
binkWait = (BinkWait)FindAddress("_BinkWait@4");
|
||||
@@ -228,8 +228,8 @@ void CSmackPlayer::close()
|
||||
|
||||
void CSmackPlayer::open( std::string name )
|
||||
{
|
||||
Uint32 flags[2] = {0xff400, 0xfe400};
|
||||
|
||||
Uint32 flags[2] = {0xff400, 0xfe400};
|
||||
|
||||
data = ptrSmackOpen( (void*)name.c_str(), flags[1], -1);
|
||||
if (!data)
|
||||
{
|
||||
@@ -301,32 +301,32 @@ void CSmackPlayer::redraw( int x, int y, SDL_Surface *dst, bool update )
|
||||
SDL_UpdateRect(dst, x, y, w, h);
|
||||
}
|
||||
|
||||
CVideoPlayer::CVideoPlayer()
|
||||
CVideoPlayer::CVideoPlayer()
|
||||
{
|
||||
vidh = new CVidHandler(std::string(DATA_DIR "Data" PATHSEPARATOR "VIDEO.VID"));
|
||||
current = NULL;
|
||||
}
|
||||
|
||||
CVideoPlayer::~CVideoPlayer()
|
||||
{
|
||||
delete vidh;
|
||||
}
|
||||
|
||||
void CVideoPlayer::open(std::string name)
|
||||
{
|
||||
if(boost::algorithm::ends_with(name, ".BIK"))
|
||||
current = &bikPlayer;
|
||||
else
|
||||
current = &smkPlayer;
|
||||
|
||||
fname = name;
|
||||
first = true;
|
||||
|
||||
//extract video from video.vid so we can play it
|
||||
vidh->extract(name, name);
|
||||
current->open(name);
|
||||
}
|
||||
|
||||
current = NULL;
|
||||
}
|
||||
|
||||
CVideoPlayer::~CVideoPlayer()
|
||||
{
|
||||
delete vidh;
|
||||
}
|
||||
|
||||
void CVideoPlayer::open(std::string name)
|
||||
{
|
||||
if(boost::algorithm::ends_with(name, ".BIK"))
|
||||
current = &bikPlayer;
|
||||
else
|
||||
current = &smkPlayer;
|
||||
|
||||
fname = name;
|
||||
first = true;
|
||||
|
||||
//extract video from video.vid so we can play it
|
||||
vidh->extract(name, name);
|
||||
current->open(name);
|
||||
}
|
||||
|
||||
void CVideoPlayer::close()
|
||||
{
|
||||
if(!current)
|
||||
@@ -355,16 +355,16 @@ void CVideoPlayer::show(int x, int y, SDL_Surface *dst, bool update)
|
||||
current->show(x, y, dst, update);
|
||||
}
|
||||
|
||||
bool CVideoPlayer::wait()
|
||||
{
|
||||
return current->wait();
|
||||
}
|
||||
|
||||
int CVideoPlayer::curFrame() const
|
||||
{
|
||||
return current->curFrame();
|
||||
}
|
||||
|
||||
bool CVideoPlayer::wait()
|
||||
{
|
||||
return current->wait();
|
||||
}
|
||||
|
||||
int CVideoPlayer::curFrame() const
|
||||
{
|
||||
return current->curFrame();
|
||||
}
|
||||
|
||||
int CVideoPlayer::frameCount() const
|
||||
{
|
||||
return current->frameCount();
|
||||
|
@@ -1,103 +1,103 @@
|
||||
#ifndef __CVIDEOHANDLER_H__
|
||||
#define __CVIDEOHANDLER_H__
|
||||
#include "../global.h"
|
||||
|
||||
#ifdef _WIN32
|
||||
|
||||
#include <windows.h>
|
||||
|
||||
struct SDL_Surface;
|
||||
|
||||
#pragma pack(push,1)
|
||||
struct BINK_STRUCT
|
||||
{
|
||||
si32 width;
|
||||
si32 height;
|
||||
si32 frameCount;
|
||||
si32 currentFrame;
|
||||
si32 lastFrame;
|
||||
si32 FPSMul;
|
||||
si32 FPSDiv;
|
||||
si32 unknown0;
|
||||
ui8 flags;
|
||||
ui8 unknown1[260];
|
||||
si32 CurPlane; // current plane
|
||||
void *plane0; // posi32er to plane 0
|
||||
void *plane1; // posi32er to plane 1
|
||||
si32 unknown2;
|
||||
si32 unknown3;
|
||||
si32 yWidth; // Y plane width
|
||||
si32 yHeight; // Y plane height
|
||||
si32 uvWidth; // U&V plane width
|
||||
si32 uvHeight; // U&V plane height
|
||||
};
|
||||
#pragma pack(pop)
|
||||
|
||||
typedef BINK_STRUCT* HBINK;
|
||||
|
||||
class DLLHandler
|
||||
{
|
||||
public:
|
||||
std::string name;
|
||||
HINSTANCE dll;
|
||||
void Instantiate(const char *filename);
|
||||
const char *GetLibExtension();
|
||||
void *FindAddress(const char *symbol);
|
||||
|
||||
DLLHandler();
|
||||
virtual ~DLLHandler(); //d-tor
|
||||
};
|
||||
#ifndef __CVIDEOHANDLER_H__
|
||||
#define __CVIDEOHANDLER_H__
|
||||
#include "../global.h"
|
||||
|
||||
typedef void*(__stdcall* BinkSetSoundSystem)(void * soundfun, void*);
|
||||
typedef HBINK(__stdcall* BinkOpen)(HANDLE bikfile, int flags);
|
||||
typedef void(__stdcall* BinkClose)(HBINK);
|
||||
//typedef si32(__stdcall* BinkGetPalette)(HBINK);
|
||||
typedef void(__stdcall* BinkNextFrame)(HBINK);
|
||||
typedef void(__stdcall* BinkDoFrame)(HBINK);
|
||||
typedef ui8(__stdcall* BinkWait)(HBINK);
|
||||
typedef si32(__stdcall* BinkCopyToBuffer)(HBINK, void* buffer, int stride, int height, int x, int y, int mode);
|
||||
#ifdef _WIN32
|
||||
|
||||
#include <windows.h>
|
||||
|
||||
struct SDL_Surface;
|
||||
|
||||
#pragma pack(push,1)
|
||||
struct BINK_STRUCT
|
||||
{
|
||||
si32 width;
|
||||
si32 height;
|
||||
si32 frameCount;
|
||||
si32 currentFrame;
|
||||
si32 lastFrame;
|
||||
si32 FPSMul;
|
||||
si32 FPSDiv;
|
||||
si32 unknown0;
|
||||
ui8 flags;
|
||||
ui8 unknown1[260];
|
||||
si32 CurPlane; // current plane
|
||||
void *plane0; // posi32er to plane 0
|
||||
void *plane1; // posi32er to plane 1
|
||||
si32 unknown2;
|
||||
si32 unknown3;
|
||||
si32 yWidth; // Y plane width
|
||||
si32 yHeight; // Y plane height
|
||||
si32 uvWidth; // U&V plane width
|
||||
si32 uvHeight; // U&V plane height
|
||||
};
|
||||
#pragma pack(pop)
|
||||
|
||||
typedef BINK_STRUCT* HBINK;
|
||||
|
||||
class DLLHandler
|
||||
{
|
||||
public:
|
||||
std::string name;
|
||||
HINSTANCE dll;
|
||||
void Instantiate(const char *filename);
|
||||
const char *GetLibExtension();
|
||||
void *FindAddress(const char *symbol);
|
||||
|
||||
DLLHandler();
|
||||
virtual ~DLLHandler(); //d-tor
|
||||
};
|
||||
|
||||
typedef void*(__stdcall* BinkSetSoundSystem)(void * soundfun, void*);
|
||||
typedef HBINK(__stdcall* BinkOpen)(HANDLE bikfile, int flags);
|
||||
typedef void(__stdcall* BinkClose)(HBINK);
|
||||
//typedef si32(__stdcall* BinkGetPalette)(HBINK);
|
||||
typedef void(__stdcall* BinkNextFrame)(HBINK);
|
||||
typedef void(__stdcall* BinkDoFrame)(HBINK);
|
||||
typedef ui8(__stdcall* BinkWait)(HBINK);
|
||||
typedef si32(__stdcall* BinkCopyToBuffer)(HBINK, void* buffer, int stride, int height, int x, int y, int mode);
|
||||
|
||||
|
||||
class IVideoPlayer
|
||||
{
|
||||
public:
|
||||
virtual void open(std::string name)=0;
|
||||
public:
|
||||
virtual void open(std::string name)=0;
|
||||
virtual void close()=0;
|
||||
virtual void nextFrame()=0;
|
||||
virtual void show(int x, int y, SDL_Surface *dst, bool update = true)=0;
|
||||
virtual void redraw(int x, int y, SDL_Surface *dst, bool update = true)=0; //reblits buffer
|
||||
virtual bool wait()=0;
|
||||
virtual int curFrame() const =0;
|
||||
virtual bool wait()=0;
|
||||
virtual int curFrame() const =0;
|
||||
virtual int frameCount() const =0;
|
||||
};
|
||||
|
||||
class CBIKHandler : public DLLHandler, public IVideoPlayer
|
||||
{
|
||||
public:
|
||||
HANDLE hBinkFile;
|
||||
HBINK hBink;
|
||||
char * buffer;
|
||||
BinkSetSoundSystem binkSetSoundSystem;
|
||||
BinkOpen binkOpen;
|
||||
//BinkGetPalette getPalette;
|
||||
BinkNextFrame binkNextFrame;
|
||||
BinkDoFrame binkDoFrame;
|
||||
BinkCopyToBuffer binkCopyToBuffer;
|
||||
BinkWait binkWait;
|
||||
BinkClose binkClose;
|
||||
|
||||
CBIKHandler();
|
||||
void open(std::string name);
|
||||
|
||||
class CBIKHandler : public DLLHandler, public IVideoPlayer
|
||||
{
|
||||
public:
|
||||
HANDLE hBinkFile;
|
||||
HBINK hBink;
|
||||
char * buffer;
|
||||
BinkSetSoundSystem binkSetSoundSystem;
|
||||
BinkOpen binkOpen;
|
||||
//BinkGetPalette getPalette;
|
||||
BinkNextFrame binkNextFrame;
|
||||
BinkDoFrame binkDoFrame;
|
||||
BinkCopyToBuffer binkCopyToBuffer;
|
||||
BinkWait binkWait;
|
||||
BinkClose binkClose;
|
||||
|
||||
CBIKHandler();
|
||||
void open(std::string name);
|
||||
void close();
|
||||
void nextFrame();
|
||||
void show(int x, int y, SDL_Surface *dst, bool update = true);
|
||||
void redraw(int x, int y, SDL_Surface *dst, bool update = true); //reblits buffer
|
||||
bool wait();
|
||||
int curFrame() const;
|
||||
int frameCount() const;
|
||||
};
|
||||
|
||||
//////////SMK Player ///////////////////////////////////////////////////////
|
||||
bool wait();
|
||||
int curFrame() const;
|
||||
int frameCount() const;
|
||||
};
|
||||
|
||||
//////////SMK Player ///////////////////////////////////////////////////////
|
||||
|
||||
struct SmackStruct
|
||||
{
|
||||
@@ -124,8 +124,8 @@ typedef bool (__stdcall* SmackWait)(SmackStruct*);
|
||||
typedef void (__stdcall* SmackSoundOnOff) (SmackStruct*, bool);
|
||||
|
||||
|
||||
|
||||
class CSmackPlayer: public DLLHandler, public IVideoPlayer
|
||||
|
||||
class CSmackPlayer: public DLLHandler, public IVideoPlayer
|
||||
{
|
||||
public:
|
||||
SmackOpen ptrSmackOpen;
|
||||
@@ -140,89 +140,89 @@ public:
|
||||
SmackStruct* data;
|
||||
|
||||
CSmackPlayer();
|
||||
~CSmackPlayer();
|
||||
void open(std::string name);
|
||||
~CSmackPlayer();
|
||||
void open(std::string name);
|
||||
void close();
|
||||
void nextFrame();
|
||||
void show(int x, int y, SDL_Surface *dst, bool update = true);
|
||||
void redraw(int x, int y, SDL_Surface *dst, bool update = true); //reblits buffer
|
||||
bool wait();
|
||||
int curFrame() const;
|
||||
bool wait();
|
||||
int curFrame() const;
|
||||
int frameCount() const;
|
||||
};
|
||||
|
||||
class CVidHandler;
|
||||
|
||||
class CVideoPlayer : public IVideoPlayer
|
||||
{
|
||||
private:
|
||||
CVidHandler * vidh; //.vid file handling
|
||||
|
||||
CSmackPlayer smkPlayer; //for .SMK
|
||||
CBIKHandler bikPlayer; //for .BIK
|
||||
IVideoPlayer *current; //points to bik or smk player, appropriate to type of currently played video
|
||||
|
||||
std::string fname; //name of current video file (empty if idle)
|
||||
bool first; //are we about to display the first frame (blocks update)
|
||||
public:
|
||||
CVideoPlayer(); //c-tor
|
||||
~CVideoPlayer(); //d-tor
|
||||
|
||||
|
||||
void open(std::string name);
|
||||
|
||||
class CVidHandler;
|
||||
|
||||
class CVideoPlayer : public IVideoPlayer
|
||||
{
|
||||
private:
|
||||
CVidHandler * vidh; //.vid file handling
|
||||
|
||||
CSmackPlayer smkPlayer; //for .SMK
|
||||
CBIKHandler bikPlayer; //for .BIK
|
||||
IVideoPlayer *current; //points to bik or smk player, appropriate to type of currently played video
|
||||
|
||||
std::string fname; //name of current video file (empty if idle)
|
||||
bool first; //are we about to display the first frame (blocks update)
|
||||
public:
|
||||
CVideoPlayer(); //c-tor
|
||||
~CVideoPlayer(); //d-tor
|
||||
|
||||
|
||||
void open(std::string name);
|
||||
void close();
|
||||
void nextFrame(); //move animation to the next frame
|
||||
void show(int x, int y, SDL_Surface *dst, bool update = true); //blit current frame
|
||||
void redraw(int x, int y, SDL_Surface *dst, bool update = true); //reblits buffer
|
||||
void update(int x, int y, SDL_Surface *dst, bool forceRedraw, bool update = true); //moves to next frame if appropriate, and blits it or blits only if redraw paremeter is set true
|
||||
bool wait(); //true if we should wait before displaying next frame (for keeping FPS)
|
||||
int curFrame() const; //current frame number <1, framecount>
|
||||
int frameCount() const;
|
||||
|
||||
bool openAndPlayVideo(std::string name, int x, int y, SDL_Surface *dst, bool stopOnKey = false); //opens video, calls playVideo, closes video; returns playVideo result (if whole video has been played)
|
||||
bool playVideo(int x, int y, SDL_Surface *dst, bool stopOnKey = false); //plays whole opened video; returns: true when whole video has been shown, false when it has been interrupted
|
||||
};
|
||||
|
||||
#else
|
||||
|
||||
#include <SDL_video.h>
|
||||
|
||||
typedef struct AVFormatContext AVFormatContext;
|
||||
typedef struct AVCodecContext AVCodecContext;
|
||||
typedef struct AVCodec AVCodec;
|
||||
typedef struct AVFrame AVFrame;
|
||||
struct SwsContext;
|
||||
class CVidHandler;
|
||||
|
||||
class CVideoPlayer
|
||||
{
|
||||
private:
|
||||
int stream; // stream index in video
|
||||
AVFormatContext *format;
|
||||
AVCodecContext *codecContext; // codec context for stream
|
||||
AVCodec *codec;
|
||||
AVFrame *frame;
|
||||
struct SwsContext *sws;
|
||||
|
||||
SDL_Overlay *overlay;
|
||||
SDL_Rect pos; // overlay position
|
||||
|
||||
CVidHandler *vidh;
|
||||
|
||||
public:
|
||||
CVideoPlayer();
|
||||
~CVideoPlayer();
|
||||
|
||||
bool init();
|
||||
bool open(std::string fname, int x, int y);
|
||||
void close();
|
||||
bool nextFrame(); // display next frame
|
||||
|
||||
const char *data; // video buffer
|
||||
int length; // video size
|
||||
unsigned int offset; // current data offset
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
#endif // __CVIDEOHANDLER_H__
|
||||
bool wait(); //true if we should wait before displaying next frame (for keeping FPS)
|
||||
int curFrame() const; //current frame number <1, framecount>
|
||||
int frameCount() const;
|
||||
|
||||
bool openAndPlayVideo(std::string name, int x, int y, SDL_Surface *dst, bool stopOnKey = false); //opens video, calls playVideo, closes video; returns playVideo result (if whole video has been played)
|
||||
bool playVideo(int x, int y, SDL_Surface *dst, bool stopOnKey = false); //plays whole opened video; returns: true when whole video has been shown, false when it has been interrupted
|
||||
};
|
||||
|
||||
#else
|
||||
|
||||
#include <SDL_video.h>
|
||||
|
||||
typedef struct AVFormatContext AVFormatContext;
|
||||
typedef struct AVCodecContext AVCodecContext;
|
||||
typedef struct AVCodec AVCodec;
|
||||
typedef struct AVFrame AVFrame;
|
||||
struct SwsContext;
|
||||
class CVidHandler;
|
||||
|
||||
class CVideoPlayer
|
||||
{
|
||||
private:
|
||||
int stream; // stream index in video
|
||||
AVFormatContext *format;
|
||||
AVCodecContext *codecContext; // codec context for stream
|
||||
AVCodec *codec;
|
||||
AVFrame *frame;
|
||||
struct SwsContext *sws;
|
||||
|
||||
SDL_Overlay *overlay;
|
||||
SDL_Rect pos; // overlay position
|
||||
|
||||
CVidHandler *vidh;
|
||||
|
||||
public:
|
||||
CVideoPlayer();
|
||||
~CVideoPlayer();
|
||||
|
||||
bool init();
|
||||
bool open(std::string fname, int x, int y);
|
||||
void close();
|
||||
bool nextFrame(); // display next frame
|
||||
|
||||
const char *data; // video buffer
|
||||
int length; // video size
|
||||
unsigned int offset; // current data offset
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
#endif // __CVIDEOHANDLER_H__
|
||||
|
Reference in New Issue
Block a user