mirror of https://git.ffmpeg.org/ffmpeg.git
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@gmail.com>
This commit is contained in:
parent
b9f7c9b272
commit
1aa72fe794
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue