changeset 14929:3febdb2983e0

Clean up properly if preinit() fails.
author syrjala
date Mon, 07 Mar 2005 22:45:47 +0000
parents 35e2d178be91
children c36a814cdca0
files libvo/vo_dfbmga.c
diffstat 1 files changed, 16 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/libvo/vo_dfbmga.c	Mon Mar 07 22:00:29 2005 +0000
+++ b/libvo/vo_dfbmga.c	Mon Mar 07 22:45:47 2005 +0000
@@ -224,6 +224,8 @@
      return DFENUM_OK;
 }
 
+static void uninit( void );
+
 static uint32_t
 preinit( const char *arg )
 {
@@ -425,11 +427,13 @@
           if (l.res != DFB_OK) {
                mp_msg( MSGT_VO, MSGL_ERR, "vo_dfbmga: Can't get primary layer - %s\n",
                        DirectFBErrorString( l.res ) );
+               uninit();
                return -1;
           }
           if ((res = primary->SetCooperativeLevel( primary, DLSCL_EXCLUSIVE )) != DFB_OK) {
                mp_msg( MSGT_VO, MSGL_ERR, "Can't get exclusive access to primary layer - %s\n",
                        DirectFBErrorString( res ) );
+               uninit();
                return -1;
           }
           use_input = 1;
@@ -451,11 +455,13 @@
           if (l.res != DFB_OK) {
                mp_msg( MSGT_VO, MSGL_ERR, "Can't get BES layer - %s\n",
                        DirectFBErrorString( l.res ) );
+               uninit();
                return -1;
           }
           if ((res = bes->SetCooperativeLevel( bes, DLSCL_EXCLUSIVE )) != DFB_OK) {
                mp_msg( MSGT_VO, MSGL_ERR, "Can't get exclusive access to BES - %s\n",
                        DirectFBErrorString( res ) );
+               uninit();
                return -1;
           }
           dlc.flags = DLCONF_PIXELFORMAT;
@@ -481,11 +487,13 @@
           if (l.res != DFB_OK) {
                mp_msg( MSGT_VO, MSGL_ERR, "Can't get CRTC2 layer - %s\n",
                        DirectFBErrorString( l.res ) );
+               uninit();
                return -1;
           }
           if ((res = crtc2->SetCooperativeLevel( crtc2, DLSCL_EXCLUSIVE )) != DFB_OK) {
                mp_msg( MSGT_VO, MSGL_ERR, "Can't get exclusive access to CRTC2 - %s\n",
                        DirectFBErrorString( res ) );
+               uninit();
                return -1;
           }
      }
@@ -495,10 +503,16 @@
                mp_msg( MSGT_VO, MSGL_ERR,
                        "vo_dfbmga: Can't get keyboard - %s\n",
                        DirectFBErrorString( res ) );
+               uninit();
                return -1;
           }
-          keyboard->CreateEventBuffer( keyboard, &buffer );
-          buffer->Reset( buffer );
+          if ((res = keyboard->CreateEventBuffer( keyboard, &buffer )) != DFB_OK) {
+               mp_msg( MSGT_VO, MSGL_ERR,
+                       "vo_dfbmga: Can't create event buffer - %s\n",
+                       DirectFBErrorString( res ) );
+               uninit();
+               return -1;
+          }
      }
 
      return 0;