summaryrefslogtreecommitdiff
path: root/libavdevice/avdevice.c
diff options
context:
space:
mode:
authorLukasz Marek <lukasz.m.luki2@gmail.com>2014-12-21 20:12:47 +0100
committerLukasz Marek <lukasz.m.luki2@gmail.com>2015-01-11 18:58:26 +0100
commit007c33df0a2c1a820050dfeb65986c99143d1c7e (patch)
tree8d0b633b92d489c487cb8b9fb74499840b0009d0 /libavdevice/avdevice.c
parent9241e544ffec5c3f4988ff699e6d2bd0f4c2803b (diff)
downloadffmpeg-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.c39
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;