anaglym/AV.h
Josh Holtrop d4d44dea86 added AV::Sound::pause(), added Lua interface for sounds (play/pause/stop/loop/loopForever)
git-svn-id: svn://anubis/anaglym/trunk@290 99a6e188-d820-4881-8870-2d33a10e2619
2010-06-24 02:46:28 +00:00

89 lines
2.4 KiB
C++

#ifndef VIDEO_H
#define VIDEO_H
#include <SDL.h>
#include <SDL_sound.h>
#include <set>
#include "FileLoader/FileLoader.h"
#include "refptr/refptr.h"
class AV
{
public:
class Sound
{
public:
Sound(AV & av);
~Sound();
bool load(FileLoader & fileLoader,
const FileLoader::Path & path);
void play();
void pause();
void stop();
void loop(int times);
void rewind();
int decode(Uint8 * stream, int len);
protected:
AV & m_av;
SDL_RWops * m_rwops;
Sound_Sample * m_ss;
FileLoader::Buffer m_buff;
int m_loop_count;
int m_buff_bytes_left;
};
AV();
~AV();
void start(int width = 0, int height = 0,
bool fullscreen = true, bool grab_input = true,
int samples = 4);
void stop();
int getDefaultWidth() { return m_defaultWidth; }
int getDefaultHeight() { return m_defaultHeight; }
void toggleFullScreen() { SDL_WM_ToggleFullScreen(m_surface); }
int getWidth() { return m_width; }
int getHeight() { return m_height; }
SDL_Surface * getSurface() { return m_surface; }
void setCursorVisible(bool visible)
{
SDL_ShowCursor(visible ? SDL_ENABLE : SDL_DISABLE);
}
bool getCursorVisible()
{
return SDL_ShowCursor(SDL_QUERY) == SDL_ENABLE;
}
void setInputGrabbed(bool grabbed)
{
SDL_WM_GrabInput(grabbed ? SDL_GRAB_ON : SDL_GRAB_OFF);
}
bool getInputGrabbed()
{
return SDL_WM_GrabInput(SDL_GRAB_QUERY) == SDL_GRAB_ON;
}
refptr<Sound> createSound();
void playSound(Sound * s);
void stopSound(Sound * s);
friend void AV_sound_callback(void * userdata, Uint8 * stream, int len);
protected:
void playCallback(Uint8 * stream, int len);
int m_defaultWidth;
int m_defaultHeight;
int m_width;
int m_height;
SDL_Surface * m_surface;
bool m_fullscreen;
#if 0
std::set< refptr<Sound> > m_sounds;
#endif
std::set< Sound * > m_active_sounds;
SDL_mutex * m_active_sounds_mutex;
};
#endif