mirror of
				https://github.com/python/cpython.git
				synced 2025-11-04 11:49:12 +00:00 
			
		
		
		
	Grab a 24-bit image off the StarterVideo
This commit is contained in:
		
							parent
							
								
									35173716e5
								
							
						
					
					
						commit
						34d12de03d
					
				
					 1 changed files with 97 additions and 0 deletions
				
			
		
							
								
								
									
										97
									
								
								Demo/sgi/video/svgrab24.c
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										97
									
								
								Demo/sgi/video/svgrab24.c
									
										
									
									
									
										Executable file
									
								
							| 
						 | 
					@ -0,0 +1,97 @@
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * svgrab24 - Grab the current video input image into an rgb file.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Jack Jansen, CWI, May 93.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Adapted from grabone.c
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ident "$Revision$"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <stdio.h>
 | 
				
			||||||
 | 
					#include <stdlib.h>
 | 
				
			||||||
 | 
					#include <svideo.h>
 | 
				
			||||||
 | 
					#include <gl/gl.h>
 | 
				
			||||||
 | 
					#include <gl/device.h>
 | 
				
			||||||
 | 
					#include <getopt.h>
 | 
				
			||||||
 | 
					#include <image.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					main(int argc, char *argv[])
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    SVhandle V;
 | 
				
			||||||
 | 
					    svCaptureInfo ci;
 | 
				
			||||||
 | 
					    boolean debug;
 | 
				
			||||||
 | 
					    int ch, errflg;
 | 
				
			||||||
 | 
					    int bufferSize;
 | 
				
			||||||
 | 
					    long *buffer;
 | 
				
			||||||
 | 
					    IMAGE *imgfile;
 | 
				
			||||||
 | 
					    short *r, *g, *b;
 | 
				
			||||||
 | 
					    int x, y;
 | 
				
			||||||
 | 
					    char *ProgName = argv[0];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    debug = FALSE;
 | 
				
			||||||
 | 
					    ci.format = SV_RGB32_FRAMES;
 | 
				
			||||||
 | 
					    ci.width = 0;
 | 
				
			||||||
 | 
					    ci.height = 0;
 | 
				
			||||||
 | 
					    ci.size = 1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    argv++; argc--;
 | 
				
			||||||
 | 
					    if ( argc > 2 && strcmp(argv[0], "-w") == 0) {
 | 
				
			||||||
 | 
						ci.width = atoi(argv[1]);
 | 
				
			||||||
 | 
						argc -= 2;
 | 
				
			||||||
 | 
						argv += 2;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    if ( argc != 1 ) {
 | 
				
			||||||
 | 
						fprintf(stderr, "Usage: %s [-w width] rgbfilename\n", ProgName);
 | 
				
			||||||
 | 
						exit(1);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /* Open video device */
 | 
				
			||||||
 | 
					    if ((V = svOpenVideo()) == NULL) {
 | 
				
			||||||
 | 
						svPerror("open");
 | 
				
			||||||
 | 
						exit(1);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (svQueryCaptureBufferSize(V, &ci, &bufferSize) < 0) {
 | 
				
			||||||
 | 
					        svPerror("svQueryCaptureBufferSize");
 | 
				
			||||||
 | 
					        exit(1);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    buffer = malloc(bufferSize);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (svCaptureOneFrame(V, ci.format, &ci.width, &ci.height, buffer) < 0) {
 | 
				
			||||||
 | 
					        svPerror("svCaptureOneFrame");
 | 
				
			||||||
 | 
					        exit(1);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    if (debug) {
 | 
				
			||||||
 | 
					        printf("captured size: %d by %d\n", ci.width, ci.height);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if ( (imgfile=iopen(argv[0], "w", RLE(1), 3, ci.width, ci.height, 3)) == 0) {
 | 
				
			||||||
 | 
						perror(argv[1]);
 | 
				
			||||||
 | 
						exit(1);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    r = (short *)malloc(ci.width*sizeof(short));
 | 
				
			||||||
 | 
					    g = (short *)malloc(ci.width*sizeof(short));
 | 
				
			||||||
 | 
					    b = (short *)malloc(ci.width*sizeof(short));
 | 
				
			||||||
 | 
					    if ( !r || !g || !b ) {
 | 
				
			||||||
 | 
						fprintf(stderr, "%s: malloc failed\n", ProgName);
 | 
				
			||||||
 | 
						exit(1);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    for(y=0; y<ci.height; y++) {
 | 
				
			||||||
 | 
						for(x=0; x<ci.width; x++) {
 | 
				
			||||||
 | 
						    unsigned long data = *buffer++;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						    r[x] = data & 0xff;
 | 
				
			||||||
 | 
						    g[x] = (data>>8) & 0xff;
 | 
				
			||||||
 | 
						    b[x] = (data>>16) & 0xff;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if ( putrow(imgfile, r, y, 0) == 0 ||
 | 
				
			||||||
 | 
						     putrow(imgfile, g, y, 1) == 0 ||
 | 
				
			||||||
 | 
						     putrow(imgfile, b, y, 2) == 0) {
 | 
				
			||||||
 | 
						       fprintf(stderr, "%s: putrow failed\n", ProgName);
 | 
				
			||||||
 | 
						       exit(1);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    iclose(imgfile);
 | 
				
			||||||
 | 
					    exit(0);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue