123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215 |
- #pragma once
- #include "SpBase.h"
- #include "EventCode.h"
- #include "libaudioqueue.h"
- #include "libvideoqueue.h"
- #include "rvc_media_common.h"
- #include "cJSON.h"
- #ifdef RVC_OS_WIN
- #include <portaudio.h>
- #include "videoframework.h"
- #else
- #include "videoutil.h"
- #include "imediadeviceinfo.h"
- #include "iaudiomgrinterface.h"
- #include "ivideocaptureinterface.h"
- #endif // RVC_OS_WIN
- #ifndef INT64_C
- #define INT64_C(c) (c##LL)
- #define UINT64_C(c) (c##UL)
- #endif
- #include <stdint.h>
- extern "C"{
- #include <libavutil/avutil.h>
- #include <libavcodec/avcodec.h>
- #include <libswscale/swscale.h>
- }
- #ifndef MAX_PATH
- #define MAX_PATH 260
- #endif
- #ifndef CAPTURE_FRAME_TIME
- #define CAPTURE_FRAME_TIME 20 // 20ms per frame
- #endif
- #ifndef CAPTURE_CLOCK
- #define CAPTURE_CLOCK 8000
- #endif
- #define CAMERA_BUG_THRESHOLD 6
- #define CAMERA_TIMEOUT 15
- #define CAMERA_MIN_TIMEOUT 5
- #define CAMERA_RESTARTNUM 6
- #ifndef RVC_MAX_DELAY_TIME
- #define RVC_MAX_DELAY_TIME 180
- #endif // !RVC_MAX_DELAY_TIME
- #ifndef RVC_CAM_INTERVAL_TIME
- #define RVC_CAM_INTERVAL_TIME 3000
- #endif // !RVC_CAM_INTERVAL_TIME
- #ifndef AUDIO_BUG_THRESHOLD
- #define AUDIO_BUG_THRESHOLD 6
- #endif // !AUDIO_BUG_THRESHOLD
- namespace MediaController {
- typedef struct capture_t capture_t;
- typedef struct rvc_sales_audio_capture_s rvc_sales_audio_capture_t;
- typedef struct capture_config_s {
- int video_env_dev; // -1 means invalid
- int video_opt_dev; // -1 means invalid
- int video_env_rotate; // counter-clockwise degree, ignore currently
- int video_opt_rotate; // counter-clockwise degree
- int video_env_fps;
- int video_opt_fps;
- int video_env_brightness;
- int video_opt_brightness;
- CSimpleStringA strAudioIn;
- CSimpleStringA strAudioOut;
- CSimpleStringA strAudioState;
- CSimpleStringA strVideoEnv;
- CSimpleStringA strVideoOpt;
- volatile LONG *ref_env_capture_count;
- volatile LONG *ref_opt_capture_count;
- volatile LONG *ref_envopt_capture_count;
- unsigned int uintervaltime;
- #ifdef RVC_OS_LINUX
- pthread_mutex_t* env_mutex;
- pthread_mutex_t* opt_mutex;
- pthread_mutex_t* envopt_mutex;
- #endif
- }capture_config_t;
- typedef struct rvc_audio_capture_config_s {
- CSimpleStringA strAudioIn; //收音设备
- CSimpleStringA strAudioOut; //放音设备
- size_t audio_capture_samplerate;
- size_t audio_capture_period;
- }rvc_audio_capture_config_t;
- extern DeviceTypeEnum g_eDeviceType;
- typedef struct audio_capture_t {
- #ifdef RVC_OS_WIN
- PaStream* stream;
- #else
- IAudioMgr* paudiocap;
- char* paudio_buffer;
- size_t uaudiolen;
- #endif
- Clibaudioqueue *shm_queue;
- Clibaudioqueue *salesol_shm_queue;
- capture_t *parent;
- int iseriesnumber;
- }audio_capture_t;
- //音频采集结构体
- typedef struct rvc_audio_capture_s{
- #ifdef RVC_OS_WIN
- PaStream* stream;
- #else
- IAudioMgr* paudiocap;
- char* paudio_buffer;
- size_t uaudiolen;
- bool bputremote;
- #endif
- Clibaudioqueue *audio_shm_queue; // 音频包存储队列
- rvc_sales_audio_capture_t *parent;
- int iaudio_capture_samplerate; // 音频采样率,默认值为8K
- int iaudio_capture_peroid; // 音频采样率周期,默认20ms,每秒50个包
- int iseriesnumber; // 音频包序号
- }rvc_audio_capture_t;
- typedef struct video_capture_t {
- #ifdef RVC_OS_WIN
- videocap_t cap;
- #else
- IVideoCapture* pVideoCap;
- #endif
- Clibvideoqueue *snapshot_shm_queue;
- Clibvideoqueue *preview_shm_queue;
- Clibvideoqueue *rtp_shm_queue;
- capture_t *parent;
- int camera_type; // CAMERA_TYPE_xxx
- int frame_id;
- unsigned int ulastcaptime;
- struct SwsContext *preview_sws_ctx;
- struct SwsContext *rtp_sws_ctx;
- unsigned int ustarttime;
- #ifdef DEVOPS_ON_PRD
- #else
- #ifdef RVC_OS_WIN
- #else
- bool bsavephoto;
- char strsavedir[MAX_PATH];
- char strphotoname[MAX_PATH];
- int isaveinterval;
- #endif
- #endif
- }video_capture_t;
- struct capture_t{
- capture_config_t config;
- audio_capture_t *handfree_audio;
- video_capture_t *env_video;
- video_capture_t *opt_video;
- };
- struct rvc_sales_audio_capture_s{
- rvc_audio_capture_config_t rvc_audio_config;
- rvc_audio_capture_t *rvc_audio;
- };
- int capture_create(const capture_config_t *config, capture_t **p_cap, bool bstartaudio = true);
- ErrorCodeEnum capture_create(const capture_config_t *config,capture_t *cap,int nCamera);
- void capture_destroy(capture_t *cap);
- ErrorCodeEnum capture_start(capture_t *cap, bool bstartaudio = true);
- ErrorCodeEnum start_audio_capture(audio_capture_t *paudio);
- ErrorCodeEnum capture_start(capture_t *cap,int nCamera);
- void capture_stop(capture_t *cap);
- int capture_lib_init(int* ivideonum);
- int capture_detect_camera_bug(capture_t *cap, int *env_n, int *opt_n, bool bsinglecam);
- int capture_get_last_frametime(capture_t *cap, unsigned int* env_n, unsigned int* opt_n);
-
- int capture_get_last_audio_frametime(capture_t* cap, unsigned int* handfreein_n);
- int salesaudio_capture_create(rvc_audio_capture_config_t *config, rvc_sales_audio_capture_t **p_cap);
- void salesaudio_capture_destroy(rvc_sales_audio_capture_t *cap);
- ErrorCodeEnum salesrecord_audio_capture_start(rvc_sales_audio_capture_t *cap);
- void salesrecord_audio_capture_stop(rvc_sales_audio_capture_t *cap);
- void capture_lib_term();
- int capture_get_video_device_id(const char *dev_name);
- bool capture_adj_brightness(capture_t *cap,int nvalue, ErrorCodeEnum nCode);
- bool capture_set_autobrightness(capture_t *cap, ErrorCodeEnum nCode);
- int capture_get_brightness(capture_t *cap, ErrorCodeEnum nCode);
- int capture_get_camera_brightness(int* ibrightness, capture_t* cap, ErrorCodeEnum nCode, int icameraid);
- int capture_set_camera_brightness(int ibrightness, capture_t* cap, ErrorCodeEnum nCode, int icameraid);
- int stopcamera(capture_t *cap,int nCamera);
- void capture_destroy(capture_t *cap,int nCamera);
- //清空抓拍队列里的照片,摄像头故障时调用
- void capture_clearsnapshotvideo(capture_t *cap,int nCamera);
- int get_camera_exception_message(char* pBuffer, size_t uLen, CSimpleStringA strDeviceName, const char* strErrorMessage);
- int capture_get_audio_device_list(bool in_direction, CSimpleStringA& strdevicelist);
- int capture_get_video_device_list(CSimpleStringA& strdevicelist);
- int capture_get_env_rawbrightnessinfo(capture_t* cap, ErrorCodeEnum nCode, int* imin, int* imax);
- int capture_set_env_rawbrightness(capture_t* cap, ErrorCodeEnum nCode, int ibrightness);
- }
|