Capture.h 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. #pragma once
  2. #include "SpBase.h"
  3. #include <portaudio.h>
  4. #include "EventCode.h"
  5. #include "videoframework.h"
  6. #include "libaudioqueue.h"
  7. #include "libvideoqueue.h"
  8. #include <vector>
  9. #ifndef INT64_C
  10. #define INT64_C(c) (c##LL)
  11. #define UINT64_C(c) (c##UL)
  12. #endif
  13. #include <stdint.h>
  14. extern "C"
  15. {
  16. #include <libavutil\avutil.h>
  17. #include <libavcodec\avcodec.h>
  18. #include <libswscale\swscale.h>
  19. }
  20. #include "video_common/ffmpeg_api_cpp_adapter.h"
  21. // define struct and method for echo camera
  22. namespace CameraConfigManage {
  23. typedef struct capture_t capture_t;
  24. typedef struct {
  25. int video_dev; // -1 means invalid
  26. int video_rotate; // counter-clockwise degree, ignore currently
  27. CSimpleStringA strAudioIn; // input audio
  28. CSimpleStringA strVideo;
  29. volatile LONG *ref_capture_count;
  30. }capture_config_t;
  31. typedef struct
  32. {
  33. CSimpleStringA strFriendlyName;
  34. CSimpleStringA strDevPath;
  35. CSimpleStringA strMd5Val;
  36. }camera_names_t;
  37. #define CAPTURE_FRAME_TIME 20 // 20ms per frame
  38. #define CAPTURE_CLOCK 8000
  39. extern DeviceTypeEnum g_eDeviceType;
  40. typedef struct audio_capture_t {
  41. PaStream *stream;
  42. Clibaudioqueue *shm_queue;
  43. capture_t *parent;
  44. }audio_capture_t;
  45. typedef struct video_capture_t {
  46. videocap_t cap;
  47. Clibvideoqueue *preview_shm_queue;
  48. capture_t *parent;
  49. int camera_type; // CAMERA_TYPE_xxx
  50. int frame_id;
  51. struct SwsContext *preview_sws_ctx;
  52. }video_capture_t;
  53. struct capture_t
  54. {
  55. capture_config_t config;
  56. audio_capture_t *audio;
  57. video_capture_t *video;
  58. };
  59. int capture_create(const capture_config_t *config, capture_t **p_cap);
  60. ErrorCodeEnum capture_create(const capture_config_t *config,capture_t *cap);
  61. void capture_destroy(capture_t *cap);
  62. ErrorCodeEnum capture_start(capture_t *cap);
  63. void capture_stop(capture_t *cap);
  64. int capture_detect_camera_bug(capture_t *cap, int *n);
  65. int capture_get_last_frametime(capture_t *cap, DWORD *n);
  66. int capture_lib_init();
  67. void capture_lib_term();
  68. int capture_get_audio_device_id(bool in_direction, const char *dev_name);
  69. //int capture_get_video_device_id(const char *dev_name);
  70. int capture_get_video_device_id(const char *dev_name, camera_names_t &camera);
  71. // 检查摄像头插入事件通知的摄像头deviceinstpath是否与广角摄像头的匹配,若匹配返回true,否则返回false
  72. bool capture_check_video_device_match(const char *dev_name, const char*dev_inst_path);
  73. bool capture_adj_brightness(capture_t *cap,int nvalue,ErrorCodeEnum nCode);
  74. bool capture_set_autobrightness(capture_t *cap,ErrorCodeEnum nCode);
  75. int capture_get_brightness(capture_t *cap,ErrorCodeEnum nCode);
  76. int stop_camera(capture_t *cap);
  77. void capture_enum_cameras(std::vector<camera_names_t> &cams, CAutoArray<CSimpleStringA> &hspcams);
  78. void capture_md5(char *dev_path);
  79. bool capture_get_only_video_device_by_friendlyname(const CSimpleStringA friendlyname,
  80. CAutoArray<CSimpleStringA> &excludecams, const CAutoArray<CSimpleStringA> &hspcams, camera_names_t &camera);
  81. bool capture_get_only_video_device(CAutoArray<CSimpleStringA> &excludecams, const CAutoArray<CSimpleStringA> &hspcams, camera_names_t &camera);
  82. }