Hi,

attached are two patches - 

1) fixes incorrect patching of the frequency for NTSC/PAL-60 standards
(they are defined as 59.94Hz not 60Hz, this is simply wrong)

2) I would like to have an API to retrieve the current VSync count -
attached is an implementation for the fbdev system.


Cheers,
Andre'

>From 1be16a019ffe32f0f56d93ff027a2713b4e667c7 Mon Sep 17 00:00:00 2001
From: =?utf-8?q?Andr=C3=A9=20Draszik?= <andre.dras...@st.com>
Date: Fri, 29 Jan 2010 11:52:24 +0000
Subject: [PATCH 1/2] screen: NTSC and PAL60 standards are defined as 59.94Hz not 60Hz
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit

Signed-off-by: André Draszik <andre.dras...@st.com>
---
 src/display/idirectfbscreen.c |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/display/idirectfbscreen.c b/src/display/idirectfbscreen.c
index 9fcebdc..cd7bbe1 100644
--- a/src/display/idirectfbscreen.c
+++ b/src/display/idirectfbscreen.c
@@ -631,7 +631,7 @@ PatchEncoderConfig( DFBScreenEncoderConfig       *patched,
                case DSETV_PAL_60:
                case DSETV_PAL_M:
                     patched->resolution = DSOR_720_480;
-                    patched->frequency = DSEF_60HZ;
+                    patched->frequency = DSEF_59_94HZ;
                     break;
 
                case DSETV_SECAM:
@@ -643,7 +643,7 @@ PatchEncoderConfig( DFBScreenEncoderConfig       *patched,
                case DSETV_NTSC_M_JPN:
                case DSETV_NTSC_443:
                     patched->resolution = DSOR_720_480;
-                    patched->frequency = DSEF_60HZ;
+                    patched->frequency = DSEF_59_94HZ;
                     break;
 
                default:
-- 
1.6.3.3

>From b63f9c164ff305719357e0c890f261ab197d2dec Mon Sep 17 00:00:00 2001
From: =?utf-8?q?Andr=C3=A9=20Draszik?= <andre.dras...@st.com>
Date: Fri, 29 Jan 2010 11:51:08 +0000
Subject: [PATCH 2/2] IDirectFBScreen: add IDirectFBScreen::GetVSyncCount()
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit

Signed-off-by: André Draszik <andre.dras...@st.com>
---
 include/directfb.h            |   11 +++++++++++
 src/core/screen.c             |   20 ++++++++++++++++++++
 src/core/screen.h             |    2 ++
 src/core/screens.h            |    8 ++++++++
 src/display/idirectfbscreen.c |   10 ++++++++++
 systems/fbdev/fbdev.c         |   32 ++++++++++++++++++++++++++++++++
 6 files changed, 83 insertions(+), 0 deletions(-)

diff --git a/include/directfb.h b/include/directfb.h
index 54fbd19..a4edf43 100644
--- a/include/directfb.h
+++ b/include/directfb.h
@@ -2693,6 +2693,17 @@ DEFINE_INTERFACE(   IDirectFBScreen,
           int                                 output,
           const DFBScreenOutputConfig        *config
      );
+
+
+   /** Synchronization **/
+
+     /*
+      * Return current VSync count.
+      */
+     DFBResult (*GetVSyncCount) (
+          IDirectFBScreen                    *thiz,
+          unsigned long                      *ret_count
+     );
 )
 
 
diff --git a/src/core/screen.c b/src/core/screen.c
index 4b233e0..ede0f11 100644
--- a/src/core/screen.c
+++ b/src/core/screen.c
@@ -111,6 +111,26 @@ dfb_screen_wait_vsync( CoreScreen *screen )
      return DFB_UNSUPPORTED;
 }
 
+DFBResult
+dfb_screen_get_vsync_count( CoreScreen *screen, unsigned long *ret_count )
+{
+     ScreenFuncs *funcs;
+
+     D_ASSERT( screen != NULL );
+     D_ASSERT( screen->funcs != NULL );
+     D_ASSERT( ret_count != NULL );
+
+     funcs = screen->funcs;
+
+     if (funcs->GetVSyncCount)
+          return funcs->GetVSyncCount( screen,
+                                       screen->driver_data,
+                                       screen->screen_data,
+                                       ret_count );
+
+     return DFB_UNSUPPORTED;
+}
+
 
 /*********************************** Mixers ***********************************/
 
diff --git a/src/core/screen.h b/src/core/screen.h
index b5491f4..72cea82 100644
--- a/src/core/screen.h
+++ b/src/core/screen.h
@@ -45,6 +45,8 @@ DFBResult dfb_screen_set_powermode   ( CoreScreen                  *screen,
                                        DFBScreenPowerMode           mode );
 
 DFBResult dfb_screen_wait_vsync      ( CoreScreen                  *screen );
