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( ...@@ -157,15 +157,9 @@ void CameraAppDeviceImpl::SetReprocessOption(
std::move(reprocess_result_callback)); std::move(reprocess_result_callback));
if (effect == cros::mojom::Effect::PORTRAIT_MODE) { if (effect == cros::mojom::Effect::PORTRAIT_MODE) {
std::vector<uint8_t> portrait_mode_value(sizeof(int32_t)); auto e = BuildMetadataEntry(
*reinterpret_cast<int32_t*>(portrait_mode_value.data()) = 1; static_cast<cros::mojom::CameraMetadataTag>(kPortraitModeVendorKey),
cros::mojom::CameraMetadataEntryPtr e = int32_t{1});
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);
task.extra_metadata.push_back(std::move(e)); task.extra_metadata.push_back(std::move(e));
} }
......
...@@ -5,6 +5,8 @@ ...@@ -5,6 +5,8 @@
#ifndef MEDIA_CAPTURE_VIDEO_CHROMEOS_CAMERA_METADATA_UTILS_H_ #ifndef MEDIA_CAPTURE_VIDEO_CHROMEOS_CAMERA_METADATA_UTILS_H_
#define 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/capture_export.h"
#include "media/capture/video/chromeos/mojom/camera_metadata.mojom.h" #include "media/capture/video/chromeos/mojom/camera_metadata.mojom.h"
...@@ -69,6 +71,38 @@ CAPTURE_EXPORT void SortCameraMetadata( ...@@ -69,6 +71,38 @@ CAPTURE_EXPORT void SortCameraMetadata(
CAPTURE_EXPORT void MergeMetadata(cros::mojom::CameraMetadataPtr* to, CAPTURE_EXPORT void MergeMetadata(cros::mojom::CameraMetadataPtr* to,
const cros::mojom::CameraMetadataPtr& from); 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 } // namespace media
#endif // MEDIA_CAPTURE_VIDEO_CHROMEOS_CAMERA_METADATA_UTILS_H_ #endif // MEDIA_CAPTURE_VIDEO_CHROMEOS_CAMERA_METADATA_UTILS_H_
...@@ -228,42 +228,27 @@ void RequestManager::UnsetRepeatingCaptureMetadata( ...@@ -228,42 +228,27 @@ void RequestManager::UnsetRepeatingCaptureMetadata(
void RequestManager::SetJpegOrientation( void RequestManager::SetJpegOrientation(
cros::mojom::CameraMetadataPtr* settings) { cros::mojom::CameraMetadataPtr* settings) {
std::vector<uint8_t> frame_orientation(sizeof(int32_t)); auto e = BuildMetadataEntry(
*reinterpret_cast<int32_t*>(frame_orientation.data()) = cros::mojom::CameraMetadataTag::ANDROID_JPEG_ORIENTATION,
base::checked_cast<int32_t>(device_context_->GetCameraFrameOrientation()); base::checked_cast<int32_t>(
cros::mojom::CameraMetadataEntryPtr e = device_context_->GetCameraFrameOrientation()));
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);
AddOrUpdateMetadataEntry(settings, std::move(e)); AddOrUpdateMetadataEntry(settings, std::move(e));
} }
void RequestManager::SetSensorTimestamp( void RequestManager::SetSensorTimestamp(
cros::mojom::CameraMetadataPtr* settings, cros::mojom::CameraMetadataPtr* settings,
uint64_t shutter_timestamp) { uint64_t shutter_timestamp) {
std::vector<uint8_t> sensor_timestamp(sizeof(int64_t)); auto e = BuildMetadataEntry(
*reinterpret_cast<int64_t*>(sensor_timestamp.data()) = cros::mojom::CameraMetadataTag::ANDROID_SENSOR_TIMESTAMP,
base::checked_cast<int64_t>(shutter_timestamp); 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;
AddOrUpdateMetadataEntry(settings, std::move(e)); AddOrUpdateMetadataEntry(settings, std::move(e));
} }
void RequestManager::SetZeroShutterLag(cros::mojom::CameraMetadataPtr* settings, void RequestManager::SetZeroShutterLag(cros::mojom::CameraMetadataPtr* settings,
bool enabled) { bool enabled) {
std::vector<uint8_t> control_enable_zsl = {static_cast<uint8_t>(enabled)}; auto e = BuildMetadataEntry(
cros::mojom::CameraMetadataEntryPtr e = cros::mojom::CameraMetadataTag::ANDROID_CONTROL_ENABLE_ZSL,
cros::mojom::CameraMetadataEntry::New(); static_cast<uint8_t>(enabled));
e->tag = cros::mojom::CameraMetadataTag::ANDROID_CONTROL_ENABLE_ZSL;
e->type = cros::mojom::EntryType::TYPE_BYTE;
e->count = 1;
e->data = control_enable_zsl;
AddOrUpdateMetadataEntry(settings, std::move(e)); 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