resolve merge conflicts of 00236ffa71 to master

Bug: None
Test: I solemnly swear I tested this conflict resolution.
Change-Id: I07e452ffd8dbe4492489d47459eb3662c76b78dd
This commit is contained in:
Yin-Chia Yeh
2019-03-12 15:32:31 -07:00

View File

@@ -782,6 +782,8 @@ public:
void verifySessionReconfigurationQuery(sp<device::V3_5::ICameraDeviceSession> session3_5,
camera_metadata* oldSessionParams, camera_metadata* newSessionParams);
bool isDepthOnly(camera_metadata_t* staticMeta);
static Status getAvailableOutputStreams(camera_metadata_t *staticMeta,
std::vector<AvailableStream> &outputStreams,
const AvailableStream *threshold = nullptr);
@@ -793,6 +795,10 @@ public:
std::unordered_set<std::string> *physicalIds/*out*/);
static Status getSupportedKeys(camera_metadata_t *staticMeta,
uint32_t tagId, std::unordered_set<int32_t> *requestIDs/*out*/);
static void fillOutputStreams(camera_metadata_ro_entry_t* entry,
std::vector<AvailableStream>& outputStreams,
const AvailableStream *threshold = nullptr,
const int32_t availableConfigOutputTag = 0u);
static void constructFilteredSettings(const sp<ICameraDeviceSession>& session,
const std::unordered_set<int32_t>& availableKeys, RequestTemplate reqTemplate,
android::hardware::camera::common::V1_0::helper::CameraMetadata* defaultSettings/*out*/,
@@ -2845,14 +2851,24 @@ TEST_F(CameraHidlTest, configureStreamsAvailableOutputs) {
uint32_t streamConfigCounter = 0;
for (auto& it : outputStreams) {
V3_2::Stream stream3_2;
bool isJpeg = static_cast<PixelFormat>(it.format) == PixelFormat::BLOB;
V3_2::DataspaceFlags dataspaceFlag = 0;
switch (static_cast<PixelFormat>(it.format)) {
case PixelFormat::BLOB:
dataspaceFlag = static_cast<V3_2::DataspaceFlags>(Dataspace::V0_JFIF);
break;
case PixelFormat::Y16:
dataspaceFlag = static_cast<V3_2::DataspaceFlags>(Dataspace::DEPTH);
break;
default:
dataspaceFlag = static_cast<V3_2::DataspaceFlags>(Dataspace::UNKNOWN);
}
stream3_2 = {streamId,
StreamType::OUTPUT,
static_cast<uint32_t>(it.width),
static_cast<uint32_t>(it.height),
static_cast<PixelFormat>(it.format),
GRALLOC1_CONSUMER_USAGE_HWCOMPOSER,
(isJpeg) ? static_cast<V3_2::DataspaceFlags>(Dataspace::V0_JFIF) : 0,
dataspaceFlag,
StreamRotation::ROTATION_0};
::android::hardware::hidl_vec<V3_2::Stream> streams3_2 = {stream3_2};
::android::hardware::camera::device::V3_5::StreamConfiguration config3_5;
@@ -3415,6 +3431,14 @@ TEST_F(CameraHidlTest, configureStreamsPreviewStillOutputs) {
castSession(session, deviceVersion, &session3_3, &session3_4, &session3_5);
castDevice(cameraDevice, deviceVersion, &cameraDevice3_5);
// Check if camera support depth only
if (isDepthOnly(staticMeta)) {
free_camera_metadata(staticMeta);
ret = session->close();
ASSERT_TRUE(ret.isOk());
continue;
}
outputBlobStreams.clear();
ASSERT_EQ(Status::OK,
getAvailableOutputStreams(staticMeta, outputBlobStreams,
@@ -3735,6 +3759,14 @@ TEST_F(CameraHidlTest, configureStreamsVideoStillOutputs) {
castSession(session, deviceVersion, &session3_3, &session3_4, &session3_5);
castDevice(cameraDevice, deviceVersion, &cameraDevice3_5);
// Check if camera support depth only
if (isDepthOnly(staticMeta)) {
free_camera_metadata(staticMeta);
ret = session->close();
ASSERT_TRUE(ret.isOk());
continue;
}
outputBlobStreams.clear();
ASSERT_EQ(Status::OK,
getAvailableOutputStreams(staticMeta, outputBlobStreams,
@@ -4723,38 +4755,56 @@ TEST_F(CameraHidlTest, providerDeviceStateNotification) {
Status CameraHidlTest::getAvailableOutputStreams(camera_metadata_t *staticMeta,
std::vector<AvailableStream> &outputStreams,
const AvailableStream *threshold) {
AvailableStream depthPreviewThreshold = {kMaxPreviewWidth, kMaxPreviewHeight,
static_cast<int32_t>(PixelFormat::Y16)};
if (nullptr == staticMeta) {
return Status::ILLEGAL_ARGUMENT;
}
camera_metadata_ro_entry entry;
int rc = find_camera_metadata_ro_entry(staticMeta,
ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS, &entry);
if ((0 != rc) || (0 != (entry.count % 4))) {
camera_metadata_ro_entry scalarEntry;
camera_metadata_ro_entry depthEntry;
int foundScalar = find_camera_metadata_ro_entry(staticMeta,
ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS, &scalarEntry);
int foundDepth = find_camera_metadata_ro_entry(staticMeta,
ANDROID_DEPTH_AVAILABLE_DEPTH_STREAM_CONFIGURATIONS, &depthEntry);
if ((0 != foundScalar || (0 != (scalarEntry.count % 4))) &&
(0 != foundDepth || (0 != (depthEntry.count % 4)))) {
return Status::ILLEGAL_ARGUMENT;
}
for (size_t i = 0; i < entry.count; i+=4) {
if (ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS_OUTPUT ==
entry.data.i32[i + 3]) {
if(foundScalar == 0 && (0 == (scalarEntry.count % 4))) {
fillOutputStreams(&scalarEntry, outputStreams, threshold,
ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS_OUTPUT);
}
if(foundDepth == 0 && (0 == (depthEntry.count % 4))) {
fillOutputStreams(&depthEntry, outputStreams, &depthPreviewThreshold,
ANDROID_DEPTH_AVAILABLE_DEPTH_STREAM_CONFIGURATIONS_OUTPUT);
}
return Status::OK;
}
void CameraHidlTest::fillOutputStreams(camera_metadata_ro_entry_t* entry,
std::vector<AvailableStream>& outputStreams, const AvailableStream* threshold,
const int32_t availableConfigOutputTag) {
for (size_t i = 0; i < entry->count; i+=4) {
if (availableConfigOutputTag == entry->data.i32[i + 3]) {
if(nullptr == threshold) {
AvailableStream s = {entry.data.i32[i+1],
entry.data.i32[i+2], entry.data.i32[i]};
AvailableStream s = {entry->data.i32[i+1],
entry->data.i32[i+2], entry->data.i32[i]};
outputStreams.push_back(s);
} else {
if ((threshold->format == entry.data.i32[i]) &&
(threshold->width >= entry.data.i32[i+1]) &&
(threshold->height >= entry.data.i32[i+2])) {
AvailableStream s = {entry.data.i32[i+1],
entry.data.i32[i+2], threshold->format};
if ((threshold->format == entry->data.i32[i]) &&
(threshold->width >= entry->data.i32[i+1]) &&
(threshold->height >= entry->data.i32[i+2])) {
AvailableStream s = {entry->data.i32[i+1],
entry->data.i32[i+2], threshold->format};
outputStreams.push_back(s);
}
}
}
}
return Status::OK;
}
// Get max jpeg buffer size in android.jpeg.maxSize
@@ -5226,6 +5276,37 @@ void CameraHidlTest::configurePreviewStreams3_4(const std::string &name, int32_t
ASSERT_TRUE(ret.isOk());
}
bool CameraHidlTest::isDepthOnly(camera_metadata_t* staticMeta) {
camera_metadata_ro_entry scalarEntry;
camera_metadata_ro_entry depthEntry;
int rc = find_camera_metadata_ro_entry(
staticMeta, ANDROID_REQUEST_AVAILABLE_CAPABILITIES, &scalarEntry);
if (rc == 0) {
for (uint32_t i = 0; i < scalarEntry.count; i++) {
if (scalarEntry.data.u8[i] == ANDROID_REQUEST_AVAILABLE_CAPABILITIES_BACKWARD_COMPATIBLE) {
return false;
}
}
}
for (uint32_t i = 0; i < scalarEntry.count; i++) {
if (scalarEntry.data.u8[i] == ANDROID_REQUEST_AVAILABLE_CAPABILITIES_DEPTH_OUTPUT) {
rc = find_camera_metadata_ro_entry(
staticMeta, ANDROID_DEPTH_AVAILABLE_DEPTH_STREAM_CONFIGURATIONS, &depthEntry);
size_t i = 0;
if (rc == 0 && depthEntry.data.i32[i] == static_cast<int32_t>(PixelFormat::Y16)) {
// only Depth16 format is supported now
return true;
}
break;
}
}
return false;
}
// Open a device session and configure a preview stream.
void CameraHidlTest::configurePreviewStream(const std::string &name, int32_t deviceVersion,
sp<ICameraProvider> provider,
@@ -5316,11 +5397,20 @@ void CameraHidlTest::configurePreviewStream(const std::string &name, int32_t dev
ASSERT_EQ(Status::OK, rc);
ASSERT_FALSE(outputPreviewStreams.empty());
V3_2::DataspaceFlags dataspaceFlag = 0;
switch (static_cast<PixelFormat>(outputPreviewStreams[0].format)) {
case PixelFormat::Y16:
dataspaceFlag = static_cast<V3_2::DataspaceFlags>(Dataspace::DEPTH);
break;
default:
dataspaceFlag = static_cast<V3_2::DataspaceFlags>(Dataspace::UNKNOWN);
}
V3_2::Stream stream3_2 = {0, StreamType::OUTPUT,
static_cast<uint32_t> (outputPreviewStreams[0].width),
static_cast<uint32_t> (outputPreviewStreams[0].height),
static_cast<PixelFormat> (outputPreviewStreams[0].format),
GRALLOC1_CONSUMER_USAGE_HWCOMPOSER, 0, StreamRotation::ROTATION_0};
GRALLOC1_CONSUMER_USAGE_HWCOMPOSER, dataspaceFlag, StreamRotation::ROTATION_0};
::android::hardware::hidl_vec<V3_2::Stream> streams3_2 = {stream3_2};
::android::hardware::camera::device::V3_2::StreamConfiguration config3_2;
::android::hardware::camera::device::V3_4::StreamConfiguration config3_4;