#include <string>
#include <xine.h>
+#include <msp/core/mutex.h>
+#include <msp/strings/lexicalcast.h>
#include <msp/time/timedelta.h>
class XineEngine;
class XineStream
{
public:
+ enum State
+ {
+ STOPPED,
+ PAUSED,
+ PLAYING
+ };
+
+ sigc::signal<void, State> signal_state_changed;
sigc::signal<void, const std::string &> signal_title_changed;
sigc::signal<void, const Msp::Time::TimeDelta &> signal_duration_changed;
sigc::signal<void, const Msp::Time::TimeDelta &> signal_position_changed;
XineEngine &engine;
xine_stream_t *stream;
xine_event_queue_t *queue;
+ Msp::Mutex mutex;
+ State state;
std::string title;
Msp::Time::TimeDelta duration;
Msp::Time::TimeDelta position;
XineStream(XineEngine &, const std::string &);
~XineStream();
+ State get_state() const { return state; }
const Msp::Time::TimeDelta &get_duration() const { return duration; }
const Msp::Time::TimeDelta &get_position() const { return position; }
const std::string &get_title() const { return title; }
void play();
+ void seek(const Msp::Time::TimeDelta &);
+ void pause();
void stop();
+private:
+ void set_state(State);
+public:
void tick();
private:
void check_info();
void handle_event(const xine_event_t &);
};
+void operator<<(Msp::LexicalConverter &, XineStream::State);
+void operator>>(const Msp::LexicalConverter &, XineStream::State &);
+
#endif