am 62884505
: Merge "Reset ANativeWindow crop on buffer geometry changes." into honeycomb
* commit '628845056282a0c5b1a212ce5aeeaac092b91ec8': Reset ANativeWindow crop on buffer geometry changes.
This commit is contained in:
@ -315,6 +315,8 @@ static inline int native_window_set_buffer_count(
|
|||||||
* If all parameters are 0, the normal behavior is restored. That is,
|
* If all parameters are 0, the normal behavior is restored. That is,
|
||||||
* dequeued buffers following this call will be sized to the window's size.
|
* dequeued buffers following this call will be sized to the window's size.
|
||||||
*
|
*
|
||||||
|
* Calling this function will reset the window crop to a NULL value, which
|
||||||
|
* disables cropping of the buffers.
|
||||||
*/
|
*/
|
||||||
static inline int native_window_set_buffers_geometry(
|
static inline int native_window_set_buffers_geometry(
|
||||||
ANativeWindow* window,
|
ANativeWindow* window,
|
||||||
|
@ -238,13 +238,15 @@ int SurfaceTextureClient::setCrop(Rect const* rect)
|
|||||||
LOGV("SurfaceTextureClient::setCrop");
|
LOGV("SurfaceTextureClient::setCrop");
|
||||||
Mutex::Autolock lock(mMutex);
|
Mutex::Autolock lock(mMutex);
|
||||||
|
|
||||||
// empty/invalid rects are not allowed
|
Rect realRect;
|
||||||
if (rect->isEmpty())
|
if (rect == NULL || rect->isEmpty()) {
|
||||||
return BAD_VALUE;
|
realRect = Rect(0, 0);
|
||||||
|
} else {
|
||||||
|
realRect = *rect;
|
||||||
|
}
|
||||||
|
|
||||||
status_t err = mSurfaceTexture->setCrop(*rect);
|
status_t err = mSurfaceTexture->setCrop(*rect);
|
||||||
LOGE_IF(err, "ISurfaceTexture::setCrop(...) returned %s",
|
LOGE_IF(err, "ISurfaceTexture::setCrop(...) returned %s", strerror(-err));
|
||||||
strerror(-err));
|
|
||||||
|
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
@ -280,7 +282,10 @@ int SurfaceTextureClient::setBuffersGeometry(int w, int h, int format)
|
|||||||
mReqHeight = h;
|
mReqHeight = h;
|
||||||
mReqFormat = format;
|
mReqFormat = format;
|
||||||
|
|
||||||
return NO_ERROR;
|
status_t err = mSurfaceTexture->setCrop(Rect(0, 0));
|
||||||
|
LOGE_IF(err, "ISurfaceTexture::setCrop(...) returned %s", strerror(-err));
|
||||||
|
|
||||||
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
int SurfaceTextureClient::setBuffersTransform(int transform)
|
int SurfaceTextureClient::setBuffersTransform(int transform)
|
||||||
|
@ -827,13 +827,15 @@ int Surface::disconnect(int api)
|
|||||||
|
|
||||||
int Surface::crop(Rect const* rect)
|
int Surface::crop(Rect const* rect)
|
||||||
{
|
{
|
||||||
// empty/invalid rects are not allowed
|
|
||||||
if (rect->isEmpty())
|
|
||||||
return BAD_VALUE;
|
|
||||||
|
|
||||||
Mutex::Autolock _l(mSurfaceLock);
|
Mutex::Autolock _l(mSurfaceLock);
|
||||||
// TODO: validate rect size
|
// TODO: validate rect size
|
||||||
mNextBufferCrop = *rect;
|
|
||||||
|
if (rect == NULL || rect->isEmpty()) {
|
||||||
|
mNextBufferCrop = Rect(0,0);
|
||||||
|
} else {
|
||||||
|
mNextBufferCrop = *rect;
|
||||||
|
}
|
||||||
|
|
||||||
return NO_ERROR;
|
return NO_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -884,6 +886,9 @@ int Surface::setBuffersGeometry(int w, int h, int format)
|
|||||||
// EGLConfig validation.
|
// EGLConfig validation.
|
||||||
mFormat = format;
|
mFormat = format;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mNextBufferCrop = Rect(0,0);
|
||||||
|
|
||||||
return NO_ERROR;
|
return NO_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -498,11 +498,9 @@ void LayerBase::drawWithOpenGL(const Region& clip, const Texture& texture) const
|
|||||||
}
|
}
|
||||||
|
|
||||||
void LayerBase::setBufferCrop(const Rect& crop) {
|
void LayerBase::setBufferCrop(const Rect& crop) {
|
||||||
if (!crop.isEmpty()) {
|
if (mBufferCrop != crop) {
|
||||||
if (mBufferCrop != crop) {
|
mBufferCrop = crop;
|
||||||
mBufferCrop = crop;
|
mFlinger->invalidateHwcGeometry();
|
||||||
mFlinger->invalidateHwcGeometry();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user