forked from FFmpeg/FFmpeg
lavd: add avdevice_dev_to_app_control_message API
New API allows to send messages from devices to application. Signed-off-by: Lukasz Marek <lukasz.m.luki@gmail.com>
This commit is contained in:
parent
7151411b9c
commit
102bd64168
6 changed files with 104 additions and 2 deletions
|
@ -44,3 +44,11 @@ int avdevice_app_to_dev_control_message(struct AVFormatContext *s, enum AVAppToD
|
|||
return AVERROR(ENOSYS);
|
||||
return s->oformat->control_message(s, type, data, data_size);
|
||||
}
|
||||
|
||||
int avdevice_dev_to_app_control_message(struct AVFormatContext *s, enum AVDevToAppMessageType type,
|
||||
void *data, size_t data_size)
|
||||
{
|
||||
if (!s->control_message_cb)
|
||||
return AVERROR(ENOSYS);
|
||||
return s->control_message_cb(s, type, data, data_size);
|
||||
}
|
||||
|
|
|
@ -104,6 +104,60 @@ enum AVAppToDevMessageType {
|
|||
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.
|
||||
*
|
||||
|
@ -118,4 +172,18 @@ 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 */
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
#include "libavutil/version.h"
|
||||
|
||||
#define LIBAVDEVICE_VERSION_MAJOR 55
|
||||
#define LIBAVDEVICE_VERSION_MINOR 6
|
||||
#define LIBAVDEVICE_VERSION_MINOR 7
|
||||
#define LIBAVDEVICE_VERSION_MICRO 100
|
||||
|
||||
#define LIBAVDEVICE_VERSION_INT AV_VERSION_INT(LIBAVDEVICE_VERSION_MAJOR, \
|
||||
|
|
|
@ -952,6 +952,13 @@ typedef struct AVChapter {
|
|||
} AVChapter;
|
||||
|
||||
|
||||
/**
|
||||
* Callback used by devices to communicate with application.
|
||||
*/
|
||||
typedef int (*av_format_control_message)(struct AVFormatContext *s, int type,
|
||||
void *data, size_t data_size);
|
||||
|
||||
|
||||
/**
|
||||
* The duration of a video can be estimated through various ways, and this enum can be used
|
||||
* to know how the duration was estimated.
|
||||
|
@ -1360,6 +1367,19 @@ typedef struct AVFormatContext {
|
|||
* Muxing: Set by user via av_format_set_metadata_header_padding.
|
||||
*/
|
||||
int metadata_header_padding;
|
||||
|
||||
/**
|
||||
* User data.
|
||||
* This is a place for some private data of the user.
|
||||
* Mostly usable with control_message_cb or any future callbacks in device's context.
|
||||
*/
|
||||
void *opaque;
|
||||
|
||||
/**
|
||||
* Callback used by devices to communicate with application.
|
||||
*/
|
||||
av_format_control_message control_message_cb;
|
||||
|
||||
} AVFormatContext;
|
||||
|
||||
int av_format_get_probe_score(const AVFormatContext *s);
|
||||
|
@ -1371,6 +1391,10 @@ AVCodec * av_format_get_subtitle_codec(const AVFormatContext *s);
|
|||
void av_format_set_subtitle_codec(AVFormatContext *s, AVCodec *c);
|
||||
int av_format_get_metadata_header_padding(const AVFormatContext *s);
|
||||
void av_format_set_metadata_header_padding(AVFormatContext *s, int c);
|
||||
void * av_format_get_opaque(const AVFormatContext *s);
|
||||
void av_format_set_opaque(AVFormatContext *s, void *opaque);
|
||||
av_format_control_message av_format_get_control_message_cb(const AVFormatContext *s);
|
||||
void av_format_set_control_message_cb(AVFormatContext *s, av_format_control_message callback);
|
||||
|
||||
/**
|
||||
* Returns the method used to set ctx->duration.
|
||||
|
|
|
@ -107,6 +107,8 @@ MAKE_ACCESSORS(AVFormatContext, format, AVCodec *, video_codec)
|
|||
MAKE_ACCESSORS(AVFormatContext, format, AVCodec *, audio_codec)
|
||||
MAKE_ACCESSORS(AVFormatContext, format, AVCodec *, subtitle_codec)
|
||||
MAKE_ACCESSORS(AVFormatContext, format, int, metadata_header_padding)
|
||||
MAKE_ACCESSORS(AVFormatContext, format, void *, opaque)
|
||||
MAKE_ACCESSORS(AVFormatContext, format, av_format_control_message, control_message_cb)
|
||||
|
||||
static AVCodec *find_decoder(AVFormatContext *s, AVStream *st, enum AVCodecID codec_id)
|
||||
{
|
||||
|
|
|
@ -30,7 +30,7 @@
|
|||
#include "libavutil/version.h"
|
||||
|
||||
#define LIBAVFORMAT_VERSION_MAJOR 55
|
||||
#define LIBAVFORMAT_VERSION_MINOR 27
|
||||
#define LIBAVFORMAT_VERSION_MINOR 28
|
||||
#define LIBAVFORMAT_VERSION_MICRO 100
|
||||
|
||||
#define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \
|
||||
|
|
Loading…
Add table
Reference in a new issue