From patchwork Thu Jul 6 23:37:22 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mark Thompson X-Patchwork-Id: 4247 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.103.1.76 with SMTP id 73csp2799117vsb; Thu, 6 Jul 2017 16:37:34 -0700 (PDT) X-Received: by 10.28.26.2 with SMTP id a2mr211834wma.21.1499384254122; Thu, 06 Jul 2017 16:37:34 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1499384254; cv=none; d=google.com; s=arc-20160816; b=YN9F9hUSTSujjgzN5HPTw+rOBLSlxGaZosk3I1yeJnZKdHdwcreDb2XaEFSxjnY5T2 THuik9x/IE1KsMGsD36ibGxqNBuipLCKk7DTkUeDDkgaer5+EF2p7cGq+ExTcx7hY37T 7hlij/XGdgCVvo8EGVieqSpvFuR8BAPDyphWtj1/fIXXGUsidE3soqYiOtAyZyD1Qu7G BlE+dHt28eHl6YFGbexc9FpXn3Mw2AGIF9XMtJAVEbaLmb8zrwRzOTdiNGuXwg8lIcqT bSzbUZ7mz5avZI5FAg26WCgl66E5OZf6zRaUccoLVuZqjAeTECZPI8WFJQMNdbbsfoNw ilTg== 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:in-reply-to:mime-version:user-agent:date :message-id:from:references:to:dkim-signature:delivered-to :arc-authentication-results; bh=LDlNUSe925gTqAj4baXueUU/QzjNlbLzsrUJU3xgOJ4=; b=xTRYzl3Cp+Svh22lFZUunVfhu6hxBaFrNhwiafDivAS2jUDvQNg4L4r+wdWP4Cz16q TbTDX/lS0ahcJ14LrjY/rb5P+rpi5HmWFbCo1naHBsxvGUpZ0ej3O3rZQx+J9+uByyMk QyJrHVClBS1I3wtixgOs2rFUM2fCWYVRT83MF3a4zy/pj3fx+wBA47yE3QlszPZpZp3H 4We0u0OKvOi+BpC9TW6Wa55d0YjSyqVxo4nJijEAS/7XzWX0Bv95jBaemyocvImd2w4k hAbSkCvVKyN6RUdMQZ3ulBqzBxnNGNp8ADgZ3OmSeC2S8tIFu30xXXUo3R4Jth1qi23O fcoA== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@jkqxz-net.20150623.gappssmtp.com header.b=uqAYFOrI; 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 r125si1425100wma.94.2017.07.06.16.37.33; Thu, 06 Jul 2017 16:37:34 -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.b=uqAYFOrI; 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 0D5E1689A9D; Fri, 7 Jul 2017 02:37:28 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wr0-f175.google.com (mail-wr0-f175.google.com [209.85.128.175]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 981026882A5 for ; Fri, 7 Jul 2017 02:37:21 +0300 (EEST) Received: by mail-wr0-f175.google.com with SMTP id k67so23548982wrc.2 for ; Thu, 06 Jul 2017 16:37:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=jkqxz-net.20150623.gappssmtp.com; s=20150623; h=subject:to:references:from:message-id:date:user-agent:mime-version :in-reply-to:content-transfer-encoding; bh=q04pjC6Hrv9nTsC2DbGChMlMqTiLXOX6GJfS3qnc0iY=; b=uqAYFOrIpgoIYxA1rphwG9HIXc7XhCFV0tr7OfOR1OMUG8CK0col3pr872S47Af/QI rFDHs+OsN56KAKstzj2SMaDUj06oNkkFv0SKSGLQOmJQ7i7jAyd/pK26txXwV6snlQTd Koo28q/PlA3Qlu3AmFA5tN0M3mbvwSfDpxK2OBkVMngvF1Qp0A7b6ebFZT+eVflWUddd UOcw5/ItH111TML0/zsqPTQBPSvk207mi6QLIT8MKdFDgtqSEE3VAw9mCLRPRzzWg23Y T5oqMKTJXOVA4jRUr19WKhulQTkf954rLxZIK4lVdDV4Z9UNXZA/p7bNGHKRaFS8F7+s dxMA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-transfer-encoding; bh=q04pjC6Hrv9nTsC2DbGChMlMqTiLXOX6GJfS3qnc0iY=; b=tOAa0v8Xxum3MBB0mZFstwSg8K0IrsRi9jGhz2I2IuXjYRa1AWdvhClwa7p5FI4sNr clPGvlYbZX5h41TcdCHvs/bHgPhQZ5YkD/Um6gdZUWyMUps3gqPKxx+3fLl8OZwGnN6K JIKwYgYJcqOYyNNObEf+1OalmkRsCK+Gu6hcIo8aD2mLLT+9L11F3jjn7R6YLeKrvS4Q j9q+eAqry2RToso+P8x9kCrgVbRcgvlLsoIW+B7+hH/UHTAKk96m1CkNvI81B2zUsVqW 7EuMccrmvpI8XF2uVnZMbJpMNowPkrh3OePCIqgxk3+o4OLng6848RffNYPfboPuhxR9 6u9w== X-Gm-Message-State: AKS2vOxJfUgUaeOOzmYZm9rp+LggCUV6hDw3O7ZAZ8x6x0keiuXLgyp4 jc7TlFoPX4cUN1D8R7o= X-Received: by 10.223.128.177 with SMTP id 46mr32878953wrl.150.1499384243776; Thu, 06 Jul 2017 16:37:23 -0700 (PDT) Received: from [192.168.0.8] (cpc91242-cmbg18-2-0-cust650.5-4.cable.virginm.net. [82.8.130.139]) by smtp.gmail.com with ESMTPSA id g66sm2346975wmc.6.2017.07.06.16.37.22 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 06 Jul 2017 16:37:23 -0700 (PDT) To: FFmpeg development discussions and patches References: <20170706104804.9120-1-lq@chinaffmpeg.org> <25d2892e-d816-5d8e-a8eb-aebdff4942fe@jkqxz.net> From: Mark Thompson Message-ID: <653d80e8-3efd-850d-fd3f-d9823a75898c@jkqxz.net> Date: Fri, 7 Jul 2017 00:37:22 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.8.0 MIME-Version: 1.0 In-Reply-To: Subject: Re: [FFmpeg-devel] [PATCH] avcodec/qsvenc_hevc: add idr_interval option 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" On 07/07/17 00:20, Steven Liu wrote: > 2017-07-07 7:12 GMT+08:00 Mark Thompson : >> On 06/07/17 23:32, Steven Liu wrote: >>> 2017-07-06 19:51 GMT+08:00 Mark Thompson : >>>> On 06/07/17 11:48, Steven Liu wrote: >>>>> From: Steven Liu >>>>> >>>>> user need to control the idr_interval for qsv hevc >>>>> >>>>> Signed-off-by: Steven Liu >>>>> --- >>>>> libavcodec/qsvenc_hevc.c | 1 + >>>>> 1 file changed, 1 insertion(+) >>>>> >>>>> diff --git a/libavcodec/qsvenc_hevc.c b/libavcodec/qsvenc_hevc.c >>>>> index 7d4d55bb61..c063e27eea 100644 >>>>> --- a/libavcodec/qsvenc_hevc.c >>>>> +++ b/libavcodec/qsvenc_hevc.c >>>>> @@ -214,6 +214,7 @@ static av_cold int qsv_enc_close(AVCodecContext *avctx) >>>>> static const AVOption options[] = { >>>>> QSV_COMMON_OPTS >>>>> >>>>> + { "idr_interval", "Distance (in I-frames) between IDR frames", OFFSET(qsv.idr_interval), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, INT_MAX, VE }, >>>>> { "load_plugin", "A user plugin to load in an internal session", OFFSET(load_plugin), AV_OPT_TYPE_INT, { .i64 = LOAD_PLUGIN_HEVC_SW }, LOAD_PLUGIN_NONE, LOAD_PLUGIN_HEVC_HW, VE, "load_plugin" }, >>>>> { "none", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = LOAD_PLUGIN_NONE }, 0, 0, VE, "load_plugin" }, >>>>> { "hevc_sw", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = LOAD_PLUGIN_HEVC_SW }, 0, 0, VE, "load_plugin" }, >>>>> >>>> >>>> Sure, I guess? >>>> >>>> Though, what use-case do you intend this option for in H.265? It already generates IRAP frames at the GOP interval, and unlike H.264 there isn't any confusion about whether they are usable as seek points. >>> hmm, some user report to me they can not split mpegts segment by >>> keyframe when they use qsv h.265, i sent this patch to them, it can be >>> split. >> >> Then adding this option to set sounds like an appalling hack. What are the actual symptoms of this problem? Can you provide an example? > Just use command line to split hls format. after the patch sent to > the user, they just response an that's ok and no more response :(> >>>> >>>> (I can't actually remember exactly what types of NAL units it generates with and without this option; I'll have a look later.) >>>> >> >> Using the hardware encoder on Linux for Skylake, the very first frame is IDR_W_RADL, then subsequent frames are all TRAIL_N/TRAIL_R, or CRA to start a new GOP. (It need not be the same on all versions of the encoder, though.) > Yes, maybe the problem is different versions' result. Hmm. The frame type information from libmfx is really oriented towards H.264, so the H.265 types don't obviously map for key frames. Does this fix it? (Also an appalling hack (will fail if libmfx generates an intra frame inline), but detecting the IRAP cases properly shouldn't be too bad if this is the problem.) diff --git a/libavcodec/qsvenc.c b/libavcodec/qsvenc.c index 5eb506f..ea5f32f 100644 --- a/libavcodec/qsvenc.c +++ b/libavcodec/qsvenc.c @@ -1088,8 +1088,8 @@ int ff_qsv_encode(AVCodecContext *avctx, QSVEncContext *q, new_pkt.pts = av_rescale_q(bs->TimeStamp, (AVRational){1, 90000}, avctx->time_base); new_pkt.size = bs->DataLength; - if (bs->FrameType & MFX_FRAMETYPE_IDR || - bs->FrameType & MFX_FRAMETYPE_xIDR) + if (bs->FrameType & MFX_FRAMETYPE_I || + bs->FrameType & MFX_FRAMETYPE_xI) new_pkt.flags |= AV_PKT_FLAG_KEY; #if FF_API_CODED_FRAME