Merge "Fix android.media.cts.MediaPlayerFlakyNetworkTest failure" into qt-dev
diff --git a/camera/ndk/ndk_vendor/impl/ACameraDevice.cpp b/camera/ndk/ndk_vendor/impl/ACameraDevice.cpp
index 529c167..a43d707 100644
--- a/camera/ndk/ndk_vendor/impl/ACameraDevice.cpp
+++ b/camera/ndk/ndk_vendor/impl/ACameraDevice.cpp
@@ -31,6 +31,17 @@
#include "ACameraCaptureSession.inc"
+#define CHECK_TRANSACTION_AND_RET(remoteRet, status, callName) \
+ if (!remoteRet.isOk()) { \
+ ALOGE("%s: Transaction error during %s call %s", __FUNCTION__, callName, \
+ remoteRet.description().c_str()); \
+ return ACAMERA_ERROR_UNKNOWN; \
+ } \
+ if (status != Status::NO_ERROR) { \
+ ALOGE("%s: %s call failed", __FUNCTION__, callName); \
+ return utils::convertFromHidl(status); \
+ }
+
using namespace android;
namespace android {
@@ -151,7 +162,7 @@
return ACAMERA_ERROR_CAMERA_DISCONNECTED;
}
CameraMetadata rawRequest;
- Status status = Status::NO_ERROR;
+ Status status = Status::UNKNOWN_ERROR;
auto remoteRet = mRemote->createDefaultRequest(
utils::convertToHidl(templateId),
[&status, &rawRequest](auto s, const hidl_vec<uint8_t> &metadata) {
@@ -161,14 +172,7 @@
ALOGE("%s: Couldn't create default request", __FUNCTION__);
}
});
- if (!remoteRet.isOk()) {
- ALOGE("%s: Transaction error while trying to create default request %s", __FUNCTION__,
- remoteRet.description().c_str());
- return ACAMERA_ERROR_UNKNOWN;
- }
- if (status != Status::NO_ERROR) {
- return utils::convertFromHidl(status);
- }
+ CHECK_TRANSACTION_AND_RET(remoteRet, status, "createDefaultRequest()")
ACaptureRequest* outReq = new ACaptureRequest();
outReq->settings = new ACameraMetadata(rawRequest.release(), ACameraMetadata::ACM_REQUEST);
if (physicalCameraIdList != nullptr) {
@@ -243,20 +247,15 @@
}
bool configSupported = false;
- Status status = Status::NO_ERROR;
+ Status status = Status::UNKNOWN_ERROR;
auto remoteRet = mRemote->isSessionConfigurationSupported(sessionConfig,
[&status, &configSupported](auto s, auto supported) {
status = s;
configSupported = supported;
});
- if (status == Status::INVALID_OPERATION) {
- return ACAMERA_ERROR_UNSUPPORTED_OPERATION;
- } else if (!remoteRet.isOk()) {
- return ACAMERA_ERROR_UNKNOWN;
- } else {
- return configSupported ? ACAMERA_OK : ACAMERA_ERROR_STREAM_CONFIGURE_FAIL;
- }
+ CHECK_TRANSACTION_AND_RET(remoteRet, status, "isSessionConfigurationSupported()");
+ return configSupported ? ACAMERA_OK : ACAMERA_ERROR_STREAM_CONFIGURE_FAIL;
}
static void addMetadataToPhysicalCameraSettings(const CameraMetadata *metadata,
@@ -525,16 +524,13 @@
mRepeatingSequenceId = REQUEST_ID_NONE;
int64_t lastFrameNumber;
- Status status = Status::NO_ERROR;
+ Status status = Status::UNKNOWN_ERROR;
auto remoteRet = mRemote->cancelRepeatingRequest(
[&status, &lastFrameNumber](Status s, auto frameNumber) {
status = s;
lastFrameNumber = frameNumber;
});
- if (!remoteRet.isOk() || status != Status::NO_ERROR) {
- ALOGE("%s: Unable to cancel active repeating request", __FUNCTION__);
- return utils::convertFromHidl(status);
- }
+ CHECK_TRANSACTION_AND_RET(remoteRet, status, "cancelRepeatingRequest()");
checkRepeatingSequenceCompleteLocked(repeatingSequenceId, lastFrameNumber);
}
return ACAMERA_OK;
@@ -582,15 +578,12 @@
}
int64_t lastFrameNumber;
- Status status;
+ Status status = Status::UNKNOWN_ERROR;
auto remoteRet = mRemote->flush([&status, &lastFrameNumber](auto s, auto frameNumber) {
status = s;
lastFrameNumber = frameNumber;
});
- if (!remoteRet.isOk() || status != Status::NO_ERROR) {
- ALOGE("%s: Abort captures failed", __FUNCTION__);
- return utils::convertFromHidl(status);
- }
+ CHECK_TRANSACTION_AND_RET(remoteRet, status, "flush()")
if (mRepeatingSequenceId != REQUEST_ID_NONE) {
checkRepeatingSequenceCompleteLocked(mRepeatingSequenceId, lastFrameNumber);
}
@@ -611,10 +604,7 @@
}
auto remoteRet = mRemote->waitUntilIdle();
- if (!remoteRet.isOk()) {
- ALOGE("%s: Transaction waitUntilIdle failed", __FUNCTION__);
- return utils::convertFromHidl(remoteRet);
- }
+ CHECK_TRANSACTION_AND_RET(remoteRet, remoteRet, "waitUntilIdle()")
return ACAMERA_OK;
}
@@ -689,34 +679,25 @@
mIdle = true;
auto remoteRet = mRemote->beginConfigure();
- if (!remoteRet.isOk()|| remoteRet != Status::NO_ERROR) {
- ALOGE("Camera device %s begin configure failed", getId());
- return utils::convertFromHidl(remoteRet);
- }
+ CHECK_TRANSACTION_AND_RET(remoteRet, remoteRet, "beginConfigure()")
// delete to-be-deleted streams
for (auto streamId : deleteList) {
remoteRet = mRemote->deleteStream(streamId);
- if (!remoteRet.isOk() || remoteRet != Status::NO_ERROR) {
- ALOGE("Camera device %s failed to remove stream %d", getId(), streamId);
- return utils::convertFromHidl(remoteRet);
- }
+ CHECK_TRANSACTION_AND_RET(remoteRet, remoteRet, "deleteStream()")
mConfiguredOutputs.erase(streamId);
}
// add new streams
for (auto outputPair : addSet) {
int streamId;
- Status status;
+ Status status = Status::UNKNOWN_ERROR;
auto ret = mRemote->createStream(outputPair.second,
[&status, &streamId](Status s, auto stream_id) {
status = s;
streamId = stream_id;
});
- if (!remoteRet.isOk() || status != Status::NO_ERROR) {
- ALOGE("Camera device %s failed to create stream", getId());
- return utils::convertFromHidl(status);
- }
+ CHECK_TRANSACTION_AND_RET(ret, status, "createStream()")
mConfiguredOutputs.insert(std::make_pair(streamId, outputPair));
}
@@ -729,11 +710,8 @@
params.unlock(params_metadata);
}
remoteRet = mRemote->endConfigure(StreamConfigurationMode::NORMAL_MODE, hidlParams);
- if (!remoteRet.isOk()) {
- ALOGE("Transaction error: endConfigure failed %s", remoteRet.description().c_str());
- }
-
- return utils::convertFromHidl(remoteRet);
+ CHECK_TRANSACTION_AND_RET(remoteRet, remoteRet, "endConfigure()")
+ return ACAMERA_OK;
}
void
diff --git a/services/camera/libcameraservice/device3/Camera3Device.cpp b/services/camera/libcameraservice/device3/Camera3Device.cpp
index 00f0d86..9771f9e 100644
--- a/services/camera/libcameraservice/device3/Camera3Device.cpp
+++ b/services/camera/libcameraservice/device3/Camera3Device.cpp
@@ -2876,7 +2876,8 @@
config.streams = streams.editArray();
// Do the HAL configuration; will potentially touch stream
- // max_buffers, usage, priv fields.
+ // max_buffers, usage, and priv fields, as well as data_space and format
+ // fields for IMPLEMENTATION_DEFINED formats.
const camera_metadata_t *sessionBuffer = sessionParams.getAndLock();
res = mInterface->configureStreams(sessionBuffer, &config, bufferSizes);
@@ -4202,10 +4203,19 @@
dst3_2.streamType = streamType;
dst3_2.width = src->width;
dst3_2.height = src->height;
- dst3_2.format = mapToPixelFormat(src->format);
dst3_2.usage = mapToConsumerUsage(cam3stream->getUsage());
- dst3_2.dataSpace = mapToHidlDataspace(src->data_space);
dst3_2.rotation = mapToStreamRotation((camera3_stream_rotation_t) src->rotation);
+ // For HidlSession version 3.5 or newer, the format and dataSpace sent
+ // to HAL are original, not the overriden ones.
+ if (mHidlSession_3_5 != nullptr) {
+ dst3_2.format = mapToPixelFormat(cam3stream->isFormatOverridden() ?
+ cam3stream->getOriginalFormat() : src->format);
+ dst3_2.dataSpace = mapToHidlDataspace(cam3stream->isDataSpaceOverridden() ?
+ cam3stream->getOriginalDataSpace() : src->data_space);
+ } else {
+ dst3_2.format = mapToPixelFormat(src->format);
+ dst3_2.dataSpace = mapToHidlDataspace(src->data_space);
+ }
dst3_4.v3_2 = dst3_2;
dst3_4.bufferSize = bufferSizes[i];
if (src->physical_camera_id != nullptr) {
@@ -4266,7 +4276,7 @@
return OK;
};
- // See if we have v3.4 or v3.3 HAL
+ // See which version of HAL we have
if (mHidlSession_3_5 != nullptr) {
ALOGV("%s: v3.5 device found", __FUNCTION__);
device::V3_5::StreamConfiguration requestedConfiguration3_5;
@@ -4281,7 +4291,6 @@
} else if (mHidlSession_3_4 != nullptr) {
// We do; use v3.4 for the call
ALOGV("%s: v3.4 device found", __FUNCTION__);
- device::V3_4::HalStreamConfiguration finalConfiguration3_4;
auto err = mHidlSession_3_4->configureStreams_3_4(
requestedConfiguration3_4, configStream34Cb);
res = postprocConfigStream34(err);
@@ -4352,12 +4361,12 @@
device::V3_3::HalStream &src = finalConfiguration.streams[realIdx];
Camera3Stream* dstStream = Camera3Stream::cast(dst);
- dstStream->setFormatOverride(false);
- dstStream->setDataSpaceOverride(false);
int overrideFormat = mapToFrameworkFormat(src.v3_2.overrideFormat);
android_dataspace overrideDataSpace = mapToFrameworkDataspace(src.overrideDataSpace);
if (dst->format != HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED) {
+ dstStream->setFormatOverride(false);
+ dstStream->setDataSpaceOverride(false);
if (dst->format != overrideFormat) {
ALOGE("%s: Stream %d: Format override not allowed for format 0x%x", __FUNCTION__,
streamId, dst->format);
@@ -4367,10 +4376,13 @@
streamId, dst->format);
}
} else {
- dstStream->setFormatOverride((dst->format != overrideFormat) ? true : false);
- dstStream->setDataSpaceOverride((dst->data_space != overrideDataSpace) ? true : false);
-
+ bool needFormatOverride =
+ requestedConfiguration3_2.streams[i].format != src.v3_2.overrideFormat;
+ bool needDataspaceOverride =
+ requestedConfiguration3_2.streams[i].dataSpace != src.overrideDataSpace;
// Override allowed with IMPLEMENTATION_DEFINED
+ dstStream->setFormatOverride(needFormatOverride);
+ dstStream->setDataSpaceOverride(needDataspaceOverride);
dst->format = overrideFormat;
dst->data_space = overrideDataSpace;
}
diff --git a/services/camera/libcameraservice/device3/Camera3SharedOutputStream.cpp b/services/camera/libcameraservice/device3/Camera3SharedOutputStream.cpp
index e3b74d7..86b45cb 100644
--- a/services/camera/libcameraservice/device3/Camera3SharedOutputStream.cpp
+++ b/services/camera/libcameraservice/device3/Camera3SharedOutputStream.cpp
@@ -55,7 +55,7 @@
mStreamSplitter = new Camera3StreamSplitter(mUseHalBufManager);
- uint64_t usage;
+ uint64_t usage = 0;
getEndpointUsage(&usage);
std::unordered_map<size_t, sp<Surface>> initialSurfaces;
diff --git a/services/camera/libcameraservice/device3/Camera3Stream.cpp b/services/camera/libcameraservice/device3/Camera3Stream.cpp
index d73a2f9..6d76802 100644
--- a/services/camera/libcameraservice/device3/Camera3Stream.cpp
+++ b/services/camera/libcameraservice/device3/Camera3Stream.cpp
@@ -67,6 +67,8 @@
mBufferLimitLatency(kBufferLimitLatencyBinSize),
mFormatOverridden(false),
mOriginalFormat(-1),
+ mDataSpaceOverridden(false),
+ mOriginalDataSpace(HAL_DATASPACE_UNKNOWN),
mPhysicalCameraId(physicalCameraId),
mLastTimestamp(0) {
@@ -121,7 +123,9 @@
void Camera3Stream::setFormatOverride(bool formatOverridden) {
mFormatOverridden = formatOverridden;
- if (formatOverridden) mOriginalFormat = camera3_stream::format;
+ if (formatOverridden && mOriginalFormat == -1) {
+ mOriginalFormat = camera3_stream::format;
+ }
}
bool Camera3Stream::isFormatOverridden() const {
@@ -134,7 +138,9 @@
void Camera3Stream::setDataSpaceOverride(bool dataSpaceOverridden) {
mDataSpaceOverridden = dataSpaceOverridden;
- if (dataSpaceOverridden) mOriginalDataSpace = camera3_stream::data_space;
+ if (dataSpaceOverridden && mOriginalDataSpace == HAL_DATASPACE_UNKNOWN) {
+ mOriginalDataSpace = camera3_stream::data_space;
+ }
}
bool Camera3Stream::isDataSpaceOverridden() const {