Project import generated by Copybara.

GitOrigin-RevId: 73d686c40057684f8bfaca285368bf1813f9fc26
This commit is contained in:
MediaPipe Team
2022-03-21 12:12:39 -07:00
committed by jqtang
parent e6c19885c6
commit cc6a2f7af6
266 changed files with 3658 additions and 1681 deletions
+12 -1
View File
@@ -11,6 +11,7 @@ cc_library(
"//mediapipe:apple": ["CFHolder.h"],
"//conditions:default": [],
}),
features = ["layering_check"],
visibility = ["//mediapipe/framework:mediapipe_internal"],
)
@@ -18,7 +19,10 @@ cc_library(
name = "util",
srcs = ["util.cc"],
hdrs = ["util.h"],
features = ["-parse_headers"],
features = [
"-parse_headers",
"layering_check",
],
linkopts = [
"-framework Accelerate",
"-framework CoreFoundation",
@@ -123,6 +127,13 @@ objc_library(
"CoreVideo",
],
visibility = ["//mediapipe/framework:mediapipe_internal"],
deps = [
] + select({
"//mediapipe:ios": [
],
"//mediapipe:macos": [
],
}),
)
objc_library(
-4
View File
@@ -24,10 +24,6 @@
@class MPPGraph;
namespace mediapipe {
struct GpuSharedData;
} // namespace mediapipe
/// A delegate that can receive frames from a MediaPipe graph.
@protocol MPPGraphDelegate <NSObject>
+1 -1
View File
@@ -169,7 +169,7 @@ void CallFrameDelegate(void* wrapperVoid, const std::string& streamName,
wrapper->_framesInFlight--;
CVPixelBufferRef pixelBuffer;
if (packetType == MPPPacketTypePixelBuffer)
pixelBuffer = packet.Get<mediapipe::GpuBuffer>().GetCVPixelBufferRef();
pixelBuffer = mediapipe::GetCVPixelBufferRef(packet.Get<mediapipe::GpuBuffer>());
else
pixelBuffer = packet.Get<mediapipe::Image>().GetCVPixelBufferRef();
if ([wrapper.delegate
+21 -9
View File
@@ -279,9 +279,12 @@ absl::StatusOr<CFHolder<CVPixelBufferRef>> CreateCVPixelBufferWithoutPool(
return MakeCFHolderAdopting(buffer);
}
void ReleaseMediaPipePacket(void* refcon, const void* base_address) {
auto packet = (mediapipe::Packet*)refcon;
delete packet;
/// When storing a shared_ptr in a CVPixelBuffer's refcon, this can be
/// used as a CVPixelBufferReleaseBytesCallback. This keeps the data
/// alive while the CVPixelBuffer is in use.
static void ReleaseSharedPtr(void* refcon, const void* base_address) {
auto ptr = (std::shared_ptr<void>*)refcon;
delete ptr;
}
CVPixelBufferRef CreateCVPixelBufferForImageFramePacket(
@@ -307,10 +310,18 @@ absl::Status CreateCVPixelBufferForImageFramePacket(
return ::mediapipe::InvalidArgumentErrorBuilder(MEDIAPIPE_LOC)
<< "out_buffer cannot be NULL";
}
CFHolder<CVPixelBufferRef> pixel_buffer;
auto image_frame = std::const_pointer_cast<mediapipe::ImageFrame>(
mediapipe::SharedPtrWithPacket<mediapipe::ImageFrame>(
image_frame_packet));
ASSIGN_OR_RETURN(*out_buffer, CreateCVPixelBufferForImageFrame(
image_frame, can_overwrite));
return absl::OkStatus();
}
auto packet_copy = absl::make_unique<mediapipe::Packet>(image_frame_packet);
const auto& frame = packet_copy->Get<mediapipe::ImageFrame>();
absl::StatusOr<CFHolder<CVPixelBufferRef>> CreateCVPixelBufferForImageFrame(
std::shared_ptr<mediapipe::ImageFrame> image_frame, bool can_overwrite) {
CFHolder<CVPixelBufferRef> pixel_buffer;
const auto& frame = *image_frame;
void* frame_data =
const_cast<void*>(reinterpret_cast<const void*>(frame.PixelData()));
@@ -366,17 +377,18 @@ absl::Status CreateCVPixelBufferForImageFramePacket(
<< "CVPixelBufferUnlockBaseAddress failed: " << status;
} else {
CVPixelBufferRef pixel_buffer_temp;
auto holder = absl::make_unique<std::shared_ptr<void>>(image_frame);
status = CVPixelBufferCreateWithBytes(
NULL, frame.Width(), frame.Height(), pixel_format, frame_data,
frame.WidthStep(), ReleaseMediaPipePacket, packet_copy.release(),
frame.WidthStep(), ReleaseSharedPtr, holder.get(),
GetCVPixelBufferAttributesForGlCompatibility(), &pixel_buffer_temp);
RET_CHECK(status == kCVReturnSuccess)
<< "failed to create pixel buffer: " << status;
holder.release(); // will be deleted by ReleaseSharedPtr
pixel_buffer.adopt(pixel_buffer_temp);
}
*out_buffer = pixel_buffer;
return absl::OkStatus();
return pixel_buffer;
}
absl::StatusOr<CFHolder<CVPixelBufferRef>> CreateCVPixelBufferCopyingImageFrame(
+3 -5
View File
@@ -59,11 +59,6 @@ vImage_Error vImageRGBAToGray(const vImage_Buffer* src, vImage_Buffer* dst);
vImage_Error vImageConvertCVPixelBuffers(CVPixelBufferRef src,
CVPixelBufferRef dst);
/// When storing a mediapipe::Packet* in a CVPixelBuffer's refcon, this can be
/// used as a CVPixelBufferReleaseBytesCallback. This keeps the packet's data
/// alive while the CVPixelBuffer is in use.
void ReleaseMediaPipePacket(void* refcon, const void* base_address);
// Create a CVPixelBuffer without using a pool. See pixel_buffer_pool_util.h
// for creation functions that use pools.
CVReturn CreateCVPixelBufferWithoutPool(int width, int height, OSType cv_format,
@@ -88,6 +83,9 @@ absl::Status CreateCVPixelBufferForImageFramePacket(
CFHolder<CVPixelBufferRef>* out_buffer);
absl::StatusOr<CFHolder<CVPixelBufferRef>> CreateCVPixelBufferCopyingImageFrame(
const mediapipe::ImageFrame& image_frame);
absl::StatusOr<CFHolder<CVPixelBufferRef>> CreateCVPixelBufferForImageFrame(
std::shared_ptr<mediapipe::ImageFrame> image_frame,
bool can_overwrite = false);
/// Creates a CVPixelBuffer with a copy of the contents of the CGImage.
absl::Status CreateCVPixelBufferFromCGImage(