diff options
author | Josh de Kock <josh@itanimul.li> | 2018-03-23 13:16:15 +0300 |
---|---|---|
committer | Josh de Kock <josh@itanimul.li> | 2018-04-01 01:26:31 +0300 |
commit | d8ae40611bc01257776b71f20d774eb720151906 (patch) | |
tree | 125ca3583f0c36bd81ba4c26e74191ba189f9e63 /libavdevice/avdevice.c | |
parent | 8f1382f80e0d4184c54c14afdda6482f050fbba7 (diff) |
Revert "lavd: add new API for iterating input and output devices"
This reverts commit 0fd475704e871ef3a535947596a012894bae3cbd.
Revert "lavd: fix iterating of input and output devices"
This reverts commit ce1d77a5e7cebce11074bf6f9e38ad6da37338ff.
Signed-off-by: Josh de Kock <josh@itanimul.li>
Diffstat (limited to 'libavdevice/avdevice.c')
-rw-r--r-- | libavdevice/avdevice.c | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/libavdevice/avdevice.c b/libavdevice/avdevice.c index a42d3498b5..72e1b67887 100644 --- a/libavdevice/avdevice.c +++ b/libavdevice/avdevice.c @@ -78,6 +78,52 @@ const char * avdevice_license(void) return LICENSE_PREFIX FFMPEG_LICENSE + sizeof(LICENSE_PREFIX) - 1; } +static void *device_next(void *prev, int output, + AVClassCategory c1, AVClassCategory c2) +{ + const AVClass *pc; + AVClassCategory category = AV_CLASS_CATEGORY_NA; + do { + 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; + } while (category != c1 && category != c2); + return prev; +} + +AVInputFormat *av_input_audio_device_next(AVInputFormat *d) +{ + return device_next(d, 0, AV_CLASS_CATEGORY_DEVICE_AUDIO_INPUT, + AV_CLASS_CATEGORY_DEVICE_INPUT); +} + +AVInputFormat *av_input_video_device_next(AVInputFormat *d) +{ + return device_next(d, 0, AV_CLASS_CATEGORY_DEVICE_VIDEO_INPUT, + AV_CLASS_CATEGORY_DEVICE_INPUT); +} + +AVOutputFormat *av_output_audio_device_next(AVOutputFormat *d) +{ + return device_next(d, 1, AV_CLASS_CATEGORY_DEVICE_AUDIO_OUTPUT, + AV_CLASS_CATEGORY_DEVICE_OUTPUT); +} + +AVOutputFormat *av_output_video_device_next(AVOutputFormat *d) +{ + return 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) { |