Please note this site is going to be replaced with the new design very soon - some logistical/version info on this site is out of date. The new site can be found here.
Please note specifically: new releases page (dir), new mailing list (google group), new subversion hosting (googlecode)
(note last updated: 6/10/08

Kamaelia

Nuts & Bolts | Components | Tools | Cookbook | Systems
wiki actions :( EDIT | printable | Recent Changes | Dev Console | Sitemap/Index )
guest194631


Home, News
Dev Console

How, Why
Project Blog
Summer of Code

Documentation
Download
SVN (web)
Sourceforge page

Project Admin
License

Contact Us

  Page Tags

No tags are defined for this page yet - how would you classify/think of this page? Add your notes below!

Kamaelia docs : 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.

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, 12 Oct 2008 at 03:01:28 UTC/GMT


Your tags for this page: If you had set UserPreferences (name & email) and validated them (simple single click in your email), you would be able to define personal tags

Versions: current , 1


(C) 2005 Kamaelia Contributors, including the British Broadcasting Corporation, All Rights Reserved,
This is an ongoing community based development site. As a result the contents of this page is the opinions of the contributors of the pages involved not the organisations involved. Specificially, this page may contain personal views which are not the views of the BBC.


This web site is powered by the same code created for the bicker manor project. For more details, contact Michael Sparks at BBC Research directly (cf contact)