diff --git a/channels/rdpecam/client/v4l/camera_v4l.c b/channels/rdpecam/client/v4l/camera_v4l.c index d5219d1a5..7f95bbb9b 100644 --- a/channels/rdpecam/client/v4l/camera_v4l.c +++ b/channels/rdpecam/client/v4l/camera_v4l.c @@ -356,7 +356,9 @@ static size_t cam_v4l_stream_alloc_buffers(CamV4lStream* stream) if (ioctl(stream->fd, VIDIOC_REQBUFS, &rbuffer) < 0 || rbuffer.count == 0) { - WLog_ERR(TAG, "Failure in VIDIOC_REQBUFS, errno %d, count %d", errno, rbuffer.count); + char buffer[64] = { 0 }; + WLog_ERR(TAG, "Failure in VIDIOC_REQBUFS, errno %s [%d], count %d", + winpr_strerror(errno, buffer, sizeof(buffer)), errno, rbuffer.count); return 0; } @@ -372,35 +374,41 @@ static size_t cam_v4l_stream_alloc_buffers(CamV4lStream* stream) for (unsigned int i = 0; i < rbuffer.count; i++) { - struct v4l2_buffer buffer = { 0 }; - buffer.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; - buffer.memory = V4L2_MEMORY_MMAP; - buffer.index = i; + struct v4l2_buffer vbuffer = { 0 }; + vbuffer.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; + vbuffer.memory = V4L2_MEMORY_MMAP; + vbuffer.index = i; - if (ioctl(stream->fd, VIDIOC_QUERYBUF, &buffer) < 0) + if (ioctl(stream->fd, VIDIOC_QUERYBUF, &vbuffer) < 0) { - WLog_ERR(TAG, "Failure in VIDIOC_QUERYBUF, errno %d", errno); + char buffer[64] = { 0 }; + WLog_ERR(TAG, "Failure in VIDIOC_QUERYBUF, errno %s [%d]", + winpr_strerror(errno, buffer, sizeof(buffer)), errno); cam_v4l_stream_free_buffers(stream); return 0; } - stream->buffers[i].start = mmap(NULL, buffer.length, PROT_READ | PROT_WRITE, MAP_SHARED, - stream->fd, buffer.m.offset); + stream->buffers[i].start = mmap(NULL, vbuffer.length, PROT_READ | PROT_WRITE, MAP_SHARED, + stream->fd, vbuffer.m.offset); if (MAP_FAILED == stream->buffers[i].start) { - WLog_ERR(TAG, "Failure in mmap, errno %d", errno); + char buffer[64] = { 0 }; + WLog_ERR(TAG, "Failure in mmap, errno %s [%d]", + winpr_strerror(errno, buffer, sizeof(buffer)), errno); cam_v4l_stream_free_buffers(stream); return 0; } - stream->buffers[i].length = buffer.length; + stream->buffers[i].length = vbuffer.length; - WLog_DBG(TAG, "Buffer %d mapped, size: %d", i, buffer.length); + WLog_DBG(TAG, "Buffer %d mapped, size: %d", i, vbuffer.length); - if (ioctl(stream->fd, VIDIOC_QBUF, &buffer) < 0) + if (ioctl(stream->fd, VIDIOC_QBUF, &vbuffer) < 0) { - WLog_ERR(TAG, "Failure in VIDIOC_QBUF, errno %d", errno); + char buffer[64] = { 0 }; + WLog_ERR(TAG, "Failure in VIDIOC_QBUF, errno %s [%d]", + winpr_strerror(errno, buffer, sizeof(buffer)), errno); cam_v4l_stream_free_buffers(stream); return 0; } @@ -437,7 +445,9 @@ static UINT cam_v4l_stream_capture_thread(void* param) } else if (retVal < 0) { - WLog_DBG(TAG, "Failure in poll, errno %d", errno); + char buffer[64] = { 0 }; + WLog_DBG(TAG, "Failure in poll, errno %s [%d]", + winpr_strerror(errno, buffer, sizeof(buffer)), errno); Sleep(CAM_V4L2_CAPTURE_THREAD_SLEEP_MS); /* trying to recover */ continue; } @@ -464,7 +474,9 @@ static UINT cam_v4l_stream_capture_thread(void* param) /* enqueue buffer back */ if (ioctl(fd, VIDIOC_QBUF, &buf) == -1) { - WLog_ERR(TAG, "Failure in VIDIOC_QBUF, errno %d", errno); + char buffer[64] = { 0 }; + WLog_ERR(TAG, "Failure in VIDIOC_QBUF, errno %s [%d]", + winpr_strerror(errno, buffer, sizeof(buffer)), errno); } } } @@ -537,7 +549,9 @@ UINT cam_v4l_stream_stop(CamV4lStream* stream) enum v4l2_buf_type type = V4L2_BUF_TYPE_VIDEO_CAPTURE; if (ioctl(stream->fd, VIDIOC_STREAMOFF, &type) < 0) { - WLog_ERR(TAG, "Failure in VIDIOC_STREAMOFF, errno %d", errno); + char buffer[64] = { 0 }; + WLog_ERR(TAG, "Failure in VIDIOC_STREAMOFF, errno %s [%d]", + winpr_strerror(errno, buffer, sizeof(buffer)), errno); } cam_v4l_stream_free_buffers(stream); @@ -611,7 +625,9 @@ static UINT cam_v4l_stream_start(ICamHal* ihal, CameraDevice* dev, int streamInd /* set format and frame size */ if (ioctl(stream->fd, VIDIOC_S_FMT, &video_fmt) < 0) { - WLog_ERR(TAG, "Failure in VIDIOC_S_FMT, errno %d", errno); + char buffer[64] = { 0 }; + WLog_ERR(TAG, "Failure in VIDIOC_S_FMT, errno %s [%d]", + winpr_strerror(errno, buffer, sizeof(buffer)), errno); cam_v4l_stream_close_device(stream); return CAM_ERROR_CODE_InvalidMediaType; } @@ -635,7 +651,9 @@ static UINT cam_v4l_stream_start(ICamHal* ihal, CameraDevice* dev, int streamInd if (ioctl(stream->fd, VIDIOC_S_PARM, &sp2) < 0) { - WLog_INFO(TAG, "Failed to set the framerate, errno %d", errno); + char buffer[64] = { 0 }; + WLog_INFO(TAG, "Failed to set the framerate, errno %s [%d]", + winpr_strerror(errno, buffer, sizeof(buffer)), errno); } } @@ -666,7 +684,9 @@ static UINT cam_v4l_stream_start(ICamHal* ihal, CameraDevice* dev, int streamInd enum v4l2_buf_type type = V4L2_BUF_TYPE_VIDEO_CAPTURE; if (ioctl(stream->fd, VIDIOC_STREAMON, &type) < 0) { - WLog_ERR(TAG, "Failure in VIDIOC_STREAMON, errno %d", errno); + char buffer[64] = { 0 }; + WLog_ERR(TAG, "Failure in VIDIOC_STREAMON, errno %s [%d]", + winpr_strerror(errno, buffer, sizeof(buffer)), errno); cam_v4l_stream_stop(stream); return CAM_ERROR_CODE_UnexpectedError; } diff --git a/packaging/deb/freerdp-nightly/control b/packaging/deb/freerdp-nightly/control index d410a3ec5..5fb7ea241 100644 --- a/packaging/deb/freerdp-nightly/control +++ b/packaging/deb/freerdp-nightly/control @@ -45,6 +45,10 @@ Build-Depends: libpam0g-dev, uuid-dev, libjson-c-dev | libcjson-dev, + libsdl2-2.0-0, + libsdl2-dev, + libsdl2-ttf-dev, + libsdl2-image-dev, libsdl3-0 | libsdl2-2.0-0, libsdl3-dev | libsdl2-dev, libsdl3-ttf-dev | libsdl2-ttf-dev, diff --git a/packaging/deb/freerdp-nightly/rules b/packaging/deb/freerdp-nightly/rules index f699e6256..afaf47a92 100755 --- a/packaging/deb/freerdp-nightly/rules +++ b/packaging/deb/freerdp-nightly/rules @@ -4,10 +4,16 @@ NULL = DEB_HOST_ARCH=$(shell dpkg-architecture -qDEB_HOST_ARCH) DEB_FDK_SUPPORT=$(shell dpkg-query -s libfdk-aac-dev 2>&1 >/dev/null; echo $$?) +DEB_SDL3_SUPPORT=$(shell dpkg-query -s libsdl3-dev libsdl3-image-dev libsdl3-ttf-dev 2>&1 >/dev/null; echo $$?) ifeq ($(DEB_FDK_SUPPORT),0) AAC_SUPPORT = -DWITH_FDK_AAC=ON endif +ifeq ($(DEB_SDL3_SUPPORT),0) + SDL3_SUPPORT = -DWITH_CLIENT_SDL3=ON +else + SDL3_SUPPORT = -DWITH_CLIENT_SDL3=OFF +endif SANITIZE_ADDRESS = -DWITH_SANITIZE_ADDRESS=ON DEB_CMAKE_EXTRA_FLAGS := -GNinja \ @@ -38,6 +44,7 @@ DEB_CMAKE_EXTRA_FLAGS := -GNinja \ -DWITH_TIMEZONE_FROM_FILE=ON \ -DSDL_USE_COMPILED_RESOURCES=OFF \ -DWITH_SDL_IMAGE_DIALOGS=ON \ + -DWITH_CLIENT_SDL_VERSIONED=ON \ -DRDTK_FORCE_STATIC_BUILD=ON \ -DUWAC_FORCE_STATIC_BUILD=ON \ -DWITH_BINARY_VERSIONING=ON \ @@ -53,6 +60,7 @@ DEB_CMAKE_EXTRA_FLAGS := -GNinja \ -DSAMPLE_USE_VENDOR_PRODUCT_CONFIG_DIR=ON \ -DSDL_USE_VENDOR_PRODUCT_CONFIG_DIR=ON \ $(AAC_SUPPORT) \ + $(SDL3_SUPPORT) \ $(SANITIZE_ADDRESS) \ $(NULL)