mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
avcodec/speedhqenc: Call correct function
Up until now, the SpeedHQ encoder called a wrong function for init: void ff_init_uni_ac_vlc(const uint8_t huff_size_ac[256], uint8_t *uni_ac_vlc_len); Yet the first argument actually used is of type RLTable; the size of said struct is less than 256 if the size of a pointer is four, leading to an access beyond the end of the RLTable. This commit fixes this by calling the actually intended function: init_uni_ac_vlc() from mpeg12enc.c. It was intended to use this function [1], yet doing so was forgotten when the patch was actually applied. [1]: https://ffmpeg.org/pipermail/ffmpeg-devel/2020-July/266187.html Reviewed-by: Paul B Mahol <onemda@gmail.com> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
This commit is contained in:
parent
43b4c66e6b
commit
628d02a611
@ -626,7 +626,7 @@ OBJS-$(CONFIG_SONIC_DECODER) += sonic.o
|
||||
OBJS-$(CONFIG_SONIC_ENCODER) += sonic.o
|
||||
OBJS-$(CONFIG_SONIC_LS_ENCODER) += sonic.o
|
||||
OBJS-$(CONFIG_SPEEDHQ_DECODER) += speedhq.o mpeg12.o mpeg12data.o simple_idct.o
|
||||
OBJS-$(CONFIG_SPEEDHQ_ENCODER) += speedhq.o mpeg12data.o speedhqenc.o
|
||||
OBJS-$(CONFIG_SPEEDHQ_ENCODER) += speedhq.o mpeg12data.o mpeg12enc.o speedhqenc.o
|
||||
OBJS-$(CONFIG_SP5X_DECODER) += sp5xdec.o
|
||||
OBJS-$(CONFIG_SRGC_DECODER) += mscc.o
|
||||
OBJS-$(CONFIG_SRT_DECODER) += srtdec.o ass.o htmlsubtitles.o
|
||||
|
@ -37,6 +37,7 @@ void ff_mpeg12_common_init(MpegEncContext *s);
|
||||
}
|
||||
|
||||
void ff_init_2d_vlc_rl(RLTable *rl, unsigned static_size, int flags);
|
||||
void ff_mpeg1_init_uni_ac_vlc(const RLTable *rl, uint8_t *uni_ac_vlc_len);
|
||||
|
||||
static inline int decode_dc(GetBitContext *gb, int component)
|
||||
{
|
||||
|
@ -27,6 +27,7 @@
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
#include "config.h"
|
||||
#include "libavutil/attributes.h"
|
||||
#include "libavutil/avassert.h"
|
||||
#include "libavutil/log.h"
|
||||
@ -44,6 +45,7 @@
|
||||
#include "mpegvideo.h"
|
||||
#include "profiles.h"
|
||||
|
||||
#if CONFIG_MPEG1VIDEO_ENCODER || CONFIG_MPEG2VIDEO_ENCODER
|
||||
static const uint8_t svcd_scan_offset_placeholder[] = {
|
||||
0x10, 0x0E, 0x00, 0x80, 0x81, 0x00, 0x80,
|
||||
0x81, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
@ -64,8 +66,9 @@ static uint8_t mpeg1_index_run[2][64];
|
||||
static int8_t mpeg1_max_level[2][64];
|
||||
|
||||
#define A53_MAX_CC_COUNT 0x1f
|
||||
#endif /* CONFIG_MPEG1VIDEO_ENCODER || CONFIG_MPEG2VIDEO_ENCODER */
|
||||
|
||||
static av_cold void init_uni_ac_vlc(RLTable *rl, uint8_t *uni_ac_vlc_len)
|
||||
av_cold void ff_mpeg1_init_uni_ac_vlc(const RLTable *rl, uint8_t *uni_ac_vlc_len)
|
||||
{
|
||||
int i;
|
||||
|
||||
@ -100,6 +103,7 @@ static av_cold void init_uni_ac_vlc(RLTable *rl, uint8_t *uni_ac_vlc_len)
|
||||
}
|
||||
}
|
||||
|
||||
#if CONFIG_MPEG1VIDEO_ENCODER || CONFIG_MPEG2VIDEO_ENCODER
|
||||
static int find_frame_rate_index(MpegEncContext *s)
|
||||
{
|
||||
int i;
|
||||
@ -1045,8 +1049,8 @@ static av_cold void mpeg12_encode_init_static(void)
|
||||
mpeg1_index_run[0][i] = ff_rl_mpeg1.index_run[0][i];
|
||||
}
|
||||
|
||||
init_uni_ac_vlc(&ff_rl_mpeg1, uni_mpeg1_ac_vlc_len);
|
||||
init_uni_ac_vlc(&ff_rl_mpeg2, uni_mpeg2_ac_vlc_len);
|
||||
ff_mpeg1_init_uni_ac_vlc(&ff_rl_mpeg1, uni_mpeg1_ac_vlc_len);
|
||||
ff_mpeg1_init_uni_ac_vlc(&ff_rl_mpeg2, uni_mpeg2_ac_vlc_len);
|
||||
|
||||
/* build unified dc encoding tables */
|
||||
for (int i = -255; i < 256; i++) {
|
||||
@ -1222,3 +1226,4 @@ AVCodec ff_mpeg2video_encoder = {
|
||||
.caps_internal = FF_CODEC_CAP_INIT_CLEANUP,
|
||||
.priv_class = &mpeg2_class,
|
||||
};
|
||||
#endif /* CONFIG_MPEG1VIDEO_ENCODER || CONFIG_MPEG2VIDEO_ENCODER */
|
||||
|
@ -104,7 +104,7 @@ static av_cold void speedhq_init_static_data(void)
|
||||
speedhq_chr_dc_uni[i + 255] = bits + (code << 8);
|
||||
}
|
||||
|
||||
ff_init_uni_ac_vlc(&ff_rl_speedhq, uni_speedhq_ac_vlc_len);
|
||||
ff_mpeg1_init_uni_ac_vlc(&ff_rl_speedhq, uni_speedhq_ac_vlc_len);
|
||||
}
|
||||
|
||||
av_cold int ff_speedhq_encode_init(MpegEncContext *s)
|
||||
|
Loading…
Reference in New Issue
Block a user