From patchwork Fri Nov 11 07:02:26 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jun Zhao X-Patchwork-Id: 1383 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.103.90.1 with SMTP id o1csp1256594vsb; Thu, 10 Nov 2016 23:09:03 -0800 (PST) X-Received: by 10.28.147.81 with SMTP id v78mr31446963wmd.60.1478848142967; Thu, 10 Nov 2016 23:09:02 -0800 (PST) Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id v205si9608876wmg.47.2016.11.10.23.09.02; Thu, 10 Nov 2016 23:09:02 -0800 (PST) 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 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 686F6689F1A; Fri, 11 Nov 2016 09:08:56 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pf0-f170.google.com (mail-pf0-f170.google.com [209.85.192.170]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id B6CBD689EDD for ; Fri, 11 Nov 2016 09:08:49 +0200 (EET) Received: by mail-pf0-f170.google.com with SMTP id d2so7281292pfd.0 for ; Thu, 10 Nov 2016 23:08:53 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=to:from:subject:message-id:date:user-agent:mime-version; bh=Z5HrRBIUx5lBG7dEzHCf1B425JMFbG4lJCHdjA3DscQ=; b=HgR7lcdc+sH4QGhCB0KWsiPpK+PE0yqONnb2V/DNPmJBZGkwh8ULyaMLjKGeJsVXJM WWZkCMWMBdG4k1gb8LR1be9pfe0SIV6b/SbNUNZ/hXszdtaZ9WNNsZKlLvMaOFVGEcxV A25wbrXENjDLVufPSnWimzj3AptnDAq54xWgfxfLriV1EGEAWJHfHEmh80rjvYF6DgxT fDEBHnR+Bv9Ck/973FDousDjpf4vyctIQpEQrMgqjd5oq7M9su7cmV5XPVFX65x4L9Kg hIwldvp8ueKbieMLRzAP1DqkuYrsz9Xq85IPuUBIsuOr8spkhmUcYMLv1AwX+R2Z1DiY eEFA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:to:from:subject:message-id:date:user-agent :mime-version; bh=Z5HrRBIUx5lBG7dEzHCf1B425JMFbG4lJCHdjA3DscQ=; b=dA8FCtB8GN+qSYMUTOO1p4rsZwmNVj2R82fzKRnbbYat2Gd1G9W6JtEsxW+UFxpSkT PoqINyzpIZGIcjhw72Xmaf2+q6le8xPU7adS0k746HfJYtckY9mF6JOCY+pzy/6BbaVi UPJhbKeO73Ntimp5WEn8UkH3Lqmb6z3VH4ze65sh45y+2Sk3ItQ6yAwypH2qI2bdNMAg //RpRLsry14oDm3kR7/HV4JXOgzc4iv2qwx0LfDlN367ZmbKiKCvBxMLX85OTEDfsetm Qv92f4Tl3kH5Ijolo9lH+nXxJpef5hpyXk+M2HMmaTgCchBwMLMcZhYgoUGeOYG36U4O s95A== X-Gm-Message-State: ABUngvdu9bl0Qu+9Bew1JWQ4BijZ3WDl5255Av5ruBiYf07uE8zSFShx2UnA53GJv1z3aQ== X-Received: by 10.99.132.194 with SMTP id k185mr1104036pgd.171.1478847752045; Thu, 10 Nov 2016 23:02:32 -0800 (PST) Received: from [10.239.204.196] (fmdmzpr03-ext.fm.intel.com. [192.55.54.38]) by smtp.gmail.com with ESMTPSA id f23sm12053772pff.59.2016.11.10.23.02.29 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 10 Nov 2016 23:02:31 -0800 (PST) To: FFmpeg development discussions and patches , jun.zhao@intel.com, Mark Thompson , mypopydev@gmail.com, Yi Wang From: Jun Zhao Message-ID: <90485a8b-95a7-be19-23af-f1ae6eff664a@gmail.com> Date: Fri, 11 Nov 2016 15:02:26 +0800 User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:45.0) Gecko/20100101 Thunderbird/45.4.0 MIME-Version: 1.0 Content-Disposition: attachment; filename*0="0001-lavc-vaapi_encode_h264-fix-poc-incorrect-issue-after.pa"; filename*1="tch" X-Content-Filtered-By: Mailman/MimeDel 2.1.20 Subject: [FFmpeg-devel] [PATCH] lavc/vaapi_encode_h264: fix poc incorrect issue after meeting idr frame. 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" From 25a5cc94fba53405acd53f9613fa5d206ce748f0 Mon Sep 17 00:00:00 2001 From: Jun Zhao Date: Fri, 11 Nov 2016 14:53:49 +0800 Subject: [PATCH] lavc/vaapi_encode_h264: fix poc incorrect issue after meeting idr frame. when meeting IDR frame, vaapi_encode_h264 poc sometime is wrong, now fix this issue based on h264 spec. Reviewed-by: Jun Zhao Signed-off-by: Wang, Yi A ase enter the commit message for your changes. Lines starting --- libavcodec/vaapi_encode_h264.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/libavcodec/vaapi_encode_h264.c b/libavcodec/vaapi_encode_h264.c index 5bed4e4..9e526c8 100644 --- a/libavcodec/vaapi_encode_h264.c +++ b/libavcodec/vaapi_encode_h264.c @@ -148,6 +148,8 @@ typedef struct VAAPIEncodeH264Context { // Rate control configuration. int send_timing_sei; + + int64_t last_idr_frame; struct { VAEncMiscParameterBuffer misc; VAEncMiscParameterRateControl rc; @@ -947,6 +949,7 @@ static int vaapi_encode_h264_init_picture_params(AVCodecContext *avctx, vpic->frame_num = 0; priv->next_frame_num = 1; priv->cpb_delay = 0; + priv->last_idr_frame = pic->display_order; } else { vpic->frame_num = priv->next_frame_num; if (pic->type != PICTURE_TYPE_B) { @@ -963,8 +966,8 @@ static int vaapi_encode_h264_init_picture_params(AVCodecContext *avctx, vpic->CurrPic.picture_id = pic->recon_surface; vpic->CurrPic.frame_idx = vpic->frame_num; vpic->CurrPic.flags = 0; - vpic->CurrPic.TopFieldOrderCnt = pic->display_order; - vpic->CurrPic.BottomFieldOrderCnt = pic->display_order; + vpic->CurrPic.TopFieldOrderCnt = pic->display_order - priv->last_idr_frame; + vpic->CurrPic.BottomFieldOrderCnt = pic->display_order - priv->last_idr_frame; for (i = 0; i < pic->nb_refs; i++) { VAAPIEncodePicture *ref = pic->refs[i]; @@ -972,8 +975,8 @@ static int vaapi_encode_h264_init_picture_params(AVCodecContext *avctx, vpic->ReferenceFrames[i].picture_id = ref->recon_surface; vpic->ReferenceFrames[i].frame_idx = ref->encode_order; vpic->ReferenceFrames[i].flags = VA_PICTURE_H264_SHORT_TERM_REFERENCE; - vpic->ReferenceFrames[i].TopFieldOrderCnt = ref->display_order; - vpic->ReferenceFrames[i].BottomFieldOrderCnt = ref->display_order; + vpic->ReferenceFrames[i].TopFieldOrderCnt = ref->display_order - priv->last_idr_frame; + vpic->ReferenceFrames[i].BottomFieldOrderCnt = ref->display_order - priv->last_idr_frame; } for (; i < FF_ARRAY_ELEMS(vpic->ReferenceFrames); i++) { vpic->ReferenceFrames[i].picture_id = VA_INVALID_ID; @@ -1044,7 +1047,7 @@ static int vaapi_encode_h264_init_slice_params(AVCodecContext *avctx, vslice->pic_parameter_set_id = vpic->pic_parameter_set_id; vslice->idr_pic_id = priv->idr_pic_count++; - vslice->pic_order_cnt_lsb = pic->display_order & + vslice->pic_order_cnt_lsb = (pic->display_order - priv->last_idr_frame) & ((1 << (4 + vseq->seq_fields.bits.log2_max_pic_order_cnt_lsb_minus4)) - 1); for (i = 0; i < FF_ARRAY_ELEMS(vslice->RefPicList0); i++) {