| // Copyright 2019 The Chromium Authors. 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_GPU_CHROMEOS_GPU_BUFFER_LAYOUT_H_ |
| #define MEDIA_GPU_CHROMEOS_GPU_BUFFER_LAYOUT_H_ |
| |
| #include <ostream> |
| #include <vector> |
| |
| #include "media/base/color_plane_layout.h" |
| #include "media/gpu/chromeos/fourcc.h" |
| #include "media/gpu/media_gpu_export.h" |
| #include "third_party/abseil-cpp/absl/types/optional.h" |
| #include "ui/gfx/geometry/size.h" |
| |
| namespace media { |
| |
| class MEDIA_GPU_EXPORT GpuBufferLayout { |
| public: |
| static absl::optional<GpuBufferLayout> Create( |
| const Fourcc& fourcc, |
| const gfx::Size& size, |
| const std::vector<ColorPlaneLayout>& planes, |
| uint64_t modifier); |
| GpuBufferLayout() = delete; |
| GpuBufferLayout(const GpuBufferLayout&); |
| GpuBufferLayout(GpuBufferLayout&&); |
| GpuBufferLayout& operator=(const GpuBufferLayout&); |
| ~GpuBufferLayout(); |
| |
| bool operator==(const GpuBufferLayout& rhs) const; |
| bool operator!=(const GpuBufferLayout& rhs) const; |
| |
| const Fourcc& fourcc() const { return fourcc_; } |
| const gfx::Size& size() const { return size_; } |
| const std::vector<ColorPlaneLayout>& planes() const { return planes_; } |
| uint64_t modifier() const { return modifier_; } |
| |
| private: |
| GpuBufferLayout(const Fourcc& fourcc, |
| const gfx::Size& size, |
| const std::vector<ColorPlaneLayout>& planes, |
| uint64_t modifier); |
| |
| // Fourcc format of the buffer. |
| Fourcc fourcc_; |
| // Width and height of the buffer in pixels. This must include pixel |
| // data for the whole image; i.e. for YUV formats with subsampled chroma |
| // planes, in the case that the visible portion of the image does not line up |
| // on a sample boundary, |size_| must be rounded up appropriately and |
| // the pixel data provided for the odd pixels. |
| gfx::Size size_; |
| // Layout property for each color planes, e.g. stride and buffer offset. |
| std::vector<ColorPlaneLayout> planes_; |
| // DRM format modifier associated with buffer. |
| uint64_t modifier_; |
| }; |
| |
| // Outputs GpuBufferLayout to stream. |
| MEDIA_GPU_EXPORT std::ostream& operator<<(std::ostream& ostream, |
| const GpuBufferLayout& layout); |
| |
| } // namespace media |
| |
| #endif // MEDIA_GPU_CHROMEOS_GPU_BUFFER_LAYOUT_H_ |