This storage only needs a "done writing" callback on simulator, so only set it there
- When not on simulator, we pass nullptr instead of a do-nothing callback. - The callback is no longer a method, but a function. Only the CVPixelBuffer is captured. PiperOrigin-RevId: 490380248
This commit is contained in:
parent
3bbc0e9af9
commit
a55839de51
|
@ -70,25 +70,9 @@ GlTextureView GpuBufferStorageCvPixelBuffer::GetReadView(
|
||||||
return GetTexture(plane, nullptr);
|
return GetTexture(plane, nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
GlTextureView GpuBufferStorageCvPixelBuffer::GetWriteView(
|
|
||||||
internal::types<GlTextureView>, int plane) {
|
|
||||||
return GetTexture(plane, [this](const mediapipe::GlTextureView& view) {
|
|
||||||
ViewDoneWriting(view);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
std::shared_ptr<const ImageFrame> GpuBufferStorageCvPixelBuffer::GetReadView(
|
|
||||||
internal::types<ImageFrame>) const {
|
|
||||||
return CreateImageFrameForCVPixelBuffer(**this);
|
|
||||||
}
|
|
||||||
std::shared_ptr<ImageFrame> GpuBufferStorageCvPixelBuffer::GetWriteView(
|
|
||||||
internal::types<ImageFrame>) {
|
|
||||||
return CreateImageFrameForCVPixelBuffer(**this);
|
|
||||||
}
|
|
||||||
|
|
||||||
void GpuBufferStorageCvPixelBuffer::ViewDoneWriting(const GlTextureView& view) {
|
|
||||||
#if TARGET_IPHONE_SIMULATOR
|
#if TARGET_IPHONE_SIMULATOR
|
||||||
CVPixelBufferRef pixel_buffer = **this;
|
static void ViewDoneWritingSimulatorWorkaround(CVPixelBufferRef pixel_buffer,
|
||||||
|
const GlTextureView& view) {
|
||||||
CHECK(pixel_buffer);
|
CHECK(pixel_buffer);
|
||||||
CVReturn err = CVPixelBufferLockBaseAddress(pixel_buffer, 0);
|
CVReturn err = CVPixelBufferLockBaseAddress(pixel_buffer, 0);
|
||||||
CHECK(err == kCVReturnSuccess)
|
CHECK(err == kCVReturnSuccess)
|
||||||
|
@ -126,7 +110,30 @@ void GpuBufferStorageCvPixelBuffer::ViewDoneWriting(const GlTextureView& view) {
|
||||||
err = CVPixelBufferUnlockBaseAddress(pixel_buffer, 0);
|
err = CVPixelBufferUnlockBaseAddress(pixel_buffer, 0);
|
||||||
CHECK(err == kCVReturnSuccess)
|
CHECK(err == kCVReturnSuccess)
|
||||||
<< "CVPixelBufferUnlockBaseAddress failed: " << err;
|
<< "CVPixelBufferUnlockBaseAddress failed: " << err;
|
||||||
#endif
|
}
|
||||||
|
#endif // TARGET_IPHONE_SIMULATOR
|
||||||
|
|
||||||
|
GlTextureView GpuBufferStorageCvPixelBuffer::GetWriteView(
|
||||||
|
internal::types<GlTextureView>, int plane) {
|
||||||
|
return GetTexture(plane,
|
||||||
|
#if TARGET_IPHONE_SIMULATOR
|
||||||
|
[pixel_buffer = CFHolder<CVPixelBufferRef>(*this)](
|
||||||
|
const mediapipe::GlTextureView& view) {
|
||||||
|
ViewDoneWritingSimulatorWorkaround(*pixel_buffer, view);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
nullptr
|
||||||
|
#endif // TARGET_IPHONE_SIMULATOR
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
std::shared_ptr<const ImageFrame> GpuBufferStorageCvPixelBuffer::GetReadView(
|
||||||
|
internal::types<ImageFrame>) const {
|
||||||
|
return CreateImageFrameForCVPixelBuffer(**this);
|
||||||
|
}
|
||||||
|
std::shared_ptr<ImageFrame> GpuBufferStorageCvPixelBuffer::GetWriteView(
|
||||||
|
internal::types<ImageFrame>) {
|
||||||
|
return CreateImageFrameForCVPixelBuffer(**this);
|
||||||
}
|
}
|
||||||
|
|
||||||
static std::shared_ptr<GpuBufferStorageCvPixelBuffer> ConvertFromImageFrame(
|
static std::shared_ptr<GpuBufferStorageCvPixelBuffer> ConvertFromImageFrame(
|
||||||
|
|
|
@ -63,7 +63,6 @@ class GpuBufferStorageCvPixelBuffer
|
||||||
private:
|
private:
|
||||||
GlTextureView GetTexture(int plane,
|
GlTextureView GetTexture(int plane,
|
||||||
GlTextureView::DoneWritingFn done_writing) const;
|
GlTextureView::DoneWritingFn done_writing) const;
|
||||||
void ViewDoneWriting(const GlTextureView& view);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
inline CFHolder<CVPixelBufferRef> GpuBufferStorageCvPixelBuffer::GetReadView(
|
inline CFHolder<CVPixelBufferRef> GpuBufferStorageCvPixelBuffer::GetReadView(
|
||||||
|
|
Loading…
Reference in New Issue
Block a user