Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ad0e6f91 authored by Mathias Agopian's avatar Mathias Agopian Committed by Android (Google) Code Review
Browse files

Merge "fix display artifacts in preview screen in timelapse video mode"

parents c245d164 c7f3381c
Loading
Loading
Loading
Loading
+34 −19
Original line number Diff line number Diff line
@@ -212,19 +212,6 @@ void Layer::setGeometry(hwc_layer_t* hwcl)
    } else {
        hwcl->transform = finalTransform;
    }
}

void Layer::setPerFrameData(hwc_layer_t* hwcl) {
    const sp<GraphicBuffer>& buffer(mActiveBuffer);
    if (buffer == NULL) {
        // this can happen if the client never drew into this layer yet,
        // or if we ran out of memory. In that case, don't let
        // HWC handle it.
        hwcl->flags |= HWC_SKIP_LAYER;
        hwcl->handle = NULL;
    } else {
        hwcl->handle = buffer->handle;
    }

    if (isCropped()) {
        hwcl->sourceCrop.left   = mCurrentCrop.left;
@@ -232,6 +219,7 @@ void Layer::setPerFrameData(hwc_layer_t* hwcl) {
        hwcl->sourceCrop.right  = mCurrentCrop.right;
        hwcl->sourceCrop.bottom = mCurrentCrop.bottom;
    } else {
        const sp<GraphicBuffer>& buffer(mActiveBuffer);
        hwcl->sourceCrop.left   = 0;
        hwcl->sourceCrop.top    = 0;
        if (buffer != NULL) {
@@ -244,6 +232,19 @@ void Layer::setPerFrameData(hwc_layer_t* hwcl) {
    }
}

void Layer::setPerFrameData(hwc_layer_t* hwcl) {
    const sp<GraphicBuffer>& buffer(mActiveBuffer);
    if (buffer == NULL) {
        // this can happen if the client never drew into this layer yet,
        // or if we ran out of memory. In that case, don't let
        // HWC handle it.
        hwcl->flags |= HWC_SKIP_LAYER;
        hwcl->handle = NULL;
    } else {
        hwcl->handle = buffer->handle;
    }
}

void Layer::onDraw(const Region& clip) const
{
    if (CC_UNLIKELY(mActiveBuffer == 0)) {
@@ -416,8 +417,7 @@ void Layer::lockPageFlip(bool& recomputeVisibleRegions)
            return;
        }

        mActiveBuffer = mSurfaceTexture->getCurrentBuffer();
        mSurfaceTexture->getTransformMatrix(mTextureMatrix);
        sp<GraphicBuffer> newFrontBuffer(mSurfaceTexture->getCurrentBuffer());

        const Rect crop(mSurfaceTexture->getCurrentCrop());
        const uint32_t transform(mSurfaceTexture->getCurrentTransform());
@@ -432,7 +432,23 @@ void Layer::lockPageFlip(bool& recomputeVisibleRegions)
            mFlinger->invalidateHwcGeometry();
        }

        mCurrentOpacity = getOpacityForFormat(mActiveBuffer->format);
        GLfloat textureMatrix[16];
        mSurfaceTexture->getTransformMatrix(textureMatrix);
        if (memcmp(textureMatrix, mTextureMatrix, sizeof(textureMatrix))) {
            memcpy(mTextureMatrix, textureMatrix, sizeof(textureMatrix));
            mFlinger->invalidateHwcGeometry();
        }

        uint32_t bufWidth  = newFrontBuffer->getWidth();
        uint32_t bufHeight = newFrontBuffer->getHeight();
        if (mActiveBuffer != NULL) {
            if (bufWidth != uint32_t(mActiveBuffer->width) ||
                bufHeight != uint32_t(mActiveBuffer->height)) {
                mFlinger->invalidateHwcGeometry();
            }
        }

        mCurrentOpacity = getOpacityForFormat(newFrontBuffer->format);
        if (oldOpacity != isOpaque()) {
            recomputeVisibleRegions = true;
        }
@@ -446,15 +462,14 @@ void Layer::lockPageFlip(bool& recomputeVisibleRegions)
        // FIXME: mPostedDirtyRegion = dirty & bounds
        mPostedDirtyRegion.set(front.w, front.h);

        // update active buffer
        mActiveBuffer = newFrontBuffer;

        if ((front.w != front.requested_w) ||
            (front.h != front.requested_h))
        {
            // check that we received a buffer of the right size
            // (Take the buffer's orientation into account)
            sp<GraphicBuffer> newFrontBuffer(mActiveBuffer);
            uint32_t bufWidth  = newFrontBuffer->getWidth();
            uint32_t bufHeight = newFrontBuffer->getHeight();
            if (mCurrentTransform & Transform::ROT_90) {
                swap(bufWidth, bufHeight);
            }
+5 −4
Original line number Diff line number Diff line
@@ -335,17 +335,18 @@ void LayerBase::setGeometry(hwc_layer_t* hwcl)
            reinterpret_cast<hwc_rect_t const *>(
                    visibleRegionScreen.getArray(
                            &hwcl->visibleRegionScreen.numRects));
}

void LayerBase::setPerFrameData(hwc_layer_t* hwcl) {
    hwcl->compositionType = HWC_FRAMEBUFFER;
    hwcl->handle = NULL;
    hwcl->sourceCrop.left   = 0;
    hwcl->sourceCrop.top    = 0;
    hwcl->sourceCrop.right  = mTransformedBounds.width();
    hwcl->sourceCrop.bottom = mTransformedBounds.height();
}

void LayerBase::setPerFrameData(hwc_layer_t* hwcl) {
    hwcl->compositionType = HWC_FRAMEBUFFER;
    hwcl->handle = NULL;
}

void LayerBase::setFiltering(bool filtering)
{
    mFiltering = filtering;