summaryrefslogtreecommitdiff
path: root/sys/androidmedia/gstamc.c
diff options
context:
space:
mode:
authorMartin Kelly <martin@surround.io>2016-02-17 09:36:15 -0800
committerSebastian Dröge <sebastian@centricular.com>2016-03-04 09:42:14 +0200
commita7d6c07b86bfb785f1d52b8e975cea7e06ea499f (patch)
tree9427c3cf8d6ede2b2a8a504268c4c5a0c7fc9535 /sys/androidmedia/gstamc.c
parentddebf1ff666c3d24759325cd9482c11b0a5d095c (diff)
downloadgstreamer-plugins-bad-a7d6c07b86bfb785f1d52b8e975cea7e06ea499f.tar.gz
amc: properly deinit when ahcsrc register fails
In the androidmedia plugin_init, we initialize various resources on the Android device. If anything fails during this series of initializations, we need to deinitialize any initializations that already occurred. However, we don't do so if we fail to register the ahcsrc element. Fix this. https://bugzilla.gnome.org/show_bug.cgi?id=763065
Diffstat (limited to 'sys/androidmedia/gstamc.c')
-rw-r--r--sys/androidmedia/gstamc.c17
1 files changed, 11 insertions, 6 deletions
diff --git a/sys/androidmedia/gstamc.c b/sys/androidmedia/gstamc.c
index 5b4e93618..1733ca229 100644
--- a/sys/androidmedia/gstamc.c
+++ b/sys/androidmedia/gstamc.c
@@ -3327,22 +3327,27 @@ plugin_init (GstPlugin * plugin)
if (!gst_android_graphics_imageformat_init ()) {
GST_ERROR ("Failed to init android image format");
- gst_android_graphics_surfacetexture_deinit ();
- return FALSE;
+ goto failed_surfacetexture;
}
if (!gst_android_hardware_camera_init ()) {
- gst_android_graphics_surfacetexture_deinit ();
- gst_android_graphics_imageformat_deinit ();
- return FALSE;
+ goto failed_graphics_imageformat;
}
if (!gst_element_register (plugin, "ahcsrc", GST_RANK_NONE, GST_TYPE_AHC_SRC)) {
GST_ERROR ("Failed to register android camera source");
- return FALSE;
+ goto failed_hardware_camera;
}
return TRUE;
+
+failed_hardware_camera:
+ gst_android_hardware_camera_deinit ();
+failed_graphics_imageformat:
+ gst_android_graphics_imageformat_deinit ();
+failed_surfacetexture:
+ gst_android_graphics_surfacetexture_deinit ();
+ return FALSE;
}
void