From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id 7255F4B249 for ; Fri, 31 May 2024 17:49:16 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id D5AAB68D617; Fri, 31 May 2024 20:48:27 +0300 (EEST) Received: from mail1.khirnov.net (quelana.khirnov.net [94.230.150.81]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 0706268D5FA for ; Fri, 31 May 2024 20:48:19 +0300 (EEST) Authentication-Results: mail1.khirnov.net; dkim=pass (2048-bit key; unprotected) header.d=khirnov.net header.i=@khirnov.net header.a=rsa-sha256 header.s=mail header.b=czhg0n7Q; dkim-atps=neutral Received: from localhost (mail1.khirnov.net [IPv6:::1]) by mail1.khirnov.net (Postfix) with ESMTP id 1FD5E4DD7 for ; Fri, 31 May 2024 19:48:16 +0200 (CEST) Received: from mail1.khirnov.net ([IPv6:::1]) by localhost (mail1.khirnov.net [IPv6:::1]) (amavis, port 10024) with ESMTP id k2aonxwkzlO8 for ; Fri, 31 May 2024 19:48:15 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=khirnov.net; s=mail; t=1717177692; bh=Q/x42oBveFCC8tkLE06Pq44odAwjkNKiGMvUJlGcxRY=; h=From:To:Subject:Date:In-Reply-To:References:From; b=czhg0n7Q8Z/krzm136PpbtKOdDPNcn4e1/s4lcdujTF8wnIwyYxc0RWn8QJWCQfAG kyrW/P1Yn1MUyC0qobp/7c9qHTLZfaDvcuH5hxwS21aWJbJcMyMStJpxj+uZg8s/P8 OJ8OHusww4XYd9TpZAkmjE81wpMboArbOSgKfFccrGfONAxvwXwosevHsgbybE4UeP b/y6DnZJGIyOMzoBuZbcjUxlq4bEkvJnZOMuyOBRRkqyatSWLD1tBIwGxslApb+vPR hFCAbcCZZnU5gAEDo33J7X9oSnkX6H+1Xn7MGSn6F3hJa/o8nQUVYlY7fbHb34cmBQ F0as9xZPzy8fQ== Received: from libav.khirnov.net (libav.khirnov.net [IPv6:2a00:c500:561:201::7]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "libav.khirnov.net", Issuer "smtp.khirnov.net SMTP CA" (verified OK)) by mail1.khirnov.net (Postfix) with ESMTPS id A68064DDF for ; Fri, 31 May 2024 19:48:12 +0200 (CEST) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id 1CEE33A3CEA for ; Fri, 31 May 2024 19:48:07 +0200 (CEST) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Fri, 31 May 2024 19:47:46 +0200 Message-ID: <20240531174804.17572-8-anton@khirnov.net> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240531174804.17572-1-anton@khirnov.net> References: <20240531174804.17572-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 08/11] lavc/hevcdec: drop HEVCContext.frame X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: It is merely a redundant pointer to cur_frame->f --- libavcodec/hevc_cabac.c | 4 +-- libavcodec/hevc_filter.c | 39 +++++++++++-------------- libavcodec/hevc_refs.c | 3 +- libavcodec/hevcdec.c | 53 +++++++++++++++++----------------- libavcodec/hevcdec.h | 3 +- libavcodec/hevcpred_template.c | 4 +-- 6 files changed, 50 insertions(+), 56 deletions(-) diff --git a/libavcodec/hevc_cabac.c b/libavcodec/hevc_cabac.c index 71bd678972..c9da4d7fc1 100644 --- a/libavcodec/hevc_cabac.c +++ b/libavcodec/hevc_cabac.c @@ -1002,10 +1002,10 @@ void ff_hevc_hls_residual_coding(HEVCLocalContext *lc, int x0, int y0, const uint8_t *scan_x_cg, *scan_y_cg, *scan_x_off, *scan_y_off; - ptrdiff_t stride = s->frame->linesize[c_idx]; + ptrdiff_t stride = s->cur_frame->f->linesize[c_idx]; int hshift = s->ps.sps->hshift[c_idx]; int vshift = s->ps.sps->vshift[c_idx]; - uint8_t *dst = &s->frame->data[c_idx][(y0 >> vshift) * stride + + uint8_t *dst = &s->cur_frame->f->data[c_idx][(y0 >> vshift) * stride + ((x0 >> hshift) << s->ps.sps->pixel_shift)]; int16_t *coeffs = (int16_t*)(c_idx ? lc->edge_emu_buffer2 : lc->edge_emu_buffer); uint8_t significant_coeff_group_flag[8][8] = {{0}}; diff --git a/libavcodec/hevc_filter.c b/libavcodec/hevc_filter.c index 0ba419a7b8..db7525170d 100644 --- a/libavcodec/hevc_filter.c +++ b/libavcodec/hevc_filter.c @@ -315,13 +315,13 @@ static void sao_filter_CTB(HEVCLocalContext *lc, const HEVCContext *s, int x, in for (c_idx = 0; c_idx < (s->ps.sps->chroma_format_idc ? 3 : 1); c_idx++) { int x0 = x >> s->ps.sps->hshift[c_idx]; int y0 = y >> s->ps.sps->vshift[c_idx]; - ptrdiff_t stride_src = s->frame->linesize[c_idx]; + ptrdiff_t stride_src = s->cur_frame->f->linesize[c_idx]; int ctb_size_h = (1 << (s->ps.sps->log2_ctb_size)) >> s->ps.sps->hshift[c_idx]; int ctb_size_v = (1 << (s->ps.sps->log2_ctb_size)) >> s->ps.sps->vshift[c_idx]; int width = FFMIN(ctb_size_h, (s->ps.sps->width >> s->ps.sps->hshift[c_idx]) - x0); int height = FFMIN(ctb_size_v, (s->ps.sps->height >> s->ps.sps->vshift[c_idx]) - y0); int tab = sao_tab[(FFALIGN(width, 8) >> 3) - 1]; - uint8_t *src = &s->frame->data[c_idx][y0 * stride_src + (x0 << s->ps.sps->pixel_shift)]; + uint8_t *src = &s->cur_frame->f->data[c_idx][y0 * stride_src + (x0 << s->ps.sps->pixel_shift)]; ptrdiff_t stride_dst; uint8_t *dst; @@ -484,6 +484,9 @@ static int get_pcm(const HEVCContext *s, int x, int y) static void deblocking_filter_CTB(const HEVCContext *s, int x0, int y0) { + uint8_t **data = s->cur_frame->f->data; + int *linesize = s->cur_frame->f->linesize; + uint8_t *src; int x, y; int chroma, beta; @@ -537,18 +540,16 @@ static void deblocking_filter_CTB(const HEVCContext *s, int x0, int y0) tc[0] = bs0 ? TC_CALC(qp, bs0) : 0; tc[1] = bs1 ? TC_CALC(qp, bs1) : 0; - src = &s->frame->data[LUMA][y * s->frame->linesize[LUMA] + (x << s->ps.sps->pixel_shift)]; + src = &data[LUMA][y * linesize[LUMA] + (x << s->ps.sps->pixel_shift)]; if (pcmf) { no_p[0] = get_pcm(s, x - 1, y); no_p[1] = get_pcm(s, x - 1, y + 4); no_q[0] = get_pcm(s, x, y); no_q[1] = get_pcm(s, x, y + 4); - s->hevcdsp.hevc_v_loop_filter_luma_c(src, - s->frame->linesize[LUMA], + s->hevcdsp.hevc_v_loop_filter_luma_c(src, linesize[LUMA], beta, tc, no_p, no_q); } else - s->hevcdsp.hevc_v_loop_filter_luma(src, - s->frame->linesize[LUMA], + s->hevcdsp.hevc_v_loop_filter_luma(src, linesize[LUMA], beta, tc, no_p, no_q); } } @@ -569,18 +570,16 @@ static void deblocking_filter_CTB(const HEVCContext *s, int x0, int y0) beta = betatable[av_clip(qp + beta_offset, 0, MAX_QP)]; tc[0] = bs0 ? TC_CALC(qp, bs0) : 0; tc[1] = bs1 ? TC_CALC(qp, bs1) : 0; - src = &s->frame->data[LUMA][y * s->frame->linesize[LUMA] + (x << s->ps.sps->pixel_shift)]; + src = &data[LUMA][y * linesize[LUMA] + (x << s->ps.sps->pixel_shift)]; if (pcmf) { no_p[0] = get_pcm(s, x, y - 1); no_p[1] = get_pcm(s, x + 4, y - 1); no_q[0] = get_pcm(s, x, y); no_q[1] = get_pcm(s, x + 4, y); - s->hevcdsp.hevc_h_loop_filter_luma_c(src, - s->frame->linesize[LUMA], + s->hevcdsp.hevc_h_loop_filter_luma_c(src, linesize[LUMA], beta, tc, no_p, no_q); } else - s->hevcdsp.hevc_h_loop_filter_luma(src, - s->frame->linesize[LUMA], + s->hevcdsp.hevc_h_loop_filter_luma(src, linesize[LUMA], beta, tc, no_p, no_q); } } @@ -603,18 +602,16 @@ static void deblocking_filter_CTB(const HEVCContext *s, int x0, int y0) c_tc[0] = (bs0 == 2) ? chroma_tc(s, qp0, chroma, tc_offset) : 0; c_tc[1] = (bs1 == 2) ? chroma_tc(s, qp1, chroma, tc_offset) : 0; - src = &s->frame->data[chroma][(y >> s->ps.sps->vshift[chroma]) * s->frame->linesize[chroma] + ((x >> s->ps.sps->hshift[chroma]) << s->ps.sps->pixel_shift)]; + src = &data[chroma][(y >> s->ps.sps->vshift[chroma]) * linesize[chroma] + ((x >> s->ps.sps->hshift[chroma]) << s->ps.sps->pixel_shift)]; if (pcmf) { no_p[0] = get_pcm(s, x - 1, y); no_p[1] = get_pcm(s, x - 1, y + (4 * v)); no_q[0] = get_pcm(s, x, y); no_q[1] = get_pcm(s, x, y + (4 * v)); - s->hevcdsp.hevc_v_loop_filter_chroma_c(src, - s->frame->linesize[chroma], + s->hevcdsp.hevc_v_loop_filter_chroma_c(src, linesize[chroma], c_tc, no_p, no_q); } else - s->hevcdsp.hevc_v_loop_filter_chroma(src, - s->frame->linesize[chroma], + s->hevcdsp.hevc_v_loop_filter_chroma(src, linesize[chroma], c_tc, no_p, no_q); } } @@ -636,18 +633,16 @@ static void deblocking_filter_CTB(const HEVCContext *s, int x0, int y0) c_tc[0] = bs0 == 2 ? chroma_tc(s, qp0, chroma, tc_offset) : 0; c_tc[1] = bs1 == 2 ? chroma_tc(s, qp1, chroma, cur_tc_offset) : 0; - src = &s->frame->data[chroma][(y >> s->ps.sps->vshift[1]) * s->frame->linesize[chroma] + ((x >> s->ps.sps->hshift[1]) << s->ps.sps->pixel_shift)]; + src = &data[chroma][(y >> s->ps.sps->vshift[1]) * linesize[chroma] + ((x >> s->ps.sps->hshift[1]) << s->ps.sps->pixel_shift)]; if (pcmf) { no_p[0] = get_pcm(s, x, y - 1); no_p[1] = get_pcm(s, x + (4 * h), y - 1); no_q[0] = get_pcm(s, x, y); no_q[1] = get_pcm(s, x + (4 * h), y); - s->hevcdsp.hevc_h_loop_filter_chroma_c(src, - s->frame->linesize[chroma], + s->hevcdsp.hevc_h_loop_filter_chroma_c(src, linesize[chroma], c_tc, no_p, no_q); } else - s->hevcdsp.hevc_h_loop_filter_chroma(src, - s->frame->linesize[chroma], + s->hevcdsp.hevc_h_loop_filter_chroma(src, linesize[chroma], c_tc, no_p, no_q); } } diff --git a/libavcodec/hevc_refs.c b/libavcodec/hevc_refs.c index 6019818cf0..39ce70ca39 100644 --- a/libavcodec/hevc_refs.c +++ b/libavcodec/hevc_refs.c @@ -122,7 +122,7 @@ fail: return NULL; } -int ff_hevc_set_new_ref(HEVCContext *s, AVFrame **frame, int poc) +int ff_hevc_set_new_ref(HEVCContext *s, int poc) { HEVCFrame *ref; int i; @@ -143,7 +143,6 @@ int ff_hevc_set_new_ref(HEVCContext *s, AVFrame **frame, int poc) if (!ref) return AVERROR(ENOMEM); - *frame = ref->f; s->cur_frame = ref; s->collocated_ref = NULL; diff --git a/libavcodec/hevcdec.c b/libavcodec/hevcdec.c index 6283abbbe8..173810883d 100644 --- a/libavcodec/hevcdec.c +++ b/libavcodec/hevcdec.c @@ -1258,14 +1258,14 @@ static int hls_transform_unit(HEVCLocalContext *lc, int x0, int y0, log2_trafo_size_c, scan_idx_c, 1); else if (lc->tu.cross_pf) { - ptrdiff_t stride = s->frame->linesize[1]; + ptrdiff_t stride = s->cur_frame->f->linesize[1]; int hshift = s->ps.sps->hshift[1]; int vshift = s->ps.sps->vshift[1]; const int16_t *coeffs_y = (int16_t*)lc->edge_emu_buffer; int16_t *coeffs = (int16_t*)lc->edge_emu_buffer2; int size = 1 << log2_trafo_size_c; - uint8_t *dst = &s->frame->data[1][(y0 >> vshift) * stride + + uint8_t *dst = &s->cur_frame->f->data[1][(y0 >> vshift) * stride + ((x0 >> hshift) << s->ps.sps->pixel_shift)]; for (i = 0; i < (size * size); i++) { coeffs[i] = ((lc->tu.res_scale_val * coeffs_y[i]) >> 3); @@ -1288,14 +1288,14 @@ static int hls_transform_unit(HEVCLocalContext *lc, int x0, int y0, log2_trafo_size_c, scan_idx_c, 2); else if (lc->tu.cross_pf) { - ptrdiff_t stride = s->frame->linesize[2]; + ptrdiff_t stride = s->cur_frame->f->linesize[2]; int hshift = s->ps.sps->hshift[2]; int vshift = s->ps.sps->vshift[2]; const int16_t *coeffs_y = (int16_t*)lc->edge_emu_buffer; int16_t *coeffs = (int16_t*)lc->edge_emu_buffer2; int size = 1 << log2_trafo_size_c; - uint8_t *dst = &s->frame->data[2][(y0 >> vshift) * stride + + uint8_t *dst = &s->cur_frame->f->data[2][(y0 >> vshift) * stride + ((x0 >> hshift) << s->ps.sps->pixel_shift)]; for (i = 0; i < (size * size); i++) { coeffs[i] = ((lc->tu.res_scale_val * coeffs_y[i]) >> 3); @@ -1502,12 +1502,12 @@ static int hls_pcm_sample(HEVCLocalContext *lc, int x0, int y0, int log2_cb_size const HEVCContext *const s = lc->parent; GetBitContext gb; int cb_size = 1 << log2_cb_size; - ptrdiff_t stride0 = s->frame->linesize[0]; - ptrdiff_t stride1 = s->frame->linesize[1]; - ptrdiff_t stride2 = s->frame->linesize[2]; - uint8_t *dst0 = &s->frame->data[0][y0 * stride0 + (x0 << s->ps.sps->pixel_shift)]; - uint8_t *dst1 = &s->frame->data[1][(y0 >> s->ps.sps->vshift[1]) * stride1 + ((x0 >> s->ps.sps->hshift[1]) << s->ps.sps->pixel_shift)]; - uint8_t *dst2 = &s->frame->data[2][(y0 >> s->ps.sps->vshift[2]) * stride2 + ((x0 >> s->ps.sps->hshift[2]) << s->ps.sps->pixel_shift)]; + ptrdiff_t stride0 = s->cur_frame->f->linesize[0]; + ptrdiff_t stride1 = s->cur_frame->f->linesize[1]; + ptrdiff_t stride2 = s->cur_frame->f->linesize[2]; + uint8_t *dst0 = &s->cur_frame->f->data[0][y0 * stride0 + (x0 << s->ps.sps->pixel_shift)]; + uint8_t *dst1 = &s->cur_frame->f->data[1][(y0 >> s->ps.sps->vshift[1]) * stride1 + ((x0 >> s->ps.sps->hshift[1]) << s->ps.sps->pixel_shift)]; + uint8_t *dst2 = &s->cur_frame->f->data[2][(y0 >> s->ps.sps->vshift[2]) * stride2 + ((x0 >> s->ps.sps->hshift[2]) << s->ps.sps->pixel_shift)]; int length = cb_size * cb_size * s->ps.sps->pcm.bit_depth + (((cb_size >> s->ps.sps->hshift[1]) * (cb_size >> s->ps.sps->vshift[1])) + @@ -1576,7 +1576,7 @@ static void luma_mc_uni(HEVCLocalContext *lc, uint8_t *dst, ptrdiff_t dststride, if (x_off < QPEL_EXTRA_BEFORE || y_off < QPEL_EXTRA_AFTER || x_off >= pic_width - block_w - QPEL_EXTRA_AFTER || y_off >= pic_height - block_h - QPEL_EXTRA_AFTER || - ref == s->frame) { + ref == s->cur_frame->f) { const ptrdiff_t edge_emu_stride = EDGE_EMU_BUFFER_STRIDE << s->ps.sps->pixel_shift; int offset = QPEL_EXTRA_BEFORE * srcstride + (QPEL_EXTRA_BEFORE << s->ps.sps->pixel_shift); int buf_offset = QPEL_EXTRA_BEFORE * edge_emu_stride + (QPEL_EXTRA_BEFORE << s->ps.sps->pixel_shift); @@ -1726,7 +1726,7 @@ static void chroma_mc_uni(HEVCLocalContext *lc, uint8_t *dst0, intptr_t my = av_mod_uintp2(mv->y, 2 + vshift); intptr_t _mx = mx << (1 - hshift); intptr_t _my = my << (1 - vshift); - int emu = src0 == s->frame->data[1] || src0 == s->frame->data[2]; + int emu = src0 == s->cur_frame->f->data[1] || src0 == s->cur_frame->f->data[2]; x_off += mv->x >> (2 + hshift); y_off += mv->y >> (2 + vshift); @@ -1852,11 +1852,11 @@ static void chroma_mc_bi(HEVCLocalContext *lc, uint8_t *dst0, ptrdiff_t dststrid s->hevcdsp.put_hevc_epel[idx][!!my0][!!mx0](lc->tmp, src1, src1stride, block_h, _mx0, _my0, block_w); if (!weight_flag) - s->hevcdsp.put_hevc_epel_bi[idx][!!my1][!!mx1](dst0, s->frame->linesize[cidx+1], + s->hevcdsp.put_hevc_epel_bi[idx][!!my1][!!mx1](dst0, s->cur_frame->f->linesize[cidx+1], src2, src2stride, lc->tmp, block_h, _mx1, _my1, block_w); else - s->hevcdsp.put_hevc_epel_bi_w[idx][!!my1][!!mx1](dst0, s->frame->linesize[cidx+1], + s->hevcdsp.put_hevc_epel_bi_w[idx][!!my1][!!mx1](dst0, s->cur_frame->f->linesize[cidx+1], src2, src2stride, lc->tmp, block_h, s->sh.chroma_log2_weight_denom, @@ -1927,7 +1927,7 @@ static void hls_prediction_unit(HEVCLocalContext *lc, int x0, int y0, int log2_cb_size, int partIdx, int idx) { #define POS(c_idx, x, y) \ - &s->frame->data[c_idx][((y) >> s->ps.sps->vshift[c_idx]) * s->frame->linesize[c_idx] + \ + &s->cur_frame->f->data[c_idx][((y) >> s->ps.sps->vshift[c_idx]) * linesize[c_idx] + \ (((x) >> s->ps.sps->hshift[c_idx]) << s->ps.sps->pixel_shift)] const HEVCContext *const s = lc->parent; int merge_idx = 0; @@ -1938,6 +1938,7 @@ static void hls_prediction_unit(HEVCLocalContext *lc, int x0, int y0, MvField *tab_mvf = s->cur_frame->tab_mvf; const RefPicList *refPicList = s->cur_frame->refPicList; const HEVCFrame *ref0 = NULL, *ref1 = NULL; + const int *linesize = s->cur_frame->f->linesize; uint8_t *dst0 = POS(0, x0, y0); uint8_t *dst1 = POS(1, x0, y0); uint8_t *dst2 = POS(2, x0, y0); @@ -1992,16 +1993,16 @@ static void hls_prediction_unit(HEVCLocalContext *lc, int x0, int y0, int nPbW_c = nPbW >> s->ps.sps->hshift[1]; int nPbH_c = nPbH >> s->ps.sps->vshift[1]; - luma_mc_uni(lc, dst0, s->frame->linesize[0], ref0->f, + luma_mc_uni(lc, dst0, linesize[0], ref0->f, ¤t_mv.mv[0], x0, y0, nPbW, nPbH, s->sh.luma_weight_l0[current_mv.ref_idx[0]], s->sh.luma_offset_l0[current_mv.ref_idx[0]]); if (s->ps.sps->chroma_format_idc) { - chroma_mc_uni(lc, dst1, s->frame->linesize[1], ref0->f->data[1], ref0->f->linesize[1], + chroma_mc_uni(lc, dst1, linesize[1], ref0->f->data[1], ref0->f->linesize[1], 0, x0_c, y0_c, nPbW_c, nPbH_c, ¤t_mv, s->sh.chroma_weight_l0[current_mv.ref_idx[0]][0], s->sh.chroma_offset_l0[current_mv.ref_idx[0]][0]); - chroma_mc_uni(lc, dst2, s->frame->linesize[2], ref0->f->data[2], ref0->f->linesize[2], + chroma_mc_uni(lc, dst2, linesize[2], ref0->f->data[2], ref0->f->linesize[2], 0, x0_c, y0_c, nPbW_c, nPbH_c, ¤t_mv, s->sh.chroma_weight_l0[current_mv.ref_idx[0]][1], s->sh.chroma_offset_l0[current_mv.ref_idx[0]][1]); } @@ -2011,17 +2012,17 @@ static void hls_prediction_unit(HEVCLocalContext *lc, int x0, int y0, int nPbW_c = nPbW >> s->ps.sps->hshift[1]; int nPbH_c = nPbH >> s->ps.sps->vshift[1]; - luma_mc_uni(lc, dst0, s->frame->linesize[0], ref1->f, + luma_mc_uni(lc, dst0, linesize[0], ref1->f, ¤t_mv.mv[1], x0, y0, nPbW, nPbH, s->sh.luma_weight_l1[current_mv.ref_idx[1]], s->sh.luma_offset_l1[current_mv.ref_idx[1]]); if (s->ps.sps->chroma_format_idc) { - chroma_mc_uni(lc, dst1, s->frame->linesize[1], ref1->f->data[1], ref1->f->linesize[1], + chroma_mc_uni(lc, dst1, linesize[1], ref1->f->data[1], ref1->f->linesize[1], 1, x0_c, y0_c, nPbW_c, nPbH_c, ¤t_mv, s->sh.chroma_weight_l1[current_mv.ref_idx[1]][0], s->sh.chroma_offset_l1[current_mv.ref_idx[1]][0]); - chroma_mc_uni(lc, dst2, s->frame->linesize[2], ref1->f->data[2], ref1->f->linesize[2], + chroma_mc_uni(lc, dst2, linesize[2], ref1->f->data[2], ref1->f->linesize[2], 1, x0_c, y0_c, nPbW_c, nPbH_c, ¤t_mv, s->sh.chroma_weight_l1[current_mv.ref_idx[1]][1], s->sh.chroma_offset_l1[current_mv.ref_idx[1]][1]); } @@ -2031,15 +2032,15 @@ static void hls_prediction_unit(HEVCLocalContext *lc, int x0, int y0, int nPbW_c = nPbW >> s->ps.sps->hshift[1]; int nPbH_c = nPbH >> s->ps.sps->vshift[1]; - luma_mc_bi(lc, dst0, s->frame->linesize[0], ref0->f, + luma_mc_bi(lc, dst0, linesize[0], ref0->f, ¤t_mv.mv[0], x0, y0, nPbW, nPbH, ref1->f, ¤t_mv.mv[1], ¤t_mv); if (s->ps.sps->chroma_format_idc) { - chroma_mc_bi(lc, dst1, s->frame->linesize[1], ref0->f, ref1->f, + chroma_mc_bi(lc, dst1, linesize[1], ref0->f, ref1->f, x0_c, y0_c, nPbW_c, nPbH_c, ¤t_mv, 0); - chroma_mc_bi(lc, dst2, s->frame->linesize[2], ref0->f, ref1->f, + chroma_mc_bi(lc, dst2, linesize[2], ref0->f, ref1->f, x0_c, y0_c, nPbW_c, nPbH_c, ¤t_mv, 1); } } @@ -2885,7 +2886,7 @@ static int hevc_frame_start(HEVCContext *s) if (s->ps.pps->tiles_enabled_flag) s->local_ctx[0].end_of_tiles_x = s->ps.pps->column_width[0] << s->ps.sps->log2_ctb_size; - ret = ff_hevc_set_new_ref(s, &s->frame, s->poc); + ret = ff_hevc_set_new_ref(s, s->poc); if (ret < 0) goto fail; @@ -2927,7 +2928,7 @@ static int hevc_frame_start(HEVCContext *s) goto fail; } - s->frame->pict_type = 3 - s->sh.slice_type; + s->cur_frame->f->pict_type = 3 - s->sh.slice_type; if (!IS_IRAP(s)) ff_hevc_bump_frame(s); diff --git a/libavcodec/hevcdec.h b/libavcodec/hevcdec.h index 3eb8451734..0cd6b8c2b4 100644 --- a/libavcodec/hevcdec.h +++ b/libavcodec/hevcdec.h @@ -461,7 +461,6 @@ typedef struct HEVCContext { /** 1 if the independent slice segment header was successfully parsed */ uint8_t slice_initialized; - AVFrame *frame; AVFrame *output_frame; uint8_t *sao_pixel_buffer_h[3]; uint8_t *sao_pixel_buffer_v[3]; @@ -618,7 +617,7 @@ int ff_hevc_res_scale_sign_flag(HEVCLocalContext *lc, int idx); */ int ff_hevc_frame_nb_refs(const HEVCContext *s); -int ff_hevc_set_new_ref(HEVCContext *s, AVFrame **frame, int poc); +int ff_hevc_set_new_ref(HEVCContext *s, int poc); static av_always_inline int ff_hevc_nal_is_nonref(enum HEVCNALUnitType type) { diff --git a/libavcodec/hevcpred_template.c b/libavcodec/hevcpred_template.c index 4e96ac3423..a1f8cf150e 100644 --- a/libavcodec/hevcpred_template.c +++ b/libavcodec/hevcpred_template.c @@ -87,8 +87,8 @@ do { \ int cur_tb_addr = MIN_TB_ADDR_ZS(x_tb, y_tb); - ptrdiff_t stride = s->frame->linesize[c_idx] / sizeof(pixel); - pixel *src = (pixel*)s->frame->data[c_idx] + x + y * stride; + ptrdiff_t stride = s->cur_frame->f->linesize[c_idx] / sizeof(pixel); + pixel *src = (pixel*)s->cur_frame->f->data[c_idx] + x + y * stride; int min_pu_width = s->ps.sps->min_pu_width; -- 2.43.0 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".