From patchwork Tue Oct 24 23:32:49 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mark Thompson X-Patchwork-Id: 5682 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.2.161.90 with SMTP id m26csp1191406jah; Tue, 24 Oct 2017 16:38:24 -0700 (PDT) X-Google-Smtp-Source: ABhQp+SWRUZDam635vFt48XZCuhBGrhuARyW12Ikkqi0tCykDtbdU1IzTqi21A3sxylcrNBDmrpO X-Received: by 10.223.151.221 with SMTP id t29mr222268wrb.34.1508888304032; Tue, 24 Oct 2017 16:38:24 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1508888303; cv=none; d=google.com; s=arc-20160816; b=v/aBVaCil7XEi52CVPZC3lt7UGpXz08q1VPqZEMHpYOpYoFy5Jhd9ew8sNI3ziAB+t x/9xl17VVYRxCyFpt9D/+thCUFZzuCgJi7+dpYNYDRmwqWACfcETPvK023cUAb2YlaCu 2NhUvmkV2AphxeqeBapOfYRAdWEElrZeeO6+Mmv1Lb/GgWCBcdkhrgtSvpTsk5EIE3Jb +4NKKuX/qZHnPv/xXg2nBs3WzPZ/9erJaSfAQsFWBNrHKYDEUr+gRPYOTRj2uC7BW7wB gnEKdqGEGmdaMja9YSBDprvdJ6mOsnL7aCag0+r/TRzCYgxOZXQn8snm6NASKYkQ/fcQ N/oA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:content-language:mime-version:user-agent:date :message-id:from:to:dkim-signature:delivered-to :arc-authentication-results; bh=LA0031zBxUjPM2Nuf65i32hr6FS0RnutF2wlXO88sfU=; b=Cvwe3tSIxmKe/2rMeoOOpcSyxn5p84ZcBOPsn2k55lG/dycLXtUc7TRNc6iWNrevx9 KhQD6DBwtyNj6ekEm5/Jt7j58lHkZ5FN8g7lm8juEcY8ICh0WJDKIeJYccq2mROt3Qlt 1P7RSZyKcqKW4fLfD0fhlsfrmf8vqFWQH2QTtd4K6Jl3njuNqUeJk086U+4gHUtvM9eJ JjRsryGTIxL53z1etdIytlifi9TlmZUwezhE8q3P7Knnvbwez8zvS4P5oABVuXL70csB S1/x2RE/UB2od3ot8sCtZMgekYl/6N52wPGFHFFYJlMXA6I87pYPs5sx69fVoo9TtzDn cSaA== 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=fa9IqNCt; 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 o17si913850wme.169.2017.10.24.16.38.22; Tue, 24 Oct 2017 16:38:23 -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=fa9IqNCt; 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 D58EA68A2D0; Wed, 25 Oct 2017 02:38:13 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wm0-f68.google.com (mail-wm0-f68.google.com [74.125.82.68]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 6EA35689F16 for ; Wed, 25 Oct 2017 02:38:08 +0300 (EEST) Received: by mail-wm0-f68.google.com with SMTP id 78so16443336wmb.1 for ; Tue, 24 Oct 2017 16:38:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=jkqxz-net.20150623.gappssmtp.com; s=20150623; h=to:from:subject:message-id:date:user-agent:mime-version :content-language:content-transfer-encoding; bh=CUst/Al31a0PUpRreIoYUUNTSMAXgxtnawPRdcR8wN0=; b=fa9IqNCtOg8yGsjR6OgANW6MtkrJnv57UwUYmdt+/Axd/EMyBQ+M005S7G7/wqkeCM 1/a+mTv/KTQC9CRsb9nQKPIKTTQq0t/0kWP0GcErKrR0qMR7Geq5mTiVs8yA2aABP6Kl Jfw9JUrW95xZQDLufqX9xdyc0z9Rcw61ovg8H5d2zBfTouqbXs6SjuVKt40cNnK+6GHc Ph6rFOZZra2MHHKzAXipuoyITaG2B05lcpnX3fSdoLdBkOfnTVwqTH1YlMekemsuAong A47ixxQzKQCNXJ2Jz5S8rl2tJUPQc+Z4n2c1xxwAgLnrU4KuV4N2nWISt9jTemzVsSj8 lsjw== 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:content-language:content-transfer-encoding; bh=CUst/Al31a0PUpRreIoYUUNTSMAXgxtnawPRdcR8wN0=; b=fb+fEo2NVH94mjfMxHbx3bSp0BmC8WP9caAAAsVS0jSeQUvDkZObFqITasg0kQk2I0 gYD/5XgLrtKPeY6v9sO2Om6jNT/L/DWjfvSYCIafkPTrxKpNClKDAYvU/+t0gack0tNz IwEijaO29ezVsz36+dA3ej6sl4js3mTTGBMalwL3BmgbuBrvERYkk0NdoQeI1LK2DpdM GLVNEmkem8UZDBa/wtlOEx0gdkCm3kps46s9nuwW60O0Oe7sS+H0+abtrdf05BHNPbNd tdILphT/xqobQzCH5f/VnaRUIUVs0rhgIQvyHNYhqbO4wFr4bunTE+jLVsCrCUb7QdFp TCeA== X-Gm-Message-State: AMCzsaUOipV5iZzgRrQeuxvZ5u8uaoCUrwSYnCkgz/emeVDPFwddrphi pLFvVIejQR/rRGVm0UES9i03CCZQ X-Received: by 10.28.183.8 with SMTP id h8mr125694wmf.2.1508887970991; Tue, 24 Oct 2017 16:32:50 -0700 (PDT) Received: from [192.168.0.9] (cpc91242-cmbg18-2-0-cust650.5-4.cable.virginm.net. [82.8.130.139]) by smtp.gmail.com with ESMTPSA id 64sm1354551wrk.46.2017.10.24.16.32.50 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 24 Oct 2017 16:32:50 -0700 (PDT) To: FFmpeg development discussions and patches From: Mark Thompson Message-ID: <972cf19a-70be-42d3-60f7-617975e0dde2@jkqxz.net> Date: Wed, 25 Oct 2017 00:32:49 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.3.0 MIME-Version: 1.0 Content-Language: en-US Subject: [FFmpeg-devel] [PATCH] vaapi_h264: Add workaround for bad SEI in old Intel drivers 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" With pre-2.0 Intel drivers in CBR mode, if an explicit SEI message with the old (now deprecated) type is not included, the driver generates and inserts some timing SEI which is almost certainly invlaid. Before 7a4fac5e91789b73e07bd4ad20493cfde028df76 we always inserted our own SEI so this would not be visible, but since then it has been possible to disable that. We would also like to avoid using the deprecated type, and using the new type, while working in old drivers, does not suppress the spurious message like the old type does. Therefore, suppress the bad SEI insertion by providing a zero-length buffer with the old type, which the driver can insert harmlessly. --- libavcodec/vaapi_encode_h264.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/libavcodec/vaapi_encode_h264.c b/libavcodec/vaapi_encode_h264.c index 1d43e934ef..5fd0bf7796 100644 --- a/libavcodec/vaapi_encode_h264.c +++ b/libavcodec/vaapi_encode_h264.c @@ -82,6 +82,7 @@ typedef struct VAAPIEncodeH264Context { CodedBitstreamFragment current_access_unit; int aud_needed; int sei_needed; + int sei_cbr_workaround_needed; } VAAPIEncodeH264Context; typedef struct VAAPIEncodeH264Options { @@ -258,6 +259,19 @@ static int vaapi_encode_h264_write_extra_header(AVCodecContext *avctx, *type = VAEncPackedHeaderRawData; return 0; + +#if !CONFIG_VAAPI_1 + } else if (priv->sei_cbr_workaround_needed) { + // Insert a zero-length header using the old SEI type. This is + // required to avoid triggering broken behaviour on Intel platforms + // in CBR mode where an invalid SEI message is generated by the + // driver and inserted into the stream. + *data_len = 0; + *type = VAEncPackedHeaderH264_SEI; + priv->sei_cbr_workaround_needed = 0; + return 0; +#endif + } else { return AVERROR_EOF; } @@ -614,6 +628,10 @@ static int vaapi_encode_h264_init_picture_params(AVCodecContext *avctx, if (opt->sei & SEI_IDENTIFIER && pic->encode_order == 0) priv->sei_needed = 1; +#if !CONFIG_VAAPI_1 + if (ctx->va_rc_mode == VA_RC_CBR) + priv->sei_cbr_workaround_needed = 1; +#endif if (opt->sei & SEI_TIMING) { memset(&priv->pic_timing, 0, sizeof(priv->pic_timing));