already_AddRefed<Image> ImageFactory::CreateImage(const Image::Format *aFormats, PRUint32 aNumFormats, const gfxIntSize &, BufferRecycleBin *aRecycleBin) { if (!aNumFormats) { return nullptr; } nsRefPtr<Image> img; if (FormatInList(aFormats, aNumFormats, Image::PLANAR_YCBCR)) { img = new PlanarYCbCrImage(aRecycleBin); } else if (FormatInList(aFormats, aNumFormats, Image::CAIRO_SURFACE)) { img = new CairoImage(); } else if (FormatInList(aFormats, aNumFormats, Image::SHARED_TEXTURE)) { img = new SharedTextureImage(); #ifdef XP_MACOSX } else if (FormatInList(aFormats, aNumFormats, Image::MAC_IO_SURFACE)) { img = new MacIOSurfaceImage(); #endif #ifdef MOZ_WIDGET_GONK } else if (FormatInList(aFormats, aNumFormats, Image::GONK_IO_SURFACE)) { img = new GonkIOSurfaceImage(); #endif } return img.forget(); }
already_AddRefed<Image> BasicImageContainer::CreateImage(const Image::Format* aFormats, PRUint32 aNumFormats) { nsRefPtr<Image> image; // Prefer cairo surfaces because they're native for us if (FormatInList(aFormats, aNumFormats, Image::CAIRO_SURFACE)) { image = new BasicCairoImage(); } else if (FormatInList(aFormats, aNumFormats, Image::PLANAR_YCBCR)) { MonitorAutoEnter mon(mMonitor); image = new BasicPlanarYCbCrImage(mScaleHint); static_cast<BasicPlanarYCbCrImage*>(image.get())->SetOffscreenFormat(mOffscreenFormat); } return image.forget(); }
already_AddRefed<Image> ImageFactory::CreateImage(const ImageFormat *aFormats, uint32_t aNumFormats, const gfxIntSize &, BufferRecycleBin *aRecycleBin) { if (!aNumFormats) { return nullptr; } nsRefPtr<Image> img; #ifdef MOZ_WIDGET_GONK if (FormatInList(aFormats, aNumFormats, GRALLOC_PLANAR_YCBCR)) { img = new GrallocImage(); return img.forget(); } #endif if (FormatInList(aFormats, aNumFormats, PLANAR_YCBCR)) { img = new PlanarYCbCrImage(aRecycleBin); return img.forget(); } if (FormatInList(aFormats, aNumFormats, CAIRO_SURFACE)) { img = new CairoImage(); return img.forget(); } if (FormatInList(aFormats, aNumFormats, SHARED_TEXTURE)) { img = new SharedTextureImage(); return img.forget(); } #ifdef XP_WIN if (FormatInList(aFormats, aNumFormats, D3D9_RGB32_TEXTURE)) { img = new D3D9SurfaceImage(); return img.forget(); } #endif return nullptr; }
// this is FormatMatchesCapabilities for Audio CodecSpecifier* PV2WayMIO::FormatMatchesCapabilities(const PVAsyncInformationalEvent& aEvent) { PVMFFormatType aMimeString; int aMedia_Type = 0; ParseResponse(aEvent, aMimeString, aMedia_Type); // compare to what in iFormats instead. CodecSpecifier* formatInList = FormatInList(aMimeString); if (!formatInList) { OutputInfo("Format %s does not match application capability\n", aMimeString.getMIMEStrPtr()); } else { OutputInfo("Format %s matches application capabilities\n", aMimeString.getMIMEStrPtr()); } return formatInList; }