PR #24074 opened by qaq03101
URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/24074
Patch URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/24074.patch

# Summary of changes

Preserve metadata copied from packet side data when decoding PNG images by 
merging PNG metadata into the output frame.

Fixes #23390.


>From 1817815d401023fc33b5e80c9f2e8ad2a0b4de6a Mon Sep 17 00:00:00 2001
From: qaq03101 <[email protected]>
Date: Tue, 11 Aug 2026 15:54:32 +0800
Subject: [PATCH] avcodec/pngdec: preserve packet metadata

Swapping metadata dictionaries drops entries already copied from
packet side data, including image2 source path metadata.

Copy PNG metadata into the output frame instead.

Reported-by: Icecream95
Fixes #23390.
Signed-off-by: qaq03101 <[email protected]>
---
 libavcodec/pngdec.c               | 6 +++++-
 tests/fate/image.mak              | 3 ++-
 tests/ref/fate/png-frame-metadata | 1 +
 3 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/libavcodec/pngdec.c b/libavcodec/pngdec.c
index 0030fa5615..3af36f47e1 100644
--- a/libavcodec/pngdec.c
+++ b/libavcodec/pngdec.c
@@ -1865,7 +1865,11 @@ static int output_frame(PNGDecContext *s, AVFrame *f)
         stereo3d->flags = s->stereo_mode ? 0 : AV_STEREO3D_FLAG_INVERT;
     }
 
-    FFSWAP(AVDictionary*, f->metadata, s->frame_metadata);
+    ret = av_dict_copy(&f->metadata, s->frame_metadata, 0);
+    if (ret < 0)
+        goto fail;
+
+    av_dict_free(&s->frame_metadata);
 
     return 0;
 fail:
diff --git a/tests/fate/image.mak b/tests/fate/image.mak
index e9fe059ead..e94a13f077 100644
--- a/tests/fate/image.mak
+++ b/tests/fate/image.mak
@@ -415,7 +415,8 @@ FATE_PNG += fate-png-int-rgb24
 fate-png-int-rgb24: CMD = framecrc -i 
$(TARGET_SAMPLES)/png1/lena-int_rgb24.png -sws_flags +accurate_rnd+bitexact
 
 FATE_PNG_PROBE += fate-png-frame-metadata
-fate-png-frame-metadata: CMD = run ffprobe$(PROGSSUF)$(EXESUF) -show_entries 
frame_tags \
+fate-png-frame-metadata: CMD = run ffprobe$(PROGSSUF)$(EXESUF) -f image2 \
+    -export_path_metadata 1 -show_entries 
frame_tags=gamma,Software,lavf.image2dec.source_basename \
     -i $(TARGET_SAMPLES)/filter/pixelart0.png
 
 FATE_PNG_PROBE += fate-png-side-data
diff --git a/tests/ref/fate/png-frame-metadata 
b/tests/ref/fate/png-frame-metadata
index 7c6d1916eb..faae1348f5 100644
--- a/tests/ref/fate/png-frame-metadata
+++ b/tests/ref/fate/png-frame-metadata
@@ -1,4 +1,5 @@
 [FRAME]
+TAG:lavf.image2dec.source_basename=pixelart0.png
 TAG:gamma=45455/100000
 TAG:Software=GLDPNG ver 3.4
 [/FRAME]
-- 
2.52.0

_______________________________________________
ffmpeg-devel mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to