camera.h 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. #pragma once
  2. #include <linux/v4l2-subdev.h>
  3. #include <stdbool.h>
  4. #include <stdint.h>
  5. #include <sys/wait.h>
  6. typedef enum {
  7. MP_PIXEL_FMT_UNSUPPORTED,
  8. MP_PIXEL_FMT_BGGR8,
  9. MP_PIXEL_FMT_GBRG8,
  10. MP_PIXEL_FMT_GRBG8,
  11. MP_PIXEL_FMT_RGGB8,
  12. MP_PIXEL_FMT_BGGR10P,
  13. MP_PIXEL_FMT_GBRG10P,
  14. MP_PIXEL_FMT_GRBG10P,
  15. MP_PIXEL_FMT_RGGB10P,
  16. MP_PIXEL_FMT_UYVY,
  17. MP_PIXEL_FMT_YUYV,
  18. MP_PIXEL_FMT_MAX,
  19. } MPPixelFormat;
  20. const char *mp_pixel_format_to_str(MPPixelFormat pixel_format);
  21. MPPixelFormat mp_pixel_format_from_str(const char *str);
  22. MPPixelFormat mp_pixel_format_from_v4l_pixel_format(uint32_t v4l_pixel_format);
  23. MPPixelFormat mp_pixel_format_from_v4l_bus_code(uint32_t v4l_bus_code);
  24. uint32_t mp_pixel_format_to_v4l_pixel_format(MPPixelFormat pixel_format);
  25. uint32_t mp_pixel_format_to_v4l_bus_code(MPPixelFormat pixel_format);
  26. uint32_t mp_pixel_format_bits_per_pixel(MPPixelFormat pixel_format);
  27. uint32_t mp_pixel_format_pixel_depth(MPPixelFormat pixel_format);
  28. const char *mp_pixel_format_cfa(MPPixelFormat pixel_format);
  29. uint32_t mp_pixel_format_width_to_bytes(MPPixelFormat pixel_format, uint32_t width);
  30. uint32_t mp_pixel_format_width_to_colors(MPPixelFormat pixel_format, uint32_t width);
  31. uint32_t mp_pixel_format_height_to_colors(MPPixelFormat pixel_format,
  32. uint32_t height);
  33. typedef struct {
  34. MPPixelFormat pixel_format;
  35. struct v4l2_fract frame_interval;
  36. uint32_t width;
  37. uint32_t height;
  38. } MPCameraMode;
  39. bool mp_camera_mode_is_equivalent(const MPCameraMode *m1, const MPCameraMode *m2);
  40. typedef struct {
  41. uint32_t index;
  42. uint8_t *data;
  43. int fd;
  44. } MPBuffer;
  45. typedef struct _MPCamera MPCamera;
  46. MPCamera *mp_camera_new(int video_fd, int subdev_fd);
  47. void mp_camera_free(MPCamera *camera);
  48. void mp_camera_add_bg_task(MPCamera *camera, pid_t pid);
  49. void mp_camera_wait_bg_tasks(MPCamera *camera);
  50. bool mp_camera_check_task_complete(MPCamera *camera, pid_t pid);
  51. bool mp_camera_is_subdev(MPCamera *camera);
  52. int mp_camera_get_video_fd(MPCamera *camera);
  53. int mp_camera_get_subdev_fd(MPCamera *camera);
  54. const MPCameraMode *mp_camera_get_mode(const MPCamera *camera);
  55. bool mp_camera_try_mode(MPCamera *camera, MPCameraMode *mode);
  56. bool mp_camera_set_mode(MPCamera *camera, MPCameraMode *mode);
  57. bool mp_camera_start_capture(MPCamera *camera);
  58. bool mp_camera_stop_capture(MPCamera *camera);
  59. bool mp_camera_is_capturing(MPCamera *camera);
  60. bool mp_camera_capture_buffer(MPCamera *camera, MPBuffer *buffer);
  61. bool mp_camera_release_buffer(MPCamera *camera, uint32_t buffer_index);
  62. typedef struct _MPCameraModeList MPCameraModeList;
  63. MPCameraModeList *mp_camera_list_supported_modes(MPCamera *camera);
  64. MPCameraModeList *mp_camera_list_available_modes(MPCamera *camera);
  65. MPCameraMode *mp_camera_mode_list_get(MPCameraModeList *list);
  66. MPCameraModeList *mp_camera_mode_list_next(MPCameraModeList *list);
  67. void mp_camera_mode_list_free(MPCameraModeList *list);
  68. typedef struct {
  69. uint32_t id;
  70. uint32_t type;
  71. char name[32];
  72. int32_t min;
  73. int32_t max;
  74. int32_t step;
  75. int32_t default_value;
  76. uint32_t flags;
  77. uint32_t element_size;
  78. uint32_t element_count;
  79. uint32_t dimensions_count;
  80. uint32_t dimensions[V4L2_CTRL_MAX_DIMS];
  81. } MPControl;
  82. const char *mp_control_id_to_str(uint32_t id);
  83. const char *mp_control_type_to_str(uint32_t type);
  84. typedef struct _MPControlList MPControlList;
  85. MPControlList *mp_camera_list_controls(MPCamera *camera);
  86. MPControl *mp_control_list_get(MPControlList *list);
  87. MPControlList *mp_control_list_next(MPControlList *list);
  88. void mp_control_list_free(MPControlList *list);
  89. bool mp_camera_query_control(MPCamera *camera, uint32_t id, MPControl *control);
  90. bool mp_camera_control_try_int32(MPCamera *camera, uint32_t id, int32_t *v);
  91. bool mp_camera_control_set_int32(MPCamera *camera, uint32_t id, int32_t v);
  92. int32_t mp_camera_control_get_int32(MPCamera *camera, uint32_t id);
  93. // set the value in the background, discards result
  94. pid_t mp_camera_control_set_int32_bg(MPCamera *camera, uint32_t id, int32_t v);
  95. bool mp_camera_control_try_bool(MPCamera *camera, uint32_t id, bool *v);
  96. bool mp_camera_control_set_bool(MPCamera *camera, uint32_t id, bool v);
  97. bool mp_camera_control_get_bool(MPCamera *camera, uint32_t id);
  98. // set the value in the background, discards result
  99. pid_t mp_camera_control_set_bool_bg(MPCamera *camera, uint32_t id, bool v);