camera.h 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. #pragma once
  2. #include "mode.h"
  3. #include <stdbool.h>
  4. #include <stdint.h>
  5. #include <sys/wait.h>
  6. typedef struct {
  7. uint32_t index;
  8. uint8_t *data;
  9. int fd;
  10. } MPBuffer;
  11. typedef struct _MPCamera MPCamera;
  12. MPCamera *mp_camera_new(int video_fd, int subdev_fd);
  13. void mp_camera_free(MPCamera *camera);
  14. void mp_camera_add_bg_task(MPCamera *camera, pid_t pid);
  15. void mp_camera_wait_bg_tasks(MPCamera *camera);
  16. bool mp_camera_check_task_complete(MPCamera *camera, pid_t pid);
  17. bool mp_camera_is_subdev(MPCamera *camera);
  18. int mp_camera_get_video_fd(MPCamera *camera);
  19. int mp_camera_get_subdev_fd(MPCamera *camera);
  20. const MPMode *mp_camera_get_mode(const MPCamera *camera);
  21. bool mp_camera_try_mode(MPCamera *camera, MPMode *mode);
  22. bool mp_camera_set_mode(MPCamera *camera, MPMode *mode);
  23. bool mp_camera_start_capture(MPCamera *camera);
  24. bool mp_camera_stop_capture(MPCamera *camera);
  25. bool mp_camera_is_capturing(MPCamera *camera);
  26. bool mp_camera_capture_buffer(MPCamera *camera, MPBuffer *buffer);
  27. bool mp_camera_release_buffer(MPCamera *camera, uint32_t buffer_index);
  28. MPModeList *mp_camera_list_supported_modes(MPCamera *camera);
  29. MPModeList *mp_camera_list_available_modes(MPCamera *camera);
  30. MPMode *mp_camera_mode_list_get(MPModeList *list);
  31. MPModeList *mp_camera_mode_list_next(MPModeList *list);
  32. void mp_camera_mode_list_free(MPModeList *list);
  33. typedef struct {
  34. uint32_t id;
  35. uint32_t type;
  36. char name[32];
  37. int32_t min;
  38. int32_t max;
  39. int32_t step;
  40. int32_t default_value;
  41. uint32_t flags;
  42. uint32_t element_size;
  43. uint32_t element_count;
  44. uint32_t dimensions_count;
  45. uint32_t dimensions[V4L2_CTRL_MAX_DIMS];
  46. } MPControl;
  47. const char *mp_control_id_to_str(uint32_t id);
  48. const char *mp_control_type_to_str(uint32_t type);
  49. typedef struct _MPControlList MPControlList;
  50. MPControlList *mp_camera_list_controls(MPCamera *camera);
  51. MPControl *mp_control_list_get(MPControlList *list);
  52. MPControlList *mp_control_list_next(MPControlList *list);
  53. void mp_control_list_free(MPControlList *list);
  54. bool mp_camera_query_control(MPCamera *camera, uint32_t id, MPControl *control);
  55. bool mp_camera_control_try_int32(MPCamera *camera, uint32_t id, int32_t *v);
  56. bool mp_camera_control_set_int32(MPCamera *camera, uint32_t id, int32_t v);
  57. int32_t mp_camera_control_get_int32(MPCamera *camera, uint32_t id);
  58. // set the value in the background, discards result
  59. pid_t mp_camera_control_set_int32_bg(MPCamera *camera, uint32_t id, int32_t v);
  60. bool mp_camera_control_try_bool(MPCamera *camera, uint32_t id, bool *v);
  61. bool mp_camera_control_set_bool(MPCamera *camera, uint32_t id, bool v);
  62. bool mp_camera_control_get_bool(MPCamera *camera, uint32_t id);
  63. // set the value in the background, discards result
  64. pid_t mp_camera_control_set_bool_bg(MPCamera *camera, uint32_t id, bool v);