|
|
|
@ -44,6 +44,7 @@ Camera3OutputStream::Camera3OutputStream(int id,
|
|
|
|
|
mUseBufferManager(false),
|
|
|
|
|
mTimestampOffset(timestampOffset),
|
|
|
|
|
mConsumerUsage(0),
|
|
|
|
|
mDropBuffers(false),
|
|
|
|
|
mDequeueBufferLatency(kDequeueLatencyBinSize) {
|
|
|
|
|
|
|
|
|
|
if (mConsumer == NULL) {
|
|
|
|
@ -70,6 +71,7 @@ Camera3OutputStream::Camera3OutputStream(int id,
|
|
|
|
|
mUseBufferManager(false),
|
|
|
|
|
mTimestampOffset(timestampOffset),
|
|
|
|
|
mConsumerUsage(0),
|
|
|
|
|
mDropBuffers(false),
|
|
|
|
|
mDequeueBufferLatency(kDequeueLatencyBinSize) {
|
|
|
|
|
|
|
|
|
|
if (format != HAL_PIXEL_FORMAT_BLOB && format != HAL_PIXEL_FORMAT_RAW_OPAQUE) {
|
|
|
|
@ -100,6 +102,7 @@ Camera3OutputStream::Camera3OutputStream(int id,
|
|
|
|
|
mUseBufferManager(false),
|
|
|
|
|
mTimestampOffset(timestampOffset),
|
|
|
|
|
mConsumerUsage(consumerUsage),
|
|
|
|
|
mDropBuffers(false),
|
|
|
|
|
mDequeueBufferLatency(kDequeueLatencyBinSize) {
|
|
|
|
|
// Deferred consumer only support preview surface format now.
|
|
|
|
|
if (format != HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED) {
|
|
|
|
@ -139,6 +142,7 @@ Camera3OutputStream::Camera3OutputStream(int id, camera3_stream_type_t type,
|
|
|
|
|
mUseBufferManager(false),
|
|
|
|
|
mTimestampOffset(timestampOffset),
|
|
|
|
|
mConsumerUsage(consumerUsage),
|
|
|
|
|
mDropBuffers(false),
|
|
|
|
|
mDequeueBufferLatency(kDequeueLatencyBinSize) {
|
|
|
|
|
|
|
|
|
|
if (setId > CAMERA3_STREAM_SET_ID_INVALID) {
|
|
|
|
@ -227,9 +231,14 @@ status_t Camera3OutputStream::returnBufferCheckedLocked(
|
|
|
|
|
/**
|
|
|
|
|
* Return buffer back to ANativeWindow
|
|
|
|
|
*/
|
|
|
|
|
if (buffer.status == CAMERA3_BUFFER_STATUS_ERROR) {
|
|
|
|
|
if (buffer.status == CAMERA3_BUFFER_STATUS_ERROR || mDropBuffers) {
|
|
|
|
|
// Cancel buffer
|
|
|
|
|
ALOGW("A frame is dropped for stream %d", mId);
|
|
|
|
|
if (mDropBuffers) {
|
|
|
|
|
ALOGV("%s: Dropping a frame for stream %d.", __FUNCTION__, mId);
|
|
|
|
|
} else {
|
|
|
|
|
ALOGW("%s: A frame is dropped for stream %d due to buffer error.", __FUNCTION__, mId);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
res = currentConsumer->cancelBuffer(currentConsumer.get(),
|
|
|
|
|
anwBuffer,
|
|
|
|
|
anwReleaseFence);
|
|
|
|
@ -785,6 +794,12 @@ status_t Camera3OutputStream::detachBufferLocked(sp<GraphicBuffer>* buffer, int*
|
|
|
|
|
return res;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
status_t Camera3OutputStream::dropBuffers(bool dropping) {
|
|
|
|
|
Mutex::Autolock l(mLock);
|
|
|
|
|
mDropBuffers = dropping;
|
|
|
|
|
return OK;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
status_t Camera3OutputStream::notifyBufferReleased(ANativeWindowBuffer* /*anwBuffer*/) {
|
|
|
|
|
return OK;
|
|
|
|
|
}
|
|
|
|
|