Merge "GenericSource: reduce logging." into nyc-dev
diff --git a/include/media/stagefright/ACodec.h b/include/media/stagefright/ACodec.h
index b22e0b4..f6d5f12 100644
--- a/include/media/stagefright/ACodec.h
+++ b/include/media/stagefright/ACodec.h
@@ -425,10 +425,10 @@
// gets index or sets it to 0 on error. Returns error from codec.
status_t initDescribeHDRStaticInfoIndex();
- // sets HDR static information for the decoder based on |configFormat|, and
- // set resulting HDRStaticInfo config into |outputFormat|. Returns error from the codec.
- status_t setHDRStaticInfoForVideoDecoder(
- const sp<AMessage> &configFormat, sp<AMessage> &outputFormat);
+ // sets HDR static metadata for the video encoder/decoder based on |configFormat|, and
+ // sets resulting HDRStaticInfo config into |outputFormat|. Returns error from the codec.
+ status_t setHDRStaticInfoForVideoCodec(
+ OMX_U32 portIndex, const sp<AMessage> &configFormat, sp<AMessage> &outputFormat);
// sets |params|. Returns the codec error.
status_t setHDRStaticInfo(const DescribeHDRStaticInfoParams ¶ms);
@@ -436,8 +436,8 @@
// gets |params|. Returns the codec error.
status_t getHDRStaticInfo(DescribeHDRStaticInfoParams ¶ms);
- // gets HDR static information for the video decoder port and sets them into |format|.
- status_t getHDRStaticInfoForVideoDecoder(sp<AMessage> &format);
+ // gets HDR static information for the video encoder/decoder port and sets them into |format|.
+ status_t getHDRStaticInfoForVideoCodec(OMX_U32 portIndex, sp<AMessage> &format);
typedef struct drcParams {
int32_t drcCut;
diff --git a/media/libmediaplayerservice/nuplayer/NuPlayer.cpp b/media/libmediaplayerservice/nuplayer/NuPlayer.cpp
index 7b000fa..46a51ce 100644
--- a/media/libmediaplayerservice/nuplayer/NuPlayer.cpp
+++ b/media/libmediaplayerservice/nuplayer/NuPlayer.cpp
@@ -1151,6 +1151,11 @@
int32_t reason;
CHECK(msg->findInt32("reason", &reason));
ALOGV("Tear down audio with reason %d.", reason);
+ if (reason == Renderer::kDueToTimeout && !(mPaused && mOffloadAudio)) {
+ // TimeoutWhenPaused is only for offload mode.
+ ALOGW("Receive a stale message for teardown.");
+ break;
+ }
int64_t positionUs;
if (!msg->findInt64("positionUs", &positionUs)) {
positionUs = mPreviousSeekTimeUs;
diff --git a/media/libstagefright/ACodec.cpp b/media/libstagefright/ACodec.cpp
index 7c903ea..f159882 100644
--- a/media/libstagefright/ACodec.cpp
+++ b/media/libstagefright/ACodec.cpp
@@ -3192,7 +3192,7 @@
return err;
}
- err = setHDRStaticInfoForVideoDecoder(msg, outputFormat);
+ err = setHDRStaticInfoForVideoCodec(kPortIndexOutput, msg, outputFormat);
if (err == ERROR_UNSUPPORTED) { // support is optional
err = OK;
}
@@ -3392,6 +3392,25 @@
return OK;
}
+status_t ACodec::setHDRStaticInfoForVideoCodec(
+ OMX_U32 portIndex, const sp<AMessage> &configFormat, sp<AMessage> &outputFormat) {
+ CHECK(portIndex == kPortIndexInput || portIndex == kPortIndexOutput);
+
+ DescribeHDRStaticInfoParams params;
+ InitOMXParams(¶ms);
+ params.nPortIndex = portIndex;
+
+ HDRStaticInfo *info = ¶ms.sInfo;
+ if (getHDRStaticInfoFromFormat(configFormat, info)) {
+ setHDRStaticInfoIntoFormat(params.sInfo, outputFormat);
+ }
+
+ (void)initDescribeHDRStaticInfoIndex();
+
+ // communicate HDR static Info to codec
+ return setHDRStaticInfo(params);
+}
+
// subsequent initial video encoder setup for surface mode
status_t ACodec::setInitialColorAspectsForVideoEncoderSurfaceAndGetDataSpace(
android_dataspace *dataSpace /* nonnull */) {
@@ -3444,10 +3463,11 @@
return err;
}
-status_t ACodec::getHDRStaticInfoForVideoDecoder(sp<AMessage> &format) {
+status_t ACodec::getHDRStaticInfoForVideoCodec(OMX_U32 portIndex, sp<AMessage> &format) {
+ CHECK(portIndex == kPortIndexInput || portIndex == kPortIndexOutput);
DescribeHDRStaticInfoParams params;
InitOMXParams(¶ms);
- params.nPortIndex = kPortIndexOutput;
+ params.nPortIndex = portIndex;
status_t err = getHDRStaticInfo(params);
if (err == OK) {
@@ -3466,23 +3486,6 @@
return err;
}
-status_t ACodec::setHDRStaticInfoForVideoDecoder(
- const sp<AMessage> &configFormat, sp<AMessage> &outputFormat) {
- DescribeHDRStaticInfoParams params;
- InitOMXParams(¶ms);
- params.nPortIndex = kPortIndexOutput;
-
- HDRStaticInfo *info = ¶ms.sInfo;
- if (getHDRStaticInfoFromFormat(configFormat, info)) {
- setHDRStaticInfoIntoFormat(params.sInfo, outputFormat);
- }
-
- (void)initDescribeHDRStaticInfoIndex();
-
- // communicate HDR static Info to codec
- return setHDRStaticInfo(params);
-}
-
status_t ACodec::setHDRStaticInfo(const DescribeHDRStaticInfoParams ¶ms) {
status_t err = ERROR_UNSUPPORTED;
if (mDescribeHDRStaticInfoIndex) {
@@ -3697,6 +3700,16 @@
err = OK;
}
+ if (err != OK) {
+ return err;
+ }
+
+ err = setHDRStaticInfoForVideoCodec(kPortIndexInput, msg, outputFormat);
+ if (err == ERROR_UNSUPPORTED) { // support is optional
+ ALOGI("[%s] cannot encode HDR static metadata. Ignoring.", mComponentName.c_str());
+ err = OK;
+ }
+
if (err == OK) {
ALOGI("setupVideoEncoder succeeded");
}
@@ -4729,9 +4742,12 @@
if (mUsingNativeWindow) {
notify->setInt32("android._dataspace", dataSpace);
}
- (void)getHDRStaticInfoForVideoDecoder(notify);
+ (void)getHDRStaticInfoForVideoCodec(kPortIndexOutput, notify);
} else {
(void)getInputColorAspectsForVideoEncoder(notify);
+ if (mConfigFormat->contains("hdr-static-info")) {
+ (void)getHDRStaticInfoForVideoCodec(kPortIndexInput, notify);
+ }
}
break;
diff --git a/media/libstagefright/httplive/M3UParser.cpp b/media/libstagefright/httplive/M3UParser.cpp
index ff2bb27..935f1dc 100644
--- a/media/libstagefright/httplive/M3UParser.cpp
+++ b/media/libstagefright/httplive/M3UParser.cpp
@@ -603,6 +603,18 @@
return ERROR_MALFORMED;
}
err = parseMetaDataDuration(line, &itemMeta, "durationUs");
+ } else if (line.startsWith("#EXT-X-DISCONTINUITY-SEQUENCE")) {
+ if (mIsVariantPlaylist) {
+ return ERROR_MALFORMED;
+ }
+ size_t seq;
+ err = parseDiscontinuitySequence(line, &seq);
+ if (err == OK) {
+ mDiscontinuitySeq = seq;
+ ALOGI("mDiscontinuitySeq %zu", mDiscontinuitySeq);
+ } else {
+ ALOGI("Failed to parseDiscontinuitySequence %d", err);
+ }
} else if (line.startsWith("#EXT-X-DISCONTINUITY")) {
if (mIsVariantPlaylist) {
return ERROR_MALFORMED;
@@ -638,15 +650,6 @@
}
} else if (line.startsWith("#EXT-X-MEDIA")) {
err = parseMedia(line);
- } else if (line.startsWith("#EXT-X-DISCONTINUITY-SEQUENCE")) {
- if (mIsVariantPlaylist) {
- return ERROR_MALFORMED;
- }
- size_t seq;
- err = parseDiscontinuitySequence(line, &seq);
- if (err == OK) {
- mDiscontinuitySeq = seq;
- }
}
if (err != OK) {
diff --git a/media/libstagefright/httplive/PlaylistFetcher.cpp b/media/libstagefright/httplive/PlaylistFetcher.cpp
index 0a1ed94..20d124c 100644
--- a/media/libstagefright/httplive/PlaylistFetcher.cpp
+++ b/media/libstagefright/httplive/PlaylistFetcher.cpp
@@ -368,11 +368,15 @@
AString iv;
if (itemMeta->findString("cipher-iv", &iv)) {
if ((!iv.startsWith("0x") && !iv.startsWith("0X"))
- || iv.size() != 16 * 2 + 2) {
+ || iv.size() > 16 * 2 + 2) {
ALOGE("malformed cipher IV '%s'.", iv.c_str());
return ERROR_MALFORMED;
}
+ while (iv.size() < 16 * 2 + 2) {
+ iv.insert("0", 1, 2);
+ }
+
memset(mAESInitVec, 0, sizeof(mAESInitVec));
for (size_t i = 0; i < 16; ++i) {
char c1 = tolower(iv.c_str()[2 + 2 * i]);
@@ -1180,8 +1184,7 @@
// Signal a format discontinuity to ATSParser to clear partial data
// from previous streams. Not doing this causes bitstream corruption.
if (mTSParser != NULL) {
- mTSParser->signalDiscontinuity(
- ATSParser::DISCONTINUITY_FORMATCHANGE, NULL /* extra */);
+ mTSParser.clear();
}
queueDiscontinuity(
diff --git a/media/libstagefright/mpeg2ts/ATSParser.cpp b/media/libstagefright/mpeg2ts/ATSParser.cpp
index fb43a38..b8248c4 100644
--- a/media/libstagefright/mpeg2ts/ATSParser.cpp
+++ b/media/libstagefright/mpeg2ts/ATSParser.cpp
@@ -1438,8 +1438,8 @@
// The number of bytes received by this parser up to and
// including the final byte of this PCR_ext field.
- size_t byteOffsetFromStart =
- mNumTSPacketsParsed * 188 + byteOffsetFromStartOfTSPacket;
+ uint64_t byteOffsetFromStart =
+ uint64_t(mNumTSPacketsParsed) * 188 + byteOffsetFromStartOfTSPacket;
for (size_t i = 0; i < mPrograms.size(); ++i) {
updatePCR(PID, PCR, byteOffsetFromStart);
@@ -1558,8 +1558,8 @@
__attribute__((no_sanitize("integer")))
void ATSParser::updatePCR(
- unsigned /* PID */, uint64_t PCR, size_t byteOffsetFromStart) {
- ALOGV("PCR 0x%016" PRIx64 " @ %zu", PCR, byteOffsetFromStart);
+ unsigned /* PID */, uint64_t PCR, uint64_t byteOffsetFromStart) {
+ ALOGV("PCR 0x%016" PRIx64 " @ %" PRIx64, PCR, byteOffsetFromStart);
if (mNumPCRs == 2) {
mPCR[0] = mPCR[1];
diff --git a/media/libstagefright/mpeg2ts/ATSParser.h b/media/libstagefright/mpeg2ts/ATSParser.h
index fb03cd6..9d9102d 100644
--- a/media/libstagefright/mpeg2ts/ATSParser.h
+++ b/media/libstagefright/mpeg2ts/ATSParser.h
@@ -182,10 +182,10 @@
// see feedTSPacket().
status_t parseTS(ABitReader *br, SyncEvent *event);
- void updatePCR(unsigned PID, uint64_t PCR, size_t byteOffsetFromStart);
+ void updatePCR(unsigned PID, uint64_t PCR, uint64_t byteOffsetFromStart);
uint64_t mPCR[2];
- size_t mPCRBytes[2];
+ uint64_t mPCRBytes[2];
int64_t mSystemTimeUs[2];
size_t mNumPCRs;
diff --git a/media/libstagefright/omx/SoftVideoEncoderOMXComponent.cpp b/media/libstagefright/omx/SoftVideoEncoderOMXComponent.cpp
index 72823e2..c3a481a 100644
--- a/media/libstagefright/omx/SoftVideoEncoderOMXComponent.cpp
+++ b/media/libstagefright/omx/SoftVideoEncoderOMXComponent.cpp
@@ -170,6 +170,11 @@
OMX_ERRORTYPE SoftVideoEncoderOMXComponent::internalSetPortParams(
const OMX_PARAM_PORTDEFINITIONTYPE *port) {
+
+ if (!isValidOMXParam(port)) {
+ return OMX_ErrorBadParameter;
+ }
+
if (port->nPortIndex == kInputPortIndex) {
mWidth = port->format.video.nFrameWidth;
mHeight = port->format.video.nFrameHeight;
@@ -216,6 +221,10 @@
const OMX_PARAM_COMPONENTROLETYPE *roleParams =
(const OMX_PARAM_COMPONENTROLETYPE *)param;
+ if (!isValidOMXParam(roleParams)) {
+ return OMX_ErrorBadParameter;
+ }
+
if (strncmp((const char *)roleParams->cRole,
mComponentRole,
OMX_MAX_STRINGNAME_SIZE - 1)) {
@@ -241,6 +250,10 @@
const OMX_VIDEO_PARAM_PORTFORMATTYPE* format =
(const OMX_VIDEO_PARAM_PORTFORMATTYPE *)param;
+ if (!isValidOMXParam(format)) {
+ return OMX_ErrorBadParameter;
+ }
+
if (format->nPortIndex == kInputPortIndex) {
if (format->eColorFormat == OMX_COLOR_FormatYUV420Planar ||
format->eColorFormat == OMX_COLOR_FormatYUV420SemiPlanar ||
@@ -270,6 +283,10 @@
const StoreMetaDataInBuffersParams *storeParam =
(const StoreMetaDataInBuffersParams *)param;
+ if (!isValidOMXParam(storeParam)) {
+ return OMX_ErrorBadParameter;
+ }
+
if (storeParam->nPortIndex == kOutputPortIndex) {
return storeParam->bStoreMetaData ? OMX_ErrorUnsupportedSetting : OMX_ErrorNone;
} else if (storeParam->nPortIndex != kInputPortIndex) {
@@ -304,6 +321,10 @@
OMX_VIDEO_PARAM_PORTFORMATTYPE *formatParams =
(OMX_VIDEO_PARAM_PORTFORMATTYPE *)param;
+ if (!isValidOMXParam(formatParams)) {
+ return OMX_ErrorBadParameter;
+ }
+
if (formatParams->nPortIndex == kInputPortIndex) {
if (formatParams->nIndex >= NELEM(kSupportedColorFormats)) {
return OMX_ErrorNoMore;
@@ -329,6 +350,10 @@
OMX_VIDEO_PARAM_PROFILELEVELTYPE *profileLevel =
(OMX_VIDEO_PARAM_PROFILELEVELTYPE *) param;
+ if (!isValidOMXParam(profileLevel)) {
+ return OMX_ErrorBadParameter;
+ }
+
if (profileLevel->nPortIndex != kOutputPortIndex) {
ALOGE("Invalid port index: %u", profileLevel->nPortIndex);
return OMX_ErrorUnsupportedIndex;
diff --git a/services/camera/libcameraservice/CameraFlashlight.cpp b/services/camera/libcameraservice/CameraFlashlight.cpp
index 0afd945..ad08a68 100644
--- a/services/camera/libcameraservice/CameraFlashlight.cpp
+++ b/services/camera/libcameraservice/CameraFlashlight.cpp
@@ -679,7 +679,8 @@
status_t res;
if (enabled) {
bool hasFlash = false;
- res = hasFlashUnitLocked(cameraId, &hasFlash);
+ // Check if it has a flash unit and leave camera device open.
+ res = hasFlashUnitLocked(cameraId, &hasFlash, /*keepDeviceOpen*/true);
// invalid camera?
if (res) {
// hasFlashUnitLocked() returns BAD_INDEX if mDevice is connected to
@@ -688,6 +689,8 @@
}
// no flash unit?
if (!hasFlash) {
+ // Disconnect camera device if it has no flash.
+ disconnectCameraDevice();
return -ENOSYS;
}
} else if (mDevice == NULL || cameraId != mCameraId) {
@@ -716,21 +719,28 @@
status_t CameraHardwareInterfaceFlashControl::hasFlashUnit(
const String8& cameraId, bool *hasFlash) {
Mutex::Autolock l(mLock);
- return hasFlashUnitLocked(cameraId, hasFlash);
+ // Close device after checking if it has a flash unit.
+ return hasFlashUnitLocked(cameraId, hasFlash, /*keepDeviceOpen*/false);
}
status_t CameraHardwareInterfaceFlashControl::hasFlashUnitLocked(
- const String8& cameraId, bool *hasFlash) {
+ const String8& cameraId, bool *hasFlash, bool keepDeviceOpen) {
+ bool closeCameraDevice = false;
+
if (!hasFlash) {
return BAD_VALUE;
}
status_t res;
if (mDevice == NULL) {
+ // Connect to camera device to query if it has a flash unit.
res = connectCameraDevice(cameraId);
if (res) {
return res;
}
+ // Close camera device only when it is just opened and the caller doesn't want to keep
+ // the camera device open.
+ closeCameraDevice = !keepDeviceOpen;
}
if (cameraId != mCameraId) {
@@ -745,6 +755,15 @@
*hasFlash = false;
}
+ if (closeCameraDevice) {
+ res = disconnectCameraDevice();
+ if (res != OK) {
+ ALOGE("%s: Failed to disconnect camera device. %s (%d)", __FUNCTION__,
+ strerror(-res), res);
+ return res;
+ }
+ }
+
return OK;
}
@@ -869,9 +888,13 @@
return OK;
}
- mParameters.set(CameraParameters::KEY_FLASH_MODE,
- CameraParameters::FLASH_MODE_OFF);
- mDevice->setParameters(mParameters);
+ if (mParameters.get(CameraParameters::KEY_FLASH_MODE)) {
+ // There is a flash, turn if off.
+ // (If there isn't one, leave the parameter null)
+ mParameters.set(CameraParameters::KEY_FLASH_MODE,
+ CameraParameters::FLASH_MODE_OFF);
+ mDevice->setParameters(mParameters);
+ }
mDevice->stopPreview();
status_t res = native_window_api_disconnect(mSurface.get(),
NATIVE_WINDOW_API_CAMERA);
diff --git a/services/camera/libcameraservice/CameraFlashlight.h b/services/camera/libcameraservice/CameraFlashlight.h
index 4d5fe8d..5cde372 100644
--- a/services/camera/libcameraservice/CameraFlashlight.h
+++ b/services/camera/libcameraservice/CameraFlashlight.h
@@ -203,7 +203,11 @@
status_t getSmallestSurfaceSize(int32_t *width, int32_t *height);
// protected by mLock
- status_t hasFlashUnitLocked(const String8& cameraId, bool *hasFlash);
+ // If this function opens camera device in order to check if it has a flash unit, the
+ // camera device will remain open if keepDeviceOpen is true and the camera device will be
+ // closed if keepDeviceOpen is false. If camera device is already open when calling this
+ // function, keepDeviceOpen is ignored.
+ status_t hasFlashUnitLocked(const String8& cameraId, bool *hasFlash, bool keepDeviceOpen);
CameraModule *mCameraModule;
const camera_module_callbacks_t *mCallbacks;
diff --git a/services/camera/libcameraservice/CameraService.cpp b/services/camera/libcameraservice/CameraService.cpp
index fcb72e8..13691e7 100644
--- a/services/camera/libcameraservice/CameraService.cpp
+++ b/services/camera/libcameraservice/CameraService.cpp
@@ -464,6 +464,12 @@
if (rc.isOk()) {
cameraInfo->facing = info.facing;
cameraInfo->orientation = info.orientation;
+ // CameraInfo is for android.hardware.Camera which does not
+ // support external camera facing. The closest approximation would be
+ // front camera.
+ if (cameraInfo->orientation == CAMERA_FACING_EXTERNAL) {
+ cameraInfo->orientation = CAMERA_FACING_FRONT;
+ }
}
return rc;
}
diff --git a/services/camera/libcameraservice/api2/CameraDeviceClient.cpp b/services/camera/libcameraservice/api2/CameraDeviceClient.cpp
index 63e44fd..dbec34e 100644
--- a/services/camera/libcameraservice/api2/CameraDeviceClient.cpp
+++ b/services/camera/libcameraservice/api2/CameraDeviceClient.cpp
@@ -234,6 +234,7 @@
res = STATUS_ERROR(CameraService::ERROR_INVALID_OPERATION,
msg.string());
} else {
+ Mutex::Autolock idLock(mStreamingRequestIdLock);
mStreamingRequestId = submitInfo->mRequestId;
}
} else {
@@ -271,6 +272,7 @@
return STATUS_ERROR(CameraService::ERROR_DISCONNECTED, "Camera device no longer alive");
}
+ Mutex::Autolock idLock(mStreamingRequestIdLock);
if (mStreamingRequestId != requestId) {
String8 msg = String8::format("Camera %d: Canceling request ID %d doesn't match "
"current request ID %d", mCameraId, requestId, mStreamingRequestId);
@@ -760,6 +762,7 @@
}
// FIXME: Also need check repeating burst.
+ Mutex::Autolock idLock(mStreamingRequestIdLock);
if (mStreamingRequestId != REQUEST_ID_NONE) {
String8 msg = String8::format(
"Camera %d: Try to waitUntilIdle when there are active streaming requests",
@@ -792,6 +795,7 @@
return STATUS_ERROR(CameraService::ERROR_DISCONNECTED, "Camera device no longer alive");
}
+ Mutex::Autolock idLock(mStreamingRequestIdLock);
mStreamingRequestId = REQUEST_ID_NONE;
status_t err = mDevice->flush(lastFrameNumber);
if (err != OK) {
@@ -982,7 +986,7 @@
remoteCb->onRepeatingRequestError(lastFrameNumber);
}
- Mutex::Autolock icl(mBinderSerializationLock);
+ Mutex::Autolock idLock(mStreamingRequestIdLock);
mStreamingRequestId = REQUEST_ID_NONE;
}
diff --git a/services/camera/libcameraservice/api2/CameraDeviceClient.h b/services/camera/libcameraservice/api2/CameraDeviceClient.h
index 3660a18..d792b7d 100644
--- a/services/camera/libcameraservice/api2/CameraDeviceClient.h
+++ b/services/camera/libcameraservice/api2/CameraDeviceClient.h
@@ -208,6 +208,7 @@
// Streaming request ID
int32_t mStreamingRequestId;
+ Mutex mStreamingRequestIdLock;
static const int32_t REQUEST_ID_NONE = -1;
int32_t mRequestIdCounter;
diff --git a/services/camera/libcameraservice/device3/Camera3Device.cpp b/services/camera/libcameraservice/device3/Camera3Device.cpp
index 0de80bd..0e4e244 100644
--- a/services/camera/libcameraservice/device3/Camera3Device.cpp
+++ b/services/camera/libcameraservice/device3/Camera3Device.cpp
@@ -1970,7 +1970,7 @@
if (mIsConstrainedHighSpeedConfiguration) {
pid_t requestThreadTid = mRequestThread->getTid();
res = requestPriority(getpid(), requestThreadTid,
- kConstrainedHighSpeedThreadPriority, true);
+ kConstrainedHighSpeedThreadPriority, /*asynchronous*/ false);
if (res != OK) {
ALOGW("Can't set realtime priority for request processing thread: %s (%d)",
strerror(-res), res);
diff --git a/services/camera/libcameraservice/utils/AutoConditionLock.cpp b/services/camera/libcameraservice/utils/AutoConditionLock.cpp
index c8ee965..ed80a95 100644
--- a/services/camera/libcameraservice/utils/AutoConditionLock.cpp
+++ b/services/camera/libcameraservice/utils/AutoConditionLock.cpp
@@ -24,13 +24,15 @@
// Locks manager-owned mutex
AutoConditionLock::AutoConditionLock(const std::shared_ptr<WaitableMutexWrapper>& manager) :
- mManager{manager}, mAutoLock{manager->mMutex} {}
+ mManager{manager}, mAutoLock{manager->mMutex}, mAcquired(false) {}
// Unlocks manager-owned mutex
AutoConditionLock::~AutoConditionLock() {
// Unset the condition and wake everyone up before releasing lock
- mManager->mState = false;
- mManager->mCondition.broadcast();
+ if (mAcquired) {
+ mManager->mState = false;
+ mManager->mCondition.broadcast();
+ }
}
std::unique_ptr<AutoConditionLock> AutoConditionLock::waitAndAcquire(
@@ -59,6 +61,7 @@
// Set the condition and return
manager->mState = true;
+ scopedLock->mAcquired = true;
return scopedLock;
}
@@ -84,6 +87,7 @@
// Set the condition and return
manager->mState = true;
+ scopedLock->mAcquired = true;
return scopedLock;
}
diff --git a/services/camera/libcameraservice/utils/AutoConditionLock.h b/services/camera/libcameraservice/utils/AutoConditionLock.h
index 9a3eafc..b7f167b 100644
--- a/services/camera/libcameraservice/utils/AutoConditionLock.h
+++ b/services/camera/libcameraservice/utils/AutoConditionLock.h
@@ -92,6 +92,7 @@
std::shared_ptr<WaitableMutexWrapper> mManager;
Mutex::Autolock mAutoLock;
+ bool mAcquired;
};
}; // namespace android