From efa9e737f80e245aec4c6ef9483fc92547e6d1d9 Mon Sep 17 00:00:00 2001 From: Camillo Lugaresi Date: Tue, 22 Nov 2022 17:22:18 -0800 Subject: [PATCH] Use current context if available in ConvertToImageFrame If we're already running in a GlContext, there's no need to go back to the producer context, which may be different. PiperOrigin-RevId: 490373829 --- mediapipe/gpu/gl_texture_buffer.cc | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/mediapipe/gpu/gl_texture_buffer.cc b/mediapipe/gpu/gl_texture_buffer.cc index d530d5d12..69b9889c7 100644 --- a/mediapipe/gpu/gl_texture_buffer.cc +++ b/mediapipe/gpu/gl_texture_buffer.cc @@ -363,7 +363,8 @@ static std::shared_ptr ConvertToImageFrame( auto output = absl::make_unique(image_format, buf->width(), buf->height(), ImageFrame::kGlDefaultAlignmentBoundary); - auto ctx = buf->GetProducerContext(); + auto ctx = GlContext::GetCurrent(); + if (!ctx) ctx = buf->GetProducerContext(); ctx->Run([buf, &output, &ctx] { auto view = buf->GetReadView(internal::types{}, /*plane=*/0); ReadTexture(*ctx, view, buf->format(), output->MutablePixelData(), @@ -392,7 +393,9 @@ static std::shared_ptr ConvertToCvPixelBuffer( std::shared_ptr buf) { auto output = absl::make_unique( buf->width(), buf->height(), buf->format()); - buf->GetProducerContext()->Run([buf, &output] { + auto ctx = GlContext::GetCurrent(); + if (!ctx) ctx = buf->GetProducerContext(); + ctx->Run([buf, &output] { TempGlFramebuffer framebuffer; auto src = buf->GetReadView(internal::types{}, /*plane=*/0); auto dst =