[FFmpeg-cvslog] avcodec/dynamic_hdr10_plus: don't take a GetBitContext as input argument
James Almer
git at videolan.org
Mon Dec 7 19:33:05 EET 2020
ffmpeg | branch: master | James Almer <jamrial at gmail.com> | Sun Dec 6 12:30:14 2020 -0300| [1aa72fe79454c8f0a9adcd9ac7e6fbd20bbfe1a4] | committer: James Almer
avcodec/dynamic_hdr10_plus: don't take a GetBitContext as input argument
Create a local one instead from a byte buffer input argument.
This prevents skipping bytes that may belong to another SEI message.
Signed-off-by: James Almer <jamrial at gmail.com>
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=1aa72fe79454c8f0a9adcd9ac7e6fbd20bbfe1a4
---
libavcodec/dynamic_hdr10_plus.c | 13 ++++++++++---
libavcodec/dynamic_hdr10_plus.h | 7 ++++---
libavcodec/hevc_sei.c | 5 ++++-
3 files changed, 18 insertions(+), 7 deletions(-)
diff --git a/libavcodec/dynamic_hdr10_plus.c b/libavcodec/dynamic_hdr10_plus.c
index bf0d085b8f..4b2ecdb72e 100644
--- a/libavcodec/dynamic_hdr10_plus.c
+++ b/libavcodec/dynamic_hdr10_plus.c
@@ -17,6 +17,7 @@
*/
#include "dynamic_hdr10_plus.h"
+#include "get_bits.h"
static const uint8_t usa_country_code = 0xB5;
static const uint16_t smpte_provider_code = 0x003C;
@@ -30,11 +31,19 @@ static const int32_t knee_point_den = 4095;
static const int32_t bezier_anchor_den = 1023;
static const int32_t saturation_weight_den = 8;
-int ff_parse_itu_t_t35_to_dynamic_hdr10_plus(GetBitContext *gb, AVDynamicHDRPlus *s)
+int ff_parse_itu_t_t35_to_dynamic_hdr10_plus(AVDynamicHDRPlus *s, const uint8_t *data,
+ int size)
{
+ GetBitContext gbc, *gb = &gbc;
+ int ret;
+
if (!s)
return AVERROR(ENOMEM);
+ ret = init_get_bits8(gb, data, size);
+ if (ret < 0)
+ return ret;
+
s->application_version = get_bits(gb, 8);
if (get_bits_left(gb) < 2)
@@ -189,7 +198,5 @@ int ff_parse_itu_t_t35_to_dynamic_hdr10_plus(GetBitContext *gb, AVDynamicHDRPlus
}
}
- skip_bits(gb, get_bits_left(gb));
-
return 0;
}
diff --git a/libavcodec/dynamic_hdr10_plus.h b/libavcodec/dynamic_hdr10_plus.h
index 06053f88e7..cd7acf0432 100644
--- a/libavcodec/dynamic_hdr10_plus.h
+++ b/libavcodec/dynamic_hdr10_plus.h
@@ -20,15 +20,16 @@
#define AVCODEC_DYNAMIC_HDR10_PLUS_H
#include "libavutil/hdr_dynamic_metadata.h"
-#include "get_bits.h"
/**
* Parse the user data registered ITU-T T.35 to AVbuffer (AVDynamicHDRPlus).
- * @param gb The bit content to be decoded.
* @param s A pointer containing the decoded AVDynamicHDRPlus structure.
+ * @param data The byte array containing the raw ITU-T T.35 data.
+ * @param size Size of the data array in bytes.
*
* @return 0 if succeed. Otherwise, returns the appropriate AVERROR.
*/
-int ff_parse_itu_t_t35_to_dynamic_hdr10_plus(GetBitContext *gb, AVDynamicHDRPlus *s);
+int ff_parse_itu_t_t35_to_dynamic_hdr10_plus(AVDynamicHDRPlus *s, const uint8_t *data,
+ int size);
#endif /* AVCODEC_DYNAMIC_HDR10_PLUS_H */
diff --git a/libavcodec/hevc_sei.c b/libavcodec/hevc_sei.c
index 159ef5830a..3b0fa43439 100644
--- a/libavcodec/hevc_sei.c
+++ b/libavcodec/hevc_sei.c
@@ -216,7 +216,8 @@ static int decode_registered_user_data_dynamic_hdr_plus(HEVCSEIDynamicHDRPlus *s
if (!metadata)
return AVERROR(ENOMEM);
- err = ff_parse_itu_t_t35_to_dynamic_hdr10_plus(gb, metadata);
+ err = ff_parse_itu_t_t35_to_dynamic_hdr10_plus(metadata,
+ gb->buffer + get_bits_count(gb) / 8, size);
if (err < 0) {
av_free(metadata);
return err;
@@ -229,6 +230,8 @@ static int decode_registered_user_data_dynamic_hdr_plus(HEVCSEIDynamicHDRPlus *s
return AVERROR(ENOMEM);
}
+ skip_bits_long(gb, size * 8);
+
return 0;
}
More information about the ffmpeg-cvslog
mailing list