X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fxinestream.cpp;h=a702b28b335e66ce0ed840c1d11f68da83aa22aa;hb=a4982bb4d3fd9908aa01c824ac6202ac8618ac24;hp=6cc3d7546847af6593007ca746121e56ef856f64;hpb=194033440e2552a820c3b8197198402acee67c5b;p=xinema.git diff --git a/source/xinestream.cpp b/source/xinestream.cpp index 6cc3d75..a702b28 100644 --- a/source/xinestream.cpp +++ b/source/xinestream.cpp @@ -7,7 +7,8 @@ using namespace Msp; XineStream::XineStream(XineEngine &e, const string &mrl): engine(e), - state(STOPPED) + state(STOPPED), + channels_changed(false) { stream = xine_stream_new(engine.get_engine(), engine.get_audio_driver(), engine.get_video_driver()); xine_open(stream, mrl.c_str()); @@ -15,6 +16,7 @@ XineStream::XineStream(XineEngine &e, const string &mrl): queue = xine_event_new_queue(stream); update_info(); + update_channels(); engine.add_stream(*this); } @@ -28,6 +30,32 @@ XineStream::~XineStream() xine_dispose(stream); } +void XineStream::set_audio_channel(unsigned i) +{ + if(i>=audio_channels.size()) + throw out_of_range("XineStream::set_audio_channel"); + + xine_set_param(stream, XINE_PARAM_AUDIO_CHANNEL_LOGICAL, i); +} + +void XineStream::set_audio_off() +{ + xine_set_param(stream, XINE_PARAM_AUDIO_CHANNEL_LOGICAL, -2); +} + +void XineStream::set_spu_channel(unsigned i) +{ + if(i>=spu_channels.size()) + throw out_of_range("XineStream::set_spu_channel"); + + xine_set_param(stream, XINE_PARAM_SPU_CHANNEL, i); +} + +void XineStream::set_spu_off() +{ + xine_set_param(stream, XINE_PARAM_SPU_CHANNEL, -2); +} + void XineStream::play() { if(state==STOPPED) @@ -82,6 +110,12 @@ void XineStream::tick() } update_info(); + + if(channels_changed) + { + channels_changed = false; + update_channels(); + } } void XineStream::update_info() @@ -112,6 +146,30 @@ void XineStream::update_info() } } +void XineStream::update_channels() +{ + MutexLock lock(mutex); + char langbuf[XINE_LANG_MAX]; + + unsigned n_audio = xine_get_stream_info(stream, XINE_STREAM_INFO_MAX_AUDIO_CHANNEL); + audio_channels.resize(n_audio); + for(unsigned i=0; i