Merge changes Ic2684098,I48c26abc

* changes:
  Camera: check stream state in useHalBufManager mode
  Camera: fix RequestBufferStateMachine bug
gugelfrei
TreeHugger Robot 6 years ago committed by Android (Google) Code Review
commit eb8b659add

@ -5443,6 +5443,10 @@ status_t Camera3Device::RequestThread::prepareHalRequests() {
}
if (mUseHalBufManager) {
if (outputStream->isAbandoned()) {
ALOGE("%s: stream %d is abandoned.", __FUNCTION__, streamId);
return TIMED_OUT;
}
// HAL will request buffer through requestStreamBuffer API
camera3_stream_buffer_t& buffer = outputBuffers->editItemAt(j);
buffer.stream = outputStream->asHalStream();
@ -6370,8 +6374,9 @@ status_t Camera3Device::RequestBufferStateMachine::initialize(
bool Camera3Device::RequestBufferStateMachine::startRequestBuffer() {
std::lock_guard<std::mutex> lock(mLock);
if (mStatus == RB_STATUS_READY) {
if (mStatus == RB_STATUS_READY || mStatus == RB_STATUS_PENDING_STOP) {
mRequestBufferOngoing = true;
notifyTrackerLocked(/*active*/true);
return true;
}
return false;
@ -6387,15 +6392,12 @@ void Camera3Device::RequestBufferStateMachine::endRequestBuffer() {
if (mStatus == RB_STATUS_PENDING_STOP) {
checkSwitchToStopLocked();
}
notifyTrackerLocked(/*active*/false);
}
void Camera3Device::RequestBufferStateMachine::onStreamsConfigured() {
std::lock_guard<std::mutex> lock(mLock);
RequestBufferState oldStatus = mStatus;
mStatus = RB_STATUS_READY;
if (oldStatus != RB_STATUS_READY) {
notifyTrackerLocked(/*active*/true);
}
return;
}
@ -6405,7 +6407,6 @@ void Camera3Device::RequestBufferStateMachine::onRequestSubmitted() {
mInflightMapEmpty = false;
if (mStatus == RB_STATUS_STOPPED) {
mStatus = RB_STATUS_READY;
notifyTrackerLocked(/*active*/true);
}
return;
}
@ -6450,7 +6451,6 @@ void Camera3Device::RequestBufferStateMachine::notifyTrackerLocked(bool active)
bool Camera3Device::RequestBufferStateMachine::checkSwitchToStopLocked() {
if (mInflightMapEmpty && mRequestThreadPaused && !mRequestBufferOngoing) {
mStatus = RB_STATUS_STOPPED;
notifyTrackerLocked(/*active*/false);
return true;
}
return false;

Loading…
Cancel
Save