1cabdff1aSopenharmony_ci/* 2cabdff1aSopenharmony_ci * This file is part of FFmpeg. 3cabdff1aSopenharmony_ci * 4cabdff1aSopenharmony_ci * FFmpeg is free software; you can redistribute it and/or 5cabdff1aSopenharmony_ci * modify it under the terms of the GNU Lesser General Public 6cabdff1aSopenharmony_ci * License as published by the Free Software Foundation; either 7cabdff1aSopenharmony_ci * version 2.1 of the License, or (at your option) any later version. 8cabdff1aSopenharmony_ci * 9cabdff1aSopenharmony_ci * FFmpeg is distributed in the hope that it will be useful, 10cabdff1aSopenharmony_ci * but WITHOUT ANY WARRANTY; without even the implied warranty of 11cabdff1aSopenharmony_ci * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12cabdff1aSopenharmony_ci * Lesser General Public License for more details. 13cabdff1aSopenharmony_ci * 14cabdff1aSopenharmony_ci * You should have received a copy of the GNU Lesser General Public 15cabdff1aSopenharmony_ci * License along with FFmpeg; if not, write to the Free Software 16cabdff1aSopenharmony_ci * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 17cabdff1aSopenharmony_ci */ 18cabdff1aSopenharmony_ci 19cabdff1aSopenharmony_ci#ifndef AVDEVICE_AVDEVICE_H 20cabdff1aSopenharmony_ci#define AVDEVICE_AVDEVICE_H 21cabdff1aSopenharmony_ci 22cabdff1aSopenharmony_ci#include "version_major.h" 23cabdff1aSopenharmony_ci#ifndef HAVE_AV_CONFIG_H 24cabdff1aSopenharmony_ci/* When included as part of the ffmpeg build, only include the major version 25cabdff1aSopenharmony_ci * to avoid unnecessary rebuilds. When included externally, keep including 26cabdff1aSopenharmony_ci * the full version information. */ 27cabdff1aSopenharmony_ci#include "version.h" 28cabdff1aSopenharmony_ci#endif 29cabdff1aSopenharmony_ci 30cabdff1aSopenharmony_ci/** 31cabdff1aSopenharmony_ci * @file 32cabdff1aSopenharmony_ci * @ingroup lavd 33cabdff1aSopenharmony_ci * Main libavdevice API header 34cabdff1aSopenharmony_ci */ 35cabdff1aSopenharmony_ci 36cabdff1aSopenharmony_ci/** 37cabdff1aSopenharmony_ci * @defgroup lavd libavdevice 38cabdff1aSopenharmony_ci * Special devices muxing/demuxing library. 39cabdff1aSopenharmony_ci * 40cabdff1aSopenharmony_ci * Libavdevice is a complementary library to @ref libavf "libavformat". It 41cabdff1aSopenharmony_ci * provides various "special" platform-specific muxers and demuxers, e.g. for 42cabdff1aSopenharmony_ci * grabbing devices, audio capture and playback etc. As a consequence, the 43cabdff1aSopenharmony_ci * (de)muxers in libavdevice are of the AVFMT_NOFILE type (they use their own 44cabdff1aSopenharmony_ci * I/O functions). The filename passed to avformat_open_input() often does not 45cabdff1aSopenharmony_ci * refer to an actually existing file, but has some special device-specific 46cabdff1aSopenharmony_ci * meaning - e.g. for xcbgrab it is the display name. 47cabdff1aSopenharmony_ci * 48cabdff1aSopenharmony_ci * To use libavdevice, simply call avdevice_register_all() to register all 49cabdff1aSopenharmony_ci * compiled muxers and demuxers. They all use standard libavformat API. 50cabdff1aSopenharmony_ci * 51cabdff1aSopenharmony_ci * @{ 52cabdff1aSopenharmony_ci */ 53cabdff1aSopenharmony_ci 54cabdff1aSopenharmony_ci#include "libavutil/log.h" 55cabdff1aSopenharmony_ci#include "libavutil/opt.h" 56cabdff1aSopenharmony_ci#include "libavutil/dict.h" 57cabdff1aSopenharmony_ci#include "libavformat/avformat.h" 58cabdff1aSopenharmony_ci 59cabdff1aSopenharmony_ci/** 60cabdff1aSopenharmony_ci * Return the LIBAVDEVICE_VERSION_INT constant. 61cabdff1aSopenharmony_ci */ 62cabdff1aSopenharmony_ciunsigned avdevice_version(void); 63cabdff1aSopenharmony_ci 64cabdff1aSopenharmony_ci/** 65cabdff1aSopenharmony_ci * Return the libavdevice build-time configuration. 66cabdff1aSopenharmony_ci */ 67cabdff1aSopenharmony_ciconst char *avdevice_configuration(void); 68cabdff1aSopenharmony_ci 69cabdff1aSopenharmony_ci/** 70cabdff1aSopenharmony_ci * Return the libavdevice license. 71cabdff1aSopenharmony_ci */ 72cabdff1aSopenharmony_ciconst char *avdevice_license(void); 73cabdff1aSopenharmony_ci 74cabdff1aSopenharmony_ci/** 75cabdff1aSopenharmony_ci * Initialize libavdevice and register all the input and output devices. 76cabdff1aSopenharmony_ci */ 77cabdff1aSopenharmony_civoid avdevice_register_all(void); 78cabdff1aSopenharmony_ci 79cabdff1aSopenharmony_ci/** 80cabdff1aSopenharmony_ci * Audio input devices iterator. 81cabdff1aSopenharmony_ci * 82cabdff1aSopenharmony_ci * If d is NULL, returns the first registered input audio/video device, 83cabdff1aSopenharmony_ci * if d is non-NULL, returns the next registered input audio/video device after d 84cabdff1aSopenharmony_ci * or NULL if d is the last one. 85cabdff1aSopenharmony_ci */ 86cabdff1aSopenharmony_ciconst AVInputFormat *av_input_audio_device_next(const AVInputFormat *d); 87cabdff1aSopenharmony_ci 88cabdff1aSopenharmony_ci/** 89cabdff1aSopenharmony_ci * Video input devices iterator. 90cabdff1aSopenharmony_ci * 91cabdff1aSopenharmony_ci * If d is NULL, returns the first registered input audio/video device, 92cabdff1aSopenharmony_ci * if d is non-NULL, returns the next registered input audio/video device after d 93cabdff1aSopenharmony_ci * or NULL if d is the last one. 94cabdff1aSopenharmony_ci */ 95cabdff1aSopenharmony_ciconst AVInputFormat *av_input_video_device_next(const AVInputFormat *d); 96cabdff1aSopenharmony_ci 97cabdff1aSopenharmony_ci/** 98cabdff1aSopenharmony_ci * Audio output devices iterator. 99cabdff1aSopenharmony_ci * 100cabdff1aSopenharmony_ci * If d is NULL, returns the first registered output audio/video device, 101cabdff1aSopenharmony_ci * if d is non-NULL, returns the next registered output audio/video device after d 102cabdff1aSopenharmony_ci * or NULL if d is the last one. 103cabdff1aSopenharmony_ci */ 104cabdff1aSopenharmony_ciconst AVOutputFormat *av_output_audio_device_next(const AVOutputFormat *d); 105cabdff1aSopenharmony_ci 106cabdff1aSopenharmony_ci/** 107cabdff1aSopenharmony_ci * Video output devices iterator. 108cabdff1aSopenharmony_ci * 109cabdff1aSopenharmony_ci * If d is NULL, returns the first registered output audio/video device, 110cabdff1aSopenharmony_ci * if d is non-NULL, returns the next registered output audio/video device after d 111cabdff1aSopenharmony_ci * or NULL if d is the last one. 112cabdff1aSopenharmony_ci */ 113cabdff1aSopenharmony_ciconst AVOutputFormat *av_output_video_device_next(const AVOutputFormat *d); 114cabdff1aSopenharmony_ci 115cabdff1aSopenharmony_citypedef struct AVDeviceRect { 116cabdff1aSopenharmony_ci int x; /**< x coordinate of top left corner */ 117cabdff1aSopenharmony_ci int y; /**< y coordinate of top left corner */ 118cabdff1aSopenharmony_ci int width; /**< width */ 119cabdff1aSopenharmony_ci int height; /**< height */ 120cabdff1aSopenharmony_ci} AVDeviceRect; 121cabdff1aSopenharmony_ci 122cabdff1aSopenharmony_ci/** 123cabdff1aSopenharmony_ci * Message types used by avdevice_app_to_dev_control_message(). 124cabdff1aSopenharmony_ci */ 125cabdff1aSopenharmony_cienum AVAppToDevMessageType { 126cabdff1aSopenharmony_ci /** 127cabdff1aSopenharmony_ci * Dummy message. 128cabdff1aSopenharmony_ci */ 129cabdff1aSopenharmony_ci AV_APP_TO_DEV_NONE = MKBETAG('N','O','N','E'), 130cabdff1aSopenharmony_ci 131cabdff1aSopenharmony_ci /** 132cabdff1aSopenharmony_ci * Window size change message. 133cabdff1aSopenharmony_ci * 134cabdff1aSopenharmony_ci * Message is sent to the device every time the application changes the size 135cabdff1aSopenharmony_ci * of the window device renders to. 136cabdff1aSopenharmony_ci * Message should also be sent right after window is created. 137cabdff1aSopenharmony_ci * 138cabdff1aSopenharmony_ci * data: AVDeviceRect: new window size. 139cabdff1aSopenharmony_ci */ 140cabdff1aSopenharmony_ci AV_APP_TO_DEV_WINDOW_SIZE = MKBETAG('G','E','O','M'), 141cabdff1aSopenharmony_ci 142cabdff1aSopenharmony_ci /** 143cabdff1aSopenharmony_ci * Repaint request message. 144cabdff1aSopenharmony_ci * 145cabdff1aSopenharmony_ci * Message is sent to the device when window has to be repainted. 146cabdff1aSopenharmony_ci * 147cabdff1aSopenharmony_ci * data: AVDeviceRect: area required to be repainted. 148cabdff1aSopenharmony_ci * NULL: whole area is required to be repainted. 149cabdff1aSopenharmony_ci */ 150cabdff1aSopenharmony_ci AV_APP_TO_DEV_WINDOW_REPAINT = MKBETAG('R','E','P','A'), 151cabdff1aSopenharmony_ci 152cabdff1aSopenharmony_ci /** 153cabdff1aSopenharmony_ci * Request pause/play. 154cabdff1aSopenharmony_ci * 155cabdff1aSopenharmony_ci * Application requests pause/unpause playback. 156cabdff1aSopenharmony_ci * Mostly usable with devices that have internal buffer. 157cabdff1aSopenharmony_ci * By default devices are not paused. 158cabdff1aSopenharmony_ci * 159cabdff1aSopenharmony_ci * data: NULL 160cabdff1aSopenharmony_ci */ 161cabdff1aSopenharmony_ci AV_APP_TO_DEV_PAUSE = MKBETAG('P', 'A', 'U', ' '), 162cabdff1aSopenharmony_ci AV_APP_TO_DEV_PLAY = MKBETAG('P', 'L', 'A', 'Y'), 163cabdff1aSopenharmony_ci AV_APP_TO_DEV_TOGGLE_PAUSE = MKBETAG('P', 'A', 'U', 'T'), 164cabdff1aSopenharmony_ci 165cabdff1aSopenharmony_ci /** 166cabdff1aSopenharmony_ci * Volume control message. 167cabdff1aSopenharmony_ci * 168cabdff1aSopenharmony_ci * Set volume level. It may be device-dependent if volume 169cabdff1aSopenharmony_ci * is changed per stream or system wide. Per stream volume 170cabdff1aSopenharmony_ci * change is expected when possible. 171cabdff1aSopenharmony_ci * 172cabdff1aSopenharmony_ci * data: double: new volume with range of 0.0 - 1.0. 173cabdff1aSopenharmony_ci */ 174cabdff1aSopenharmony_ci AV_APP_TO_DEV_SET_VOLUME = MKBETAG('S', 'V', 'O', 'L'), 175cabdff1aSopenharmony_ci 176cabdff1aSopenharmony_ci /** 177cabdff1aSopenharmony_ci * Mute control messages. 178cabdff1aSopenharmony_ci * 179cabdff1aSopenharmony_ci * Change mute state. It may be device-dependent if mute status 180cabdff1aSopenharmony_ci * is changed per stream or system wide. Per stream mute status 181cabdff1aSopenharmony_ci * change is expected when possible. 182cabdff1aSopenharmony_ci * 183cabdff1aSopenharmony_ci * data: NULL. 184cabdff1aSopenharmony_ci */ 185cabdff1aSopenharmony_ci AV_APP_TO_DEV_MUTE = MKBETAG(' ', 'M', 'U', 'T'), 186cabdff1aSopenharmony_ci AV_APP_TO_DEV_UNMUTE = MKBETAG('U', 'M', 'U', 'T'), 187cabdff1aSopenharmony_ci AV_APP_TO_DEV_TOGGLE_MUTE = MKBETAG('T', 'M', 'U', 'T'), 188cabdff1aSopenharmony_ci 189cabdff1aSopenharmony_ci /** 190cabdff1aSopenharmony_ci * Get volume/mute messages. 191cabdff1aSopenharmony_ci * 192cabdff1aSopenharmony_ci * Force the device to send AV_DEV_TO_APP_VOLUME_LEVEL_CHANGED or 193cabdff1aSopenharmony_ci * AV_DEV_TO_APP_MUTE_STATE_CHANGED command respectively. 194cabdff1aSopenharmony_ci * 195cabdff1aSopenharmony_ci * data: NULL. 196cabdff1aSopenharmony_ci */ 197cabdff1aSopenharmony_ci AV_APP_TO_DEV_GET_VOLUME = MKBETAG('G', 'V', 'O', 'L'), 198cabdff1aSopenharmony_ci AV_APP_TO_DEV_GET_MUTE = MKBETAG('G', 'M', 'U', 'T'), 199cabdff1aSopenharmony_ci}; 200cabdff1aSopenharmony_ci 201cabdff1aSopenharmony_ci/** 202cabdff1aSopenharmony_ci * Message types used by avdevice_dev_to_app_control_message(). 203cabdff1aSopenharmony_ci */ 204cabdff1aSopenharmony_cienum AVDevToAppMessageType { 205cabdff1aSopenharmony_ci /** 206cabdff1aSopenharmony_ci * Dummy message. 207cabdff1aSopenharmony_ci */ 208cabdff1aSopenharmony_ci AV_DEV_TO_APP_NONE = MKBETAG('N','O','N','E'), 209cabdff1aSopenharmony_ci 210cabdff1aSopenharmony_ci /** 211cabdff1aSopenharmony_ci * Create window buffer message. 212cabdff1aSopenharmony_ci * 213cabdff1aSopenharmony_ci * Device requests to create a window buffer. Exact meaning is device- 214cabdff1aSopenharmony_ci * and application-dependent. Message is sent before rendering first 215cabdff1aSopenharmony_ci * frame and all one-shot initializations should be done here. 216cabdff1aSopenharmony_ci * Application is allowed to ignore preferred window buffer size. 217cabdff1aSopenharmony_ci * 218cabdff1aSopenharmony_ci * @note: Application is obligated to inform about window buffer size 219cabdff1aSopenharmony_ci * with AV_APP_TO_DEV_WINDOW_SIZE message. 220cabdff1aSopenharmony_ci * 221cabdff1aSopenharmony_ci * data: AVDeviceRect: preferred size of the window buffer. 222cabdff1aSopenharmony_ci * NULL: no preferred size of the window buffer. 223cabdff1aSopenharmony_ci */ 224cabdff1aSopenharmony_ci AV_DEV_TO_APP_CREATE_WINDOW_BUFFER = MKBETAG('B','C','R','E'), 225cabdff1aSopenharmony_ci 226cabdff1aSopenharmony_ci /** 227cabdff1aSopenharmony_ci * Prepare window buffer message. 228cabdff1aSopenharmony_ci * 229cabdff1aSopenharmony_ci * Device requests to prepare a window buffer for rendering. 230cabdff1aSopenharmony_ci * Exact meaning is device- and application-dependent. 231cabdff1aSopenharmony_ci * Message is sent before rendering of each frame. 232cabdff1aSopenharmony_ci * 233cabdff1aSopenharmony_ci * data: NULL. 234cabdff1aSopenharmony_ci */ 235cabdff1aSopenharmony_ci AV_DEV_TO_APP_PREPARE_WINDOW_BUFFER = MKBETAG('B','P','R','E'), 236cabdff1aSopenharmony_ci 237cabdff1aSopenharmony_ci /** 238cabdff1aSopenharmony_ci * Display window buffer message. 239cabdff1aSopenharmony_ci * 240cabdff1aSopenharmony_ci * Device requests to display a window buffer. 241cabdff1aSopenharmony_ci * Message is sent when new frame is ready to be displayed. 242cabdff1aSopenharmony_ci * Usually buffers need to be swapped in handler of this message. 243cabdff1aSopenharmony_ci * 244cabdff1aSopenharmony_ci * data: NULL. 245cabdff1aSopenharmony_ci */ 246cabdff1aSopenharmony_ci AV_DEV_TO_APP_DISPLAY_WINDOW_BUFFER = MKBETAG('B','D','I','S'), 247cabdff1aSopenharmony_ci 248cabdff1aSopenharmony_ci /** 249cabdff1aSopenharmony_ci * Destroy window buffer message. 250cabdff1aSopenharmony_ci * 251cabdff1aSopenharmony_ci * Device requests to destroy a window buffer. 252cabdff1aSopenharmony_ci * Message is sent when device is about to be destroyed and window 253cabdff1aSopenharmony_ci * buffer is not required anymore. 254cabdff1aSopenharmony_ci * 255cabdff1aSopenharmony_ci * data: NULL. 256cabdff1aSopenharmony_ci */ 257cabdff1aSopenharmony_ci AV_DEV_TO_APP_DESTROY_WINDOW_BUFFER = MKBETAG('B','D','E','S'), 258cabdff1aSopenharmony_ci 259cabdff1aSopenharmony_ci /** 260cabdff1aSopenharmony_ci * Buffer fullness status messages. 261cabdff1aSopenharmony_ci * 262cabdff1aSopenharmony_ci * Device signals buffer overflow/underflow. 263cabdff1aSopenharmony_ci * 264cabdff1aSopenharmony_ci * data: NULL. 265cabdff1aSopenharmony_ci */ 266cabdff1aSopenharmony_ci AV_DEV_TO_APP_BUFFER_OVERFLOW = MKBETAG('B','O','F','L'), 267cabdff1aSopenharmony_ci AV_DEV_TO_APP_BUFFER_UNDERFLOW = MKBETAG('B','U','F','L'), 268cabdff1aSopenharmony_ci 269cabdff1aSopenharmony_ci /** 270cabdff1aSopenharmony_ci * Buffer readable/writable. 271cabdff1aSopenharmony_ci * 272cabdff1aSopenharmony_ci * Device informs that buffer is readable/writable. 273cabdff1aSopenharmony_ci * When possible, device informs how many bytes can be read/write. 274cabdff1aSopenharmony_ci * 275cabdff1aSopenharmony_ci * @warning Device may not inform when number of bytes than can be read/write changes. 276cabdff1aSopenharmony_ci * 277cabdff1aSopenharmony_ci * data: int64_t: amount of bytes available to read/write. 278cabdff1aSopenharmony_ci * NULL: amount of bytes available to read/write is not known. 279cabdff1aSopenharmony_ci */ 280cabdff1aSopenharmony_ci AV_DEV_TO_APP_BUFFER_READABLE = MKBETAG('B','R','D',' '), 281cabdff1aSopenharmony_ci AV_DEV_TO_APP_BUFFER_WRITABLE = MKBETAG('B','W','R',' '), 282cabdff1aSopenharmony_ci 283cabdff1aSopenharmony_ci /** 284cabdff1aSopenharmony_ci * Mute state change message. 285cabdff1aSopenharmony_ci * 286cabdff1aSopenharmony_ci * Device informs that mute state has changed. 287cabdff1aSopenharmony_ci * 288cabdff1aSopenharmony_ci * data: int: 0 for not muted state, non-zero for muted state. 289cabdff1aSopenharmony_ci */ 290cabdff1aSopenharmony_ci AV_DEV_TO_APP_MUTE_STATE_CHANGED = MKBETAG('C','M','U','T'), 291cabdff1aSopenharmony_ci 292cabdff1aSopenharmony_ci /** 293cabdff1aSopenharmony_ci * Volume level change message. 294cabdff1aSopenharmony_ci * 295cabdff1aSopenharmony_ci * Device informs that volume level has changed. 296cabdff1aSopenharmony_ci * 297cabdff1aSopenharmony_ci * data: double: new volume with range of 0.0 - 1.0. 298cabdff1aSopenharmony_ci */ 299cabdff1aSopenharmony_ci AV_DEV_TO_APP_VOLUME_LEVEL_CHANGED = MKBETAG('C','V','O','L'), 300cabdff1aSopenharmony_ci}; 301cabdff1aSopenharmony_ci 302cabdff1aSopenharmony_ci/** 303cabdff1aSopenharmony_ci * Send control message from application to device. 304cabdff1aSopenharmony_ci * 305cabdff1aSopenharmony_ci * @param s device context. 306cabdff1aSopenharmony_ci * @param type message type. 307cabdff1aSopenharmony_ci * @param data message data. Exact type depends on message type. 308cabdff1aSopenharmony_ci * @param data_size size of message data. 309cabdff1aSopenharmony_ci * @return >= 0 on success, negative on error. 310cabdff1aSopenharmony_ci * AVERROR(ENOSYS) when device doesn't implement handler of the message. 311cabdff1aSopenharmony_ci */ 312cabdff1aSopenharmony_ciint avdevice_app_to_dev_control_message(struct AVFormatContext *s, 313cabdff1aSopenharmony_ci enum AVAppToDevMessageType type, 314cabdff1aSopenharmony_ci void *data, size_t data_size); 315cabdff1aSopenharmony_ci 316cabdff1aSopenharmony_ci/** 317cabdff1aSopenharmony_ci * Send control message from device to application. 318cabdff1aSopenharmony_ci * 319cabdff1aSopenharmony_ci * @param s device context. 320cabdff1aSopenharmony_ci * @param type message type. 321cabdff1aSopenharmony_ci * @param data message data. Can be NULL. 322cabdff1aSopenharmony_ci * @param data_size size of message data. 323cabdff1aSopenharmony_ci * @return >= 0 on success, negative on error. 324cabdff1aSopenharmony_ci * AVERROR(ENOSYS) when application doesn't implement handler of the message. 325cabdff1aSopenharmony_ci */ 326cabdff1aSopenharmony_ciint avdevice_dev_to_app_control_message(struct AVFormatContext *s, 327cabdff1aSopenharmony_ci enum AVDevToAppMessageType type, 328cabdff1aSopenharmony_ci void *data, size_t data_size); 329cabdff1aSopenharmony_ci 330cabdff1aSopenharmony_ci#if FF_API_DEVICE_CAPABILITIES 331cabdff1aSopenharmony_ci/** 332cabdff1aSopenharmony_ci * Following API allows user to probe device capabilities (supported codecs, 333cabdff1aSopenharmony_ci * pixel formats, sample formats, resolutions, channel counts, etc). 334cabdff1aSopenharmony_ci * It is build on top op AVOption API. 335cabdff1aSopenharmony_ci * Queried capabilities make it possible to set up converters of video or audio 336cabdff1aSopenharmony_ci * parameters that fit to the device. 337cabdff1aSopenharmony_ci * 338cabdff1aSopenharmony_ci * List of capabilities that can be queried: 339cabdff1aSopenharmony_ci * - Capabilities valid for both audio and video devices: 340cabdff1aSopenharmony_ci * - codec: supported audio/video codecs. 341cabdff1aSopenharmony_ci * type: AV_OPT_TYPE_INT (AVCodecID value) 342cabdff1aSopenharmony_ci * - Capabilities valid for audio devices: 343cabdff1aSopenharmony_ci * - sample_format: supported sample formats. 344cabdff1aSopenharmony_ci * type: AV_OPT_TYPE_INT (AVSampleFormat value) 345cabdff1aSopenharmony_ci * - sample_rate: supported sample rates. 346cabdff1aSopenharmony_ci * type: AV_OPT_TYPE_INT 347cabdff1aSopenharmony_ci * - channels: supported number of channels. 348cabdff1aSopenharmony_ci * type: AV_OPT_TYPE_INT 349cabdff1aSopenharmony_ci * - channel_layout: supported channel layouts. 350cabdff1aSopenharmony_ci * type: AV_OPT_TYPE_INT64 351cabdff1aSopenharmony_ci * - Capabilities valid for video devices: 352cabdff1aSopenharmony_ci * - pixel_format: supported pixel formats. 353cabdff1aSopenharmony_ci * type: AV_OPT_TYPE_INT (AVPixelFormat value) 354cabdff1aSopenharmony_ci * - window_size: supported window sizes (describes size of the window size presented to the user). 355cabdff1aSopenharmony_ci * type: AV_OPT_TYPE_IMAGE_SIZE 356cabdff1aSopenharmony_ci * - frame_size: supported frame sizes (describes size of provided video frames). 357cabdff1aSopenharmony_ci * type: AV_OPT_TYPE_IMAGE_SIZE 358cabdff1aSopenharmony_ci * - fps: supported fps values 359cabdff1aSopenharmony_ci * type: AV_OPT_TYPE_RATIONAL 360cabdff1aSopenharmony_ci * 361cabdff1aSopenharmony_ci * Value of the capability may be set by user using av_opt_set() function 362cabdff1aSopenharmony_ci * and AVDeviceCapabilitiesQuery object. Following queries will 363cabdff1aSopenharmony_ci * limit results to the values matching already set capabilities. 364cabdff1aSopenharmony_ci * For example, setting a codec may impact number of formats or fps values 365cabdff1aSopenharmony_ci * returned during next query. Setting invalid value may limit results to zero. 366cabdff1aSopenharmony_ci * 367cabdff1aSopenharmony_ci * Example of the usage basing on opengl output device: 368cabdff1aSopenharmony_ci * 369cabdff1aSopenharmony_ci * @code 370cabdff1aSopenharmony_ci * AVFormatContext *oc = NULL; 371cabdff1aSopenharmony_ci * AVDeviceCapabilitiesQuery *caps = NULL; 372cabdff1aSopenharmony_ci * AVOptionRanges *ranges; 373cabdff1aSopenharmony_ci * int ret; 374cabdff1aSopenharmony_ci * 375cabdff1aSopenharmony_ci * if ((ret = avformat_alloc_output_context2(&oc, NULL, "opengl", NULL)) < 0) 376cabdff1aSopenharmony_ci * goto fail; 377cabdff1aSopenharmony_ci * if (avdevice_capabilities_create(&caps, oc, NULL) < 0) 378cabdff1aSopenharmony_ci * goto fail; 379cabdff1aSopenharmony_ci * 380cabdff1aSopenharmony_ci * //query codecs 381cabdff1aSopenharmony_ci * if (av_opt_query_ranges(&ranges, caps, "codec", AV_OPT_MULTI_COMPONENT_RANGE)) < 0) 382cabdff1aSopenharmony_ci * goto fail; 383cabdff1aSopenharmony_ci * //pick codec here and set it 384cabdff1aSopenharmony_ci * av_opt_set(caps, "codec", AV_CODEC_ID_RAWVIDEO, 0); 385cabdff1aSopenharmony_ci * 386cabdff1aSopenharmony_ci * //query format 387cabdff1aSopenharmony_ci * if (av_opt_query_ranges(&ranges, caps, "pixel_format", AV_OPT_MULTI_COMPONENT_RANGE)) < 0) 388cabdff1aSopenharmony_ci * goto fail; 389cabdff1aSopenharmony_ci * //pick format here and set it 390cabdff1aSopenharmony_ci * av_opt_set(caps, "pixel_format", AV_PIX_FMT_YUV420P, 0); 391cabdff1aSopenharmony_ci * 392cabdff1aSopenharmony_ci * //query and set more capabilities 393cabdff1aSopenharmony_ci * 394cabdff1aSopenharmony_ci * fail: 395cabdff1aSopenharmony_ci * //clean up code 396cabdff1aSopenharmony_ci * avdevice_capabilities_free(&query, oc); 397cabdff1aSopenharmony_ci * avformat_free_context(oc); 398cabdff1aSopenharmony_ci * @endcode 399cabdff1aSopenharmony_ci */ 400cabdff1aSopenharmony_ci 401cabdff1aSopenharmony_ci/** 402cabdff1aSopenharmony_ci * Structure describes device capabilities. 403cabdff1aSopenharmony_ci * 404cabdff1aSopenharmony_ci * It is used by devices in conjunction with av_device_capabilities AVOption table 405cabdff1aSopenharmony_ci * to implement capabilities probing API based on AVOption API. Should not be used directly. 406cabdff1aSopenharmony_ci */ 407cabdff1aSopenharmony_citypedef struct AVDeviceCapabilitiesQuery { 408cabdff1aSopenharmony_ci const AVClass *av_class; 409cabdff1aSopenharmony_ci AVFormatContext *device_context; 410cabdff1aSopenharmony_ci enum AVCodecID codec; 411cabdff1aSopenharmony_ci enum AVSampleFormat sample_format; 412cabdff1aSopenharmony_ci enum AVPixelFormat pixel_format; 413cabdff1aSopenharmony_ci int sample_rate; 414cabdff1aSopenharmony_ci int channels; 415cabdff1aSopenharmony_ci int64_t channel_layout; 416cabdff1aSopenharmony_ci int window_width; 417cabdff1aSopenharmony_ci int window_height; 418cabdff1aSopenharmony_ci int frame_width; 419cabdff1aSopenharmony_ci int frame_height; 420cabdff1aSopenharmony_ci AVRational fps; 421cabdff1aSopenharmony_ci} AVDeviceCapabilitiesQuery; 422cabdff1aSopenharmony_ci 423cabdff1aSopenharmony_ci/** 424cabdff1aSopenharmony_ci * AVOption table used by devices to implement device capabilities API. Should not be used by a user. 425cabdff1aSopenharmony_ci */ 426cabdff1aSopenharmony_ciattribute_deprecated 427cabdff1aSopenharmony_ciextern const AVOption av_device_capabilities[]; 428cabdff1aSopenharmony_ci 429cabdff1aSopenharmony_ci/** 430cabdff1aSopenharmony_ci * Initialize capabilities probing API based on AVOption API. 431cabdff1aSopenharmony_ci * 432cabdff1aSopenharmony_ci * avdevice_capabilities_free() must be called when query capabilities API is 433cabdff1aSopenharmony_ci * not used anymore. 434cabdff1aSopenharmony_ci * 435cabdff1aSopenharmony_ci * @param[out] caps Device capabilities data. Pointer to a NULL pointer must be passed. 436cabdff1aSopenharmony_ci * @param s Context of the device. 437cabdff1aSopenharmony_ci * @param device_options An AVDictionary filled with device-private options. 438cabdff1aSopenharmony_ci * On return this parameter will be destroyed and replaced with a dict 439cabdff1aSopenharmony_ci * containing options that were not found. May be NULL. 440cabdff1aSopenharmony_ci * The same options must be passed later to avformat_write_header() for output 441cabdff1aSopenharmony_ci * devices or avformat_open_input() for input devices, or at any other place 442cabdff1aSopenharmony_ci * that affects device-private options. 443cabdff1aSopenharmony_ci * 444cabdff1aSopenharmony_ci * @return >= 0 on success, negative otherwise. 445cabdff1aSopenharmony_ci */ 446cabdff1aSopenharmony_ciattribute_deprecated 447cabdff1aSopenharmony_ciint avdevice_capabilities_create(AVDeviceCapabilitiesQuery **caps, AVFormatContext *s, 448cabdff1aSopenharmony_ci AVDictionary **device_options); 449cabdff1aSopenharmony_ci 450cabdff1aSopenharmony_ci/** 451cabdff1aSopenharmony_ci * Free resources created by avdevice_capabilities_create() 452cabdff1aSopenharmony_ci * 453cabdff1aSopenharmony_ci * @param caps Device capabilities data to be freed. 454cabdff1aSopenharmony_ci * @param s Context of the device. 455cabdff1aSopenharmony_ci */ 456cabdff1aSopenharmony_ciattribute_deprecated 457cabdff1aSopenharmony_civoid avdevice_capabilities_free(AVDeviceCapabilitiesQuery **caps, AVFormatContext *s); 458cabdff1aSopenharmony_ci#endif 459cabdff1aSopenharmony_ci 460cabdff1aSopenharmony_ci/** 461cabdff1aSopenharmony_ci * Structure describes basic parameters of the device. 462cabdff1aSopenharmony_ci */ 463cabdff1aSopenharmony_citypedef struct AVDeviceInfo { 464cabdff1aSopenharmony_ci char *device_name; /**< device name, format depends on device */ 465cabdff1aSopenharmony_ci char *device_description; /**< human friendly name */ 466cabdff1aSopenharmony_ci enum AVMediaType *media_types; /**< array indicating what media types(s), if any, a device can provide. If null, cannot provide any */ 467cabdff1aSopenharmony_ci int nb_media_types; /**< length of media_types array, 0 if device cannot provide any media types */ 468cabdff1aSopenharmony_ci} AVDeviceInfo; 469cabdff1aSopenharmony_ci 470cabdff1aSopenharmony_ci/** 471cabdff1aSopenharmony_ci * List of devices. 472cabdff1aSopenharmony_ci */ 473cabdff1aSopenharmony_citypedef struct AVDeviceInfoList { 474cabdff1aSopenharmony_ci AVDeviceInfo **devices; /**< list of autodetected devices */ 475cabdff1aSopenharmony_ci int nb_devices; /**< number of autodetected devices */ 476cabdff1aSopenharmony_ci int default_device; /**< index of default device or -1 if no default */ 477cabdff1aSopenharmony_ci} AVDeviceInfoList; 478cabdff1aSopenharmony_ci 479cabdff1aSopenharmony_ci/** 480cabdff1aSopenharmony_ci * List devices. 481cabdff1aSopenharmony_ci * 482cabdff1aSopenharmony_ci * Returns available device names and their parameters. 483cabdff1aSopenharmony_ci * 484cabdff1aSopenharmony_ci * @note: Some devices may accept system-dependent device names that cannot be 485cabdff1aSopenharmony_ci * autodetected. The list returned by this function cannot be assumed to 486cabdff1aSopenharmony_ci * be always completed. 487cabdff1aSopenharmony_ci * 488cabdff1aSopenharmony_ci * @param s device context. 489cabdff1aSopenharmony_ci * @param[out] device_list list of autodetected devices. 490cabdff1aSopenharmony_ci * @return count of autodetected devices, negative on error. 491cabdff1aSopenharmony_ci */ 492cabdff1aSopenharmony_ciint avdevice_list_devices(struct AVFormatContext *s, AVDeviceInfoList **device_list); 493cabdff1aSopenharmony_ci 494cabdff1aSopenharmony_ci/** 495cabdff1aSopenharmony_ci * Convenient function to free result of avdevice_list_devices(). 496cabdff1aSopenharmony_ci * 497cabdff1aSopenharmony_ci * @param devices device list to be freed. 498cabdff1aSopenharmony_ci */ 499cabdff1aSopenharmony_civoid avdevice_free_list_devices(AVDeviceInfoList **device_list); 500cabdff1aSopenharmony_ci 501cabdff1aSopenharmony_ci/** 502cabdff1aSopenharmony_ci * List devices. 503cabdff1aSopenharmony_ci * 504cabdff1aSopenharmony_ci * Returns available device names and their parameters. 505cabdff1aSopenharmony_ci * These are convinient wrappers for avdevice_list_devices(). 506cabdff1aSopenharmony_ci * Device context is allocated and deallocated internally. 507cabdff1aSopenharmony_ci * 508cabdff1aSopenharmony_ci * @param device device format. May be NULL if device name is set. 509cabdff1aSopenharmony_ci * @param device_name device name. May be NULL if device format is set. 510cabdff1aSopenharmony_ci * @param device_options An AVDictionary filled with device-private options. May be NULL. 511cabdff1aSopenharmony_ci * The same options must be passed later to avformat_write_header() for output 512cabdff1aSopenharmony_ci * devices or avformat_open_input() for input devices, or at any other place 513cabdff1aSopenharmony_ci * that affects device-private options. 514cabdff1aSopenharmony_ci * @param[out] device_list list of autodetected devices 515cabdff1aSopenharmony_ci * @return count of autodetected devices, negative on error. 516cabdff1aSopenharmony_ci * @note device argument takes precedence over device_name when both are set. 517cabdff1aSopenharmony_ci */ 518cabdff1aSopenharmony_ciint avdevice_list_input_sources(const AVInputFormat *device, const char *device_name, 519cabdff1aSopenharmony_ci AVDictionary *device_options, AVDeviceInfoList **device_list); 520cabdff1aSopenharmony_ciint avdevice_list_output_sinks(const AVOutputFormat *device, const char *device_name, 521cabdff1aSopenharmony_ci AVDictionary *device_options, AVDeviceInfoList **device_list); 522cabdff1aSopenharmony_ci 523cabdff1aSopenharmony_ci/** 524cabdff1aSopenharmony_ci * @} 525cabdff1aSopenharmony_ci */ 526cabdff1aSopenharmony_ci 527cabdff1aSopenharmony_ci#endif /* AVDEVICE_AVDEVICE_H */ 528