Exposes a handle to AHardwareBuffers through a new GpuBuffer view
PiperOrigin-RevId: 580754933
This commit is contained in:
parent
252c7eef25
commit
7c5c216652
|
@ -124,6 +124,15 @@ cc_library(
|
|||
],
|
||||
)
|
||||
|
||||
cc_library(
|
||||
name = "ahwb_view",
|
||||
hdrs = ["ahwb_view.h"],
|
||||
deps = [
|
||||
"//mediapipe/framework:port",
|
||||
"//mediapipe/gpu:gpu_buffer_storage",
|
||||
],
|
||||
)
|
||||
|
||||
cc_library(
|
||||
name = "affine_transform",
|
||||
srcs = ["affine_transform.cc"],
|
||||
|
|
54
mediapipe/framework/formats/ahwb_view.h
Normal file
54
mediapipe/framework/formats/ahwb_view.h
Normal file
|
@ -0,0 +1,54 @@
|
|||
#ifndef MEDIAPIPE_FRAMEWORK_FORMATS_AHWB_VIEW_H_
|
||||
#define MEDIAPIPE_FRAMEWORK_FORMATS_AHWB_VIEW_H_
|
||||
|
||||
#include "mediapipe/framework/port.h"
|
||||
#ifdef MEDIAPIPE_GPU_BUFFER_USE_AHWB
|
||||
#include <android/hardware_buffer.h>
|
||||
|
||||
#include "mediapipe/gpu/gpu_buffer_storage.h"
|
||||
|
||||
namespace mediapipe {
|
||||
|
||||
// Wrapper to facilitate short lived access to Android Hardware Buffer objects.
|
||||
// Intended use cases:
|
||||
// - Extracting an AHWB for processing in another library after it's produced by
|
||||
// MediaPipe.
|
||||
// - Sending AHWBs to compute devices that are able to map the memory for their
|
||||
// own usage.
|
||||
// The AHWB abstractions in GpuBuffer and Tensor are likely more suitable for
|
||||
// other CPU/GPU uses of AHWBs.
|
||||
class AhwbView {
|
||||
public:
|
||||
explicit AhwbView(AHardwareBuffer* handle) : handle_(handle) {}
|
||||
// Non-copyable
|
||||
AhwbView(const AhwbView&) = delete;
|
||||
AhwbView& operator=(const AhwbView&) = delete;
|
||||
// Non-movable
|
||||
AhwbView(AhwbView&&) = delete;
|
||||
|
||||
// Only supports synchronous usage. All users of GetHandle must finish
|
||||
// accessing the buffer before this view object is destroyed to avoid race
|
||||
// conditions.
|
||||
// TODO: Support asynchronous usage.
|
||||
const AHardwareBuffer* GetHandle() const { return handle_; }
|
||||
|
||||
private:
|
||||
const AHardwareBuffer* handle_;
|
||||
};
|
||||
|
||||
namespace internal {
|
||||
// Makes this class available as a GpuBuffer view.
|
||||
template <>
|
||||
class ViewProvider<AhwbView> {
|
||||
public:
|
||||
virtual ~ViewProvider() = default;
|
||||
virtual const AhwbView GetReadView(types<AhwbView>) const = 0;
|
||||
virtual AhwbView GetWriteView(types<AhwbView>) = 0;
|
||||
};
|
||||
|
||||
} // namespace internal
|
||||
|
||||
} // namespace mediapipe
|
||||
|
||||
#endif // MEDIAPIPE_GPU_BUFFER_USE_AHWB
|
||||
#endif // MEDIAPIPE_FRAMEWORK_FORMATS_AHWB_VIEW_H_
|
|
@ -104,4 +104,9 @@
|
|||
#endif
|
||||
#endif // MEDIAPIPE_HAS_RTTI
|
||||
|
||||
// AHardware buffers are only available since Android API 26.
|
||||
#if (__ANDROID_API__ >= 26)
|
||||
#define MEDIAPIPE_GPU_BUFFER_USE_AHWB 1
|
||||
#endif
|
||||
|
||||
#endif // MEDIAPIPE_FRAMEWORK_PORT_H_
|
||||
|
|
|
@ -511,12 +511,19 @@ cc_library(
|
|||
],
|
||||
}),
|
||||
deps = [
|
||||
":gl_base_hdr",
|
||||
":gl_context",
|
||||
":gl_texture_buffer",
|
||||
":gl_texture_view",
|
||||
":gpu_buffer_format",
|
||||
":gpu_buffer_storage",
|
||||
":image_frame_view",
|
||||
"//mediapipe/framework:port",
|
||||
"//mediapipe/framework/formats:ahwb_view",
|
||||
"//mediapipe/framework/formats:image_frame",
|
||||
"//mediapipe/framework/port:ret_check",
|
||||
"//third_party/GL:EGL_headers",
|
||||
"@com_google_absl//absl/log:absl_check",
|
||||
"@com_google_absl//absl/strings:str_format",
|
||||
],
|
||||
)
|
||||
|
|
Loading…
Reference in New Issue
Block a user