- Jun 07, 2024
-
-
Vivek Kasireddy authored
We need to convert the scanout's drm format to the correct Gstreamer format while configuring the pipeline. This can be done using gst_video_dma_drm_fourcc_to_format() API, which will take the drm fourcc value and return the appropriate Gst format. Signed-off-by:
Vivek Kasireddy <vivek.kasireddy@intel.com>
-
- May 29, 2024
-
-
Vivek Kasireddy authored
We do not want to stop a stream associated with gl_draw as a result of timeout because we may not get another opportunity to create a new stream if the current one gets stopped. However, when the stream does get stopped for other reasons, we need to clear the gl_draw_stream pointer associated with the relevant DC. v2: (suggestions from Frediano) - Don't stop the stream regardless of whether gl_draw is ongoing or not Cc: Frediano Ziglio <freddy77@gmail.com> Cc: Gerd Hoffmann <kraxel@redhat.com> Cc: Marc-André Lureau <marcandre.lureau@redhat.com> Cc: Dongwon Kim <dongwon.kim@intel.com> Signed-off-by:
Vivek Kasireddy <vivek.kasireddy@intel.com> Acked-by:
Frediano Ziglio <freddy77@gmail.com>
-
Vivek Kasireddy authored
This patch adds a new function to enable the creation of Gst memory with the dmabuf fd as the source by using a dmabuf allocator. And, it also adds a mechanism to register and invoke any callbacks once the Gst memory object is no longer used by the pipeline. This patch also ensures that the source_fps value is always non-zero. v2: (suggestions from Frediano) - Moved the code associated with add_frame() and pipeline configuration into separate functions that are used when encoding dmabuf fd v3: - Add the new gstreamer-allocators dependency in autoconf as well (Frediano) - Ensure that VIDEO_ENCODER_FRAME_UNSUPPORTED is returned when an error is encountered in spice_gst_encoder_encode_dmabuf() Cc: Frediano Ziglio <freddy77@gmail.com> Cc: Gerd Hoffmann <kraxel@redhat.com> Cc: Marc-André Lureau <marcandre.lureau@redhat.com> Cc: Dongwon Kim <dongwon.kim@intel.com> Signed-off-by:
Vivek Kasireddy <vivek.kasireddy@intel.com>
-
Vivek Kasireddy authored
For remote (or non-gl) clients, if a valid gl_draw stream exists, then we first extract the dmabuf fd associated with the scanout and share it with the encoder along with other key parameters such as stride, width and height. Once the encoder finishes creating an encoded buffer (using the dmabuf fd as input), we then send it over to the client. And, as soon as the encoder notifies that it is no longer using the dmabuf fd, we send a gl_draw_done async to the application. v2: (suggestions and fixups from Frediano) - Moved the DisplayStreamData initialization code from red_marshall_stream_data() into a separate function that is reused when marshalling gl_draw_stream. - Used new/delete instead of g_new/g_free for creating and destroying dmabuf_data object - s/notify_mem_free/free s/red_gst_mem_free_cb/red_free_fb - Removed the usage of opaque from red_free_cb v3: - Obtain the key params such as fd, stride, etc from the stream instead of the scanout - Replace the switch with if in red_marshall_gl_draw_stream() to avoid printing a warning (and spamming the console) when a frame is dropped v4: - Slightly improve the readability of red_marshall_gl_draw_stream() by adding checks at the start Cc: Frediano Ziglio <freddy77@gmail.com> Cc: Gerd Hoffmann <kraxel@redhat.com> Cc: Marc-André Lureau <marcandre.lureau@redhat.com> Cc: Dongwon Kim <dongwon.kim@intel.com> Signed-off-by:
Vivek Kasireddy <vivek.kasireddy@intel.com>
-
Vivek Kasireddy authored
For non-gl/remote clients, if there is no stream associated with the DisplayChannel, then we create a new stream. Otherwise, we just update the current stream's timestamp. v2: (suggestions and fixups from Frediano) - Moved the gl_draw_stream object from DCC to DC - Moved the stream initialization code from display_channel_create_stream() into a separate function that is reused when creating gl_draw_stream v3: - Create a new primary surface whenever a new stream gets created v4: - Use nullptr instead of NULL and true instead of TRUE (Frediano) - Create the stream as part of gl scanout instead of gl draw operation so that if would be easily possible to obtain key params such as stride, flags, etc - Store key params such as fd, flags, stride, etc in the stream so that we do not have to look at scanout again v5: (Frediano) - No need to pass scanout object to create_gl_draw_stream as it is always NULL - Don't compute the stream's last_time if drawable is valid - Let the default input_fps be MAX_FPS - Use uint32_t type for stride - Make sure that a newly created stream is provided to all connected clients - When the scanout's drm_dma_buf_fd is associated with a stream, take an additional reference on the fd to ensure that it is not closed when the stream might still be using it v6: - Add a new helper is_new_stream_needed() to determine when to create new stream - Add more checks to see if the encoder is created or not - Don't share the dmabuf fd with the stream and instead keep the ownerhip of the fd with the scanout Cc: Frediano Ziglio <freddy77@gmail.com> Cc: Gerd Hoffmann <kraxel@redhat.com> Cc: Marc-André Lureau <marcandre.lureau@redhat.com> Cc: Dongwon Kim <dongwon.kim@intel.com> Signed-off-by:
Vivek Kasireddy <vivek.kasireddy@intel.com>
-
- May 28, 2024
-
-
Vivek Kasireddy authored
We need to determine if the client is new enough to support multiple codecs -- which might include any of the Gstreamer based ones. v2: (suggestions and fixups from Frediano) - Add is_gl_client() method to DisplayChannelClient instead of a dcc_is_gl_client() function. - Avoid the usage of XXX_CAST macro. Cc: Frediano Ziglio <freddy77@gmail.com> Cc: Gerd Hoffmann <kraxel@redhat.com> Cc: Marc-André Lureau <marcandre.lureau@redhat.com> Cc: Dongwon Kim <dongwon.kim@intel.com> Signed-off-by:
Vivek Kasireddy <vivek.kasireddy@intel.com> Acked-by:
Frediano Ziglio <freddy77@gmail.com>
-
Vivek Kasireddy authored
Once it is determined that an Intel GPU is available/active (after looking into udev's database), we try to see if there is a h/w based encoder (element) available (in Gstreamer's registry cache) for the user selected video codec. In other words, if we find that the Intel Media SDK Gstreamer plugin (libgstmsdk.so) and associated libraries (such as va or vaapi) are all installed properly, we add the appropriate h/w based encoder and post-processor/converter elements to the pipeline (along with any relevant options) instead of the s/w based elements. For example, if the user selects h264 as the preferred codec format, msdkh264enc and vapostproc will be preferred instead of x264enc and videoconvert. v2: (addressed some review comments from Frediano) - Moved the udev helper into spice-common - Refactored the code to choose plugins in order msdk > va > vaapi v3: (Frediano) - Added relevant encoder options for mjpeg and vp9 codecs (Jin Chung) v4: (Fixups from Frediano) - Free the encoder when we cannot find vpp - Change type and find plugins array length using G_N_ELEMENTS - Fix gstenc_name UAF by freeing it at the end of the function - Use g_str_has_prefix instead of strstr - Include the string "_hw_" in function names that deal with h/w based plugins - Rebase on master v5: rebase on master Cc: Frediano Ziglio <freddy77@gmail.com> Cc: Gerd Hoffmann <kraxel@redhat.com> Cc: Marc-André Lureau <marcandre.lureau@redhat.com> Cc: Dongwon Kim <dongwon.kim@intel.com> Signed-off-by:
Vivek Kasireddy <vivek.kasireddy@intel.com> Co-developed-by:
Jin Chung Teng <jin.chung.teng@intel.com> Co-developed-by:
Hazwan Arif Mazlan <hazwan.arif.mazlan@intel.com>
-
- May 27, 2024
-
-
Frediano Ziglio authored
Remove: test-display-streaming.c: In function 'get_commands': test-display-streaming.c:218:42: error: 'calloc' sizes specified with 'sizeof' in the earlier argument and not in the later argument [-Werror=calloc-transposed-args] 218 | *commands = (Command*) calloc(sizeof(Command), *num_commands); | ^~~~~~~ test-display-streaming.c:218:42: note: earlier argument should specify number of elements, later size of each element Signed-off-by:
Frediano Ziglio <freddy77@gmail.com>
-
- May 26, 2024
-
-
TCP_NOPUSH is broken and cannot be used. Signed-off-by:
osy <osy@turing.llc> Acked-by:
Frediano Ziglio <freddy77@gmail.com>
-
The original check ensures we do not have an outstanding GL_DRAW. However, in QEMU, there is no guarantee that a scanout cannot happen while the async GL_DRAW has not returned a result yet. This introduces a race where if a scanout is called while there is an outstanding GL_DRAW, QEMU will crash. Signed-off-by:
osy <osy@turing.llc> Acked-by:
Frediano Ziglio <freddy77@gmail.com>
-
- Nov 22, 2023
-
-
test-listen using GIO had issues running under CI for a while. GIO is reading some desktop configuration so it's not very CI friendly. So instead of using GIO use OpenSSL BIO. The code does not get much bigger or complicated. We are already using OpenSSL so we are not adding dependencies. This fixes CI for Fedora 39 (just released and available on docker). This allowed to remove an old workaround for GIO in .gitlab-ci.yml (cfr commit 89edf808 "ci: Workaround an issue with GLib on Fedora 30") Signed-off-by:
Frediano Ziglio <freddy77@gmail.com>
-
- Nov 15, 2023
-
-
Frediano Ziglio authored
renogotiation -> renegotiation Signed-off-by:
Frediano Ziglio <freddy77@gmail.com>
-
If we use the x264enc encoder to encode a stream, then videoconvert would convert the BGRx data into Y444, which is the preferred format for x264enc. However, some decoders particularly the ones that are h/w based cannot work with Y444 if it was the format used by the encoder. Therefore, to address these situations, we need a way to override the format used during the encoding stage which can be accomplished by using the environment variable introduced in this patch: SPICE_CONVERTER_PREFERRED_FORMAT. For example, using NV12 as the output format for the videoconvert element would allow us to pair a s/w based encoder (such as x264enc) with a h/w based decoder (such as msdkh264dec) for decoding the stream as most h/w based decoders only work with NV12 format given its popularity. Note that choosing an encoder format such as NV12 over Y444 would probably result in decreased video quality although it would be compatible with more decoders. Ideally, the client and server need to negotiate a suitable format dynamically but the current capabilities do not allow for such exchange. Cc: Frediano Ziglio <freddy77@gmail.com> Cc: Dongwon Kim <dongwon.kim@intel.com> Based-on-patch-by:
Hazwan Arif Mazlan <hazwan.arif.mazlan@intel.com> Signed-off-by:
Jin Chung Teng <jin.chung.teng@intel.com> Signed-off-by:
Vivek Kasireddy <vivek.kasireddy@intel.com> Acked-by:
Frediano Ziglio <freddy77@gmail.com>
-
- Sep 17, 2023
-
-
Frediano Ziglio authored
Deprecated since 2016. Signed-off-by:
Frediano Ziglio <freddy77@gmail.com>
-
- May 30, 2023
-
-
Frediano Ziglio authored
Same some network traffic, we don't need to clone entire git repository history. Signed-off-by:
Frediano Ziglio <freddy77@gmail.com>
-
Frediano Ziglio authored
Newer meson output a warning if "setup" is not provided. Remove that warning. Note that Windows build was not changed due to a bug in mingw-meson script causing duplication of arguments. Signed-off-by:
Frediano Ziglio <freddy77@gmail.com>
-
Frediano Ziglio authored
"lz4" and "tests" flags are by default "true", test we can build if they are "false". Signed-off-by:
Frediano Ziglio <freddy77@gmail.com>
-
Frediano Ziglio authored
Signed-off-by:
Frediano Ziglio <freddy77@gmail.com>
-
Frediano Ziglio authored
Update to stream9 instead of stream8. Move to Meson instead of Autoconf as build system. Remove libcacard-devel, not available. Signed-off-by:
Frediano Ziglio <freddy77@gmail.com>
-
This fixes the following compiler error while targeting Windows platform. ../../server/smartcard.cpp:20:10: fatal error: arpa/inet.h: No such file or directory 20 | #include <arpa/inet.h> | ^~~~~~~~~~~~~ Signed-off-by:
Biswapriyo Nath <nathbappai@gmail.com> Acked-by:
Frediano Ziglio <freddy77@gmail.com>
-
- May 26, 2023
-
-
With LibreSSL SSL_OP_NO_CLIENT_RENEGOTIATION is opaque which is not compatible with the OpenSSL 1.0.2 and earlier code path in red-stream.cpp while SSL_OP_NO_RENEGOTIATION is not yet defined for the newer OpenSSL code path in reds.cpp. So with OpenSSL 1.1.0 and later if SSL_OP_NO_RENEGOTIATION is undefined and SSL_OP_NO_CLIENT_RENEGOTIATION is defined then define the former as the latter. This will allow the build to succeed with LibreSSL 3.7.2 and in the future when newer LibreSSL versions add SSL_OP_NO_RENEGOTIATION that code path will then be used automatically. Signed-off-by:
orbea <orbea@riseup.net> Acked-by:
Frediano Ziglio <freddy77@gmail.com>
-
- May 11, 2023
-
-
Frediano Ziglio authored
Really minor release. Signed-off-by:
Frediano Ziglio <freddy77@gmail.com>
-
Frediano Ziglio authored
Required to build using Meson. Also add a check to "distcheck" job to test you can build with Meson from distribution file. Signed-off-by:
Frediano Ziglio <freddy77@gmail.com>
-
- May 10, 2023
-
-
Frediano Ziglio authored
The configuration installed with mingw64-openssl cause OpenSSL to fail to initialize during execution with Wine. Delete it and use the compiled in options. Signed-off-by:
Frediano Ziglio <freddy77@gmail.com>
-
Frediano Ziglio authored
SSLv23_method call was deprecated in favour of TLS_method. Signed-off-by:
Frediano Ziglio <freddy77@gmail.com>
-
Frediano Ziglio authored
Using Fedora 38 the compilation fails due to this warning: In file included from /usr/include/gstreamer-1.0/gst/video/video.h:202, from ../../server/gstreamer-encoder.c:27: /usr/include/gstreamer-1.0/gst/video/video-sei.h:39:21: error: 'H265_MISP_NANOSECONDS' defined but not used [-Werror=unused-const-variable=] 39 | static const guint8 H265_MISP_NANOSECONDS[] = { | ^~~~~~~~~~~~~~~~~~~~~ Ignore the warning for Gstreamer includes. Signed-off-by:
Frediano Ziglio <freddy77@gmail.com>
-
Frediano Ziglio authored
Avoid downgrading gstreamer1-plugins-good, no longer necessary. Add suppression for pthread_create leak. Signed-off-by:
Frediano Ziglio <freddy77@gmail.com>
-
Frediano Ziglio authored
"cmp" and "diff" were not available. Signed-off-by:
Frediano Ziglio <freddy77@gmail.com>
-
Frediano Ziglio authored
Last wsaccel library fails to install on the container. This test has not been maintained for a while so libraries are getting pretty old anyway. Signed-off-by:
Frediano Ziglio <freddy77@gmail.com>
-
Frediano Ziglio authored
Used autoupdate and some manual changes. Signed-off-by:
Frediano Ziglio <freddy77@gmail.com>
-
Frediano Ziglio authored
For previous commit a5d1d957 (cfr "sound: Fix pointer arithmetic in snd_record_handle_write()") Signed-off-by:
Frediano Ziglio <freddy77@gmail.com>
-
- Oct 22, 2022
-
-
The variable 'now' counts in audio sample frames, but the variable 'data' is of type uint8_t *. Multiply 'now' by the size of an audio sample frame to get the correct source pointer. This improves the quality of audio recordings in QEMU a little bit. Fixes: 5d5a7bd1 ("sound: Avoid cast that could cause alignment problems") Signed-off-by:
Volker Rümelin <vr_qemu@t-online.de> Acked-by:
Frediano Ziglio <freddy77@gmail.com>
-
- Sep 13, 2022
-
-
Frediano Ziglio authored
Lot of build and compatibility updates since 0.15. See CHANGELOG.md. Signed-off-by:
Frediano Ziglio <freddy77@gmail.com>
-
- Aug 03, 2022
-
-
Frediano Ziglio authored
Downgrading this package seems to solve Valgrind tests. Signed-off-by:
Frediano Ziglio <freddy77@gmail.com>
-
Frediano Ziglio authored
Just loding the file is enough to test code in reds.cpp. Signed-off-by:
Frediano Ziglio <freddy77@gmail.com>
-
Frediano Ziglio authored
Reduce conditional code using new OpenSSL interface and implement missing APIs. Signed-off-by:
Frediano Ziglio <freddy77@gmail.com>
-
Signed-off-by:
Marc-André Lureau <marcandre.lureau@redhat.com>
-
- Jul 19, 2022
-
-
Marc-André Lureau authored
Spice uses rand() to generate the random id, but qemu (at least in the case of qemu-system-x86) fails to initialize the RNG seed (with e.g. srand()). The result is, that every SPICE session started (by e.g. libvirtd) has the same client_id. Usually, this is not a problem, but running something like a SPICE proxy, relying on the client_id to correctly route connections, this creates problems. Fixes: https://gitlab.com/qemu-project/qemu/-/issues/163 Signed-off-by:
Marc-André Lureau <marcandre.lureau@redhat.com>
-
Frediano Ziglio authored
Provides LANG to avoid error detecting encoding. Install all Wine package, installing only core is not enough. Signed-off-by:
Frediano Ziglio <freddy77@gmail.com>
-
Frediano Ziglio authored
Remove deprecation warnings like In file included from ../../server/char-device.cpp:28: ../../server/safe-list.hpp:108:43: error: 'template<class _Category, class _Tp, class _Distance, class _Pointer, class _Reference> struct std::iterator' is deprecated [-Werror=deprecated-declarations] 108 | class safe_list<T>::iterator: public std::iterator<std::forward_iterator_tag, T> | ^~~~~~~~ Signed-off-by:
Frediano Ziglio <freddy77@gmail.com>
-