hwc/overlay: Video on 4k2k external, 4k2k rotation.
-Add support for Video via overlay on 4k2k external panel. -Add support for rotating videos on 4k2k panels. We use pre-rotation in hwc to rotate a video into a single buffer, irrespective of panel size. Then this buffer is fed to MDP. Rotator objects are managed by the new RotMgr. -Cleaup mdpcomp and overlay. Change-Id: Ifb08534747e8e18b6c58dd8a3e1a9947409100f1
This commit is contained in:
committed by
Gerrit - the friendly Code Review server
parent
893a34a75b
commit
acf102021a
@@ -27,6 +27,7 @@
|
||||
#include <utils/Trace.h>
|
||||
|
||||
#include <overlay.h>
|
||||
#include <overlayRotator.h>
|
||||
#include <fb_priv.h>
|
||||
#include <mdp_version.h>
|
||||
#include "hwc_utils.h"
|
||||
@@ -100,11 +101,11 @@ static void reset(hwc_context_t *ctx, int numDisplays,
|
||||
|
||||
if(ctx->mFBUpdate[i])
|
||||
ctx->mFBUpdate[i]->reset();
|
||||
|
||||
if(ctx->mVidOv[i])
|
||||
ctx->mVidOv[i]->reset();
|
||||
if(ctx->mCopyBit[i])
|
||||
ctx->mCopyBit[i]->reset();
|
||||
}
|
||||
VideoOverlay::reset();
|
||||
}
|
||||
|
||||
//clear prev layer prop flags and realloc for current frame
|
||||
@@ -135,7 +136,7 @@ static int hwc_prepare_primary(hwc_composer_device_1 *dev,
|
||||
int ret = ctx->mMDPComp->prepare(ctx, list);
|
||||
if(!ret) {
|
||||
// IF MDPcomp fails use this route
|
||||
VideoOverlay::prepare(ctx, list, dpy);
|
||||
ctx->mVidOv[dpy]->prepare(ctx, list);
|
||||
ctx->mFBUpdate[dpy]->prepare(ctx, list);
|
||||
}
|
||||
ctx->mLayerCache[dpy]->updateLayerCache(list);
|
||||
@@ -161,7 +162,7 @@ static int hwc_prepare_external(hwc_composer_device_1 *dev,
|
||||
if(fbLayer->handle) {
|
||||
setListStats(ctx, list, dpy);
|
||||
reset_layer_prop(ctx, dpy);
|
||||
VideoOverlay::prepare(ctx, list, dpy);
|
||||
ctx->mVidOv[dpy]->prepare(ctx, list);
|
||||
ctx->mFBUpdate[dpy]->prepare(ctx, list);
|
||||
ctx->mLayerCache[dpy]->updateLayerCache(list);
|
||||
if(ctx->mCopyBit[dpy])
|
||||
@@ -188,6 +189,7 @@ static int hwc_prepare(hwc_composer_device_1 *dev, size_t numDisplays,
|
||||
reset(ctx, numDisplays, displays);
|
||||
|
||||
ctx->mOverlay->configBegin();
|
||||
ctx->mRotMgr->configBegin();
|
||||
|
||||
for (int32_t i = numDisplays; i >= 0; i--) {
|
||||
hwc_display_contents_1_t *list = displays[i];
|
||||
@@ -205,6 +207,8 @@ static int hwc_prepare(hwc_composer_device_1 *dev, size_t numDisplays,
|
||||
}
|
||||
|
||||
ctx->mOverlay->configDone();
|
||||
ctx->mRotMgr->configDone();
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -250,6 +254,7 @@ static int hwc_blank(struct hwc_composer_device_1* dev, int dpy, int blank)
|
||||
if(blank) {
|
||||
ctx->mOverlay->configBegin();
|
||||
ctx->mOverlay->configDone();
|
||||
ctx->mRotMgr->clear();
|
||||
ret = ioctl(m->framebuffer->fd, FBIOBLANK, FB_BLANK_POWERDOWN);
|
||||
|
||||
if(ctx->dpyAttr[HWC_DISPLAY_VIRTUAL].connected == true) {
|
||||
@@ -344,12 +349,12 @@ static int hwc_set_primary(hwc_context_t *ctx, hwc_display_contents_1_t* list) {
|
||||
copybitDone = ctx->mCopyBit[dpy]->draw(ctx, list, dpy, &fd);
|
||||
if(list->numHwLayers > 1)
|
||||
hwc_sync(ctx, list, dpy, fd);
|
||||
if (!VideoOverlay::draw(ctx, list, dpy)) {
|
||||
ALOGE("%s: VideoOverlay::draw fail!", __FUNCTION__);
|
||||
if (!ctx->mVidOv[dpy]->draw(ctx, list)) {
|
||||
ALOGE("%s: VideoOverlay draw failed", __FUNCTION__);
|
||||
ret = -1;
|
||||
}
|
||||
if (!ctx->mMDPComp->draw(ctx, list)) {
|
||||
ALOGE("%s: MDPComp::draw fail!", __FUNCTION__);
|
||||
ALOGE("%s: MDPComp draw failed", __FUNCTION__);
|
||||
ret = -1;
|
||||
}
|
||||
|
||||
@@ -365,7 +370,7 @@ static int hwc_set_primary(hwc_context_t *ctx, hwc_display_contents_1_t* list) {
|
||||
if(!(fbLayer->flags & HWC_SKIP_LAYER) &&
|
||||
(list->numHwLayers > 1)) {
|
||||
if (!ctx->mFBUpdate[dpy]->draw(ctx, hnd)) {
|
||||
ALOGE("%s: FBUpdate::draw fail!", __FUNCTION__);
|
||||
ALOGE("%s: FBUpdate draw failed", __FUNCTION__);
|
||||
ret = -1;
|
||||
}
|
||||
}
|
||||
@@ -400,7 +405,7 @@ static int hwc_set_external(hwc_context_t *ctx,
|
||||
if(list->numHwLayers > 1)
|
||||
hwc_sync(ctx, list, dpy, fd);
|
||||
|
||||
if (!VideoOverlay::draw(ctx, list, dpy)) {
|
||||
if (!ctx->mVidOv[dpy]->draw(ctx, list)) {
|
||||
ALOGE("%s: VideoOverlay::draw fail!", __FUNCTION__);
|
||||
ret = -1;
|
||||
}
|
||||
@@ -549,6 +554,9 @@ void hwc_dump(struct hwc_composer_device_1* dev, char *buff, int buff_len)
|
||||
char ovDump[2048] = {'\0'};
|
||||
ctx->mOverlay->getDump(ovDump, 2048);
|
||||
dumpsys_log(aBuf, ovDump);
|
||||
ovDump[0] = '\0';
|
||||
ctx->mRotMgr->getDump(ovDump, 2048);
|
||||
dumpsys_log(aBuf, ovDump);
|
||||
strlcpy(buff, aBuf.string(), buff_len);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user