From patchwork Wed Feb 8 07:39:35 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jun Zhao X-Patchwork-Id: 2449 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.103.89.21 with SMTP id n21csp2640064vsb; Tue, 7 Feb 2017 23:47:47 -0800 (PST) X-Received: by 10.28.207.70 with SMTP id f67mr15606694wmg.72.1486540067685; Tue, 07 Feb 2017 23:47:47 -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 l190si1434962wmb.49.2017.02.07.23.47.46; Tue, 07 Feb 2017 23:47:47 -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 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 B3CB1689A1A; Wed, 8 Feb 2017 09:47:41 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pg0-f48.google.com (mail-pg0-f48.google.com [74.125.83.48]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 05E9C689722 for ; Wed, 8 Feb 2017 09:47:35 +0200 (EET) Received: by mail-pg0-f48.google.com with SMTP id 204so46776509pge.0 for ; Tue, 07 Feb 2017 23:47:38 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=to:from:subject:message-id:date:user-agent:mime-version; bh=b/AWJGOdSwzc/0lSWF27U0Ii0xRB+OIl9qhQ08hZSWQ=; b=tkglZccaMtSWlkolnRTd4xj2oqpbc4yELmy04cDoRBv4SdjaRgZjJQdQXmuqKARLP5 qFm94tBh7yKKGtjI3915k3mpwVkJGPu/WElBuvBxCTyDCfGWi8ZKlseAnrnalpuXQy0+ C8G/JlrR9i/OmBoBK2G/5+tU9N1b6Zetw33qvC7o6xGV/+ZwBsUNzj9z+7waNo+HgLSc EPDlB1Xg7Sym4A5MpFy4V4xU7iH1g5sNV7/wVH0aRd73GZYhnYyQ2wjh6MC2kWke0o7d nSIq6PY+VFIYi30F8DR+HJoCQHmWOKpfzVnMD9kBCEr3fpY4oQG9RJ8mF8lu1hOXFob5 KldQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:to:from:subject:message-id:date:user-agent :mime-version; bh=b/AWJGOdSwzc/0lSWF27U0Ii0xRB+OIl9qhQ08hZSWQ=; b=GfEamgRCWKoNhqfrgDFv6cLmkTHvG+k9XtYUDsxcFKysOE2fXTlORLgtqLyRI89UHQ qsv5imNwtrvWfWdt5gm9+xFAgM59S8HMdSbmLb7Z7gykDd3NlkpQx+G64QYWCk5tdilx FiJ3XFW9feabVqajNE6pUpSK+PnaXVQ2PHA2DKQi2/y9TSTbFoFkkQMmwdP5h7unKl6d RGHS2zEHdj7BCG+eVpcUEIJhe3c9CGH3Efq9rK2RMrnhjyLkA7ElPHHcJU7zQ+ccLEKf Pkfxcn/QbU1l2kQeD8tf9LnbKJXeR1I8hyA6E/fhsnImExSA0ZjkpxvYX9XeHTfVH1pJ O2Hg== X-Gm-Message-State: AIkVDXJyVL9KLTxKj6tsi0bMwW1wc7u6Nmng62sj0S7yWuzKinec4B0QXt86CkQ4BhqfTA== X-Received: by 10.98.18.217 with SMTP id 86mr24422416pfs.90.1486539578928; Tue, 07 Feb 2017 23:39:38 -0800 (PST) Received: from [10.239.204.44] ([192.55.54.40]) by smtp.gmail.com with ESMTPSA id z77sm17191643pfk.47.2017.02.07.23.39.36 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 07 Feb 2017 23:39:37 -0800 (PST) To: FFmpeg development discussions and patches , Mark Thompson , Yi Wang From: Jun Zhao Message-ID: Date: Wed, 8 Feb 2017 15:39:35 +0800 User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:45.0) Gecko/20100101 Thunderbird/45.6.0 MIME-Version: 1.0 Content-Disposition: attachment; filename="0001-lavc-vaapi_encode-fix-PoC-negative-issue.patch" X-Content-Filtered-By: Mailman/MimeDel 2.1.20 Subject: [FFmpeg-devel] [PATCH] lavc/vaapi_encode: fix PoC negative issue 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 e37b2598d372b790c0a496c7b750802a1aa102be Mon Sep 17 00:00:00 2001 From: Jun Zhao Date: Wed, 8 Feb 2017 15:25:18 +0800 Subject: [PATCH] lavc/vaapi_encode: fix PoC negative issue. the issue occurs when setting a large b frames number with option "bf", it results from hard coding the sps.log2_max_pic_order_cnt_lsb_minus4 with 0/8 in h264/hevc vaapi encoder. Signed-off-by: Jun Zhao Signed-off-by: Yi A Wang --- libavcodec/vaapi_encode_h264.c | 7 +++++++ libavcodec/vaapi_encode_h265.c | 7 ++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/libavcodec/vaapi_encode_h264.c b/libavcodec/vaapi_encode_h264.c index 00d8e6a..946f8b9 100644 --- a/libavcodec/vaapi_encode_h264.c +++ b/libavcodec/vaapi_encode_h264.c @@ -784,6 +784,8 @@ static int vaapi_encode_h264_init_sequence_params(AVCodecContext *avctx) VAAPIEncodeH264Context *priv = ctx->priv_data; VAAPIEncodeH264MiscSequenceParams *mseq = &priv->misc_sequence_params; int i; + int max_delta_poc; + int log2_max_poc_lsb = 4; { vseq->seq_parameter_set_id = 0; @@ -801,6 +803,11 @@ static int vaapi_encode_h264_init_sequence_params(AVCodecContext *avctx) vseq->seq_fields.bits.log2_max_frame_num_minus4 = 4; vseq->seq_fields.bits.pic_order_cnt_type = 0; + max_delta_poc = (avctx->max_b_frames + 2) * 2; + while ((1 << log2_max_poc_lsb) <= max_delta_poc * 2) + log2_max_poc_lsb++; + vseq->seq_fields.bits.log2_max_pic_order_cnt_lsb_minus4 = log2_max_poc_lsb - 4; + if (avctx->width != ctx->surface_width || avctx->height != ctx->surface_height) { vseq->frame_cropping_flag = 1; diff --git a/libavcodec/vaapi_encode_h265.c b/libavcodec/vaapi_encode_h265.c index c5589ed..2fb8a3f 100644 --- a/libavcodec/vaapi_encode_h265.c +++ b/libavcodec/vaapi_encode_h265.c @@ -786,6 +786,8 @@ static int vaapi_encode_h265_init_sequence_params(AVCodecContext *avctx) VAAPIEncodeH265Context *priv = ctx->priv_data; VAAPIEncodeH265MiscSequenceParams *mseq = &priv->misc_sequence_params; int i; + int max_delta_poc; + int log2_max_poc_lsb = 8; { // general_profile_space == 0. @@ -895,7 +897,10 @@ static int vaapi_encode_h265_init_sequence_params(AVCodecContext *avctx) mseq->general_frame_only_constraint_flag = 1; mseq->general_inbld_flag = 0; - mseq->log2_max_pic_order_cnt_lsb_minus4 = 8; + max_delta_poc = (avctx->max_b_frames + 2) * 2; + while ((1 << log2_max_poc_lsb) <= max_delta_poc) + log2_max_poc_lsb++; + mseq->log2_max_pic_order_cnt_lsb_minus4 = log2_max_poc_lsb - 4; mseq->vps_sub_layer_ordering_info_present_flag = 0; mseq->vps_max_dec_pic_buffering_minus1[0] = (avctx->max_b_frames > 0) + 1; mseq->vps_max_num_reorder_pics[0] = (avctx->max_b_frames > 0);