X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=futatabi%2Fvaapi_jpeg_decoder.cpp;h=f34654d508504434e81fbcc816e12b3a8aba95a5;hb=04738b0cecf5f7b6d988822c1d7595fdd52a496e;hp=d18a8735c11a23853ea6109b340c031dfee2a19c;hpb=9ffd4f03f314cc6e0254449593def95c9bc203d6;p=nageru
diff --git a/futatabi/vaapi_jpeg_decoder.cpp b/futatabi/vaapi_jpeg_decoder.cpp
index d18a873..f34654d 100644
--- a/futatabi/vaapi_jpeg_decoder.cpp
+++ b/futatabi/vaapi_jpeg_decoder.cpp
@@ -337,6 +337,8 @@ shared_ptr decode_jpeg_vaapi(const string &jpeg)
}
JPEGDestroyer destroy_dinfo(&dinfo);
+ jpeg_save_markers(&dinfo, JPEG_APP0 + 1, 0xFFFF);
+
jpeg_mem_src(&dinfo, reinterpret_cast(jpeg.data()), jpeg.size());
if (!error_mgr.run([&dinfo] { jpeg_read_header(&dinfo, true); })) {
return nullptr;
@@ -566,6 +568,14 @@ shared_ptr decode_jpeg_vaapi(const string &jpeg)
frame->pitch_y = dinfo.image_width;
frame->pitch_chroma = dinfo.image_width / 2;
+ if (dinfo.marker_list != nullptr &&
+ dinfo.marker_list->marker == JPEG_APP0 + 1 &&
+ dinfo.marker_list->data_length >= 4 &&
+ memcmp(dinfo.marker_list->data, "Exif", 4) == 0) {
+ frame->exif_data.assign(reinterpret_cast(dinfo.marker_list->data),
+ dinfo.marker_list->data_length);
+ }
+
va_status = vaUnmapBuffer(va_dpy->va_dpy, resources.image.buf);
CHECK_VASTATUS_RET(va_status, "vaUnmapBuffer");