From e3981d8f02221491260604d102c17cb76fa97a6b Mon Sep 17 00:00:00 2001 From: Armin Novak Date: Tue, 10 Feb 2026 16:02:02 +0100 Subject: [PATCH] [channels,rdpecam] fix integer types and warnings --- channels/rdpecam/CMakeLists.txt | 2 + channels/rdpecam/client/camera.h | 24 ++++----- channels/rdpecam/client/camera_device_main.c | 27 ++++++---- channels/rdpecam/client/v4l/camera_v4l.c | 53 +++++++++---------- channels/rdpecam/client/v4l/camera_v4l.h | 2 +- .../{server => common}/rdpecam-utils.h | 0 channels/rdpecam/server/CMakeLists.txt | 2 +- .../primitives/test/TestPrimitivesYUV.c | 1 + 8 files changed, 60 insertions(+), 51 deletions(-) rename channels/rdpecam/{server => common}/rdpecam-utils.h (100%) diff --git a/channels/rdpecam/CMakeLists.txt b/channels/rdpecam/CMakeLists.txt index 525d8d041..19fd20f1d 100644 --- a/channels/rdpecam/CMakeLists.txt +++ b/channels/rdpecam/CMakeLists.txt @@ -18,12 +18,14 @@ define_channel("rdpecam") if(WITH_SERVER_CHANNELS) + include_directories(common) add_channel_server(${MODULE_PREFIX} ${CHANNEL_NAME}) endif() if(WITH_CLIENT_CHANNELS) option(RDPECAM_CLIENT_CHANNEL_STUB "Only build [MS-RDPECAM] channel stub" OFF) if(NOT RDPECAM_CLIENT_CHANNEL_STUB) + include_directories(common) add_channel_client(${MODULE_PREFIX} ${CHANNEL_NAME}) endif() endif() diff --git a/channels/rdpecam/client/camera.h b/channels/rdpecam/client/camera.h index 35b5fbc7d..ef7375874 100644 --- a/channels/rdpecam/client/camera.h +++ b/channels/rdpecam/client/camera.h @@ -155,7 +155,7 @@ typedef UINT (*ICamHalEnumCallback)(CameraPlugin* ecam, GENERIC_CHANNEL_CALLBACK const char* deviceId, const char* deviceName); /* may run in context of different thread */ -typedef UINT (*ICamHalSampleCapturedCallback)(CameraDevice* dev, int streamIndex, +typedef UINT (*ICamHalSampleCapturedCallback)(CameraDevice* dev, size_t streamIndex, const BYTE* sample, size_t size); /** @brief interface to implement for the camera HAL*/ @@ -181,7 +181,7 @@ struct s_ICamHal * @return if the operation was successful * @since 3.18.0 */ - BOOL (*Activate)(ICamHal* ihal, const char* deviceId, UINT32* errorCode); + BOOL (*Activate)(ICamHal* ihal, const char* deviceId, CAM_ERROR_CODE* errorCode); /** * callback to deactivate a given camera device @@ -191,7 +191,7 @@ struct s_ICamHal * @return if the operation was successful * @since 3.18.0 */ - BOOL (*Deactivate)(ICamHal* ihal, const char* deviceId, UINT32* errorCode); + BOOL (*Deactivate)(ICamHal* ihal, const char* deviceId, CAM_ERROR_CODE* errorCode); /** * callback that returns the list of compatible media types given a set of supported formats @@ -205,7 +205,7 @@ struct s_ICamHal * @return number of matched supported formats */ INT16(*GetMediaTypeDescriptions) - (ICamHal* ihal, const char* deviceId, int streamIndex, + (ICamHal* ihal, const char* deviceId, size_t streamIndex, const CAM_MEDIA_FORMAT_INFO* supportedFormats, size_t nSupportedFormats, CAM_MEDIA_TYPE_DESCRIPTION* mediaTypes, size_t* nMediaTypes); @@ -216,27 +216,27 @@ struct s_ICamHal * @param streamIndex stream index number * @param mediaType * @param callback - * @return 0 on success, a CAM_Error otherwise + * @return \b CAM_ERROR_CODE_None on success, a CAM_Error otherwise */ - UINT(*StartStream) - (ICamHal* ihal, CameraDevice* dev, int streamIndex, const CAM_MEDIA_TYPE_DESCRIPTION* mediaType, - ICamHalSampleCapturedCallback callback); + CAM_ERROR_CODE(*StartStream) + (ICamHal* ihal, CameraDevice* dev, size_t streamIndex, + const CAM_MEDIA_TYPE_DESCRIPTION* mediaType, ICamHalSampleCapturedCallback callback); /** * callback to stop a stream * @param ihal the hal interface * @param deviceId the name of the device * @param streamIndex stream index number - * @return 0 on success, a CAM_Error otherwise + * @return \b CAM_ERROR_CODE_None on success, a CAM_Error otherwise */ - UINT (*StopStream)(ICamHal* ihal, const char* deviceId, int streamIndex); + CAM_ERROR_CODE (*StopStream)(ICamHal* ihal, const char* deviceId, size_t streamIndex); /** * callback to free the ICamHal * @param hal the hal interface - * @return 0 on success, a CAM_Error otherwise + * @return \b CAM_ERROR_CODE_None on success, a CAM_Error otherwise */ - UINT (*Free)(ICamHal* ihal); + CAM_ERROR_CODE (*Free)(ICamHal* ihal); }; typedef UINT (*PREGISTERCAMERAHAL)(IWTSPlugin* plugin, ICamHal* hal); diff --git a/channels/rdpecam/client/camera_device_main.c b/channels/rdpecam/client/camera_device_main.c index 57c52d83f..64dd33d55 100644 --- a/channels/rdpecam/client/camera_device_main.c +++ b/channels/rdpecam/client/camera_device_main.c @@ -22,6 +22,7 @@ #include #include "camera.h" +#include "rdpecam-utils.h" #define TAG CHANNELS_TAG("rdpecam-device.client") @@ -64,14 +65,22 @@ static BOOL ecam_dev_read_media_type(wStream* s, CAM_MEDIA_TYPE_DESCRIPTION* med { WINPR_ASSERT(mediaType); - Stream_Read_UINT8(s, mediaType->Format); + const uint8_t format = Stream_Get_UINT8(s); + if (!rdpecam_valid_CamMediaFormat(format)) + return FALSE; + + mediaType->Format = WINPR_ASSERTING_INT_CAST(CAM_MEDIA_FORMAT, format); Stream_Read_UINT32(s, mediaType->Width); Stream_Read_UINT32(s, mediaType->Height); Stream_Read_UINT32(s, mediaType->FrameRateNumerator); Stream_Read_UINT32(s, mediaType->FrameRateDenominator); Stream_Read_UINT32(s, mediaType->PixelAspectRatioNumerator); Stream_Read_UINT32(s, mediaType->PixelAspectRatioDenominator); - Stream_Read_UINT8(s, mediaType->Flags); + + const uint8_t flags = Stream_Get_UINT8(s); + if (!rdpecam_valid_MediaTypeDescriptionFlags(flags)) + return FALSE; + mediaType->Flags = WINPR_ASSERTING_INT_CAST(CAM_MEDIA_TYPE_DESCRIPTION_FLAGS, flags); return TRUE; } @@ -163,12 +172,12 @@ static UINT ecam_dev_send_pending(CameraDevice* dev, size_t streamIndex, CameraD return ecam_dev_send_sample_response(dev, streamIndex, encodedSample, encodedSize); } -static UINT ecam_dev_sample_captured_callback(CameraDevice* dev, int streamIndex, +static UINT ecam_dev_sample_captured_callback(CameraDevice* dev, size_t streamIndex, const BYTE* sample, size_t size) { WINPR_ASSERT(dev); - if ((streamIndex >= ECAM_DEVICE_MAX_STREAMS) || (streamIndex < 0)) + if (streamIndex >= ECAM_DEVICE_MAX_STREAMS) return ERROR_INVALID_INDEX; CameraDeviceStream* stream = &dev->streams[streamIndex]; @@ -228,7 +237,7 @@ static UINT ecam_dev_sample_captured_callback(CameraDevice* dev, int streamIndex Stream_SealLength(stream->pendingSample); stream->haveSample = TRUE; - ret = ecam_dev_send_pending(dev, WINPR_ASSERTING_INT_CAST(size_t, streamIndex), stream); + ret = ecam_dev_send_pending(dev, streamIndex, stream); out: LeaveCriticalSection(&stream->lock); @@ -367,8 +376,8 @@ static UINT ecam_dev_process_start_streams_request(CameraDevice* dev, return ERROR_INVALID_DATA; } - UINT error = dev->ihal->StartStream(dev->ihal, dev, streamIndex, &mediaType, - ecam_dev_sample_captured_callback); + const CAM_ERROR_CODE error = dev->ihal->StartStream(dev->ihal, dev, streamIndex, &mediaType, + ecam_dev_sample_captured_callback); if (error) { WLog_ERR(TAG, "StartStream failure"); @@ -656,7 +665,7 @@ static UINT ecam_dev_process_activate_device_request(CameraDevice* dev, WINPR_ATTR_UNUSED wStream* s) { WINPR_ASSERT(dev); - UINT32 errorCode = 0; + CAM_ERROR_CODE errorCode = CAM_ERROR_CODE_None; if (dev->ihal->Activate(dev->ihal, dev->deviceId, &errorCode)) return ecam_channel_send_generic_msg(dev->ecam, hchannel, CAM_MSG_ID_SuccessResponse); @@ -679,7 +688,7 @@ static UINT ecam_dev_process_deactivate_device_request(CameraDevice* dev, for (size_t i = 0; i < ECAM_DEVICE_MAX_STREAMS; i++) ecam_dev_stop_stream(dev, i); - UINT32 errorCode = 0; + CAM_ERROR_CODE errorCode = CAM_ERROR_CODE_None; if (dev->ihal->Deactivate(dev->ihal, dev->deviceId, &errorCode)) return ecam_channel_send_generic_msg(dev->ecam, hchannel, CAM_MSG_ID_SuccessResponse); diff --git a/channels/rdpecam/client/v4l/camera_v4l.c b/channels/rdpecam/client/v4l/camera_v4l.c index 223ebd412..693111dd3 100644 --- a/channels/rdpecam/client/v4l/camera_v4l.c +++ b/channels/rdpecam/client/v4l/camera_v4l.c @@ -45,7 +45,7 @@ typedef struct } CamV4lHal; -static CamV4lStream* cam_v4l_stream_create(const char* deviceId, int streamIndex); +static CamV4lStream* cam_v4l_stream_create(const char* deviceId, size_t streamIndex); static void cam_v4l_stream_free(void* obj); static void cam_v4l_stream_close_device(CamV4lStream* stream); static UINT cam_v4l_stream_stop(CamV4lStream* stream); @@ -154,21 +154,21 @@ static int cam_v4l_open_device(const char* deviceId, int flags) return fd; } -static BOOL cam_v4l_activate(ICamHal* ihal, const char* deviceId, UINT32* errorCode) +static BOOL cam_v4l_activate(ICamHal* ihal, const char* deviceId, CAM_ERROR_CODE* errorCode) { WINPR_UNUSED(ihal); WINPR_UNUSED(deviceId); - *errorCode = 0; + *errorCode = CAM_ERROR_CODE_None; return TRUE; } -static BOOL cam_v4l_deactivate(ICamHal* ihal, const char* deviceId, UINT32* errorCode) +static BOOL cam_v4l_deactivate(ICamHal* ihal, const char* deviceId, CAM_ERROR_CODE* errorCode) { WINPR_UNUSED(ihal); WINPR_UNUSED(deviceId); - *errorCode = 0; + *errorCode = CAM_ERROR_CODE_None; return TRUE; } @@ -179,7 +179,7 @@ static BOOL cam_v4l_deactivate(ICamHal* ihal, const char* deviceId, UINT32* erro * in */ static INT16 cam_v4l_get_media_type_descriptions(ICamHal* ihal, const char* deviceId, - int streamIndex, + size_t streamIndex, const CAM_MEDIA_FORMAT_INFO* supportedFormats, size_t nSupportedFormats, CAM_MEDIA_TYPE_DESCRIPTION* mediaTypes, @@ -520,7 +520,8 @@ void cam_v4l_stream_close_device(CamV4lStream* stream) * * @return Null on failure, otherwise pointer to new CamV4lStream */ -static CamV4lStream* cam_v4l_stream_create(const char* deviceId, int streamIndex) +WINPR_ATTR_MALLOC(cam_v4l_stream_free, 1) +CamV4lStream* cam_v4l_stream_create(const char* deviceId, size_t streamIndex) { CamV4lStream* stream = calloc(1, sizeof(CamV4lStream)); @@ -548,10 +549,10 @@ static CamV4lStream* cam_v4l_stream_create(const char* deviceId, int streamIndex * * @return 0 on success, otherwise a Win32 error code */ -UINT cam_v4l_stream_stop(CamV4lStream* stream) +CAM_ERROR_CODE cam_v4l_stream_stop(CamV4lStream* stream) { if (!stream || !stream->streaming) - return CHANNEL_RC_OK; + return CAM_ERROR_CODE_None; stream->streaming = FALSE; /* this will terminate capture thread */ @@ -578,33 +579,29 @@ UINT cam_v4l_stream_stop(CamV4lStream* stream) LeaveCriticalSection(&stream->lock); - return CHANNEL_RC_OK; + return CAM_ERROR_CODE_None; } -/** - * Function description - * - * @return 0 on success, otherwise CAM_ERROR_CODE - */ -static UINT cam_v4l_stream_start(ICamHal* ihal, CameraDevice* dev, int streamIndex, - const CAM_MEDIA_TYPE_DESCRIPTION* mediaType, - ICamHalSampleCapturedCallback callback) +static CAM_ERROR_CODE cam_v4l_stream_start(ICamHal* ihal, CameraDevice* dev, size_t streamIndex, + const CAM_MEDIA_TYPE_DESCRIPTION* mediaType, + ICamHalSampleCapturedCallback callback) { CamV4lHal* hal = (CamV4lHal*)ihal; + WINPR_ASSERT(hal); CamV4lStream* stream = (CamV4lStream*)HashTable_GetItemValue(hal->streams, dev->deviceId); if (!stream) { - WLog_ERR(TAG, "Unable to find stream, device %s, streamIndex %d", dev->deviceId, + WLog_ERR(TAG, "Unable to find stream, device %s, streamIndex %" PRIuz, dev->deviceId, streamIndex); return CAM_ERROR_CODE_UnexpectedError; } if (stream->streaming) { - WLog_ERR(TAG, "Streaming already in progress, device %s, streamIndex %d", dev->deviceId, - streamIndex); + WLog_ERR(TAG, "Streaming already in progress, device %s, streamIndex %" PRIuz, + dev->deviceId, streamIndex); return CAM_ERROR_CODE_UnexpectedError; } @@ -724,7 +721,7 @@ static UINT cam_v4l_stream_start(ICamHal* ihal, CameraDevice* dev, int streamInd mediaType->Width, mediaType->Height, mediaType->FrameRateNumerator, mediaType->FrameRateDenominator); - return CHANNEL_RC_OK; + return CAM_ERROR_CODE_None; } /** @@ -732,15 +729,15 @@ static UINT cam_v4l_stream_start(ICamHal* ihal, CameraDevice* dev, int streamInd * * @return 0 on success, otherwise a Win32 error code */ -static UINT cam_v4l_stream_stop_by_device_id(ICamHal* ihal, const char* deviceId, - WINPR_ATTR_UNUSED int streamIndex) +static CAM_ERROR_CODE cam_v4l_stream_stop_by_device_id(ICamHal* ihal, const char* deviceId, + WINPR_ATTR_UNUSED size_t streamIndex) { CamV4lHal* hal = (CamV4lHal*)ihal; CamV4lStream* stream = (CamV4lStream*)HashTable_GetItemValue(hal->streams, deviceId); if (!stream) - return CHANNEL_RC_OK; + return CAM_ERROR_CODE_NotInitialized; return cam_v4l_stream_stop(stream); } @@ -768,18 +765,18 @@ void cam_v4l_stream_free(void* obj) * * @return 0 on success, otherwise a Win32 error code */ -static UINT cam_v4l_free(ICamHal* ihal) +static CAM_ERROR_CODE cam_v4l_free(ICamHal* ihal) { CamV4lHal* hal = (CamV4lHal*)ihal; if (hal == NULL) - return ERROR_INVALID_PARAMETER; + return CAM_ERROR_CODE_NotInitialized; HashTable_Free(hal->streams); free(hal); - return CHANNEL_RC_OK; + return CAM_ERROR_CODE_None; } /** diff --git a/channels/rdpecam/client/v4l/camera_v4l.h b/channels/rdpecam/client/v4l/camera_v4l.h index 8f1a32fec..370154b5b 100644 --- a/channels/rdpecam/client/v4l/camera_v4l.h +++ b/channels/rdpecam/client/v4l/camera_v4l.h @@ -38,7 +38,7 @@ typedef struct /* members used to call the callback */ CameraDevice* dev; - int streamIndex; + size_t streamIndex; ICamHalSampleCapturedCallback sampleCallback; BOOL streaming; diff --git a/channels/rdpecam/server/rdpecam-utils.h b/channels/rdpecam/common/rdpecam-utils.h similarity index 100% rename from channels/rdpecam/server/rdpecam-utils.h rename to channels/rdpecam/common/rdpecam-utils.h diff --git a/channels/rdpecam/server/CMakeLists.txt b/channels/rdpecam/server/CMakeLists.txt index 8d7d25abf..bd843379f 100644 --- a/channels/rdpecam/server/CMakeLists.txt +++ b/channels/rdpecam/server/CMakeLists.txt @@ -17,7 +17,7 @@ define_channel_server("rdpecam") -set(${MODULE_PREFIX}_SRCS camera_device_enumerator_main.c camera_device_main.c rdpecam-utils.h) +set(${MODULE_PREFIX}_SRCS camera_device_enumerator_main.c camera_device_main.c) set(${MODULE_PREFIX}_LIBS freerdp) diff --git a/libfreerdp/primitives/test/TestPrimitivesYUV.c b/libfreerdp/primitives/test/TestPrimitivesYUV.c index 0a91c012c..2bbda85d8 100644 --- a/libfreerdp/primitives/test/TestPrimitivesYUV.c +++ b/libfreerdp/primitives/test/TestPrimitivesYUV.c @@ -3,6 +3,7 @@ #include #include +#include #include "prim_test.h"