Bug 980472 - Make SurfaceToPackedBGRA take a DataSourceSurface to avoid unnecessary surface conversion. r=Bas

--HG--
extra : rebase_source : c11c7ead8897255b3012495cc66beed27142275a
This commit is contained in:
Jonathan Watt 2014-03-06 23:31:33 +00:00
Родитель d0a02625d2
Коммит b698826726
1 изменённых файлов: 6 добавлений и 11 удалений

Просмотреть файл

@ -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)) {