/*
* Copyright (c) 2010-2019 Belledonne Communications SARL.
*
* This file is part of mediastreamer2.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
#ifndef webcam_h
#define webcam_h
#include
#include
/**
* @file mswebcam.h
* @brief mediastreamer2 mswebcam.h include file
*
* This file provide the API needed to manage
* soundcard filters.
*
*/
/**
* @defgroup mediastreamer2_webcam Camera API - manage video capture devices
* @ingroup mediastreamer2_api
* @{
*/
struct _MSWebCamManager{
MSFactory* factory;
MSList *cams;
MSList *descs;
};
/**
* Structure for webcam manager object.
* @var MSWebCamManager
*/
typedef struct _MSWebCamManager MSWebCamManager;
struct _MSWebCam;
typedef void (*MSWebCamDetectFunc)(MSWebCamManager *obj);
typedef void (*MSWebCamInitFunc)(struct _MSWebCam *obj);
typedef void (*MSWebCamUninitFunc)(struct _MSWebCam *obj);
typedef struct _MSFilter * (*MSWebCamCreateReaderFunc)(struct _MSWebCam *obj);
typedef bool_t (*MSWebCamEncodeToMimeType)(struct _MSWebCam *obj, const char *mime_type);
struct _MSWebCamDesc{
const char *driver_type;
MSWebCamDetectFunc detect;
MSWebCamInitFunc init;
MSWebCamCreateReaderFunc create_reader;
MSWebCamUninitFunc uninit;
MSWebCamEncodeToMimeType encode_to_mime_type;
};
/**
* Structure for sound card description object.
* @var MSWebCamDesc
*/
typedef struct _MSWebCamDesc MSWebCamDesc;
struct _MSWebCam{
MSWebCamManager* wbcmanager;
MSWebCamDesc *desc;
char *name;
char *id;
void *data;
};
/**
* Structure for sound card object.
* @var MSWebCam
*/
typedef struct _MSWebCam MSWebCam;
#ifdef __cplusplus
extern "C"{
#endif
/**
* Retrieve a webcam manager object.
*
* @returns: MSWebCamManager if successfull, NULL otherwise.
* @deprecated use ms_factory_get_web_cam_manager().
*/
MS2_PUBLIC MS2_DEPRECATED MSWebCamManager * ms_web_cam_manager_get(void);
/**
* Returns the factory from the webcam object.
* @param c MSWebCam used to get to the factory.
*/
MS2_PUBLIC MSFactory * ms_web_cam_get_factory(MSWebCam *c);
/**
* Create a webcam manager object.
* You usually do not need this function, instead get the webcam manager from a factory
* with ms_factory_get_web_cam_manager().
*/
MS2_PUBLIC MSWebCamManager * ms_web_cam_manager_new(void);
/**
* Destroy the webcam manager object.
* You usually don't need this function, ms_factory_destroy() doing the job for you.
*/
MS2_PUBLIC void ms_web_cam_manager_destroy(MSWebCamManager* scm);
/**
* Retreive a webcam object based on its name.
*
* @param m A webcam manager containing webcam.
* @param id A name for card to search.
*
* Returns: MSWebCam if successfull, NULL otherwise.
*/
MS2_PUBLIC MSWebCam * ms_web_cam_manager_get_cam(MSWebCamManager *m, const char *id);
/**
* Retreive the default webcam object.
*
* @param m A webcam manager containing webcams.
*
* Returns: MSWebCam if successfull, NULL otherwise.
*/
MS2_PUBLIC MSWebCam * ms_web_cam_manager_get_default_cam(MSWebCamManager *m);
/**
* Retreive the list of webcam objects.
*
* @param m A webcam manager containing webcams.
*
* Returns: MSList of cards if successfull, NULL otherwise.
*/
MS2_PUBLIC const MSList * ms_web_cam_manager_get_list(MSWebCamManager *m);
/**
* Add a webcam object in a webcam manager's list.
*
* @param m A webcam manager containing webcams
* @param c A web cam object.
*
*/
MS2_PUBLIC void ms_web_cam_manager_add_cam(MSWebCamManager *m, MSWebCam *c);
MS2_PUBLIC MSWebCam * ms_web_cam_manager_create_cam(MSWebCamManager *m, MSWebCamDesc *desc);
MS2_PUBLIC void ms_web_cam_set_manager(MSWebCamManager*m, MSWebCam *c);
/**
* Add a webcam object on top of list of the webcam manager's list.
*
* @param m A webcam manager containing webcams
* @param c A web cam object.
*
*/
MS2_PUBLIC void ms_web_cam_manager_prepend_cam(MSWebCamManager *m, MSWebCam *c);
/**
* Register a webcam descriptor in a webcam manager.
*
* @param m A webcam manager containing sound cards.
* @param desc A webcam descriptor object.
*
*/
MS2_PUBLIC void ms_web_cam_manager_register_desc(MSWebCamManager *m, MSWebCamDesc *desc);
/**
* Ask all registered MSWebCamDesc to detect the webcams again.
*
* @param m A webcam manager
**/
MS2_PUBLIC void ms_web_cam_manager_reload(MSWebCamManager *m);
/**
* Create an INPUT filter based on the selected camera.
*
* @param obj A webcam object.
*
* Returns: A MSFilter if successfull, NULL otherwise.
*/
MS2_PUBLIC struct _MSFilter * ms_web_cam_create_reader(MSWebCam *obj);
/**
* Create a new webcam object.
*
* @param desc A webcam description object.
*
* Returns: MSWebCam if successfull, NULL otherwise.
*/
MS2_PUBLIC MSWebCam * ms_web_cam_new(MSWebCamDesc *desc);
/**
* Destroy webcam object.
*
* @param obj A MSWebCam object.
*/
MS2_PUBLIC void ms_web_cam_destroy(MSWebCam *obj);
/**
* Retreive a webcam's driver type string.
*
* Internal driver types are either: "V4L V4LV2"
*
* @param obj A webcam object.
*
* Returns: a string if successfull, NULL otherwise.
*/
MS2_PUBLIC const char *ms_web_cam_get_driver_type(const MSWebCam *obj);
/**
* Retreive a webcam's name.
*
* @param obj A webcam object.
*
* Returns: a string if successfull, NULL otherwise.
*/
MS2_PUBLIC const char *ms_web_cam_get_name(const MSWebCam *obj);
/**
* Retreive webcam's id: ($driver_type: $name).
*
* @param obj A webcam object.
*
* Returns: A string if successfull, NULL otherwise.
*/
MS2_PUBLIC const char *ms_web_cam_get_string_id(MSWebCam *obj);
/*specific methods for static image:*/
MS2_PUBLIC void ms_static_image_set_default_image(const char *path);
MS2_PUBLIC const char *ms_static_image_get_default_image(void);
/** method for the "nowebcam" filter */
#define MS_STATIC_IMAGE_SET_IMAGE \
MS_FILTER_METHOD(MS_STATIC_IMAGE_ID,0,const char)
#ifdef __cplusplus
}
#endif
/** @} */
#endif