--- /dev/null
+#include <msp/io/print.h>
+#include "xineengine.h"
+#include "xinestream.h"
+
+using namespace std;
+using namespace Msp;
+
+XineStream::XineStream(XineEngine &engine, const string &mrl)
+{
+ stream = xine_stream_new(engine.get_engine(), engine.get_audio_driver(), engine.get_video_driver());
+ xine_open(stream, mrl.c_str());
+
+ queue = xine_event_new_queue(stream);
+}
+
+XineStream::~XineStream()
+{
+ xine_close(stream);
+ xine_event_dispose_queue(queue);
+ xine_dispose(stream);
+}
+
+void XineStream::play()
+{
+ xine_play(stream, 0, 0);
+}
+
+void XineStream::stop()
+{
+ xine_stop(stream);
+}
+
+void XineStream::tick()
+{
+ while(xine_event_t *event = xine_event_get(queue))
+ {
+ handle_event(*event);
+ xine_event_free(event);
+ }
+}
+
+void XineStream::handle_event(const xine_event_t &event)
+{
+ switch(event.type)
+ {
+ case XINE_EVENT_PROGRESS:
+ {
+ xine_progress_data_t *data = reinterpret_cast<xine_progress_data_t *>(event.data);
+ IO::print("%s [%d%%]\n", data->description, data->percent);
+ }
+ break;
+ }
+}