diff --git a/libhwcomposer/hwc_mdpcomp.cpp b/libhwcomposer/hwc_mdpcomp.cpp index a81913db..1df423d8 100644 --- a/libhwcomposer/hwc_mdpcomp.cpp +++ b/libhwcomposer/hwc_mdpcomp.cpp @@ -470,8 +470,10 @@ bool MDPComp::isValidDimension(hwc_context_t *ctx, hwc_layer_1_t *layer) { } //XXX: Investigate doing this with pixel phase on MDSS - if(!isSecureBuffer(hnd) && isNonIntegralSourceCrop(layer->sourceCropf)) + if((!isSecureBuffer(hnd) || !isProtectedBuffer(hnd)) && + isNonIntegralSourceCrop(layer->sourceCropf)) { return false; + } hwc_rect_t crop = integerizeSourceCrop(layer->sourceCropf); hwc_rect_t dst = layer->displayFrame; @@ -1866,7 +1868,8 @@ void MDPComp::updateYUV(hwc_context_t* ctx, hwc_display_contents_1_t* list, } else { if(frame.isFBComposed[nYuvIndex]) { private_handle_t *hnd = (private_handle_t *)layer->handle; - if(!secureOnly || isSecureBuffer(hnd)) { + if(!secureOnly || isSecureBuffer(hnd) || + isProtectedBuffer(hnd)) { frame.isFBComposed[nYuvIndex] = false; frame.fbCount--; } diff --git a/libhwcomposer/hwc_utils.cpp b/libhwcomposer/hwc_utils.cpp index f9d2e1c0..19514e66 100644 --- a/libhwcomposer/hwc_utils.cpp +++ b/libhwcomposer/hwc_utils.cpp @@ -1196,7 +1196,8 @@ void setListStats(hwc_context_t *ctx, ctx->listStats[dpy].yuvIndices[i] = -1; ctx->listStats[dpy].yuv4k2kIndices[i] = -1; - if (isSecureBuffer(hnd)) { + if (isSecureBuffer(hnd) || isProtectedBuffer(hnd)) { + // Protected Buffer must be treated as Secure Layer ctx->listStats[dpy].isSecurePresent = true; if(not isYuvBuffer(hnd)) { // cache secureRGB layer parameters like we cache for YUV layers diff --git a/libhwcomposer/hwc_utils.h b/libhwcomposer/hwc_utils.h index 41dd2585..1cceb81c 100644 --- a/libhwcomposer/hwc_utils.h +++ b/libhwcomposer/hwc_utils.h @@ -538,12 +538,12 @@ static inline bool isYUVSplitNeeded(const private_handle_t* hnd) { (hnd->width > maxPipeWidth)); } -// Returns true if the buffer is secure +// Returns true if the buffer is secure(using secure heap) static inline bool isSecureBuffer(const private_handle_t* hnd) { return (hnd && (private_handle_t::PRIV_FLAGS_SECURE_BUFFER & hnd->flags)); } -// Returns true if the buffer is protected +// Returns true if the buffer is protected(L3 using IOMMU heap) static inline bool isProtectedBuffer(const private_handle_t* hnd) { return (hnd && (private_handle_t::PRIV_FLAGS_PROTECTED_BUFFER & hnd->flags)); }