capture.h 5.3 KB

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