]> git.tdb.fi Git - xinema.git/blob - source/xinestream.cpp
Refactor code to have the engine tick any streams
[xinema.git] / source / xinestream.cpp
1 #include <msp/io/print.h>
2 #include "xineengine.h"
3 #include "xinestream.h"
4
5 using namespace std;
6 using namespace Msp;
7
8 XineStream::XineStream(XineEngine &e, const string &mrl):
9         engine(e)
10 {
11         stream = xine_stream_new(engine.get_engine(), engine.get_audio_driver(), engine.get_video_driver());
12         xine_open(stream, mrl.c_str());
13
14         queue = xine_event_new_queue(stream);
15
16         engine.add_stream(*this);
17 }
18
19 XineStream::~XineStream()
20 {
21         engine.remove_stream(*this);
22
23         xine_close(stream);
24         xine_event_dispose_queue(queue);
25         xine_dispose(stream);
26 }
27
28 void XineStream::play()
29 {
30         xine_play(stream, 0, 0);
31 }
32
33 void XineStream::stop()
34 {
35         xine_stop(stream);
36 }
37
38 void XineStream::tick()
39 {
40         while(xine_event_t *event = xine_event_get(queue))
41         {
42                 handle_event(*event);
43                 xine_event_free(event);
44         }
45 }
46
47 void XineStream::handle_event(const xine_event_t &event)
48 {
49         switch(event.type)
50         {
51         case XINE_EVENT_PROGRESS:
52                 {
53                         xine_progress_data_t *data = reinterpret_cast<xine_progress_data_t *>(event.data);
54                         IO::print("%s [%d%%]\n", data->description, data->percent);
55                 }
56                 break;
57         }
58 }