[FFmpeg-devel] [PATCH 1/3] lavf: add video device callbacks

Marton Balint cus at passwd.hu
Mon Jan 13 23:07:06 CET 2014


On Mon, 13 Jan 2014, Lukasz Marek wrote:

> Adds 2 callbacks to AVFormatContext
> - window_size_cb
>    allows device to read user provided window dimensions
> - window_swap_buffers_cb
>    allows device to swap buffers of user provided window
>
> Signed-off-by: Lukasz Marek <lukasz.m.luki at gmail.com>
> ---
> libavformat/avformat.h | 33 +++++++++++++++++++++++++++++++++
> libavformat/utils.c    |  3 +++
> libavformat/version.h  |  2 +-
> 3 files changed, 37 insertions(+), 1 deletion(-)
>
> diff --git a/libavformat/avformat.h b/libavformat/avformat.h
> index 6d719d7..6fb9fdd 100644
> --- a/libavformat/avformat.h
> +++ b/libavformat/avformat.h
> @@ -948,6 +948,17 @@ typedef struct AVChapter {
>
>
> /**
> + * Callback used by video output devices to get user provided window dimensions.
> + */
> +typedef int (*av_format_device_window_size_callback)(struct AVFormatContext *, int *, int *);
> +

Isn't that actually the area used for drawing in the window? If it 
really is, than I'd rather call it 
av_format_device_get_draw_area_callback or something like that.

Also probably it would be more generic to also query a top and a left 
offset in the window.

> +/**
> + * Callback used by video output devices to swap buffers of user provided window.
> + */
> +typedef int (*av_format_device_window_swap_buffers_callback)(struct AVFormatContext *);
> +
> +
> +/**
>  * The duration of a video can be estimated through various ways, and this enum can be used
>  * to know how the duration was estimated.
>  */
> @@ -1348,6 +1359,22 @@ typedef struct AVFormatContext {
>      * Demuxing: Set by user via av_format_set_subtitle_codec (NO direct access).
>      */
>     AVCodec *subtitle_codec;
> +
> +    /**
> +     * User data.
> +     */
> +    void *user_data;

I beleive all over the codebase this is called "opaque" instead.

> +
> +    /**
> +     * Callback dedicated for video devices to get dimensions of user provided rendering window.
> +     */
> +    av_format_device_window_size_callback window_size_cb;

Consider changing the name here as well.

> +
> +    /**
> +     * Callback dedicated for video devices to swap buffers of user provided window.
> +     */
> +    av_format_device_window_swap_buffers_callback window_swap_buffers_cb;
> +
> } AVFormatContext;
>
> int av_format_get_probe_score(const AVFormatContext *s);
> @@ -1357,6 +1384,12 @@ AVCodec * av_format_get_audio_codec(const AVFormatContext *s);
> void      av_format_set_audio_codec(AVFormatContext *s, AVCodec *c);
> AVCodec * av_format_get_subtitle_codec(const AVFormatContext *s);
> void      av_format_set_subtitle_codec(AVFormatContext *s, AVCodec *c);
> +void *    av_format_get_user_data(const AVFormatContext *s);
> +void      av_format_set_user_data(AVFormatContext *s, void *user_data);
> +av_format_device_window_size_callback av_format_get_window_size_cb(const AVFormatContext *s);
> +void      av_format_set_window_size_cb(AVFormatContext *s, av_format_device_window_size_callback callback);
> +av_format_device_window_swap_buffers_callback av_format_get_window_swap_buffers_cb(const AVFormatContext *s);
> +void      av_format_set_window_swap_buffers_cb(AVFormatContext *s, av_format_device_window_swap_buffers_callback callback);
>
> /**
>  * Returns the method used to set ctx->duration.
> diff --git a/libavformat/utils.c b/libavformat/utils.c
> index fc1ab6d..50aaa80 100644
> --- a/libavformat/utils.c
> +++ b/libavformat/utils.c
> @@ -103,6 +103,9 @@ MAKE_ACCESSORS(AVStream, stream, AVRational, r_frame_rate)
> 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, void *, user_data)
> +MAKE_ACCESSORS(AVFormatContext, format, av_format_device_window_size_callback, window_size_cb)
> +MAKE_ACCESSORS(AVFormatContext, format, av_format_device_window_swap_buffers_callback, window_swap_buffers_cb)
>
> static AVCodec *find_decoder(AVFormatContext *s, AVStream *st, enum AVCodecID codec_id)
> {
> diff --git a/libavformat/version.h b/libavformat/version.h
> index 3ccbf4c..f48e86e 100644
> --- a/libavformat/version.h
> +++ b/libavformat/version.h
> @@ -31,7 +31,7 @@
>
> #define LIBAVFORMAT_VERSION_MAJOR 55
> #define LIBAVFORMAT_VERSION_MINOR 23
> -#define LIBAVFORMAT_VERSION_MICRO 103
> +#define LIBAVFORMAT_VERSION_MICRO 104
>
> #define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \
>                                                LIBAVFORMAT_VERSION_MINOR, \
> -- 
> 1.8.3.2
>
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>

Regards,
Marton


More information about the ffmpeg-devel mailing list