From patchwork Sun Oct 15 15:04:42 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mark Thompson X-Patchwork-Id: 5580 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.2.161.90 with SMTP id m26csp2786879jah; Sun, 15 Oct 2017 08:12:09 -0700 (PDT) X-Received: by 10.28.138.202 with SMTP id m193mr6324992wmd.63.1508080329240; Sun, 15 Oct 2017 08:12:09 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1508080329; cv=none; d=google.com; s=arc-20160816; b=xNQtQV0lq3K3PqsmUCwJpH6slE6OhnhctALjlOqos90RCc6K/lTbbIl+QmGVmXJrpz ORaos8/6Oj/AYkitMatJFNcixCieT89V838pe4ZpFsdCEqsjxGT3f+YTFlWKh3EGhajn sYQsEZLMuGrZ2QWI4Xq7n57GVTQbiGp6bamQk4C1DQzjk84LmMlH+dcHfWJjGWYtfqT9 KtnIpV/HCQ6vAS0QelDICvPdIyOmELC/cY9LjK3YOZBnaMRLFGDyPX1hyeAxKFLQnImZ 03YQiLzNidBOoD1hMkLu4fm34QxIopBfG/KttB/20a37VxqJuwWyZxkqSgcgs50M1R/w dgcw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:mime-version:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:references:in-reply-to:message-id:date :to:from:dkim-signature:delivered-to:arc-authentication-results; bh=X5wZEnwAQ7xfY+cGE4N3knjpkHLnLzTmfYpothl56LY=; b=HFc4XRz3eUrgBhvwFsjeILZUDkOwNkYa/HMUD5m2t4T9GpKGBiRVEmledvlUxKZOuq U1vchgd3jACL60UYmm3AshSU5UE2Jbg6+GHJfYS00ofFBPciecE/GLtsKYp0jU/fgb/g fe33zwuw+nB9GBJ76iHsw8FY12Txnz/kaUJnKKjiGWKS/qyvK1PySqanBaH4U+JErHM+ xJ6mbbd72wpuix02Hl0DzryrJ8OGekMdMQbOxGdT69kmDG93ZaCu3e+bbhmY3XOSef+Z JWvU56jOGHEr2+4Lg12FSGw9reKzrl5bqWmwbA99GOejz3ybVHka6/Dm6Gt73M4nQ22E +S5w== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@jkqxz-net.20150623.gappssmtp.com header.s=20150623 header.b=bALu/sXr; 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 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id y45si4225527wrd.120.2017.10.15.08.12.08; Sun, 15 Oct 2017 08:12:09 -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=@jkqxz-net.20150623.gappssmtp.com header.s=20150623 header.b=bALu/sXr; 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 Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id B3FD068A20D; Sun, 15 Oct 2017 18:12:03 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wm0-f50.google.com (mail-wm0-f50.google.com [74.125.82.50]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 4BE1868A1F0 for ; Sun, 15 Oct 2017 18:11:57 +0300 (EEST) Received: by mail-wm0-f50.google.com with SMTP id i124so28986179wmf.3 for ; Sun, 15 Oct 2017 08:12:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=jkqxz-net.20150623.gappssmtp.com; s=20150623; h=from:to:subject:date:message-id:in-reply-to:references; bh=NbqqpdLvHMnGBqwlqL/8SeDJWHd6LzrN/w44eY/QuL0=; b=bALu/sXrpFs0F6vfSn3dyDkbdYRRnIjEH8wtyKsKkTX+A967/DWfcc9LJ+oC83YAyJ 3oRv8KcwJYjx3SM+d20wnxX0lZ12lOP+trxeBjKBJK13PvlEtOiZLnc41qiAOVknK7W/ OjKzAt/zM39p68LYnCRHJoMYLOYB+f3mkZZ1ZnSdU49xjNhdGIF/xQRqxuoRI+BbteO4 q1rjAyhf5DlJU+uxExFKwg7FIsZFDNKkddkSF6z8qMlHzgllGZeFS6uJuYLFnj1AWx9t b7rpHZblRCdimUn9y0dYtCBmqC2caB0+OP52HsyCA/xdGTxZjtcqMe4qfzrnar22+nbw Pv9w== 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=NbqqpdLvHMnGBqwlqL/8SeDJWHd6LzrN/w44eY/QuL0=; b=D6AJAaBAJuYVKo8zlzItDvU9gf1Veugveg3JbDR2CHx8//Msvr69tp8jGzh9T3GT1j AGQMD3FauFaW3YFCvCT+1LyFJOH2KU4uHwCd2SG4BZQFmEzItGe4yY9E9mW/n//JpQIm P3QDRx/5UF+r/tt3gvKDE6f83+6tRFHbiVDxdChN4leKc9g0GwXYfTM24r9gxkQoyMjC DKcSVfcY2w/r5vI+FzOHHFORnnTNIYHHtuF0eVtD+MZFGM6pnsJ5r8R9gjC/BjFEuMKK hkVHjs84BlK5SSRGGFzC+8hvZlPOKX9czx9qlMcBuGFu/8ZwsPPMelMA9iKTVybIenYT X/Ig== X-Gm-Message-State: AMCzsaV4Urh4lqSyycr6IaghDQkZ0wKQJThrVLlAJgk3QMcI+BzKwOpS LqjeOo8EOtgypqNjno1LDwV90VhM X-Google-Smtp-Source: AOwi7QA/r+zCzeh3D1L1wh8g04nfSR1xalLKUWygVa/wZxQjE2jN+lzIKpPHAEgZ/PjlQai5BUT6rA== X-Received: by 10.28.41.70 with SMTP id p67mr5729736wmp.110.1508079907460; Sun, 15 Oct 2017 08:05:07 -0700 (PDT) Received: from rywe.jkqxz.net (cpc91242-cmbg18-2-0-cust650.5-4.cable.virginm.net. [82.8.130.139]) by smtp.gmail.com with ESMTPSA id h4sm2080508wre.13.2017.10.15.08.05.06 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 15 Oct 2017 08:05:06 -0700 (PDT) From: Mark Thompson To: ffmpeg-devel@ffmpeg.org Date: Sun, 15 Oct 2017 16:04:42 +0100 Message-Id: <20171015150447.18058-16-sw@jkqxz.net> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20171015150447.18058-1-sw@jkqxz.net> References: <20171015150447.18058-1-sw@jkqxz.net> Subject: [FFmpeg-devel] [PATCH 15/20] vaapi_h264: Add support for SEI recovery points 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" Included by default with non-IDR intra frames. (cherry picked from commit a49ee60d5fdbdae1706a44cfbb814abb9793815f) --- libavcodec/vaapi_encode_h264.c | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/libavcodec/vaapi_encode_h264.c b/libavcodec/vaapi_encode_h264.c index b147457b75..201e94a8ce 100644 --- a/libavcodec/vaapi_encode_h264.c +++ b/libavcodec/vaapi_encode_h264.c @@ -37,6 +37,7 @@ enum { SEI_TIMING = 0x01, SEI_IDENTIFIER = 0x02, + SEI_RECOVERY_POINT = 0x04, }; // Random (version 4) ISO 11578 UUID. @@ -61,6 +62,7 @@ typedef struct VAAPIEncodeH264Context { H264RawSEIBufferingPeriod buffering_period; H264RawSEIPicTiming pic_timing; + H264RawSEIRecoveryPoint recovery_point; H264RawSEIUserDataUnregistered identifier; char *identifier_string; @@ -232,6 +234,11 @@ static int vaapi_encode_h264_write_extra_header(AVCodecContext *avctx, priv->sei.payload[i].payload.pic_timing = priv->pic_timing; ++i; } + if (opt->sei & SEI_RECOVERY_POINT && pic->type == PICTURE_TYPE_I) { + priv->sei.payload[i].payload_type = H264_SEI_TYPE_RECOVERY_POINT; + priv->sei.payload[i].payload.recovery_point = priv->recovery_point; + ++i; + } priv->sei.payload_count = i; av_assert0(priv->sei.payload_count > 0); @@ -617,6 +624,14 @@ static int vaapi_encode_h264_init_picture_params(AVCodecContext *avctx, priv->sei_needed = 1; } + if (opt->sei & SEI_RECOVERY_POINT && pic->type == PICTURE_TYPE_I) { + priv->recovery_point.recovery_frame_cnt = 0; + priv->recovery_point.exact_match_flag = 1; + priv->recovery_point.broken_link_flag = ctx->b_per_p > 0; + + priv->sei_needed = 1; + } + vpic->CurrPic = (VAPictureH264) { .picture_id = pic->recon_surface, .frame_idx = priv->frame_num, @@ -966,7 +981,7 @@ static const AVOption vaapi_encode_h264_options[] = { { "sei", "Set SEI to include", OFFSET(sei), AV_OPT_TYPE_FLAGS, - { .i64 = SEI_IDENTIFIER | SEI_TIMING }, + { .i64 = SEI_IDENTIFIER | SEI_TIMING | SEI_RECOVERY_POINT }, 0, INT_MAX, FLAGS, "sei" }, { "identifier", "Include encoder version identifier", 0, AV_OPT_TYPE_CONST, { .i64 = SEI_IDENTIFIER }, @@ -974,6 +989,9 @@ static const AVOption vaapi_encode_h264_options[] = { { "timing", "Include timing parameters (buffering_period and pic_timing)", 0, AV_OPT_TYPE_CONST, { .i64 = SEI_TIMING }, INT_MIN, INT_MAX, FLAGS, "sei" }, + { "recovery_point", "Include recovery points where appropriate", + 0, AV_OPT_TYPE_CONST, { .i64 = SEI_RECOVERY_POINT }, + INT_MIN, INT_MAX, FLAGS, "sei" }, { NULL }, };