From patchwork Thu Feb 8 09:42:00 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Todor Tomov X-Patchwork-Id: 10206817 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 9E11D600F6 for ; Thu, 8 Feb 2018 09:43:57 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 95BF729443 for ; Thu, 8 Feb 2018 09:43:57 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 8A95C29448; Thu, 8 Feb 2018 09:43:57 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00,RCVD_IN_DNSWL_HI autolearn=unavailable version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 22B9029443 for ; Thu, 8 Feb 2018 09:43:57 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751069AbeBHJmY (ORCPT ); Thu, 8 Feb 2018 04:42:24 -0500 Received: from ns.mm-sol.com ([37.157.136.199]:42526 "EHLO extserv.mm-sol.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750847AbeBHJmX (ORCPT ); Thu, 8 Feb 2018 04:42:23 -0500 Received: from mms-0439.qualcomm.mm-sol.com (unknown [37.157.136.206]) by extserv.mm-sol.com (Postfix) with ESMTPSA id A38D1CCB6; Thu, 8 Feb 2018 11:42:21 +0200 (EET) From: Todor Tomov To: mchehab@kernel.org, sakari.ailus@linux.intel.com, hverkuil@xs4all.nl Cc: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, Todor Tomov Subject: [PATCH 2/2] media: ov5645: Improve mode finding function Date: Thu, 8 Feb 2018 11:42:00 +0200 Message-Id: <1518082920-11309-2-git-send-email-todor.tomov@linaro.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1518082920-11309-1-git-send-email-todor.tomov@linaro.org> References: <1518082920-11309-1-git-send-email-todor.tomov@linaro.org> Sender: linux-media-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-media@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Find the sensor mode by comparing the size of the requested image size and the sensor mode's image size. The distance between image sizes is the size in pixels of the non-overlapping regions between the requested size and the frame-specified size. This logic is borrowed from et8ek8 sensor driver. Signed-off-by: Todor Tomov --- drivers/media/i2c/ov5645.c | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/drivers/media/i2c/ov5645.c b/drivers/media/i2c/ov5645.c index 9755562..6d06c50 100644 --- a/drivers/media/i2c/ov5645.c +++ b/drivers/media/i2c/ov5645.c @@ -964,18 +964,24 @@ __ov5645_get_pad_crop(struct ov5645 *ov5645, struct v4l2_subdev_pad_config *cfg, static const struct ov5645_mode_info * ov5645_find_nearest_mode(unsigned int width, unsigned int height) { - int i; + unsigned int max_dist_match = (unsigned int) -1; + int i, n = 0; - for (i = ARRAY_SIZE(ov5645_mode_info_data) - 1; i >= 0; i--) { - if (ov5645_mode_info_data[i].width <= width && - ov5645_mode_info_data[i].height <= height) - break; + for (i = 0; i < ARRAY_SIZE(ov5645_mode_info_data); i++) { + unsigned int dist = min(width, ov5645_mode_info_data[i].width) + * min(height, ov5645_mode_info_data[i].height); + + dist = ov5645_mode_info_data[i].width * + ov5645_mode_info_data[i].height + + width * height - 2 * dist; + + if (dist < max_dist_match) { + n = i; + max_dist_match = dist; + } } - if (i < 0) - i = 0; - - return &ov5645_mode_info_data[i]; + return &ov5645_mode_info_data[n]; } static int ov5645_set_format(struct v4l2_subdev *sd,