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
This commit is contained in:
Mathias Agopian
2009-10-30 15:01:57 -07:00
committed by Android Git Automerger
3 changed files with 41 additions and 21 deletions

View File

@@ -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; gralloc_module_t const * module = LayerBuffer::getGrallocModule();
src.crop.t = 0; if (module && module->perform) {
src.crop.r = buffers.w; int err = module->perform(module,
src.crop.b = buffers.h; GRALLOC_MODULE_PERFORM_CREATE_HANDLE_FROM_BUFFER,
buffers.heap->heapID(), buffers.heap->getSize(),
offset, buffers.heap->base(),
&src.img.handle);
src.img.w = buffers.hor_stride ?: buffers.w; if (err == NO_ERROR) {
src.img.h = buffers.ver_stride ?: buffers.h; src.crop.l = 0;
src.img.format = buffers.format; src.crop.t = 0;
src.img.base = (void*)(intptr_t(buffers.heap->base()) + offset); src.crop.r = buffers.w;
src.crop.b = buffers.h;
// FIXME: gross hack, we should never access private_handle_t from here, src.img.w = buffers.hor_stride ?: buffers.w;
// but this is needed by msm drivers src.img.h = buffers.ver_stride ?: buffers.h;
private_handle_t* hnd = new private_handle_t( src.img.format = buffers.format;
buffers.heap->heapID(), buffers.heap->getSize(), 0); src.img.base = (void*)(intptr_t(buffers.heap->base()) + offset);
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);
}
} }
// ============================================================================ // ============================================================================

View File

@@ -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);

View File

@@ -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();
} }