diff options
author | Mathias Agopian <mathias@google.com> | 2010-01-20 13:24:14 -0800 |
---|---|---|
committer | Mathias Agopian <mathias@google.com> | 2010-01-20 13:24:14 -0800 |
commit | 1faed6608655409cdd9c703cdbceedc03cb40bde (patch) | |
tree | d1322035bc57f859960ccefd2a4075a96ff32986 /libs/surfaceflinger | |
parent | 084e7c4ee8d4c6d54561347e2fe76bcdbd9f19da (diff) | |
download | frameworks_native-1faed6608655409cdd9c703cdbceedc03cb40bde.zip frameworks_native-1faed6608655409cdd9c703cdbceedc03cb40bde.tar.gz frameworks_native-1faed6608655409cdd9c703cdbceedc03cb40bde.tar.bz2 |
fix [2363506] [Sapphire] Video playback broken
don't try to use copybit for incompatible buffers
Diffstat (limited to 'libs/surfaceflinger')
-rw-r--r-- | libs/surfaceflinger/LayerBuffer.cpp | 10 | ||||
-rw-r--r-- | libs/surfaceflinger/LayerBuffer.h | 4 |
2 files changed, 8 insertions, 6 deletions
diff --git a/libs/surfaceflinger/LayerBuffer.cpp b/libs/surfaceflinger/LayerBuffer.cpp index 2ff6167..dbcb367 100644 --- a/libs/surfaceflinger/LayerBuffer.cpp +++ b/libs/surfaceflinger/LayerBuffer.cpp @@ -261,7 +261,7 @@ sp<OverlayRef> LayerBuffer::SurfaceLayerBuffer::createOverlay( // ============================================================================ LayerBuffer::Buffer::Buffer(const ISurface::BufferHeap& buffers, ssize_t offset) - : mBufferHeap(buffers) + : mBufferHeap(buffers), mSupportsCopybit(false) { NativeBuffer& src(mNativeBuffer); src.crop.l = 0; @@ -283,10 +283,8 @@ LayerBuffer::Buffer::Buffer(const ISurface::BufferHeap& buffers, ssize_t offset) offset, buffers.heap->base(), &src.img.handle); - LOGE_IF(err, "CREATE_HANDLE_FROM_BUFFER (heapId=%d, size=%d, " - "offset=%ld, base=%p) failed (%s)", - buffers.heap->heapID(), buffers.heap->getSize(), - offset, buffers.heap->base(), strerror(-err)); + // we can fail here is the passed buffer is purely software + mSupportsCopybit = (err == NO_ERROR); } } @@ -453,7 +451,7 @@ void LayerBuffer::BufferSource::onDraw(const Region& clip) const #if defined(EGL_ANDROID_image_native_buffer) if (mLayer.mFlags & DisplayHardware::DIRECT_TEXTURE) { copybit_device_t* copybit = mLayer.mBlitEngine; - if (copybit) { + if (copybit && ourBuffer->supportsCopybit()) { // create our EGLImageKHR the first time err = initTempBuffer(); if (err == NO_ERROR) { diff --git a/libs/surfaceflinger/LayerBuffer.h b/libs/surfaceflinger/LayerBuffer.h index 2ca63ac..90f83c4 100644 --- a/libs/surfaceflinger/LayerBuffer.h +++ b/libs/surfaceflinger/LayerBuffer.h @@ -99,6 +99,9 @@ private: class Buffer : public LightRefBase<Buffer> { public: Buffer(const ISurface::BufferHeap& buffers, ssize_t offset); + inline bool supportsCopybit() const { + return mSupportsCopybit; + } inline status_t getStatus() const { return mBufferHeap.heap!=0 ? NO_ERROR : NO_INIT; } @@ -113,6 +116,7 @@ private: private: ISurface::BufferHeap mBufferHeap; NativeBuffer mNativeBuffer; + bool mSupportsCopybit; }; class BufferSource : public Source { |