vblank: set the fixed fps to a vblank object 19/165219/5
authorBoram Park <boram1288.park@samsung.com>
Wed, 27 Dec 2017 05:58:21 +0000 (14:58 +0900)
committerBoram Park <boram1288.park@samsung.com>
Thu, 28 Dec 2017 07:38:39 +0000 (16:38 +0900)
The vblank fps by setting with tdm_vblank_set_fixed_fps can't be changed with
tdm_vblank_set_fps. But it could be changed with tdm_vblank_enable_global_fps.

Change-Id: Iee25d749c1ebde51546810cb0baee1a0fc08ddef

include/tdm.h
src/tdm_vblank.c

index c843eef..3812842 100644 (file)
@@ -1354,6 +1354,7 @@ tdm_vblank_get_name(tdm_vblank *vblank, const char **name);
 /**
  * @brief Set the fps to a vblank object
  * @details Default is the @b vertical @b refresh @b rate of the given output.
+ * It could be ignored when the fixed fps is set by #tdm_vblank_set_fixed_fps
  * @param[in] vblank A vblank object
  * @param[in] fps over 0
  * @return #TDM_ERROR_NONE if success. Otherwise, error value.
@@ -1371,6 +1372,17 @@ tdm_error
 tdm_vblank_get_fps(tdm_vblank *vblank, unsigned int *fps);
 
 /**
+ * @brief Set the fixed fps to a vblank object
+ * @details
+ * It could be ignored when the global fps is set by #tdm_vblank_enable_global_fps
+ * @param[in] vblank A vblank object
+ * @param[in] fps over 0
+ * @return #TDM_ERROR_NONE if success. Otherwise, error value.
+ */
+tdm_error
+tdm_vblank_set_fixed_fps(tdm_vblank *vblank, unsigned int fps);
+
+/**
  * @brief Ignore the vblank global fps
  * @details
  * The global fps will be applied to all client's vblanks for all outputs.
index 91d04f4..e0ca079 100644 (file)
@@ -106,6 +106,7 @@ typedef struct _tdm_private_vblank {
        char name[TDM_NAME_LEN];
        unsigned int fps;
        unsigned int fps_changeable;
+       unsigned int fps_fixed;
        int offset;
        unsigned int enable_fake;
        unsigned int ignore_global_fps;
@@ -778,8 +779,10 @@ tdm_vblank_set_fps(tdm_vblank *vblank, unsigned int fps)
        TDM_RETURN_VAL_IF_FAIL(tdm_vblank_is_valid(vblank), TDM_ERROR_INVALID_PARAMETER);
        TDM_RETURN_VAL_IF_FAIL(fps > 0, TDM_ERROR_INVALID_PARAMETER);
 
-       if (private_vblank->fps != fps || private_vblank->fps_changeable)
-               VIN("fps(%d) fps_changeable(0)", fps);
+       if (private_vblank->fps_fixed) {
+               VIN("fps(%d) can't be changed", private_vblank->fps);
+               return TDM_ERROR_NONE;
+       }
 
        private_vblank->fps_changeable = 0;
 
@@ -789,6 +792,8 @@ tdm_vblank_set_fps(tdm_vblank *vblank, unsigned int fps)
        private_vblank->fps = fps;
        private_vblank->check_HW_or_SW = 1;
 
+       VIN("fps(%d) changed", fps);
+
        return TDM_ERROR_NONE;
 }
 
@@ -806,6 +811,28 @@ tdm_vblank_get_fps(tdm_vblank *vblank, unsigned int *fps)
 }
 
 EXTERN tdm_error
+tdm_vblank_set_fixed_fps(tdm_vblank *vblank, unsigned int fps)
+{
+       tdm_private_vblank *private_vblank = vblank;
+
+       TDM_RETURN_VAL_IF_FAIL(tdm_vblank_is_valid(vblank), TDM_ERROR_INVALID_PARAMETER);
+       TDM_RETURN_VAL_IF_FAIL(fps > 0, TDM_ERROR_INVALID_PARAMETER);
+
+       private_vblank->fps_changeable = 0;
+       private_vblank->fps_fixed = 1;
+
+       if (private_vblank->fps == fps)
+               return TDM_ERROR_NONE;
+
+       private_vblank->fps = fps;
+       private_vblank->check_HW_or_SW = 1;
+
+       VIN("fps(%d) fixed", fps);
+
+       return TDM_ERROR_NONE;
+}
+
+EXTERN tdm_error
 tdm_vblank_ignore_global_fps(tdm_vblank *vblank, unsigned int ignore)
 {
        tdm_private_vblank *private_vblank = vblank;