diff options
| -rw-r--r-- | include/gui/SurfaceTexture.h | 7 | ||||
| -rw-r--r-- | libs/gui/SurfaceTexture.cpp | 18 |
2 files changed, 23 insertions, 2 deletions
diff --git a/include/gui/SurfaceTexture.h b/include/gui/SurfaceTexture.h index ff92e08589..cbc15d81b9 100644 --- a/include/gui/SurfaceTexture.h +++ b/include/gui/SurfaceTexture.h @@ -113,8 +113,11 @@ private: int mBufferCount; // mCurrentTexture is the buffer slot index of the buffer that is currently - // bound to the OpenGL texture. A value of INVALID_BUFFER_SLOT, indicating - // that no buffer is currently bound to the texture. + // bound to the OpenGL texture. It is initialized to INVALID_BUFFER_SLOT, + // indicating that no buffer slot is currently bound to the texture. Note, + // however, that a value of INVALID_BUFFER_SLOT does not necessarily mean + // that no buffer is bound to the texture. A call to setBufferCount will + // reset mCurrentTexture to INVALID_BUFFER_SLOT. int mCurrentTexture; // mLastQueued is the buffer slot index of the most recently enqueued buffer. diff --git a/libs/gui/SurfaceTexture.cpp b/libs/gui/SurfaceTexture.cpp index 9579996342..11a48d9894 100644 --- a/libs/gui/SurfaceTexture.cpp +++ b/libs/gui/SurfaceTexture.cpp @@ -15,6 +15,7 @@ */ #define LOG_TAG "SurfaceTexture" +//#define LOG_NDEBUG 0 #define GL_GLEXT_PROTOTYPES #define EGL_EGLEXT_PROTOTYPES @@ -36,21 +37,32 @@ namespace android { SurfaceTexture::SurfaceTexture(GLuint tex) : mBufferCount(MIN_BUFFER_SLOTS), mCurrentTexture(INVALID_BUFFER_SLOT), mLastQueued(INVALID_BUFFER_SLOT), mTexName(tex) { + LOGV("SurfaceTexture::SurfaceTexture"); + for (int i = 0; i < NUM_BUFFER_SLOTS; i++) { + mSlots[i].mEglImage = EGL_NO_IMAGE_KHR; + mSlots[i].mEglDisplay = EGL_NO_DISPLAY; + mSlots[i].mOwnedByClient = false; + } } SurfaceTexture::~SurfaceTexture() { + LOGV("SurfaceTexture::~SurfaceTexture"); freeAllBuffers(); } status_t SurfaceTexture::setBufferCount(int bufferCount) { + LOGV("SurfaceTexture::setBufferCount"); Mutex::Autolock lock(mMutex); freeAllBuffers(); mBufferCount = bufferCount; + mCurrentTexture = INVALID_BUFFER_SLOT; + mLastQueued = INVALID_BUFFER_SLOT; return OK; } sp<GraphicBuffer> SurfaceTexture::requestBuffer(int buf, uint32_t w, uint32_t h, uint32_t format, uint32_t usage) { + LOGV("SurfaceTexture::requestBuffer"); Mutex::Autolock lock(mMutex); if (buf < 0 || mBufferCount <= buf) { LOGE("requestBuffer: slot index out of range [0, %d]: %d", @@ -75,6 +87,7 @@ sp<GraphicBuffer> SurfaceTexture::requestBuffer(int buf, } status_t SurfaceTexture::dequeueBuffer(int *buf) { + LOGV("SurfaceTexture::dequeueBuffer"); Mutex::Autolock lock(mMutex); int found = INVALID_BUFFER_SLOT; for (int i = 0; i < mBufferCount; i++) { @@ -92,6 +105,7 @@ status_t SurfaceTexture::dequeueBuffer(int *buf) { } status_t SurfaceTexture::queueBuffer(int buf) { + LOGV("SurfaceTexture::queueBuffer"); Mutex::Autolock lock(mMutex); if (buf < 0 || mBufferCount <= buf) { LOGE("queueBuffer: slot index out of range [0, %d]: %d", @@ -111,6 +125,7 @@ status_t SurfaceTexture::queueBuffer(int buf) { } void SurfaceTexture::cancelBuffer(int buf) { + LOGV("SurfaceTexture::cancelBuffer"); Mutex::Autolock lock(mMutex); if (buf < 0 || mBufferCount <= buf) { LOGE("cancelBuffer: slot index out of range [0, %d]: %d", mBufferCount, @@ -124,18 +139,21 @@ void SurfaceTexture::cancelBuffer(int buf) { } status_t SurfaceTexture::setCrop(const Rect& reg) { + LOGV("SurfaceTexture::setCrop"); Mutex::Autolock lock(mMutex); // XXX: How should we handle crops? return OK; } status_t SurfaceTexture::setTransform(uint32_t transform) { + LOGV("SurfaceTexture::setTransform"); Mutex::Autolock lock(mMutex); // XXX: How should we handle transforms? return OK; } status_t SurfaceTexture::updateTexImage() { + LOGV("SurfaceTexture::updateTexImage"); Mutex::Autolock lock(mMutex); // We always bind the texture even if we don't update its contents. |