Merge "MediaUtils: Dump HAL pids in Timecheck abort message" into tm-dev
diff --git a/camera/CameraSessionStats.cpp b/camera/CameraSessionStats.cpp
index 8088d06..d1aa36a 100644
--- a/camera/CameraSessionStats.cpp
+++ b/camera/CameraSessionStats.cpp
@@ -264,7 +264,8 @@
mInternalReconfigure(0),
mRequestCount(0),
mResultErrorCount(0),
- mDeviceError(false) {}
+ mDeviceError(false),
+ mVideoStabilizationMode(-1) {}
CameraSessionStats::CameraSessionStats(const String16& cameraId,
int facing, int newCameraState, const String16& clientName,
@@ -281,7 +282,8 @@
mInternalReconfigure(0),
mRequestCount(0),
mResultErrorCount(0),
- mDeviceError(0) {}
+ mDeviceError(0),
+ mVideoStabilizationMode(-1) {}
status_t CameraSessionStats::readFromParcel(const android::Parcel* parcel) {
if (parcel == NULL) {
@@ -381,6 +383,12 @@
return BAD_VALUE;
}
+ int32_t videoStabilizationMode;
+ if ((err = parcel->readInt32(&videoStabilizationMode)) != OK) {
+ ALOGE("%s: Failed to read video stabilization mode from parcel", __FUNCTION__);
+ return err;
+ }
+
mCameraId = id;
mFacing = facing;
mNewCameraState = newCameraState;
@@ -396,6 +404,7 @@
mDeviceError = deviceError;
mStreamStats = std::move(streamStats);
mUserTag = userTag;
+ mVideoStabilizationMode = videoStabilizationMode;
return OK;
}
@@ -482,6 +491,11 @@
ALOGE("%s: Failed to write user tag!", __FUNCTION__);
return err;
}
+
+ if ((err = parcel->writeInt32(mVideoStabilizationMode)) != OK) {
+ ALOGE("%s: Failed to write video stabilization mode!", __FUNCTION__);
+ return err;
+ }
return OK;
}
diff --git a/camera/include/camera/CameraSessionStats.h b/camera/include/camera/CameraSessionStats.h
index e1ec6cf..aaa88b2 100644
--- a/camera/include/camera/CameraSessionStats.h
+++ b/camera/include/camera/CameraSessionStats.h
@@ -137,6 +137,7 @@
bool mDeviceError;
std::vector<CameraStreamStats> mStreamStats;
String16 mUserTag;
+ int mVideoStabilizationMode;
// Constructors
CameraSessionStats();
diff --git a/services/camera/libcameraservice/api2/CameraDeviceClient.cpp b/services/camera/libcameraservice/api2/CameraDeviceClient.cpp
index 5db3fa6..6c6ddbd 100644
--- a/services/camera/libcameraservice/api2/CameraDeviceClient.cpp
+++ b/services/camera/libcameraservice/api2/CameraDeviceClient.cpp
@@ -519,9 +519,16 @@
metadataRequestList.push_back(physicalSettingsList);
surfaceMapList.push_back(surfaceMap);
+ // Save certain CaptureRequest settings
if (!request.mUserTag.empty()) {
mUserTag = request.mUserTag;
}
+ camera_metadata_entry entry =
+ physicalSettingsList.begin()->metadata.find(
+ ANDROID_CONTROL_VIDEO_STABILIZATION_MODE);
+ if (entry.count == 1) {
+ mVideoStabilizationMode = entry.data.u8[0];
+ }
}
mRequestIdCounter++;
@@ -1971,7 +1978,7 @@
remoteCb->onDeviceIdle();
}
Camera2ClientBase::notifyIdleWithUserTag(requestCount, resultErrorCount, deviceError,
- streamStats, mUserTag);
+ streamStats, mUserTag, mVideoStabilizationMode);
}
void CameraDeviceClient::notifyShutter(const CaptureResultExtras& resultExtras,
diff --git a/services/camera/libcameraservice/api2/CameraDeviceClient.h b/services/camera/libcameraservice/api2/CameraDeviceClient.h
index 3af0b80..c5aad6b 100644
--- a/services/camera/libcameraservice/api2/CameraDeviceClient.h
+++ b/services/camera/libcameraservice/api2/CameraDeviceClient.h
@@ -352,6 +352,8 @@
// The string representation of object passed into CaptureRequest.setTag.
std::string mUserTag;
+ // The last set video stabilization mode
+ int mVideoStabilizationMode = -1;
};
}; // namespace android
diff --git a/services/camera/libcameraservice/common/Camera2ClientBase.cpp b/services/camera/libcameraservice/common/Camera2ClientBase.cpp
index a7097fb..49a9760 100644
--- a/services/camera/libcameraservice/common/Camera2ClientBase.cpp
+++ b/services/camera/libcameraservice/common/Camera2ClientBase.cpp
@@ -338,7 +338,7 @@
void Camera2ClientBase<TClientBase>::notifyIdleWithUserTag(
int64_t requestCount, int64_t resultErrorCount, bool deviceError,
const std::vector<hardware::CameraStreamStats>& streamStats,
- const std::string& userTag) {
+ const std::string& userTag, int videoStabilizationMode) {
if (mDeviceActive) {
status_t res = TClientBase::finishCameraStreamingOps();
if (res != OK) {
@@ -346,7 +346,8 @@
TClientBase::mCameraIdStr.string(), res);
}
CameraServiceProxyWrapper::logIdle(TClientBase::mCameraIdStr,
- requestCount, resultErrorCount, deviceError, userTag, streamStats);
+ requestCount, resultErrorCount, deviceError, userTag, videoStabilizationMode,
+ streamStats);
}
mDeviceActive = false;
diff --git a/services/camera/libcameraservice/common/Camera2ClientBase.h b/services/camera/libcameraservice/common/Camera2ClientBase.h
index 9cba2f1..ec33f46 100644
--- a/services/camera/libcameraservice/common/Camera2ClientBase.h
+++ b/services/camera/libcameraservice/common/Camera2ClientBase.h
@@ -91,7 +91,7 @@
void notifyIdleWithUserTag(int64_t requestCount, int64_t resultErrorCount,
bool deviceError,
const std::vector<hardware::CameraStreamStats>& streamStats,
- const std::string& userTag);
+ const std::string& userTag, int videoStabilizationMode);
int getCameraId() const;
const sp<CameraDeviceBase>&
diff --git a/services/camera/libcameraservice/device3/Camera3OutputStream.cpp b/services/camera/libcameraservice/device3/Camera3OutputStream.cpp
index 1ce7108..4a9b259 100644
--- a/services/camera/libcameraservice/device3/Camera3OutputStream.cpp
+++ b/services/camera/libcameraservice/device3/Camera3OutputStream.cpp
@@ -689,7 +689,7 @@
mSyncToDisplay = true;
mTotalBufferCount += kDisplaySyncExtraBuffer;
} else if (defaultToSpacer) {
- mPreviewFrameSpacer = new PreviewFrameSpacer(*this, mConsumer);
+ mPreviewFrameSpacer = new PreviewFrameSpacer(this, mConsumer);
mTotalBufferCount ++;
res = mPreviewFrameSpacer->run(String8::format("PreviewSpacer-%d", mId).string());
if (res != OK) {
@@ -970,6 +970,10 @@
returnPrefetchedBuffersLocked();
+ if (mPreviewFrameSpacer != nullptr) {
+ mPreviewFrameSpacer->requestExit();
+ }
+
ALOGV("%s: disconnecting stream %d from native window", __FUNCTION__, getId());
res = native_window_api_disconnect(mConsumer.get(),
diff --git a/services/camera/libcameraservice/device3/PreviewFrameSpacer.cpp b/services/camera/libcameraservice/device3/PreviewFrameSpacer.cpp
index 496580f..0439501 100644
--- a/services/camera/libcameraservice/device3/PreviewFrameSpacer.cpp
+++ b/services/camera/libcameraservice/device3/PreviewFrameSpacer.cpp
@@ -27,13 +27,12 @@
namespace camera3 {
-PreviewFrameSpacer::PreviewFrameSpacer(Camera3OutputStream& parent, sp<Surface> consumer) :
+PreviewFrameSpacer::PreviewFrameSpacer(wp<Camera3OutputStream> parent, sp<Surface> consumer) :
mParent(parent),
mConsumer(consumer) {
}
PreviewFrameSpacer::~PreviewFrameSpacer() {
- Thread::requestExitAndWait();
}
status_t PreviewFrameSpacer::queuePreviewBuffer(nsecs_t timestamp, nsecs_t readoutTimestamp,
@@ -51,7 +50,11 @@
Mutex::Autolock l(mLock);
if (mPendingBuffers.size() == 0) {
mBufferCond.waitRelative(mLock, kWaitDuration);
- return true;
+ if (exitPending()) {
+ return false;
+ } else {
+ return true;
+ }
}
nsecs_t currentTime = systemTime();
@@ -71,7 +74,7 @@
if (frameWaitTime > 0 && mPendingBuffers.size() < 2) {
mBufferCond.waitRelative(mLock, frameWaitTime);
if (exitPending()) {
- return true;
+ return false;
}
currentTime = systemTime();
}
@@ -92,7 +95,13 @@
void PreviewFrameSpacer::queueBufferToClientLocked(
const BufferHolder& bufferHolder, nsecs_t currentTime) {
- mParent.setTransform(bufferHolder.transform, true/*mayChangeMirror*/);
+ sp<Camera3OutputStream> parent = mParent.promote();
+ if (parent == nullptr) {
+ ALOGV("%s: Parent camera3 output stream was destroyed", __FUNCTION__);
+ return;
+ }
+
+ parent->setTransform(bufferHolder.transform, true/*mayChangeMirror*/);
status_t res = native_window_set_buffers_timestamp(mConsumer.get(), bufferHolder.timestamp);
if (res != OK) {
@@ -101,13 +110,13 @@
}
Camera3Stream::queueHDRMetadata(bufferHolder.anwBuffer.get()->handle, mConsumer,
- mParent.getDynamicRangeProfile());
+ parent->getDynamicRangeProfile());
res = mConsumer->queueBuffer(mConsumer.get(), bufferHolder.anwBuffer.get(),
bufferHolder.releaseFence);
if (res != OK) {
close(bufferHolder.releaseFence);
- if (mParent.shouldLogError(res)) {
+ if (parent->shouldLogError(res)) {
ALOGE("%s: Failed to queue buffer to client: %s(%d)", __FUNCTION__,
strerror(-res), res);
}
diff --git a/services/camera/libcameraservice/device3/PreviewFrameSpacer.h b/services/camera/libcameraservice/device3/PreviewFrameSpacer.h
index fb0a563..e165768 100644
--- a/services/camera/libcameraservice/device3/PreviewFrameSpacer.h
+++ b/services/camera/libcameraservice/device3/PreviewFrameSpacer.h
@@ -49,7 +49,7 @@
*/
class PreviewFrameSpacer : public Thread {
public:
- explicit PreviewFrameSpacer(Camera3OutputStream& parent, sp<Surface> consumer);
+ explicit PreviewFrameSpacer(wp<Camera3OutputStream> parent, sp<Surface> consumer);
virtual ~PreviewFrameSpacer();
// Queue preview buffer locally
@@ -75,8 +75,7 @@
void queueBufferToClientLocked(const BufferHolder& bufferHolder, nsecs_t currentTime);
-
- Camera3OutputStream& mParent;
+ wp<Camera3OutputStream> mParent;
sp<ANativeWindow> mConsumer;
mutable Mutex mLock;
Condition mBufferCond;
diff --git a/services/camera/libcameraservice/utils/CameraServiceProxyWrapper.cpp b/services/camera/libcameraservice/utils/CameraServiceProxyWrapper.cpp
index f7cede8..69175cc 100644
--- a/services/camera/libcameraservice/utils/CameraServiceProxyWrapper.cpp
+++ b/services/camera/libcameraservice/utils/CameraServiceProxyWrapper.cpp
@@ -80,7 +80,7 @@
void CameraServiceProxyWrapper::CameraSessionStatsWrapper::onIdle(
int64_t requestCount, int64_t resultErrorCount, bool deviceError,
- const std::string& userTag,
+ const std::string& userTag, int32_t videoStabilizationMode,
const std::vector<hardware::CameraStreamStats>& streamStats) {
Mutex::Autolock l(mLock);
@@ -89,6 +89,7 @@
mSessionStats.mResultErrorCount = resultErrorCount;
mSessionStats.mDeviceError = deviceError;
mSessionStats.mUserTag = String16(userTag.c_str());
+ mSessionStats.mVideoStabilizationMode = videoStabilizationMode;
mSessionStats.mStreamStats = streamStats;
updateProxyDeviceState(mSessionStats);
@@ -179,7 +180,7 @@
void CameraServiceProxyWrapper::logIdle(const String8& id,
int64_t requestCount, int64_t resultErrorCount, bool deviceError,
- const std::string& userTag,
+ const std::string& userTag, int32_t videoStabilizationMode,
const std::vector<hardware::CameraStreamStats>& streamStats) {
std::shared_ptr<CameraSessionStatsWrapper> sessionStats;
{
@@ -194,8 +195,8 @@
}
ALOGV("%s: id %s, requestCount %" PRId64 ", resultErrorCount %" PRId64 ", deviceError %d"
- ", userTag %s", __FUNCTION__, id.c_str(), requestCount, resultErrorCount,
- deviceError, userTag.c_str());
+ ", userTag %s, videoStabilizationMode %d", __FUNCTION__, id.c_str(), requestCount,
+ resultErrorCount, deviceError, userTag.c_str(), videoStabilizationMode);
for (size_t i = 0; i < streamStats.size(); i++) {
ALOGV("%s: streamStats[%zu]: w %d h %d, requestedCount %" PRId64 ", dropCount %"
PRId64 ", startTimeMs %d" ,
@@ -204,7 +205,8 @@
streamStats[i].mStartLatencyMs);
}
- sessionStats->onIdle(requestCount, resultErrorCount, deviceError, userTag, streamStats);
+ sessionStats->onIdle(requestCount, resultErrorCount, deviceError, userTag,
+ videoStabilizationMode, streamStats);
}
void CameraServiceProxyWrapper::logOpen(const String8& id, int facing,
diff --git a/services/camera/libcameraservice/utils/CameraServiceProxyWrapper.h b/services/camera/libcameraservice/utils/CameraServiceProxyWrapper.h
index 61fc915..e34a8f0 100644
--- a/services/camera/libcameraservice/utils/CameraServiceProxyWrapper.h
+++ b/services/camera/libcameraservice/utils/CameraServiceProxyWrapper.h
@@ -50,7 +50,7 @@
void onStreamConfigured(int operatingMode, bool internalReconfig, int32_t latencyMs);
void onActive(float maxPreviewFps);
void onIdle(int64_t requestCount, int64_t resultErrorCount, bool deviceError,
- const std::string& userTag,
+ const std::string& userTag, int32_t videoStabilizationMode,
const std::vector<hardware::CameraStreamStats>& streamStats);
};
@@ -87,7 +87,7 @@
// Session state becomes idle
static void logIdle(const String8& id,
int64_t requestCount, int64_t resultErrorCount, bool deviceError,
- const std::string& userTag,
+ const std::string& userTag, int32_t videoStabilizationMode,
const std::vector<hardware::CameraStreamStats>& streamStats);
// Ping camera service proxy for user update