hwc/overlay: Fix decimation / bwc bugs
1) While setting BWC check for 90 transform and swap crop 2) Calculate decimation in the getDecimationFactor API itself. Currently, a residual downscale is calculated and the clients have to take logs and apply forcible decimation like in MdpCtrl 3) Fix bug where transform gets typecasted to bool b/14225977 Change-Id: I3c99c571e02e2cf7822342516b6a87d97be553d1
This commit is contained in:
@@ -2177,30 +2177,23 @@ void BwcPM::setBwc(const hwc_rect_t& crop,
|
||||
if(!qdutils::MDPVersion::getInstance().supportsBWC()) {
|
||||
return;
|
||||
}
|
||||
int src_w = crop.right - crop.left;
|
||||
int src_h = crop.bottom - crop.top;
|
||||
int dst_w = dst.right - dst.left;
|
||||
int dst_h = dst.bottom - dst.top;
|
||||
if(transform & HAL_TRANSFORM_ROT_90) {
|
||||
swap(src_w, src_h);
|
||||
}
|
||||
//src width > MAX mixer supported dim
|
||||
if((crop.right - crop.left) > qdutils::MAX_DISPLAY_DIM) {
|
||||
if(src_w > qdutils::MAX_DISPLAY_DIM) {
|
||||
return;
|
||||
}
|
||||
//Decimation necessary, cannot use BWC. H/W requirement.
|
||||
if(qdutils::MDPVersion::getInstance().supportsDecimation()) {
|
||||
int src_w = crop.right - crop.left;
|
||||
int src_h = crop.bottom - crop.top;
|
||||
int dst_w = dst.right - dst.left;
|
||||
int dst_h = dst.bottom - dst.top;
|
||||
if(transform & HAL_TRANSFORM_ROT_90) {
|
||||
swap(src_w, src_h);
|
||||
}
|
||||
float horDscale = 0.0f;
|
||||
float verDscale = 0.0f;
|
||||
int horzDeci = 0;
|
||||
int vertDeci = 0;
|
||||
ovutils::getDecimationFactor(src_w, src_h, dst_w, dst_h, horDscale,
|
||||
verDscale);
|
||||
//TODO Use log2f once math.h has it
|
||||
if((int)horDscale)
|
||||
horzDeci = (int)(log(horDscale) / log(2));
|
||||
if((int)verDscale)
|
||||
vertDeci = (int)(log(verDscale) / log(2));
|
||||
uint8_t horzDeci = 0;
|
||||
uint8_t vertDeci = 0;
|
||||
ovutils::getDecimationFactor(src_w, src_h, dst_w, dst_h, horzDeci,
|
||||
vertDeci);
|
||||
if(horzDeci || vertDeci) return;
|
||||
}
|
||||
//Property
|
||||
|
||||
Reference in New Issue
Block a user