mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-15 06:15:43 +00:00
Bug 1331944 - Part 6. Expand SharedSurfacesChild to support sharing ImageContainers directly. r=jrmuizel
This commit is contained in:
parent
6b225d1f6f
commit
15d607a200
@ -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)
|
||||
{
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user