linux-media.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: "Niklas Söderlund" <niklas.soderlund@ragnatech.se>
To: Laurent Pinchart <laurent.pinchart@ideasonboard.com>,
	Hans Verkuil <hverkuil@xs4all.nl>,
	linux-media@vger.kernel.org
Cc: linux-renesas-soc@vger.kernel.org,
	tomoharu.fukawa.eb@renesas.com,
	"Kieran Bingham" <kieran.bingham@ideasonboard.com>,
	"Sakari Ailus" <sakari.ailus@linux.intel.com>,
	"Niklas Söderlund" <niklas.soderlund+renesas@ragnatech.se>
Subject: [PATCH v2 11/17] rcar-vin: select capture mode based on free buffers
Date: Wed, 24 May 2017 02:15:34 +0200	[thread overview]
Message-ID: <20170524001540.13613-12-niklas.soderlund@ragnatech.se> (raw)
In-Reply-To: <20170524001540.13613-1-niklas.soderlund@ragnatech.se>

From: Niklas Söderlund <niklas.soderlund+renesas@ragnatech.se>

Instead of selecting single or continuous capture mode based on how many
buffers userspace intends to give us select capture mode based on number
of free buffers we can allocate to hardware when the stream is started.

This change is a prerequisite to enable the driver to switch from
continuous to single capture mode (or the other way around) when the
driver is stalled by userspace not feeding it buffers as fast as it
consumes it.

Signed-off-by: Niklas Söderlund <niklas.soderlund+renesas@ragnatech.se>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
---
 drivers/media/platform/rcar-vin/rcar-dma.c | 31 +++++++++++++++---------------
 1 file changed, 15 insertions(+), 16 deletions(-)

diff --git a/drivers/media/platform/rcar-vin/rcar-dma.c b/drivers/media/platform/rcar-vin/rcar-dma.c
index 11e9799564299fca..47d78f68d715d945 100644
--- a/drivers/media/platform/rcar-vin/rcar-dma.c
+++ b/drivers/media/platform/rcar-vin/rcar-dma.c
@@ -405,7 +405,21 @@ static void rvin_capture_off(struct rvin_dev *vin)
 
 static int rvin_capture_start(struct rvin_dev *vin)
 {
-	int ret;
+	struct rvin_buffer *buf, *node;
+	int bufs, ret;
+
+	/* Count number of free buffers */
+	bufs = 0;
+	list_for_each_entry_safe(buf, node, &vin->buf_list, list)
+		bufs++;
+
+	/* Continuous capture requires more buffers then there are HW slots */
+	vin->continuous = bufs > HW_BUFFER_NUM;
+
+	if (!rvin_fill_hw(vin)) {
+		vin_err(vin, "HW not ready to start, not enough buffers available\n");
+		return -EINVAL;
+	}
 
 	rvin_crop_scale_comp(vin);
 
@@ -1062,22 +1076,7 @@ static int rvin_start_streaming(struct vb2_queue *vq, unsigned int count)
 	vin->state = RUNNING;
 	vin->sequence = 0;
 
-	/* Continuous capture requires more buffers then there are HW slots */
-	vin->continuous = count > HW_BUFFER_NUM;
-
-	/*
-	 * This should never happen but if we don't have enough
-	 * buffers for HW bail out
-	 */
-	if (!rvin_fill_hw(vin)) {
-		vin_err(vin, "HW not ready to start, not enough buffers available\n");
-		ret = -EINVAL;
-		goto out;
-	}
-
 	ret = rvin_capture_start(vin);
-out:
-	/* Return all buffers if something went wrong */
 	if (ret) {
 		return_all_buffers(vin, VB2_BUF_STATE_QUEUED);
 		v4l2_subdev_call(sd, video, s_stream, 0);
-- 
2.13.0

  parent reply	other threads:[~2017-05-24  0:17 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-05-24  0:15 [PATCH v2 00/17] rcar-vin: fix issues with format and capturing Niklas Söderlund
2017-05-24  0:15 ` [PATCH v2 01/17] rcar-vin: reset bytesperline and sizeimage when resetting format Niklas Söderlund
2017-05-24  0:15 ` [PATCH v2 02/17] rcar-vin: use rvin_reset_format() in S_DV_TIMINGS Niklas Söderlund
2017-05-24  0:15 ` [PATCH v2 03/17] rcar-vin: fix how pads are handled for v4l2 subdevice operations Niklas Söderlund
2017-05-24  0:15 ` [PATCH v2 04/17] rcar-vin: fix standard in input enumeration Niklas Söderlund
2017-05-24  0:15 ` [PATCH v2 05/17] rcar-vin: move subdev source and sink pad index to rvin_graph_entity Niklas Söderlund
2017-05-24  0:15 ` [PATCH v2 06/17] rcar-vin: refactor pad lookup code Niklas Söderlund
2017-05-24  0:15 ` [PATCH v2 07/17] rcar-vin: move pad lookup to async bound handler Niklas Söderlund
2017-05-24  0:15 ` [PATCH v2 08/17] rcar-vin: use pad information when verifying media bus format Niklas Söderlund
2017-05-24  0:15 ` [PATCH v2 09/17] rcar-vin: decrease buffers needed to capture Niklas Söderlund
2017-05-24  0:15 ` [PATCH v2 10/17] rcar-vin: move functions which acts on hardware Niklas Söderlund
2017-05-24  0:15 ` Niklas Söderlund [this message]
2017-05-24  0:15 ` [PATCH v2 12/17] rcar-vin: allow switch between capturing modes when stalling Niklas Söderlund
2017-05-24  0:15 ` [PATCH v2 13/17] rcar-vin: refactor and fold in function after stall handling rework Niklas Söderlund
2017-05-24  0:15 ` [PATCH v2 14/17] rcar-vin: remove subdevice matching from bind and unbind callbacks Niklas Söderlund
2017-05-24  0:15 ` [PATCH v2 15/17] rcar-vin: register the video device at probe time Niklas Söderlund
2017-05-29  6:52   ` Hans Verkuil
2017-05-29  6:56     ` Hans Verkuil
2017-05-29  7:49       ` Niklas Söderlund
2017-05-29  7:55         ` Hans Verkuil
2017-05-29  8:13           ` Niklas Söderlund
2017-05-24  0:15 ` [PATCH v2 16/17] rcar-vin: add missing error check to propagate error Niklas Söderlund
2017-05-24  0:15 ` [PATCH v2 17/17] rcar-vin: fix bug in pixelformat selection Niklas Söderlund
2017-05-24  9:01   ` Sergei Shtylyov

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20170524001540.13613-12-niklas.soderlund@ragnatech.se \
    --to=niklas.soderlund@ragnatech.se \
    --cc=hverkuil@xs4all.nl \
    --cc=kieran.bingham@ideasonboard.com \
    --cc=laurent.pinchart@ideasonboard.com \
    --cc=linux-media@vger.kernel.org \
    --cc=linux-renesas-soc@vger.kernel.org \
    --cc=niklas.soderlund+renesas@ragnatech.se \
    --cc=sakari.ailus@linux.intel.com \
    --cc=tomoharu.fukawa.eb@renesas.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).