FFV1Context *fs = *(void **)arg;
FFV1Context *f = fs->avctx->priv_data;
int width, height, x, y, ret;
- const int ps = av_pix_fmt_desc_get(c->pix_fmt)->comp[0].step_minus1 + 1;
+ const int ps = av_pix_fmt_desc_get(c->pix_fmt)->comp[0].step;
AVFrame * const p = f->cur;
int i, si;
fs->slice_rct_ry_coef = 1;
if (f->version > 2) {
- if (ffv1_init_slice_state(f, fs) < 0)
+ if (ff_ffv1_init_slice_state(f, fs) < 0)
return AVERROR(ENOMEM);
if (decode_slice_header(f, fs) < 0) {
fs->slice_damaged = 1;
return AVERROR_INVALIDDATA;
}
}
- if ((ret = ffv1_init_slice_state(f, fs)) < 0)
+ if ((ret = ff_ffv1_init_slice_state(f, fs)) < 0)
return ret;
if (f->cur->key_frame || fs->slice_reset_contexts)
- ffv1_clear_slice_state(f, fs);
+ ff_ffv1_clear_slice_state(f, fs);
width = fs->slice_width;
height = fs->slice_height;
uint8_t state[CONTEXT_SIZE];
int i, j, k, ret;
uint8_t state2[32][CONTEXT_SIZE];
+ unsigned crc = 0;
memset(state2, 128, sizeof(state2));
memset(state, 128, sizeof(state));
return AVERROR_INVALIDDATA;
}
}
- if ((ret = ffv1_allocate_initial_states(f)) < 0)
+ if ((ret = ff_ffv1_allocate_initial_states(f)) < 0)
return ret;
for (i = 0; i < f->quant_table_count; i++)
unsigned v;
v = av_crc(av_crc_get_table(AV_CRC_32_IEEE), 0,
f->avctx->extradata, f->avctx->extradata_size);
- if (v) {
+ if (v || f->avctx->extradata_size < 4) {
av_log(f->avctx, AV_LOG_ERROR, "CRC mismatch %X!\n", v);
return AVERROR_INVALIDDATA;
}
+ crc = AV_RB32(f->avctx->extradata + f->avctx->extradata_size - 4);
}
if (f->avctx->debug & FF_DEBUG_PICT_INFO)
av_log(f->avctx, AV_LOG_DEBUG,
- "global: ver:%d.%d, coder:%d, colorspace: %d bpr:%d chroma:%d(%d:%d), alpha:%d slices:%dx%d qtabs:%d ec:%d intra:%d\n",
+ "global: ver:%d.%d, coder:%d, colorspace: %d bpr:%d chroma:%d(%d:%d), alpha:%d slices:%dx%d qtabs:%d ec:%d intra:%d CRC:0x%08X\n",
f->version, f->micro_version,
f->ac,
f->colorspace,
f->num_h_slices, f->num_v_slices,
f->quant_table_count,
f->ec,
- f->intra
+ f->intra,
+ crc
);
return 0;
}
FFV1Context *f = avctx->priv_data;
int ret;
- if ((ret = ffv1_common_init(avctx)) < 0)
+ if ((ret = ff_ffv1_common_init(avctx)) < 0)
return ret;
if (avctx->extradata && (ret = read_extra_header(f)) < 0)
return ret;
- if ((ret = ffv1_init_slice_contexts(f)) < 0)
+ if ((ret = ff_ffv1_init_slice_contexts(f)) < 0)
return ret;
avctx->internal->allocate_progress = 1;
}
fs->slice_damaged = 1;
}
+ if (avctx->debug & FF_DEBUG_PICT_INFO) {
+ av_log(avctx, AV_LOG_DEBUG, "slice %d, CRC: 0x%08X\n", i, AV_RB32(buf_p + v - 4));
+ }
}
if (i) {
f->picture.f = av_frame_alloc();
f->last_picture.f = av_frame_alloc();
- if ((ret = ffv1_init_slice_contexts(f)) < 0)
+ if ((ret = ff_ffv1_init_slice_contexts(f)) < 0)
return ret;
return 0;
.id = AV_CODEC_ID_FFV1,
.priv_data_size = sizeof(FFV1Context),
.init = decode_init,
- .close = ffv1_close,
+ .close = ff_ffv1_close,
.decode = decode_frame,
.init_thread_copy = ONLY_IF_THREADS_ENABLED(init_thread_copy),
.update_thread_context = ONLY_IF_THREADS_ENABLED(update_thread_context),