Parcourir la source

Camera: Bugfix: `ChooseBestCameraSpec` doesn't set camera colorspace

Aleksander il y a 9 mois
Parent
commit
596c0af0f3
1 fichiers modifiés avec 11 ajouts et 6 suppressions
  1. 11 6
      src/camera/SDL_camera.c

+ 11 - 6
src/camera/SDL_camera.c

@@ -1006,22 +1006,27 @@ static void ChooseBestCameraSpec(SDL_CameraDevice *device, const SDL_CameraSpec
 
         // okay, we have what we think is the best resolution, now we just need the best format that supports it...
         const SDL_PixelFormatEnum wantfmt = spec->format;
-        SDL_PixelFormatEnum bestfmt = SDL_PIXELFORMAT_UNKNOWN;
+        SDL_PixelFormatEnum best_format = SDL_PIXELFORMAT_UNKNOWN;
+        SDL_Colorspace best_colorspace = SDL_COLORSPACE_UNKNOWN;
         for (int i = 0; i < num_specs; i++) {
             const SDL_CameraSpec *thisspec = &device->all_specs[i];
             if ((thisspec->width == closest->width) && (thisspec->height == closest->height)) {
-                if (bestfmt == SDL_PIXELFORMAT_UNKNOWN) {
-                    bestfmt = thisspec->format;  // spec list is sorted by what we consider "best" format, so unless we find an exact match later, first size match is the one!
+                if (best_format == SDL_PIXELFORMAT_UNKNOWN) {
+                    best_format = thisspec->format;  // spec list is sorted by what we consider "best" format, so unless we find an exact match later, first size match is the one!
+                    best_colorspace = thisspec->colorspace;
                 }
                 if (thisspec->format == wantfmt) {
-                    bestfmt = thisspec->format;
+                    best_format = thisspec->format;
+                    best_colorspace = thisspec->colorspace;
                     break;  // exact match, stop looking.
                 }
             }
         }
 
-        SDL_assert(bestfmt != SDL_PIXELFORMAT_UNKNOWN);
-        closest->format = bestfmt;
+        SDL_assert(best_format != SDL_PIXELFORMAT_UNKNOWN);
+        SDL_assert(best_colorspace != SDL_COLORSPACE_UNKNOWN);
+        closest->format = best_format;
+        closest->colorspace = best_colorspace;
 
         // We have a resolution and a format, find the closest framerate...
         const float wantfps = spec->framerate_denominator ? ((float)spec->framerate_numerator / spec->framerate_denominator) : 0.0f;