summaryrefslogtreecommitdiff
authorbaocheng sun <baocheng.sun@amlogic.com>2019-12-27 02:14:35 (GMT)
committer sky zhou <sky.zhou@amlogic.com>2020-05-21 11:10:45 (GMT)
commit0ab16d0b478cab423c10072a2efb6a027899012a (patch)
treeb24b4a5936cbe68ec7b4b2c337120d4f2a153403
parent0250e75ebab1e04d848f0fc3232e3e5de00a51cb (diff)
downloadhwcomposer-0ab16d0b478cab423c10072a2efb6a027899012a.zip
hwcomposer-0ab16d0b478cab423c10072a2efb6a027899012a.tar.gz
hwcomposer-0ab16d0b478cab423c10072a2efb6a027899012a.tar.bz2
hwc: release all ComposerHandleCache when drm video exit [1/1]
PD#SWPL-19149 Problem: When drm video exit playing, codec keeper memory not released Solution: Release all composerHandleCache when drm video exit Verify: verify on newton Change-Id: I03ea8503cd6e5862dbcd6796077f2e89728017e6 Signed-off-by: baocheng sun <baocheng.sun@amlogic.com>
Diffstat
-rw-r--r--service/2.1/utils/hal/include/composer-hal/2.1/ComposerResources.h15
1 files changed, 10 insertions, 5 deletions
diff --git a/service/2.1/utils/hal/include/composer-hal/2.1/ComposerResources.h b/service/2.1/utils/hal/include/composer-hal/2.1/ComposerResources.h
index 2a06130..ba864f4 100644
--- a/service/2.1/utils/hal/include/composer-hal/2.1/ComposerResources.h
+++ b/service/2.1/utils/hal/include/composer-hal/2.1/ComposerResources.h
@@ -208,7 +208,6 @@ class ComposerHandleCache {
// release cache
Error releaseCache(uint32_t slot) {
if (slot >= 0 && slot < mHandles.size()) {
- slot++;
switch (mHandleType) {
case HandleType::BUFFER:
for (; slot < mHandles.size(); slot++) {
@@ -243,12 +242,16 @@ class ComposerHandleCache {
} else if (am_gralloc_get_width(handle) <= 1 && am_gralloc_get_height(handle) <= 1) {
mFbType = DrmFbType::DRM_FB_DIM;
} else if (am_gralloc_is_coherent_buffer(handle)) {
- if (mFbType == DrmFbType::DRM_FB_VIDEO) {
+ if (mFbType == DrmFbType::DRM_FB_VIDEO ||
+ mFbType == DrmFbType::DRM_FB_DIM ||
+ mFbType == DrmFbType::DRM_FB_VIDEO_OVERLAY) {
changed = true;
}
mFbType = DrmFbType::DRM_FB_SCANOUT;
} else {
- if (mFbType == DrmFbType::DRM_FB_VIDEO) {
+ if (mFbType == DrmFbType::DRM_FB_VIDEO ||
+ mFbType == DrmFbType::DRM_FB_DIM ||
+ mFbType == DrmFbType::DRM_FB_VIDEO_OVERLAY) {
changed = true;
}
mFbType = DrmFbType::DRM_FB_RENDER;
@@ -271,8 +274,10 @@ class ComposerHandleCache {
if (mHandleType == HandleType::BUFFER) {
bool changed = isChangedFromeVideoToUi(*outHandle);
- if (changed)
- releaseCache(slot);
+ if (changed) {
+ ALOGD("FB type changed from video to UI, release cache");
+ releaseCache(0);
+ }
}
return error;