diff options
| -rw-r--r-- | yavta.c | 17 | 
1 files changed, 14 insertions, 3 deletions
@@ -578,7 +578,7 @@ static int video_get_format(struct device *dev)  static int video_set_format(struct device *dev, unsigned int w, unsigned int h,  			    unsigned int format, unsigned int stride, -			    enum v4l2_field field) +			    unsigned int buffer_size, enum v4l2_field field)  {  	struct v4l2_format fmt;  	unsigned int i; @@ -596,14 +596,17 @@ static int video_set_format(struct device *dev, unsigned int w, unsigned int h,  		fmt.fmt.pix_mp.field = field;  		fmt.fmt.pix_mp.num_planes = info->n_planes; -		for (i = 0; i < fmt.fmt.pix_mp.num_planes; i++) +		for (i = 0; i < fmt.fmt.pix_mp.num_planes; i++) {  			fmt.fmt.pix_mp.plane_fmt[i].bytesperline = stride; +			fmt.fmt.pix_mp.plane_fmt[i].sizeimage = buffer_size; +		}  	} else {  		fmt.fmt.pix.width = w;  		fmt.fmt.pix.height = h;  		fmt.fmt.pix.pixelformat = format;  		fmt.fmt.pix.field = field;  		fmt.fmt.pix.bytesperline = stride; +		fmt.fmt.pix.sizeimage = buffer_size;  	}  	ret = ioctl(dev->fd, VIDIOC_S_FMT, &fmt); @@ -1696,6 +1699,7 @@ static void usage(const char *argv0)  	printf("-t, --time-per-frame num/denom	Set the time per frame (eg. 1/25 = 25 fps)\n");  	printf("-u, --userptr			Use the user pointers streaming method\n");  	printf("-w, --set-control 'ctrl value'	Set control 'ctrl' to 'value'\n"); +	printf("    --buffer-size		Buffer size in bytes\n");  	printf("    --enum-formats		Enumerate formats\n");  	printf("    --enum-inputs		Enumerate inputs\n");  	printf("    --fd                        Use a numeric file descriptor insted of a device\n"); @@ -1722,8 +1726,10 @@ static void usage(const char *argv0)  #define OPT_TSTAMP_SRC		265  #define OPT_FIELD		266  #define OPT_LOG_STATUS		267 +#define OPT_BUFFER_SIZE		268  static struct option opts[] = { +	{"buffer-size", 1, 0, OPT_BUFFER_SIZE},  	{"buffer-type", 1, 0, 'B'},  	{"capture", 2, 0, 'c'},  	{"check-overrun", 0, 0, 'C'}, @@ -1789,6 +1795,7 @@ int main(int argc, char *argv[])  	unsigned int width = 640;  	unsigned int height = 480;  	unsigned int stride = 0; +	unsigned int buffer_size = 0;  	unsigned int nbufs = V4L_BUFFERS_DEFAULT;  	unsigned int input = 0;  	unsigned int skip = 0; @@ -1922,6 +1929,9 @@ int main(int argc, char *argv[])  			}  			do_set_control = 1;  			break; +		case OPT_BUFFER_SIZE: +			buffer_size = atoi(optarg); +			break;  		case OPT_ENUM_FORMATS:  			do_enum_formats = 1;  			break; @@ -2049,7 +2059,8 @@ int main(int argc, char *argv[])  	/* Set the video format. */  	if (do_set_format) { -		if (video_set_format(&dev, width, height, pixelformat, stride, field) < 0) { +		if (video_set_format(&dev, width, height, pixelformat, stride, +				     buffer_size, field) < 0) {  			video_close(&dev);  			return 1;  		}  | 
