Merge "fix [3176642] Camera preview turns completely black for multiple toggles between camera and camcorder app"

This commit is contained in:
Mathias Agopian 2010-12-14 15:51:41 -08:00 committed by Android (Google) Code Review
commit fb88981051
1 changed files with 21 additions and 1 deletions

View File

@ -83,8 +83,28 @@ status_t Layer::setToken(const sp<UserClient>& userClient,
sharedClient, token, mBufferManager.getDefaultBufferCount(),
getIdentity());
status_t err = mUserClientRef.setToken(userClient, lcblk, token);
sp<UserClient> ourClient(mUserClientRef.getClient());
/*
* Here it is guaranteed that userClient != ourClient
* (see UserClient::getTokenForSurface()).
*
* We release the token used by this surface in ourClient below.
* This should be safe to do so now, since this layer won't be attached
* to this client, it should be okay to reuse that id.
*
* If this causes problems, an other solution would be to keep a list
* of all the {UserClient, token} ever used and release them when the
* Layer is destroyed.
*
*/
if (ourClient != 0) {
ourClient->detachLayer(this);
}
status_t err = mUserClientRef.setToken(userClient, lcblk, token);
LOGE_IF(err != NO_ERROR,
"ClientRef::setToken(%p, %p, %u) failed",
userClient.get(), lcblk.get(), token);