Merge change I56779290 into eclair
* changes: fix[2222341] Soft reset while going back from camcorder settings
This commit is contained in:
@@ -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,30 +252,36 @@ LayerBuffer::Buffer::Buffer(const ISurface::BufferHeap& buffers, ssize_t offset)
|
|||||||
: mBufferHeap(buffers)
|
: mBufferHeap(buffers)
|
||||||
{
|
{
|
||||||
NativeBuffer& src(mNativeBuffer);
|
NativeBuffer& src(mNativeBuffer);
|
||||||
|
src.img.handle = 0;
|
||||||
src.crop.l = 0;
|
|
||||||
src.crop.t = 0;
|
|
||||||
src.crop.r = buffers.w;
|
|
||||||
src.crop.b = buffers.h;
|
|
||||||
|
|
||||||
src.img.w = buffers.hor_stride ?: buffers.w;
|
|
||||||
src.img.h = buffers.ver_stride ?: buffers.h;
|
|
||||||
src.img.format = buffers.format;
|
|
||||||
src.img.base = (void*)(intptr_t(buffers.heap->base()) + offset);
|
|
||||||
|
|
||||||
// FIXME: gross hack, we should never access private_handle_t from here,
|
gralloc_module_t const * module = LayerBuffer::getGrallocModule();
|
||||||
// but this is needed by msm drivers
|
if (module && module->perform) {
|
||||||
private_handle_t* hnd = new private_handle_t(
|
int err = module->perform(module,
|
||||||
buffers.heap->heapID(), buffers.heap->getSize(), 0);
|
GRALLOC_MODULE_PERFORM_CREATE_HANDLE_FROM_BUFFER,
|
||||||
hnd->offset = offset;
|
buffers.heap->heapID(), buffers.heap->getSize(),
|
||||||
src.img.handle = hnd;
|
offset, buffers.heap->base(),
|
||||||
|
&src.img.handle);
|
||||||
|
|
||||||
|
if (err == NO_ERROR) {
|
||||||
|
src.crop.l = 0;
|
||||||
|
src.crop.t = 0;
|
||||||
|
src.crop.r = buffers.w;
|
||||||
|
src.crop.b = buffers.h;
|
||||||
|
|
||||||
|
src.img.w = buffers.hor_stride ?: buffers.w;
|
||||||
|
src.img.h = buffers.ver_stride ?: buffers.h;
|
||||||
|
src.img.format = buffers.format;
|
||||||
|
src.img.base = (void*)(intptr_t(buffers.heap->base()) + offset);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// ============================================================================
|
// ============================================================================
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user