Use cc_library for DrishtiMetalHelper
PiperOrigin-RevId: 576230898
This commit is contained in:
		
							parent
							
								
									905a18c88c
								
							
						
					
					
						commit
						c698414c71
					
				| 
						 | 
					@ -863,12 +863,14 @@ cc_library(
 | 
				
			||||||
    }),
 | 
					    }),
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
objc_library(
 | 
					cc_library(
 | 
				
			||||||
    name = "MPPMetalHelper",
 | 
					    name = "MPPMetalHelper",
 | 
				
			||||||
    srcs = ["MPPMetalHelper.mm"],
 | 
					    srcs = ["MPPMetalHelper.cc"],
 | 
				
			||||||
    hdrs = ["MPPMetalHelper.h"],
 | 
					    hdrs = ["MPPMetalHelper.h"],
 | 
				
			||||||
    copts = [
 | 
					    copts = [
 | 
				
			||||||
        "-Wno-shorten-64-to-32",
 | 
					        "-Wno-shorten-64-to-32",
 | 
				
			||||||
 | 
					        "-x objective-c++",
 | 
				
			||||||
 | 
					        "-fobjc-arc",
 | 
				
			||||||
    ],
 | 
					    ],
 | 
				
			||||||
    features = ["-layering_check"],
 | 
					    features = ["-layering_check"],
 | 
				
			||||||
    visibility = ["//visibility:public"],
 | 
					    visibility = ["//visibility:public"],
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -14,15 +14,14 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#import "mediapipe/gpu/MPPMetalHelper.h"
 | 
					#import "mediapipe/gpu/MPPMetalHelper.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#import "GTMDefines.h"
 | 
				
			||||||
#include "absl/log/absl_check.h"
 | 
					#include "absl/log/absl_check.h"
 | 
				
			||||||
#include "absl/log/absl_log.h"
 | 
					#include "absl/log/absl_log.h"
 | 
				
			||||||
 | 
					#include "mediapipe/framework/port/ret_check.h"
 | 
				
			||||||
#import "mediapipe/gpu/gpu_buffer.h"
 | 
					#import "mediapipe/gpu/gpu_buffer.h"
 | 
				
			||||||
#import "mediapipe/gpu/gpu_service.h"
 | 
					#import "mediapipe/gpu/gpu_service.h"
 | 
				
			||||||
#import "mediapipe/gpu/graph_support.h"
 | 
					#import "mediapipe/gpu/graph_support.h"
 | 
				
			||||||
#import "mediapipe/gpu/metal_shared_resources.h"
 | 
					#import "mediapipe/gpu/metal_shared_resources.h"
 | 
				
			||||||
#import "GTMDefines.h"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#include "mediapipe/framework/port/ret_check.h"
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
@interface MPPMetalHelper () {
 | 
					@interface MPPMetalHelper () {
 | 
				
			||||||
  mediapipe::GpuResources* _gpuResources;
 | 
					  mediapipe::GpuResources* _gpuResources;
 | 
				
			||||||
| 
						 | 
					@ -31,7 +30,8 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace mediapipe {
 | 
					namespace mediapipe {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Using a C++ class so it can be declared as a friend of LegacyCalculatorSupport.
 | 
					// Using a C++ class so it can be declared as a friend of
 | 
				
			||||||
 | 
					// LegacyCalculatorSupport.
 | 
				
			||||||
class MetalHelperLegacySupport {
 | 
					class MetalHelperLegacySupport {
 | 
				
			||||||
 public:
 | 
					 public:
 | 
				
			||||||
  static CalculatorContract* GetCalculatorContract() {
 | 
					  static CalculatorContract* GetCalculatorContract() {
 | 
				
			||||||
| 
						 | 
					@ -61,7 +61,8 @@ class MetalHelperLegacySupport {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- (instancetype)initWithCalculatorContext:(mediapipe::CalculatorContext*)cc {
 | 
					- (instancetype)initWithCalculatorContext:(mediapipe::CalculatorContext*)cc {
 | 
				
			||||||
  if (!cc) return nil;
 | 
					  if (!cc) return nil;
 | 
				
			||||||
  return [self initWithGpuResources:&cc->Service(mediapipe::kGpuService).GetObject()];
 | 
					  return [self
 | 
				
			||||||
 | 
					      initWithGpuResources:&cc->Service(mediapipe::kGpuService).GetObject()];
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
+ (absl::Status)updateContract:(mediapipe::CalculatorContract*)cc {
 | 
					+ (absl::Status)updateContract:(mediapipe::CalculatorContract*)cc {
 | 
				
			||||||
| 
						 | 
					@ -77,7 +78,8 @@ class MetalHelperLegacySupport {
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Legacy support.
 | 
					// Legacy support.
 | 
				
			||||||
- (instancetype)initWithSidePackets:(const mediapipe::PacketSet&)inputSidePackets {
 | 
					- (instancetype)initWithSidePackets:
 | 
				
			||||||
 | 
					    (const mediapipe::PacketSet&)inputSidePackets {
 | 
				
			||||||
  auto cc = mediapipe::MetalHelperLegacySupport::GetCalculatorContext();
 | 
					  auto cc = mediapipe::MetalHelperLegacySupport::GetCalculatorContext();
 | 
				
			||||||
  if (cc) {
 | 
					  if (cc) {
 | 
				
			||||||
    ABSL_CHECK_EQ(&inputSidePackets, &cc->InputSidePackets());
 | 
					    ABSL_CHECK_EQ(&inputSidePackets, &cc->InputSidePackets());
 | 
				
			||||||
| 
						 | 
					@ -85,16 +87,19 @@ class MetalHelperLegacySupport {
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // TODO: remove when we can.
 | 
					  // TODO: remove when we can.
 | 
				
			||||||
  ABSL_LOG(WARNING) << "CalculatorContext not available. If this calculator uses "
 | 
					  ABSL_LOG(WARNING)
 | 
				
			||||||
                       "CalculatorBase, call initWithCalculatorContext instead.";
 | 
					      << "CalculatorContext not available. If this calculator uses "
 | 
				
			||||||
 | 
					         "CalculatorBase, call initWithCalculatorContext instead.";
 | 
				
			||||||
  mediapipe::GpuSharedData* gpu_shared =
 | 
					  mediapipe::GpuSharedData* gpu_shared =
 | 
				
			||||||
      inputSidePackets.Tag(mediapipe::kGpuSharedTagName).Get<mediapipe::GpuSharedData*>();
 | 
					      inputSidePackets.Tag(mediapipe::kGpuSharedTagName)
 | 
				
			||||||
 | 
					          .Get<mediapipe::GpuSharedData*>();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  return [self initWithGpuResources:gpu_shared->gpu_resources.get()];
 | 
					  return [self initWithGpuResources:gpu_shared->gpu_resources.get()];
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Legacy support.
 | 
					// Legacy support.
 | 
				
			||||||
+ (absl::Status)setupInputSidePackets:(mediapipe::PacketTypeSet*)inputSidePackets {
 | 
					+ (absl::Status)setupInputSidePackets:
 | 
				
			||||||
 | 
					    (mediapipe::PacketTypeSet*)inputSidePackets {
 | 
				
			||||||
  auto cc = mediapipe::MetalHelperLegacySupport::GetCalculatorContract();
 | 
					  auto cc = mediapipe::MetalHelperLegacySupport::GetCalculatorContract();
 | 
				
			||||||
  if (cc) {
 | 
					  if (cc) {
 | 
				
			||||||
    ABSL_CHECK_EQ(inputSidePackets, &cc->InputSidePackets());
 | 
					    ABSL_CHECK_EQ(inputSidePackets, &cc->InputSidePackets());
 | 
				
			||||||
| 
						 | 
					@ -102,12 +107,12 @@ class MetalHelperLegacySupport {
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // TODO: remove when we can.
 | 
					  // TODO: remove when we can.
 | 
				
			||||||
  ABSL_LOG(WARNING) << "CalculatorContract not available. If you're calling this "
 | 
					  ABSL_LOG(WARNING)
 | 
				
			||||||
                       "from a GetContract method, call updateContract instead.";
 | 
					      << "CalculatorContract not available. If you're calling this "
 | 
				
			||||||
 | 
					         "from a GetContract method, call updateContract instead.";
 | 
				
			||||||
  auto id = inputSidePackets->GetId(mediapipe::kGpuSharedTagName, 0);
 | 
					  auto id = inputSidePackets->GetId(mediapipe::kGpuSharedTagName, 0);
 | 
				
			||||||
  RET_CHECK(id.IsValid())
 | 
					  RET_CHECK(id.IsValid()) << "A " << mediapipe::kGpuSharedTagName
 | 
				
			||||||
      << "A " << mediapipe::kGpuSharedTagName
 | 
					                          << " input side packet is required here.";
 | 
				
			||||||
      << " input side packet is required here.";
 | 
					 | 
				
			||||||
  inputSidePackets->Get(id).Set<mediapipe::GpuSharedData*>();
 | 
					  inputSidePackets->Get(id).Set<mediapipe::GpuSharedData*>();
 | 
				
			||||||
  return absl::OkStatus();
 | 
					  return absl::OkStatus();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -125,10 +130,12 @@ class MetalHelperLegacySupport {
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- (id<MTLCommandBuffer>)commandBuffer {
 | 
					- (id<MTLCommandBuffer>)commandBuffer {
 | 
				
			||||||
  return [_gpuResources->metal_shared().resources().mtlCommandQueue commandBuffer];
 | 
					  return
 | 
				
			||||||
 | 
					      [_gpuResources->metal_shared().resources().mtlCommandQueue commandBuffer];
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- (CVMetalTextureRef)copyCVMetalTextureWithGpuBuffer:(const mediapipe::GpuBuffer&)gpuBuffer
 | 
					- (CVMetalTextureRef)copyCVMetalTextureWithGpuBuffer:
 | 
				
			||||||
 | 
					                         (const mediapipe::GpuBuffer&)gpuBuffer
 | 
				
			||||||
                                               plane:(size_t)plane {
 | 
					                                               plane:(size_t)plane {
 | 
				
			||||||
  CVPixelBufferRef pixel_buffer = mediapipe::GetCVPixelBufferRef(gpuBuffer);
 | 
					  CVPixelBufferRef pixel_buffer = mediapipe::GetCVPixelBufferRef(gpuBuffer);
 | 
				
			||||||
  OSType pixel_format = CVPixelBufferGetPixelFormatType(pixel_buffer);
 | 
					  OSType pixel_format = CVPixelBufferGetPixelFormatType(pixel_buffer);
 | 
				
			||||||
| 
						 | 
					@ -178,41 +185,48 @@ class MetalHelperLegacySupport {
 | 
				
			||||||
  CVMetalTextureRef texture;
 | 
					  CVMetalTextureRef texture;
 | 
				
			||||||
  CVReturn err = CVMetalTextureCacheCreateTextureFromImage(
 | 
					  CVReturn err = CVMetalTextureCacheCreateTextureFromImage(
 | 
				
			||||||
      NULL, _gpuResources->metal_shared().resources().mtlTextureCache,
 | 
					      NULL, _gpuResources->metal_shared().resources().mtlTextureCache,
 | 
				
			||||||
      mediapipe::GetCVPixelBufferRef(gpuBuffer), NULL, metalPixelFormat, width, height, plane,
 | 
					      mediapipe::GetCVPixelBufferRef(gpuBuffer), NULL, metalPixelFormat, width,
 | 
				
			||||||
      &texture);
 | 
					      height, plane, &texture);
 | 
				
			||||||
  ABSL_CHECK_EQ(err, kCVReturnSuccess);
 | 
					  ABSL_CHECK_EQ(err, kCVReturnSuccess);
 | 
				
			||||||
  return texture;
 | 
					  return texture;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- (CVMetalTextureRef)copyCVMetalTextureWithGpuBuffer:(const mediapipe::GpuBuffer&)gpuBuffer {
 | 
					- (CVMetalTextureRef)copyCVMetalTextureWithGpuBuffer:
 | 
				
			||||||
 | 
					    (const mediapipe::GpuBuffer&)gpuBuffer {
 | 
				
			||||||
  return [self copyCVMetalTextureWithGpuBuffer:gpuBuffer plane:0];
 | 
					  return [self copyCVMetalTextureWithGpuBuffer:gpuBuffer plane:0];
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- (id<MTLTexture>)metalTextureWithGpuBuffer:(const mediapipe::GpuBuffer&)gpuBuffer {
 | 
					- (id<MTLTexture>)metalTextureWithGpuBuffer:
 | 
				
			||||||
 | 
					    (const mediapipe::GpuBuffer&)gpuBuffer {
 | 
				
			||||||
  return [self metalTextureWithGpuBuffer:gpuBuffer plane:0];
 | 
					  return [self metalTextureWithGpuBuffer:gpuBuffer plane:0];
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- (id<MTLTexture>)metalTextureWithGpuBuffer:(const mediapipe::GpuBuffer&)gpuBuffer
 | 
					- (id<MTLTexture>)metalTextureWithGpuBuffer:
 | 
				
			||||||
                                 plane:(size_t)plane {
 | 
					                      (const mediapipe::GpuBuffer&)gpuBuffer
 | 
				
			||||||
 | 
					                                      plane:(size_t)plane {
 | 
				
			||||||
  CFHolder<CVMetalTextureRef> cvTexture;
 | 
					  CFHolder<CVMetalTextureRef> cvTexture;
 | 
				
			||||||
  cvTexture.adopt([self copyCVMetalTextureWithGpuBuffer:gpuBuffer plane:plane]);
 | 
					  cvTexture.adopt([self copyCVMetalTextureWithGpuBuffer:gpuBuffer plane:plane]);
 | 
				
			||||||
  return CVMetalTextureGetTexture(*cvTexture);
 | 
					  return CVMetalTextureGetTexture(*cvTexture);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- (mediapipe::GpuBuffer)mediapipeGpuBufferWithWidth:(int)width height:(int)height {
 | 
					- (mediapipe::GpuBuffer)mediapipeGpuBufferWithWidth:(int)width
 | 
				
			||||||
 | 
					                                             height:(int)height {
 | 
				
			||||||
  return _gpuResources->gpu_buffer_pool().GetBuffer(width, height);
 | 
					  return _gpuResources->gpu_buffer_pool().GetBuffer(width, height);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- (mediapipe::GpuBuffer)mediapipeGpuBufferWithWidth:(int)width
 | 
					- (mediapipe::GpuBuffer)mediapipeGpuBufferWithWidth:(int)width
 | 
				
			||||||
                                         height:(int)height
 | 
					                                             height:(int)height
 | 
				
			||||||
                                         format:(mediapipe::GpuBufferFormat)format {
 | 
					                                             format:(mediapipe::GpuBufferFormat)
 | 
				
			||||||
 | 
					                                                        format {
 | 
				
			||||||
  return _gpuResources->gpu_buffer_pool().GetBuffer(width, height, format);
 | 
					  return _gpuResources->gpu_buffer_pool().GetBuffer(width, height, format);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- (id<MTLLibrary>)newLibraryWithResourceName:(NSString*)name error:(NSError * _Nullable *)error {
 | 
					- (id<MTLLibrary>)newLibraryWithResourceName:(NSString*)name
 | 
				
			||||||
 | 
					                                       error:(NSError* _Nullable*)error {
 | 
				
			||||||
  return [_gpuResources->metal_shared().resources().mtlDevice
 | 
					  return [_gpuResources->metal_shared().resources().mtlDevice
 | 
				
			||||||
      newLibraryWithFile:[[NSBundle bundleForClass:[self class]] pathForResource:name
 | 
					      newLibraryWithFile:[[NSBundle bundleForClass:[self class]]
 | 
				
			||||||
                                                                          ofType:@"metallib"]
 | 
					                             pathForResource:name
 | 
				
			||||||
 | 
					                                      ofType:@"metallib"]
 | 
				
			||||||
                   error:error];
 | 
					                   error:error];
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue
	
	Block a user