sources += [
"video/tizen/ai_zoom_helper.cc",
"video/tizen/ai_zoom_helper.h",
+ "video/tizen/buffer_helper.cc",
+ "video/tizen/buffer_helper.h",
"video/tizen/camera.cc",
"video/tizen/camera.h",
"video/tizen/camera_utils.cc",
--- /dev/null
+// Copyright 2024 Samsung Electronics Inc. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "media/capture/video/tizen/buffer_helper.h"
+
+namespace media {
+
+I420BufferAccess GetI420BufferAccess(base::span<uint8_t> data,
+ const gfx::Size& dimensions) {
+ I420BufferAccess result;
+ result.y_plane_data = data.data();
+ result.u_plane_data =
+ result.y_plane_data +
+ media::VideoFrame::PlaneSize(media::PIXEL_FORMAT_I420,
+ media::VideoFrame::kYPlane, dimensions)
+ .GetArea();
+ result.v_plane_data =
+ result.u_plane_data +
+ media::VideoFrame::PlaneSize(media::PIXEL_FORMAT_I420,
+ media::VideoFrame::kUPlane, dimensions)
+ .GetArea();
+ result.y_plane_stride = VideoFrame::RowBytes(
+ VideoFrame::kYPlane, PIXEL_FORMAT_I420, dimensions.width());
+ result.uv_plane_stride = VideoFrame::RowBytes(
+ VideoFrame::kUVPlane, PIXEL_FORMAT_I420, dimensions.width());
+ return result;
+}
+
+I420BufferAccessStorage GetI420BufferAccess(
+ const media::VideoCaptureDevice::Client::Buffer& buffer,
+ const gfx::Size& dimensions) {
+ auto storage = buffer.handle_provider->GetHandleForInProcessAccess();
+ I420BufferAccessStorage result{GetI420BufferAccess(
+ base::span(storage->data(), storage->mapped_size()), dimensions)};
+ result.storage = std::move(storage);
+ return result;
+}
+
+NV12BufferAccess GetNV12BufferAccess(base::span<uint8_t> data,
+ const gfx::Size& dimensions) {
+ NV12BufferAccess result;
+ result.y_plane_data = data.data();
+ result.uv_plane_data =
+ result.y_plane_data +
+ media::VideoFrame::PlaneSize(media::PIXEL_FORMAT_NV12,
+ media::VideoFrame::kYPlane, dimensions)
+ .GetArea();
+ result.y_plane_stride = VideoFrame::RowBytes(
+ VideoFrame::kYPlane, PIXEL_FORMAT_NV12, dimensions.width());
+ result.uv_plane_stride = VideoFrame::RowBytes(
+ VideoFrame::kUVPlane, PIXEL_FORMAT_NV12, dimensions.width());
+ return result;
+}
+
+NV12BufferAccessStorage GetNV12BufferAccess(
+ const media::VideoCaptureDevice::Client::Buffer& buffer,
+ const gfx::Size& dimensions) {
+ auto storage = buffer.handle_provider->GetHandleForInProcessAccess();
+ NV12BufferAccessStorage result{GetNV12BufferAccess(
+ base::span(storage->data(), storage->mapped_size()), dimensions)};
+ result.storage = std::move(storage);
+ return result;
+}
+
+} // namespace media
--- /dev/null
+// Copyright 2024 Samsung Electronics Inc. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef MEDIA_CAPTURE_VIDEO_TIZEN_BUFFER_HELPER_H_
+#define MEDIA_CAPTURE_VIDEO_TIZEN_BUFFER_HELPER_H_
+
+#include <memory>
+
+#include "base/containers/span.h"
+#include "media/capture/video/video_capture_buffer_handle.h"
+#include "media/capture/video/video_capture_device.h"
+#include "ui/gfx/geometry/size.h"
+
+namespace media {
+
+struct I420BufferAccess {
+ uint8_t* y_plane_data;
+ uint8_t* u_plane_data;
+ uint8_t* v_plane_data;
+ int y_plane_stride;
+ int uv_plane_stride;
+};
+
+struct I420BufferAccessStorage : public I420BufferAccess {
+ std::unique_ptr<media::VideoCaptureBufferHandle> storage;
+};
+
+struct NV12BufferAccess {
+ uint8_t* y_plane_data;
+ uint8_t* uv_plane_data;
+ int y_plane_stride;
+ int uv_plane_stride;
+};
+
+struct NV12BufferAccessStorage : public NV12BufferAccess {
+ std::unique_ptr<media::VideoCaptureBufferHandle> storage;
+};
+
+I420BufferAccess GetI420BufferAccess(base::span<uint8_t> data,
+ const gfx::Size& dimensions);
+I420BufferAccessStorage GetI420BufferAccess(
+ const media::VideoCaptureDevice::Client::Buffer& buffer,
+ const gfx::Size& dimensions);
+
+NV12BufferAccess GetNV12BufferAccess(base::span<uint8_t> data,
+ const gfx::Size& dimensions);
+NV12BufferAccessStorage GetNV12BufferAccess(
+ const media::VideoCaptureDevice::Client::Buffer& buffer,
+ const gfx::Size& dimensions);
+
+} // namespace media
+
+#endif // MEDIA_CAPTURE_VIDEO_TIZEN_BUFFER_HELPER_H_
#include "media/base/video_types.h"
#include "media/capture/capture_switches.h"
#include "media/capture/video/tizen/ai_zoom_helper.h"
+#include "media/capture/video/tizen/buffer_helper.h"
#include "media/capture/video/tizen/camera.h"
#include "media/capture/video/tizen/camera_utils.h"
#include "media/capture/video/video_capture_device.h"
}
namespace {
-
-struct I420BufferAccess {
- uint8_t* y_plane_data;
- uint8_t* u_plane_data;
- uint8_t* v_plane_data;
- int y_plane_stride;
- int uv_plane_stride;
- std::unique_ptr<media::VideoCaptureBufferHandle> storage;
-};
-
-I420BufferAccess GetI420BufferAccess(
- const media::VideoCaptureDevice::Client::Buffer& buffer,
- const gfx::Size& dimensions) {
- I420BufferAccess result;
- result.storage = buffer.handle_provider->GetHandleForInProcessAccess();
- result.y_plane_data = result.storage->data();
- result.u_plane_data =
- result.y_plane_data +
- media::VideoFrame::PlaneSize(media::PIXEL_FORMAT_I420,
- media::VideoFrame::kYPlane, dimensions)
- .GetArea();
- result.v_plane_data =
- result.u_plane_data +
- media::VideoFrame::PlaneSize(media::PIXEL_FORMAT_I420,
- media::VideoFrame::kUPlane, dimensions)
- .GetArea();
- result.y_plane_stride = VideoFrame::RowBytes(
- VideoFrame::kYPlane, PIXEL_FORMAT_I420, dimensions.width());
- result.uv_plane_stride = VideoFrame::RowBytes(
- VideoFrame::kUVPlane, PIXEL_FORMAT_I420, dimensions.width());
- return result;
-}
-
libyuv::FourCC GetFourccFromPixelFormat(
const media::VideoCaptureFormat& format) {
switch (format.pixel_format) {