From patchwork Mon Nov 21 18:47:18 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Miroslav_Sluge=C5=88?= X-Patchwork-Id: 1517 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.103.90.1 with SMTP id o1csp1775547vsb; Mon, 21 Nov 2016 10:47:34 -0800 (PST) X-Received: by 10.98.34.218 with SMTP id p87mr19914398pfj.97.1479754054670; Mon, 21 Nov 2016 10:47:34 -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 n22si23862943pfj.253.2016.11.21.10.47.32; Mon, 21 Nov 2016 10:47:34 -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=@email.cz; dkim=neutral (body hash did not verify) header.i=@email.cz; 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=email.cz Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id D24A3689D4B; Mon, 21 Nov 2016 20:47:24 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mxs2.seznam.cz (mxs2.seznam.cz [77.75.76.125]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 11CD6689A8A for ; Mon, 21 Nov 2016 20:47:17 +0200 (EET) Received: from email.seznam.cz by email-smtpc7a.ng.seznam.cz (email-smtpc7a.ng.seznam.cz [10.23.10.195]) id 107251aa24a549b610e078a7; Mon, 21 Nov 2016 19:47:20 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=email.cz; s=beta; t=1479754040; bh=YK6CEfXRVS5TT77ZQlS04L7xU29YjNoWpiqbJMVLXxw=; h=DKIM-Signature:Received:From:Subject:To:References:Message-ID: Date:User-Agent:MIME-Version:In-Reply-To:Content-Type; b=nekEPRIP+VgmHT2HJOOc69Bbq/7pLvG4LDLCynnXAJOg/VxBWlxHwEEpvqtskbMSR NuMYUcbM0Cr9ciWYQ1JvpcnDYxASgMcNqXyp1iu30UpzJLfwqepYrnOt/sMp/FXhIp T6lHM6zWdY5JKRWqJUy3wTFuz2z/rLp6y6qcGDqY= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=email.cz; s=beta; t=1479754040; bh=YK6CEfXRVS5TT77ZQlS04L7xU29YjNoWpiqbJMVLXxw=; h=Received:From:Subject:To:References:Message-ID:Date:User-Agent: MIME-Version:In-Reply-To:Content-Type; b=C/OM6CYTGRHwwTRGCT0MTToHNyp73eqoQO4+KDUaTpHcwuahvUcPzKjkDUBGnNY1G XqGTZ3sbBsYcDfsj3UVnApO1VtQdGXztMJc9BMjS4Nk5B5ntSixXEdx5PmihjO4jw7 jsmldoOfliANXW/+mcCINhUvjgnii8ZkqNk1JH/c= Received: from [192.168.0.6] (ip-94-113-140-7.net.upcbroadband.cz [94.113.140.7]) by email-relay15.ng.seznam.cz (Seznam SMTPD 1.3.39) with ESMTP; Mon, 21 Nov 2016 19:47:19 +0100 (CET) From: =?UTF-8?Q?Miroslav_Sluge=c5=88?= To: FFmpeg development discussions and patches References: <5832E40B.7010803@email.cz> Message-ID: <58334136.1050105@email.cz> Date: Mon, 21 Nov 2016 19:47:18 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.0.1 MIME-Version: 1.0 In-Reply-To: Subject: Re: [FFmpeg-devel] [PATCH] CUVID: Allow to set number of used surfaces for decoding (resend) 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" Thanks, sending corrected version. just changed OFFSET(surfaces) to OFFSET(nb_surfaces) Miroslav Slugeň Dne 21.11.2016 v 13:29 Timo Rothenpieler napsal(a): > Does not compile: > > libavcodec/cuvid.c:861:19: error: 'CuvidContext' has no member named > 'surfaces' > #define OFFSET(x) offsetof(CuvidContext, x) > > > _______________________________________________ > ffmpeg-devel mailing list > ffmpeg-devel@ffmpeg.org > http://ffmpeg.org/mailman/listinfo/ffmpeg-devel >From 30ddf173c87a9da16ba4725f8beea67d8fa6f537 Mon Sep 17 00:00:00 2001 From: Miroslav Slugen Date: Mon, 21 Nov 2016 10:51:25 +0100 Subject: [PATCH] CUVID: Allow to set number of used surfaces for decoding --- libavcodec/cuvid.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/libavcodec/cuvid.c b/libavcodec/cuvid.c index eafce0a..fbe32fb 100644 --- a/libavcodec/cuvid.c +++ b/libavcodec/cuvid.c @@ -32,8 +32,6 @@ #include "compat/cuda/nvcuvid.h" -#define MAX_FRAME_COUNT 25 - typedef struct CuvidContext { AVClass *avclass; @@ -42,6 +40,7 @@ typedef struct CuvidContext CUvideoparser cuparser; char *cu_gpu; + int nb_surfaces; AVBufferRef *hwdevice; AVBufferRef *hwframe; @@ -185,7 +184,7 @@ static int CUDAAPI cuvid_handle_video_sequence(void *opaque, CUVIDEOFORMAT* form cuinfo.target_rect.right = cuinfo.ulWidth; cuinfo.target_rect.bottom = cuinfo.ulHeight; - cuinfo.ulNumDecodeSurfaces = MAX_FRAME_COUNT; + cuinfo.ulNumDecodeSurfaces = ctx->nb_surfaces; cuinfo.ulNumOutputSurfaces = 1; cuinfo.ulCreationFlags = cudaVideoCreate_PreferCUVID; cuinfo.bitDepthMinus8 = format->bit_depth_luma_minus8; @@ -268,7 +267,7 @@ static int cuvid_decode_packet(AVCodecContext *avctx, const AVPacket *avpkt) if (is_flush && avpkt && avpkt->size) return AVERROR_EOF; - if (av_fifo_size(ctx->frame_queue) / sizeof(CuvidParsedFrame) > MAX_FRAME_COUNT - 2 && avpkt && avpkt->size) + if ((av_fifo_size(ctx->frame_queue) / sizeof(CuvidParsedFrame)) + 2 > ctx->nb_surfaces && avpkt && avpkt->size) return AVERROR(EAGAIN); if (ctx->bsf && avpkt && avpkt->size) { @@ -576,7 +575,7 @@ static int cuvid_test_dummy_decoder(AVCodecContext *avctx, CUVIDPARSERPARAMS *cu cuinfo.target_rect.right = cuinfo.ulWidth; cuinfo.target_rect.bottom = cuinfo.ulHeight; - cuinfo.ulNumDecodeSurfaces = MAX_FRAME_COUNT; + cuinfo.ulNumDecodeSurfaces = ctx->nb_surfaces; cuinfo.ulNumOutputSurfaces = 1; cuinfo.ulCreationFlags = cudaVideoCreate_PreferCUVID; cuinfo.bitDepthMinus8 = 0; @@ -616,7 +615,7 @@ static av_cold int cuvid_decode_init(AVCodecContext *avctx) return ret; } - ctx->frame_queue = av_fifo_alloc(MAX_FRAME_COUNT * sizeof(CuvidParsedFrame)); + ctx->frame_queue = av_fifo_alloc(ctx->nb_surfaces * sizeof(CuvidParsedFrame)); if (!ctx->frame_queue) { ret = AVERROR(ENOMEM); goto error; @@ -743,7 +742,7 @@ static av_cold int cuvid_decode_init(AVCodecContext *avctx) FFMIN(sizeof(ctx->cuparse_ext.raw_seqhdr_data), avctx->extradata_size)); } - ctx->cuparseinfo.ulMaxNumDecodeSurfaces = MAX_FRAME_COUNT; + ctx->cuparseinfo.ulMaxNumDecodeSurfaces = ctx->nb_surfaces; ctx->cuparseinfo.ulMaxDisplayDelay = 4; ctx->cuparseinfo.pUserData = avctx; ctx->cuparseinfo.pfnSequenceCallback = cuvid_handle_video_sequence; @@ -802,7 +801,7 @@ static void cuvid_flush(AVCodecContext *avctx) av_fifo_freep(&ctx->frame_queue); - ctx->frame_queue = av_fifo_alloc(MAX_FRAME_COUNT * sizeof(CuvidParsedFrame)); + ctx->frame_queue = av_fifo_alloc(ctx->nb_surfaces * sizeof(CuvidParsedFrame)); if (!ctx->frame_queue) { av_log(avctx, AV_LOG_ERROR, "Failed to recreate frame queue on flush\n"); return; @@ -851,6 +850,7 @@ static const AVOption options[] = { { "bob", "Bob deinterlacing", 0, AV_OPT_TYPE_CONST, { .i64 = cudaVideoDeinterlaceMode_Bob }, 0, 0, VD, "deint" }, { "adaptive", "Adaptive deinterlacing", 0, AV_OPT_TYPE_CONST, { .i64 = cudaVideoDeinterlaceMode_Adaptive }, 0, 0, VD, "deint" }, { "gpu", "GPU to be used for decoding", OFFSET(cu_gpu), AV_OPT_TYPE_STRING, { .str = NULL }, 0, 0, VD }, + { "surfaces", "Maximum surfaces to be used for decoding", OFFSET(nb_surfaces), AV_OPT_TYPE_INT, { .i64 = 25 }, 0, INT_MAX, VD }, { NULL } }; -- 2.1.4