Loading services/camera/libcameraservice/device3/Camera3OutputStream.cpp +4 −6 Original line number Diff line number Diff line Loading @@ -237,12 +237,14 @@ status_t Camera3OutputStream::returnBufferCheckedLocked( /** * Return buffer back to ANativeWindow */ if (buffer.status == CAMERA3_BUFFER_STATUS_ERROR || mDropBuffers) { if (buffer.status == CAMERA3_BUFFER_STATUS_ERROR || mDropBuffers || timestamp == 0) { // Cancel buffer if (mDropBuffers) { ALOGV("%s: Dropping a frame for stream %d.", __FUNCTION__, mId); } else { } else if (buffer.status == CAMERA3_BUFFER_STATUS_ERROR) { ALOGW("%s: A frame is dropped for stream %d due to buffer error.", __FUNCTION__, mId); } else { ALOGE("%s: Stream %d: timestamp shouldn't be 0", __FUNCTION__, mId); } res = currentConsumer->cancelBuffer(currentConsumer.get(), Loading @@ -268,10 +270,6 @@ status_t Camera3OutputStream::returnBufferCheckedLocked( mTraceFirstBuffer = false; } if (timestamp == 0) { ALOGW("%s: Stream %d: timestamp shouldn't be 0", __FUNCTION__, mId); } /* Certain consumers (such as AudioSource or HardwareComposer) use * MONOTONIC time, causing time misalignment if camera timestamp is * in BOOTTIME. Do the conversion if necessary. */ Loading services/camera/libcameraservice/device3/Camera3Stream.cpp +6 −3 Original line number Diff line number Diff line Loading @@ -662,9 +662,12 @@ status_t Camera3Stream::returnBuffer(const camera3_stream_buffer &buffer, removeOutstandingBuffer(buffer); // Buffer status may be changed, so make a copy of the stream_buffer struct. camera3_stream_buffer b = buffer; if (timestampIncreasing && timestamp != 0 && timestamp <= mLastTimestamp) { ALOGW("%s: Stream %d: timestamp %" PRId64 " is not increasing. Prev timestamp %" PRId64, ALOGE("%s: Stream %d: timestamp %" PRId64 " is not increasing. Prev timestamp %" PRId64, __FUNCTION__, mId, timestamp, mLastTimestamp); b.status = CAMERA3_BUFFER_STATUS_ERROR; } mLastTimestamp = timestamp; Loading @@ -676,9 +679,9 @@ status_t Camera3Stream::returnBuffer(const camera3_stream_buffer &buffer, * * Do this for getBuffer as well. */ status_t res = returnBufferLocked(buffer, timestamp); status_t res = returnBufferLocked(b, timestamp); if (res == OK) { fireBufferListenersLocked(buffer, /*acquired*/false, /*output*/true); fireBufferListenersLocked(b, /*acquired*/false, /*output*/true); } // Even if returning the buffer failed, we still want to signal whoever is waiting for the Loading Loading
services/camera/libcameraservice/device3/Camera3OutputStream.cpp +4 −6 Original line number Diff line number Diff line Loading @@ -237,12 +237,14 @@ status_t Camera3OutputStream::returnBufferCheckedLocked( /** * Return buffer back to ANativeWindow */ if (buffer.status == CAMERA3_BUFFER_STATUS_ERROR || mDropBuffers) { if (buffer.status == CAMERA3_BUFFER_STATUS_ERROR || mDropBuffers || timestamp == 0) { // Cancel buffer if (mDropBuffers) { ALOGV("%s: Dropping a frame for stream %d.", __FUNCTION__, mId); } else { } else if (buffer.status == CAMERA3_BUFFER_STATUS_ERROR) { ALOGW("%s: A frame is dropped for stream %d due to buffer error.", __FUNCTION__, mId); } else { ALOGE("%s: Stream %d: timestamp shouldn't be 0", __FUNCTION__, mId); } res = currentConsumer->cancelBuffer(currentConsumer.get(), Loading @@ -268,10 +270,6 @@ status_t Camera3OutputStream::returnBufferCheckedLocked( mTraceFirstBuffer = false; } if (timestamp == 0) { ALOGW("%s: Stream %d: timestamp shouldn't be 0", __FUNCTION__, mId); } /* Certain consumers (such as AudioSource or HardwareComposer) use * MONOTONIC time, causing time misalignment if camera timestamp is * in BOOTTIME. Do the conversion if necessary. */ Loading
services/camera/libcameraservice/device3/Camera3Stream.cpp +6 −3 Original line number Diff line number Diff line Loading @@ -662,9 +662,12 @@ status_t Camera3Stream::returnBuffer(const camera3_stream_buffer &buffer, removeOutstandingBuffer(buffer); // Buffer status may be changed, so make a copy of the stream_buffer struct. camera3_stream_buffer b = buffer; if (timestampIncreasing && timestamp != 0 && timestamp <= mLastTimestamp) { ALOGW("%s: Stream %d: timestamp %" PRId64 " is not increasing. Prev timestamp %" PRId64, ALOGE("%s: Stream %d: timestamp %" PRId64 " is not increasing. Prev timestamp %" PRId64, __FUNCTION__, mId, timestamp, mLastTimestamp); b.status = CAMERA3_BUFFER_STATUS_ERROR; } mLastTimestamp = timestamp; Loading @@ -676,9 +679,9 @@ status_t Camera3Stream::returnBuffer(const camera3_stream_buffer &buffer, * * Do this for getBuffer as well. */ status_t res = returnBufferLocked(buffer, timestamp); status_t res = returnBufferLocked(b, timestamp); if (res == OK) { fireBufferListenersLocked(buffer, /*acquired*/false, /*output*/true); fireBufferListenersLocked(b, /*acquired*/false, /*output*/true); } // Even if returning the buffer failed, we still want to signal whoever is waiting for the Loading