#include "libavutil/intmath.h"
#include "avcodec.h"
-#include "dsputil.h"
+#include "idctdsp.h"
#include "internal.h"
#include "proresdata.h"
#include "proresdsp.h"
#include "get_bits.h"
-typedef struct {
+typedef struct ProresThreadData {
const uint8_t *index; ///< pointers to the data of this slice
int slice_num;
int x_pos, y_pos;
DECLARE_ALIGNED(16, int16_t, qmat_chroma_scaled)[64];
} ProresThreadData;
-typedef struct {
+typedef struct ProresContext {
ProresDSPContext dsp;
AVFrame *frame;
ScanTable scantable;
}
}
+#define MAX_PADDING 16
/**
* Decode AC coefficients for all blocks in a slice.
lev_cb_index = ff_prores_lev_to_cb_index[FFMIN(level, 9)];
bits_left = get_bits_left(gb);
- if (bits_left <= 0 || (bits_left <= 8 && !show_bits(gb, bits_left)))
- return AVERROR_INVALIDDATA;
+ if (bits_left <= 0 || (bits_left <= MAX_PADDING && !show_bits(gb, bits_left)))
+ return 0;
run = decode_vlc_codeword(gb, ff_prores_ac_codebook[run_cb_index]);
+ if (run < 0)
+ return AVERROR_INVALIDDATA;
bits_left = get_bits_left(gb);
- if (bits_left <= 0 || (bits_left <= 8 && !show_bits(gb, bits_left)))
+ if (bits_left <= 0 || (bits_left <= MAX_PADDING && !show_bits(gb, bits_left)))
return AVERROR_INVALIDDATA;
level = decode_vlc_codeword(gb, ff_prores_ac_codebook[lev_cb_index]) + 1;
+ if (level < 0)
+ return AVERROR_INVALIDDATA;
pos += run + 1;
if (pos >= max_coeffs)
.init = decode_init,
.close = decode_close,
.decode = decode_frame,
- .capabilities = CODEC_CAP_DR1 | CODEC_CAP_SLICE_THREADS,
+ .capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_SLICE_THREADS,
};