X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fxinestream.cpp;h=4fc2e88fa1f569bcf2ef811117d2a02eb8bbef11;hb=19f69a037e98b6b510fca0f270a5a0cf05de522d;hp=49ed80c122d8fea3d50c11a55e995a8db3ff2004;hpb=85d198e71b7d1d6279db4e2f22d9a1393b8369ff;p=xinema.git diff --git a/source/xinestream.cpp b/source/xinestream.cpp index 49ed80c..4fc2e88 100644 --- a/source/xinestream.cpp +++ b/source/xinestream.cpp @@ -7,15 +7,16 @@ using namespace Msp; XineStream::XineStream(XineEngine &e, const string &mrl): engine(e), + filename(mrl.substr(mrl.rfind('/')+1)), state(STOPPED), + title(filename), current_audio(0), current_spu(OFF), channels_changed(false) { 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); + xine_open(stream, mrl.c_str()); update_channels(); update_info(); @@ -23,6 +24,11 @@ XineStream::XineStream(XineEngine &e, const string &mrl): engine.add_stream(*this); } +const string &XineStream::get_title() const +{ + return title.empty() ? filename : title; +} + XineStream::~XineStream() { engine.remove_stream(*this); @@ -32,26 +38,6 @@ XineStream::~XineStream() xine_dispose(stream); } -void XineStream::select_audio_channel(int i) -{ - if(i>=0 && static_cast(i)>=audio_channels.size()) - throw out_of_range("XineStream::set_audio_channel"); - - if(i<0) - i = OFF; - xine_set_param(stream, XINE_PARAM_AUDIO_CHANNEL_LOGICAL, (i==OFF ? -2 : i)); -} - -void XineStream::select_spu_channel(int i) -{ - if(i>=0 && static_cast(i)>=spu_channels.size()) - throw out_of_range("XineStream::set_spu_channel"); - - if(i<0) - i = OFF; - xine_set_param(stream, XINE_PARAM_SPU_CHANNEL, (i==OFF ? -2 : i)); -} - void XineStream::play() { if(state==STOPPED) @@ -97,6 +83,26 @@ void XineStream::set_state(State s) signal_state_changed.emit(state); } +void XineStream::select_audio_channel(int i) +{ + if(i>=0 && static_cast(i)>=audio_channels.size()) + throw out_of_range("XineStream::set_audio_channel"); + + if(i<0) + i = OFF; + xine_set_param(stream, XINE_PARAM_AUDIO_CHANNEL_LOGICAL, (i==OFF ? -2 : i)); +} + +void XineStream::select_spu_channel(int i) +{ + if(i>=0 && static_cast(i)>=spu_channels.size()) + throw out_of_range("XineStream::set_spu_channel"); + + if(i<0) + i = OFF; + xine_set_param(stream, XINE_PARAM_SPU_CHANNEL, (i==OFF ? -2 : i)); +} + void XineStream::tick() { while(xine_event_t *event = xine_event_get(queue)) @@ -121,7 +127,7 @@ void XineStream::update_info() { MutexLock lock(mutex); title = (xt ? xt : string()); - signal_title_changed.emit(title); + signal_title_changed.emit(get_title()); } int dur_msec, pos_msec; @@ -173,16 +179,20 @@ void XineStream::update_channels() audio_channels.resize(n_audio); for(unsigned i=0; i