h/q/d: Add binder-api support to change refresh-rate.
** Now, there are two ways for the clients to request change in the refresh-rate of the target. (a) Using metadata of the input-buffer. (b) Using binder api added as part of this change. ** configureDynRefreshRate binder api provides three op-modes which can be used as following: (a) "DISABLE_METADATA_DYN_REFRESH_RATE" can be used by the clients, to disallow display-hal from honoring refresh-rate change requests, made by video-clients using the metadata. For ex: This can be used during streaming use-cases (Dash-playback, playback at WFD-sink,etc) where the idea is not to change the refresh-rate, though video-client requests for it using metadata, as video-clients cannot distinguish between streaming and non-streaming usecases. Usage: adb shell service call display.qservice 18 i32 0 i32 0 (b) "ENABLE_METADATA_DYN_REFRESH_RATE" can be used by the clients after DISABLE_METADATA_DYN_REFRESH_RATE, to once again allow display-hal to be able to change refresh-rate based on requests made by the video-clients using metadata. For ex: This can be used by clients( Dash-playback, WFD, etc) once they are done with their use-case. WFD-framework will also use this when the wfd-session is paused. Usage: adb shell service call display.qservice 18 i32 1 i32 0 (c) "SET_BINDER_DYN_REFRESH_RATE" can be used by the clients to change the refresh-rate of the target using binder-api, provided they have disallowed display from honoring the refresh-rate requests made using metadata. In other words, changing refresh-rate through this binder api and using metadata approach cannot co-exist together. Usage: adb shell service call display.qservice 18 i32 2 i32 45 -- The refresh-rate set here will correspond to 45fps. ** Added property "persist.metadata_dynfps.disable" that can be used by OEM's, to disable setting of refresh-rate using the metadata. Change-Id: I767fa174dcf1cfd061a578e96cd68af28e7dd36b
This commit is contained in:
@@ -401,6 +401,12 @@ void initContext(hwc_context_t *ctx)
|
||||
ctx->mWindowboxFeature = true;
|
||||
}
|
||||
|
||||
ctx->mUseMetaDataRefreshRate = true;
|
||||
if(property_get("persist.metadata_dynfps.disable", value, "false")
|
||||
&& !strcmp(value, "true")) {
|
||||
ctx->mUseMetaDataRefreshRate = false;
|
||||
}
|
||||
|
||||
memset(&(ctx->mPtorInfo), 0, sizeof(ctx->mPtorInfo));
|
||||
ALOGI("Initializing Qualcomm Hardware Composer");
|
||||
ALOGI("MDP version: %d", ctx->mMDP.version);
|
||||
@@ -460,7 +466,7 @@ void closeContext(hwc_context_t *ctx)
|
||||
}
|
||||
|
||||
//Helper to roundoff the refreshrates
|
||||
static uint32_t roundOff(uint32_t refreshRate) {
|
||||
uint32_t roundOff(uint32_t refreshRate) {
|
||||
int count = (int) (sizeof(stdRefreshRates)/sizeof(stdRefreshRates[0]));
|
||||
uint32_t rate = refreshRate;
|
||||
for(int i=0; i< count; i++) {
|
||||
@@ -1052,7 +1058,7 @@ void setListStats(hwc_context_t *ctx,
|
||||
ctx->listStats[dpy].preMultipliedAlpha = true;
|
||||
|
||||
#ifdef DYNAMIC_FPS
|
||||
if (dpy == HWC_DISPLAY_PRIMARY && mdpHw.isDynFpsSupported()) {
|
||||
if (!dpy && mdpHw.isDynFpsSupported() && ctx->mUseMetaDataRefreshRate){
|
||||
//dyn fps: get refreshrate from metadata
|
||||
//Support multiple refresh rates if they are same
|
||||
//else set to default
|
||||
|
||||
Reference in New Issue
Block a user