diff options
| author | 2013-07-18 22:10:56 -0700 | |
|---|---|---|
| committer | 2013-07-19 17:38:01 -0700 | |
| commit | 7cdd786fa80cf03551291ae8feca7b77583be1c5 (patch) | |
| tree | b3d03af7ad939e89db944c648fdb18ee349b86a8 /libs/gui/Surface.cpp | |
| parent | a3fbda3cef04d51a35a3eb64b2f744a989800856 (diff) | |
Make ANW.setSwapInterval(0) work again
we can now queue/dequeue a buffer in asynchrnous mode by using the
async parameter to these calls. async mode is only specified
with those calls (it is not modal anymore).
as a consequence it can only be specified when the buffer count
is not overidden, as error is returned otherwise.
Change-Id: Ic63f4f96f671cb9d65c4cecbcc192615e09a8b6b
Diffstat (limited to 'libs/gui/Surface.cpp')
| -rw-r--r-- | libs/gui/Surface.cpp | 12 |
1 files changed, 5 insertions, 7 deletions
diff --git a/libs/gui/Surface.cpp b/libs/gui/Surface.cpp index 0d4449af65..998ea8ac8c 100644 --- a/libs/gui/Surface.cpp +++ b/libs/gui/Surface.cpp @@ -73,6 +73,7 @@ Surface::Surface( mConsumerRunningBehind = false; mConnectedToCpu = false; mProducerControlledByApp = true; + mSwapIntervalZero = false; } Surface::~Surface() { @@ -162,7 +163,6 @@ int Surface::setSwapInterval(int interval) { // EGL specification states: // interval is silently clamped to minimum and maximum implementation // dependent values before being stored. - // Although we don't have to, we apply the same logic here. if (interval < minSwapInterval) interval = minSwapInterval; @@ -170,11 +170,9 @@ int Surface::setSwapInterval(int interval) { if (interval > maxSwapInterval) interval = maxSwapInterval; - // FIXME: re-implement swap-interval - //status_t res = mGraphicBufferProducer->setSynchronousMode(interval ? true : false); - status_t res = NO_ERROR; + mSwapIntervalZero = (interval == 0); - return res; + return NO_ERROR; } int Surface::dequeueBuffer(android_native_buffer_t** buffer, @@ -186,7 +184,7 @@ int Surface::dequeueBuffer(android_native_buffer_t** buffer, int reqW = mReqWidth ? mReqWidth : mUserWidth; int reqH = mReqHeight ? mReqHeight : mUserHeight; sp<Fence> fence; - status_t result = mGraphicBufferProducer->dequeueBuffer(&buf, &fence, + status_t result = mGraphicBufferProducer->dequeueBuffer(&buf, &fence, mSwapIntervalZero, reqW, reqH, mReqFormat, mReqUsage); if (result < 0) { ALOGV("dequeueBuffer: IGraphicBufferProducer::dequeueBuffer(%d, %d, %d, %d)" @@ -282,7 +280,7 @@ int Surface::queueBuffer(android_native_buffer_t* buffer, int fenceFd) { sp<Fence> fence(fenceFd >= 0 ? new Fence(fenceFd) : Fence::NO_FENCE); IGraphicBufferProducer::QueueBufferOutput output; IGraphicBufferProducer::QueueBufferInput input(timestamp, crop, mScalingMode, - mTransform, fence); + mTransform, mSwapIntervalZero, fence); status_t err = mGraphicBufferProducer->queueBuffer(i, input, &output); if (err != OK) { ALOGE("queueBuffer: error queuing buffer to SurfaceTexture, %d", err); |