X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fxinema.cpp;h=feab3272fcc2a85034ef043f3fb471d93ba45d10;hb=2204af390e6fe6db98c5d2f6e5317f841dc31198;hp=e4051cda3f15d5bb35bee8f474667d03d59f7190;hpb=4157ae2c48c539a3bbe609ab143d4c1454fd1748;p=xinema.git diff --git a/source/xinema.cpp b/source/xinema.cpp index e4051cd..feab327 100644 --- a/source/xinema.cpp +++ b/source/xinema.cpp @@ -1,5 +1,5 @@ #include -#include +#include #include "xineengine.h" #include "xinema.h" #include "xinestream.h" @@ -7,13 +7,12 @@ using namespace std; using namespace Msp; -Xinema::Xinema(int argc, char **argv): - window(display, 1920, 1080) +Xinema::Xinema(int, char **): + window(display, 1920, 1080), + network(*this), + engine(0), + stream(0) { - GetOpt getopt; - getopt.add_argument("filename", filename, GetOpt::REQUIRED_ARG); - getopt(argc, argv); - window.signal_close.connect(sigc::bind(sigc::mem_fun(this, &Xinema::exit), 0)); } @@ -23,12 +22,11 @@ int Xinema::main() display.tick(); engine = new XineEngine(window, &display_mutex); - stream = new XineStream(*engine, filename); - stream->play(); Application::main(); - delete stream; + if(stream) + delete stream; delete engine; return exit_code; @@ -36,10 +34,31 @@ int Xinema::main() void Xinema::tick() { + { + MutexLock lock(command_mutex); + if(!pending_mrl.empty()) + { + delete stream; + stream = new XineStream(*engine, pending_mrl); + stream->play(); + pending_mrl.clear(); + } + } + { MutexLock lock(display_mutex); display.tick(); } - stream->tick(); + engine->tick(); + if(stream) + stream->tick(); + + Time::sleep(10*Time::msec); +} + +void Xinema::play_file(const FS::Path &fn) +{ + MutexLock lock(command_mutex); + pending_mrl = "file://"+fn.str(); }