]> git.tdb.fi Git - xinema.git/blobdiff - source/xinestream.cpp
Rename check_info to update_info
[xinema.git] / source / xinestream.cpp
index 02fd3165de392af3a305fcf4787485214bf256ff..6cc3d7546847af6593007ca746121e56ef856f64 100644 (file)
@@ -14,7 +14,7 @@ XineStream::XineStream(XineEngine &e, const string &mrl):
 
        queue = xine_event_new_queue(stream);
 
-       check_info();
+       update_info();
 
        engine.add_stream(*this);
 }
@@ -68,6 +68,7 @@ void XineStream::set_state(State s)
        if(s==state)
                return;
 
+       MutexLock lock(mutex);
        state = s;
        signal_state_changed.emit(state);
 }
@@ -80,23 +81,16 @@ void XineStream::tick()
                xine_event_free(event);
        }
 
-       check_info();
+       update_info();
 }
 
-void XineStream::check_info()
+void XineStream::update_info()
 {
        const char *xt = xine_get_meta_info(stream, XINE_META_INFO_TITLE);
-       if(xt)
+       if((xt && title.compare(xt)) || (!xt && !title.empty()))
        {
-               if(title.compare(xt))
-               {
-                       title = xt;
-                       signal_title_changed.emit(title);
-               }
-       }
-       else if(!title.empty())
-       {
-               title.clear();
+               MutexLock lock(mutex);
+               title = (xt ? xt : string());
                signal_title_changed.emit(title);
        }
 
@@ -106,11 +100,13 @@ void XineStream::check_info()
        Time::TimeDelta pos = pos_msec*Time::msec;
        if(dur!=duration)
        {
+               MutexLock lock(mutex);
                duration = dur;
                signal_duration_changed.emit(duration);
        }
        if(pos!=position)
        {
+               MutexLock lock(mutex);
                position = pos;
                signal_position_changed.emit(position);
        }
@@ -122,6 +118,7 @@ void XineStream::handle_event(const xine_event_t &event)
        {
        case XINE_EVENT_UI_PLAYBACK_FINISHED:
                set_state(STOPPED);
+               signal_finished.emit();
                break;
        }
 }