summaryrefslogtreecommitdiff
path: root/isp
diff options
context:
space:
mode:
authorLaurent Pinchart <laurent.pinchart@ideasonboard.com>2011-08-23 01:02:39 +0200
committerLaurent Pinchart <laurent.pinchart@ideasonboard.com>2011-10-14 13:11:06 +0200
commit9c932e4d718c5ce0b8c177230597a4e3581a9c39 (patch)
treebf85bddef85e4c86872f18f8c18d976ec960ddcc /isp
parent59f9ea04c9c794d289f98d23ef97b85f6be54521 (diff)
omap3isp: Add omap3_isp_video_queue/dequeue_buffer() functions
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Diffstat (limited to 'isp')
-rw-r--r--isp/omap3isp.c49
1 files changed, 31 insertions, 18 deletions
diff --git a/isp/omap3isp.c b/isp/omap3isp.c
index 005625b..d9a64d9 100644
--- a/isp/omap3isp.c
+++ b/isp/omap3isp.c
@@ -148,6 +148,28 @@ static int omap3_isp_video_stop(struct omap3_isp_video *video)
return v4l2_stream_off(video->video);
}
+static int omap3_isp_video_queue_buffer(struct omap3_isp_video *video,
+ struct v4l2_video_buffer *buffer)
+{
+ video->queued++;
+
+ return v4l2_queue_buffer(video->video, buffer);
+}
+
+static int omap3_isp_video_dequeue_buffer(struct omap3_isp_video *video,
+ struct v4l2_video_buffer *buffer)
+{
+ int ret;
+
+ ret = v4l2_dequeue_buffer(video->video, buffer);
+ if (ret < 0)
+ return ret;
+
+ video->queued--;
+
+ return 0;
+}
+
/* -----------------------------------------------------------------------------
* Pools
*/
@@ -165,15 +187,13 @@ static void omap3_isp_pool_event(struct omap3_isp_pool *pool,
int ret;
/* Dequeue the buffer */
- ret = v4l2_dequeue_buffer(from->video, &buffer);
+ ret = omap3_isp_video_dequeue_buffer(from, &buffer);
if (ret < 0) {
printf("error: pool: unable to dequeue buffer: %s (%d)\n",
strerror(-ret), ret);
return;
}
- from->queued--;
-
if (from->queued == 0)
isp->ops->unwatch_fd(from->video->fd);
@@ -187,8 +207,7 @@ static void omap3_isp_pool_event(struct omap3_isp_pool *pool,
omap3_isp_pool_event_input, pool);
}
- to->queued++;
- ret = v4l2_queue_buffer(to->video, &buffer);
+ ret = omap3_isp_video_queue_buffer(to, &buffer);
if (ret < 0)
printf("error: pool: unable to requeue buffer: %s (%d)\n",
strerror(-ret), ret);
@@ -218,14 +237,12 @@ static int omap3_isp_pool_start(struct omap3_isp_pool *pool)
for (i = 0; i < pool->pool->nbufs; ++i) {
buffer.index = i;
- ret = v4l2_queue_buffer(pool->input->video, &buffer);
+ ret = omap3_isp_video_queue_buffer(pool->input, &buffer);
if (ret < 0) {
printf("error: pool: unable to queue buffer %u (%d)\n",
i, ret);
return ret;
}
-
- pool->input->queued++;
}
/* Watch the pool input file descriptor. */
@@ -924,7 +941,7 @@ static void omap3_isp_viewfinder_event(void *priv)
int ret;
/* Dequeue the buffer */
- ret = v4l2_dequeue_buffer(isp->viewfinder.output->video, &buffer);
+ ret = omap3_isp_video_dequeue_buffer(isp->viewfinder.output, &buffer);
if (ret < 0) {
printf("error: unable to dequeue buffer: %s (%d)\n",
strerror(-ret), ret);
@@ -932,7 +949,6 @@ static void omap3_isp_viewfinder_event(void *priv)
}
isp->viewfinder.output->dequeued |= 1 << buffer.index;
- isp->viewfinder.output->queued--;
if (isp->viewfinder.output->queued == 0)
isp->ops->unwatch_fd(isp->viewfinder.output->video->fd);
@@ -954,13 +970,11 @@ int omap3_isp_viewfinder_start(struct omap3_isp_device *isp)
buffer.index = i;
- ret = v4l2_queue_buffer(isp->viewfinder.output->video, &buffer);
+ ret = omap3_isp_video_queue_buffer(isp->viewfinder.output, &buffer);
if (ret < 0) {
printf("error: unable to queue buffer %u (%d)\n", i, ret);
return ret;
}
-
- isp->viewfinder.output->queued++;
}
if (isp->ops->prepare_streamon)
@@ -1021,8 +1035,7 @@ int omap3_isp_viewfinder_put_buffer(struct omap3_isp_device *isp,
OMAP3_ISP_EVENT_READ,
omap3_isp_viewfinder_event, isp);
- isp->viewfinder.output->queued++;
- return v4l2_queue_buffer(isp->viewfinder.output->video, buffer);
+ return omap3_isp_video_queue_buffer(isp->viewfinder.output, buffer);
}
/* -----------------------------------------------------------------------------
@@ -1091,7 +1104,7 @@ int omap3_isp_snapshot_setup(struct omap3_isp_device *isp,
for (i = 0; i < isp->snapshot.output->video->nbufs; ++i) {
buffer.index = i;
- ret = v4l2_queue_buffer(isp->snapshot.output->video, &buffer);
+ ret = omap3_isp_video_queue_buffer(isp->snapshot.output, &buffer);
if (ret < 0) {
printf("error: unable to queue buffer %u\n", i);
return ret;
@@ -1109,7 +1122,7 @@ static void omap3_isp_snapshot_event(void *priv)
int ret;
/* Dequeue a buffer, stop the stream and fire the snapshot event. */
- ret = v4l2_dequeue_buffer(isp->snapshot.output->video, &buffer);
+ ret = omap3_isp_video_dequeue_buffer(isp->snapshot.output, &buffer);
if (ret < 0) {
printf("error: unable to dequeue snapshot buffer.\n");
return;
@@ -1142,7 +1155,7 @@ static void omap3_isp_snapshot_event(void *priv)
for (i = 0; i < isp->snapshot.output->video->nbufs; ++i) {
buffer.index = i;
- ret = v4l2_queue_buffer(isp->snapshot.output->video, &buffer);
+ ret = omap3_isp_video_queue_buffer(isp->snapshot.output, &buffer);
if (ret < 0) {
printf("error: unable to queue buffer %u\n", i);
return;