[vlc-commits] directfb: inline OpenDisplay, reduce context

Rafaël Carré git at videolan.org
Fri Apr 18 11:03:22 CEST 2014


vlc | branch: master | Rafaël Carré <funman at videolan.org> | Fri Apr 18 10:38:25 2014 +0200| [b9cca1d18bd5463130840aac70ca61d8e966f19f] | committer: Rafaël Carré

directfb: inline OpenDisplay, reduce context

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=b9cca1d18bd5463130840aac70ca61d8e966f19f
---

 modules/video_output/directfb.c |   86 +++++++++++++++++----------------------
 1 file changed, 37 insertions(+), 49 deletions(-)

diff --git a/modules/video_output/directfb.c b/modules/video_output/directfb.c
index 14befba..c618602 100644
--- a/modules/video_output/directfb.c
+++ b/modules/video_output/directfb.c
@@ -62,20 +62,10 @@ static int            Control(vout_display_t *, int, va_list);
 static void           Manage (vout_display_t *);
 
 /* */
-static int  OpenDisplay (vout_display_t *);
-
-/* */
 struct vout_display_sys_t {
-    /* */
     IDirectFB             *directfb;
     IDirectFBSurface      *primary;
-    DFBSurfacePixelFormat pixel_format;
-
-    /* */
-    int width;
-    int height;
 
-    /* */
     picture_pool_t *pool;
 };
 
@@ -97,18 +87,40 @@ static int Open(vlc_object_t *object)
         return VLC_EGENERIC;
     }
 
-    if (OpenDisplay(vd)) {
-        msg_Err(vd, "Cannot create primary surface");
-        Close(VLC_OBJECT(vd));
-        return VLC_EGENERIC;
-    }
+    DFBSurfaceDescription dsc;
+    /*dsc.flags = DSDESC_CAPS | DSDESC_HEIGHT | DSDESC_WIDTH;*/
+    dsc.flags = DSDESC_CAPS;
+    dsc.caps  = DSCAPS_PRIMARY | DSCAPS_FLIPPING;
+    /*dsc.width = 352;*/
+    /*dsc.height = 240;*/
+
+    IDirectFB *directfb = NULL;
+    if (DirectFBCreate(&directfb) != DFB_OK || !directfb)
+        goto error;
+    sys->directfb = directfb;
+
+    IDirectFBSurface *primary = NULL;
+    if (directfb->CreateSurface(directfb, &dsc, &primary) || !primary)
+        goto error;
+    sys->primary = primary;
+
+    /* */
+    int width;
+    int height;
+
+    primary->GetSize(primary, &width, &height);
+    primary->FillRectangle(primary, 0, 0, width, height);
+    primary->Flip(primary, NULL, 0);
+
     vout_display_DeleteWindow(vd, NULL);
 
     /* */
     video_format_t fmt;
     video_format_ApplyRotation(&fmt, &vd->fmt);
 
-    switch (sys->pixel_format) {
+    DFBSurfacePixelFormat pixel_format;
+    sys->primary->GetPixelFormat(sys->primary, &pixel_format);
+    switch (pixel_format) {
     case DSPF_RGB332:
         fmt.i_chroma = VLC_CODEC_RGB8;
         fmt.i_rmask = 0x7 << 5;
@@ -119,15 +131,15 @@ static int Open(vlc_object_t *object)
     case DSPF_RGB24: fmt.i_chroma = VLC_CODEC_RGB24; break;
     case DSPF_RGB32: fmt.i_chroma = VLC_CODEC_RGB32; break;
     default:
-        msg_Err(vd, "unknown screen depth %i", sys->pixel_format);
+        msg_Err(vd, "unknown screen depth %i", pixel_format);
         Close(VLC_OBJECT(vd));
         return VLC_EGENERIC;
     }
 
     video_format_FixRgb(&fmt);
 
-    fmt.i_width  = sys->width;
-    fmt.i_height = sys->height;
+    fmt.i_width  = width;
+    fmt.i_height = height;
 
     /* */
     vout_display_info_t info = vd->info;
@@ -146,6 +158,11 @@ static int Open(vlc_object_t *object)
     vout_display_SendEventFullscreen(vd, true);
     vout_display_SendEventDisplaySize(vd, fmt.i_width, fmt.i_height, true);
     return VLC_SUCCESS;
+
+error:
+    msg_Err(vd, "Cannot create primary surface");
+    Close(VLC_OBJECT(vd));
+    return VLC_EGENERIC;
 }
 
 static void Close(vlc_object_t *object)
@@ -190,7 +207,7 @@ static void Display(vout_display_t *vd, picture_t *picture, subpicture_t *subpic
 
         memset(&rsc, 0, sizeof(rsc));
         rsc.p[0].p_pixels = pixels;
-        rsc.p[0].i_lines  = sys->height;
+        rsc.p[0].i_lines  = vd->fmt.i_height;
         rsc.p[0].i_pitch  = pitch;
 
         picture_t *direct = picture_NewFromResource(&vd->fmt, &rsc);
@@ -226,32 +243,3 @@ static void Manage (vout_display_t *vd)
 {
     VLC_UNUSED(vd);
 }
-
-static int OpenDisplay(vout_display_t *vd)
-{
-    vout_display_sys_t *sys = vd->sys;
-
-    DFBSurfaceDescription dsc;
-    /*dsc.flags = DSDESC_CAPS | DSDESC_HEIGHT | DSDESC_WIDTH;*/
-    dsc.flags = DSDESC_CAPS;
-    dsc.caps  = DSCAPS_PRIMARY | DSCAPS_FLIPPING;
-    /*dsc.width = 352;*/
-    /*dsc.height = 240;*/
-
-    IDirectFB *directfb = NULL;
-    if (DirectFBCreate(&directfb) != DFB_OK || !directfb)
-        return VLC_EGENERIC;
-    sys->directfb = directfb;
-
-    IDirectFBSurface *primary = NULL;
-    if (directfb->CreateSurface(directfb, &dsc, &primary) || !primary)
-        return VLC_EGENERIC;
-    sys->primary = primary;
-
-    primary->GetSize(primary, &sys->width, &sys->height);
-    primary->GetPixelFormat(primary, &sys->pixel_format);
-    primary->FillRectangle(primary, 0, 0, sys->width, sys->height);
-    primary->Flip(primary, NULL, 0);
-
-    return VLC_SUCCESS;
-}



More information about the vlc-commits mailing list