From 9c932e4d718c5ce0b8c177230597a4e3581a9c39 Mon Sep 17 00:00:00 2001 From: Laurent Pinchart Date: Tue, 23 Aug 2011 01:02:39 +0200 Subject: omap3isp: Add omap3_isp_video_queue/dequeue_buffer() functions Signed-off-by: Laurent Pinchart --- isp/omap3isp.c | 49 +++++++++++++++++++++++++++++++------------------ 1 file changed, 31 insertions(+), 18 deletions(-) (limited to 'isp/omap3isp.c') 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; -- cgit v1.2.3