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);
 
  179  BOOL (*
Activate)(ICamHal* 
ihal, 
const char* deviceId, UINT32* errorCode);
 
  202  INT16(*GetMediaTypeDescriptions)
 
  203  (ICamHal* 
ihal, 
const char* deviceId, 
int streamIndex,
 
  218   ICamHalSampleCapturedCallback callback);
 
 
  237typedef UINT (*PREGISTERCAMERAHAL)(IWTSPlugin* plugin, ICamHal* hal);
 
  242  PREGISTERCAMERAHAL pRegisterCameraHal;
 
 
  257                                      CAM_ERROR_CODE code);
 
  259                        wStream* out, BOOL freeStream);
 
  264WINPR_ATTR_MALLOC(ecam_dev_destroy, 1)
 
  270BOOL ecam_encoder_compress(
CameraDeviceStream* stream, const BYTE* srcData, 
size_t srcSize,
 
  271                           BYTE** ppDstData, 
size_t* pDstSize);
 
  272UINT32 h264_get_max_bitrate(UINT32 height);
 
interface to implement for the camera HAL
 
UINT(* StopStream)(ICamHal *ihal, const char *deviceId, int streamIndex)
 
BOOL(* Activate)(ICamHal *ihal, const char *deviceId, UINT32 *errorCode)
 
BOOL(* Deactivate)(ICamHal *ihal, const char *deviceId, UINT32 *errorCode)
 
UINT(* Free)(ICamHal *ihal)