capture.h 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. #pragma once
  2. #include "SpBase.h"
  3. #include "EventCode.h"
  4. #include "libaudioqueue.h"
  5. #include "libvideoqueue.h"
  6. #ifdef RVC_OS_WIN
  7. #include <portaudio.h>
  8. #include "videoframework.h"
  9. #else
  10. #include "videoutil.h"
  11. #include "imediadeviceinfo.h"
  12. #include "iaudiomgrinterface.h"
  13. #include "ivideocaptureinterface.h"
  14. #endif // RVC_OS_WIN
  15. #ifndef INT64_C
  16. #define INT64_C(c) (c##LL)
  17. #define UINT64_C(c) (c##UL)
  18. #endif
  19. #include <stdint.h>
  20. extern "C"{
  21. #include <libavutil/avutil.h>
  22. #include <libavcodec/avcodec.h>
  23. #include <libswscale/swscale.h>
  24. }
  25. #ifndef CAPTURE_FRAME_TIME
  26. #define CAPTURE_FRAME_TIME 20 // 20ms per frame
  27. #endif
  28. #ifndef CAPTURE_CLOCK
  29. #define CAPTURE_CLOCK 8000
  30. #endif
  31. namespace MediaController {
  32. typedef struct capture_t capture_t;
  33. typedef struct rvc_sales_audio_capture_s rvc_sales_audio_capture_t;
  34. typedef struct capture_config_t {
  35. int video_env_dev; // -1 means invalid
  36. int video_opt_dev; // -1 means invalid
  37. int video_env_rotate; // counter-clockwise degree, ignore currently
  38. int video_opt_rotate; // counter-clockwise degree
  39. int video_env_fps;
  40. int video_opt_fps;
  41. CSimpleStringA strAudioIn;
  42. CSimpleStringA strAudioOut;
  43. CSimpleStringA strVideoEnv;
  44. CSimpleStringA strVideoOpt;
  45. volatile LONG *ref_env_capture_count;
  46. volatile LONG *ref_opt_capture_count;
  47. volatile LONG *ref_envopt_capture_count;
  48. #ifdef RVC_OS_LINUX
  49. pthread_mutex_t* env_mutex;
  50. pthread_mutex_t* opt_mutex;
  51. pthread_mutex_t* envopt_mutex;
  52. #endif
  53. }capture_config_t;
  54. typedef struct rvc_audio_capture_config_s {
  55. CSimpleStringA strAudioIn; //收音设备
  56. CSimpleStringA strAudioOut; //放音设备
  57. size_t audio_capture_samplerate;
  58. size_t audio_capture_period;
  59. }rvc_audio_capture_config_t;
  60. extern DeviceTypeEnum g_eDeviceType;
  61. typedef struct audio_capture_t {
  62. #ifdef RVC_OS_WIN
  63. PaStream* stream;
  64. #else
  65. IAudioMgr* paudiocap;
  66. char* paudio_buffer;
  67. size_t uaudiolen;
  68. int iseriesnumber;
  69. #endif
  70. Clibaudioqueue *shm_queue;
  71. Clibaudioqueue *salesol_shm_queue;
  72. capture_t *parent;
  73. }audio_capture_t;
  74. //音频采集结构体
  75. typedef struct rvc_audio_capture_s{
  76. #ifdef RVC_OS_WIN
  77. PaStream* stream;
  78. #else
  79. IAudioMgr* paudiocap;
  80. char* paudio_buffer;
  81. size_t uaudiolen;
  82. bool bputremote;
  83. #endif
  84. Clibaudioqueue *audio_shm_queue; // 音频包存储队列
  85. rvc_sales_audio_capture_t *parent;
  86. int iaudio_capture_samplerate; // 音频采样率,默认值为8K
  87. int iaudio_capture_peroid; // 音频采样率周期,默认20ms,每秒50个包
  88. int iseriesnumber; // 音频包序号
  89. }rvc_audio_capture_t;
  90. typedef struct video_capture_t {
  91. #ifdef RVC_OS_WIN
  92. videocap_t cap;
  93. #else
  94. IVideoCapture* pVideoCap;
  95. #endif
  96. Clibvideoqueue *snapshot_shm_queue;
  97. Clibvideoqueue *preview_shm_queue;
  98. Clibvideoqueue *rtp_shm_queue;
  99. capture_t *parent;
  100. int camera_type; // CAMERA_TYPE_xxx
  101. int frame_id;
  102. unsigned int ulastcaptime;
  103. struct SwsContext *preview_sws_ctx;
  104. struct SwsContext *rtp_sws_ctx;
  105. unsigned int ustarttime;
  106. }video_capture_t;
  107. struct capture_t{
  108. capture_config_t config;
  109. audio_capture_t *audio;
  110. video_capture_t *env_video;
  111. video_capture_t *opt_video;
  112. };
  113. struct rvc_sales_audio_capture_s{
  114. rvc_audio_capture_config_t rvc_audio_config;
  115. rvc_audio_capture_t *rvc_audio;
  116. };
  117. int capture_create(const capture_config_t *config, capture_t **p_cap);
  118. ErrorCodeEnum capture_create(const capture_config_t *config,capture_t *cap,int nCamera);
  119. void capture_destroy(capture_t *cap);
  120. ErrorCodeEnum capture_start(capture_t *cap);
  121. ErrorCodeEnum start_audio_capture(audio_capture_t *paudio);
  122. ErrorCodeEnum capture_start(capture_t *cap,int nCamera);
  123. void capture_stop(capture_t *cap);
  124. int capture_lib_init();
  125. int capture_detect_camera_bug(capture_t *cap, int *env_n, int *opt_n,bool IsPad);
  126. int capture_get_last_frametime(capture_t *cap, unsigned int* env_n, unsigned int* opt_n);
  127. int salesaudio_capture_create(rvc_audio_capture_config_t *config, rvc_sales_audio_capture_t **p_cap);
  128. void salesaudio_capture_destroy(rvc_sales_audio_capture_t *cap);
  129. ErrorCodeEnum salesrecord_audio_capture_start(rvc_sales_audio_capture_t *cap);
  130. void salesrecord_audio_capture_stop(rvc_sales_audio_capture_t *cap);
  131. void capture_lib_term();
  132. int capture_get_video_device_id(const char *dev_name);
  133. bool capture_adj_brightness(capture_t *cap,int nvalue,ErrorCodeEnum nCode);
  134. bool capture_set_autobrightness(capture_t *cap,ErrorCodeEnum nCode);
  135. int capture_get_brightness(capture_t *cap,ErrorCodeEnum nCode);
  136. int StopCamera(capture_t *cap,int nCamera);
  137. void capture_destroy(capture_t *cap,int nCamera);
  138. //清空抓拍队列里的照片,摄像头故障时调用
  139. void capture_clearsnapshotvideo(capture_t *cap,int nCamera);
  140. int get_camera_exception_message(char* pBuffer, size_t uLen, CSimpleStringA strDeviceName, const char* strErrorMessage);
  141. int capture_get_audio_device_list(bool in_direction, CSimpleStringA& strdevicelist);
  142. int capture_get_video_device_list(CSimpleStringA& strdevicelist);
  143. }