libmegapixels.h 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. #ifndef LIBMEGAPIXELS_HEADER
  2. #define LIBMEGAPIXELS_HEADER
  3. #include <stdint.h>
  4. #define EXPORT __attribute__((__visibility__("default")))
  5. EXPORT int
  6. libmegapixels_find_config(char *configfile);
  7. #define LIBMEGAPIXELS_CMD_LINK 1
  8. #define LIBMEGAPIXELS_CMD_MODE 2
  9. #define LIBMEGAPIXELS_CFA_NONE 0
  10. #define LIBMEGAPIXELS_CFA_BGGR 1
  11. #define LIBMEGAPIXELS_CFA_GBRG 2
  12. #define LIBMEGAPIXELS_CFA_GRBG 3
  13. #define LIBMEGAPIXELS_CFA_RGGB 4
  14. struct _lmp_cmd {
  15. int type;
  16. const char *entity_from;
  17. const char *entity_to;
  18. int pad_from;
  19. int pad_to;
  20. int width;
  21. int height;
  22. uint32_t mode;
  23. uint32_t entity_from_id;
  24. int pad_from_id;
  25. uint32_t entity_to_id;
  26. int pad_to_id;
  27. };
  28. typedef struct _lmp_cmd libmegapixels_cmd;
  29. struct _lmp_mode {
  30. int width;
  31. int height;
  32. int rate;
  33. int format;
  34. int rotation;
  35. int mirrored;
  36. double focal_length;
  37. double f_number;
  38. uint32_t v4l_pixfmt;
  39. uint32_t media_busfmt;
  40. int num_cmds;
  41. libmegapixels_cmd **cmds;
  42. };
  43. typedef struct _lmp_mode libmegapixels_mode;
  44. struct _lmp_subdev {
  45. char *path;
  46. int fd;
  47. uint32_t entity_id;
  48. };
  49. typedef struct _lmp_subdev libmegapixels_subdev;
  50. struct _lmp_camera {
  51. int index;
  52. char *name;
  53. char *sensor_name;
  54. char *bridge_name;
  55. char *media_path;
  56. char *sensor_path;
  57. char *video_path;
  58. int media_fd;
  59. int sensor_fd;
  60. int video_fd;
  61. int num_modes;
  62. libmegapixels_mode **modes;
  63. libmegapixels_mode *current_mode;
  64. int num_handles;
  65. libmegapixels_subdev **handles;
  66. };
  67. typedef struct _lmp_camera libmegapixels_camera;
  68. struct _lmp_device_config {
  69. char *path;
  70. const char *make;
  71. const char *model;
  72. int count;
  73. int loaded_config;
  74. int loaded_uvc;
  75. libmegapixels_camera **cameras;
  76. };
  77. typedef struct _lmp_device_config libmegapixels_devconfig;
  78. EXPORT int
  79. libmegapixels_init(libmegapixels_devconfig **config);
  80. EXPORT int
  81. libmegapixels_load_file(libmegapixels_devconfig *config, const char *file);
  82. EXPORT int
  83. libmegapixels_load_uvc(libmegapixels_devconfig *config);
  84. EXPORT int
  85. libmegapixels_open(libmegapixels_camera *camera);
  86. EXPORT void
  87. libmegapixels_close(libmegapixels_camera *camera);
  88. EXPORT unsigned int
  89. libmegapixels_select_mode(libmegapixels_camera *camera, libmegapixels_mode *mode);
  90. EXPORT char *
  91. libmegapixels_v4l_pixfmt_to_string(uint32_t pixfmt);
  92. EXPORT const char *
  93. libmegapixels_format_cfa(int format);
  94. EXPORT const char *
  95. libmegapixels_format_cfa_pattern(int format);
  96. EXPORT uint32_t
  97. libmegapixels_mode_raw_width_to_width(int index, uint32_t width);
  98. EXPORT uint32_t
  99. libmegapixels_mode_width_to_padding(int index, uint32_t width);
  100. EXPORT uint32_t
  101. libmegapixels_mode_width_to_bytes(int index, uint32_t width);
  102. EXPORT uint32_t
  103. libmegapixels_format_to_v4l_pixfmt(int index);
  104. EXPORT uint32_t
  105. libmegapixels_format_to_media_busfmt(int index);
  106. EXPORT uint32_t
  107. libmegapixels_format_bits_per_pixel(int format);
  108. EXPORT int
  109. libmegapixels_mode_equals(libmegapixels_mode *a, libmegapixels_mode *b);
  110. #endif