BufferQueue returns proper code on acquire

Also removed unnecessary debug messages from
SurfaceTextureClient.

Change-Id: I291897a44170142f9d42a007b008823fad4683e0
This commit is contained in:
Daniel Lam 2012-04-09 22:51:52 -07:00
parent abe61bfda4
commit fbcda930dd
4 changed files with 9 additions and 23 deletions

View File

@ -38,7 +38,7 @@ public:
enum { NUM_BUFFER_SLOTS = 32 }; enum { NUM_BUFFER_SLOTS = 32 };
enum { NO_CONNECTED_API = 0 }; enum { NO_CONNECTED_API = 0 };
enum { INVALID_BUFFER_SLOT = -1 }; enum { INVALID_BUFFER_SLOT = -1 };
enum { STALE_BUFFER_SLOT = 1 }; enum { STALE_BUFFER_SLOT = 1, NO_BUFFER_AVAILABLE };
// ConsumerListener is the interface through which the BufferQueue notifies // ConsumerListener is the interface through which the BufferQueue notifies
// the consumer of events that the consumer may wish to react to. Because // the consumer of events that the consumer may wish to react to. Because

View File

@ -851,8 +851,7 @@ status_t BufferQueue::acquireBuffer(BufferItem *buffer) {
ATRACE_INT(mConsumerName.string(), mQueue.size()); ATRACE_INT(mConsumerName.string(), mQueue.size());
} else { } else {
// should be a better return code? return NO_BUFFER_AVAILABLE;
return -EINVAL;
} }
return OK; return OK;

View File

@ -211,7 +211,8 @@ status_t SurfaceTexture::updateTexImage() {
// In asynchronous mode the list is guaranteed to be one buffer // In asynchronous mode the list is guaranteed to be one buffer
// deep, while in synchronous mode we use the oldest buffer. // deep, while in synchronous mode we use the oldest buffer.
if (mBufferQueue->acquireBuffer(&item) == NO_ERROR) { err = mBufferQueue->acquireBuffer(&item);
if (err == NO_ERROR) {
int buf = item.mBuf; int buf = item.mBuf;
// This buffer was newly allocated, so we need to clean up on our side // This buffer was newly allocated, so we need to clean up on our side
if (item.mGraphicBuffer != NULL) { if (item.mGraphicBuffer != NULL) {
@ -247,7 +248,6 @@ status_t SurfaceTexture::updateTexImage() {
glBindTexture(mTexTarget, mTexName); glBindTexture(mTexTarget, mTexName);
glEGLImageTargetTexture2DOES(mTexTarget, (GLeglImageOES)image); glEGLImageTargetTexture2DOES(mTexTarget, (GLeglImageOES)image);
status_t err = OK;
while ((error = glGetError()) != GL_NO_ERROR) { while ((error = glGetError()) != GL_NO_ERROR) {
ST_LOGE("updateTexImage: error binding external texture image %p " ST_LOGE("updateTexImage: error binding external texture image %p "
"(slot %d): %#04x", image, buf, error); "(slot %d): %#04x", image, buf, error);
@ -292,9 +292,13 @@ status_t SurfaceTexture::updateTexImage() {
mCurrentScalingMode = item.mScalingMode; mCurrentScalingMode = item.mScalingMode;
mCurrentTimestamp = item.mTimestamp; mCurrentTimestamp = item.mTimestamp;
computeCurrentTransformMatrix(); computeCurrentTransformMatrix();
} else { } else {
if (err < 0) {
ALOGE("updateTexImage failed on acquire %d", err);
}
// We always bind the texture even if we don't update its contents. // We always bind the texture even if we don't update its contents.
glBindTexture(mTexTarget, mTexName); glBindTexture(mTexTarget, mTexName);
return OK;
} }
return err; return err;

View File

@ -200,23 +200,6 @@ int SurfaceTextureClient::getSlotFromBufferLocked(
android_native_buffer_t* buffer) const { android_native_buffer_t* buffer) const {
bool dumpedState = false; bool dumpedState = false;
for (int i = 0; i < NUM_BUFFER_SLOTS; i++) { for (int i = 0; i < NUM_BUFFER_SLOTS; i++) {
// XXX: Dump the slots whenever we hit a NULL entry while searching for
// a buffer.
if (mSlots[i] == NULL) {
if (!dumpedState) {
ALOGD("getSlotFromBufferLocked: encountered NULL buffer in slot %d "
"looking for buffer %p", i, buffer->handle);
for (int j = 0; j < NUM_BUFFER_SLOTS; j++) {
if (mSlots[j] == NULL) {
ALOGD("getSlotFromBufferLocked: %02d: NULL", j);
} else {
ALOGD("getSlotFromBufferLocked: %02d: %p", j, mSlots[j]->handle);
}
}
dumpedState = true;
}
}
if (mSlots[i] != NULL && mSlots[i]->handle == buffer->handle) { if (mSlots[i] != NULL && mSlots[i]->handle == buffer->handle) {
return i; return i;
} }