Browse Source

lavd/avdevice: always free detected devices on error

Signed-off-by: Lukasz Marek <lukasz.m.luki@gmail.com>
Lukasz Marek 11 years ago
parent
commit
2475fdbd04
1 changed files with 7 additions and 2 deletions
  1. 7 2
      libavdevice/avdevice.c

+ 7 - 2
libavdevice/avdevice.c

@@ -101,6 +101,7 @@ int avdevice_dev_to_app_control_message(struct AVFormatContext *s, enum AVDevToA
 
 int avdevice_list_devices(AVFormatContext *s, AVDeviceInfoList **device_list)
 {
+    int ret;
     av_assert0(s);
     av_assert0(device_list);
     av_assert0(s->oformat || s->iformat);
@@ -113,8 +114,12 @@ int avdevice_list_devices(AVFormatContext *s, AVDeviceInfoList **device_list)
     if (!(*device_list))
         return AVERROR(ENOMEM);
     if (s->oformat)
-        return s->oformat->get_device_list(s, *device_list);
-    return s->iformat->get_device_list(s, *device_list);
+        ret = s->oformat->get_device_list(s, *device_list);
+    else
+        ret = s->iformat->get_device_list(s, *device_list);
+    if (ret < 0)
+        avdevice_free_list_devices(device_list);
+    return ret;
 }
 
 void avdevice_free_list_devices(AVDeviceInfoList **device_list)