camera3_stream* Camera3Stream::startConfiguration() { ATRACE_CALL(); Mutex::Autolock l(mLock); status_t res; switch (mState) { case STATE_ERROR: ALOGE("%s: In error state", __FUNCTION__); return NULL; case STATE_CONSTRUCTED: // OK break; case STATE_IN_CONFIG: case STATE_IN_RECONFIG: // Can start config again with no trouble; but don't redo // oldUsage/oldMaxBuffers return this; case STATE_CONFIGURED: if (stream_type == CAMERA3_STREAM_INPUT) { ALOGE("%s: Cannot configure an input stream twice", __FUNCTION__); return NULL; } else if (hasOutstandingBuffersLocked()) { ALOGE("%s: Cannot configure stream; has outstanding buffers", __FUNCTION__); return NULL; } break; default: ALOGE("%s: Unknown state %d", __FUNCTION__, mState); return NULL; } oldUsage = camera3_stream::usage; oldMaxBuffers = camera3_stream::max_buffers; res = getEndpointUsage(&(camera3_stream::usage)); if (res != OK) { ALOGE("%s: Cannot query consumer endpoint usage!", __FUNCTION__); return NULL; } // Stop tracking if currently doing so if (mStatusId != StatusTracker::NO_STATUS_ID) { sp<StatusTracker> statusTracker = mStatusTracker.promote(); if (statusTracker != 0) { statusTracker->removeComponent(mStatusId); } mStatusId = StatusTracker::NO_STATUS_ID; } if (mState == STATE_CONSTRUCTED) { mState = STATE_IN_CONFIG; } else { // mState == STATE_CONFIGURED mState = STATE_IN_RECONFIG; } return this; }
void Camera3IOStreamBase::dump(int fd, const Vector<String16> &args) const { (void) args; String8 lines; uint64_t consumerUsage = 0; status_t res = getEndpointUsage(&consumerUsage); if (res != OK) consumerUsage = 0; lines.appendFormat(" State: %d\n", mState); lines.appendFormat(" Dims: %d x %d, format 0x%x, dataspace 0x%x\n", camera3_stream::width, camera3_stream::height, camera3_stream::format, camera3_stream::data_space); lines.appendFormat(" Max size: %zu\n", mMaxSize); lines.appendFormat(" Combined usage: %" PRIu64 ", max HAL buffers: %d\n", mUsage | consumerUsage, camera3_stream::max_buffers); lines.appendFormat(" Frames produced: %d, last timestamp: %" PRId64 " ns\n", mFrameCount, mLastTimestamp); lines.appendFormat(" Total buffers: %zu, currently dequeued: %zu\n", mTotalBufferCount, mHandoutTotalBufferCount); write(fd, lines.string(), lines.size()); Camera3Stream::dump(fd, args); }