]> git.tdb.fi Git - xinema.git/blob - source/xinestream.h
Implement basic playback controls
[xinema.git] / source / xinestream.h
1 #ifndef XINESTREAM_H_
2 #define XINESTREAM_H_
3
4 #include <string>
5 #include <xine.h>
6 #include <msp/strings/lexicalcast.h>
7 #include <msp/time/timedelta.h>
8
9 class XineEngine;
10
11 class XineStream
12 {
13 public:
14         enum State
15         {
16                 STOPPED,
17                 PAUSED,
18                 PLAYING
19         };
20
21         sigc::signal<void, State> signal_state_changed;
22         sigc::signal<void, const std::string &> signal_title_changed;
23         sigc::signal<void, const Msp::Time::TimeDelta &> signal_duration_changed;
24         sigc::signal<void, const Msp::Time::TimeDelta &> signal_position_changed;
25
26 private:
27         XineEngine &engine;
28         xine_stream_t *stream;
29         xine_event_queue_t *queue;
30         State state;
31         std::string title;
32         Msp::Time::TimeDelta duration;
33         Msp::Time::TimeDelta position;
34
35 public:
36         XineStream(XineEngine &, const std::string &);
37         ~XineStream();
38
39         State get_state() const { return state; }
40         const Msp::Time::TimeDelta &get_duration() const { return duration; }
41         const Msp::Time::TimeDelta &get_position() const { return position; }
42         const std::string &get_title() const { return title; }
43
44         void play();
45         void seek(const Msp::Time::TimeDelta &);
46         void pause();
47         void stop();
48 private:
49         void set_state(State);
50
51 public:
52         void tick();
53 private:
54         void check_info();
55         void handle_event(const xine_event_t &);
56 };
57
58 void operator<<(Msp::LexicalConverter &, XineStream::State);
59 void operator>>(const Msp::LexicalConverter &, XineStream::State &);
60
61 #endif