X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=futatabi%2Fvaapi_jpeg_decoder.cpp;h=f34654d508504434e81fbcc816e12b3a8aba95a5;hb=02ea864dc5a6dde7450c497581ff18d784ab832c;hp=1d0f771cddb2d2f27d414b7393320df44799b51b;hpb=4a9e97065dade428e373a83618bc973cd93cbe52;p=nageru diff --git a/futatabi/vaapi_jpeg_decoder.cpp b/futatabi/vaapi_jpeg_decoder.cpp index 1d0f771c..f34654d 100644 --- a/futatabi/vaapi_jpeg_decoder.cpp +++ b/futatabi/vaapi_jpeg_decoder.cpp @@ -41,7 +41,7 @@ static mutex va_resources_mutex; #define CHECK_VASTATUS(va_status, func) \ if (va_status != VA_STATUS_SUCCESS) { \ fprintf(stderr, "%s:%d (%s) failed with %d\n", __func__, __LINE__, func, va_status); \ - exit(1); \ + abort(); \ } #define CHECK_VASTATUS_RET(va_status, func) \ @@ -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");