April 2024 - This site, and Kamaelia are being updated. There is significant work needed, and PRs are welcome.

Kamaelia.UI.Pygame.VideoSurface

Pygame Video Surface

Displays uncompressed RGB video data on a pygame surface using the Pygame Display service.

Example Usage

Read raw YUV data from a file, convert it to interleaved RGB and display it using VideoSurface:

imagesize = (352, 288)        # "CIF" size video
fps = 15                      # framerate of video

Pipeline(ReadFileAdapter("raw352x288video.yuv", ...other args...),
         RawYUVFramer(imagesize),
         MessageRateLimit(messages_per_second=fps, buffer=fps*2),
         ToRGB_interleaved(),
         VideoSurface(),
        ).activate()

RawYUVFramer is needed to frame raw YUV data into individual video frames. ToRGB_interleaved is needed to convert the 3 planes of Y, U and V data to a single plane containing RGB data interleaved (R, G, B, R, G, B, R, G, B, ...)

How does it work?

The component waits to receive uncompressed video frames from its "inbox" inbox.

The frames must be encoded as dictionary objects in the format described below.

When the first frame is received, the component notes the size and pixel format of the video data and requests an appropriate surface from the Pygame Display service component, to which video can be rendered.

NOTE: Currently the only supported pixelformat is "RGB_interleaved".

When subsequent frames of video are received the rgb data is rendered to the surface and the Pygame Display service is notified that the surface needs redrawing.

At present, VideoSurface cannot cope with a change of pixel format or video size mid sequence.

UNCOMPRESSED FRAME FORMAT

Uncompresed video frames must be encoded as dictionaries. VideoSurface requires the following entries:

{
  "rgb" : rgbdata                    # a string containing RGB video data
  "size" : (width, height)           # in pixels
  "pixformat" : "RGB_interleaved"    # format of raw video data
}

Kamaelia.UI.Pygame.VideoSurface.VideoSurface

class VideoSurface(Axon.Component.component)

VideoSurface([position]) -> new VideoSurface component

Displays a pygame surface using the Pygame Display service component, for displaying RGB video frames sent to its "inbox" inbox.

The surface is sized and configured by the first frame of (uncompressed) video data is receives.

Keyword arguments:

  • position -- (x,y) pixels position of top left corner (default=(0,0))

Inboxes

  • control : Shutdown messages: shutdownMicroprocess or producerFinished
  • callback : Receive callbacks from Pygame Display
  • inbox : Video frame data structures containing RGB data

Outboxes

  • outbox : NOT USED
  • signal : Shutdown signalling: shutdownMicroprocess or producerFinished
  • display_signal : Outbox used for sending signals of various kinds to the display service

Methods defined here

Warning!

You should be using the inbox/outbox interface, not these methods (except construction). This documentation is designed as a roadmap as to their functionalilty for maintainers and new component developers.

__init__(self[, position])

x.__init__(...) initializes x; see x.__class__.__doc__ for signature

formatChanged(self, frame)

Returns True if frame size or pixel format is new/different for this frame.

main(self)

Main loop.

shutdown(self)

waitBox(self, boxname)

Generator. yield's 1 until data is ready on the named inbox.

Feedback

Got a problem with the documentation? Something unclear that could be clearer? Want to help improve it? Constructive criticism is very welcome - especially if you can suggest a better rewording!

Please leave you feedback here in reply to the documentation thread in the Kamaelia blog.

-- Automatic documentation generator, 05 Jun 2009 at 03:01:38 UTC/GMT