capture.h 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206
  1. #pragma once
  2. #include "SpBase.h"
  3. #include "../include/EventCode.h"
  4. #include "../../Other/libaudioqueue/libaudioqueue.h"
  5. #include "../../Other/libvideoqueue/libvideoqueue.h"
  6. #include "../..//Other/libvideoframework/videoutil.h"
  7. #ifdef RVC_OS_WIN
  8. #include <portaudio.h>
  9. #include "../../Other/libvideoframework/videoframework.h"
  10. #else
  11. #include "../../Other/libmediadeviceinfo/imediadeviceinfo.h"
  12. #include "../../Other/libaudiomgr/iaudiomgrinterface.h"
  13. #include "../../Other/libvideocapture/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. {
  22. #include <libavutil/avutil.h>
  23. #include <libavcodec/avcodec.h>
  24. #include <libswscale/swscale.h>
  25. }
  26. namespace MediaController {
  27. typedef struct capture_t capture_t;
  28. typedef struct rvc_sales_audio_capture_s rvc_sales_audio_capture_t;
  29. typedef struct capture_config_t {
  30. int video_env_dev; // -1 means invalid
  31. int video_opt_dev; // -1 means invalid
  32. int video_env_rotate; // counter-clockwise degree, ignore currently
  33. int video_opt_rotate; // counter-clockwise degree
  34. int video_env_fps;
  35. int video_opt_fps;
  36. CSimpleStringA strAudioIn;
  37. CSimpleStringA strAudioOut;
  38. CSimpleStringA strVideoEnv;
  39. CSimpleStringA strVideoOpt;
  40. volatile LONG *ref_env_capture_count;
  41. volatile LONG *ref_opt_capture_count;
  42. volatile LONG *ref_envopt_capture_count;
  43. #ifdef RVC_OS_LINUX
  44. pthread_mutex_t* env_mutex;
  45. pthread_mutex_t* opt_mutex;
  46. pthread_mutex_t* envopt_mutex;
  47. #endif
  48. }capture_config_t;
  49. typedef struct rvc_audio_capture_config_s {
  50. CSimpleStringA strAudioIn; //收音设备
  51. CSimpleStringA strAudioOut; //放音设备
  52. size_t audio_capture_samplerate;
  53. size_t audio_capture_period;
  54. }rvc_audio_capture_config_t;
  55. #ifndef CAPTURE_FRAME_TIME
  56. #define CAPTURE_FRAME_TIME 20 // 20ms per frame
  57. #endif
  58. #ifndef CAPTURE_CLOCK
  59. #define CAPTURE_CLOCK 8000
  60. #endif
  61. extern DeviceTypeEnum g_eDeviceType;
  62. //PCM音频包处理类型
  63. enum eRvcPCMTransType{
  64. eUnKnown, // 未知类型,不做处理
  65. eSingleWriteLocal, // 只写到本地
  66. eSingleSendRemote, // 只发送到远端
  67. eWriteAndSend // 写到本地并且发送到远端
  68. };
  69. typedef struct audio_capture_t {
  70. #ifdef RVC_OS_WIN
  71. PaStream* stream;
  72. #else
  73. IAudioMgr* paudiocap;
  74. char* paudio_buffer;
  75. size_t uaudiolen;
  76. #endif
  77. Clibaudioqueue *shm_queue;
  78. Clibaudioqueue *salesol_shm_queue;
  79. capture_t *parent;
  80. int iseriesnumber; // 音频包序号
  81. }audio_capture_t;
  82. //音频采集结构体
  83. typedef struct rvc_audio_capture_s{
  84. #ifdef RVC_OS_WIN
  85. PaStream* stream;
  86. #else
  87. IAudioMgr* paudiocap;
  88. #endif
  89. Clibaudioqueue *audio_shm_queue; // 音频包存储队列
  90. rvc_sales_audio_capture_t *parent;
  91. //setting param
  92. int iaudio_capture_samplerate; // 音频采样率,默认值为8K
  93. int iaudio_capture_peroid; // 音频采样率周期,默认20ms,每秒50个包
  94. int iseriesnumber; // 音频包序号
  95. eRvcPCMTransType eType; // pcm音频包处理类型
  96. void *pdata; // 可变参数,写本地为对应文件名,发远端为对方地址
  97. }rvc_audio_capture_t;
  98. typedef struct video_capture_t {
  99. #ifdef RVC_OS_WIN
  100. videocap_t cap;
  101. #else
  102. IVideoCapture* pVideoCap;
  103. #endif
  104. //Clibvideoqueue* render_shm_queue;
  105. //Clibvideoqueue* opt_render_shm_queue;
  106. Clibvideoqueue *snapshot_shm_queue;
  107. Clibvideoqueue *preview_shm_queue;
  108. Clibvideoqueue *rtp_shm_queue;
  109. capture_t *parent;
  110. int camera_type; // CAMERA_TYPE_xxx
  111. int frame_id;
  112. struct SwsContext *preview_sws_ctx;
  113. struct SwsContext *rtp_sws_ctx;
  114. }video_capture_t;
  115. struct capture_t
  116. {
  117. capture_config_t config;
  118. audio_capture_t *audio;
  119. video_capture_t *env_video;
  120. video_capture_t *opt_video;
  121. };
  122. struct rvc_sales_audio_capture_s{
  123. rvc_audio_capture_config_t rvc_audio_config;
  124. rvc_audio_capture_t *rvc_audio;
  125. };
  126. typedef struct
  127. {
  128. CSimpleStringA strFriendlyName;
  129. CSimpleStringA strDevPath;
  130. CSimpleStringA strMd5Val;
  131. }camera_names_t;
  132. typedef struct write_local_info_s{
  133. FILE* pFile;
  134. }write_local_info_t;
  135. typedef struct send_remote_info_s{
  136. char strIP[MAX_PATH];
  137. size_t uPort;
  138. }send_remote_info_t;
  139. int capture_create(const capture_config_t *config, capture_t **p_cap);
  140. ErrorCodeEnum capture_create(const capture_config_t *config,capture_t *cap,int nCamera);
  141. void capture_destroy(capture_t *cap);
  142. ErrorCodeEnum capture_start(capture_t *cap);
  143. ErrorCodeEnum start_audio_capture(audio_capture_t *paudio);
  144. ErrorCodeEnum capture_start(capture_t *cap,int nCamera);
  145. void capture_stop(capture_t *cap);
  146. int capture_detect_camera_bug(capture_t *cap, int *env_n, int *opt_n,BOOL IsPad);
  147. int capture_get_last_frametime(capture_t *cap, DWORD *env_n, DWORD *opt_n,BOOL IsPad);
  148. int salesaudio_capture_create(rvc_audio_capture_config_t *config, rvc_sales_audio_capture_t **p_cap);
  149. void salesaudio_capture_destroy(rvc_sales_audio_capture_t *cap);
  150. ErrorCodeEnum salesrecord_audio_capture_start(rvc_sales_audio_capture_t *cap);
  151. void salesrecord_audio_capture_stop(rvc_sales_audio_capture_t *cap);
  152. int capture_lib_init();
  153. int videocap_optdev_fetch(CSimpleStringA frontcam,CSimpleStringA ewscam,CAutoArray<CSimpleStringA> &hspcams,CSimpleStringA &rearcam);
  154. int videocap_innerdev_fetch(CSimpleStringA &frontcam,CSimpleStringA &rearcam);
  155. int videocap_outerdev_fetch(CSimpleStringA envcam,CSimpleStringA optcam,CSimpleStringA ewscam,CAutoArray<CSimpleStringA> &hspcams,CSimpleStringA &outercam);
  156. void capture_lib_term();
  157. #ifdef RVC_OS_WIN
  158. int capture_get_audio_device_id(bool in_direction, const char* dev_name);
  159. #else
  160. void capture_enum_cameras(CAutoArray<CSimpleStringA>& cams);
  161. #endif
  162. int capture_get_video_device_id(const char *dev_name);
  163. bool capture_adj_brightness(capture_t *cap,int nvalue,ErrorCodeEnum nCode);
  164. bool capture_set_autobrightness(capture_t *cap,ErrorCodeEnum nCode);
  165. int capture_get_brightness(capture_t *cap,ErrorCodeEnum nCode);
  166. int StopCamera(capture_t *cap,int nCamera);
  167. void capture_destroy(capture_t *cap,int nCamera);
  168. //清空抓拍队列里的照片,摄像头故障时调用
  169. void capture_clearsnapshotvideo(capture_t *cap,int nCamera);
  170. int get_camera_exception_message(char* pBuffer, size_t uLen, CSimpleStringA strDeviceName, const char* strErrorMessage);
  171. }