vlc | branch: master | Romain Vimont <[email protected]> | Thu Jun 4 11:52:17 2020 +0200| [70f77f85bcf9e1d6293b12eac4cb28e63b995530] | committer: Alexandre Janniaux
opengl: rewrite error handling with gotos This avoids to rewrite consecutive cleanups on each error case. Signed-off-by: Alexandre Janniaux <[email protected]> > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=70f77f85bcf9e1d6293b12eac4cb28e63b995530 --- modules/video_output/opengl/vout_helper.c | 53 ++++++++++++++----------------- 1 file changed, 23 insertions(+), 30 deletions(-) diff --git a/modules/video_output/opengl/vout_helper.c b/modules/video_output/opengl/vout_helper.c index 3f8cd816af..070b6c2c7e 100644 --- a/modules/video_output/opengl/vout_helper.c +++ b/modules/video_output/opengl/vout_helper.c @@ -109,10 +109,7 @@ vout_display_opengl_t *vout_display_opengl_New(video_format_t *fmt, int ret = vlc_gl_api_Init(&vgl->api, gl); if (ret != VLC_SUCCESS) - { - free(vgl); - return NULL; - } + goto free_vgl; const opengl_vtable_t *vt = &vgl->api.vt; @@ -122,8 +119,7 @@ vout_display_opengl_t *vout_display_opengl_New(video_format_t *fmt, if (!supports_shaders) { msg_Err(gl, "shaders not supported, bailing out"); - free(vgl); - return NULL; + goto free_vgl; } #endif @@ -140,17 +136,14 @@ vout_display_opengl_t *vout_display_opengl_New(video_format_t *fmt, if (!vgl->interop) { msg_Err(gl, "Could not create interop"); - free(vgl); - return NULL; + goto free_vgl; } vgl->sampler = vlc_gl_sampler_New(vgl->interop); if (!vgl->sampler) { msg_Err(gl, "Could not create sampler"); - vlc_gl_interop_Delete(vgl->interop); - free(vgl); - return NULL; + goto delete_interop; } vgl->renderer = vlc_gl_renderer_New(gl, &vgl->api, vgl->sampler); @@ -158,10 +151,7 @@ vout_display_opengl_t *vout_display_opengl_New(video_format_t *fmt, { msg_Warn(gl, "Could not create renderer for %4.4s", (const char *) &fmt->i_chroma); - vlc_gl_sampler_Delete(vgl->sampler); - vlc_gl_interop_Delete(vgl->interop); - free(vgl); - return NULL; + goto delete_sampler; } GL_ASSERT_NOERROR(vt); @@ -170,11 +160,7 @@ vout_display_opengl_t *vout_display_opengl_New(video_format_t *fmt, if (!vgl->sub_interop) { msg_Err(gl, "Could not create sub interop"); - vlc_gl_renderer_Delete(vgl->renderer); - vlc_gl_sampler_Delete(vgl->sampler); - vlc_gl_interop_Delete(vgl->interop); - free(vgl); - return NULL; + goto delete_renderer; } vgl->sub_renderer = @@ -182,22 +168,14 @@ vout_display_opengl_t *vout_display_opengl_New(video_format_t *fmt, if (!vgl->sub_renderer) { msg_Err(gl, "Could not create sub renderer"); - vlc_gl_interop_Delete(vgl->sub_interop); - vlc_gl_renderer_Delete(vgl->renderer); - vlc_gl_sampler_Delete(vgl->sampler); - vlc_gl_interop_Delete(vgl->interop); - free(vgl); - return NULL; + goto delete_sub_interop; } GL_ASSERT_NOERROR(vt); if (fmt->projection_mode != PROJECTION_MODE_RECTANGULAR && vout_display_opengl_SetViewpoint(vgl, viewpoint) != VLC_SUCCESS) - { - vout_display_opengl_Delete(vgl); - return NULL; - } + goto delete_sub_renderer; video_orientation_t orientation = fmt->orientation; *fmt = vgl->interop->fmt; @@ -211,6 +189,21 @@ vout_display_opengl_t *vout_display_opengl_New(video_format_t *fmt, GL_ASSERT_NOERROR(vt); return vgl; + +delete_sub_renderer: + vlc_gl_sub_renderer_Delete(vgl->sub_renderer); +delete_sub_interop: + vlc_gl_interop_Delete(vgl->sub_interop); +delete_renderer: + vlc_gl_renderer_Delete(vgl->renderer); +delete_sampler: + vlc_gl_sampler_Delete(vgl->sampler); +delete_interop: + vlc_gl_interop_Delete(vgl->interop); +free_vgl: + free(vgl); + + return NULL; } void vout_display_opengl_Delete(vout_display_opengl_t *vgl) _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
