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);
16 engine.add_stream(*this);
19 XineStream::~XineStream()
21 engine.remove_stream(*this);
24 xine_event_dispose_queue(queue);
28 string XineStream::get_title() const
30 const char *title = xine_get_meta_info(stream, XINE_META_INFO_TITLE);
31 return (title ? title : string());
34 void XineStream::play()
36 xine_play(stream, 0, 0);
39 void XineStream::stop()
44 void XineStream::tick()
46 while(xine_event_t *event = xine_event_get(queue))
49 xine_event_free(event);
52 int dur_msec, pos_msec;
53 xine_get_pos_length(stream, 0, &pos_msec, &dur_msec);
54 Time::TimeDelta dur = dur_msec*Time::msec;
55 Time::TimeDelta pos = pos_msec*Time::msec;
59 signal_duration_changed.emit(duration);
64 signal_position_changed.emit(position);
68 void XineStream::handle_event(const xine_event_t &event)
72 case XINE_EVENT_PROGRESS:
74 xine_progress_data_t *data = reinterpret_cast<xine_progress_data_t *>(event.data);
75 IO::print("%s [%d%%]\n", data->description, data->percent);