[MPlayer-dev-eng] [PATCH] vo_dfbmga video eq fix + few cleanups

Ville Syrjälä syrjala at sci.fi
Mon Nov 4 21:03:49 CET 2002


Here's a patch to fix the stuff in vo_dfbmga.

- Video eq vidix stuff fixed
- Check some return values to prevent segfaulting on wrong hw or
misconfigured system.
- Remove one unused variable.
- Fix clearing of black bars around the picture.

-- 
Ville Syrjälä
syrjala at sci.fi
http://www.sci.fi/~syrjala/
-------------- next part --------------
Index: libvo/vo_dfbmga.c
===================================================================
RCS file: /cvsroot/mplayer/main/libvo/vo_dfbmga.c,v
retrieving revision 1.2
diff -u -r1.2 vo_dfbmga.c
--- libvo/vo_dfbmga.c	3 Nov 2002 14:27:32 -0000	1.2
+++ libvo/vo_dfbmga.c	4 Nov 2002 19:55:24 -0000
@@ -204,7 +204,8 @@
      }
 
      if (!inited) {
-          DirectFBInit( NULL, NULL );
+          if (DirectFBInit( NULL, NULL ) != DFB_OK)
+               return -1;
 
           if (!fb_dev_name && !(fb_dev_name = getenv( "FRAMEBUFFER" )))
                fb_dev_name = "/dev/fb0";
@@ -212,24 +213,28 @@
           DirectFBSetOption( "no-cursor", "" );
           DirectFBSetOption( "bg-color", "00000000" );
 
-          DirectFBCreate( &dfb );
+          if (DirectFBCreate( &dfb ) != DFB_OK)
+               return -1;
 
           inited = 1;
      }
 
      if (use_bes) {
-          dfb->GetDisplayLayer( dfb, 1, &bes );
+          if (dfb->GetDisplayLayer( dfb, 1, &bes ) != DFB_OK)
+               return -1;
           bes->SetCooperativeLevel( bes, DLSCL_EXCLUSIVE );
           bes->SetOpacity( bes, 0 );
      }
 
      if (use_crtc2) {
-          dfb->GetDisplayLayer( dfb, 2, &crtc2 );
+          if (dfb->GetDisplayLayer( dfb, 2, &crtc2 ) != DFB_OK)
+               return -1;
           crtc2->SetCooperativeLevel( crtc2, DLSCL_EXCLUSIVE );
           crtc2->SetOpacity( crtc2, 0 );
      }
 
-     dfb->GetInputDevice( dfb, DIDID_KEYBOARD, &keyboard );
+     if (dfb->GetInputDevice( dfb, DIDID_KEYBOARD, &keyboard ) != DFB_OK)
+          dfb->Release( dfb );
      keyboard->CreateEventBuffer( keyboard, &buffer );
      buffer->Reset( buffer );
 
@@ -290,7 +295,8 @@
           dsc.height      = in_height;
           dsc.pixelformat = dlc.pixelformat;
 
