You've already forked FFmpeg
							
							
				mirror of
				https://github.com/FFmpeg/FFmpeg.git
				synced 2025-10-30 23:18:11 +02:00 
			
		
		
		
	avcodec/ffv1enc: Don't create and keep unnecessary reference
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
This commit is contained in:
		| @@ -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); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user