[FFmpeg-devel] [PATCH 1/2] lavf: add control message API
Lukasz Marek
lukasz.m.luki at gmail.com
Sat Jan 25 21:07:19 CET 2014
On 25.01.2014 17:28, Nicolas George wrote:
> Le sextidi 6 pluviôse, an CCXXII, Lukasz Marek a écrit :
>> >From 66b3c40236d7d3e1735869d50c18d4efa3b44ba7 Mon Sep 17 00:00:00 2001
>> From: Lukasz Marek <lukasz.m.luki at gmail.com>
>> Date: Sun, 19 Jan 2014 16:11:09 +0100
>> Subject: [PATCH 1/3] lavd: add avdevice_app_to_dev_control_message API
>>
>> New API allows to send messages from application to devices.
>>
>> Signed-off-by: Lukasz Marek <lukasz.m.luki at gmail.com>
>> ---
>> libavdevice/avdevice.c | 8 ++++++++
>> libavdevice/avdevice.h | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++
>> libavdevice/version.h | 4 ++--
>> libavformat/avformat.h | 5 +++++
>> libavformat/version.h | 2 +-
>> 5 files changed, 72 insertions(+), 3 deletions(-)
>>
>> diff --git a/libavdevice/avdevice.c b/libavdevice/avdevice.c
>> index b9b18f2..c232bbd 100644
>> --- a/libavdevice/avdevice.c
>> +++ b/libavdevice/avdevice.c
>> @@ -36,3 +36,11 @@ const char * avdevice_license(void)
>> #define LICENSE_PREFIX "libavdevice license: "
>> return LICENSE_PREFIX FFMPEG_LICENSE + sizeof(LICENSE_PREFIX) - 1;
>> }
>> +
>
>> +int avdevice_app_to_dev_control_message(struct AVFormatContext *s, enum AVAppToDevMessageType type,
>> + void *data, size_t data_size)
>
> I liked it betted in the avformat namespace (especially with the fork
> threatening to merge lavd into lavf, sigh), but Stefano liked the opposite,
> and I will not make you undo and redo changes endlessly: please decide what
> you like better.
>
> But, on this line and a few others: please split long lines.
>
>> +{
>> + if (!s->oformat || !s->oformat->control_message)
>> + return AVERROR(ENOSYS);
>> + return s->oformat->control_message(s, type, data, data_size);
>> +}
>> diff --git a/libavdevice/avdevice.h b/libavdevice/avdevice.h
>> index 93a044f..56a2a1d 100644
>> --- a/libavdevice/avdevice.h
>> +++ b/libavdevice/avdevice.h
>> @@ -66,4 +66,60 @@ const char *avdevice_license(void);
>> */
>> void avdevice_register_all(void);
>>
>
>> +typedef struct AVDeviceSize {
>> + int width; /**< width */
>> + int height; /**< height */
>> +} AVDeviceSize;
>> +
>> +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;
>
> The AVDeviceSize seems redundant. After some time programming applications
> with Gtk+, I found it is easier on the developer's memory to have a single
> structure with fields that are frequently unused.
>
>> +
>> +/**
>> + * 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 device every time application change the size
>> + * of the window device renders to. Message should also be send
>> + * right after window is created.
>
> Spelling nits: "the device", unless you consider it is a kind of agent; "the
> application change_s_", "be sen_t_".
>
>> + *
>> + * data: AVDeviceSize: new window size.
>> + */
>> + AV_APP_TO_DEV_WINDOW_SIZE = MKBETAG('G','E','O','M'),
>> +
>> + /**
>> + * Repaint request message.
>> + *
>> + * Message is sent to 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')
>> +};
>> +
>> +/**
>> + * 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.
>
> Nit: alignment would be nice.
>
>> + * @return 0 on success, negative on error.
>
> ">= 0 on success", to leave room for evolution.
>
>> + * AVERROR(EINVAL) when device doesn't implement handler of the message.
>
> EINVAL -> ENOSYS
>
>> + */
>> +int avdevice_app_to_dev_control_message(struct AVFormatContext *s, enum AVAppToDevMessageType type,
>> + void *data, size_t data_size);
>> +
>> #endif /* AVDEVICE_AVDEVICE_H */
>> diff --git a/libavdevice/version.h b/libavdevice/version.h
>> index d569fae..bfd4a70 100644
>> --- a/libavdevice/version.h
>> +++ b/libavdevice/version.h
>> @@ -28,8 +28,8 @@
>> #include "libavutil/version.h"
>>
>> #define LIBAVDEVICE_VERSION_MAJOR 55
>> -#define LIBAVDEVICE_VERSION_MINOR 5
>> -#define LIBAVDEVICE_VERSION_MICRO 102
>> +#define LIBAVDEVICE_VERSION_MINOR 6
>> +#define LIBAVDEVICE_VERSION_MICRO 100
>>
>> #define LIBAVDEVICE_VERSION_INT AV_VERSION_INT(LIBAVDEVICE_VERSION_MAJOR, \
>> LIBAVDEVICE_VERSION_MINOR, \
>> diff --git a/libavformat/avformat.h b/libavformat/avformat.h
>> index a495ee0..09eea74 100644
>> --- a/libavformat/avformat.h
>> +++ b/libavformat/avformat.h
>> @@ -453,6 +453,11 @@ typedef struct AVOutputFormat {
>>
>> void (*get_output_timestamp)(struct AVFormatContext *s, int stream,
>> int64_t *dts, int64_t *wall);
>> + /**
>> + * Allows sending messages from application to device.
>> + */
>> + int (*control_message)(struct AVFormatContext *s, int type,
>> + void *data, size_t data_size);
>> } AVOutputFormat;
>> /**
>> * @}
>> diff --git a/libavformat/version.h b/libavformat/version.h
>> index a0e5a7c..51f6d59 100644
>> --- a/libavformat/version.h
>> +++ b/libavformat/version.h
>> @@ -30,7 +30,7 @@
>> #include "libavutil/version.h"
>>
>> #define LIBAVFORMAT_VERSION_MAJOR 55
>> -#define LIBAVFORMAT_VERSION_MINOR 26
>> +#define LIBAVFORMAT_VERSION_MINOR 27
>> #define LIBAVFORMAT_VERSION_MICRO 100
>>
>> #define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \
>> --
>> 1.8.3.2
>>
>
>> >From 64b7ab2917bf3941235768022d2750b9da0860b9 Mon Sep 17 00:00:00 2001
>> From: Lukasz Marek <lukasz.m.luki at gmail.com>
>> Date: Sun, 19 Jan 2014 16:12:07 +0100
>> Subject: [PATCH 2/3] 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 at gmail.com>
>> ---
>> libavdevice/avdevice.c | 8 ++++++
>> libavdevice/avdevice.h | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++
>> libavdevice/version.h | 2 +-
>> libavformat/avformat.h | 24 ++++++++++++++++++
>> libavformat/utils.c | 2 ++
>> libavformat/version.h | 2 +-
>> 6 files changed, 102 insertions(+), 2 deletions(-)
>>
>> diff --git a/libavdevice/avdevice.c b/libavdevice/avdevice.c
>> index c232bbd..51617fb 100644
>> --- a/libavdevice/avdevice.c
>> +++ b/libavdevice/avdevice.c
>> @@ -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);
>> +}
>> diff --git a/libavdevice/avdevice.h b/libavdevice/avdevice.h
>> index 56a2a1d..17893eb 100644
>> --- a/libavdevice/avdevice.h
>> +++ b/libavdevice/avdevice.h
>> @@ -110,6 +110,59 @@ enum AVAppToDevMessageType {
>> };
>>
>> /**
>> + * 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.
>
> Spelling nit: "device- and application-dependent".
>
>> + *
>> + * 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
>> @@ -122,4 +175,17 @@ enum AVAppToDevMessageType {
>> 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.
>
> Same as above: alignment and ">= 0".
>
>> + * AVERROR(EINVAL) when application doesn't implement handler of the message.
>
> Same as above: ENOSYS.
I hope I haven't missed something.
I left it in libavdevice.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-lavd-add-avdevice_app_to_dev_control_message-API.patch
Type: text/x-patch
Size: 4840 bytes
Desc: not available
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20140125/855d76ba/attachment.bin>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0002-lavd-add-avdevice_dev_to_app_control_message-API.patch
Type: text/x-patch
Size: 7479 bytes
Desc: not available
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20140125/855d76ba/attachment-0001.bin>
More information about the ffmpeg-devel
mailing list