From patchwork Fri Jun 19 01:52:46 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fei Wang X-Patchwork-Id: 20491 Delivered-To: andriy.gelman@gmail.com Received: by 2002:a25:80ca:0:0:0:0:0 with SMTP id c10csp106156ybm; Thu, 18 Jun 2020 18:54:14 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzQUQ8RxRIxfdMEdu6qCeCYDfp/ApA1BR+YPDBKZRZfJre9+tY1y99l5doJHAp5JEOCrf5Q X-Received: by 2002:a1c:32c4:: with SMTP id y187mr1138861wmy.79.1592531654345; Thu, 18 Jun 2020 18:54:14 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1592531654; cv=none; d=google.com; s=arc-20160816; b=nWXAsUwNitmU2OM08qJnE5cvjRdMBe4E2+xG1ABOI7iusk4sJEcLLOAGhDCTSzj+OE dWfX0XGXkp/1ZocJVaBCHdUzTowWpMD5DI+q7CX2LjwYnByCpqQD3cR+f2ezoTohTJrD Zom+5RgTbjgFEX++sOYlxGX6WNlwZWmMKek8ul4+bB4JzUplLADVzeoKA32yNApPilw+ lNmiJpg8sUxjnIcX8hZMJXasr8Wa/anlbqN9PgSHqqRWFbaGHws/7c326MG0cWFdPIEy Ia4mNca2l3Dk2cs7nvSsZto+v5h5j43/Bruwxs6bDfuC0R8JyVXMofLHsi1qjct2Lw1+ 7pVQ== 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:cc: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:ironport-sdr:ironport-sdr:delivered-to; bh=NUMWNFCBhnNk96wtocv2B+MZq/Qy8zeA5QMoiE568WE=; b=waxrw/8R5MbyotXYJYAj4J9eHcpgcnpowaTRJtOx3cjlzJZcvQmTGIpMnJ7ntJPPDG lZVTdwz+zqqfwUeCEAVUisXIyNCCEReM6rzmyNkO4rN2VCQ/P+e4YadbHPaLqXvb4KUl y/s0/VP7VqHahqt+K6VWwAtBGDBSskKbQ+iFLa+FTTtB0K22/+w/NMask2Wy8m16q2Ql uYG2Ife0V2+iCHQkN0kbfki6fFULg8R6wNm8eyU3Ew9SpOb12nKmlwci7N60cuiEtzU1 BXkjmZDl+JfPRHrfP6prGrwDeXvT5P2Uj11FUm7i5obU/ONxFni6+LcZQQxjA4f0TJVv TgqA== ARC-Authentication-Results: i=1; mx.google.com; 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 sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id w6si4581324wrv.437.2020.06.18.18.54.13; Thu, 18 Jun 2020 18:54:14 -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; 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 sp=NONE dis=NONE) header.from=intel.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id B213E68B606; Fri, 19 Jun 2020 04:53:41 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 1075E68B507 for ; Fri, 19 Jun 2020 04:53:37 +0300 (EEST) IronPort-SDR: YrwnS25myKYWFVSz8hfNHEY2fvJOtbNMSwBFOyfqFw6ire1p0203beNuwvnpR+ApMtU0uHz1WW nQHUxXWzMf4Q== X-IronPort-AV: E=McAfee;i="6000,8403,9656"; a="204278677" X-IronPort-AV: E=Sophos;i="5.75,253,1589266800"; d="scan'208";a="204278677" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by orsmga104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 Jun 2020 18:53:28 -0700 IronPort-SDR: WHtwNBkycmXR46AhOqIt+r6rfivZNaON7mLzK3jCn//9WgE3DLt8xvLmU7JZZvX4+r8HnkkVAA aEudXRRczI9A== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.75,253,1589266800"; d="scan'208";a="317989418" Received: from f.sh.intel.com ([10.239.159.122]) by FMSMGA003.fm.intel.com with ESMTP; 18 Jun 2020 18:53:27 -0700 From: Fei Wang To: ffmpeg-devel@ffmpeg.org Date: Fri, 19 Jun 2020 09:52:46 +0800 Message-Id: <20200619015248.21873-7-fei.w.wang@intel.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200619015248.21873-1-fei.w.wang@intel.com> References: <20200619015248.21873-1-fei.w.wang@intel.com> Subject: [FFmpeg-devel] [PATCH v1 7/9] lavu/pix_fmt: consider bits per pixel in finding best pix fmt 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 Cc: Fei Wang MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: nhXAzP2SsCI0 Content-Length: 3186 By using bits per pixel in finding best pix fmt will make the result more accurate. For example, the src fmt is AV_PIX_FMT_YUV420P10LE and dst fmt are AV_PIX_FMT_P012LE and AV_PIX_FMT_P010LE. In this case the two dst fmts have the same scores and padded bits and number of components and P012 will be chosen finally. So add the bits per pixel as one of conditions will return P010 which should be the best choice compare with src fmt. Signed-off-by: Fei Wang --- libavutil/pixdesc.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/libavutil/pixdesc.c b/libavutil/pixdesc.c index 38297e2e83..354441e840 100644 --- a/libavutil/pixdesc.c +++ b/libavutil/pixdesc.c @@ -2890,6 +2890,7 @@ enum AVPixelFormat av_find_best_pix_fmt_of_2(enum AVPixelFormat dst_pix_fmt1, en int loss1, loss2, loss_mask; const AVPixFmtDescriptor *desc1 = av_pix_fmt_desc_get(dst_pix_fmt1); const AVPixFmtDescriptor *desc2 = av_pix_fmt_desc_get(dst_pix_fmt2); + const AVPixFmtDescriptor *src = av_pix_fmt_desc_get(src_pix_fmt); int score1, score2; if (!desc1) { @@ -2905,8 +2906,11 @@ enum AVPixelFormat av_find_best_pix_fmt_of_2(enum AVPixelFormat dst_pix_fmt1, en score2 = get_pix_fmt_score(dst_pix_fmt2, src_pix_fmt, &loss2, loss_mask); if (score1 == score2) { - if(av_get_padded_bits_per_pixel(desc2) != av_get_padded_bits_per_pixel(desc1)) { + if (av_get_padded_bits_per_pixel(desc2) != av_get_padded_bits_per_pixel(desc1)) { dst_pix_fmt = av_get_padded_bits_per_pixel(desc2) < av_get_padded_bits_per_pixel(desc1) ? dst_pix_fmt2 : dst_pix_fmt1; + } else if (av_get_bits_per_pixel(desc2) == av_get_bits_per_pixel(src) || + av_get_bits_per_pixel(desc1) == av_get_bits_per_pixel(src)) { + dst_pix_fmt = av_get_bits_per_pixel(desc2) == av_get_bits_per_pixel(src) ? dst_pix_fmt2 : dst_pix_fmt1; } else { dst_pix_fmt = desc2->nb_components < desc1->nb_components ? dst_pix_fmt2 : dst_pix_fmt1; }