[channels,rdpecam] fix integer types and warnings

This commit is contained in:
Armin Novak
2026-02-10 16:02:02 +01:00
parent 8d395b942b
commit e3981d8f02
8 changed files with 60 additions and 51 deletions

View File

@@ -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()

View File

@@ -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);

View File

@@ -22,6 +22,7 @@
#include <winpr/interlocked.h>
#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);

View File

@@ -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;
}
/**

View File

@@ -38,7 +38,7 @@ typedef struct
/* members used to call the callback */
CameraDevice* dev;
int streamIndex;
size_t streamIndex;
ICamHalSampleCapturedCallback sampleCallback;
BOOL streaming;

View File

@@ -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)

View File

@@ -3,6 +3,7 @@
#include <stdlib.h>
#include <math.h>
#include <errno.h>
#include "prim_test.h"