X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fxinestream.cpp;h=5614dd00838324e29a3483e70e16459792a02770;hb=3bd92c1fa7a85b47356cd6f2bad23893955a0785;hp=fd2c6224fb9e6aea49551af343f829b4881d37fe;hpb=4157ae2c48c539a3bbe609ab143d4c1454fd1748;p=xinema.git diff --git a/source/xinestream.cpp b/source/xinestream.cpp index fd2c622..5614dd0 100644 --- a/source/xinestream.cpp +++ b/source/xinestream.cpp @@ -5,16 +5,23 @@ using namespace std; using namespace Msp; -XineStream::XineStream(XineEngine &engine, const string &mrl) +XineStream::XineStream(XineEngine &e, const string &mrl): + engine(e) { 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); + + check_info(); + + engine.add_stream(*this); } XineStream::~XineStream() { + engine.remove_stream(*this); + xine_close(stream); xine_event_dispose_queue(queue); xine_dispose(stream); @@ -37,6 +44,41 @@ void XineStream::tick() handle_event(*event); xine_event_free(event); } + + check_info(); +} + +void XineStream::check_info() +{ + const char *xt = xine_get_meta_info(stream, XINE_META_INFO_TITLE); + if(xt) + { + if(title.compare(xt)) + { + title = xt; + signal_title_changed.emit(title); + } + } + else if(!title.empty()) + { + title.clear(); + signal_title_changed.emit(title); + } + + int dur_msec, pos_msec; + xine_get_pos_length(stream, 0, &pos_msec, &dur_msec); + Time::TimeDelta dur = dur_msec*Time::msec; + Time::TimeDelta pos = pos_msec*Time::msec; + if(dur!=duration) + { + duration = dur; + signal_duration_changed.emit(duration); + } + if(pos!=position) + { + position = pos; + signal_position_changed.emit(position); + } } void XineStream::handle_event(const xine_event_t &event)