Beispiel #1
0
static already_AddRefed<SourceSurface>
GetSourceSurface(already_AddRefed<Image> aImg)
{
  RefPtr<Image> img = aImg;
  if (!img) {
    return nullptr;
  }

  if (!img->AsGLImage() || NS_IsMainThread()) {
    RefPtr<SourceSurface> surf = img->GetAsSourceSurface();
    return surf.forget();
  }

  // GLImage::GetAsSourceSurface() only supports main thread
  RefPtr<SourceSurface> surf;
  RefPtr<Runnable> runnable = NewRunnableFrom([img, &surf]() -> nsresult {
    surf = img->GetAsSourceSurface();
    return NS_OK;
  });

  NS_DispatchToMainThread(runnable, NS_DISPATCH_SYNC);
  return surf.forget();
}