#pragma once #include "SpBase.h" #include #include "EventCode.h" #include "videoframework.h" #include "libaudioqueue.h" #include "libvideoqueue.h" #include #ifndef INT64_C #define INT64_C(c) (c##LL) #define UINT64_C(c) (c##UL) #endif #include extern "C" { #include #include #include } #include "video_common/ffmpeg_api_cpp_adapter.h" // define struct and method for echo camera namespace CameraConfigManage { typedef struct capture_t capture_t; typedef struct { int video_dev; // -1 means invalid int video_rotate; // counter-clockwise degree, ignore currently CSimpleStringA strAudioIn; // input audio CSimpleStringA strVideo; volatile LONG *ref_capture_count; }capture_config_t; typedef struct { CSimpleStringA strFriendlyName; CSimpleStringA strDevPath; CSimpleStringA strMd5Val; }camera_names_t; #define CAPTURE_FRAME_TIME 20 // 20ms per frame #define CAPTURE_CLOCK 8000 extern DeviceTypeEnum g_eDeviceType; typedef struct audio_capture_t { PaStream *stream; Clibaudioqueue *shm_queue; capture_t *parent; }audio_capture_t; typedef struct video_capture_t { videocap_t cap; Clibvideoqueue *preview_shm_queue; capture_t *parent; int camera_type; // CAMERA_TYPE_xxx int frame_id; struct SwsContext *preview_sws_ctx; }video_capture_t; struct capture_t { capture_config_t config; audio_capture_t *audio; video_capture_t *video; }; int capture_create(const capture_config_t *config, capture_t **p_cap); ErrorCodeEnum capture_create(const capture_config_t *config,capture_t *cap); void capture_destroy(capture_t *cap); ErrorCodeEnum capture_start(capture_t *cap); void capture_stop(capture_t *cap); int capture_detect_camera_bug(capture_t *cap, int *n); int capture_get_last_frametime(capture_t *cap, DWORD *n); int capture_lib_init(); void capture_lib_term(); int capture_get_audio_device_id(bool in_direction, const char *dev_name); //int capture_get_video_device_id(const char *dev_name); int capture_get_video_device_id(const char *dev_name, camera_names_t &camera); // 检查摄像头插入事件通知的摄像头deviceinstpath是否与广角摄像头的匹配,若匹配返回true,否则返回false bool capture_check_video_device_match(const char *dev_name, const char*dev_inst_path); 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 stop_camera(capture_t *cap); void capture_enum_cameras(std::vector &cams, CAutoArray &hspcams); void capture_md5(char *dev_path); bool capture_get_only_video_device_by_friendlyname(const CSimpleStringA friendlyname, CAutoArray &excludecams, const CAutoArray &hspcams, camera_names_t &camera); bool capture_get_only_video_device(CAutoArray &excludecams, const CAutoArray &hspcams, camera_names_t &camera); }