зеркало из https://github.com/mozilla/gecko-dev.git
Bug 980472 - Make SurfaceToPackedBGRA take a DataSourceSurface to avoid unnecessary surface conversion. r=Bas
--HG-- extra : rebase_source : c11c7ead8897255b3012495cc66beed27142275a
This commit is contained in:
Родитель
d0a02625d2
Коммит
b698826726
|
@ -27,33 +27,28 @@ ConvertBGRXToBGRA(uint8_t* aData, const IntSize &aSize, int32_t aStride)
|
|||
}
|
||||
}
|
||||
|
||||
/*
|
||||
/**
|
||||
* Convert aSurface to a packed buffer in BGRA format. The pixel data is
|
||||
* returned in a buffer allocated with new uint8_t[].
|
||||
*/
|
||||
inline uint8_t *
|
||||
SurfaceToPackedBGRA(SourceSurface *aSurface)
|
||||
SurfaceToPackedBGRA(DataSourceSurface *aSurface)
|
||||
{
|
||||
RefPtr<DataSourceSurface> data = aSurface->GetDataSurface();
|
||||
if (!data) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
SurfaceFormat format = data->GetFormat();
|
||||
SurfaceFormat format = aSurface->GetFormat();
|
||||
if (format != SurfaceFormat::B8G8R8A8 && format != SurfaceFormat::B8G8R8X8) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
IntSize size = data->GetSize();
|
||||
IntSize size = aSurface->GetSize();
|
||||
|
||||
uint8_t* imageBuffer = new (std::nothrow) uint8_t[size.width * size.height * sizeof(uint32_t)];
|
||||
if (!imageBuffer) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
size_t stride = data->Stride();
|
||||
size_t stride = aSurface->Stride();
|
||||
|
||||
uint32_t* src = reinterpret_cast<uint32_t*>(data->GetData());
|
||||
uint32_t* src = reinterpret_cast<uint32_t*>(aSurface->GetData());
|
||||
uint32_t* dst = reinterpret_cast<uint32_t*>(imageBuffer);
|
||||
|
||||
if (stride == size.width * sizeof(uint32_t)) {
|
||||
|
|
Загрузка…
Ссылка в новой задаче