diff options
author | Lukasz Marek <lukasz.m.luki2@gmail.com> | 2014-12-21 20:12:47 +0100 |
---|---|---|
committer | Lukasz Marek <lukasz.m.luki2@gmail.com> | 2015-01-11 18:58:26 +0100 |
commit | 007c33df0a2c1a820050dfeb65986c99143d1c7e (patch) | |
tree | 8d0b633b92d489c487cb8b9fb74499840b0009d0 /libavdevice/avdevice.c | |
parent | 9241e544ffec5c3f4988ff699e6d2bd0f4c2803b (diff) | |
download | ffmpeg-007c33df0a2c1a820050dfeb65986c99143d1c7e.tar.gz |
lavd/avdevice: introduce helper functions for sink/sources listing
Signed-off-by: Lukasz Marek <lukasz.m.luki2@gmail.com>
Diffstat (limited to 'libavdevice/avdevice.c')
-rw-r--r-- | libavdevice/avdevice.c | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/libavdevice/avdevice.c b/libavdevice/avdevice.c index 72e573d76e..72e1b67887 100644 --- a/libavdevice/avdevice.c +++ b/libavdevice/avdevice.c @@ -21,6 +21,7 @@ #include "libavutil/pixfmt.h" #include "libavcodec/avcodec.h" #include "avdevice.h" +#include "internal.h" #include "config.h" #include "libavutil/ffversion.h" @@ -208,6 +209,44 @@ int avdevice_list_devices(AVFormatContext *s, AVDeviceInfoList **device_list) return ret; } +static int list_devices_for_context(AVFormatContext *s, AVDictionary *options, + AVDeviceInfoList **device_list) +{ + AVDictionary *tmp = NULL; + int ret; + + av_dict_copy(&tmp, options, 0); + if ((ret = av_opt_set_dict2(s, &tmp, AV_OPT_SEARCH_CHILDREN)) < 0) + goto fail; + ret = avdevice_list_devices(s, device_list); + fail: + av_dict_free(&tmp); + avformat_free_context(s); + return ret; +} + +int avdevice_list_input_sources(AVInputFormat *device, const char *device_name, + AVDictionary *device_options, AVDeviceInfoList **device_list) +{ + AVFormatContext *s = NULL; + int ret; + + if ((ret = ff_alloc_input_device_context(&s, device, device_name)) < 0) + return ret; + return list_devices_for_context(s, device_options, device_list); +} + +int avdevice_list_output_sinks(AVOutputFormat *device, const char *device_name, + AVDictionary *device_options, AVDeviceInfoList **device_list) +{ + AVFormatContext *s = NULL; + int ret; + + if ((ret = avformat_alloc_output_context2(&s, device, device_name, NULL)) < 0) + return ret; + return list_devices_for_context(s, device_options, device_list); +} + void avdevice_free_list_devices(AVDeviceInfoList **device_list) { AVDeviceInfoList *list; |