MCPcopy Create free account
hub / github.com/PCSX2/pcsx2 / PNGFileLoader

Function PNGFileLoader

common/Image.cpp:234–262  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

232}
233
234bool PNGFileLoader(RGBA8Image* image, const char* filename, std::FILE* fp)
235{
236 png_structp png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, nullptr, nullptr, nullptr);
237 if (!png_ptr)
238 return false;
239
240 png_infop info_ptr = png_create_info_struct(png_ptr);
241 if (!info_ptr)
242 {
243 png_destroy_read_struct(&png_ptr, nullptr, nullptr);
244 return false;
245 }
246
247 ScopedGuard cleanup([&png_ptr, &info_ptr]() { png_destroy_read_struct(&png_ptr, &info_ptr, nullptr); });
248
249 std::vector<u32> new_data;
250 std::vector<png_bytep> row_pointers;
251
252 if (setjmp(png_jmpbuf(png_ptr)))
253 return false;
254
255 png_set_read_fn(png_ptr, fp, [](png_structp png_ptr, png_bytep data_ptr, png_size_t size) {
256 std::FILE* fp = static_cast<std::FILE*>(png_get_io_ptr(png_ptr));
257 if (std::fread(data_ptr, size, 1, fp) != 1)
258 png_error(png_ptr, "Read error");
259 });
260
261 return PNGCommonLoader(image, png_ptr, info_ptr, new_data, row_pointers);
262}
263
264bool PNGBufferLoader(RGBA8Image* image, const void* buffer, size_t buffer_size)
265{

Callers

nothing calls this directly

Calls 1

PNGCommonLoaderFunction · 0.85

Tested by

no test coverage detected