Merge "hwc/overlay: Add Color layer support in MDP Composition."

This commit is contained in:
Linux Build Service Account
2013-12-02 02:43:48 -08:00
committed by Gerrit - the friendly Code Review server
10 changed files with 85 additions and 3 deletions

View File

@@ -293,6 +293,10 @@ bool MDPComp::isValidDimension(hwc_context_t *ctx, hwc_layer_1_t *layer) {
private_handle_t *hnd = (private_handle_t *)layer->handle; private_handle_t *hnd = (private_handle_t *)layer->handle;
if(!hnd) { if(!hnd) {
if (layer->flags & HWC_COLOR_FILL) {
// Color layer
return true;
}
ALOGE("%s: layer handle is NULL", __FUNCTION__); ALOGE("%s: layer handle is NULL", __FUNCTION__);
return false; return false;
} }
@@ -1446,8 +1450,13 @@ bool MDPCompNonSplit::draw(hwc_context_t *ctx, hwc_display_contents_1_t* list) {
hwc_layer_1_t *layer = &list->hwLayers[i]; hwc_layer_1_t *layer = &list->hwLayers[i];
private_handle_t *hnd = (private_handle_t *)layer->handle; private_handle_t *hnd = (private_handle_t *)layer->handle;
if(!hnd) { if(!hnd) {
ALOGE("%s handle null", __FUNCTION__); if (!(layer->flags & HWC_COLOR_FILL)) {
return false; ALOGE("%s handle null", __FUNCTION__);
return false;
}
// No PLAY for Color layer
layerProp[i].mFlags &= ~HWC_MDPCOMP;
continue;
} }
int mdpIndex = mCurrentFrame.layerToMDP[i]; int mdpIndex = mCurrentFrame.layerToMDP[i];

View File

@@ -1366,6 +1366,42 @@ int configMdp(Overlay *ov, const PipeArgs& parg,
return 0; return 0;
} }
int configColorLayer(hwc_context_t *ctx, hwc_layer_1_t *layer,
const int& dpy, eMdpFlags& mdpFlags, eZorder& z,
eIsFg& isFg, const eDest& dest) {
hwc_rect_t dst = layer->displayFrame;
trimLayer(ctx, dpy, 0, dst, dst);
int w = ctx->dpyAttr[dpy].xres;
int h = ctx->dpyAttr[dpy].yres;
int dst_w = dst.right - dst.left;
int dst_h = dst.bottom - dst.top;
uint32_t color = layer->transform;
Whf whf(w, h, getMdpFormat(HAL_PIXEL_FORMAT_RGBA_8888), 0);
if (layer->blending == HWC_BLENDING_PREMULT)
ovutils::setMdpFlags(mdpFlags, ovutils::OV_MDP_BLEND_FG_PREMULT);
PipeArgs parg(mdpFlags, whf, z, isFg, static_cast<eRotFlags>(0),
layer->planeAlpha,
(ovutils::eBlending) getBlending(layer->blending));
// Configure MDP pipe for Color layer
Dim pos(dst.left, dst.top, dst_w, dst_h);
ctx->mOverlay->setSource(parg, dest);
ctx->mOverlay->setColor(color, dest);
ctx->mOverlay->setTransform(0, dest);
ctx->mOverlay->setCrop(pos, dest);
ctx->mOverlay->setPosition(pos, dest);
if (!ctx->mOverlay->commit(dest)) {
ALOGE("%s: Configure color layer failed!", __FUNCTION__);
return -1;
}
return 0;
}
void updateSource(eTransform& orient, Whf& whf, void updateSource(eTransform& orient, Whf& whf,
hwc_rect_t& crop) { hwc_rect_t& crop) {
Dim srcCrop(crop.left, crop.top, Dim srcCrop(crop.left, crop.top,
@@ -1396,7 +1432,12 @@ int configureNonSplit(hwc_context_t *ctx, hwc_layer_1_t *layer,
eIsFg& isFg, const eDest& dest, Rotator **rot) { eIsFg& isFg, const eDest& dest, Rotator **rot) {
private_handle_t *hnd = (private_handle_t *)layer->handle; private_handle_t *hnd = (private_handle_t *)layer->handle;
if(!hnd) { if(!hnd) {
if (layer->flags & HWC_COLOR_FILL) {
// Configure Color layer
return configColorLayer(ctx, layer, dpy, mdpFlags, z, isFg, dest);
}
ALOGE("%s: layer handle is NULL", __FUNCTION__); ALOGE("%s: layer handle is NULL", __FUNCTION__);
return -1; return -1;
} }

View File

@@ -268,6 +268,10 @@ int configMdp(overlay::Overlay *ov, const ovutils::PipeArgs& parg,
const hwc_rect_t& pos, const MetaData_t *metadata, const hwc_rect_t& pos, const MetaData_t *metadata,
const ovutils::eDest& dest); const ovutils::eDest& dest);
int configColorLayer(hwc_context_t *ctx, hwc_layer_1_t *layer, const int& dpy,
ovutils::eMdpFlags& mdpFlags, ovutils::eZorder& z,
ovutils::eIsFg& isFg, const ovutils::eDest& dest);
void updateSource(ovutils::eTransform& orient, ovutils::Whf& whf, void updateSource(ovutils::eTransform& orient, ovutils::Whf& whf,
hwc_rect_t& crop); hwc_rect_t& crop);
@@ -459,7 +463,8 @@ static inline bool isYuvPresent (hwc_context_t *ctx, int dpy) {
} }
static inline bool has90Transform(hwc_layer_1_t *layer) { static inline bool has90Transform(hwc_layer_1_t *layer) {
return (layer->transform & HWC_TRANSFORM_ROT_90); return ((layer->transform & HWC_TRANSFORM_ROT_90) &&
!(layer->flags & HWC_COLOR_FILL));
} }
inline bool isSecurePresent(hwc_context_t *ctx, int dpy) { inline bool isSecurePresent(hwc_context_t *ctx, int dpy) {

View File

@@ -200,6 +200,13 @@ void Overlay::setCrop(const utils::Dim& d,
mPipeBook[index].mPipe->setCrop(d); mPipeBook[index].mPipe->setCrop(d);
} }
void Overlay::setColor(const uint32_t color,
utils::eDest dest) {
int index = (int)dest;
validate(index);
mPipeBook[index].mPipe->setColor(color);
}
void Overlay::setPosition(const utils::Dim& d, void Overlay::setPosition(const utils::Dim& d,
utils::eDest dest) { utils::eDest dest) {
int index = (int)dest; int index = (int)dest;

View File

@@ -79,6 +79,7 @@ public:
void setSource(const utils::PipeArgs args, utils::eDest dest); void setSource(const utils::PipeArgs args, utils::eDest dest);
void setCrop(const utils::Dim& d, utils::eDest dest); void setCrop(const utils::Dim& d, utils::eDest dest);
void setColor(const uint32_t color, utils::eDest dest);
void setTransform(const int orientation, utils::eDest dest); void setTransform(const int orientation, utils::eDest dest);
void setPosition(const utils::Dim& dim, utils::eDest dest); void setPosition(const utils::Dim& dim, utils::eDest dest);
void setVisualParams(const MetaData_t& data, utils::eDest dest); void setVisualParams(const MetaData_t& data, utils::eDest dest);

View File

@@ -61,6 +61,8 @@ public:
void setSource(const utils::PipeArgs& args); void setSource(const utils::PipeArgs& args);
/* set crop info and pass it down to mdp */ /* set crop info and pass it down to mdp */
void setCrop(const utils::Dim& d); void setCrop(const utils::Dim& d);
/* set color for mdp pipe */
void setColor(const uint32_t color);
/* set orientation */ /* set orientation */
void setTransform(const utils::eTransform& p); void setTransform(const utils::eTransform& p);
/* set mdp position using dim */ /* set mdp position using dim */
@@ -174,6 +176,11 @@ inline void Ctrl::setCrop(const utils::Dim& d)
mMdp.setCrop(d); mMdp.setCrop(d);
} }
inline void Ctrl::setColor(const uint32_t color)
{
mMdp.setColor(color);
}
inline bool Ctrl::setVisualParams(const MetaData_t &metadata) inline bool Ctrl::setVisualParams(const MetaData_t &metadata)
{ {
if (!mMdp.setVisualParams(metadata)) { if (!mMdp.setVisualParams(metadata)) {

View File

@@ -122,6 +122,10 @@ void MdpCtrl::setCrop(const utils::Dim& d) {
setSrcRectDim(d); setSrcRectDim(d);
} }
void MdpCtrl::setColor(const uint32_t color) {
mOVInfo.bg_color = color;
}
void MdpCtrl::setPosition(const overlay::utils::Dim& d) { void MdpCtrl::setPosition(const overlay::utils::Dim& d) {
setDstRectDim(d); setDstRectDim(d);
} }

View File

@@ -57,6 +57,8 @@ public:
* Dim - ROI dimensions. * Dim - ROI dimensions.
*/ */
void setCrop(const utils::Dim& d); void setCrop(const utils::Dim& d);
/* set color for mdp pipe */
void setColor(const uint32_t color);
void setTransform(const utils::eTransform& orient); void setTransform(const utils::eTransform& orient);
/* given a dim and w/h, set overlay dim */ /* given a dim and w/h, set overlay dim */
void setPosition(const utils::Dim& dim); void setPosition(const utils::Dim& dim);

View File

@@ -84,6 +84,10 @@ void GenericPipe::setCrop(const overlay::utils::Dim& d) {
mCtrlData.ctrl.setCrop(d); mCtrlData.ctrl.setCrop(d);
} }
void GenericPipe::setColor(const uint32_t color) {
mCtrlData.ctrl.setColor(color);
}
void GenericPipe::setTransform(const utils::eTransform& orient) { void GenericPipe::setTransform(const utils::eTransform& orient) {
mCtrlData.ctrl.setTransform(orient); mCtrlData.ctrl.setTransform(orient);
} }

View File

@@ -48,6 +48,8 @@ public:
void setSource(const utils::PipeArgs& args); void setSource(const utils::PipeArgs& args);
/* set crop a.k.a the region of interest */ /* set crop a.k.a the region of interest */
void setCrop(const utils::Dim& d); void setCrop(const utils::Dim& d);
/* set color for mdp pipe */
void setColor(const uint32_t color);
/* set orientation*/ /* set orientation*/
void setTransform(const utils::eTransform& param); void setTransform(const utils::eTransform& param);
/* set mdp posision using dim */ /* set mdp posision using dim */