> On 15 Nov 2017, at 12:15, Frediano Ziglio <fzig...@redhat.com> wrote: > >> >> From: Christophe de Dinechin <dinec...@redhat.com> >> >> Signed-off-by: Christophe de Dinechin <dinec...@redhat.com> >> --- >> include/spice-streaming-agent/plugin.hpp | 6 ++++++ >> src/concrete-agent.cpp | 11 +++++++++++ >> src/concrete-agent.hpp | 1 + >> src/spice-streaming-agent.cpp | 23 +++++++++++------------ >> 4 files changed, 29 insertions(+), 12 deletions(-) >> >> diff --git a/include/spice-streaming-agent/plugin.hpp >> b/include/spice-streaming-agent/plugin.hpp >> index 41ad11f..83980d7 100644 >> --- a/include/spice-streaming-agent/plugin.hpp >> +++ b/include/spice-streaming-agent/plugin.hpp >> @@ -56,6 +56,12 @@ struct Settings >> unsigned quality = 80; // Normalized in 0-100 (100=high) >> unsigned avg_bitrate = 3000000; // Target average bitrate in bps >> unsigned max_bitrate = 8000000; // Target maximum bitrate >> + >> +#define STANDARD_OPTIONS_USAGE \ >> + "framerate = [1-240] Number of frames per second\n" \ >> + "quality = [1-100] Normalized quality, 100 = high\n" \ >> + "avg_bitrate= [1-10000000] Average bits per second for stream\n" \ >> + "max_bitrate= [1-10000000] Maximum bits per second for stream\n" >> }; >> >> /*! > > Why putting this in the public header?
The initial idea was to make sure plugins were actually showing the same message for common options. Thinking more about output formatting, I realized it was stupid to emit the same usage info for every plugin, so I am in the process of changing that. > I don't see any point for the plugins to know that information and > if they starts using it the value can become an ABI. > Also these defines are global (not inside any namespace) so the > "STANDARD_OPTIONS_USAGE" would prevent the name reuse. You are right, and I found a better way to output the hierarchy of usage information (and also offer a better format). > >> diff --git a/src/concrete-agent.cpp b/src/concrete-agent.cpp >> index 59f11b2..377c934 100644 >> --- a/src/concrete-agent.cpp >> +++ b/src/concrete-agent.cpp >> @@ -140,6 +140,17 @@ FrameCapture *ConcreteAgent::GetBestFrameCapture() >> return nullptr; >> } >> >> +void ConcreteAgent::PluginsUsage() >> +{ >> + for (auto &plugin: plugins) { >> + printf("\n" >> + "settings for %s:\n" >> + "%s", >> + plugin->Name(), >> + plugin->Usage()); >> + } >> +} >> + >> void ConcreteAgent::ApplyOptions(Plugin *plugin) >> { >> bool usage = false; >> diff --git a/src/concrete-agent.hpp b/src/concrete-agent.hpp >> index b3d4e06..eeb43f8 100644 >> --- a/src/concrete-agent.hpp >> +++ b/src/concrete-agent.hpp >> @@ -34,6 +34,7 @@ public: >> void LoadPlugins(const char *directory); >> void ApplyOptions(Plugin *plugin); >> FrameCapture *GetBestFrameCapture(); >> + void PluginsUsage(); >> >> private: >> void LoadPlugin(const char *plugin_filename); >> diff --git a/src/spice-streaming-agent.cpp b/src/spice-streaming-agent.cpp >> index d5984bc..71a36e1 100644 >> --- a/src/spice-streaming-agent.cpp >> +++ b/src/spice-streaming-agent.cpp >> @@ -269,18 +269,16 @@ static void register_interrupts(void) >> >> static void usage(const char *progname) >> { >> - printf("usage: %s <options>\n", progname); >> - printf("options are:\n"); >> - printf("\t-p portname -- virtio-serial port to use\n"); >> - printf("\t-i accept commands from stdin\n"); >> - printf("\t-l file -- log frames to file\n"); >> - printf("\t--log-binary -- log binary frames (following -l)\n"); >> - printf("\t-d -- enable debug logs\n"); >> - printf("\t-c variable=value -- change settings\n"); >> - printf("\t\tframerate = 1-100 (check 10,20,30,40,50,60)\n"); >> - printf("\n"); >> - printf("\t-h or --help -- print this help message\n"); >> - >> + printf("usage: %s <options>\n" >> + "options are:\n" >> + "\t-p portname -- virtio-serial port to use\n" >> + "\t-i accept commands from stdin\n" >> + "\t-l file -- log frames to file\n" >> + "\t--log-binary -- log binary frames (following -l)\n" >> + "\t-d -- enable debug logs\n" >> + "\t-c variable=value -- change settings (see below)\n" >> + "\t-h or --help -- print this help message\n", progname); >> + agent.PluginsUsage(); >> exit(1); >> } >> >> @@ -474,6 +472,7 @@ int main(int argc, char* argv[]) >> setlogmask(logmask); >> break; >> case 'h': >> + agent.LoadPlugins(PLUGINSDIR); >> usage(argv[0]); >> break; >> } > > Frediano
_______________________________________________ Spice-devel mailing list Spice-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/spice-devel