[FFmpeg-devel] [PATCH 3/8] lavd/avdevice: add device iterators

Michael Niedermayer michaelni at gmx.at
Sat Mar 1 17:05:28 CET 2014


On Sat, Mar 01, 2014 at 01:18:20AM +0100, Lukasz Marek wrote:
> >>2 of them uses InputFormat param, 2 OutputFormat. Handling wrong enums
> >>will also adds some code and complications to user.
> >>I can add one internal implementation and call it from these 4.
> >
> >
> >Updated patch attached
> 
> 
> Just noticed bug in it - there was AV_CLASS_CATEGORY_DEVICE_INPUT as
> second category in output iterators
> Updated patch attached.
> 
> I uploaded 4 first patches from patchset to my repo
> https://github.com/lukaszmluki/ffmpeg
> 
> When you have no more remarks then please merge.
> 
> -- 
> Best Regards,
> Lukasz Marek
> 
> Insanity: doing the same thing over and over again and expecting
> different results. - Albert Einstein

>  avdevice.c |   46 ++++++++++++++++++++++++++++++++++++++++++++++
>  avdevice.h |   16 ++++++++++++++++
>  2 files changed, 62 insertions(+)
> 04faab9ed81479d7eae7c7dce502e83f8f6fceba  0003-lavd-avdevice-add-device-iterators.patch
> From 3f22a48b1a95856fca48306ffab9333721bde156 Mon Sep 17 00:00:00 2001
> From: Lukasz Marek <lukasz.m.luki at gmail.com>
> Date: Sat, 22 Feb 2014 23:32:55 +0100
> Subject: [PATCH 3/8] lavd/avdevice: add device iterators
> 
> TODO: minor bump, update doc/APIChanges
> 
> Signed-off-by: Lukasz Marek <lukasz.m.luki at gmail.com>
> ---
>  libavdevice/avdevice.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++
>  libavdevice/avdevice.h | 16 ++++++++++++++++
>  2 files changed, 62 insertions(+)
> 
> diff --git a/libavdevice/avdevice.c b/libavdevice/avdevice.c
> index 9e2b7d5..e59942f 100644
> --- a/libavdevice/avdevice.c
> +++ b/libavdevice/avdevice.c
> @@ -37,6 +37,52 @@ const char * avdevice_license(void)
>      return LICENSE_PREFIX FFMPEG_LICENSE + sizeof(LICENSE_PREFIX) - 1;
>  }
>  
> +static void *av_device_next(void *prev, int output,
> +                            AVClassCategory c1, AVClassCategory c2)
> +{
> +    const AVClass *pc;
> +    AVClassCategory category = AV_CLASS_CATEGORY_NA;
> +    while (category != c1 && category != c2) {
> +        if (output) {
> +            if (!(prev = av_oformat_next(prev)))
> +                break;
> +            pc = ((AVOutputFormat *)prev)->priv_class;
> +        } else {
> +            if (!(prev = av_iformat_next(prev)))
> +                break;
> +            pc = ((AVInputFormat *)prev)->priv_class;
> +        }
> +        if (!pc)
> +            continue;
> +        category = pc->category;
> +    }
> +    return prev;
> +}
> +
> +AVInputFormat *av_input_audio_device_next(AVInputFormat  *d)
> +{
> +    return av_device_next(d, 0, AV_CLASS_CATEGORY_DEVICE_AUDIO_INPUT,
> +                          AV_CLASS_CATEGORY_DEVICE_INPUT);
> +}
> +
> +AVInputFormat *av_input_video_device_next(AVInputFormat  *d)
> +{
> +    return av_device_next(d, 0, AV_CLASS_CATEGORY_DEVICE_VIDEO_INPUT,
> +                          AV_CLASS_CATEGORY_DEVICE_INPUT);
> +}
> +
> +AVOutputFormat *av_output_audio_device_next(AVOutputFormat *d)
> +{
> +    return av_device_next(d, 1, AV_CLASS_CATEGORY_DEVICE_AUDIO_OUTPUT,
> +                          AV_CLASS_CATEGORY_DEVICE_OUTPUT);
> +}
> +
> +AVOutputFormat *av_output_video_device_next(AVOutputFormat *d)
> +{
> +    return av_device_next(d, 1, AV_CLASS_CATEGORY_DEVICE_VIDEO_OUTPUT,
> +                          AV_CLASS_CATEGORY_DEVICE_OUTPUT);
> +}
> +
>  int avdevice_app_to_dev_control_message(struct AVFormatContext *s, enum AVAppToDevMessageType type,
>                                          void *data, size_t data_size)
>  {
> diff --git a/libavdevice/avdevice.h b/libavdevice/avdevice.h
> index 28344ca..47bf8f4 100644
> --- a/libavdevice/avdevice.h
> +++ b/libavdevice/avdevice.h
> @@ -66,6 +66,22 @@ const char *avdevice_license(void);
>   */
>  void avdevice_register_all(void);
>  

> +/**
> + * If d is NULL, returns the first registered input audio/video device,
> + * if d is non-NULL, returns the next registered input audio/video device after d
> + * or NULL if d is the last one.
> + */
> +AVInputFormat *av_input_audio_device_next(AVInputFormat  *d);
> +AVInputFormat *av_input_video_device_next(AVInputFormat  *d);
> +
> +/**
> + * If d is NULL, returns the first registered output audio/video device,
> + * if d is non-NULL, returns the next registered output audio/video device after d
> + * or NULL if d is the last one.
> + */

The first line until "." is used as a short description by doxygen
not sure what doxygen would do in these cases

[...]

-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

Everything should be made as simple as possible, but not simpler.
-- Albert Einstein
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: Digital signature
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20140301/4a9adb32/attachment.asc>


More information about the ffmpeg-devel mailing list