123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189 |
- /*
- * This file is part of FFmpeg.
- *
- * FFmpeg is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * FFmpeg 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with FFmpeg; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
- #ifndef AVDEVICE_AVDEVICE_H
- #define AVDEVICE_AVDEVICE_H
- #include "version.h"
- /**
- * @file
- * @ingroup lavd
- * Main libavdevice API header
- */
- /**
- * @defgroup lavd Special devices muxing/demuxing library
- * @{
- * Libavdevice is a complementary library to @ref libavf "libavformat". It
- * provides various "special" platform-specific muxers and demuxers, e.g. for
- * grabbing devices, audio capture and playback etc. As a consequence, the
- * (de)muxers in libavdevice are of the AVFMT_NOFILE type (they use their own
- * I/O functions). The filename passed to avformat_open_input() often does not
- * refer to an actually existing file, but has some special device-specific
- * meaning - e.g. for x11grab it is the display name.
- *
- * To use libavdevice, simply call avdevice_register_all() to register all
- * compiled muxers and demuxers. They all use standard libavformat API.
- * @}
- */
- #include "libavformat/avformat.h"
- /**
- * Return the LIBAVDEVICE_VERSION_INT constant.
- */
- unsigned avdevice_version(void);
- /**
- * Return the libavdevice build-time configuration.
- */
- const char *avdevice_configuration(void);
- /**
- * Return the libavdevice license.
- */
- const char *avdevice_license(void);
- /**
- * Initialize libavdevice and register all the input and output devices.
- * @warning This function is not thread safe.
- */
- void avdevice_register_all(void);
- typedef struct AVDeviceRect {
- int x; /**< x coordinate of top left corner */
- int y; /**< y coordinate of top left corner */
- int width; /**< width */
- int height; /**< height */
- } AVDeviceRect;
- /**
- * Message types used by avdevice_app_to_dev_control_message().
- */
- enum AVAppToDevMessageType {
- /**
- * Dummy message.
- */
- AV_APP_TO_DEV_NONE = MKBETAG('N','O','N','E'),
- /**
- * Window size change message.
- *
- * Message is sent to the device every time the application changes the size
- * of the window device renders to.
- * Message should also be sent right after window is created.
- *
- * data: AVDeviceRect: new window size.
- */
- AV_APP_TO_DEV_WINDOW_SIZE = MKBETAG('G','E','O','M'),
- /**
- * Repaint request message.
- *
- * Message is sent to the device when window have to be rapainted.
- *
- * data: AVDeviceRect: area required to be repainted.
- * NULL: whole area is required to be repainted.
- */
- AV_APP_TO_DEV_WINDOW_REPAINT = MKBETAG('R','E','P','A')
- };
- /**
- * Message types used by avdevice_dev_to_app_control_message().
- */
- enum AVDevToAppMessageType {
- /**
- * Dummy message.
- */
- AV_DEV_TO_APP_NONE = MKBETAG('N','O','N','E'),
- /**
- * Create window buffer message.
- *
- * Device requests to create a window buffer. Exact meaning is device-
- * and application-dependent. Message is sent before rendering first
- * frame and all one-shot initializations should be done here.
- *
- * data: NULL.
- */
- AV_DEV_TO_APP_CREATE_WINDOW_BUFFER = MKBETAG('B','C','R','E'),
- /**
- * Prepare window buffer message.
- *
- * Device requests to prepare a window buffer for rendering.
- * Exact meaning is device- and application-dependent.
- * Message is sent before rendering of each frame.
- *
- * data: NULL.
- */
- AV_DEV_TO_APP_PREPARE_WINDOW_BUFFER = MKBETAG('B','P','R','E'),
- /**
- * Display window buffer message.
- *
- * Device requests to display a window buffer.
- * Message is sent when new frame is ready to be displyed.
- * Usually buffers need to be swapped in handler of this message.
- *
- * data: NULL.
- */
- AV_DEV_TO_APP_DISPLAY_WINDOW_BUFFER = MKBETAG('B','D','I','S'),
- /**
- * Destroy window buffer message.
- *
- * Device requests to destroy a window buffer.
- * Message is sent when device is about to be destroyed and window
- * buffer is not required anymore.
- *
- * data: NULL.
- */
- AV_DEV_TO_APP_DESTROY_WINDOW_BUFFER = MKBETAG('B','D','E','S')
- };
- /**
- * Send control message from application to device.
- *
- * @param s device context.
- * @param type message type.
- * @param data message data. Exact type depends on message type.
- * @param data_size size of message data.
- * @return >= 0 on success, negative on error.
- * AVERROR(ENOSYS) when device doesn't implement handler of the message.
- */
- int avdevice_app_to_dev_control_message(struct AVFormatContext *s,
- enum AVAppToDevMessageType type,
- void *data, size_t data_size);
- /**
- * Send control message from device to application.
- *
- * @param s device context.
- * @param type message type.
- * @param data message data. Can be NULL.
- * @param data_size size of message data.
- * @return >= 0 on success, negative on error.
- * AVERROR(ENOSYS) when application doesn't implement handler of the message.
- */
- int avdevice_dev_to_app_control_message(struct AVFormatContext *s,
- enum AVDevToAppMessageType type,
- void *data, size_t data_size);
- #endif /* AVDEVICE_AVDEVICE_H */
|