[Spice-devel] [RFC spice-streaming-agent 3/4] gst-plugin: Allow per-codec parameters
Kevin Pouget
kpouget at redhat.com
Tue Aug 6 15:34:50 UTC 2019
Signed-off-by: Kevin Pouget <kpouget at redhat.com>
---
src/gst-plugin.cpp | 18 +++++++++++-------
1 file changed, 11 insertions(+), 7 deletions(-)
diff --git a/src/gst-plugin.cpp b/src/gst-plugin.cpp
index 5469647..657b62d 100644
--- a/src/gst-plugin.cpp
+++ b/src/gst-plugin.cpp
@@ -102,7 +102,8 @@ class GstreamerPlugin final: public Plugin
public:
FrameCapture *CreateCapture() override;
unsigned Rank() override;
- void ParseOptions(const ConfigureOption *options, SpiceVideoCodecType codec);
+ void ParseOptions(const ConfigureOption *options, SpiceVideoCodecType codec,
+ const std::string codec_name);
SpiceVideoCodecType VideoCodecType() const override {
return settings.codec;
}
@@ -431,7 +432,8 @@ unsigned GstreamerPlugin::Rank()
return SoftwareMin;
}
-void GstreamerPlugin::ParseOptions(const ConfigureOption *options, SpiceVideoCodecType codec)
+void GstreamerPlugin::ParseOptions(const ConfigureOption *options,
+ SpiceVideoCodecType codec, const std::string codec_name)
{
settings.codec = codec;
@@ -439,15 +441,17 @@ void GstreamerPlugin::ParseOptions(const ConfigureOption *options, SpiceVideoCo
const std::string name = options->name;
const std::string value = options->value;
- if (name == "framerate") {
+ if (name == "framerate" || name == "gst." + codec_name + ".framerate") {
try {
settings.fps = std::stoi(value);
+
} catch (const std::exception &e) {
- throw std::runtime_error("Invalid value '" + value + "' for option 'framerate'.");
+ throw std::runtime_error("Invalid value '" + value + "' "
+ "for option '" + name + "'.");
}
- } else if (name == "gst.encoder") {
+ } else if (name == "gst.encoder" || name == "gst." + codec_name + ".encoder") {
settings.encoder = value;
- } else if (name == "gst.prop") {
+ } else if (name == "gst.prop" || name == "gst." + codec_name + ".prop") {
size_t pos = value.find('=');
if (pos == 0 || pos >= value.size() - 1) {
gst_syslog(LOG_WARNING, "Property input is invalid ('%s' Ignored)", value.c_str());
@@ -488,7 +492,7 @@ SPICE_STREAMING_AGENT_PLUGIN(agent)
}
auto plugin = std::make_shared<GstreamerPlugin>();
- plugin->ParseOptions(agent->Options(), codec_type);
+ plugin->ParseOptions(agent->Options(), codec_type, value);
agent->Register(plugin);
}
}
--
2.21.0
More information about the Spice-devel
mailing list