ZegoLiveRoom
video_capture.h
Go to the documentation of this file.
1#ifndef ZEGOVideoCapture_h
2#define ZEGOVideoCapture_h
3#include "video_format.h"
4namespace AVE {
5 enum {
9
11 };
12
14
16 public:
21 virtual int SetFrameRate(int framerate) = 0;
22
28 virtual int SetResolution(int width, int height) = 0;
29
34 virtual int SetFrontCam(int bFront) = 0;
35
40 virtual int SetView(void *view) = 0;
41
46 virtual int SetViewMode(int nMode) = 0;
47
52 virtual int SetViewRotation(int nRotation) = 0;
53
58 virtual int SetCaptureRotation(int nRotation) = 0;
59
63 virtual int StartPreview() = 0;
64
68 virtual int StopPreview() = 0;
69
74 virtual int EnableTorch(bool bEnable) = 0;
75
79 virtual int TakeSnapshot() = 0;
80
84 virtual int SetPowerlineFreq(unsigned int nFreq) { return 0; }
85 };
86
88 FILL_MODE_BLACKBAR, // * maintain aspect ratio, adds black bars if needed
89 FILL_MODE_CROP, // * crop video to fit view
90 FILL_MODE_STRETCH // * stretch video to fit view
91 };
92
95 FLIP_MODE_X = 1 << 0, // * 水平翻转,镜像
96 FLIP_MODE_Y = 1 << 1, // * 垂直翻转
97 };
98
99 // [top, left](bottom, right)
100 struct ROIRect {
102 top = left = bottom = right = 0;
103 level = 2;
104 }
105
106 int top;
107 int left;
109 int right;
110 int level; // [0~10]
111 };
112
114 public:
122 virtual void OnIncomingCapturedData(const char* data,
123 int length,
124 const VideoCaptureFormat& frame_format,
125 unsigned long long reference_time,
126 unsigned int reference_time_scale) = 0;
127
128 virtual void OnIncomingCapturedData2(unsigned char **ptrs,
129 int *lens,
130 const VideoCaptureFormat& frame_format,
131 unsigned long long reference_time,
132 unsigned int reference_time_scale) = 0;
133
134#if defined(_WIN32) || defined(WIN32) || defined(_MSC_VER)
143 virtual int OnIncomingD3DTexture(void* videoTex,
144 unsigned int rotate,
145 unsigned long long reference_time,
146 unsigned int reference_time_scale) {
147 return 0;
148 };
149
158 virtual int OnIncomingD3DTextureWithHandle(void* texture, void* shared_handle,
159 unsigned long long reference_time,
160 unsigned int reference_time_scale) {
161 return 0;
162 };
163
165 virtual void ResetTextureContext() {};
166#endif
167
170 virtual void OnTakeSnapshot(void* image) = 0;
171
174 virtual void SetFillMode(int mode) = 0;
175
179 virtual int SetROI(ROIRect* rects, int count) = 0;
180 };
181
183 public:
187 virtual void OnIncomingCapturedData(void* buffer,
188 double reference_time_ms) = 0;
189
192 virtual void SetFillMode(int mode) = 0;
195 virtual void SetRotation(int rotation) = 0;
196
200 virtual int SetROI(ROIRect* rects, int count) = 0;
201 };
202
204 public:
206 virtual void* GetSurfaceTexture() = 0;
207
212 virtual int SetROI(ROIRect* rects, int count, unsigned long long timestamp_ns) = 0;
215 virtual void SetFillMode(int mode) = 0;
220 virtual void SetTextureResolution(int width, int height) = 0;
221 };
222
224 public:
230 virtual void OnIncomingCapturedData(int texture_id, int width, int height, double reference_time_ms) = 0;
231
234 virtual void SetFillMode(int mode) = 0;
235
238 virtual void SetFlipMode(int mode) = 0;
239
242 virtual void SetTransformMatrix(float matrix[16]) = 0;
243
246 virtual void SetRotation(int rotation) = 0;
247
251 virtual int SetROI(ROIRect* rects, int count) = 0;
252
254 virtual void ResetTextureContext() = 0;
255 };
256
259 }
260
261 int width;
264 const char* media_side_info; // deprecated, use CEngine::SendMediaSideInfo instead
265 int media_side_info_size; // deprecated, use CEngine::SendMediaSideInfo instead
266
268 int rotation; // counterclockwise degree
269
270 int stream_layer; // stream layer, @see CEngine::VideoStreamLayer_t
271 };
272
274 public:
282 virtual void OnEncodedFrame(const char* data, int length,
283 const VideoCodecConfig& codec_config,
284 bool b_keyframe, double reference_time_ms) = 0;
285
290 virtual bool ConvertTimestamp(unsigned long long reference_time_ms, unsigned long long *adjusted_time_ms) = 0;
291
292 typedef void(*OnRequestIDRCallback)(void *callback_context);
293 virtual void RegisterRequestIDRCallback(OnRequestIDRCallback callback, void *callback_context) = 0;
294 };
295
308 };
309
311 public:
312 class Client {
313 public:
314 virtual ~Client() {}
315
318 virtual void Destroy() = 0;
319
320 virtual void SetStatusReason(bool is_closed, int reason) = 0;
321
329 virtual void* GetInterface() = 0;
330 };
331
332 public:
338 virtual void AllocateAndStart(Client* client) = 0;
339
344 virtual void StopAndDeAllocate() = 0;
345
350 virtual int StartCapture() = 0;
351
356 virtual int StopCapture() = 0;
357
362
367 virtual void* GetInterface() = 0;
368 };
369
371 public:
373 public:
374 virtual ~Client() {}
375 virtual void* GetInterface() {
376 return (VideoCaptureCallback*)this;
377 }
378 };
379
380 public :
381 virtual void AllocateAndStart(Client* client) = 0;
382
383 virtual void AllocateAndStart(VideoCaptureDeviceBase::Client* client) override {
384 this->AllocateAndStart((Client*)client);
385 }
386
389 }
390
391 virtual void* GetInterface() override {
392 return (SupportsVideoCapture*)this;
393 }
394 };
395
397 public:
403 virtual VideoCaptureDeviceBase* Create(const char* device_id) = 0;
404
409 virtual void Destroy(VideoCaptureDeviceBase *vc) = 0;
410 };
411
428 };
429
434 };
435
437 public:
438 virtual int DequeueInputBuffer(int width, int height, int stride) = 0;
439 virtual void* GetInputBuffer(int index) = 0;
440 virtual void QueueInputBuffer(int index, int width, int height, int stride, unsigned long long timestamp_100n) = 0;
441 virtual void QueueInputBufferWithDest(int index, int width, int height, int stride,
442 unsigned long long timestamp_100n, VideoBufferDestination dest) {
443 }
444 };
445
447 public:
448 virtual void OnProcess(void* buffer, int size, int width, int height, int stride, unsigned long long timestamp_100n) = 0;
449 virtual void OnProcessWithDest(void* buffer, int size, int width, int height, int stride,
450 unsigned long long timestamp_100n, VideoBufferDestination dest) {
451 }
452 };
453
455 public:
456 virtual void OnProcessMem(unsigned char **pData, int* dataLen, int width, int height, int stride[4], unsigned long long timestamp_100n) = 0;
457 virtual void OnProcessMemWithDest(unsigned char **pData, int* dataLen, int width, int height, int stride[4],
458 unsigned long long timestamp_100n, VideoBufferDestination dest) {
459 }
460 };
461
463 public:
464 class Client {
465 public:
466 virtual ~Client() {}
467 virtual void Destroy() = 0;
468
488 virtual void* GetInterface() = 0;
489 };
490
491 public:
497 virtual void AllocateAndStart(Client* client) = 0;
498
503 virtual void StopAndDeAllocate() = 0;
504
509
527 virtual void* GetInterface(VideoBufferType buffer_type = BUFFER_TYPE_UNKNOWN) = 0;
528 };
529
531 public:
533
537 virtual VideoFilter* Create() = 0;
538
542 virtual void Destroy(VideoFilter *vf) = 0;
543 };
544
546 public:
547 static Camera* Create();
548 static void Destroy(Camera* camera);
549
550 virtual void SetDeviceId(const char* device_id) = 0;
551 };
552
554 public:
555 static PictureCaptureDevice* Create(unsigned int instance_id);
556 static void Destroy(PictureCaptureDevice* camera);
557
558 virtual void SetPath(const char* path) = 0;
559 };
560}
561#endif /* ZEGOVideoCapture_h */
Definition: video_capture.h:545
static void Destroy(Camera *camera)
static Camera * Create()
virtual void SetDeviceId(const char *device_id)=0
Definition: video_capture.h:553
virtual void SetPath(const char *path)=0
static void Destroy(PictureCaptureDevice *camera)
static PictureCaptureDevice * Create(unsigned int instance_id)
Definition: video_capture.h:15
virtual int SetFrontCam(int bFront)=0
切换前后摄像头,移动端专用,PC端不需要实现
virtual int StopPreview()=0
停止预览
virtual int SetViewRotation(int nRotation)=0
设置采集预览的逆时针旋转角度
virtual int StartPreview()=0
启动预览
virtual int SetViewMode(int nMode)=0
设置采集预览模式
virtual int SetPowerlineFreq(unsigned int nFreq)
设置采集刷新率
Definition: video_capture.h:84
virtual int EnableTorch(bool bEnable)=0
打开闪光灯
virtual int SetCaptureRotation(int nRotation)=0
设置采集buffer的顺时针旋转角度
virtual int SetFrameRate(int framerate)=0
设置采集帧率
virtual int SetResolution(int width, int height)=0
设置采集分辨率,采集的分辨率最大不能超过1920*1080
virtual int SetView(void *view)=0
设置采集使用载体
virtual int TakeSnapshot()=0
对采集预览进行截图,完成后通过client的OnTakeSnapshot方法通知SDK
Definition: video_capture.h:436
virtual int DequeueInputBuffer(int width, int height, int stride)=0
virtual void QueueInputBuffer(int index, int width, int height, int stride, unsigned long long timestamp_100n)=0
virtual void * GetInputBuffer(int index)=0
virtual void QueueInputBufferWithDest(int index, int width, int height, int stride, unsigned long long timestamp_100n, VideoBufferDestination dest)
Definition: video_capture.h:441
Definition: video_capture.h:182
virtual void OnIncomingCapturedData(void *buffer, double reference_time_ms)=0
通知SDK采集到视频数据,SDK会同步拷贝数据,切换到内部线程进行编码,如果缓冲队列不够,SDK会自动丢帧
virtual void SetFillMode(int mode)=0
当时图像宽高和编码宽高的宽高比不一致时使用的填充模式,默认裁剪
virtual void SetRotation(int rotation)=0
用于修正图像的角度
virtual int SetROI(ROIRect *rects, int count)=0
设置编码器感兴趣的区域,优化图像主观体验
Definition: video_capture.h:113
virtual void OnIncomingCapturedData(const char *data, int length, const VideoCaptureFormat &frame_format, unsigned long long reference_time, unsigned int reference_time_scale)=0
通知SDK采集到视频数据,SDK会同步拷贝数据,切换到内部线程进行编码,如果缓冲队列不够,SDK会自动丢帧
virtual int OnIncomingD3DTexture(void *videoTex, unsigned int rotate, unsigned long long reference_time, unsigned int reference_time_scale)
通知SDK采集到纹理数据,SDK会同步拷贝数据,切换到内部线程进行编码,如果缓冲队列不够,SDK会自动丢帧
Definition: video_capture.h:143
virtual int OnIncomingD3DTextureWithHandle(void *texture, void *shared_handle, unsigned long long reference_time, unsigned int reference_time_scale)
通知SDK采集到纹理数据,SDK会引用该纹理直接进行编码,不会进行旋转、镜像、水印等功能
Definition: video_capture.h:158
virtual void OnTakeSnapshot(void *image)=0
通知SDK截图成功
virtual void OnIncomingCapturedData2(unsigned char **ptrs, int *lens, const VideoCaptureFormat &frame_format, unsigned long long reference_time, unsigned int reference_time_scale)=0
virtual void SetFillMode(int mode)=0
当时图像宽高和编码宽高的宽高比不一致时使用的填充模式,默认裁剪
virtual int SetROI(ROIRect *rects, int count)=0
设置编码器感兴趣的区域,优化图像主观体验
virtual void ResetTextureContext()
通知SDK纹理相关的上下文发生变化,用来清除缓存的上下文状态,必须和OnIncomingD3DTexture在同一个线程调用,不保证线程安全
Definition: video_capture.h:165
Definition: video_capture.h:372
virtual void * GetInterface()
获取不同采集方式对应的回调接口
Definition: video_capture.h:375
virtual ~Client()
Definition: video_capture.h:374
Definition: video_capture.h:312
virtual void * GetInterface()=0
获取不同采集方式对应的回调接口
virtual void Destroy()=0
通知SDK销毁采集回调
virtual ~Client()
Definition: video_capture.h:314
virtual void SetStatusReason(bool is_closed, int reason)=0
Definition: video_capture.h:310
virtual VideoPixelBufferType SupportBufferType()=0
获取采集callback的类型
virtual int StartCapture()=0
启动采集,采集的数据通过client对象的OnIncomingCapturedData通知SDK
virtual void * GetInterface()=0
检查是否支持SupportsVideoCapture接口
virtual void StopAndDeAllocate()=0
停止并且释放采集占用的资源,同时调用client的Destroy方法,这里的client指的是AllocateAndStart传递的client
virtual void AllocateAndStart(Client *client)=0
初始化采集使用的资源,例如启动线程,保存SDK传递的回调
virtual int StopCapture()=0
停止采集
Definition: video_capture.h:370
virtual VideoPixelBufferType SupportBufferType() override
获取采集callback的类型
Definition: video_capture.h:387
virtual void AllocateAndStart(Client *client)=0
virtual void * GetInterface() override
检查是否支持SupportsVideoCapture接口
Definition: video_capture.h:391
virtual void AllocateAndStart(VideoCaptureDeviceBase::Client *client) override
初始化采集使用的资源,例如启动线程,保存SDK传递的回调
Definition: video_capture.h:383
Definition: video_capture.h:273
virtual bool ConvertTimestamp(unsigned long long reference_time_ms, unsigned long long *adjusted_time_ms)=0
将视频帧的时间戳转换为内部已做音画同步时间戳
void(* OnRequestIDRCallback)(void *callback_context)
Definition: video_capture.h:292
virtual void RegisterRequestIDRCallback(OnRequestIDRCallback callback, void *callback_context)=0
virtual void OnEncodedFrame(const char *data, int length, const VideoCodecConfig &codec_config, bool b_keyframe, double reference_time_ms)=0
通知SDK采集到编码数据,SDK会切换到内部线程进行发送
Definition: video_capture.h:396
virtual VideoCaptureDeviceBase * Create(const char *device_id)=0
创建采集设备
virtual void Destroy(VideoCaptureDeviceBase *vc)=0
销毁采集设备
virtual ~VideoCaptureFactory()
Definition: video_capture.h:398
Definition: video_capture.h:203
virtual void * GetSurfaceTexture()=0
获取SurfaceTexture对应的jobject
virtual int SetROI(ROIRect *rects, int count, unsigned long long timestamp_ns)=0
设置编码器感兴趣的区域,优化图像主观体验
virtual void SetFillMode(int mode)=0
当图像宽高和编码宽高的宽高比不一致时使用的填充模式,默认裁剪
virtual void SetTextureResolution(int width, int height)=0
同步纹理的宽高,当纹理款高和编码宽高的宽高比不一致时按照填充模式填充
Definition: video_capture.h:223
virtual void SetTransformMatrix(float matrix[16])=0
transform可以包含旋转/翻转/缩放,SDK会先执行transform,再执行其他操作
virtual void SetFillMode(int mode)=0
当时图像宽高和编码宽高的宽高比不一致时使用的填充模式,默认裁剪
virtual void SetRotation(int rotation)=0
用于修正图像的角度,rotation在transform后执行,注意不要重复计算rotation
virtual int SetROI(ROIRect *rects, int count)=0
设置编码器感兴趣的区域,优化图像主观体验
virtual void ResetTextureContext()=0
通知SDK纹理相关的上下文发生变化,用来清除缓存的上下文状态,比如EglContext,必须和OnIncomingCapturedData在同一个线程调用,不保证线程安全
virtual void OnIncomingCapturedData(int texture_id, int width, int height, double reference_time_ms)=0
通知SDK采集到视频数据,SDK会同步绘制到FBO,切换到内部线程进行编码,如果缓冲队列不够,SDK会自动丢帧
virtual void SetFlipMode(int mode)=0
SDK默认垂直翻转,如果不需要,设置0,前处理的最后一步
Definition: video_capture.h:464
virtual ~Client()
Definition: video_capture.h:466
virtual void * GetInterface()=0
获取不同滤镜处理模型对应的接口
virtual void Destroy()=0
Definition: video_capture.h:446
virtual void OnProcess(void *buffer, int size, int width, int height, int stride, unsigned long long timestamp_100n)=0
virtual void OnProcessWithDest(void *buffer, int size, int width, int height, int stride, unsigned long long timestamp_100n, VideoBufferDestination dest)
Definition: video_capture.h:449
Definition: video_capture.h:530
virtual VideoFilter * Create()=0
创建滤镜
virtual ~VideoFilterFactory()
Definition: video_capture.h:532
virtual void Destroy(VideoFilter *vf)=0
销毁滤镜
Definition: video_capture.h:462
virtual void * GetInterface(VideoBufferType buffer_type=BUFFER_TYPE_UNKNOWN)=0
获取不同滤镜处理模型对应的接口
virtual void StopAndDeAllocate()=0
停止并且释放采集占用的资源,同时调用client的Destroy方法,这里的client指的是AllocateAndStart传递的client
virtual void AllocateAndStart(Client *client)=0
初始化采集使用的资源,例如启动线程,保存SDK传递的回调
virtual VideoBufferType SupportBufferType()=0
获取滤镜处理类型,SDK会根据此类型,使用对应的接口传输数据
Definition: video_capture.h:454
virtual void OnProcessMemWithDest(unsigned char **pData, int *dataLen, int width, int height, int stride[4], unsigned long long timestamp_100n, VideoBufferDestination dest)
Definition: video_capture.h:457
virtual void OnProcessMem(unsigned char **pData, int *dataLen, int width, int height, int stride[4], unsigned long long timestamp_100n)=0
Definition: audio_capture.h:4
VideoCodecType
Definition: video_format.h:190
@ CODEC_TYPE_AVC_AVCC
Definition: video_format.h:191
VideoDataFormat VideoCaptureFormat
Definition: video_capture.h:13
VideoFlipMode
Definition: video_capture.h:93
@ FLIP_MODE_X
Definition: video_capture.h:95
@ FLIP_MODE_Y
Definition: video_capture.h:96
@ FLIP_MODE_NONE
Definition: video_capture.h:94
VideoBufferDestination
Definition: video_capture.h:430
@ BUFFER_TO_BOTH
Definition: video_capture.h:433
@ BUFFER_TO_PREVIEW
Definition: video_capture.h:431
@ BUFFER_TO_ENCODE
Definition: video_capture.h:432
VideoFillMode
Definition: video_capture.h:87
@ FILL_MODE_BLACKBAR
Definition: video_capture.h:88
@ FILL_MODE_CROP
Definition: video_capture.h:89
@ FILL_MODE_STRETCH
Definition: video_capture.h:90
VideoPixelBufferType
Definition: video_capture.h:296
@ PIXEL_BUFFER_TYPE_D3D12_TEXTURE
Definition: video_capture.h:307
@ PIXEL_BUFFER_TYPE_I422_MEM_FOR_HIGH422
Definition: video_capture.h:303
@ PIXEL_BUFFER_TYPE_D3D11_TEXTURE
Definition: video_capture.h:306
@ PIXEL_BUFFER_TYPE_ENCODED_FRAME
Definition: video_capture.h:302
@ PIXEL_BUFFER_TYPE_UNKNOWN
Definition: video_capture.h:297
@ PIXEL_BUFFER_TYPE_MEM
Definition: video_capture.h:298
@ PIXEL_BUFFER_TYPE_CV_PIXEL_BUFFER
Definition: video_capture.h:299
@ PIXEL_BUFFER_TYPE_D3D9_TEXTURE
Definition: video_capture.h:305
@ PIXEL_BUFFER_TYPE_SURFACE_TEXTURE
Definition: video_capture.h:300
@ PIXEL_BUFFER_TYPE_GL_TEXTURE_EXTERNAL_OES
Definition: video_capture.h:304
@ PIXEL_BUFFER_TYPE_GL_TEXTURE_2D
Definition: video_capture.h:301
VideoBufferType
Definition: video_capture.h:412
@ BUFFER_TYPE_UNKNOWN
Definition: video_capture.h:413
@ BUFFER_TYPE_SYNC_CM_SAMPLE_BUFFER
Definition: video_capture.h:424
@ BUFFER_TYPE_ASYNC_CM_SAMPLE_BUFFER
Definition: video_capture.h:423
@ BUFFER_TYPE_SYNC_GL_TEXTURE_2D
Definition: video_capture.h:419
@ BUFFER_TYPE_SYNC_I420_MEM
Definition: video_capture.h:426
@ BUFFER_TYPE_MEM
Definition: video_capture.h:414
@ BUFFER_TYPE_SYNC_NV12_PIXEL_BUFFER
Definition: video_capture.h:427
@ BUFFER_TYPE_SYNC_BGRA32_MEM
Definition: video_capture.h:425
@ BUFFER_TYPE_ASYNC_NV12_PIXEL_BUFFER
Definition: video_capture.h:422
@ BUFFER_TYPE_SYNC_PIXEL_BUFFER
Definition: video_capture.h:416
@ BUFFER_TYPE_ASYNC_I420_MEM
Definition: video_capture.h:420
@ BUFFER_TYPE_ASYNC_PIXEL_BUFFER
Definition: video_capture.h:415
@ BUFFER_TYPE_ASYNC_I420_PIXEL_BUFFER
Definition: video_capture.h:421
@ BUFFER_TYPE_HYBRID_MEM_GL_TEXTURE_2D
Definition: video_capture.h:418
@ BUFFER_TYPE_SURFACE_TEXTURE
Definition: video_capture.h:417
@ VCAP_ERROR_NOERROR
Definition: video_capture.h:6
@ VCAP_ERROR_GENERIC_ERROR
Definition: video_capture.h:7
@ VCAP_ERROR_NOMEMORY
Definition: video_capture.h:8
@ VCAP_ERROR_INVALID_ACTIVE_D3D11_DEVICE
Definition: video_capture.h:10
Definition: video_capture.h:100
int right
Definition: video_capture.h:109
int top
Definition: video_capture.h:106
int bottom
Definition: video_capture.h:108
ROIRect()
Definition: video_capture.h:101
int left
Definition: video_capture.h:107
int level
Definition: video_capture.h:110
Definition: video_capture.h:257
VideoCodecType codec_type
Definition: video_capture.h:263
VideoCodecConfig()
Definition: video_capture.h:258
int width
Definition: video_capture.h:261
int height
Definition: video_capture.h:262
const char * media_side_info
Definition: video_capture.h:264
bool is_external_clock
Definition: video_capture.h:267
int rotation
Definition: video_capture.h:268
int media_side_info_size
Definition: video_capture.h:265
int stream_layer
Definition: video_capture.h:270
Definition: video_format.h:140