1 #include <msp/io/print.h>
2 #include "xineengine.h"
3 #include "xinestream.h"
8 XineStream::XineStream(XineEngine &e, const string &mrl):
11 stream = xine_stream_new(engine.get_engine(), engine.get_audio_driver(), engine.get_video_driver());
12 xine_open(stream, mrl.c_str());
14 queue = xine_event_new_queue(stream);
18 engine.add_stream(*this);
21 XineStream::~XineStream()
23 engine.remove_stream(*this);
26 xine_event_dispose_queue(queue);
30 void XineStream::play()
32 xine_play(stream, 0, 0);
35 void XineStream::stop()
40 void XineStream::tick()
42 while(xine_event_t *event = xine_event_get(queue))
45 xine_event_free(event);
51 void XineStream::check_info()
53 const char *xt = xine_get_meta_info(stream, XINE_META_INFO_TITLE);
59 signal_title_changed.emit(title);
62 else if(!title.empty())
65 signal_title_changed.emit(title);
68 int dur_msec, pos_msec;
69 xine_get_pos_length(stream, 0, &pos_msec, &dur_msec);
70 Time::TimeDelta dur = dur_msec*Time::msec;
71 Time::TimeDelta pos = pos_msec*Time::msec;
75 signal_duration_changed.emit(duration);
80 signal_position_changed.emit(position);
84 void XineStream::handle_event(const xine_event_t &event)
88 case XINE_EVENT_PROGRESS:
90 xine_progress_data_t *data = reinterpret_cast<xine_progress_data_t *>(event.data);
91 IO::print("%s [%d%%]\n", data->description, data->percent);