[Spice-devel] [RFC PATCH 1/2] EXPERIMENTAL protocol to send streams to server
Frediano Ziglio
fziglio at redhat.com
Wed Jan 25 13:43:18 UTC 2017
>
> ---
> spice/Makefile.am | 1 +
> spice/stream-device.h | 79
> +++++++++++++++++++++++++++++++++++++++++++++++++++
> 2 files changed, 80 insertions(+)
> create mode 100644 spice/stream-device.h
>
> diff --git a/spice/Makefile.am b/spice/Makefile.am
> index a54ae89..4f9a607 100644
> --- a/spice/Makefile.am
> +++ b/spice/Makefile.am
> @@ -19,6 +19,7 @@ spice_protocol_include_HEADERS = \
> types.h \
> vd_agent.h \
> vdi_dev.h \
> + stream-device.h \
> $(NULL)
>
> -include $(top_srcdir)/git.mk
> diff --git a/spice/stream-device.h b/spice/stream-device.h
Victor on IRC commented than the name is perhaps not
that fine.
I don't have a better suggestion.
> new file mode 100644
> index 0000000..3ecbee4
> --- /dev/null
> +++ b/spice/stream-device.h
> @@ -0,0 +1,79 @@
> +/*
> + Copyright (C) 2017 Red Hat, Inc.
> +
> + This library is free software; you can redistribute it and/or
> + modify it under the terms of the GNU Lesser General Public
> + License as published by the Free Software Foundation; either
> + version 2.1 of the License, or (at your option) any later version.
> +
> + This program is distributed in the hope that it will be useful,
> + but WITHOUT ANY WARRANTY; without even the implied warranty of
> + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> + GNU General Public License for more details.
> +
> + You should have received a copy of the GNU Lesser General Public
> + License along with this library; if not, see
> <http://www.gnu.org/licenses/>.
> +*/
> +
> +/*
> + * This header contains definition for the device that
> + * allows to send streamed data to the server.
> + */
> +
> +#ifndef SPICE_STREAM_DEVICE_H_
> +#define SPICE_STREAM_DEVICE_H_
> +
> +#include <spice/types.h>
> +
> +/*
> + * The structure are all "naturally aligned"
> + * containing integers up to 64 bit.
> + * All numbers are in little endian format.
> + */
> +
This is a bit different from the standard way we encode
the protocol but is more optimal as all fields are
already aligned.
Considering that's also a local protocol the small
amount of bytes added for padding are not that expensive.
> +#define STREAM_DEVICE_PROTOCOL 1
> +
> +typedef struct StreamDevHeader
> +{
> + uint8_t protocol_version;
> + uint8_t padding;
> + /* as defined in StreamDevType enumeration */
> + uint16_t type;
> + uint32_t size;
> +} StreamDevHeader;
> +
> +typedef enum StreamDevType {
> + /* invalid, do not use */
> + STREAM_TYPE_INVALID = 0,
> + /* allows to send version information */
> + STREAM_TYPE_CAPABILITIES,
> + /* send screen resolution */
> + STREAM_TYPE_STREAM_FORMAT,
Perhaps too much STREAMs here.
> + /* stream data */
> + STREAM_TYPE_DATA,
> +} StreamDevType;
> +
> +/* generic extension capabilities */
Still not used... not clear what should be in here.
> +typedef struct StreamMsgCapabilities
> +{
> + uint32_t num_capabilities;
> + uint32_t capabilities[0];
> +} StreamMsgCapabilities;
> +
> +/* define the format of the stream, start a new stream */
This message is only guest -> host.
> +typedef struct StreamMsgStreamFormat
> +{
> + uint32_t width;
> + uint32_t height;
> + /* as defined in SpiceVideoCodecType enumeration */
> + uint8_t codec;
> + uint8_t padding1[3];
> +} StreamMsgStreamFormat;
> +
> +/* this message contains just raw data */
> +typedef struct StreamMsgData
> +{
> + uint8_t data[0];
> +} StreamMsgData;
> +
> +#endif /* SPICE_STREAM_DEVICE_H_ */
Frediano
More information about the Spice-devel
mailing list