X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=futatabi%2Fjpeg_frame_view.cpp;h=d471634932da364c3e4a80229948b351511c6913;hb=32b87c91cf51d730ff5abc8347884219918fad66;hp=c1afafd765ca32f803c35c23b821c949bb807e91;hpb=e0cb348ca42ae7057f8f5acee92a23e7eb26075f;p=nageru
diff --git a/futatabi/jpeg_frame_view.cpp b/futatabi/jpeg_frame_view.cpp
index c1afafd..d471634 100644
--- a/futatabi/jpeg_frame_view.cpp
+++ b/futatabi/jpeg_frame_view.cpp
@@ -109,6 +109,8 @@ shared_ptr decode_jpeg(const string &jpeg)
return get_black_frame();
}
+ jpeg_save_markers(&dinfo, JPEG_APP0 + 1, 0xFFFF);
+
if (dinfo.num_components != 3) {
fprintf(stderr, "Not a color JPEG. (%d components, Y=%dx%d, Cb=%dx%d, Cr=%dx%d)\n",
dinfo.num_components,
@@ -159,6 +161,14 @@ shared_ptr decode_jpeg(const string &jpeg)
frame->pitch_y = luma_width_blocks * DCTSIZE;
frame->pitch_chroma = chroma_width_blocks * DCTSIZE;
+ 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);
+ }
+
if (!error_mgr.run([&dinfo, &frame, v_mcu_size, mcu_height_blocks] {
JSAMPROW yptr[v_mcu_size], cbptr[v_mcu_size], crptr[v_mcu_size];
JSAMPARRAY data[3] = { yptr, cbptr, crptr };
@@ -238,7 +248,7 @@ shared_ptr decode_jpeg_with_cache(FrameOnDisk frame_spec, CacheMissBehavi
++metric_jpeg_cache_miss_frames;
*did_decode = true;
- shared_ptr frame = decode_jpeg(frame_reader->read_frame(frame_spec, /*read_audio=*/false).video);
+ shared_ptr frame = decode_jpeg(frame_reader->read_frame(frame_spec, /*read_video=*/true, /*read_audio=*/false).video);
lock_guard lock(cache_mu);
cache_bytes_used += frame_size(*frame);