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

Commit 144fb0bb authored by Mathias Agopian's avatar Mathias Agopian Committed by Android Git Automerger
Browse files

am d01767f8: Merge change I56779290 into eclair

Merge commit 'd01767f8b7038108f9125cd2122b117db9919824' into eclair-mr2

* commit 'd01767f8b7038108f9125cd2122b117db9919824':
  fix[2222341] Soft reset while going back from camcorder settings
parents 5d0024b3 bd5a0027
Loading
Loading
Loading
Loading
+36 −21
Original line number Original line Diff line number Diff line
@@ -33,14 +33,13 @@
#include "SurfaceFlinger.h"
#include "SurfaceFlinger.h"
#include "DisplayHardware/DisplayHardware.h"
#include "DisplayHardware/DisplayHardware.h"


#include "gralloc_priv.h"   // needed for msm / copybit

namespace android {
namespace android {


// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------


const uint32_t LayerBuffer::typeInfo = LayerBaseClient::typeInfo | 0x20;
const uint32_t LayerBuffer::typeInfo = LayerBaseClient::typeInfo | 0x20;
const char* const LayerBuffer::typeID = "LayerBuffer";
const char* const LayerBuffer::typeID = "LayerBuffer";
gralloc_module_t const* LayerBuffer::sGrallocModule = 0;


// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------


@@ -60,6 +59,16 @@ void LayerBuffer::onFirstRef()
    LayerBaseClient::onFirstRef();
    LayerBaseClient::onFirstRef();
    mSurface = new SurfaceLayerBuffer(mFlinger, clientIndex(),
    mSurface = new SurfaceLayerBuffer(mFlinger, clientIndex(),
            const_cast<LayerBuffer *>(this));
            const_cast<LayerBuffer *>(this));

    hw_module_t const* module = (hw_module_t const*)sGrallocModule;
    if (!module) {
        // NOTE: technically there is a race here, but it shouldn't
        // cause any problem since hw_get_module() always returns
        // the same value.
        if (hw_get_module(GRALLOC_HARDWARE_MODULE_ID, &module) == 0) {
            sGrallocModule = (gralloc_module_t const *)module;
        }
    }
}
}


sp<LayerBaseClient::Surface> LayerBuffer::createSurface() const
sp<LayerBaseClient::Surface> LayerBuffer::createSurface() const
@@ -243,7 +252,17 @@ LayerBuffer::Buffer::Buffer(const ISurface::BufferHeap& buffers, ssize_t offset)
    : mBufferHeap(buffers)
    : mBufferHeap(buffers)
{
{
    NativeBuffer& src(mNativeBuffer);
    NativeBuffer& src(mNativeBuffer);
    src.img.handle = 0;

    gralloc_module_t const * module = LayerBuffer::getGrallocModule();
    if (module && module->perform) {
        int err = module->perform(module,
                GRALLOC_MODULE_PERFORM_CREATE_HANDLE_FROM_BUFFER,
                buffers.heap->heapID(), buffers.heap->getSize(),
                offset, buffers.heap->base(),
                &src.img.handle);


        if (err == NO_ERROR) {
            src.crop.l = 0;
            src.crop.l = 0;
            src.crop.t = 0;
            src.crop.t = 0;
            src.crop.r = buffers.w;
            src.crop.r = buffers.w;
@@ -253,20 +272,16 @@ LayerBuffer::Buffer::Buffer(const ISurface::BufferHeap& buffers, ssize_t offset)
            src.img.h       = buffers.ver_stride ?: buffers.h;
            src.img.h       = buffers.ver_stride ?: buffers.h;
            src.img.format  = buffers.format;
            src.img.format  = buffers.format;
            src.img.base    = (void*)(intptr_t(buffers.heap->base()) + offset);
            src.img.base    = (void*)(intptr_t(buffers.heap->base()) + offset);

        }
    // FIXME: gross hack, we should never access private_handle_t from here,
    }
    // but this is needed by msm drivers
    private_handle_t* hnd = new private_handle_t(
            buffers.heap->heapID(), buffers.heap->getSize(), 0);
    hnd->offset = offset;
    src.img.handle = hnd;
}
}


LayerBuffer::Buffer::~Buffer()
LayerBuffer::Buffer::~Buffer()
{
{
    NativeBuffer& src(mNativeBuffer);
    NativeBuffer& src(mNativeBuffer);
    if (src.img.handle)
    if (src.img.handle) {
        delete (private_handle_t*)src.img.handle;
        native_handle_delete(src.img.handle);
    }
}
}


// ============================================================================
// ============================================================================
+5 −0
Original line number Original line Diff line number Diff line
@@ -91,6 +91,11 @@ private:
        copybit_rect_t    crop;
        copybit_rect_t    crop;
    };
    };


    static gralloc_module_t const* sGrallocModule;
    static gralloc_module_t const* getGrallocModule() {
        return sGrallocModule;
    }

    class Buffer : public LightRefBase<Buffer> {
    class Buffer : public LightRefBase<Buffer> {
    public:
    public:
        Buffer(const ISurface::BufferHeap& buffers, ssize_t offset);
        Buffer(const ISurface::BufferHeap& buffers, ssize_t offset);
+1 −1
Original line number Original line Diff line number Diff line
@@ -1677,7 +1677,7 @@ EGLImageKHR eglCreateImageKHR(EGLDisplay dpy, EGLContext ctx, EGLenum target,
        } else {
        } else {
            // In case of success, we need to clear all error flags
            // In case of success, we need to clear all error flags
            // (especially those caused by the implementation that didn't
            // (especially those caused by the implementation that didn't
            // succeed). TODO: we could about this if we knew this was
            // succeed). TODO: we could avoid this if we knew this was
            // a "full" success (all implementation succeeded).
            // a "full" success (all implementation succeeded).
            eglGetError();
            eglGetError();
        }
        }