]> git.tdb.fi Git - xinema.git/blobdiff - source/xinestream.cpp
Refactor the libxine interface into classes
[xinema.git] / source / xinestream.cpp
diff --git a/source/xinestream.cpp b/source/xinestream.cpp
new file mode 100644 (file)
index 0000000..fd2c622
--- /dev/null
@@ -0,0 +1,53 @@
+#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;
+       }
+}