diff --git a/libhwcomposer/hwc_utils.cpp b/libhwcomposer/hwc_utils.cpp index 22cb220f..8b8411bd 100644 --- a/libhwcomposer/hwc_utils.cpp +++ b/libhwcomposer/hwc_utils.cpp @@ -908,6 +908,7 @@ int configureLowRes(hwc_context_t *ctx, hwc_layer_1_t *layer, //Configure rotator for pre-rotation if(configRotator(*rot, whf, crop, mdpFlags, orient, downscale) < 0) { ALOGE("%s: configRotator failed!", __FUNCTION__); + ctx->mOverlay->clear(dpy); return -1; } whf.format = (*rot)->getDstFormat(); @@ -981,6 +982,7 @@ int configureHighRes(hwc_context_t *ctx, hwc_layer_1_t *layer, //Configure rotator for pre-rotation if(configRotator(*rot, whf, crop, mdpFlagsL, orient, downscale) < 0) { ALOGE("%s: configRotator failed!", __FUNCTION__); + ctx->mOverlay->clear(dpy); return -1; } whf.format = (*rot)->getDstFormat(); diff --git a/liboverlay/overlay.cpp b/liboverlay/overlay.cpp index 97905d5c..9b91760e 100644 --- a/liboverlay/overlay.cpp +++ b/liboverlay/overlay.cpp @@ -311,6 +311,16 @@ void Overlay::getDump(char *buf, size_t len) { strncat(buf, str_pipes, strlen(str_pipes)); } +void Overlay::clear(int dpy) { + for(int i = 0; i < PipeBook::NUM_PIPES; i++) { + if (mPipeBook[i].mDisplay == dpy) { + // Mark as available for this round + PipeBook::resetUse(i); + PipeBook::resetAllocation(i); + } + } +} + void Overlay::PipeBook::init() { mPipe = NULL; mDisplay = DPY_UNUSED; diff --git a/liboverlay/overlay.h b/liboverlay/overlay.h index bf85b700..cfceaffa 100644 --- a/liboverlay/overlay.h +++ b/liboverlay/overlay.h @@ -90,6 +90,8 @@ public: * to populate. */ void getDump(char *buf, size_t len); + /* Reset usage and allocation bits on all pipes for given display */ + void clear(int dpy); static void setDMAMode(const int& mode); static int getDMAMode();