From f891b3a18c952b88967f7408bb942ef3c0cd111f Mon Sep 17 00:00:00 2001 From: Rodrigo Perez Fulloni Date: Mon, 17 Dec 2012 22:24:44 +0000 Subject: Final version 1.0 --- (limited to 'src/pygame/_camera_vidcapture.py') diff --git a/src/pygame/_camera_vidcapture.py b/src/pygame/_camera_vidcapture.py new file mode 100644 index 0000000..5b6a4f3 --- /dev/null +++ b/src/pygame/_camera_vidcapture.py @@ -0,0 +1,133 @@ + +import pygame + +def list_cameras(): + return [0] + + # this just cycles through all the cameras trying to open them + cameras = [] + for x in range(256): + try: + c = Camera(x) + except: + break + cameras.append(x) + + return cameras + + +def init(): + global vidcap + import vidcap as vc + vidcap = vc + +def quit(): + global vidcap + pass + del vidcap + + + +class Camera: + + def __init__(self, device =0, + size = (640,480), + mode = "RGB", + show_video_window=0): + """device: VideoCapture enumerates the available video capture devices + on your system. If you have more than one device, specify + the desired one here. The device number starts from 0. + + show_video_window: 0 ... do not display a video window (the default) + 1 ... display a video window + + Mainly used for debugging, since the video window + can not be closed or moved around. + """ + self.dev = vidcap.new_Dev(device, show_video_window) + width, height = size + self.dev.setresolution(width, height) + + def display_capture_filter_properties(self): + """Displays a dialog containing the property page of the capture filter. + + For VfW drivers you may find the option to select the resolution most + likely here. + """ + self.dev.displaycapturefilterproperties() + + def display_capture_pin_properties(self): + """Displays a dialog containing the property page of the capture pin. + + For WDM drivers you may find the option to select the resolution most + likely here. + """ + self.dev.displaycapturepinproperties() + + def set_resolution(self, width, height): + """Sets the capture resolution. (without dialog) + """ + self.dev.setresolution(width, height) + + def get_buffer(self): + """Returns a string containing the raw pixel data. + """ + return self.dev.getbuffer() + + def start(self): + """ + """ + def set_controls(self, **kwargs): + """ + """ + + def stop(self): + """ + """ + + def get_image(self, dest_surf = None): + return self.get_surface(dest_surf) + + def get_surface(self, dest_surf = None): + """Returns a pygame Surface. + """ + abuffer, width, height = self.get_buffer() + if abuffer: + if 1: + surf = pygame.image.frombuffer(abuffer, (width, height), "RGB") + + # swap it from a BGR surface to an RGB surface. + r,g,b,a = surf.get_masks() + surf.set_masks((b,g,r,a)) + + r,g,b,a = surf.get_shifts() + surf.set_shifts((b,g,r,a)) + + surf = pygame.transform.flip(surf, 0,1) + + # if there is a destination surface given, we blit onto that. + if dest_surf: + dest_surf.blit(surf, (0,0)) + return dest_surf + + else: + + # Need to flip the image. + surf = pygame.image.fromstring(abuffer, (width, height), "RGB", 1) + # swap it from a BGR surface to an RGB surface. + r,g,b,a = surf.get_masks() + surf.set_masks((b,g,r,a)) + + r,g,b,a = surf.get_shifts() + surf.set_shifts((b,g,r,a)) + return surf + + +if __name__ == "__main__": + import pygame.examples.camera + + pygame.camera.Camera = Camera + pygame.camera.list_cameras = list_cameras + pygame.examples.camera.main() + + -- cgit v0.9.1