Bug 1331944 - Part 6. Expand SharedSurfacesChild to support sharing ImageContainers directly. r=jrmuizel

This commit is contained in:
Andrew Osmond 2017-10-30 09:10:45 -04:00
parent 6b225d1f6f
commit 15d607a200
2 changed files with 32 additions and 0 deletions

View File

@ -155,6 +155,37 @@ SharedSurfacesChild::Share(SourceSurfaceSharedData* aSurface,
return NS_OK;
}
/* static */ nsresult
SharedSurfacesChild::Share(ImageContainer* aContainer,
wr::ExternalImageId& aId,
uint32_t& aGeneration)
{
MOZ_ASSERT(NS_IsMainThread());
MOZ_ASSERT(aContainer);
if (aContainer->IsAsync()) {
return NS_ERROR_NOT_IMPLEMENTED;
}
AutoTArray<ImageContainer::OwningImage,4> images;
aContainer->GetCurrentImages(&images, &aGeneration);
if (images.IsEmpty()) {
return NS_ERROR_NOT_AVAILABLE;
}
RefPtr<gfx::SourceSurface> surface = images[0].mImage->GetAsSourceSurface();
if (!surface) {
return NS_ERROR_NOT_IMPLEMENTED;
}
if (surface->GetType() != SurfaceType::DATA_SHARED) {
return NS_ERROR_NOT_IMPLEMENTED;
}
auto sharedSurface = static_cast<SourceSurfaceSharedData*>(surface.get());
return Share(sharedSurface, aId);
}
/* static */ void
SharedSurfacesChild::Unshare(const wr::ExternalImageId& aId)
{

View File

@ -26,6 +26,7 @@ class SharedSurfacesChild final
{
public:
static nsresult Share(gfx::SourceSurfaceSharedData* aSurface, wr::ExternalImageId& aId);
static nsresult Share(ImageContainer* aContainer, wr::ExternalImageId& aId, uint32_t& aGeneration);
private:
SharedSurfacesChild() = delete;