From patchwork Sun Oct 27 00:14:32 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: hydra3333@gmail.com X-Patchwork-Id: 15982 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id 92AE64477B6 for ; Sun, 27 Oct 2019 03:14:44 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 6931A68AE55; Sun, 27 Oct 2019 03:14:44 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pl1-f196.google.com (mail-pl1-f196.google.com [209.85.214.196]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 65FBD68A995 for ; Sun, 27 Oct 2019 03:14:37 +0300 (EEST) Received: by mail-pl1-f196.google.com with SMTP id c16so3430639plz.9 for ; Sat, 26 Oct 2019 17:14:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding:thread-index:content-language :disposition-notification-to; bh=LfkkK4gVJrGEyydjqUYyN98qg3GpzyCPN6FAK5wFUag=; b=Qfntx9ufTs11A/rOwLfYBUn85Rva2RHdjBXhkZ9YRPb64CpUahad4d6Ksy4H7N1YPW /WOKkpfuPb2oKIMT08iL+4Z41mGtSRvnfPtQVvjyEnwL8WupO6TEAuKYuanLqPbAwpVU Pior4fIZ4gc47wkYclLTAj8D0soDxR6ItA7gWRqghVZvtAVnJ5t3nFlZ3+HKc7r6UZri A3Rzw1HgMeqZTCKnpHNWtRI6zeSoZl2bL0TuRzqAc48MGHBFMsbjZOce3humw42wdfIs fUN5ddQECTJwd6m/zvpZnbcSxJVUH7/4joHdr1aO4dy2mYAYb4iL9khJyTTLmSUokaQU ZYEQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding:thread-index:content-language :disposition-notification-to; bh=LfkkK4gVJrGEyydjqUYyN98qg3GpzyCPN6FAK5wFUag=; b=KVKP8Dhb88KfEVUZY0dvmoD92llH2fNROMBtk5MLpi5CIkwdBwKQr9vAlbDSTYuqpg Fj5oUEb08rYD60LA7aj2f/CRS+TiNklSr+nF7tz75E/aarzzp0f9DpyxfRd7IjGb6LhL XiMHlaXwiy/c7PCnZzJpOGbMxefrOerVOcO+9fbiPaA3nVhHMzb2zc9hKrJIogCTmJMI oe0E38esF1uLFC2ylrBQGryZFpW8TTNrmJ4Dy9mTLXq6rVXoSSSa7iicAU5/WKb9W2lv cBtVUDSzkkfsd9O2mBHL1DnC9R2Uxyc/jx+ed6rrnorZGKEjxb9/QxTgVRw8nVJUk76z eF1A== X-Gm-Message-State: APjAAAVPjE6AIud9J1UqS0fg9eDgZ4yeiulM6LOGexVOfDXE6ntQU8FR it/t6K1xbBnFKUWQj3YjJcZN5Uyg X-Google-Smtp-Source: APXvYqzgyPuyZqlvzDbhj1vFOoPZoP5HghruB46+NqVroopd0AMoq2AziiQI9AjCQf5mP8FZnZ3GGA== X-Received: by 2002:a17:902:9b85:: with SMTP id y5mr11975570plp.138.1572135275697; Sat, 26 Oct 2019 17:14:35 -0700 (PDT) Received: from 3900X ([58.174.88.239]) by smtp.gmail.com with ESMTPSA id p2sm4219571pfn.140.2019.10.26.17.14.33 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 26 Oct 2019 17:14:35 -0700 (PDT) From: To: Date: Sun, 27 Oct 2019 10:44:32 +1030 Message-ID: MIME-Version: 1.0 X-Mailer: Microsoft Outlook 16.0 Thread-Index: AdWMW4E8XIZWOHivQq6sSR8UvcMM4Q== Content-Language: en-au Subject: Re: [FFmpeg-devel] [PATCH] avcodec/nvenc: multiple reference frames 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 14.10.2019 18:56 Timo Rothenpieler wrote: > > On 14.10.2019 17:43, Hendrik Leppkes wrote: > > > Since some users seem to have blindly passed -refs to their > > > commandline which now fails without really telling them why, any > > > thoughts on moving the capability check error messages onto a high log > > > level so that they are shown by default, since they are the source of > > > a failure to encode? > > > > > > - Hendrik > > > > Maybe all errors in nvenc_check_capabilities should be warnings instead > > of verbose even? > > Warning: newbie user-submitted patch attached for your consideration. > > Context: https://trac.ffmpeg.org/ticket/8254 > The option -refs works OK on newest models of nvidia graphics cards > however fails with a slightly obscure (to a user) error message on > common but lesser models of nvidia graphics cards (eg 1050Ti). > > The attached patch seeks to slightly modify relevant error messages > and change error messages in nvenc_check_capabilities to be issued > as warnings instead of verbose. > > Thank you for considering the patch. > > << File: ffmpeg_ncenc_messages_patch_20191027.patch >> > -------------- next part -------------- > A non-text attachment was scrubbed... > Name: winmail.dat > Type: application/ms-tnef > Size: 20154 bytes > Desc: not available > URL: I see the attachment (attached by outlook) was scrubbed. Sorry, I'd hoped it would work. So, patch just pasted below to see if that works. return AVERROR(ENOSYS); @@ -369,46 +369,46 @@ ret = nvenc_check_cap(avctx, NV_ENC_CAPS_SUPPORT_10BIT_ENCODE); if (IS_10BIT(ctx->data_pix_fmt) && ret <= 0) { - av_log(avctx, AV_LOG_VERBOSE, "10 bit encode not supported\n"); + av_log(avctx, AV_LOG_WARNING, "10 bit encode not supported\n"); return AVERROR(ENOSYS); } ret = nvenc_check_cap(avctx, NV_ENC_CAPS_SUPPORT_LOOKAHEAD); if (ctx->rc_lookahead > 0 && ret <= 0) { - av_log(avctx, AV_LOG_VERBOSE, "RC lookahead not supported\n"); + av_log(avctx, AV_LOG_WARNING, "RC lookahead not supported\n"); return AVERROR(ENOSYS); } ret = nvenc_check_cap(avctx, NV_ENC_CAPS_SUPPORT_TEMPORAL_AQ); if (ctx->temporal_aq > 0 && ret <= 0) { - av_log(avctx, AV_LOG_VERBOSE, "Temporal AQ not supported\n"); + av_log(avctx, AV_LOG_WARNING, "Temporal AQ not supported\n"); return AVERROR(ENOSYS); } ret = nvenc_check_cap(avctx, NV_ENC_CAPS_SUPPORT_WEIGHTED_PREDICTION); if (ctx->weighted_pred > 0 && ret <= 0) { - av_log (avctx, AV_LOG_VERBOSE, "Weighted Prediction not supported\n"); + av_log (avctx, AV_LOG_WARNING, "Weighted Prediction not supported\n"); return AVERROR(ENOSYS); } ret = nvenc_check_cap(avctx, NV_ENC_CAPS_SUPPORT_CABAC); if (ctx->coder == NV_ENC_H264_ENTROPY_CODING_MODE_CABAC && ret <= 0) { - av_log(avctx, AV_LOG_VERBOSE, "CABAC entropy coding not supported\n"); + av_log(avctx, AV_LOG_WARNING, "CABAC entropy coding not supported\n"); return AVERROR(ENOSYS); } #ifdef NVENC_HAVE_BFRAME_REF_MODE ret = nvenc_check_cap(avctx, NV_ENC_CAPS_SUPPORT_BFRAME_REF_MODE); if (ctx->b_ref_mode == NV_ENC_BFRAME_REF_MODE_EACH && ret != 1) { - av_log(avctx, AV_LOG_VERBOSE, "Each B frame as reference is not supported\n"); + av_log(avctx, AV_LOG_WARNING, "Each B frame as reference is not supported\n"); return AVERROR(ENOSYS); } else if (ctx->b_ref_mode != NV_ENC_BFRAME_REF_MODE_DISABLED && ret == 0) { - av_log(avctx, AV_LOG_VERBOSE, "B frames as references are not supported\n"); + av_log(avctx, AV_LOG_WARNING, "B frames as references are not supported\n"); return AVERROR(ENOSYS); } #else if (ctx->b_ref_mode != 0) { - av_log(avctx, AV_LOG_VERBOSE, "B frames as references need SDK 8.1 at build time\n"); + av_log(avctx, AV_LOG_WARNING, "B frames as references need SDK 8.1 at build time\n"); return AVERROR(ENOSYS); } #endif @@ -416,12 +416,13 @@ #ifdef NVENC_HAVE_MULTIPLE_REF_FRAMES ret = nvenc_check_cap(avctx, NV_ENC_CAPS_SUPPORT_MULTIPLE_REF_FRAMES); if(avctx->refs != NV_ENC_NUM_REF_FRAMES_AUTOSELECT && ret <= 0) { - av_log(avctx, AV_LOG_VERBOSE, "Multiple reference frames are not supported\n"); + av_log(avctx, AV_LOG_WARNING, + "Multiple reference frames are not supported by the device\n"); return AVERROR(ENOSYS); } #else if(avctx->refs != 0) { - av_log(avctx, AV_LOG_VERBOSE, "Multiple reference frames need SDK 9.1 at build time\n"); + av_log(avctx, AV_LOG_WARNING, "Multiple reference frames need SDK 9.1 at build time\n"); return AVERROR(ENOSYS); } #endif @@ -458,7 +459,7 @@ av_log(avctx, loglevel, "[ GPU #%d - < %s > has Compute SM %d.%d ]\n", idx, name, major, minor); if (((major << 4) | minor) < NVENC_CAP) { - av_log(avctx, loglevel, "does not support NVENC\n"); + av_log(avctx, AV_LOG_WARNING, "does not support NVENC\n"); goto fail; } @@ -601,7 +602,8 @@ return AVERROR_EXIT; if (!dl_fn->nvenc_device_count) { - av_log(avctx, AV_LOG_FATAL, "No NVENC capable devices found\n"); + av_log(avctx, AV_LOG_FATAL, + "No NVENC capable devices found, or requested feature not supported by the device\n"); return AVERROR_EXTERNAL; } --- a/libavcodec/nvenc.c 2019-10-26 16:18:38.688412000 -0700 +++ b/libavcodec/nvenc.c 2019-10-26 16:34:12.825972419 -0700 @@ -321,39 +321,39 @@ ret = nvenc_check_codec_support(avctx); if (ret < 0) { - av_log(avctx, AV_LOG_VERBOSE, "Codec not supported\n"); + av_log(avctx, AV_LOG_WARNING, "Codec not supported\n"); return ret; } ret = nvenc_check_cap(avctx, NV_ENC_CAPS_SUPPORT_YUV444_ENCODE); if (IS_YUV444(ctx->data_pix_fmt) && ret <= 0) { - av_log(avctx, AV_LOG_VERBOSE, "YUV444P not supported\n"); + av_log(avctx, AV_LOG_WARNING, "YUV444P not supported\n"); return AVERROR(ENOSYS); } ret = nvenc_check_cap(avctx, NV_ENC_CAPS_SUPPORT_LOSSLESS_ENCODE); if (ctx->preset >= PRESET_LOSSLESS_DEFAULT && ret <= 0) { - av_log(avctx, AV_LOG_VERBOSE, "Lossless encoding not supported\n"); + av_log(avctx, AV_LOG_WARNING, "Lossless encoding not supported\n"); return AVERROR(ENOSYS); } ret = nvenc_check_cap(avctx, NV_ENC_CAPS_WIDTH_MAX); if (ret < avctx->width) { - av_log(avctx, AV_LOG_VERBOSE, "Width %d exceeds %d\n", + av_log(avctx, AV_LOG_WARNING, "Width %d exceeds %d\n", avctx->width, ret); return AVERROR(ENOSYS); } ret = nvenc_check_cap(avctx, NV_ENC_CAPS_HEIGHT_MAX); if (ret < avctx->height) { - av_log(avctx, AV_LOG_VERBOSE, "Height %d exceeds %d\n", + av_log(avctx, AV_LOG_WARNING, "Height %d exceeds %d\n", avctx->height, ret); return AVERROR(ENOSYS); } ret = nvenc_check_cap(avctx, NV_ENC_CAPS_NUM_MAX_BFRAMES); if (ret < avctx->max_b_frames) { - av_log(avctx, AV_LOG_VERBOSE, "Max B-frames %d exceed %d\n", + av_log(avctx, AV_LOG_WARNING, "Max B-frames %d exceed %d\n", avctx->max_b_frames, ret); return AVERROR(ENOSYS); @@ -361,7 +361,7 @@ ret = nvenc_check_cap(avctx, NV_ENC_CAPS_SUPPORT_FIELD_ENCODING); if (ret < 1 && avctx->flags & AV_CODEC_FLAG_INTERLACED_DCT) { - av_log(avctx, AV_LOG_VERBOSE, + av_log(avctx, AV_LOG_WARNING, "Interlaced encoding is not supported. Supported level: %d\n", ret);