mirror of
https://git.ffmpeg.org/ffmpeg.git
synced 2024-12-29 10:52:20 +00:00
avcodec/ffv1enc: Don't create and keep unnecessary reference
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
This commit is contained in:
parent
f76cef5c51
commit
7e9a790441
@ -91,6 +91,7 @@ typedef struct FFV1Context {
|
||||
struct FFV1Context *fsrc;
|
||||
|
||||
AVFrame *cur;
|
||||
const AVFrame *cur_enc_frame;
|
||||
int plane_count;
|
||||
int ac; ///< 1=range coder <-> 0=golomb rice
|
||||
int ac_byte_count; ///< number of bytes used for AC coding
|
||||
|
@ -916,12 +916,12 @@ static void encode_slice_header(FFV1Context *f, FFV1Context *fs)
|
||||
put_symbol(c, state, f->plane[j].quant_table_index, 0);
|
||||
av_assert0(f->plane[j].quant_table_index == f->context_model);
|
||||
}
|
||||
if (!f->picture.f->interlaced_frame)
|
||||
if (!f->cur_enc_frame->interlaced_frame)
|
||||
put_symbol(c, state, 3, 0);
|
||||
else
|
||||
put_symbol(c, state, 1 + !f->picture.f->top_field_first, 0);
|
||||
put_symbol(c, state, f->picture.f->sample_aspect_ratio.num, 0);
|
||||
put_symbol(c, state, f->picture.f->sample_aspect_ratio.den, 0);
|
||||
put_symbol(c, state, 1 + !f->cur_enc_frame->top_field_first, 0);
|
||||
put_symbol(c, state, f->cur_enc_frame->sample_aspect_ratio.num, 0);
|
||||
put_symbol(c, state, f->cur_enc_frame->sample_aspect_ratio.den, 0);
|
||||
if (f->version > 3) {
|
||||
put_rac(c, state, fs->slice_coding_mode == 1);
|
||||
if (fs->slice_coding_mode == 1)
|
||||
@ -1024,7 +1024,7 @@ static int encode_slice(AVCodecContext *c, void *arg)
|
||||
int height = fs->slice_height;
|
||||
int x = fs->slice_x;
|
||||
int y = fs->slice_y;
|
||||
const AVFrame *const p = f->picture.f;
|
||||
const AVFrame *const p = f->cur_enc_frame;
|
||||
const int ps = av_pix_fmt_desc_get(c->pix_fmt)->comp[0].step;
|
||||
int ret;
|
||||
RangeCoder c_bak = fs->c;
|
||||
@ -1098,7 +1098,6 @@ static int encode_frame(AVCodecContext *avctx, AVPacket *pkt,
|
||||
{
|
||||
FFV1Context *f = avctx->priv_data;
|
||||
RangeCoder *const c = &f->slice_context[0]->c;
|
||||
AVFrame *const p = f->picture.f;
|
||||
uint8_t keystate = 128;
|
||||
uint8_t *buf_p;
|
||||
int i, ret;
|
||||
@ -1165,9 +1164,7 @@ static int encode_frame(AVCodecContext *avctx, AVPacket *pkt,
|
||||
ff_init_range_encoder(c, pkt->data, pkt->size);
|
||||
ff_build_rac_states(c, 0.05 * (1LL << 32), 256 - 8);
|
||||
|
||||
av_frame_unref(p);
|
||||
if ((ret = av_frame_ref(p, pict)) < 0)
|
||||
return ret;
|
||||
f->cur_enc_frame = pict;
|
||||
|
||||
if (avctx->gop_size == 0 || f->picture_number % avctx->gop_size == 0) {
|
||||
put_rac(c, &keystate, 1);
|
||||
|
Loading…
Reference in New Issue
Block a user