[Spice-devel] [PATCH spice-streaming-agent 2/2] Do not use an encoding not supported by the client

Christophe de Dinechin christophe.de.dinechin at gmail.com
Mon Jan 29 10:01:15 UTC 2018


Ack

> On 29 Jan 2018, at 10:56, Frediano Ziglio <fziglio at redhat.com> wrote:
> 
> ping
> 
>> 
>>> 
>>> On Tue, 2017-11-21 at 09:49 +0000, Frediano Ziglio wrote:
>>>> This allows for instance old clients to work correctly.
>>>> 
>>>> Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
>>>> ---
>>>> src/concrete-agent.cpp        | 5 ++++-
>>>> src/concrete-agent.hpp        | 3 ++-
>>>> src/spice-streaming-agent.cpp | 6 +++++-
>>>> 3 files changed, 11 insertions(+), 3 deletions(-)
>>>> 
>>>> diff --git a/src/concrete-agent.cpp b/src/concrete-agent.cpp
>>>> index 192054a..404ee74 100644
>>>> --- a/src/concrete-agent.cpp
>>>> +++ b/src/concrete-agent.cpp
>>>> @@ -98,7 +98,7 @@ void ConcreteAgent::LoadPlugin(const char
>>>> *plugin_filename)
>>>>     }
>>>> }
>>>> 
>>>> -FrameCapture *ConcreteAgent::GetBestFrameCapture()
>>>> +FrameCapture *ConcreteAgent::GetBestFrameCapture(const
>>>> std::set<SpiceVideoCodecType>& codecs)
>>> 
>>> 
>>> I notice that there's a bit of inconsistency about specifying the std::
>>> namespace or just using the bare type. There is a "using namespace
>>> std;" statement in this file, and most standard library types are used
>>> without specifying the namespace. But there there is at least one place
>>> where we specify the namespace, and you've added another in this patch.
>>> 
>> 
>> Usually I tend to use in the header to avoid having a global
>> unwanted "using namespace" statement and avoid in the source (at least
>> for std). We can define to always use the explicit namespace for "std".
>> 
>>> (as a matter of personal preference, I generally dislike 'using
>>> namespace' statements, and I prefer to specify the std:: namespace
>>> explicitly)
>>> 
>>> 
>>>> 
>>> 
>>>> {
>>>>     vector<pair<unsigned, shared_ptr<Plugin>>> sorted_plugins;
>>>> 
>>>> @@ -113,6 +113,9 @@ FrameCapture
>>>> *ConcreteAgent::GetBestFrameCapture()
>>>>         if (plugin.first == DontUse) {
>>>>             break;
>>> 
>>> Unrelated to this patch, but shouldn't the statement above be
>>> 'continue' rather than 'break'?
>>> 
>> 
>> They are sorted based on rank so all others are DontUse too.
>> 
>>> 
>>>>         }
>>>> +        // check client supports the codec
>>>> +        if (codecs.find(plugin.second->VideoCodecType()) ==
>>>> codecs.end())
>>>> +            continue;
>>>>         FrameCapture *capture = plugin.second->CreateCapture();
>>>>         if (capture) {
>>>>             return capture;
>>>> diff --git a/src/concrete-agent.hpp b/src/concrete-agent.hpp
>>>> index 828368b..6c300fa 100644
>>>> --- a/src/concrete-agent.hpp
>>>> +++ b/src/concrete-agent.hpp
>>>> @@ -7,6 +7,7 @@
>>>> #define SPICE_STREAMING_AGENT_CONCRETE_AGENT_HPP
>>>> 
>>>> #include <vector>
>>>> +#include <set>
>>>> #include <memory>
>>>> #include <spice-streaming-agent/plugin.hpp>
>>>> 
>>>> @@ -33,7 +34,7 @@ public:
>>>>     void LoadPlugins(const char *directory);
>>>>     // pointer must remain valid
>>>>     void AddOption(const char *name, const char *value);
>>>> -    FrameCapture *GetBestFrameCapture();
>>>> +    FrameCapture *GetBestFrameCapture(const
>>>> std::set<SpiceVideoCodecType>& codecs);
>>>     bool PluginVersionIsCompatible(unsigned pluginVersion) const
>>>> override;
>>>> private:
>>>>     void LoadPlugin(const char *plugin_filename);
>>>> diff --git a/src/spice-streaming-agent.cpp b/src/spice-streaming-
>>>> agent.cpp
>>>> index 20f2925..5c0bbb9 100644
>>>> --- a/src/spice-streaming-agent.cpp
>>>> +++ b/src/spice-streaming-agent.cpp
>>>> @@ -52,6 +52,7 @@ struct SpiceStreamDataMessage
>>>> };
>>>> 
>>>> static int streaming_requested;
>>>> +static std::set<SpiceVideoCodecType> client_codecs;
>>>> static bool quit;
>>>> static int streamfd = -1;
>>>> static bool stdin_ok;
>>>> @@ -143,6 +144,9 @@ static int read_command_from_device(void)
>>>>     streaming_requested = msg[0]; /* num_codecs */
>>>>     syslog(LOG_INFO, "GOT START_STOP message -- request to %s
>>>> streaming\n",
>>>>            streaming_requested ? "START" : "STOP");
>>>> +    client_codecs.clear();
>>>> +    for (int i = 1; i <= msg[0]; ++i)
>>>> +        client_codecs.insert((SpiceVideoCodecType) msg[i]);
>>>>     return 1;
>>>> }
>>>> 
>>>> @@ -363,7 +367,7 @@ do_capture(const char *streamport, FILE *f_log)
>>>>         syslog(LOG_INFO, "streaming starts now\n");
>>>>         uint64_t time_last = 0;
>>>> 
>>>> -        std::unique_ptr<FrameCapture>
>>>> capture(agent.GetBestFrameCapture());
>>>> +        std::unique_ptr<FrameCapture>
>>>> capture(agent.GetBestFrameCapture(client_codecs));
>>>>         if (!capture)
>>>>             throw std::runtime_error("cannot find a suitable capture
>>>> system");
>>>> 
>>> 
>>> 
>>> Otherwise it looks ok to me
>>> 
>>> Reviewed-by: Jonathon Jongsma <jjongsma at redhat.com>
>>> 
>>> 
>> 
> _______________________________________________
> Spice-devel mailing list
> Spice-devel at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/spice-devel



More information about the Spice-devel mailing list