get_stream().pause();
else if(keyword=="stop")
get_stream().stop();
+ else if(keyword=="select_audio")
+ set_audio_channel(args);
+ else if(keyword=="select_spu")
+ set_spu_channel(args);
else
throw runtime_error("Invalid command");
}
}
}
+void Client::set_audio_channel(const string &arg)
+{
+ XineStream &stream = get_stream();
+ if(arg=="off")
+ stream.set_audio_off();
+ else
+ stream.set_audio_channel(lexical_cast<unsigned>(arg));
+}
+
+void Client::set_spu_channel(const string &arg)
+{
+ XineStream &stream = get_stream();
+ if(arg=="off")
+ stream.set_spu_off();
+ else
+ stream.set_spu_channel(lexical_cast<unsigned>(arg));
+}
+
void Client::stream_created(XineStream &stream)
{
stream.signal_state_changed.connect(sigc::mem_fun(this, &Client::stream_state_changed));
stream.signal_title_changed.connect(sigc::mem_fun(this, &Client::stream_title_changed));
stream.signal_duration_changed.connect(sigc::mem_fun(this, &Client::stream_duration_changed));
stream.signal_position_changed.connect(sigc::mem_fun(this, &Client::stream_position_changed));
+ stream.signal_channels_changed.connect(sigc::mem_fun(this, &Client::stream_channels_changed));
MutexLock lock(stream.get_mutex());
stream_state_changed(stream.get_state());
if(const Time::TimeDelta &dur = stream.get_duration())
stream_duration_changed(dur);
+
+ stream_channels_changed();
}
void Client::stream_destroyed()
last_position = pos;
}
}
+
+void Client::stream_channels_changed()
+{
+ XineStream &stream = get_stream();
+
+ const vector<string> &audio_channels = stream.get_audio_channels();
+ send_reply(format("audio_count %d", audio_channels.size()));
+ for(unsigned i=0; i<audio_channels.size(); ++i)
+ send_reply(format("audio %d %s", i, audio_channels[i]));
+
+ const vector<string> &spu_channels = stream.get_spu_channels();
+ send_reply(format("spu_count %d", spu_channels.size()));
+ for(unsigned i=0; i<spu_channels.size(); ++i)
+ send_reply(format("spu %d %s", i, spu_channels[i]));
+
+ send_reply("channels_end");
+}