diff --git a/src/camera.c b/src/camera.c index 9f9fd2c..f8b0e93 100644 --- a/src/camera.c +++ b/src/camera.c @@ -122,6 +122,28 @@ mp_pixel_format_bits_per_pixel(MPPixelFormat pixel_format) } } +uint32_t +mp_pixel_format_pixel_depth(MPPixelFormat pixel_format) +{ + g_return_val_if_fail(pixel_format < MP_PIXEL_FMT_MAX, 0); + switch (pixel_format) { + case MP_PIXEL_FMT_BGGR8: + case MP_PIXEL_FMT_GBRG8: + case MP_PIXEL_FMT_GRBG8: + case MP_PIXEL_FMT_RGGB8: + case MP_PIXEL_FMT_UYVY: + case MP_PIXEL_FMT_YUYV: + return 8; + case MP_PIXEL_FMT_GBRG10P: + case MP_PIXEL_FMT_GRBG10P: + case MP_PIXEL_FMT_RGGB10P: + case MP_PIXEL_FMT_BGGR10P: + return 10; + default: + return 0; + } +} + uint32_t mp_pixel_format_width_to_bytes(MPPixelFormat pixel_format, uint32_t width) { diff --git a/src/camera.h b/src/camera.h index f1973eb..c15b254 100644 --- a/src/camera.h +++ b/src/camera.h @@ -30,6 +30,7 @@ uint32_t mp_pixel_format_to_v4l_pixel_format(MPPixelFormat pixel_format); uint32_t mp_pixel_format_to_v4l_bus_code(MPPixelFormat pixel_format); uint32_t mp_pixel_format_bits_per_pixel(MPPixelFormat pixel_format); +uint32_t mp_pixel_format_pixel_depth(MPPixelFormat pixel_format); uint32_t mp_pixel_format_width_to_bytes(MPPixelFormat pixel_format, uint32_t width); uint32_t mp_pixel_format_width_to_colors(MPPixelFormat pixel_format, uint32_t width); uint32_t mp_pixel_format_height_to_colors(MPPixelFormat pixel_format, diff --git a/src/process_pipeline.c b/src/process_pipeline.c index 606b714..a5d6bfb 100644 --- a/src/process_pipeline.c +++ b/src/process_pipeline.c @@ -427,9 +427,11 @@ process_image_for_capture(const uint8_t *image, int count) TIFFSetField(tif, TIFFTAG_CFAPATTERN, 4, "\002\001\001\000"); // BGGR #endif printf("TIFF version %d\n", TIFFLIB_VERSION); - if (camera->whitelevel) { - TIFFSetField(tif, TIFFTAG_WHITELEVEL, 1, &camera->whitelevel); + int whitelevel = camera->whitelevel; + if (!whitelevel) { + whitelevel = (1 << mp_pixel_format_pixel_depth(mode.pixel_format)) - 1; } + TIFFSetField(tif, TIFFTAG_WHITELEVEL, 1, &whitelevel); if (camera->blacklevel) { const float blacklevel = camera->blacklevel; TIFFSetField(tif, TIFFTAG_BLACKLEVEL, 1, &blacklevel);