make sure to re-initialize SurfaceTexture to its default state on disconnect

this caused problems where the NavigationBar would disapear or be
drawn in the wrong orientation.

Change-Id: I083c41338db83a4afd14f427caec2f31c180d734
This commit is contained in:
Mathias Agopian 2011-08-25 17:03:30 -07:00
parent b0610335d7
commit 70e3f81d0f
2 changed files with 13 additions and 3 deletions

View File

@ -608,6 +608,9 @@ status_t SurfaceTexture::disconnect(int api) {
if (mConnectedApi == api) {
drainQueueAndFreeBuffersLocked();
mConnectedApi = NO_CONNECTED_API;
mNextCrop.makeInvalid();
mNextScalingMode = NATIVE_WINDOW_SCALING_MODE_FREEZE;
mNextTransform = 0;
mDequeueCondition.signal();
} else {
LOGE("disconnect: connected to another api (cur=%d, req=%d)",
@ -1022,7 +1025,7 @@ void SurfaceTexture::dump(String8& result, const char* prefix,
mCurrentCrop.top, mCurrentCrop.right, mCurrentCrop.bottom,
mCurrentTransform, mCurrentTexture,
prefix, mNextCrop.left, mNextCrop.top, mNextCrop.right, mNextCrop.bottom,
mCurrentTransform, fifoSize, fifo.string()
mNextTransform, fifoSize, fifo.string()
);
result.append(buffer);

View File

@ -407,9 +407,16 @@ int SurfaceTextureClient::disconnect(int api) {
LOGV("SurfaceTextureClient::disconnect");
Mutex::Autolock lock(mMutex);
int err = mSurfaceTexture->disconnect(api);
if (!err && api == NATIVE_WINDOW_API_CPU) {
if (!err) {
freeAllBuffers();
mReqFormat = 0;
mReqWidth = 0;
mReqHeight = 0;
mReqUsage = 0;
if (api == NATIVE_WINDOW_API_CPU) {
mConnectedToCpu = false;
}
}
return err;
}