Commit e59373c3 authored by Shik Chen's avatar Shik Chen Committed by Commit Bot

Extract common logic of building metadata entry.

Bug: b:111902891
Test: Pass capture_unittests.
Change-Id: Ia9c207055613f0d2db98b22e435746a9818676dd
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1911880
Auto-Submit: Shik Chen <shik@chromium.org>
Reviewed-by: default avatarWei Lee <wtlee@chromium.org>
Commit-Queue: Shik Chen <shik@chromium.org>
Cr-Commit-Position: refs/heads/master@{#714845}
parent 54c07418
......@@ -157,15 +157,9 @@ void CameraAppDeviceImpl::SetReprocessOption(
std::move(reprocess_result_callback));
if (effect == cros::mojom::Effect::PORTRAIT_MODE) {
std::vector<uint8_t> portrait_mode_value(sizeof(int32_t));
*reinterpret_cast<int32_t*>(portrait_mode_value.data()) = 1;
cros::mojom::CameraMetadataEntryPtr e =
cros::mojom::CameraMetadataEntry::New();
e->tag =
static_cast<cros::mojom::CameraMetadataTag>(kPortraitModeVendorKey);
e->type = cros::mojom::EntryType::TYPE_INT32;
e->count = 1;
e->data = std::move(portrait_mode_value);
auto e = BuildMetadataEntry(
static_cast<cros::mojom::CameraMetadataTag>(kPortraitModeVendorKey),
int32_t{1});
task.extra_metadata.push_back(std::move(e));
}
......
......@@ -5,6 +5,8 @@
#ifndef MEDIA_CAPTURE_VIDEO_CHROMEOS_CAMERA_METADATA_UTILS_H_
#define MEDIA_CAPTURE_VIDEO_CHROMEOS_CAMERA_METADATA_UTILS_H_
#include <base/stl_util.h>
#include "media/capture/capture_export.h"
#include "media/capture/video/chromeos/mojom/camera_metadata.mojom.h"
......@@ -69,6 +71,38 @@ CAPTURE_EXPORT void SortCameraMetadata(
CAPTURE_EXPORT void MergeMetadata(cros::mojom::CameraMetadataPtr* to,
const cros::mojom::CameraMetadataPtr& from);
template <typename T>
CAPTURE_EXPORT cros::mojom::CameraMetadataEntryPtr BuildMetadataEntry(
cros::mojom::CameraMetadataTag tag,
T value) {
static constexpr cros::mojom::CameraMetadataTag kInt32EnumTags[] = {
cros::mojom::CameraMetadataTag::
ANDROID_DEPTH_AVAILABLE_DEPTH_STREAM_CONFIGURATIONS,
cros::mojom::CameraMetadataTag::ANDROID_SCALER_AVAILABLE_FORMATS,
cros::mojom::CameraMetadataTag::
ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS,
cros::mojom::CameraMetadataTag::ANDROID_SENSOR_TEST_PATTERN_MODE,
cros::mojom::CameraMetadataTag::ANDROID_SYNC_MAX_LATENCY,
};
cros::mojom::CameraMetadataEntryPtr e =
cros::mojom::CameraMetadataEntry::New();
e->tag = tag;
e->type = entry_type_of<T>::value;
e->count = 1;
// Mojo uses int32_t as the underlying type of enum classes, but
// the camera metadata expect uint8_t for them.
if (std::is_enum<T>::value && !base::Contains(kInt32EnumTags, tag)) {
e->data.push_back(base::checked_cast<uint8_t>(value));
} else {
e->data.resize(sizeof(T));
memcpy(e->data.data(), &value, e->data.size());
}
return e;
}
} // namespace media
#endif // MEDIA_CAPTURE_VIDEO_CHROMEOS_CAMERA_METADATA_UTILS_H_
......@@ -228,42 +228,27 @@ void RequestManager::UnsetRepeatingCaptureMetadata(
void RequestManager::SetJpegOrientation(
cros::mojom::CameraMetadataPtr* settings) {
std::vector<uint8_t> frame_orientation(sizeof(int32_t));
*reinterpret_cast<int32_t*>(frame_orientation.data()) =
base::checked_cast<int32_t>(device_context_->GetCameraFrameOrientation());
cros::mojom::CameraMetadataEntryPtr e =
cros::mojom::CameraMetadataEntry::New();
e->tag = cros::mojom::CameraMetadataTag::ANDROID_JPEG_ORIENTATION;
e->type = cros::mojom::EntryType::TYPE_INT32;
e->count = 1;
e->data = std::move(frame_orientation);
auto e = BuildMetadataEntry(
cros::mojom::CameraMetadataTag::ANDROID_JPEG_ORIENTATION,
base::checked_cast<int32_t>(
device_context_->GetCameraFrameOrientation()));
AddOrUpdateMetadataEntry(settings, std::move(e));
}
void RequestManager::SetSensorTimestamp(
cros::mojom::CameraMetadataPtr* settings,
uint64_t shutter_timestamp) {
std::vector<uint8_t> sensor_timestamp(sizeof(int64_t));
*reinterpret_cast<int64_t*>(sensor_timestamp.data()) =
base::checked_cast<int64_t>(shutter_timestamp);
cros::mojom::CameraMetadataEntryPtr e =
cros::mojom::CameraMetadataEntry::New();
e->tag = cros::mojom::CameraMetadataTag::ANDROID_SENSOR_TIMESTAMP;
e->type = cros::mojom::EntryType::TYPE_INT64;
e->count = 1;
e->data = sensor_timestamp;
auto e = BuildMetadataEntry(
cros::mojom::CameraMetadataTag::ANDROID_SENSOR_TIMESTAMP,
base::checked_cast<int64_t>(shutter_timestamp));
AddOrUpdateMetadataEntry(settings, std::move(e));
}
void RequestManager::SetZeroShutterLag(cros::mojom::CameraMetadataPtr* settings,
bool enabled) {
std::vector<uint8_t> control_enable_zsl = {static_cast<uint8_t>(enabled)};
cros::mojom::CameraMetadataEntryPtr e =
cros::mojom::CameraMetadataEntry::New();
e->tag = cros::mojom::CameraMetadataTag::ANDROID_CONTROL_ENABLE_ZSL;
e->type = cros::mojom::EntryType::TYPE_BYTE;
e->count = 1;
e->data = control_enable_zsl;
auto e = BuildMetadataEntry(
cros::mojom::CameraMetadataTag::ANDROID_CONTROL_ENABLE_ZSL,
static_cast<uint8_t>(enabled));
AddOrUpdateMetadataEntry(settings, std::move(e));
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment