From patchwork Tue May 2 21:55:24 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 3556 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.103.3.129 with SMTP id 123csp2089462vsd; Tue, 2 May 2017 14:57:12 -0700 (PDT) X-Received: by 10.28.222.70 with SMTP id v67mr3586751wmg.65.1493762232088; Tue, 02 May 2017 14:57:12 -0700 (PDT) Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id o21si1403388wme.156.2017.05.02.14.57.11; Tue, 02 May 2017 14:57:12 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id F237B68987D; Wed, 3 May 2017 00:56:37 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qk0-f194.google.com (mail-qk0-f194.google.com [209.85.220.194]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id B927D689726 for ; Wed, 3 May 2017 00:56:30 +0300 (EEST) Received: by mail-qk0-f194.google.com with SMTP id u68so130221qkd.2 for ; Tue, 02 May 2017 14:56:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:in-reply-to:references; bh=WLOdd9rVXxakOBi3GxPA+Cs+QwAH4WoRd8gG2KLdg7k=; b=GlJ2VYnHJ9KwjUillpraHgZIXXMKiOxVVKjBMf8YJ9Ls2D6rv4VVUDGpdty+iGOWzW zWcOpJjkGvQQck2leVpuitWlMvXt6GBiJ4KQ3MUlEFg+0vZWwk12R6Gl8IMv0xqM5xaI 5bvR2q3WrE/0HBJYpzMImTODuZPubOA4X+IOAoMYQiAn+lh4HdN+ZW5+L+ma1XxJuz7o N4Lu0SX8sVbZfP3CkK4BOuG0nIHF2U7tFWh9l/FzoD/BjnJw07QAZaMnvocR7M+s5DH3 fsacrJFTIvJIDZ3pmOirv921azB/FVe4QbE77HXPcqgqqRjcO5oSu8Uf75tYTKd7oDzM UVuA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references; bh=WLOdd9rVXxakOBi3GxPA+Cs+QwAH4WoRd8gG2KLdg7k=; b=hixKKLVmVzeczmTvyAxKcz4XtqG3YT81EdKCSMz9SGDGwkOzk5HHTff+6YeTWyU7Rl t2adWo+vd8membYWS7SC675/KFyixUtsNSNWKNbitxVBetsOOLxOa19gN4zBpySwEY8i xAdXyq7Ay5wW3UQhvaIccuHsMWLVve6Lbm6K9euo6mEQLQL5hL7e3M6c8psfabGrvpCf tfVTFyoWFpU+5qNuYeANyPzIjw/S1iEcdGc4oyadhU59ubNkEX+so+BpW+LE3mJp6Cr9 a3k+BM5nKN59uguL7ikR0j0m/qDrLSN3w+6cfjVr4t/Dj/+QFQAd92qteB0KChLH2WfY Khuw== X-Gm-Message-State: AODbwcC8F1fXG8BUzSS33mKEqH2/rGfManIwzSoOsbjppIFSk+owa0qu zsLXMSZXPeWLsj0m X-Received: by 10.55.113.134 with SMTP id m128mr103161qkc.258.1493762193697; Tue, 02 May 2017 14:56:33 -0700 (PDT) Received: from localhost.localdomain ([181.231.62.139]) by smtp.gmail.com with ESMTPSA id t45sm14992046qtt.9.2017.05.02.14.56.32 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 02 May 2017 14:56:33 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Tue, 2 May 2017 18:55:24 -0300 Message-Id: <20170502215530.8672-4-jamrial@gmail.com> X-Mailer: git-send-email 2.12.1 In-Reply-To: <20170502215530.8672-1-jamrial@gmail.com> References: <20170502215530.8672-1-jamrial@gmail.com> Subject: [FFmpeg-devel] [PATCH v2 3/9] hevcdec: remove HEVCContext usage from ff_hevc_compute_poc() X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 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 MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Move it to hevc_ps as well. This is in preparation for a following patch. Signed-off-by: James Almer --- libavcodec/hevc_parser.c | 2 +- libavcodec/hevc_ps.c | 23 +++++++++++++++++++++++ libavcodec/hevc_ps.h | 5 +++++ libavcodec/hevc_refs.c | 23 ----------------------- libavcodec/hevcdec.c | 2 +- libavcodec/hevcdec.h | 5 ----- 6 files changed, 30 insertions(+), 30 deletions(-) diff --git a/libavcodec/hevc_parser.c b/libavcodec/hevc_parser.c index f82f9fdf5e..9e7fa621ce 100644 --- a/libavcodec/hevc_parser.c +++ b/libavcodec/hevc_parser.c @@ -379,7 +379,7 @@ static inline int parse_nal_units(AVCodecParserContext *s, const uint8_t *buf, if (!IS_IDR(h)) { sh->pic_order_cnt_lsb = get_bits(gb, ps->sps->log2_max_poc_lsb); - s->output_picture_number = h->poc = ff_hevc_compute_poc(h, sh->pic_order_cnt_lsb); + s->output_picture_number = h->poc = ff_hevc_compute_poc(h->ps.sps, h->pocTid0, sh->pic_order_cnt_lsb, h->nal_unit_type); } else s->output_picture_number = h->poc = 0; diff --git a/libavcodec/hevc_ps.c b/libavcodec/hevc_ps.c index 6d67dd9c69..b5a970e4f7 100644 --- a/libavcodec/hevc_ps.c +++ b/libavcodec/hevc_ps.c @@ -1665,3 +1665,26 @@ err: av_buffer_unref(&pps_buf); return ret; } + +int ff_hevc_compute_poc(const HEVCSPS *sps, int pocTid0, int poc_lsb, int nal_unit_type) +{ + int max_poc_lsb = 1 << sps->log2_max_poc_lsb; + int prev_poc_lsb = pocTid0 % max_poc_lsb; + int prev_poc_msb = pocTid0 - prev_poc_lsb; + int poc_msb; + + if (poc_lsb < prev_poc_lsb && prev_poc_lsb - poc_lsb >= max_poc_lsb / 2) + poc_msb = prev_poc_msb + max_poc_lsb; + else if (poc_lsb > prev_poc_lsb && poc_lsb - prev_poc_lsb > max_poc_lsb / 2) + poc_msb = prev_poc_msb - max_poc_lsb; + else + poc_msb = prev_poc_msb; + + // For BLA picture types, POCmsb is set to 0. + if (nal_unit_type == HEVC_NAL_BLA_W_LP || + nal_unit_type == HEVC_NAL_BLA_W_RADL || + nal_unit_type == HEVC_NAL_BLA_N_LP) + poc_msb = 0; + + return poc_msb + poc_lsb; +} diff --git a/libavcodec/hevc_ps.h b/libavcodec/hevc_ps.h index b0a17bc8f0..45ef9daf1f 100644 --- a/libavcodec/hevc_ps.h +++ b/libavcodec/hevc_ps.h @@ -344,4 +344,9 @@ int ff_hevc_decode_short_term_rps(GetBitContext *gb, AVCodecContext *avctx, int ff_hevc_encode_nal_vps(HEVCVPS *vps, unsigned int id, uint8_t *buf, int buf_size); +/** + * Compute POC of the current frame and return it. + */ +int ff_hevc_compute_poc(const HEVCSPS *sps, int pocTid0, int poc_lsb, int nal_unit_type); + #endif /* AVCODEC_HEVC_PS_H */ diff --git a/libavcodec/hevc_refs.c b/libavcodec/hevc_refs.c index 6810ffaf17..fc1385ca55 100644 --- a/libavcodec/hevc_refs.c +++ b/libavcodec/hevc_refs.c @@ -516,29 +516,6 @@ fail: return ret; } -int ff_hevc_compute_poc(HEVCContext *s, int poc_lsb) -{ - int max_poc_lsb = 1 << s->ps.sps->log2_max_poc_lsb; - int prev_poc_lsb = s->pocTid0 % max_poc_lsb; - int prev_poc_msb = s->pocTid0 - prev_poc_lsb; - int poc_msb; - - if (poc_lsb < prev_poc_lsb && prev_poc_lsb - poc_lsb >= max_poc_lsb / 2) - poc_msb = prev_poc_msb + max_poc_lsb; - else if (poc_lsb > prev_poc_lsb && poc_lsb - prev_poc_lsb > max_poc_lsb / 2) - poc_msb = prev_poc_msb - max_poc_lsb; - else - poc_msb = prev_poc_msb; - - // For BLA picture types, POCmsb is set to 0. - if (s->nal_unit_type == HEVC_NAL_BLA_W_LP || - s->nal_unit_type == HEVC_NAL_BLA_W_RADL || - s->nal_unit_type == HEVC_NAL_BLA_N_LP) - poc_msb = 0; - - return poc_msb + poc_lsb; -} - int ff_hevc_frame_nb_refs(HEVCContext *s) { int ret = 0; diff --git a/libavcodec/hevcdec.c b/libavcodec/hevcdec.c index 2a02edab28..8f235b0be1 100644 --- a/libavcodec/hevcdec.c +++ b/libavcodec/hevcdec.c @@ -541,7 +541,7 @@ static int hls_slice_header(HEVCContext *s) int poc, pos; sh->pic_order_cnt_lsb = get_bits(gb, s->ps.sps->log2_max_poc_lsb); - poc = ff_hevc_compute_poc(s, sh->pic_order_cnt_lsb); + poc = ff_hevc_compute_poc(s->ps.sps, s->pocTid0, sh->pic_order_cnt_lsb, s->nal_unit_type); if (!sh->first_slice_in_pic_flag && poc != s->poc) { av_log(s->avctx, AV_LOG_WARNING, "Ignoring POC change between slices: %d -> %d\n", s->poc, poc); diff --git a/libavcodec/hevcdec.h b/libavcodec/hevcdec.h index cc7fc7e35f..d8494ee6b1 100644 --- a/libavcodec/hevcdec.h +++ b/libavcodec/hevcdec.h @@ -579,11 +579,6 @@ void ff_hevc_clear_refs(HEVCContext *s); */ void ff_hevc_flush_dpb(HEVCContext *s); -/** - * Compute POC of the current frame and return it. - */ -int ff_hevc_compute_poc(HEVCContext *s, int poc_lsb); - RefPicList *ff_hevc_get_ref_list(HEVCContext *s, HEVCFrame *frame, int x0, int y0);