#define XINESTREAM_H_
#include <string>
+#include <vector>
#include <xine.h>
#include <msp/core/mutex.h>
#include <msp/strings/lexicalcast.h>
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;
+ sigc::signal<void> signal_channels_changed;
+ sigc::signal<void> signal_finished;
private:
XineEngine &engine;
std::string title;
Msp::Time::TimeDelta duration;
Msp::Time::TimeDelta position;
+ std::vector<std::string> audio_channels;
+ std::vector<std::string> spu_channels;
+ bool channels_changed;
public:
XineStream(XineEngine &, const std::string &);
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; }
+ const std::vector<std::string> &get_audio_channels() const { return audio_channels; }
+ const std::vector<std::string> &get_spu_channels() const { return spu_channels; }
+ void set_audio_channel(unsigned);
+ void set_audio_off();
+ void set_spu_channel(unsigned);
+ void set_spu_off();
void play();
void seek(const Msp::Time::TimeDelta &);
void tick();
private:
void update_info();
+ void update_channels();
void handle_event(const xine_event_t &);
};