20#ifndef FREERDP_CLIENT_CAMERA_H
21#define FREERDP_CLIENT_CAMERA_H
28#if defined(WITH_INPUT_FORMAT_MJPG)
29#include <libavcodec/avcodec.h>
32#include <libswscale/swscale.h>
33#include <libavutil/imgutils.h>
35#include <winpr/wlog.h>
36#include <winpr/wtypes.h>
38#include <freerdp/api.h>
39#include <freerdp/types.h>
41#include <freerdp/client/channels.h>
42#include <freerdp/channels/log.h>
43#include <freerdp/channels/rdpecam.h>
44#include <freerdp/codecs.h>
45#include <freerdp/primitives.h>
47#define ECAM_PROTO_VERSION 0x02
49#define ECAM_DEVICE_MAX_STREAMS 1
50#define ECAM_MAX_MEDIA_TYPE_DESCRIPTORS 256
56#define ECAM_MAX_SAMPLE_CREDITS 8
62#define ECAM_SAMPLE_RESPONSE_BUFFER_SIZE (1024ULL * 4050ULL)
68#define CAM_MEDIA_FORMAT_MJPG_H264 0x0401
75 IWTSListener* listener;
92 CAM_MEDIA_FORMAT inputFormat;
93 CAM_MEDIA_FORMAT outputFormat;
109#if defined(WITH_INPUT_FORMAT_MJPG)
110 AVCodecContext* avContext;
111 AVPacket* avInputPkt;
115#if defined(WITH_INPUT_FORMAT_H264)
116 size_t h264FrameMaxSize;
121 struct SwsContext* sws;
127 return stream->formats.inputFormat;
131 return stream->formats.outputFormat;
136 IWTSListener* listener;
150 const char* deviceId,
const char* deviceName);
153typedef UINT (*ICamHalSampleCapturedCallback)(
CameraDevice* dev,
int streamIndex,
154 const BYTE* sample,
size_t size);
159 (ICamHal* ihal, ICamHalEnumCallback callback,
CameraPlugin* ecam,
161 INT16(*GetMediaTypeDescriptions)
162 (ICamHal* ihal,
const char* deviceId,
int streamIndex,
167 ICamHalSampleCapturedCallback callback);
168 UINT (*StopStream)(ICamHal* ihal,
const char* deviceId,
int streamIndex);
169 UINT (*Free)(ICamHal* hal);
172typedef UINT (*PREGISTERCAMERAHAL)(IWTSPlugin* plugin, ICamHal* hal);
177 PREGISTERCAMERAHAL pRegisterCameraHal;
192 CAM_ERROR_CODE code);
194 wStream* out, BOOL freeStream);
199WINPR_ATTR_MALLOC(ecam_dev_destroy, 1)
205BOOL ecam_encoder_compress(
CameraDeviceStream* stream, const BYTE* srcData,
size_t srcSize,
206 BYTE** ppDstData,
size_t* pDstSize);
207UINT32 h264_get_max_bitrate(UINT32 height);