-          dfb->CreateSurface( dfb, &dsc, &frame );
+          if (dfb->CreateSurface( dfb, &dsc, &frame ) != DFB_OK)
+               return -1;
      }
 
      if (use_crtc2) {
@@ -368,7 +374,8 @@
           DFBColor          color;
           int               i;
 
-          dfb->GetDisplayLayer( dfb, 3, &spic );
+          if (dfb->GetDisplayLayer( dfb, 3, &spic ) != DFB_OK)
+               return -1;
           spic->SetCooperativeLevel( spic, DLSCL_EXCLUSIVE );
           spic->SetOpacity( spic, 0 );
 
@@ -707,19 +714,19 @@
 {
      if (use_spic)
           subframe->Clear( subframe, 0, 0, 0, 0 );
-     else if (!use_crtc2) {
+     else if (use_crtc2) {
           /* Clear black bars around the picture */
-          c2frame->SetColor( c2frame, 0, 0, 0, 0 );
-          c2frame->FillRectangle( c2frame,
+          subframe->SetColor( subframe, 0, 0, 0, 0 );
+          subframe->FillRectangle( subframe,
                                   0, 0,
                                   drect.x, drect.y + drect.h );
-          c2frame->FillRectangle( c2frame,
+          subframe->FillRectangle( subframe,
                                   0, drect.y + drect.h,
                                   drect.x + drect.w, drect.y );
-          c2frame->FillRectangle( c2frame,
+          subframe->FillRectangle( subframe,
                                   drect.x, 0,
                                   drect.x + drect.w, drect.y );
-          c2frame->FillRectangle( c2frame,
+          subframe->FillRectangle( subframe,
                                   drect.x + drect.w, drect.y,
                                   drect.x, drect.y + drect.h );
      }
@@ -782,30 +789,29 @@
       */
 }
 
-#if 0
 static int
-directfb_set_video_eq( const vidix_video_eq_t * info )
+directfb_set_video_eq( char *data, int value )
 {
      DFBColorAdjustment ca;
-     float factor = (float) 0xffff / 2000.0;
+     float factor = (float) 0xffff / 200.0;
 
      ca.flags = DCAF_NONE;
 
-     if (info->cap & VEQ_CAP_BRIGHTNESS) {
+     if (!strcasecmp( data, "brightness" )) {
           ca.flags      |= DCAF_BRIGHTNESS;
-          ca.brightness  = info->brightness * factor + 0x8000;
+          ca.brightness  = value * factor + 0x8000;
      }
-     if (info->cap & VEQ_CAP_CONTRAST) {
+     if (!strcasecmp( data, "contrast" )) {
           ca.flags    |= DCAF_CONTRAST;
-          ca.contrast  = info->contrast * factor + 0x8000;
+          ca.contrast  = value * factor + 0x8000;
      }
-     if (info->cap & VEQ_CAP_HUE) {
+     if (!strcasecmp( data, "hue" )) {
           ca.flags |= DCAF_HUE;
-          ca.hue    = info->hue * factor + 0x8000;
+          ca.hue    = value * factor + 0x8000;
      }
-     if (info->cap & VEQ_CAP_SATURATION) {
+     if (!strcasecmp( data, "saturation" )) {
           ca.flags      |= DCAF_SATURATION;
-          ca.saturation  = info->saturation * factor + 0x8000;
+          ca.saturation  = value * factor + 0x8000;
      }
 
      /* Prefer CRTC2 over BES */
@@ -818,10 +824,10 @@
 }
 
 static int
-directfb_get_video_eq( vidix_video_eq_t * info )
+directfb_get_video_eq( char *data, int *value )
 {
      DFBColorAdjustment ca;
-     float factor = 2000.0 / (float) 0xffff;
+     float factor = 200.0 / (float) 0xffff;
 
      /* Prefer CRTC2 over BES */
      if (use_crtc2)
@@ -831,26 +837,21 @@
      else
           return 0;
 
-     if (ca.flags & DCAF_BRIGHTNESS) {
-          info->cap        |= VEQ_CAP_BRIGHTNESS;
-          info->brightness  = (ca.brightness - 0x8000) * factor;
-     }
-     if (ca.flags & DCAF_CONTRAST) {
-          info->cap      |= VEQ_CAP_CONTRAST;
-          info->contrast  = (ca.contrast - 0x8000) * factor;
-     }
-     if (ca.flags & DCAF_HUE) {
-          info->cap |= VEQ_CAP_HUE;
-          info->hue  = (ca.hue - 0x8000) * factor;
-     }
-     if (ca.flags & DCAF_SATURATION) {
-          info->cap        |= VEQ_CAP_SATURATION;
-          info->saturation  = (ca.saturation - 0x8000) * factor;
-     }
+     if (!strcasecmp( data, "brightness" ) &&
+         (ca.flags & DCAF_BRIGHTNESS))
+          *value = (ca.brightness - 0x8000) * factor;
+     if (!strcasecmp( data, "contrast" ) &&
+         (ca.flags & DCAF_CONTRAST))
+          *value = (ca.contrast - 0x8000) * factor;
+     if (!strcasecmp( data, "hue" ) &&
+         (ca.flags & DCAF_HUE))
+          *value = (ca.hue - 0x8000) * factor;
+     if (!strcasecmp( data, "saturation" ) &&
+         (ca.flags & DCAF_SATURATION))
+          *value = (ca.saturation - 0x8000) * factor;
 
      return 0;
 }
-#endif
 
 static uint32_t
 control( uint32_t request, void *data, ... )
@@ -858,34 +859,16 @@
      switch (request) {
      case VOCTRL_QUERY_FORMAT:
 	  return query_format( *((uint32_t *) data) );
-#if 0
      case VOCTRL_SET_EQUALIZER:
           {
                va_list ap;
                int value;
-               vidix_video_eq_t info;
 
                va_start( ap, data );
                value = va_arg( ap, int );
                va_end( ap );
 
-               if (!strcasecmp( data, "brightness" )) {
-                    info.cap = VEQ_CAP_BRIGHTNESS;
-                    info.brightness = value * 10;
-               }
-               if (!strcasecmp( data, "contrast" )) {
-                    info.cap = VEQ_CAP_CONTRAST;
-                    info.contrast = value * 10;
-               }
-               if (!strcasecmp( data, "saturation" )) {
-                    info.cap = VEQ_CAP_SATURATION;
-                    info.saturation = value * 10;
-               }
-               if (!strcasecmp( data, "hue" )) {
-                    info.cap = VEQ_CAP_HUE;
-                    info.hue = value * 10;
-               }
-               if (directfb_set_video_eq( &info ))
+               if (directfb_set_video_eq( data, value ))
                     return VO_FALSE;
 
                return VO_TRUE;
@@ -894,32 +877,18 @@
           {
                va_list ap;
                int *value;
-               vidix_video_eq_t info;
-
-               if (directfb_get_video_eq( &info ))
-                    return VO_FALSE;
 
                va_start( ap, data );
                value = va_arg( ap, int* );
                va_end( ap );
 
-               if (!strcasecmp( data, "brightness" ))
-                    if (info.cap & VEQ_CAP_BRIGHTNESS)
-                         *value = info.brightness / 10;
-               if (!strcasecmp( data, "contrast" ))
-                    if (info.cap & VEQ_CAP_CONTRAST)
-                         *value = info.contrast / 10;
-               if (!strcasecmp( data, "saturation" ))
-                    if (info.cap & VEQ_CAP_SATURATION)
-                         *value = info.saturation / 10;
-               if (!strcasecmp( data, "hue" ))
-                    if (info.cap & VEQ_CAP_HUE)
-                         *value = info.hue / 10;
+               if (directfb_get_video_eq( data, value ))
+                    return VO_FALSE;
 
                return VO_TRUE;
           }
-#endif
      }
+
      return VO_NOTIMPL;
 }
 
@@ -930,7 +899,6 @@
 static void
 check_events( void )
 {
-     static int opa = 255;
      DFBInputEvent event;
 
      if (buffer->GetEvent( buffer, DFB_EVENT( &event )) == DFB_OK) {


More information about the MPlayer-dev-eng mailing list