1
0
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:
mateuszb
2009-06-24 12:14:48 +00:00
parent f0dea8d708
commit 20676e8f95
3 changed files with 203 additions and 200 deletions

View File

@@ -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);

View File

@@ -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();

View File

@@ -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__