mirror of
https://git.ffmpeg.org/ffmpeg.git
synced 2024-09-19 21:06:42 +00:00
lavc/ffv1dec: move slice_reset_contexts to per-slice context
This commit is contained in:
parent
84dda32202
commit
f2aeba56c4
@ -86,8 +86,19 @@ typedef struct FFV1SliceContext {
|
||||
RangeCoder c;
|
||||
|
||||
int ac_byte_count; ///< number of bytes used for AC coding
|
||||
uint64_t rc_stat[256][2];
|
||||
uint64_t (*rc_stat2[MAX_QUANT_TABLES])[32][2];
|
||||
|
||||
union {
|
||||
// decoder-only
|
||||
struct {
|
||||
int slice_reset_contexts;
|
||||
};
|
||||
|
||||
// encoder-only
|
||||
struct {
|
||||
uint64_t rc_stat[256][2];
|
||||
uint64_t (*rc_stat2[MAX_QUANT_TABLES])[32][2];
|
||||
};
|
||||
};
|
||||
} FFV1SliceContext;
|
||||
|
||||
typedef struct FFV1Context {
|
||||
@ -135,7 +146,6 @@ typedef struct FFV1Context {
|
||||
int max_slice_count;
|
||||
int num_v_slices;
|
||||
int num_h_slices;
|
||||
int slice_reset_contexts;
|
||||
|
||||
FFV1SliceContext *slices;
|
||||
} FFV1Context;
|
||||
|
@ -239,7 +239,7 @@ static int decode_slice_header(const FFV1Context *f, FFV1Context *fs,
|
||||
}
|
||||
|
||||
if (fs->version > 3) {
|
||||
fs->slice_reset_contexts = get_rac(c, state);
|
||||
sc->slice_reset_contexts = get_rac(c, state);
|
||||
sc->slice_coding_mode = get_symbol(c, state, 0);
|
||||
if (sc->slice_coding_mode != 1) {
|
||||
sc->slice_rct_by_coef = get_symbol(c, state, 0);
|
||||
@ -309,7 +309,7 @@ static int decode_slice(AVCodecContext *c, void *arg)
|
||||
}
|
||||
if ((ret = ff_ffv1_init_slice_state(f, sc)) < 0)
|
||||
return ret;
|
||||
if ((p->flags & AV_FRAME_FLAG_KEY) || fs->slice_reset_contexts) {
|
||||
if ((p->flags & AV_FRAME_FLAG_KEY) || sc->slice_reset_contexts) {
|
||||
ff_ffv1_clear_slice_state(f, sc);
|
||||
} else if (fs->slice_damaged) {
|
||||
return AVERROR_INVALIDDATA;
|
||||
|
Loading…
Reference in New Issue
Block a user