status_t Camera3Stream::getInputBuffer(camera3_stream_buffer *buffer) { ATRACE_CALL(); Mutex::Autolock l(mLock); status_t res = getInputBufferLocked(buffer); if (res == OK) { fireBufferListenersLocked(*buffer, /*acquired*/true, /*output*/false); } return res; }
status_t Camera3Stream::getInputBuffer(camera3_stream_buffer *buffer) { ATRACE_CALL(); Mutex::Autolock l(mLock); status_t res = OK; // This function should be only called when the stream is configured already. if (mState != STATE_CONFIGURED) { ALOGE("%s: Stream %d: Can't get input buffers if stream is not in CONFIGURED state %d", __FUNCTION__, mId, mState); return INVALID_OPERATION; } // Wait for new buffer returned back if we are running into the limit. if (getHandoutInputBufferCountLocked() == camera3_stream::max_buffers) { ALOGV("%s: Already dequeued max input buffers (%d), wait for next returned one.", __FUNCTION__, camera3_stream::max_buffers); res = mInputBufferReturnedSignal.waitRelative(mLock, kWaitForBufferDuration); if (res != OK) { if (res == TIMED_OUT) { ALOGE("%s: wait for input buffer return timed out after %lldms", __FUNCTION__, kWaitForBufferDuration / 1000000LL); } return res; } } res = getInputBufferLocked(buffer); if (res == OK) { fireBufferListenersLocked(*buffer, /*acquired*/true, /*output*/false); if (buffer->buffer) { mOutstandingBuffers.push_back(*buffer->buffer); } } return res; }