SurfaceFlinger: use async mode for video & cam
This change makes SurfaceFlinger's SurfaceTexture objects default to async mode whenever a camera or video decoder connects. This behavior can be disabled by #defining NEVER_DEFAULT_TO_ASYNC_MODE. Change-Id: I8965951d1775915da180e4af298dd7af3afafecc
This commit is contained in:
parent
8d944d254b
commit
cb6c755234
@ -22,7 +22,7 @@ ifeq ($(TARGET_BOARD_PLATFORM), omap3)
|
|||||||
LOCAL_CFLAGS += -DNO_RGBX_8888
|
LOCAL_CFLAGS += -DNO_RGBX_8888
|
||||||
endif
|
endif
|
||||||
ifeq ($(TARGET_BOARD_PLATFORM), s5pc110)
|
ifeq ($(TARGET_BOARD_PLATFORM), s5pc110)
|
||||||
LOCAL_CFLAGS += -DHAS_CONTEXT_PRIORITY
|
LOCAL_CFLAGS += -DHAS_CONTEXT_PRIORITY -DNEVER_DEFAULT_TO_ASYNC_MODE
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
|
||||||
|
@ -86,6 +86,32 @@ status_t SurfaceTextureLayer::dequeueBuffer(int *buf,
|
|||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
status_t SurfaceTextureLayer::connect(int api) {
|
||||||
|
status_t err = SurfaceTexture::connect(api);
|
||||||
|
if (err == NO_ERROR) {
|
||||||
|
switch(api) {
|
||||||
|
case NATIVE_WINDOW_API_MEDIA:
|
||||||
|
case NATIVE_WINDOW_API_CAMERA:
|
||||||
|
// Camera preview and videos are rate-limited on the producer
|
||||||
|
// side. If enabled for this build, we use async mode to always
|
||||||
|
// show the most recent frame at the cost of requiring an
|
||||||
|
// additional buffer.
|
||||||
|
#ifndef NEVER_DEFAULT_TO_ASYNC_MODE
|
||||||
|
err = setSynchronousMode(false);
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
// fall through to set synchronous mode when not defaulting to
|
||||||
|
// async mode.
|
||||||
|
deafult:
|
||||||
|
err = setSynchronousMode(true);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (err != NO_ERROR) {
|
||||||
|
disconnect(api);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
}; // namespace android
|
}; // namespace android
|
||||||
|
@ -50,6 +50,8 @@ protected:
|
|||||||
|
|
||||||
virtual status_t dequeueBuffer(int *buf, uint32_t w, uint32_t h,
|
virtual status_t dequeueBuffer(int *buf, uint32_t w, uint32_t h,
|
||||||
uint32_t format, uint32_t usage);
|
uint32_t format, uint32_t usage);
|
||||||
|
|
||||||
|
virtual status_t connect(int api);
|
||||||
};
|
};
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
|
Loading…
Reference in New Issue
Block a user