From c409c327f98d1707018b385a134e167570a6f244 Mon Sep 17 00:00:00 2001
From: "Ryan C. Gordon" <[EMAIL REDACTED]>
Date: Sat, 10 Oct 2026 16:28:38 -0400
Subject: [PATCH] camera: FIXME removal: internal callback where userdata
wasn't first parameter.
---
src/camera/SDL_camera.c | 8 +++-----
src/camera/SDL_syscamera.h | 2 +-
src/camera/android/SDL_camera_android.c | 2 +-
src/camera/coremedia/SDL_camera_coremedia.m | 2 +-
src/camera/mediafoundation/SDL_camera_mediafoundation.c | 2 +-
src/camera/openharmony/SDL_camera_openharmony.c | 6 +++---
src/camera/v4l2/SDL_camera_v4l2.c | 4 ++--
src/camera/vita/SDL_camera_vita.c | 2 +-
8 files changed, 13 insertions(+), 15 deletions(-)
diff --git a/src/camera/SDL_camera.c b/src/camera/SDL_camera.c
index a0cd468fe23cd..b39339c215a0b 100644
--- a/src/camera/SDL_camera.c
+++ b/src/camera/SDL_camera.c
@@ -626,7 +626,7 @@ void SDL_CameraPermissionOutcome(SDL_Camera *device, bool approved)
typedef struct FindOnePhysicalCameraByCallbackData
{
- bool (*callback)(SDL_Camera *device, void *userdata);
+ bool (*callback)(void *userdata, SDL_Camera *device);
void *userdata;
SDL_Camera *device;
} FindOnePhysicalCameraByCallbackData;
@@ -635,22 +635,20 @@ static bool SDLCALL FindOnePhysicalCameraByCallback(void *userdata, const SDL_Ha
{
FindOnePhysicalCameraByCallbackData *data = (FindOnePhysicalCameraByCallbackData *) userdata;
SDL_Camera *device = (SDL_Camera *) value;
- if (data->callback(device, data->userdata)) {
+ if (data->callback(data->userdata, device)) {
data->device = device;
return false; // stop iterating.
}
return true; // keep iterating.
}
-// !!! FIXME: this doesn't follow SDL convention of `userdata` being the first param of the callback.
-SDL_Camera *SDL_FindPhysicalCameraByCallback(bool (*callback)(SDL_Camera *device, void *userdata), void *userdata)
+SDL_Camera *SDL_FindPhysicalCameraByCallback(bool (*callback)(void *userdata, SDL_Camera *device), void *userdata)
{
if (!SDL_GetCurrentCameraDriver()) {
SDL_SetError("Camera subsystem is not initialized");
return NULL;
}
-
FindOnePhysicalCameraByCallbackData data = { callback, userdata, NULL };
SDL_LockRWLockForReading(camera_driver.device_hash_lock);
SDL_IterateHashTable(camera_driver.device_hash, FindOnePhysicalCameraByCallback, &data);
diff --git a/src/camera/SDL_syscamera.h b/src/camera/SDL_syscamera.h
index 4b4c5be45c51b..eca8d1e3cecfa 100644
--- a/src/camera/SDL_syscamera.h
+++ b/src/camera/SDL_syscamera.h
@@ -37,7 +37,7 @@ extern SDL_Camera *SDL_AddCamera(const char *name, SDL_CameraPosition position,
extern void SDL_CameraDisconnected(SDL_Camera *device);
// Find an SDL_Camera, selected by a callback. NULL if not found. DOES NOT LOCK THE DEVICE.
-extern SDL_Camera *SDL_FindPhysicalCameraByCallback(bool (*callback)(SDL_Camera *device, void *userdata), void *userdata);
+extern SDL_Camera *SDL_FindPhysicalCameraByCallback(bool (*callback)(void *userdata, SDL_Camera *device), void *userdata);
// Backends should call this when the user has approved/denied access to a camera.
extern void SDL_CameraPermissionOutcome(SDL_Camera *device, bool approved);
diff --git a/src/camera/android/SDL_camera_android.c b/src/camera/android/SDL_camera_android.c
index ab6fb9dacbc78..b55ba8b0de38f 100644
--- a/src/camera/android/SDL_camera_android.c
+++ b/src/camera/android/SDL_camera_android.c
@@ -706,7 +706,7 @@ static void GatherCameraSpecs(const char *devid, CameraFormatAddData *add_data,
pACameraMetadata_free(metadata);
}
-static bool FindAndroidCameraByID(SDL_Camera *device, void *userdata)
+static bool FindAndroidCameraByID(void *userdata, SDL_Camera *device)
{
const char *devid = (const char *) userdata;
return (SDL_strcmp(devid, (const char *) device->handle) == 0);
diff --git a/src/camera/coremedia/SDL_camera_coremedia.m b/src/camera/coremedia/SDL_camera_coremedia.m
index a780a067a8e2e..36f84e7be29fb 100644
--- a/src/camera/coremedia/SDL_camera_coremedia.m
+++ b/src/camera/coremedia/SDL_camera_coremedia.m
@@ -530,7 +530,7 @@ static void GatherCameraSpecs(AVCaptureDevice *device, CameraFormatAddData *add_
}
}
-static bool FindCoreMediaCameraByUniqueID(SDL_Camera *device, void *userdata)
+static bool FindCoreMediaCameraByUniqueID(void *userdata, SDL_Camera *device)
{
NSString *uniqueid = (__bridge NSString *) userdata;
AVCaptureDevice *avdev = (__bridge AVCaptureDevice *) device->handle;
diff --git a/src/camera/mediafoundation/SDL_camera_mediafoundation.c b/src/camera/mediafoundation/SDL_camera_mediafoundation.c
index f04b77b595a63..0bd1bf8397fca 100644
--- a/src/camera/mediafoundation/SDL_camera_mediafoundation.c
+++ b/src/camera/mediafoundation/SDL_camera_mediafoundation.c
@@ -983,7 +983,7 @@ static void GatherCameraSpecs(IMFMediaSource *source, CameraFormatAddData *add_d
IMFPresentationDescriptor_Release(presentdesc);
}
-static bool FindMediaFoundationCameraBySymlink(SDL_Camera *device, void *userdata)
+static bool FindMediaFoundationCameraBySymlink(void *userdata, SDL_Camera *device)
{
return (SDL_strcmp((const char *) device->handle, (const char *) userdata) == 0);
}
diff --git a/src/camera/openharmony/SDL_camera_openharmony.c b/src/camera/openharmony/SDL_camera_openharmony.c
index 12fe3cdd5b968..943d8614e7b06 100644
--- a/src/camera/openharmony/SDL_camera_openharmony.c
+++ b/src/camera/openharmony/SDL_camera_openharmony.c
@@ -209,20 +209,20 @@ static Camera_Format ConvertSDLFormatToOpenHarmony(SDL_PixelFormat fmt)
}
}
-static bool FindOpenHarmonyCameraByDevicePtr(SDL_Camera *device, void *userdata)
+static bool FindOpenHarmonyCameraByDevicePtr(void *userdata, SDL_Camera *device)
{
const Camera_Device *ohdevice = (const Camera_Device *) userdata;
return (SDL_strcmp(ohdevice->cameraId, ((const Camera_Device *) device->handle)->cameraId) == 0);
}
-static bool FindOpenHarmonyCameraByImageReceiver(SDL_Camera *device, void *userdata)
+static bool FindOpenHarmonyCameraByImageReceiver(void *userdata, SDL_Camera *device)
{
OH_ImageReceiverNative *receiver = (OH_ImageReceiverNative *) userdata;
struct SDL_PrivateCameraData *hidden = device->hidden;
return (hidden && (hidden->image_receiver == receiver));
}
-static bool FindOpenHarmonyCameraByInput(SDL_Camera *device, void *userdata)
+static bool FindOpenHarmonyCameraByInput(void *userdata, SDL_Camera *device)
{
Camera_Input *input = (Camera_Input *) userdata;
struct SDL_PrivateCameraData *hidden = device->hidden;
diff --git a/src/camera/v4l2/SDL_camera_v4l2.c b/src/camera/v4l2/SDL_camera_v4l2.c
index 938f5a3b86ed7..42c0c2c5ab8c0 100644
--- a/src/camera/v4l2/SDL_camera_v4l2.c
+++ b/src/camera/v4l2/SDL_camera_v4l2.c
@@ -672,7 +672,7 @@ static bool V4L2_OpenDevice(SDL_Camera *device, const SDL_CameraSpec *spec)
return true;
}
-static bool FindV4L2CameraByBusInfoCallback(SDL_Camera *device, void *userdata)
+static bool FindV4L2CameraByBusInfoCallback(void *userdata, SDL_Camera *device)
{
const V4L2DeviceHandle *handle = (const V4L2DeviceHandle *) device->handle;
return (SDL_strcmp(handle->bus_info, (const char *) userdata) == 0);
@@ -897,7 +897,7 @@ static void V4L2_FreeDeviceHandle(SDL_Camera *device)
}
#ifdef SDL_USE_LIBUDEV
-static bool FindV4L2CameraByPathCallback(SDL_Camera *device, void *userdata)
+static bool FindV4L2CameraByPathCallback(void *userdata, SDL_Camera *device)
{
const V4L2DeviceHandle *handle = (const V4L2DeviceHandle *) device->handle;
return (SDL_strcmp(handle->path, (const char *) userdata) == 0);
diff --git a/src/camera/vita/SDL_camera_vita.c b/src/camera/vita/SDL_camera_vita.c
index 36b75b522b1c2..86b2198b1f5e9 100644
--- a/src/camera/vita/SDL_camera_vita.c
+++ b/src/camera/vita/SDL_camera_vita.c
@@ -71,7 +71,7 @@ static void GatherCameraSpecs(Sint32 devid, CameraFormatAddData *add_data, char
}
}
-static bool FindVitaCameraByID(SDL_Camera *device, void *userdata)
+static bool FindVitaCameraByID(void *userdata, SDL_Camera *device)
{
Sint32 devid = (Sint32) userdata;
return (devid == (Sint32)device->handle);