On 3/17/2021 8:59 PM, Andreas Rheinhardt wrote:
Because the properties of frames returned from ff_get/reget_buffer
are not reset at all, lots of returned frames had palette_has_changed
wrongly set to 1. This has been changed, too.
Signed-off-by: Andreas Rheinhardt <andreas.rheinha...@gmail.com>
---
libavcodec/8bps.c | 11 +----------
libavcodec/cinepak.c | 9 +--------
libavcodec/decode.c | 14 ++++++++++++++
libavcodec/gdv.c | 5 +----
libavcodec/idcinvideo.c | 9 +--------
libavcodec/imx.c | 5 +----
libavcodec/internal.h | 9 +++++++++
libavcodec/interplayvideo.c | 9 +--------
libavcodec/kmvc.c | 8 +-------
libavcodec/msrle.c | 11 ++---------
libavcodec/msvideo1.c | 10 +---------
libavcodec/qpeg.c | 9 +--------
libavcodec/qtrle.c | 10 +---------
libavcodec/rawdec.c | 13 ++-----------
libavcodec/rscc.c | 13 ++-----------
libavcodec/smc.c | 9 +--------
libavcodec/tscc.c | 10 +---------
17 files changed, 41 insertions(+), 123 deletions(-)
[...]
diff --git a/libavcodec/decode.c b/libavcodec/decode.c
index 5a00aeedae..efa8a9ac8d 100644
--- a/libavcodec/decode.c
+++ b/libavcodec/decode.c
@@ -2051,3 +2051,17 @@ FF_ENABLE_DEPRECATION_WARNINGS
return 0;
}
+
+int ff_copy_palette(void *dst, const AVPacket *src, void *logctx)
All the arguments for dst are uint8_t*.
+{
+ buffer_size_t size;
+ const void *pal = av_packet_get_side_data(src, AV_PKT_DATA_PALETTE, &size);
Same, av_packet_get_side_data() returns an uint8_t*.
+
+ if (pal && size == AVPALETTE_SIZE) {
+ memcpy(dst, pal, AVPALETTE_SIZE);
+ return 1;
+ } else if (pal) {
+ av_log(logctx, AV_LOG_ERROR, "Palette size %d is wrong\n", size);
+ }
+ return 0;
+}
[...]
diff --git a/libavcodec/internal.h b/libavcodec/internal.h
index b57b996816..0fb3107979 100644
--- a/libavcodec/internal.h
+++ b/libavcodec/internal.h
@@ -393,6 +393,15 @@ int ff_int_from_list_or_default(void *ctx, const char *
val_name, int val,
void ff_dvdsub_parse_palette(uint32_t *palette, const char *p);
+/**
+ * Check whether the side-data of src contains a palette of
+ * size AVPALETTE_SIZE; if so, copy it to dst and return 1;
+ * else return 0.
+ * Also emit an error message upon encountering a palette
+ * with invalid size.
+ */
+int ff_copy_palette(void *dst, const AVPacket *src, void *logctx);
Should be in libavcodec/decode.h instead.
Or maybe avpacket.c and packet_internal.h, for that matter.
+
#if defined(_WIN32) && CONFIG_SHARED && !defined(BUILDING_avcodec)
# define av_export_avcodec __declspec(dllimport)
#else
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".