diff options
Diffstat (limited to 'isp')
| -rw-r--r-- | isp/omap3isp.c | 49 | 
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; | 