+DFBResult dfb_screen_get_vsync_count ( CoreScreen                  *screen,
+                                       unsigned long               *ret_count );
 
 
 /* Mixers */
diff --git a/src/core/screens.h b/src/core/screens.h
index 40fc084..ddf2a4b 100644
--- a/src/core/screens.h
+++ b/src/core/screens.h
@@ -132,6 +132,14 @@ typedef struct {
                                    void                   *driver_data,
                                    void                   *screen_data );
 
+     /*
+      * Wait for the vertical retrace.
+      */
+     DFBResult (*GetVSyncCount)  ( CoreScreen             *screen,
+                                   void                   *driver_data,
+                                   void                   *screen_data,
+                                   unsigned long          *ret_count );
+
 
    /** Mixer configuration **/
 
diff --git a/src/display/idirectfbscreen.c b/src/display/idirectfbscreen.c
index cd7bbe1..51ce261 100644
--- a/src/display/idirectfbscreen.c
+++ b/src/display/idirectfbscreen.c
@@ -213,6 +213,15 @@ IDirectFBScreen_WaitForSync( IDirectFBScreen *thiz )
 }
 
 static DFBResult
+IDirectFBScreen_GetVSyncCount( IDirectFBScreen *thiz,
+                               unsigned long   *ret_count )
+{
+     DIRECT_INTERFACE_GET_DATA(IDirectFBScreen)
+
+     return dfb_screen_get_vsync_count( data->screen, ret_count );
+}
+
+static DFBResult
 IDirectFBScreen_GetMixerDescriptions( IDirectFBScreen           *thiz,
                                       DFBScreenMixerDescription *descriptions )
 {
@@ -555,6 +564,7 @@ IDirectFBScreen_Construct( IDirectFBScreen *thiz,
      thiz->EnumDisplayLayers        = IDirectFBScreen_EnumDisplayLayers;
      thiz->SetPowerMode             = IDirectFBScreen_SetPowerMode;
      thiz->WaitForSync              = IDirectFBScreen_WaitForSync;
+     thiz->GetVSyncCount            = IDirectFBScreen_GetVSyncCount;
      thiz->GetMixerDescriptions     = IDirectFBScreen_GetMixerDescriptions;
      thiz->GetMixerConfiguration    = IDirectFBScreen_GetMixerConfiguration;
      thiz->TestMixerConfiguration   = IDirectFBScreen_TestMixerConfiguration;
diff --git a/systems/fbdev/fbdev.c b/systems/fbdev/fbdev.c
index 9eda96a..05be073 100644
--- a/systems/fbdev/fbdev.c
+++ b/systems/fbdev/fbdev.c
@@ -209,11 +209,17 @@ static DFBResult primaryGetScreenSize( CoreScreen           *screen,
                                        int                  *ret_width,
                                        int                  *ret_height );
 
+static DFBResult primaryGetVSyncCount( CoreScreen           *screen,
+                                       void                 *driver_data,
+                                       void                 *screen_data,
+                                       unsigned long        *ret_count );
+
 static ScreenFuncs primaryScreenFuncs = {
      .InitScreen    = primaryInitScreen,
      .SetPowerMode  = primarySetPowerMode,
      .WaitVSync     = primaryWaitVSync,
      .GetScreenSize = primaryGetScreenSize,
+     .GetVSyncCount = primaryGetVSyncCount,
 };
 
 /******************************************************************************/
@@ -1068,6 +1074,32 @@ primaryWaitVSync( CoreScreen *screen,
 }
 
 static DFBResult
+primaryGetVSyncCount( CoreScreen    *screen,
+                      void          *driver_data,
+                      void          *screen_data,
+                      unsigned long *ret_count )
+{
+     struct fb_vblank vblank;
+
+     D_DEBUG_AT( FBDev_Primary, "%s()\n", __FUNCTION__ );
+
+     D_ASSERT( ret_count != NULL );
+
+     if (!ret_count)
+          return DFB_INVARG;
+
+     if (ioctl( dfb_fbdev->fd, FBIOGET_VBLANK, &vblank ))
+          return errno2result( errno );
+
+     if (!D_FLAGS_IS_SET( vblank.flags, FB_VBLANK_HAVE_COUNT ))
+          return DFB_UNSUPPORTED;
+
+     *ret_count = vblank.count;
+
+     return DFB_OK;
+}
+
+static DFBResult
 primaryGetScreenSize( CoreScreen *screen,
                       void       *driver_data,
                       void       *screen_data,
-- 
1.6.3.3

_______________________________________________
directfb-dev mailing list
directfb-dev@directfb.org
http://mail.directfb.org/cgi-bin/mailman/listinfo/directfb-dev

Reply via email to