August'24: Kamaelia is in maintenance mode and will recieve periodic updates, about twice a year, primarily targeted around Python 3 and ecosystem compatibility. PRs are always welcome. Latest Release: 1.14.32 (2024/3/24)
Displays uncompressed RGB video data on a pygame surface using the Pygame Display service.
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, ...)
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.
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
}
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:
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.
x.__init__(...) initializes x; see x.__class__.__doc__ for signature
Returns True if frame size or pixel format is new/different for this frame.
Main loop.
Generator. yield's 1 until data is ready on the named inbox.
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