<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://elinux.org/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://elinux.org/api.php?action=feedcontributions&amp;user=Adammw&amp;feedformat=atom</id>
		<title>eLinux.org - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="http://elinux.org/api.php?action=feedcontributions&amp;user=Adammw&amp;feedformat=atom"/>
		<link rel="alternate" type="text/html" href="http://elinux.org/Special:Contributions/Adammw"/>
		<updated>2013-05-19T18:03:36Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.21alpha</generator>

	<entry>
		<id>http://elinux.org/RPi_VideoCore_APIs</id>
		<title>RPi VideoCore APIs</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/RPi_VideoCore_APIs"/>
				<updated>2012-07-31T14:03:48Z</updated>
		
		<summary type="html">&lt;p&gt;Adammw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:RPi_Software}}&lt;br /&gt;
&lt;br /&gt;
[[File:Raspberrypi_video_API_03.svg|500px|thumb|Source: http://elinux.org/images/b/be/Raspberrypi_video_API_03.svg]]&lt;br /&gt;
&lt;br /&gt;
The Raspberry Pi contains a Broadcom [http://en.wikipedia.org/wiki/Videocore VideoCore] IV GPU providing OpenGL ES 1.1, OpenGL ES 2.0, hardware-accelerated OpenVG 1.1, Open EGL, OpenMAX and 1080p30 H.264 high-profile decode. There are 24 GFLOPS of general purpose compute and a bunch of texture filtering and DMA infrastructure. Eben worked on the architecture team for this and the Raspberry Pi team are looking at how they can make some of the proprietary features available to application programmers. &lt;br /&gt;
&lt;br /&gt;
Currently C header files and libraries for many of the Broadcom APIs are located in &amp;lt;code&amp;gt;/opt/vc/include&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;/opt/vc/lib&amp;lt;/code&amp;gt; respectively, or available from [https://github.com/raspberrypi/firmware GitHub] within the same directory structure. Some documentation is contained within comments in the header files, as well as documentation for the OpenMAX IL components in the [https://github.com/raspberrypi/firmware/tree/master/documentation/ilcomponents documentation directory on Github], however it is severely lacking and difficult to understand in a general sense for people wanting to experiment with the device due to it being proprietary. As such, we encourage you to [http://elinux.org/index.php?title=RPi_VideoCore_APIs&amp;amp;action=edit edit this page] to help us build a much better open documentation.&lt;br /&gt;
&lt;br /&gt;
==Quirks==&lt;br /&gt;
&lt;br /&gt;
* The Raspberry Pi requires that the &amp;lt;code&amp;gt;bcm_host_init()&amp;lt;/code&amp;gt; function is called first before any GPU calls can be made.&lt;br /&gt;
* Before calling any of the vc_* functions, you need to initialise vcos and vchi, and make a vchi connection, before then calling the corresponding vc_*_init function for the part of the library you want to use: &amp;lt;code&amp;gt;vc_vchi_dispmanx_init&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;vc_vchi_tv_init&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;vc_vchi_cec_init&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;vc_vchi_gencmd_init&amp;lt;/code&amp;gt;.&amp;lt;br /&amp;gt;(See this [https://github.com/adammw/rpi-output-swapper/blob/master/video_swap.c#L152-169 sample code] which does initialisation for vc_tvservice_* APIs)&lt;br /&gt;
* Linking against the EGL library (-lEGL) also requires you to link against the GLESv2 library (-lGLESv2).&lt;br /&gt;
* &amp;lt;code&amp;gt;[[#graphics_get_display_size|graphics_get_display_size()]]&amp;lt;/code&amp;gt; is a broadcom-specific function&lt;br /&gt;
&lt;br /&gt;
== Built-in Sample Programs==&lt;br /&gt;
The Raspberry Pi comes with 7 sample programs and two helper libraries in the /opt/vc/src/hello_pi directory showing some of the system's capabilities and sample code. &lt;br /&gt;
===hello_video===&lt;br /&gt;
This sample decodes h264 video using the OpenMAX APIs and the ilclient library, and is distributed with a short scene of [http://www.bigbuckbunny.org/ Big Buck Bunny]&lt;br /&gt;
===hello_audio===&lt;br /&gt;
This sample plays a sine wave for ten seconds using the ??? APIs.&lt;br /&gt;
===hello_triangle===&lt;br /&gt;
This sample shows how to get a OpenGL ES context on the Raspberry Pi.&lt;br /&gt;
===ilclient helper library===&lt;br /&gt;
This library is described as:&lt;br /&gt;
&amp;lt;code&amp;gt;This API defines helper functions for writing IL clients.&lt;br /&gt;
 *&lt;br /&gt;
 * This file defines an IL client side library.  This is useful when&lt;br /&gt;
 * writing IL clients, since there tends to be much repeated and&lt;br /&gt;
 * common code across both single and multiple clients.  This library&lt;br /&gt;
 * seeks to remove that common code and abstract some of the&lt;br /&gt;
 * interactions with components.  There is a wrapper around a&lt;br /&gt;
 * component and tunnel, and some operations can be done on lists of&lt;br /&gt;
 * these.  The callbacks from components are handled, and specific&lt;br /&gt;
 * events can be checked or waited for.&lt;br /&gt;
 */&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Libraries ==&lt;br /&gt;
=== libbcm_host ===&lt;br /&gt;
bcm_host is the Broadcom hardware interface library.&lt;br /&gt;
&lt;br /&gt;
=== vc_dispmanx_*===&lt;br /&gt;
Dispmanx is a windowing system in the process of being deprecated in favour of [http://www.khronos.org/openwf/ OpenWF] (or similar), however dispmanx is still used in all API demos and it's replacement may not yet be available. &amp;lt;ref&amp;gt;http://www.raspberrypi.org/phpBB3/viewtopic.php?t=5621&amp;amp;p=77981&amp;lt;/ref&amp;gt;(confirmation required?)&lt;br /&gt;
=== vc_tvservice_* ===&lt;br /&gt;
These APIs allow controlling the HDMI and SDTV video outputs of the Raspberry Pi, as well as allowing the user to query the supported HDMI resolutions and audio formats and turn on/off copy protection. The Raspberry Pi can only have one output active at a time - turning on the HDMI automatically turns off the SDTV and vice-versa. However either can be turned off using the &amp;lt;code&amp;gt;vc_tv_power_off()&amp;lt;/code&amp;gt; function.&lt;br /&gt;
&lt;br /&gt;
The header file [https://github.com/raspberrypi/firmware/blob/master/opt/vc/include/interface/vmcs_host/vc_tvservice.h vc_tvservice.h] documents the functions quite well via comments above each prototype function, however before any of these functions will succeed you must initialise the connection to the host API like so:&lt;br /&gt;
&lt;br /&gt;
 void tvservice_init() {&lt;br /&gt;
    VCHI_INSTANCE_T vchi_instance;&lt;br /&gt;
    VCHI_CONNECTION_T *vchi_connections;&lt;br /&gt;
    &lt;br /&gt;
    // initialise bcm_host&lt;br /&gt;
    bcm_host_init();&lt;br /&gt;
    &lt;br /&gt;
    // initialise vcos/vchi&lt;br /&gt;
    vcos_init();&lt;br /&gt;
    if (vchi_initialise(&amp;amp;vchi_instance) != VCHIQ_SUCCESS) {&lt;br /&gt;
        fprintf(stderr, &amp;quot;failed to open vchiq instance\n&amp;quot;);&lt;br /&gt;
        exit(-2);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    // create a vchi connection&lt;br /&gt;
    if ( vchi_connect( NULL, 0, vchi_instance ) != 0) {&lt;br /&gt;
        fprintf(stderr, &amp;quot;failed to connect to VCHI\n&amp;quot;);&lt;br /&gt;
        exit(-3);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    // connect to tvservice&lt;br /&gt;
    if ( vc_vchi_tv_init( vchi_instance, &amp;amp;vchi_connections, 1) != 0) {&lt;br /&gt;
        fprintf(stderr, &amp;quot;failed to connect to tvservice\n&amp;quot;);&lt;br /&gt;
        exit(-4);&lt;br /&gt;
    }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
''TODO: Deinitialization''&lt;br /&gt;
==== Samples ====&lt;br /&gt;
* [https://github.com/adammw/rpi-output-swapper rpi-output-swapper] Uses tvservice apis to power on HDMI or SDTV display in specific or preferred mode.&lt;br /&gt;
&lt;br /&gt;
=== vc_cec_* ===&lt;br /&gt;
The vc_cec APIs allow programs to interface with the [http://en.wikipedia.org/wiki/Consumer_Electronics_Control#CEC Consumer Electronics Control (CEC)] host middleware on the system to send CEC packets, set strings for the middleware to auto-respond to certain requests or override the middleware handling by adding custom callbacks.&lt;br /&gt;
&lt;br /&gt;
''TODO: Samples/Howto''&lt;br /&gt;
&lt;br /&gt;
=== vc_gencmd_* ===&lt;br /&gt;
''TODO''&lt;br /&gt;
&lt;br /&gt;
=== EGL ===&lt;br /&gt;
[http://www.khronos.org/egl/ EGL (Native Platform Graphics Interface)] is an interface between Khronos rendering APIs such as OpenGL ES or OpenVG and the underlying native platform. The Raspberry Pi supports [http://www.khronos.org/registry/egl/specs/eglspec.1.4.20110406.pdf EGL Version 1.4] and the following EGL extensions (links are to EGL registry documentation):&amp;lt;ref name=&amp;quot;egl-info&amp;quot;&amp;gt;eglinfo, http://www.raspberrypi.org/phpBB3/viewtopic.php?p=35942#p35942 , http://www.raspberrypi.org/phpBB3/viewtopic.php?p=36318#p36318&amp;lt;/ref&amp;gt;&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_image.txt EGL_KHR_image]&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_image_base.txt EGL_KHR_image_base]&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_image_pixmap.txt EGL_KHR_image_pixmap]&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_vg_parent_image.txt EGL_KHR_vg_parent_image]&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_gl_image.txt EGL_KHR_gl_texture_2D_image]&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_gl_image.txt EGL_KHR_gl_texture_cubemap_image]&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_lock_surface.txt EGL_KHR_lock_surface]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Creating an on-screen EGL rendering surface requires you to to use the eglCreateWindowSurface function, which takes a EGLNativeWindowType parameter. On the Raspberry Pi, this is implemented as a EGL_DISPMANX_WINDOW_T struct, which is defined in eglplatform.h as:&lt;br /&gt;
&lt;br /&gt;
  typedef struct {&lt;br /&gt;
    DISPMANX_ELEMENT_HANDLE_T element;&lt;br /&gt;
    int width;   /* This is necessary because dispmanx elements are not queriable. */&lt;br /&gt;
    int height;&lt;br /&gt;
  } EGL_DISPMANX_WINDOW_T;&lt;br /&gt;
&lt;br /&gt;
Therefore, to create a EGL surface you must also use the Dispmanx library to get a dispmanx element handle. The [https://github.com/raspberrypi/firmware/blob/master/opt/vc/src/hello_pi/hello_triangle/triangle.c#L147-173 hello_triangle source code] provides example code to do this.&lt;br /&gt;
&lt;br /&gt;
==== Samples====&lt;br /&gt;
&lt;br /&gt;
See [http://jonmacey.blogspot.com.au/2012/05/getting-started-with-egl-on-raspberry.html Getting Started with EGL] post by Jon Macey. &lt;br /&gt;
Extended documentation available in the [http://www.khronos.org/registry/egl/specs/eglspec.1.4.20110406.pdf EGL Version 1.4 Specification] and Simple Reference available in the [http://www.khronos.org/files/egl-1-4-quick-reference-card.pdf EGL 1.4 API Quick Reference Card].&lt;br /&gt;
&lt;br /&gt;
==== Function Documentation====&lt;br /&gt;
====={{anchor|graphics_get_display_size}}&amp;lt;code&amp;gt;int32_t graphics_get_display_size( const uint16_t display_number, uint32_t *width, uint32_t *height);&amp;lt;/code&amp;gt;=====&lt;br /&gt;
&lt;br /&gt;
This function allows you to get the size of the display, and is often used in creating an EGL Surface. width and height are pointers that you pass in to where you want the response values to be written to, display number 0 is usually used for the Raspberry Pi. return value of &amp;gt;= 0 indicates success, &amp;lt;0 indicates failure.&lt;br /&gt;
&lt;br /&gt;
This function is implemented in libbcm_host, and the implementation has been made [https://github.com/raspberrypi/firmware/issues/14#issuecomment-5652185 public] showing that it internally calls the vc_dispmanx_display_get_info function to get the width and height of the current mode.&lt;br /&gt;
&lt;br /&gt;
Bugs present in early versions of the firmware caused this function to always return 1920x1080, however this can easily be fixed by updating the firmware with [https://github.com/Hexxeh/rpi-update Hexxeh's rpi-update] (see the [[R-Pi_Troubleshooting#Updating_firmware|Updating firmware]] page for help).&amp;lt;ref&amp;gt;http://www.raspberrypi.org/phpBB3/viewtopic.php?f=68&amp;amp;t=8252&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;https://github.com/raspberrypi/firmware/issues/14&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== OpenGL ES ===&lt;br /&gt;
The Raspberry Pi supports OpenGL ES 2.0 with the following extensions: &amp;lt;ref name=&amp;quot;egl-info&amp;quot; /&amp;gt;&lt;br /&gt;
*GL_OES_compressed_ETC1_RGB8_texture&lt;br /&gt;
*GL_OES_compressed_paletted_texture&lt;br /&gt;
*GL_OES_texture_npot GL_OES_depth24&lt;br /&gt;
*GL_OES_vertex_half_float&lt;br /&gt;
*GL_OES_EGL_image&lt;br /&gt;
*GL_OES_EGL_image_external&lt;br /&gt;
*GL_EXT_discard_framebuffer&lt;br /&gt;
*GL_OES_rgb8_rgba8&lt;br /&gt;
*GL_OES_depth32&lt;br /&gt;
*GL_OES_mapbuffer&lt;br /&gt;
*GL_EXT_texture_format_BGRA8888&lt;br /&gt;
*GL_APPLE_rgb_422&lt;br /&gt;
*GL_EXT_debug_marker&lt;br /&gt;
 &lt;br /&gt;
''TODO: Sample of how to use/initalise OpenGL ES''&lt;br /&gt;
&lt;br /&gt;
=== OpenVG ===&lt;br /&gt;
The Raspberry Pi supports OpenVG 1.1 for hardware-accelerated two-dimensional vector and raster graphics. See the full specification [http://www.khronos.org/registry/vg/specs/openvg-1.1.pdf here] or [http://www.khronos.org/files/openvg-quick-reference-card.pdf the API quick reference card].&lt;br /&gt;
&lt;br /&gt;
==== Samples ====&lt;br /&gt;
* [http://docs.blackberry.com/en/developers/deliverables/17967/CS_Drawing_a_triangle_using_OpenVG_1241146_11.jsp Code sample: Drawing a triangle by using OpenVG] ''(Java implentation for RIM devices, however should be able to get a grasp on how it works and be able to port it to the Raspberry Pi)''&lt;br /&gt;
&lt;br /&gt;
=== OpenMAX ===&lt;br /&gt;
See [https://github.com/raspberrypi/firmware/tree/master/documentation/ilcomponents /documentation/ilcomponents] on GitHub firmware repository for official documentation.&lt;br /&gt;
&lt;br /&gt;
''TODO: Sample of how to use OpenMAX to decode audio/video/images, etc.''&lt;br /&gt;
&lt;br /&gt;
== Bindings for Other Programming Languages ==&lt;br /&gt;
'''Python'''&lt;br /&gt;
* [https://bitbucket.org/bryancole/rpi_vid_core/ RPi_Vid_Core] - ''python bindings of EGL, OpenGL ES, OpenVG and bcm_host for Raspberry Pi implemented using Cython''&lt;br /&gt;
&lt;br /&gt;
== Open Source Software compatible with the VideoCore APIs ==&lt;br /&gt;
* '''[https://github.com/huceke/omxplayer omxplayer]''' - ''a command line a/v player for the Raspberry Pi utilising the OpenMAX APIs and ffmpeg''&lt;br /&gt;
* '''[http://wiki.xbmc.org/index.php?title=Raspberry_Pi XBMC]''' - ''a media center, omxplayer's &amp;quot;big brother&amp;quot; ''&lt;br /&gt;
* '''[http://nccastaff.bournemouth.ac.uk/jmacey/GraphicsLib/piNGL/index.html piNGL]''' - ''port of the NGL graphics library to Raspberry Pi''&lt;br /&gt;
* '''[http://qt-project.org/wiki/Qt-RaspberryPi Qt on Pi]''' - ''Raspberry Pi port of the Qt toolkit''&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Template:Raspberry Pi}}&lt;br /&gt;
[[Category: RaspberryPi]]&lt;/div&gt;</summary>
		<author><name>Adammw</name></author>	</entry>

	<entry>
		<id>http://elinux.org/RPi_VideoCore_APIs</id>
		<title>RPi VideoCore APIs</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/RPi_VideoCore_APIs"/>
				<updated>2012-07-31T13:55:52Z</updated>
		
		<summary type="html">&lt;p&gt;Adammw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:RPi_Software}}&lt;br /&gt;
&lt;br /&gt;
[[File:Raspberrypi_video_API_03.svg|500px|thumb|Source: http://elinux.org/images/b/be/Raspberrypi_video_API_03.svg]]&lt;br /&gt;
&lt;br /&gt;
The Raspberry Pi contains a Broadcom [http://en.wikipedia.org/wiki/Videocore VideoCore] IV GPU providing OpenGL ES 1.1, OpenGL ES 2.0, hardware-accelerated OpenVG 1.1, Open EGL, OpenMAX and 1080p30 H.264 high-profile decode. There are 24 GFLOPS of general purpose compute and a bunch of texture filtering and DMA infrastructure. Eben worked on the architecture team for this and the Raspberry Pi team are looking at how they can make some of the proprietary features available to application programmers. &lt;br /&gt;
&lt;br /&gt;
Currently C header files and libraries for many of the Broadcom APIs are located in &amp;lt;code&amp;gt;/opt/vc/include&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;/opt/vc/lib&amp;lt;/code&amp;gt; respectively, or available from [https://github.com/raspberrypi/firmware GitHub] within the same directory structure. Some documentation is contained within comments in the header files, as well as documentation for the OpenMAX IL components in the [https://github.com/raspberrypi/firmware/tree/master/documentation/ilcomponents documentation directory on Github], however it is severely lacking and difficult to understand in a general sense for people wanting to experiment with the device due to it being proprietary. As such, we encourage you to [http://elinux.org/index.php?title=RPi_VideoCore_APIs&amp;amp;action=edit edit this page] to help us build a much better open documentation.&lt;br /&gt;
&lt;br /&gt;
==Quirks==&lt;br /&gt;
&lt;br /&gt;
* The Raspberry Pi requires that the &amp;lt;code&amp;gt;bcm_host_init()&amp;lt;/code&amp;gt; function is called first before any GPU calls can be made.&lt;br /&gt;
* Before calling any of the vc_* functions, you need to initialise vcos and vchi, and make a vchi connection, before then calling the corresponding vc_*_init function for the part of the library you want to use: &amp;lt;code&amp;gt;vc_vchi_dispmanx_init&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;vc_vchi_tv_init&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;vc_vchi_cec_init&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;vc_vchi_gencmd_init&amp;lt;/code&amp;gt;.&amp;lt;br /&amp;gt;(See this [https://github.com/adammw/rpi-output-swapper/blob/master/video_swap.c#L152-169 sample code] which does initialisation for vc_tvservice_* APIs)&lt;br /&gt;
* Linking against the EGL library (-lEGL) also requires you to link against the GLESv2 library (-lGLESv2).&lt;br /&gt;
* &amp;lt;code&amp;gt;[[#graphics_get_display_size|graphics_get_display_size()]]&amp;lt;/code&amp;gt; is a broadcom-specific function&lt;br /&gt;
&lt;br /&gt;
== Built-in Sample Programs==&lt;br /&gt;
The Raspberry Pi comes with 7 sample programs and two helper libraries in the /opt/vc/src/hello_pi directory showing some of the system's capabilities and sample code. &lt;br /&gt;
===hello_video===&lt;br /&gt;
This sample decodes h264 video using the OpenMAX APIs and the ilclient library, and is distributed with a short scene of [http://www.bigbuckbunny.org/ Big Buck Bunny]&lt;br /&gt;
===hello_audio===&lt;br /&gt;
This sample plays a sine wave for ten seconds using the ??? APIs.&lt;br /&gt;
===hello_triangle===&lt;br /&gt;
This sample shows how to get a OpenGL ES context on the Raspberry Pi.&lt;br /&gt;
===ilclient helper library===&lt;br /&gt;
This library is described as:&lt;br /&gt;
&amp;lt;code&amp;gt;This API defines helper functions for writing IL clients.&lt;br /&gt;
 *&lt;br /&gt;
 * This file defines an IL client side library.  This is useful when&lt;br /&gt;
 * writing IL clients, since there tends to be much repeated and&lt;br /&gt;
 * common code across both single and multiple clients.  This library&lt;br /&gt;
 * seeks to remove that common code and abstract some of the&lt;br /&gt;
 * interactions with components.  There is a wrapper around a&lt;br /&gt;
 * component and tunnel, and some operations can be done on lists of&lt;br /&gt;
 * these.  The callbacks from components are handled, and specific&lt;br /&gt;
 * events can be checked or waited for.&lt;br /&gt;
 */&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Libraries ==&lt;br /&gt;
=== libbcm_host ===&lt;br /&gt;
bcm_host is the Broadcom hardware interface library.&lt;br /&gt;
&lt;br /&gt;
=== vc_dispmanx_*===&lt;br /&gt;
Dispmanx is a windowing system in the process of being deprecated in favour of [http://www.khronos.org/openwf/ OpenWF] (or similar), however dispmanx is still used in all API demos and it's replacement may not yet be available. &amp;lt;ref&amp;gt;http://www.raspberrypi.org/phpBB3/viewtopic.php?t=5621&amp;amp;p=77981&amp;lt;/ref&amp;gt;(confirmation required?)&lt;br /&gt;
=== vc_tvservice_* ===&lt;br /&gt;
These APIs allow controlling the HDMI and SDTV video outputs of the Raspberry Pi, as well as allowing the user to query the supported HDMI resolutions and audio formats and turn on/off copy protection. The Raspberry Pi can only have one output active at a time - turning on the HDMI automatically turns off the SDTV and vice-versa. However either can be turned off using the &amp;lt;code&amp;gt;vc_tv_power_off()&amp;lt;/code&amp;gt; function.&lt;br /&gt;
&lt;br /&gt;
The header file [https://github.com/raspberrypi/firmware/blob/master/opt/vc/include/interface/vmcs_host/vc_tvservice.h vc_tvservice.h] documents the functions quite well via comments above each prototype function, however before any of these functions will succeed you must initialise the connection to the host API like so:&lt;br /&gt;
&lt;br /&gt;
 void tvservice_init() {&lt;br /&gt;
    VCHI_INSTANCE_T vchi_instance;&lt;br /&gt;
    VCHI_CONNECTION_T *vchi_connections;&lt;br /&gt;
    &lt;br /&gt;
    // initialise bcm_host&lt;br /&gt;
    bcm_host_init();&lt;br /&gt;
    &lt;br /&gt;
    // initialise vcos/vchi&lt;br /&gt;
    vcos_init();&lt;br /&gt;
    if (vchi_initialise(&amp;amp;vchi_instance) != VCHIQ_SUCCESS) {&lt;br /&gt;
        fprintf(stderr, &amp;quot;failed to open vchiq instance\n&amp;quot;);&lt;br /&gt;
        exit(-2);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    // create a vchi connection&lt;br /&gt;
    if ( vchi_connect( NULL, 0, vchi_instance ) != 0) {&lt;br /&gt;
        fprintf(stderr, &amp;quot;failed to connect to VCHI\n&amp;quot;);&lt;br /&gt;
        exit(-3);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    // connect to tvservice&lt;br /&gt;
    if ( vc_vchi_tv_init( vchi_instance, &amp;amp;vchi_connections, 1) != 0) {&lt;br /&gt;
        fprintf(stderr, &amp;quot;failed to connect to tvservice\n&amp;quot;);&lt;br /&gt;
        exit(-4);&lt;br /&gt;
    }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
''TODO: Deinitialization''&lt;br /&gt;
==== Samples ====&lt;br /&gt;
* [https://github.com/adammw/rpi-output-swapper rpi-output-swapper] Uses tvservice apis to power on HDMI or SDTV display in specific or preferred mode.&lt;br /&gt;
&lt;br /&gt;
=== vc_cec_* ===&lt;br /&gt;
The vc_cec APIs allow programs to interface with the [http://en.wikipedia.org/wiki/Consumer_Electronics_Control#CEC Consumer Electronics Control (CEC)] host middleware on the system to send CEC packets, set strings for the middleware to auto-respond to certain requests or override the middleware handling by adding custom callbacks.&lt;br /&gt;
&lt;br /&gt;
''TODO: Samples/Howto''&lt;br /&gt;
&lt;br /&gt;
=== vc_gencmd_* ===&lt;br /&gt;
''TODO''&lt;br /&gt;
&lt;br /&gt;
=== EGL ===&lt;br /&gt;
[http://www.khronos.org/egl/ EGL (Native Platform Graphics Interface)] is an interface between Khronos rendering APIs such as OpenGL ES or OpenVG and the underlying native platform. The Raspberry Pi supports [http://www.khronos.org/registry/egl/specs/eglspec.1.4.20110406.pdf EGL Version 1.4] and the following EGL extensions (links are to EGL registry documentation):&amp;lt;ref name=&amp;quot;egl-info&amp;quot;&amp;gt;eglinfo, http://www.raspberrypi.org/phpBB3/viewtopic.php?p=35942#p35942 , http://www.raspberrypi.org/phpBB3/viewtopic.php?p=36318#p36318&amp;lt;/ref&amp;gt;&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_image.txt EGL_KHR_image]&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_image_base.txt EGL_KHR_image_base]&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_image_pixmap.txt EGL_KHR_image_pixmap]&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_vg_parent_image.txt EGL_KHR_vg_parent_image]&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_gl_image.txt EGL_KHR_gl_texture_2D_image]&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_gl_image.txt EGL_KHR_gl_texture_cubemap_image]&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_lock_surface.txt EGL_KHR_lock_surface]&lt;br /&gt;
&lt;br /&gt;
==== Samples====&lt;br /&gt;
&lt;br /&gt;
See [http://jonmacey.blogspot.com.au/2012/05/getting-started-with-egl-on-raspberry.html Getting Started with EGL] post by Jon Macey. &lt;br /&gt;
Extended documentation available in the [http://www.khronos.org/registry/egl/specs/eglspec.1.4.20110406.pdf EGL Version 1.4 Specification] and Simple Reference available in the [http://www.khronos.org/files/egl-1-4-quick-reference-card.pdf EGL 1.4 API Quick Reference Card].&lt;br /&gt;
&lt;br /&gt;
==== Function Documentation====&lt;br /&gt;
====={{anchor|graphics_get_display_size}}&amp;lt;code&amp;gt;int32_t graphics_get_display_size( const uint16_t display_number, uint32_t *width, uint32_t *height);&amp;lt;/code&amp;gt;=====&lt;br /&gt;
&lt;br /&gt;
This function allows you to get the size of the display, and is often used in creating an EGL Surface. width and height are pointers that you pass in to where you want the response values to be written to, display number 0 is usually used for the Raspberry Pi. return value of &amp;gt;= 0 indicates success, &amp;lt;0 indicates failure.&lt;br /&gt;
&lt;br /&gt;
This function is implemented in libbcm_host, and the implementation has been made [https://github.com/raspberrypi/firmware/issues/14#issuecomment-5652185 public] showing that it internally calls the vc_dispmanx_display_get_info function to get the width and height of the current mode.&lt;br /&gt;
&lt;br /&gt;
Bugs present in early versions of the firmware caused this function to always return 1920x1080, however this can easily be fixed by updating the firmware with [https://github.com/Hexxeh/rpi-update Hexxeh's rpi-update] (see the [[R-Pi_Troubleshooting#Updating_firmware|Updating firmware]] page for help).&amp;lt;ref&amp;gt;http://www.raspberrypi.org/phpBB3/viewtopic.php?f=68&amp;amp;t=8252&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;https://github.com/raspberrypi/firmware/issues/14&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== OpenGL ES ===&lt;br /&gt;
The Raspberry Pi supports OpenGL ES 2.0 with the following extensions: &amp;lt;ref name=&amp;quot;egl-info&amp;quot; /&amp;gt;&lt;br /&gt;
*GL_OES_compressed_ETC1_RGB8_texture&lt;br /&gt;
*GL_OES_compressed_paletted_texture&lt;br /&gt;
*GL_OES_texture_npot GL_OES_depth24&lt;br /&gt;
*GL_OES_vertex_half_float&lt;br /&gt;
*GL_OES_EGL_image&lt;br /&gt;
*GL_OES_EGL_image_external&lt;br /&gt;
*GL_EXT_discard_framebuffer&lt;br /&gt;
*GL_OES_rgb8_rgba8&lt;br /&gt;
*GL_OES_depth32&lt;br /&gt;
*GL_OES_mapbuffer&lt;br /&gt;
*GL_EXT_texture_format_BGRA8888&lt;br /&gt;
*GL_APPLE_rgb_422&lt;br /&gt;
*GL_EXT_debug_marker&lt;br /&gt;
 &lt;br /&gt;
''TODO: Sample of how to use/initalise OpenGL ES''&lt;br /&gt;
&lt;br /&gt;
=== OpenVG ===&lt;br /&gt;
The Raspberry Pi supports OpenVG 1.1 for hardware-accelerated two-dimensional vector and raster graphics. See the full specification [http://www.khronos.org/registry/vg/specs/openvg-1.1.pdf here] or [http://www.khronos.org/files/openvg-quick-reference-card.pdf the API quick reference card].&lt;br /&gt;
&lt;br /&gt;
==== Samples ====&lt;br /&gt;
* [http://docs.blackberry.com/en/developers/deliverables/17967/CS_Drawing_a_triangle_using_OpenVG_1241146_11.jsp Code sample: Drawing a triangle by using OpenVG] ''(Java implentation for RIM devices, however should be able to get a grasp on how it works and be able to port it to the Raspberry Pi)''&lt;br /&gt;
&lt;br /&gt;
=== OpenMAX ===&lt;br /&gt;
See [https://github.com/raspberrypi/firmware/tree/master/documentation/ilcomponents /documentation/ilcomponents] on GitHub firmware repository for official documentation.&lt;br /&gt;
&lt;br /&gt;
''TODO: Sample of how to use OpenMAX to decode audio/video/images, etc.''&lt;br /&gt;
&lt;br /&gt;
== Bindings for Other Programming Languages ==&lt;br /&gt;
'''Python'''&lt;br /&gt;
* [https://bitbucket.org/bryancole/rpi_vid_core/ RPi_Vid_Core] - ''python bindings of EGL, OpenGL ES, OpenVG and bcm_host for Raspberry Pi implemented using Cython''&lt;br /&gt;
&lt;br /&gt;
== Open Source Software compatible with the VideoCore APIs ==&lt;br /&gt;
* '''[https://github.com/huceke/omxplayer omxplayer]''' - ''a command line a/v player for the Raspberry Pi utilising the OpenMAX APIs and ffmpeg''&lt;br /&gt;
* '''[http://wiki.xbmc.org/index.php?title=Raspberry_Pi XBMC]''' - ''a media center, omxplayer's &amp;quot;big brother&amp;quot; ''&lt;br /&gt;
* '''[http://nccastaff.bournemouth.ac.uk/jmacey/GraphicsLib/piNGL/index.html piNGL]''' - ''port of the NGL graphics library to Raspberry Pi''&lt;br /&gt;
* '''[http://qt-project.org/wiki/Qt-RaspberryPi Qt on Pi]''' - ''Raspberry Pi port of the Qt toolkit''&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Template:Raspberry Pi}}&lt;br /&gt;
[[Category: RaspberryPi]]&lt;/div&gt;</summary>
		<author><name>Adammw</name></author>	</entry>

	<entry>
		<id>http://elinux.org/Omxplayer</id>
		<title>Omxplayer</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Omxplayer"/>
				<updated>2012-07-29T03:30:16Z</updated>
		
		<summary type="html">&lt;p&gt;Adammw: Add link to http://omxplayer.sconde.net/&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:RaspberryPi]]&lt;br /&gt;
&lt;br /&gt;
[https://github.com/huceke/omxplayer Omxplayer] is a video player specifically made for the Raspberry PI's GPU made by Edgar (gimli) Hucek from the XBMC project.&lt;br /&gt;
&lt;br /&gt;
RaspberryPI forum user spenning made precompiled binaries available on the forum see [http://www.raspberrypi.org/phpBB3/viewtopic.php?f=2&amp;amp;t=5543 here].&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
=== No rights to VCHIQ ===&lt;br /&gt;
On bare installations of the default distributions Omxplayer often has insufficient permissions to access /dev/vchiq. One solution would be to run omxplayer as root, but a nicer solution is to add a udev rule so that /dev/vchiq is also accessible from other users. To accomplish this, do the following under root:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# echo 'SUBSYSTEM==&amp;quot;vchiq&amp;quot;,GROUP=&amp;quot;video&amp;quot;,MODE=&amp;quot;0660&amp;quot;' &amp;gt; /etc/udev/rules.d/10-vchiq-permissions.rules&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Now add yourself to the group named 'video':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# usermod -aGvideo USERNAME&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Reboot the Raspberry and you should be able to run omxplayer without the vchiq-error showing up.&lt;br /&gt;
&lt;br /&gt;
=== HDMI ===&lt;br /&gt;
When using HDMI make sure to pass '-o hdmi' to omxplayer if you want the audio to playthrough the HDMI cable:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
omxplayer -o hdmi videofile.mp4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Helpful Links===&lt;br /&gt;
* [http://www.brianhensley.net/2012/07/how-to-get-1080p-videos-running-on-my.html?spref=fb Successful Raspberry Pi 1080p blog, Start-&amp;gt;Finish]&lt;br /&gt;
* [http://www.brianhensley.net/2012/07/how-to-get-debian-working-on-my.html How to install Debian Raspberry Pi]&lt;br /&gt;
* [http://omxplayer.sconde.net/ Omxplayer Build Bot]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Adammw</name></author>	</entry>

	<entry>
		<id>http://elinux.org/R-Pi_Troubleshooting</id>
		<title>R-Pi Troubleshooting</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/R-Pi_Troubleshooting"/>
				<updated>2012-07-23T11:52:46Z</updated>
		
		<summary type="html">&lt;p&gt;Adammw: /* Networking */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Back to the [[R-Pi Hub|Hub]].&lt;br /&gt;
&lt;br /&gt;
[[Category:RaspberryPi]]&lt;br /&gt;
This page lists the most common problems and suggests some solutions.&lt;br /&gt;
&lt;br /&gt;
==Power / Start-up==&lt;br /&gt;
A good power supply that will supply 5V is vital. There is more information about See [[#Troubleshooting_power_problems]].&lt;br /&gt;
===Red power LED does not light, nothing on display===&lt;br /&gt;
The power is not properly connected.&lt;br /&gt;
&lt;br /&gt;
===Red power LED is blinking===&lt;br /&gt;
The red power LED should never blink, because it is hard-wired to the 3.3V power supply rail. If it is blinking, as one user has reported&amp;lt;ref&amp;gt;http://www.raspberrypi.org/phpBB3/viewtopic.php?f=28&amp;amp;t=7528&amp;lt;/ref&amp;gt; it means the 5V power supply is dropping out. Use a different power supply.&lt;br /&gt;
&lt;br /&gt;
===Red power LED is on, green LED does not flash, nothing on display===&lt;br /&gt;
*The Raspberry Pi cannot find a valid image on the SD card. Check card is inserted correctly. Check that you have correctly written a Raspberry Pi image to the card. Insert the SD card into a Windows machine and you should see bootcode.bin, loader.bin and start.elf amongst others. See also, [[RPi_VerifiedPeripherals#SD_cards|Known SD Cards]].&lt;br /&gt;
*Try with no cables connected except the USB power lead, and SD card inserted. You should see flashing of the OK light for ~20 seconds. If that helps, plug in cables one at a time to identify which is interfering with boot.&lt;br /&gt;
*The voltage is too low (below 5 V), try a different power supply and/or cable. The R-Pi needs a supply rated for 700 mA or more. Some supplies labeled as such cannot actually provide their rated current while maintaining 5V. See also, [[#Troubleshooting_power_problems]].&lt;br /&gt;
*There is a bug in the distributed version of bootcode.bin which causes problems with some sdcards.  Try this version: https://github.com/raspberrypi/firmware/blob/234c19de7cbaaf4997671d61df20a05759066295/boot/bootcode.bin. Please let us know if it &amp;quot;fixes&amp;quot; your non-working SD card (or, more importantly, if it doesn't). This can also manifest itself as intermittent booting, or only booting when cold.&lt;br /&gt;
*''(unlikely)'' hardware abuse, for example by connecting a 7 V supply to a 3v3 GPIO output pin&amp;lt;ref&amp;gt;http://www.raspberrypi.org/phpBB3/viewtopic.php?f=6&amp;amp;t=5096&amp;amp;p=76503#p76503&amp;lt;/ref&amp;gt; or powering up the board after a solder splash shorts some traces&amp;lt;ref&amp;gt;http://www.raspberrypi.org/phpBB3/viewtopic.php?f=6&amp;amp;t=5096&amp;amp;p=76654#p76654&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Green LED blinks in a specific pattern===&lt;br /&gt;
&lt;br /&gt;
With recent firmware, according to [http://www.raspberrypi.org/phpBB3/viewtopic.php?f=28&amp;amp;t=8725#p103338 this forum post] the green light will blink in a specific pattern to indicate some types of errors:&lt;br /&gt;
&lt;br /&gt;
* 3 flashes: &amp;lt;tt&amp;gt;loader.bin&amp;lt;/tt&amp;gt; not found&lt;br /&gt;
* 4 flashes: &amp;lt;tt&amp;gt;loader.bin&amp;lt;/tt&amp;gt; not launched&lt;br /&gt;
* 5 flashes: &amp;lt;tt&amp;gt;start.elf&amp;lt;/tt&amp;gt; not found&lt;br /&gt;
*  6 flashes: &amp;lt;tt&amp;gt;start.elf&amp;lt;/tt&amp;gt; not launched&lt;br /&gt;
&lt;br /&gt;
===Coloured splash screen===&lt;br /&gt;
[[File:Debug-screen.jpg]]&lt;br /&gt;
&lt;br /&gt;
With recent firmware, a coloured splash screen is displayed after firmware (start.elf) is loaded. This should be replaced by linux console a second later.&lt;br /&gt;
However if the coloured screen remains, it suggests the kernel.img file is failing to boot. Try replacing it with a known good one.&lt;br /&gt;
&lt;br /&gt;
===Kernel Panic on boot ===&lt;br /&gt;
Text appears on screen, but then hangs with debug messages. This can be caused by USB devices such as keyboards. &lt;br /&gt;
Try again with nothing in the USB.&lt;br /&gt;
&lt;br /&gt;
===Raspberry Pi shuts down soon after booting up===&lt;br /&gt;
This is caused by a power supply producing too low a voltage. See [[#Troubleshooting_power_problems]].&lt;br /&gt;
&lt;br /&gt;
===Pi boots sometimes but not always===&lt;br /&gt;
With a known good power supply and known good SD card, the R-Pi boots occasionally, but other times shows only a tiny green flicker from the &amp;quot;OK&amp;quot; LED and it fails to start, even with no USB devices and no Ethernet. This has been reported several times&amp;lt;ref&amp;gt;http://www.raspberrypi.org/forum/troubleshooting/will-not-boot-consistently-any-suggestions-before-i-send-my-pi-back&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref&amp;gt;http://www.raspberrypi.org/forum/troubleshooting/booted-once-wont-work-again&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref&amp;gt;http://www.raspberrypi.org/forum/troubleshooting/possible-fault-pi-boots-sometimes-but-not-always&amp;lt;/ref&amp;gt; and remains an open issue. Low voltage or an improper SD card can cause it. Some SD cards will work until they warm up slightly, and then fail&amp;lt;ref&amp;gt;http://www.raspberrypi.org/phpBB3/viewtopic.php?f=6&amp;amp;t=5900&amp;amp;p=79008#p79008&amp;lt;/ref&amp;gt;. When exposed to 21 C room temperature the warmest part of an uncased working R-Pi should be 41 C&amp;lt;ref&amp;gt;http://www.raspberrypi.org/phpBB3/viewtopic.php?f=6&amp;amp;t=5900&amp;amp;p=78973#p78973&amp;lt;/ref&amp;gt;. The wiki has a [[RPi_VerifiedPeripherals#SD_cards | list of working SD cards]]. Buy from a reliable vendor as it has been [http://www.petapixel.com/2011/05/20/one-third-of-the-sandisk-memory-cards-on-earth-are-counterfeit/ claimed] that 1/3 of all &amp;quot;Sandisk&amp;quot; labelled memory cards are counterfeit.&lt;br /&gt;
&lt;br /&gt;
==Keyboard / Mouse / Input Devices==&lt;br /&gt;
&lt;br /&gt;
===R-Pi does not respond to key presses / Keyboard randomly repeats key presses===&lt;br /&gt;
This is caused by inadequate power. Use a good power supply and a good power cable. Some cheap cables that work with a cell phone, cannot fully power the R-Pi. Some USB devices require a lot of power: most will have a label showing the voltage and mA requirements. They should be 5v 100mA each max, any more than this they must be used with a powered USB hub. Try unplugging every USB device except the keyboard (you should also note that some keyboards have built in hubs and can try to draw 150mA (Pi can only handle 100mA per USB slot without a hub)).&lt;br /&gt;
Also, use the latest software. Forum user MrEngman [http://www.raspberrypi.org/forum/absolute-beginners/using-a-powered-usb-port-to-power-a-rpi#p76485 reported] some keyboard repeats and wireless hangs until [http://www.raspberrypi.org/downloads upgrading] to the debian6-19-04-2012 kernel, which he reports stable with no problems even with a low [[R-Pi_Troubleshooting#Troubleshooting_power_problems | TP1-TP2 voltage]] of 4.65 - 4.68 volts.&lt;br /&gt;
&lt;br /&gt;
===Keyboard / Mouse interferes with USB WiFi device===&lt;br /&gt;
Connecting a keyboard and/or mouse while a USB WiFi device is connected, may cause one or both devices to malfunction. On April 30 2012, there was a bugfix&amp;lt;ref&amp;gt;https://github.com/raspberrypi/linux/commit/e09244e60881148431ecd016ccc42f1fa0678556&amp;lt;/ref&amp;gt; relating to USB sharing between high-speed (eg. WiFi) and full/low-speed devices (eg. keyboard/mouse). User spennig&amp;lt;ref&amp;gt;http://www.raspberrypi.org/forum/troubleshooting/usb-power-hub-wifi/page-4#p74609&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;http://www.raspberrypi.org/forum/troubleshooting/success-with-kb-mouse-wifi?value=3761&amp;amp;type=8&amp;amp;include=1&amp;amp;search=1&amp;lt;/ref&amp;gt; reports this patch did not fix the Mouse/WiFi conflict. On 2012-05-12, user spennig was pleased to confirm that wifi was working with a USB keyboard and mouse, as long as the Raspberry Pi had a good PSU and a powered hub. Even so, some experimentation was needed, e.g. USB mouse connected to the device, and the keyboard and mouse connected to the powered hub. Some experimentation may be necessary to find a working combination; however a good power supply is essential.&lt;br /&gt;
&lt;br /&gt;
===Wireless Keyboard trouble===&lt;br /&gt;
Some wireless keyboards, for example the Microsoft Wireless Keyboard 800 are reported to fail&amp;lt;ref&amp;gt;http://www.raspberrypi.org/forum/troubleshooting/display-and-keyboard-issues-on-a-real-pi#p74816&amp;lt;/ref&amp;gt; even though the current drawn by the wireless adaptor is within the R-Pi USB spec limit of 100 mA. This may be a software driver problem.&lt;br /&gt;
&lt;br /&gt;
===Re-mapping the keyboard with Debian Squeeze===&lt;br /&gt;
If different letters appear on-screen from that which you typed, you need to reconfigure you keyboard settings. In Debian, from a command line type:&lt;br /&gt;
 sudo dpkg-reconfigure keyboard-configuration&lt;br /&gt;
Follow the prompts. Then restart your RasPi.&amp;lt;br /&amp;gt;'''Or:'''&amp;lt;br /&amp;gt; From the command line type:&lt;br /&gt;
 sudo nano /etc/default/keyboard&lt;br /&gt;
Then find where it says &amp;lt;blockquote&amp;gt;XKBLAYOUT=”gb”&amp;lt;/blockquote&amp;gt;and change the gb to the two letter code for your country. [http://www.raspberrypi.org/phpBB3/viewtopic.php?p=78325#p78325]&lt;br /&gt;
&lt;br /&gt;
===Slow keyboard mapping=== &lt;br /&gt;
If you have remapped your keyboard and get a very long delay during the keyboard mapping at startup, type the following once on the command line after you have logged in:&lt;br /&gt;
 sudo setupcon&lt;br /&gt;
&lt;br /&gt;
===No USB device works, with known good PS, SD card, KB=== &lt;br /&gt;
There has been more than one report&amp;lt;ref&amp;gt;http://www.raspberrypi.org/phpBB3/viewtopic.php?f=28&amp;amp;t=7533&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;http://www.raspberrypi.org/phpBB3/viewtopic.php?t=5766#p77576&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;http://www.raspberrypi.org/phpBB3/viewtopic.php?t=5766#p80995&amp;lt;/ref&amp;gt; of a R-Pi booting but not getting USB input, using a known-good power supply, SD card, and keyboard. The more common cause for no USB devices working is [[#Troubleshooting_power_problems|low power supply voltage]] from bad PSU, cable, or USB hub, but in this case the problem was no clock signal present at the LAN9512 USB/Ethernet chip &amp;quot;IC3&amp;quot;, and the solution was to reflow the solder on the 25 MHz crystal &amp;quot;X1&amp;quot; on the bottom side of the board.&lt;br /&gt;
Or return the board for a replacement, but before making this conclusion, confirm known good peripherals. A significant number of &lt;br /&gt;
[[RPi_VerifiedPeripherals#USB_Keyboards| USB keyboards]] are not compatible with R-Pi. As of June 1 2012, Eben reported&amp;lt;ref&amp;gt;http://www.raspberrypi.org/phpBB3/viewtopic.php?f=28&amp;amp;t=6822&amp;amp;p=89589&amp;amp;hilit=eben#p89513&amp;lt;/ref&amp;gt; that only about 1 in 1000 shipped R-Pi boards have been found to have a hardware fault of any kind.&lt;br /&gt;
&lt;br /&gt;
== Updating firmware ==&lt;br /&gt;
=== Check your firmware version ===&lt;br /&gt;
Using the latest firmware version may help various problems with SD card and display compatibility. Check the kernel version with:&lt;br /&gt;
  uname -a&lt;br /&gt;
    Linux RPi 3.1.19 #1 PREEMPT Fri Jun 1 14:16:38 CEST 2012 armv6l GNU/Linux&lt;br /&gt;
&lt;br /&gt;
And the GPU firmware with:&lt;br /&gt;
  /opt/vc/bin/vcgencmd version&lt;br /&gt;
    May 31 2012 13:35:03&lt;br /&gt;
    Copyright (c) 2012 Broadcom&lt;br /&gt;
    version 317494 (release)&lt;br /&gt;
&lt;br /&gt;
=== Get the latest firmware version ===&lt;br /&gt;
The GPU firmware and kernel can be updated with [https://github.com/Hexxeh/rpi-update Hexxeh's rpi-update tool].&lt;br /&gt;
&lt;br /&gt;
However this requires the Pi to be successfully booted. With sdcard problems, you may not get that far, so can try a manual udpate.&lt;br /&gt;
If you have a Linux machine, rpi-update can be run on that in an offline mode, and will update your sdcard from the Linux machine.&lt;br /&gt;
&lt;br /&gt;
Otherwise, on a Windows computer, you will see the &amp;quot;/boot&amp;quot; partition appear as the contents of SD card. &lt;br /&gt;
You can download the latest GPU firmware version [https://github.com/raspberrypi/firmware/blob/master/boot/start.elf here].&lt;br /&gt;
Click on '''view raw''', then save it, and put the new start.elf file on the sdcard  replacing the existing one. Similarly, the latest kernel is [https://github.com/raspberrypi/firmware/tree/master/boot/kernel.img here].&lt;br /&gt;
After updating these files you should be able to boot. You still need to run rpi-update to update the kernel modules (in /lib/modules) and the GPU libraries (in /opt/vc).&lt;br /&gt;
&lt;br /&gt;
=== Choosing the right ARM/GPU memory split ===&lt;br /&gt;
There is a choice of how the 256M of RAM is divided between the ARM and GPU:&lt;br /&gt;
    arm224_start.elf : 224M ARM,  32M GPU split : Maximum ARM memory. Good for ARM desktop use. No accelerated video or 3D possible.&lt;br /&gt;
    arm192_start.elf : 192M ARM,  64M GPU split : Reasonable ARM memory. Simple video (omxplayer) or 3D (quake) is possible. This is the default.&lt;br /&gt;
    arm128_start.elf : 128M ARM, 128M GPU split : Use this for heavy 3D work, or 3D plus video. Needed for XBMC.&lt;br /&gt;
&lt;br /&gt;
To switch replace start.elf with one of the above files and reboot. E.g.&lt;br /&gt;
 sudo cp /boot/arm224_start.elf /boot/start.elf &amp;amp;&amp;amp; sudo reboot&lt;br /&gt;
&lt;br /&gt;
== SD cards ==&lt;br /&gt;
&lt;br /&gt;
* If you have problems, check you have latest firmware version (described above)&lt;br /&gt;
* Some SD cards do not work on the R-Pi, so check the [[RPi_VerifiedPeripherals#SD_cards|list of known SD cards]].&lt;br /&gt;
* If you are having problems setting up your SD card you might want to start by erasing it completely - especially if it has been used elsewhere and still contains data / partitions.&lt;br /&gt;
** Windows and Mac users can download a formatting tool from the SD Association: https://www.sdcard.org/downloads/formatter_3/&lt;br /&gt;
* Reformatting cards is also easy to do in a digital camera.&lt;br /&gt;
* After writing the image to the SD card, verify that you can see the boot partition when you insert the SD card into your computer. The partition should contain a number of files, including ''start.elf'' and ''kernel.img''. If you do not see these files on the SD card, you have made an error writing the image file.&lt;br /&gt;
* If you are manually preparing your SD card on Linux or Mac OS using the ''dd'' command, this operation will completely erase any existing data and partitions. Make sure you write to the whole card (e.g. &amp;lt;tt&amp;gt;/dev/sdd&amp;lt;/tt&amp;gt;) and not to an existing partition (e.g. &amp;lt;tt&amp;gt;/dev/sdd1&amp;lt;/tt&amp;gt;).&lt;br /&gt;
* If you have an sdcard that doesn't work with latest firmware, head over [http://www.raspberrypi.org/phpBB3/viewtopic.php?f=63&amp;amp;t=6093 here].&lt;br /&gt;
* If you put the SD card into your PC in an attempt to write the R-Pi operating system onto it, and the PC tells you the card is write-protected, even with the write-protect tab in the correct, forward position, then you may have a faulty SD-card rewriter. There's a common fault with many SD-card rewriters -  The write-protect tab is detected by a very thin, narrow metal strip, that is part of a switch. When the card is inserted, the write-protect tab is supposed to push the strip and make/break the contact, as needed. Unfortunately, these strips have a habit of getting stuck, because they are mounted in a thin plastic channel, and only need to be deformed slightly sideways to get jammed.&lt;br /&gt;
Luckily, if you have this problem, most built-in card readers are easy to pull apart and repair; some users have even reported succesfully unjamming the switch with a blast of compressed air from a can into the SD-card slot without having to dismantle anything.&lt;br /&gt;
You may also be able to temporarily get round the problem by putting the write-protect tab in a half-way position - this pushes on a different part of the strip and may break the contact - it's worth trying a few, slightly different positions. You could also use a USB-SD card adaptor, which are cheap to buy.&lt;br /&gt;
&lt;br /&gt;
==Networking==&lt;br /&gt;
&lt;br /&gt;
===Ethernet connection is lost when a USB device is plugged in===&lt;br /&gt;
This is caused by inadequate power. Use a good power supply and a good power cable. Some cheap cables that work with a cell phone, cannot fully power the R-Pi. Some USB devices require a lot of power (&amp;gt;100 mA), so they must be used with a powered USB hub. Some cheap USB hubs suck power from the Raspberry Pi even if a USB power supply is connected.&lt;br /&gt;
&lt;br /&gt;
===Ethernet connects at 10M instead of 100M===&lt;br /&gt;
The LED in the corner of the board labelled &amp;quot;10M&amp;quot; is mislabeled. When that LED is on, the R-Pi is actually connected at 100 Mbps. You can confirm the true transfer rate using a network benchmark such as iperf. You can also read the current network speed with&lt;br /&gt;
  cat /sys/class/net/eth0/speed&lt;br /&gt;
&lt;br /&gt;
===Cannot ssh in to Pi===&lt;br /&gt;
&lt;br /&gt;
In the Debian image, ssh is disabled by default. Boot commands are taken from /boot/boot.rc if that file present. There is an example file named '''boot_enable_ssh.rc''' that enables ssh. So:&lt;br /&gt;
&lt;br /&gt;
 sudo mv /boot/boot_enable_ssh.rc /boot/boot.rc&lt;br /&gt;
&lt;br /&gt;
and reboot should enable ssh. (password as below)&lt;br /&gt;
&lt;br /&gt;
===Network/USB chip gets too hot to touch===&lt;br /&gt;
&lt;br /&gt;
This is normal. In open air at 24 C, the LAN9512 Ethernet/USB chip reaches about 52 C after some time. This is too hot to touch for more than a few seconds, but it is not unusually hot for the chip.&lt;br /&gt;
&lt;br /&gt;
The &lt;br /&gt;
[http://www.smsc.com/media/Downloads_Public/Data_Sheets/9512.pdf LAN9512 data sheet] in Table 4.1 on p.40 says it comes in two versions, rated for operation at an ambient temperature in still air (Ta) of 70 C (commercial) or 85 C (industrial).  It uses 763 mW at 3.3V with maximum traffic on 100baseT and both USB ports (Table 4.3.4, p. 42).&lt;br /&gt;
&lt;br /&gt;
There is a study of RasPi heat profiles by &amp;quot;Remy&amp;quot; at [http://www.geektopia.es/es/technology/2012/06/22/articulos/se-calienta-el-ordenador-raspberry-pi-estudio-de-sus-temperaturas-en-funcionamiento.html ¿Se calienta el ordenador Raspberry Pi? Estudio de sus temperaturas en funcionamiento] (''Is the Raspberry Pi computer getting hot?  A study of its operational temperature.'')  The Spanish article has numerous color temperature images of RasPi in various operational modes, with the highest LAN9512 case temperature measured as 64.5 C.&lt;br /&gt;
&lt;br /&gt;
===Networking no longer works when changing SD card between two Raspberry Pis===&lt;br /&gt;
&lt;br /&gt;
In some distributions, /etc/udev/rules.d/70-persistent-net.rules remembers which MAC address is associated with eth0, so each new device will be assigned as a different interface (eth1, eth2, etc.) due to the different MAC addresses. Editing /etc/udev/rules.d/70-persistent-net.rules to remove the invalid rules and rebooting may help fix the problem.&lt;br /&gt;
&lt;br /&gt;
==Passwords==&lt;br /&gt;
===I do not know the password to login===&lt;br /&gt;
Please check the page [http://www.raspberrypi.org/downloads http://www.raspberrypi.org/downloads] for the correct username and password for each  image.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Debian from later dates - pi/raspberry&lt;br /&gt;
Debian Feb 17 - pi/suse&lt;br /&gt;
Arch - root/root&lt;br /&gt;
&lt;br /&gt;
===Some programs refuse to accept my password===&lt;br /&gt;
While using Debian, some programs may ask for your password but refuse to accept a valid password.&lt;br /&gt;
&lt;br /&gt;
This is a fault in some Debian images and will be fixed soon. If you are using an image with this fault, enter the following command on the command line.&lt;br /&gt;
 gconftool-2  --type bool  --set  /apps/gksu/sudo-mode  true&lt;br /&gt;
Please enter this command carefully, the spaces are important. The command should be accepted without any response or errors.&lt;br /&gt;
&lt;br /&gt;
===I don't know the root password===&lt;br /&gt;
&lt;br /&gt;
There is no root password set by default on Debian. You are expected to do everything through sudo. You can set one with &amp;quot;sudo passwd root&amp;quot; - just make sure you know what you are doing with a root account.&lt;br /&gt;
&lt;br /&gt;
==Sound==&lt;br /&gt;
===Sound does not work with an HDMI monitor===&lt;br /&gt;
This is caused by some computer monitors which select DVI mode even if an HDMI cable is connected. This fix may be necessary even if other HDMI devices work perfectly on the same monitor (or TV)!&lt;br /&gt;
&lt;br /&gt;
Edit the configuration file - see the instructions at [[R-Pi_ConfigurationFile]].&lt;br /&gt;
&lt;br /&gt;
Add the following line to the configuration file:&lt;br /&gt;
 hdmi_drive=2&lt;br /&gt;
&lt;br /&gt;
This will force it to select HDMI mode.&lt;br /&gt;
&lt;br /&gt;
===Sound does not work at all, or in some applications===&lt;br /&gt;
In Debin Squeeze, sound is disabled by default because the ALSA sound driver is still &amp;quot;alpha&amp;quot; (not fully tested) on the R-Pi. To try out sound, from the command prompt ''before'' &amp;quot;startx&amp;quot;, type&lt;br /&gt;
&lt;br /&gt;
  sudo apt-get install alsa-utils&lt;br /&gt;
  sudo modprobe snd_bcm2835&lt;br /&gt;
&lt;br /&gt;
On Debian Wheezy, snd_bm2835 is enabled, by default, do that step is not necessary. Next try:&lt;br /&gt;
&lt;br /&gt;
  sudo aplay /usr/share/sounds/alsa/Front_Center.wav&lt;br /&gt;
&lt;br /&gt;
By default output will be automatic (hdmi if hdmi supports audio, otherwise analogue). You can force it with:&lt;br /&gt;
&lt;br /&gt;
  sudo amixer cset numid=3 &amp;lt;n&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where n is 0=auto, 1=headphones, 2=hdmi.&lt;br /&gt;
&lt;br /&gt;
With recent firmware, you can build hello_audio with:&lt;br /&gt;
  cd /opt/vc/src/hello_pi/&lt;br /&gt;
  ./rebuild.sh&lt;br /&gt;
  cd hello_audio&lt;br /&gt;
&lt;br /&gt;
With older firmware&lt;br /&gt;
  cd /opt/vc/src/hello_pi/hello_audio&lt;br /&gt;
  make&lt;br /&gt;
&lt;br /&gt;
to test analogue output:&lt;br /&gt;
  ./hello_audio.bin&lt;br /&gt;
and:&lt;br /&gt;
  ./hello_audio.bin 1&lt;br /&gt;
to test HDMI.&lt;br /&gt;
&lt;br /&gt;
Also note that you may have to add your user to the 'audio' group to get permission to access the sound card.&lt;br /&gt;
&lt;br /&gt;
==Display==&lt;br /&gt;
===Startx fails to start===&lt;br /&gt;
If you just get errors instead of a desktop when typing&lt;br /&gt;
  startx&lt;br /&gt;
you may be out of storage space on the SD card. By default there are only a few hundred MB free in the 2 GB main partition, which can quickly fill up if you download files. Make sure there is some space free (gparted can expand a partition, if the SD card is &amp;gt; 2GB). Also, installing some software may incorrectly create or modify a .Xauthority file in your home directory, causing startx to fail, according to [http://www.raspberrypi.org/forum/troubleshooting/startx-fails-worked-yesterday this thread]. Temporarily renaming, moving, or deleting that file may fix the problem.&lt;br /&gt;
&lt;br /&gt;
===Video does not play or plays very slowly===&lt;br /&gt;
The only hardware-accelerated video player is in the [http://www.raspberrypi.org/forum/general-discussion/openelec-meets-raspberry-pi-part-1-xbmc XBMC distribution] and its command line variant [[omxplayer]]. H264 is the only hardware-accelerated codec, for playback. No hardware encoding is supported. Additional codecs were not purchased as licensing fees would have increased the R-Pi's price.&lt;br /&gt;
&lt;br /&gt;
===Can only get 800x480 resolution in LXDE (Arch linux)===&lt;br /&gt;
Known issue with distro package as of 17th April 2012 - there's some missing boot config information. Creating a suitable cmdline.txt fixes it - type the following at the Raspberry Pi command line:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  sudo echo &amp;quot;dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 root=/dev/mmcblk0p2 rootfstype=ext3 rootwait&amp;quot; &amp;gt;/boot/cmdline.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Big black borders around small image on HD monitors===&lt;br /&gt;
&lt;br /&gt;
Out of the box, R-Pi graphics don't necessarily fill the whole screen. This is due to something called &amp;quot;Underscan&amp;quot;, and it can be fixed easily.&lt;br /&gt;
&lt;br /&gt;
Note: the best solution is to disable overscan in display menu options (it may be called &amp;quot;just scan&amp;quot;, &amp;quot;screen fit&amp;quot;, &amp;quot;HD size&amp;quot;, &amp;quot;full pixel&amp;quot;, &amp;quot;unscaled&amp;quot;, &amp;quot;dot by dot&amp;quot;, &amp;quot;native&amp;quot; or &amp;quot;1:1&amp;quot;), then use the disable_overscan=1 option.&lt;br /&gt;
&lt;br /&gt;
Edit the configuration file, see the instructions at [[R-Pi_ConfigurationFile]].&lt;br /&gt;
&lt;br /&gt;
Add the following lines to the configuration file...&lt;br /&gt;
&lt;br /&gt;
If your display has no overscan:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
disable_overscan=1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or if your display has some overscan:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
overscan_left=-20&lt;br /&gt;
&lt;br /&gt;
overscan_right=-20&lt;br /&gt;
&lt;br /&gt;
overscan_top=-20&lt;br /&gt;
&lt;br /&gt;
overscan_bottom=-20&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Making the R-Pi graphics fill the screen is a matter of experimenting with the numbers you put in the config.txt file. Change the numbers – try jumps of 5 or 10 at a time. Bigger negative numbers reduce the black borders (so -40 means less black border than -20). The numbers do not all have to be the same; you can use this feature to centre the display on the screen.&lt;br /&gt;
&lt;br /&gt;
===Writing spills off the screen on HD monitors===&lt;br /&gt;
&lt;br /&gt;
Out of the box, R-Pi graphics may be larger than the 1080p (ie Full HD) screen. This is due to something called &amp;quot;Overscan&amp;quot;, and it can be fixed easily by creating a simple text file on the R-Pi SD card by using Notepad on your PC.&lt;br /&gt;
&lt;br /&gt;
Follow the instructions in the section &amp;quot;Big black borders around small image on HD monitors&amp;quot;, but use positive numbers for the overscan settings, for example&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
overscan_left=20&lt;br /&gt;
&lt;br /&gt;
overscan_right=20&lt;br /&gt;
&lt;br /&gt;
overscan_top=20&lt;br /&gt;
&lt;br /&gt;
overscan_bottom=20&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Interference visible on a HDMI or DVI monitor===&lt;br /&gt;
This may be caused by loss of signal on long video cables. The signal level may be increased by changing a configuration parameter.&lt;br /&gt;
&lt;br /&gt;
[[File:RPi_HDMI_interference.jpg|600px]]&lt;br /&gt;
&lt;br /&gt;
Edit the configuration file, see the instructions at [[R-Pi_ConfigurationFile]].&lt;br /&gt;
&lt;br /&gt;
Add the following line to the configuration file&lt;br /&gt;
 config_hdmi_boost=4&lt;br /&gt;
&lt;br /&gt;
You may experiment with different values of config_hdmi_boost. Value 1 is used for very short cables, value 7 is used for very long cables.&lt;br /&gt;
&lt;br /&gt;
This option can also help when there is no display output at all, the display periodically blanks, or colours are wrong/inverted.&lt;br /&gt;
&lt;br /&gt;
This symptom can also be caused by RasPi +5V (measured from TP1 to TP2) falling too low.  See &amp;quot;Troubleshooting Power Problems&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===No HDMI output at all===&lt;br /&gt;
First make sure the display is powered on and switched to the right input before booting Pi.&lt;br /&gt;
&lt;br /&gt;
If you have the [http://www.raspberrypi.org/archives/1435 Wheezy] image (recommended) then try&lt;br /&gt;
 hdmi_safe=1&lt;br /&gt;
&lt;br /&gt;
Otherwise, try adding the following line to the configuration file (similar to interference case above)&lt;br /&gt;
 config_hdmi_boost=4&lt;br /&gt;
&lt;br /&gt;
Your monitor/cable may not be asserting the hotplug signal. You can override this with:&lt;br /&gt;
 hdmi_force_hotplug=1&lt;br /&gt;
&lt;br /&gt;
Also [http://www.raspberrypi.org/phpBB3/viewtopic.php?f=28&amp;amp;t=7513 try] the following video options:&lt;br /&gt;
 hdmi_group=2&lt;br /&gt;
 hdmi_mode=4&lt;br /&gt;
which resolved an issue with DVI monitor reporting &amp;quot;input signal out of range&amp;quot;&lt;br /&gt;
&lt;br /&gt;
As a last resort, try deleting (rename to keep backup) config.txt from the SD card.&lt;br /&gt;
&lt;br /&gt;
Also check that the RasPi +5V voltage (measured from TP1 to TP2) is in the correct range.  One user found that his DVI-D monitor blanked out when +5V was too low.  See &amp;quot;Troubleshooting Power Problems&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Composite displays only back and white or no image===&lt;br /&gt;
Remember, the output display will be HDMI if detected, and composite if not. Make sure there isn't a HDMI cable connected when you are wanting composite output.&lt;br /&gt;
&lt;br /&gt;
We default to NTSC output. Most TVs will show an image with that, but if not:&lt;br /&gt;
&lt;br /&gt;
Edit the configuration file, see the instructions at [[R-Pi_ConfigurationFile]].&lt;br /&gt;
&lt;br /&gt;
Add the following line to the configuration file&lt;br /&gt;
 sdtv_mode=2&lt;br /&gt;
&lt;br /&gt;
(You can try other values: 0 is NTSC, 1 is Japanese NTSC, 2 is PAL, 3 is Brazilian PAL)&lt;br /&gt;
&lt;br /&gt;
==GPIO==&lt;br /&gt;
Remember that the GPIO pins are 3.3V logic level only, and are &amp;lt;strong&amp;gt;NOT&amp;lt;/strong&amp;gt; 5V tolerant.&lt;br /&gt;
&lt;br /&gt;
If you momentarily shorted the two end GPIO pins together (+3.3V and +5V), or a supply pin to ground, and the Pi appears to be dead, don't panic. The input polyfuse may have tripped. It is self-resetting after it cools down and the polymer re-crystallizes, which can take several hours. Set the Pi aside and try again later.&lt;br /&gt;
&lt;br /&gt;
The GPIO pins connect directly into the core of the ARM processer, and are static-sensitive, so you should avoid touching the pins wherever possible. If you are carrying a static charge, for example by taking off an acrylic pullover, or walking across a nylon carpet, touching the GPIO pins could destroy your R-Pi, so always earth yourself before touching the pins or anything connected to them.&lt;br /&gt;
&lt;br /&gt;
==General==&lt;br /&gt;
===The time is incorrect===&lt;br /&gt;
If the clock is off by a series of hours, in the command line type:&lt;br /&gt;
 sudo dpkg-reconfigure tzdata&lt;br /&gt;
&lt;br /&gt;
The R-Pi has no real-time clock, so unless it can access a timeserver over the network at boot, or time is manually entered by the user, the time/date will restart counting from the last logged time in the previous session.&lt;br /&gt;
&lt;br /&gt;
===A part broke off===&lt;br /&gt;
&lt;br /&gt;
The silver cylinder near the microUSB power input is a 220 uF capacitor (&amp;quot;C6&amp;quot; on schematic). It sticks up and due to the small surface-mount pads, it is easy to break off; several people have done so. This is a power supply filter capacitor which reduces any noise and spikes on the input +5V power. If you like, you can solder it back on, or just leave it off. If you do solder it back on, take care to observe the correct polarity with the black stripe towards the board edge. This part, C6 is a &amp;quot;just in case&amp;quot; component which is good design practice to include, but [http://www.raspberrypi.org/phpBB3/viewtopic.php?f=2&amp;amp;t=4926| as it turns out] most power supplies still work OK without this part installed. This part is also [http://elinux.org/RPi_Hardware#Capacitor_C6 discussed here].&lt;br /&gt;
&lt;br /&gt;
==Troubleshooting power problems==&lt;br /&gt;
&lt;br /&gt;
If you think you have a problem with your power supply, it is a good idea to check the actual voltage&lt;br /&gt;
on the Raspberry Pi circuit board. Two test points labelled TP1 and TP2 are provided on the circuit board&lt;br /&gt;
to facilitate voltage measurements.&lt;br /&gt;
&lt;br /&gt;
Use a multimeter which is set to the range 20 volts DC (or 20v =). You should see a voltage between 4.75 and 5.25 volts. Anything outside this range indicates that you have a problem with your power supply or your power cable.&lt;br /&gt;
&lt;br /&gt;
If you have not used a multimeter before, see these  [[http://www.sparkfun.com/tutorials/202 basic instructions]]&lt;br /&gt;
&lt;br /&gt;
Note: Even if the multimeter shows the correct voltage, you may have some power supply problems. A multimeter only displays the average voltage. If there are very short-lived dips or spikes in the voltage, these will not be shown by the multimeter. It is best to measure voltage when Pi is busy.&lt;br /&gt;
&lt;br /&gt;
If your voltage is low, it could be:&lt;br /&gt;
* The power supply produces too low a voltage&lt;br /&gt;
* The power supply cannot supply enough current, which results in a voltage drop. Make sure Power supply is labelled as at least 700mA. (Some cheap power supplies don't deliver what is labelled).&lt;br /&gt;
* The USB power cable is low quality. See: [[On_the_RPi_usb_power_cable]]&lt;br /&gt;
* Attached USB devices want too much power. The Pi is only designed for up to 100mA USB devices. A USB device wanting more that that will cause a voltage drop.&lt;br /&gt;
Note: keyboards with LCD displays, built in USB hubs, backlights, etc are likely to be problematic. Try to use a basic one. Wifi dongles are also unlikely to work when directly connected. Connect high powered USB devices to a powered USB hub.&lt;br /&gt;
&lt;br /&gt;
Try booting without HDMI, ethernet or USB deviced plugged in, and see if the voltage improves.&lt;br /&gt;
See also: [[RPi_Hardware#Power_Supply_Problems| Power Supply Problems]]&lt;br /&gt;
&lt;br /&gt;
[[File:RPI_Test_Points.JPG|400px]] [[File:Voltmeter.JPG|250px]]&lt;br /&gt;
&lt;br /&gt;
==Hardware versions/revisions==&lt;br /&gt;
Several different boards have been found probably from different assembly lines, and the following tables try to help you identify your board for better troubleshooting.&lt;br /&gt;
&lt;br /&gt;
Look for the date of manufacturing printed with the year and week. In this example year (2012) and week (18th):[[File:Date_of_manufacturing.jpg|200px|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
For what we can see for model B boards there are mainly two versions that differ on the type RAM used, Samsung (S) and Hynix (H).&lt;br /&gt;
&lt;br /&gt;
For '''Board ver'''. we used: &amp;lt;model&amp;gt;&amp;lt;RAM Maker&amp;gt;&amp;lt;production date&amp;gt; (ex.: BS1218 is &amp;quot;Model B, Samsung RAM, 18th week of 2012&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Model A:&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Board&lt;br /&gt;
ver.&lt;br /&gt;
! RAM&lt;br /&gt;
Chip &lt;br /&gt;
! USB&lt;br /&gt;
Chip &lt;br /&gt;
! Front&lt;br /&gt;
! Back&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Model B:&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Board&lt;br /&gt;
ver.&lt;br /&gt;
! RAM&lt;br /&gt;
Chip &lt;br /&gt;
! USB&lt;br /&gt;
Chip &lt;br /&gt;
! Front&lt;br /&gt;
! Back&lt;br /&gt;
|-&lt;br /&gt;
| BS12xx&lt;br /&gt;
| Samsung&lt;br /&gt;
| SMSC&lt;br /&gt;
| [[File:RaspberryPi-Board_A-Front.JPG|200px|thumb|center]]&lt;br /&gt;
| [[File:RaspberryPi-Board_A-Back.JPG|200px|thumb|center]]&lt;br /&gt;
|-&lt;br /&gt;
| BH12xx&lt;br /&gt;
| Hynix&lt;br /&gt;
| SMSC&lt;br /&gt;
| [[File:RaspberryPi-Board_B-Front.JPG|200px|thumb|center]]&lt;br /&gt;
| [[File:RaspberryPi-Board_B-Back.JPG|200px|thumb|center]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;See a '''complete list''' and user feedback here: [[RaspberryPi Boards]]&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references&amp;gt;&lt;br /&gt;
&amp;lt;/references&amp;gt;&lt;/div&gt;</summary>
		<author><name>Adammw</name></author>	</entry>

	<entry>
		<id>http://elinux.org/RPi_VideoCore_APIs</id>
		<title>RPi VideoCore APIs</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/RPi_VideoCore_APIs"/>
				<updated>2012-06-27T07:38:07Z</updated>
		
		<summary type="html">&lt;p&gt;Adammw: /* vc_cec_* */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:RPi_Software}}&lt;br /&gt;
&lt;br /&gt;
[[File:Raspberrypi_video_API_03.svg|500px|thumb|Source: http://elinux.org/images/b/be/Raspberrypi_video_API_03.svg]]&lt;br /&gt;
&lt;br /&gt;
The Raspberry Pi contains a Broadcom [http://en.wikipedia.org/wiki/Videocore VideoCore] IV GPU providing OpenGL ES 1.1, OpenGL ES 2.0, hardware-accelerated OpenVG 1.1, Open EGL, OpenMAX and 1080p30 H.264 high-profile decode. There are 24 GFLOPS of general purpose compute and a bunch of texture filtering and DMA infrastructure. Eben worked on the architecture team for this and the Raspberry Pi team are looking at how they can make some of the proprietary features available to application programmers. &lt;br /&gt;
&lt;br /&gt;
Currently C header files and libraries for many of the Broadcom APIs are located in &amp;lt;code&amp;gt;/opt/vc/include&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;/opt/vc/lib&amp;lt;/code&amp;gt; respectively, or available from [https://github.com/raspberrypi/firmware GitHub] within the same directory structure. Some documentation is contained within comments in the header files, as well as documentation for the OpenMAX IL components in the [https://github.com/raspberrypi/firmware/tree/master/documentation/ilcomponents documentation directory on Github], however it is severely lacking and difficult to understand in a general sense for people wanting to experiment with the device due to it being proprietary. As such, we encourage you to [http://elinux.org/index.php?title=RPi_VideoCore_APIs&amp;amp;action=edit edit this page] to help us build a much better open documentation.&lt;br /&gt;
&lt;br /&gt;
==Quirks==&lt;br /&gt;
&lt;br /&gt;
* The Raspberry Pi requires that the &amp;lt;code&amp;gt;bcm_host_init()&amp;lt;/code&amp;gt; function is called first before any GPU calls can be made.&lt;br /&gt;
* Before calling any of the vc_* functions, you need to initialise vcos and vchi, and make a vchi connection, before then calling the corresponding vc_*_init function for the part of the library you want to use: &amp;lt;code&amp;gt;vc_vchi_dispmanx_init&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;vc_vchi_tv_init&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;vc_vchi_cec_init&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;vc_vchi_gencmd_init&amp;lt;/code&amp;gt;.&amp;lt;br /&amp;gt;(See this [https://github.com/adammw/rpi-output-swapper/blob/master/video_swap.c#L152-169 sample code] which does initialisation for vc_tvservice_* APIs)&lt;br /&gt;
* &amp;lt;code&amp;gt;[[#graphics_get_display_size|graphics_get_display_size()]]&amp;lt;/code&amp;gt; is a broadcom-specific function&lt;br /&gt;
&lt;br /&gt;
== Built-in Sample Programs==&lt;br /&gt;
The Raspberry Pi comes with 7 sample programs and two helper libraries in the /opt/vc/src/hello_pi directory showing some of the system's capabilities and sample code. &lt;br /&gt;
===hello_video===&lt;br /&gt;
This sample decodes h264 video using the OpenMAX APIs and the ilclient library, and is distributed with a short scene of [http://www.bigbuckbunny.org/ Big Buck Bunny]&lt;br /&gt;
===hello_audio===&lt;br /&gt;
This sample plays a sine wave for ten seconds using the ??? APIs.&lt;br /&gt;
===hello_triangle===&lt;br /&gt;
This sample shows how to get a OpenGL ES context on the Raspberry Pi.&lt;br /&gt;
===ilclient helper library===&lt;br /&gt;
This library is described as:&lt;br /&gt;
&amp;lt;code&amp;gt;This API defines helper functions for writing IL clients.&lt;br /&gt;
 *&lt;br /&gt;
 * This file defines an IL client side library.  This is useful when&lt;br /&gt;
 * writing IL clients, since there tends to be much repeated and&lt;br /&gt;
 * common code across both single and multiple clients.  This library&lt;br /&gt;
 * seeks to remove that common code and abstract some of the&lt;br /&gt;
 * interactions with components.  There is a wrapper around a&lt;br /&gt;
 * component and tunnel, and some operations can be done on lists of&lt;br /&gt;
 * these.  The callbacks from components are handled, and specific&lt;br /&gt;
 * events can be checked or waited for.&lt;br /&gt;
 */&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Libraries ==&lt;br /&gt;
=== libbcm_host ===&lt;br /&gt;
bcm_host is the Broadcom hardware interface library.&lt;br /&gt;
&lt;br /&gt;
=== vc_dispmanx_*===&lt;br /&gt;
Dispmanx is a windowing system in the process of being deprecated in favour of [http://www.khronos.org/openwf/ OpenWF] (or similar), however dispmanx is still used in all API demos and it's replacement may not yet be available. &amp;lt;ref&amp;gt;http://www.raspberrypi.org/phpBB3/viewtopic.php?t=5621&amp;amp;p=77981&amp;lt;/ref&amp;gt;(confirmation required?)&lt;br /&gt;
=== vc_tvservice_* ===&lt;br /&gt;
These APIs allow controlling the HDMI and SDTV video outputs of the Raspberry Pi, as well as allowing the user to query the supported HDMI resolutions and audio formats and turn on/off copy protection. The Raspberry Pi can only have one output active at a time - turning on the HDMI automatically turns off the SDTV and vice-versa. However either can be turned off using the &amp;lt;code&amp;gt;vc_tv_power_off()&amp;lt;/code&amp;gt; function.&lt;br /&gt;
&lt;br /&gt;
The header file [https://github.com/raspberrypi/firmware/blob/master/opt/vc/include/interface/vmcs_host/vc_tvservice.h vc_tvservice.h] documents the functions quite well via comments above each prototype function, however before any of these functions will succeed you must initialise the connection to the host API like so:&lt;br /&gt;
&lt;br /&gt;
 void tvservice_init() {&lt;br /&gt;
    VCHI_INSTANCE_T vchi_instance;&lt;br /&gt;
    VCHI_CONNECTION_T *vchi_connections;&lt;br /&gt;
    &lt;br /&gt;
    // initialise bcm_host&lt;br /&gt;
    bcm_host_init();&lt;br /&gt;
    &lt;br /&gt;
    // initialise vcos/vchi&lt;br /&gt;
    vcos_init();&lt;br /&gt;
    if (vchi_initialise(&amp;amp;vchi_instance) != VCHIQ_SUCCESS) {&lt;br /&gt;
        fprintf(stderr, &amp;quot;failed to open vchiq instance\n&amp;quot;);&lt;br /&gt;
        exit(-2);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    // create a vchi connection&lt;br /&gt;
    if ( vchi_connect( NULL, 0, vchi_instance ) != 0) {&lt;br /&gt;
        fprintf(stderr, &amp;quot;failed to connect to VCHI\n&amp;quot;);&lt;br /&gt;
        exit(-3);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    // connect to tvservice&lt;br /&gt;
    if ( vc_vchi_tv_init( vchi_instance, &amp;amp;vchi_connections, 1) != 0) {&lt;br /&gt;
        fprintf(stderr, &amp;quot;failed to connect to tvservice\n&amp;quot;);&lt;br /&gt;
        exit(-4);&lt;br /&gt;
    }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
''TODO: Deinitialization''&lt;br /&gt;
==== Samples ====&lt;br /&gt;
* [https://github.com/adammw/rpi-output-swapper rpi-output-swapper] Uses tvservice apis to power on HDMI or SDTV display in specific or preferred mode.&lt;br /&gt;
&lt;br /&gt;
=== vc_cec_* ===&lt;br /&gt;
The vc_cec APIs allow programs to interface with the [http://en.wikipedia.org/wiki/Consumer_Electronics_Control#CEC Consumer Electronics Control (CEC)] host middleware on the system to send CEC packets, set strings for the middleware to auto-respond to certain requests or override the middleware handling by adding custom callbacks.&lt;br /&gt;
&lt;br /&gt;
''TODO: Samples/Howto''&lt;br /&gt;
&lt;br /&gt;
=== vc_gencmd_* ===&lt;br /&gt;
''TODO''&lt;br /&gt;
&lt;br /&gt;
=== EGL ===&lt;br /&gt;
[http://www.khronos.org/egl/ EGL (Native Platform Graphics Interface)] is an interface between Khronos rendering APIs such as OpenGL ES or OpenVG and the underlying native platform. The Raspberry Pi supports [http://www.khronos.org/registry/egl/specs/eglspec.1.4.20110406.pdf EGL Version 1.4] and the following EGL extensions (links are to EGL registry documentation):&amp;lt;ref name=&amp;quot;egl-info&amp;quot;&amp;gt;eglinfo, http://www.raspberrypi.org/phpBB3/viewtopic.php?p=35942#p35942 , http://www.raspberrypi.org/phpBB3/viewtopic.php?p=36318#p36318&amp;lt;/ref&amp;gt;&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_image.txt EGL_KHR_image]&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_image_base.txt EGL_KHR_image_base]&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_image_pixmap.txt EGL_KHR_image_pixmap]&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_vg_parent_image.txt EGL_KHR_vg_parent_image]&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_gl_image.txt EGL_KHR_gl_texture_2D_image]&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_gl_image.txt EGL_KHR_gl_texture_cubemap_image]&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_lock_surface.txt EGL_KHR_lock_surface]&lt;br /&gt;
&lt;br /&gt;
==== Samples====&lt;br /&gt;
&lt;br /&gt;
See [http://jonmacey.blogspot.com.au/2012/05/getting-started-with-egl-on-raspberry.html Getting Started with EGL] post by Jon Macey. &lt;br /&gt;
Extended documentation available in the [http://www.khronos.org/registry/egl/specs/eglspec.1.4.20110406.pdf EGL Version 1.4 Specification] and Simple Reference available in the [http://www.khronos.org/files/egl-1-4-quick-reference-card.pdf EGL 1.4 API Quick Reference Card].&lt;br /&gt;
&lt;br /&gt;
==== Function Documentation====&lt;br /&gt;
====={{anchor|graphics_get_display_size}}&amp;lt;code&amp;gt;int32_t graphics_get_display_size( const uint16_t display_number, uint32_t *width, uint32_t *height);&amp;lt;/code&amp;gt;=====&lt;br /&gt;
&lt;br /&gt;
This function allows you to get the size of the display, and is often used in creating an EGL Surface. width and height are pointers that you pass in to where you want the response values to be written to, display number 0 is usually used for the Raspberry Pi. return value of &amp;gt;= 0 indicates success, &amp;lt;0 indicates failure.&lt;br /&gt;
&lt;br /&gt;
This function is implemented in libbcm_host, and the implementation has been made [https://github.com/raspberrypi/firmware/issues/14#issuecomment-5652185 public] showing that it internally calls the vc_dispmanx_display_get_info function to get the width and height of the current mode.&lt;br /&gt;
&lt;br /&gt;
Bugs present in early versions of the firmware caused this function to always return 1920x1080, however this can easily be fixed by updating the firmware with [https://github.com/Hexxeh/rpi-update Hexxeh's rpi-update] (see the [[R-Pi_Troubleshooting#Updating_firmware|Updating firmware]] page for help).&amp;lt;ref&amp;gt;http://www.raspberrypi.org/phpBB3/viewtopic.php?f=68&amp;amp;t=8252&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;https://github.com/raspberrypi/firmware/issues/14&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== OpenGL ES ===&lt;br /&gt;
The Raspberry Pi supports OpenGL ES 2.0 with the following extensions: &amp;lt;ref name=&amp;quot;egl-info&amp;quot; /&amp;gt;&lt;br /&gt;
*GL_OES_compressed_ETC1_RGB8_texture&lt;br /&gt;
*GL_OES_compressed_paletted_texture&lt;br /&gt;
*GL_OES_texture_npot GL_OES_depth24&lt;br /&gt;
*GL_OES_vertex_half_float&lt;br /&gt;
*GL_OES_EGL_image&lt;br /&gt;
*GL_OES_EGL_image_external&lt;br /&gt;
*GL_EXT_discard_framebuffer&lt;br /&gt;
*GL_OES_rgb8_rgba8&lt;br /&gt;
*GL_OES_depth32&lt;br /&gt;
*GL_OES_mapbuffer&lt;br /&gt;
*GL_EXT_texture_format_BGRA8888&lt;br /&gt;
*GL_APPLE_rgb_422&lt;br /&gt;
*GL_EXT_debug_marker&lt;br /&gt;
 &lt;br /&gt;
''TODO: Sample of how to use/initalise OpenGL ES''&lt;br /&gt;
&lt;br /&gt;
=== OpenVG ===&lt;br /&gt;
The Raspberry Pi supports OpenVG 1.1 for hardware-accelerated two-dimensional vector and raster graphics. See the full specification [http://www.khronos.org/registry/vg/specs/openvg-1.1.pdf here] or [http://www.khronos.org/files/openvg-quick-reference-card.pdf the API quick reference card].&lt;br /&gt;
&lt;br /&gt;
==== Samples ====&lt;br /&gt;
* [http://docs.blackberry.com/en/developers/deliverables/17967/CS_Drawing_a_triangle_using_OpenVG_1241146_11.jsp Code sample: Drawing a triangle by using OpenVG] ''(Java implentation for RIM devices, however should be able to get a grasp on how it works and be able to port it to the Raspberry Pi)''&lt;br /&gt;
&lt;br /&gt;
=== OpenMAX ===&lt;br /&gt;
See [https://github.com/raspberrypi/firmware/tree/master/documentation/ilcomponents /documentation/ilcomponents] on GitHub firmware repository for official documentation.&lt;br /&gt;
&lt;br /&gt;
''TODO: Sample of how to use OpenMAX to decode audio/video/images, etc.''&lt;br /&gt;
&lt;br /&gt;
== Bindings for Other Programming Languages ==&lt;br /&gt;
'''Python'''&lt;br /&gt;
* [https://bitbucket.org/bryancole/rpi_vid_core/ RPi_Vid_Core] - ''python bindings of EGL, OpenGL ES, OpenVG and bcm_host for Raspberry Pi implemented using Cython''&lt;br /&gt;
&lt;br /&gt;
== Open Source Software compatible with the VideoCore APIs ==&lt;br /&gt;
* '''[https://github.com/huceke/omxplayer omxplayer]''' - ''a command line a/v player for the Raspberry Pi utilising the OpenMAX APIs and ffmpeg''&lt;br /&gt;
* '''[http://wiki.xbmc.org/index.php?title=Raspberry_Pi XBMC]''' - ''a media center, omxplayer's &amp;quot;big brother&amp;quot; ''&lt;br /&gt;
* '''[http://nccastaff.bournemouth.ac.uk/jmacey/GraphicsLib/piNGL/index.html piNGL]''' - ''port of the NGL graphics library to Raspberry Pi''&lt;br /&gt;
* '''[http://qt-project.org/wiki/Qt-RaspberryPi Qt on Pi]''' - ''Raspberry Pi port of the Qt toolkit''&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Template:Raspberry Pi}}&lt;br /&gt;
[[Category: RaspberryPi]]&lt;/div&gt;</summary>
		<author><name>Adammw</name></author>	</entry>

	<entry>
		<id>http://elinux.org/RPi_VideoCore_APIs</id>
		<title>RPi VideoCore APIs</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/RPi_VideoCore_APIs"/>
				<updated>2012-06-27T07:34:56Z</updated>
		
		<summary type="html">&lt;p&gt;Adammw: /* Built-in Sample Programs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:RPi_Software}}&lt;br /&gt;
&lt;br /&gt;
[[File:Raspberrypi_video_API_03.svg|500px|thumb|Source: http://elinux.org/images/b/be/Raspberrypi_video_API_03.svg]]&lt;br /&gt;
&lt;br /&gt;
The Raspberry Pi contains a Broadcom [http://en.wikipedia.org/wiki/Videocore VideoCore] IV GPU providing OpenGL ES 1.1, OpenGL ES 2.0, hardware-accelerated OpenVG 1.1, Open EGL, OpenMAX and 1080p30 H.264 high-profile decode. There are 24 GFLOPS of general purpose compute and a bunch of texture filtering and DMA infrastructure. Eben worked on the architecture team for this and the Raspberry Pi team are looking at how they can make some of the proprietary features available to application programmers. &lt;br /&gt;
&lt;br /&gt;
Currently C header files and libraries for many of the Broadcom APIs are located in &amp;lt;code&amp;gt;/opt/vc/include&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;/opt/vc/lib&amp;lt;/code&amp;gt; respectively, or available from [https://github.com/raspberrypi/firmware GitHub] within the same directory structure. Some documentation is contained within comments in the header files, as well as documentation for the OpenMAX IL components in the [https://github.com/raspberrypi/firmware/tree/master/documentation/ilcomponents documentation directory on Github], however it is severely lacking and difficult to understand in a general sense for people wanting to experiment with the device due to it being proprietary. As such, we encourage you to [http://elinux.org/index.php?title=RPi_VideoCore_APIs&amp;amp;action=edit edit this page] to help us build a much better open documentation.&lt;br /&gt;
&lt;br /&gt;
==Quirks==&lt;br /&gt;
&lt;br /&gt;
* The Raspberry Pi requires that the &amp;lt;code&amp;gt;bcm_host_init()&amp;lt;/code&amp;gt; function is called first before any GPU calls can be made.&lt;br /&gt;
* Before calling any of the vc_* functions, you need to initialise vcos and vchi, and make a vchi connection, before then calling the corresponding vc_*_init function for the part of the library you want to use: &amp;lt;code&amp;gt;vc_vchi_dispmanx_init&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;vc_vchi_tv_init&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;vc_vchi_cec_init&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;vc_vchi_gencmd_init&amp;lt;/code&amp;gt;.&amp;lt;br /&amp;gt;(See this [https://github.com/adammw/rpi-output-swapper/blob/master/video_swap.c#L152-169 sample code] which does initialisation for vc_tvservice_* APIs)&lt;br /&gt;
* &amp;lt;code&amp;gt;[[#graphics_get_display_size|graphics_get_display_size()]]&amp;lt;/code&amp;gt; is a broadcom-specific function&lt;br /&gt;
&lt;br /&gt;
== Built-in Sample Programs==&lt;br /&gt;
The Raspberry Pi comes with 7 sample programs and two helper libraries in the /opt/vc/src/hello_pi directory showing some of the system's capabilities and sample code. &lt;br /&gt;
===hello_video===&lt;br /&gt;
This sample decodes h264 video using the OpenMAX APIs and the ilclient library, and is distributed with a short scene of [http://www.bigbuckbunny.org/ Big Buck Bunny]&lt;br /&gt;
===hello_audio===&lt;br /&gt;
This sample plays a sine wave for ten seconds using the ??? APIs.&lt;br /&gt;
===hello_triangle===&lt;br /&gt;
This sample shows how to get a OpenGL ES context on the Raspberry Pi.&lt;br /&gt;
===ilclient helper library===&lt;br /&gt;
This library is described as:&lt;br /&gt;
&amp;lt;code&amp;gt;This API defines helper functions for writing IL clients.&lt;br /&gt;
 *&lt;br /&gt;
 * This file defines an IL client side library.  This is useful when&lt;br /&gt;
 * writing IL clients, since there tends to be much repeated and&lt;br /&gt;
 * common code across both single and multiple clients.  This library&lt;br /&gt;
 * seeks to remove that common code and abstract some of the&lt;br /&gt;
 * interactions with components.  There is a wrapper around a&lt;br /&gt;
 * component and tunnel, and some operations can be done on lists of&lt;br /&gt;
 * these.  The callbacks from components are handled, and specific&lt;br /&gt;
 * events can be checked or waited for.&lt;br /&gt;
 */&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Libraries ==&lt;br /&gt;
=== libbcm_host ===&lt;br /&gt;
bcm_host is the Broadcom hardware interface library.&lt;br /&gt;
&lt;br /&gt;
=== vc_dispmanx_*===&lt;br /&gt;
Dispmanx is a windowing system in the process of being deprecated in favour of [http://www.khronos.org/openwf/ OpenWF] (or similar), however dispmanx is still used in all API demos and it's replacement may not yet be available. &amp;lt;ref&amp;gt;http://www.raspberrypi.org/phpBB3/viewtopic.php?t=5621&amp;amp;p=77981&amp;lt;/ref&amp;gt;(confirmation required?)&lt;br /&gt;
=== vc_tvservice_* ===&lt;br /&gt;
These APIs allow controlling the HDMI and SDTV video outputs of the Raspberry Pi, as well as allowing the user to query the supported HDMI resolutions and audio formats and turn on/off copy protection. The Raspberry Pi can only have one output active at a time - turning on the HDMI automatically turns off the SDTV and vice-versa. However either can be turned off using the &amp;lt;code&amp;gt;vc_tv_power_off()&amp;lt;/code&amp;gt; function.&lt;br /&gt;
&lt;br /&gt;
The header file [https://github.com/raspberrypi/firmware/blob/master/opt/vc/include/interface/vmcs_host/vc_tvservice.h vc_tvservice.h] documents the functions quite well via comments above each prototype function, however before any of these functions will succeed you must initialise the connection to the host API like so:&lt;br /&gt;
&lt;br /&gt;
 void tvservice_init() {&lt;br /&gt;
    VCHI_INSTANCE_T vchi_instance;&lt;br /&gt;
    VCHI_CONNECTION_T *vchi_connections;&lt;br /&gt;
    &lt;br /&gt;
    // initialise bcm_host&lt;br /&gt;
    bcm_host_init();&lt;br /&gt;
    &lt;br /&gt;
    // initialise vcos/vchi&lt;br /&gt;
    vcos_init();&lt;br /&gt;
    if (vchi_initialise(&amp;amp;vchi_instance) != VCHIQ_SUCCESS) {&lt;br /&gt;
        fprintf(stderr, &amp;quot;failed to open vchiq instance\n&amp;quot;);&lt;br /&gt;
        exit(-2);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    // create a vchi connection&lt;br /&gt;
    if ( vchi_connect( NULL, 0, vchi_instance ) != 0) {&lt;br /&gt;
        fprintf(stderr, &amp;quot;failed to connect to VCHI\n&amp;quot;);&lt;br /&gt;
        exit(-3);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    // connect to tvservice&lt;br /&gt;
    if ( vc_vchi_tv_init( vchi_instance, &amp;amp;vchi_connections, 1) != 0) {&lt;br /&gt;
        fprintf(stderr, &amp;quot;failed to connect to tvservice\n&amp;quot;);&lt;br /&gt;
        exit(-4);&lt;br /&gt;
    }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
''TODO: Deinitialization''&lt;br /&gt;
==== Samples ====&lt;br /&gt;
* [https://github.com/adammw/rpi-output-swapper rpi-output-swapper] Uses tvservice apis to power on HDMI or SDTV display in specific or preferred mode.&lt;br /&gt;
&lt;br /&gt;
=== vc_cec_* ===&lt;br /&gt;
''TODO''&lt;br /&gt;
&lt;br /&gt;
=== vc_gencmd_* ===&lt;br /&gt;
''TODO''&lt;br /&gt;
&lt;br /&gt;
=== EGL ===&lt;br /&gt;
[http://www.khronos.org/egl/ EGL (Native Platform Graphics Interface)] is an interface between Khronos rendering APIs such as OpenGL ES or OpenVG and the underlying native platform. The Raspberry Pi supports [http://www.khronos.org/registry/egl/specs/eglspec.1.4.20110406.pdf EGL Version 1.4] and the following EGL extensions (links are to EGL registry documentation):&amp;lt;ref name=&amp;quot;egl-info&amp;quot;&amp;gt;eglinfo, http://www.raspberrypi.org/phpBB3/viewtopic.php?p=35942#p35942 , http://www.raspberrypi.org/phpBB3/viewtopic.php?p=36318#p36318&amp;lt;/ref&amp;gt;&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_image.txt EGL_KHR_image]&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_image_base.txt EGL_KHR_image_base]&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_image_pixmap.txt EGL_KHR_image_pixmap]&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_vg_parent_image.txt EGL_KHR_vg_parent_image]&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_gl_image.txt EGL_KHR_gl_texture_2D_image]&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_gl_image.txt EGL_KHR_gl_texture_cubemap_image]&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_lock_surface.txt EGL_KHR_lock_surface]&lt;br /&gt;
&lt;br /&gt;
==== Samples====&lt;br /&gt;
&lt;br /&gt;
See [http://jonmacey.blogspot.com.au/2012/05/getting-started-with-egl-on-raspberry.html Getting Started with EGL] post by Jon Macey. &lt;br /&gt;
Extended documentation available in the [http://www.khronos.org/registry/egl/specs/eglspec.1.4.20110406.pdf EGL Version 1.4 Specification] and Simple Reference available in the [http://www.khronos.org/files/egl-1-4-quick-reference-card.pdf EGL 1.4 API Quick Reference Card].&lt;br /&gt;
&lt;br /&gt;
==== Function Documentation====&lt;br /&gt;
====={{anchor|graphics_get_display_size}}&amp;lt;code&amp;gt;int32_t graphics_get_display_size( const uint16_t display_number, uint32_t *width, uint32_t *height);&amp;lt;/code&amp;gt;=====&lt;br /&gt;
&lt;br /&gt;
This function allows you to get the size of the display, and is often used in creating an EGL Surface. width and height are pointers that you pass in to where you want the response values to be written to, display number 0 is usually used for the Raspberry Pi. return value of &amp;gt;= 0 indicates success, &amp;lt;0 indicates failure.&lt;br /&gt;
&lt;br /&gt;
This function is implemented in libbcm_host, and the implementation has been made [https://github.com/raspberrypi/firmware/issues/14#issuecomment-5652185 public] showing that it internally calls the vc_dispmanx_display_get_info function to get the width and height of the current mode.&lt;br /&gt;
&lt;br /&gt;
Bugs present in early versions of the firmware caused this function to always return 1920x1080, however this can easily be fixed by updating the firmware with [https://github.com/Hexxeh/rpi-update Hexxeh's rpi-update] (see the [[R-Pi_Troubleshooting#Updating_firmware|Updating firmware]] page for help).&amp;lt;ref&amp;gt;http://www.raspberrypi.org/phpBB3/viewtopic.php?f=68&amp;amp;t=8252&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;https://github.com/raspberrypi/firmware/issues/14&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== OpenGL ES ===&lt;br /&gt;
The Raspberry Pi supports OpenGL ES 2.0 with the following extensions: &amp;lt;ref name=&amp;quot;egl-info&amp;quot; /&amp;gt;&lt;br /&gt;
*GL_OES_compressed_ETC1_RGB8_texture&lt;br /&gt;
*GL_OES_compressed_paletted_texture&lt;br /&gt;
*GL_OES_texture_npot GL_OES_depth24&lt;br /&gt;
*GL_OES_vertex_half_float&lt;br /&gt;
*GL_OES_EGL_image&lt;br /&gt;
*GL_OES_EGL_image_external&lt;br /&gt;
*GL_EXT_discard_framebuffer&lt;br /&gt;
*GL_OES_rgb8_rgba8&lt;br /&gt;
*GL_OES_depth32&lt;br /&gt;
*GL_OES_mapbuffer&lt;br /&gt;
*GL_EXT_texture_format_BGRA8888&lt;br /&gt;
*GL_APPLE_rgb_422&lt;br /&gt;
*GL_EXT_debug_marker&lt;br /&gt;
 &lt;br /&gt;
''TODO: Sample of how to use/initalise OpenGL ES''&lt;br /&gt;
&lt;br /&gt;
=== OpenVG ===&lt;br /&gt;
The Raspberry Pi supports OpenVG 1.1 for hardware-accelerated two-dimensional vector and raster graphics. See the full specification [http://www.khronos.org/registry/vg/specs/openvg-1.1.pdf here] or [http://www.khronos.org/files/openvg-quick-reference-card.pdf the API quick reference card].&lt;br /&gt;
&lt;br /&gt;
==== Samples ====&lt;br /&gt;
* [http://docs.blackberry.com/en/developers/deliverables/17967/CS_Drawing_a_triangle_using_OpenVG_1241146_11.jsp Code sample: Drawing a triangle by using OpenVG] ''(Java implentation for RIM devices, however should be able to get a grasp on how it works and be able to port it to the Raspberry Pi)''&lt;br /&gt;
&lt;br /&gt;
=== OpenMAX ===&lt;br /&gt;
See [https://github.com/raspberrypi/firmware/tree/master/documentation/ilcomponents /documentation/ilcomponents] on GitHub firmware repository for official documentation.&lt;br /&gt;
&lt;br /&gt;
''TODO: Sample of how to use OpenMAX to decode audio/video/images, etc.''&lt;br /&gt;
&lt;br /&gt;
== Bindings for Other Programming Languages ==&lt;br /&gt;
'''Python'''&lt;br /&gt;
* [https://bitbucket.org/bryancole/rpi_vid_core/ RPi_Vid_Core] - ''python bindings of EGL, OpenGL ES, OpenVG and bcm_host for Raspberry Pi implemented using Cython''&lt;br /&gt;
&lt;br /&gt;
== Open Source Software compatible with the VideoCore APIs ==&lt;br /&gt;
* '''[https://github.com/huceke/omxplayer omxplayer]''' - ''a command line a/v player for the Raspberry Pi utilising the OpenMAX APIs and ffmpeg''&lt;br /&gt;
* '''[http://wiki.xbmc.org/index.php?title=Raspberry_Pi XBMC]''' - ''a media center, omxplayer's &amp;quot;big brother&amp;quot; ''&lt;br /&gt;
* '''[http://nccastaff.bournemouth.ac.uk/jmacey/GraphicsLib/piNGL/index.html piNGL]''' - ''port of the NGL graphics library to Raspberry Pi''&lt;br /&gt;
* '''[http://qt-project.org/wiki/Qt-RaspberryPi Qt on Pi]''' - ''Raspberry Pi port of the Qt toolkit''&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Template:Raspberry Pi}}&lt;br /&gt;
[[Category: RaspberryPi]]&lt;/div&gt;</summary>
		<author><name>Adammw</name></author>	</entry>

	<entry>
		<id>http://elinux.org/RPi_VideoCore_APIs</id>
		<title>RPi VideoCore APIs</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/RPi_VideoCore_APIs"/>
				<updated>2012-06-25T00:57:37Z</updated>
		
		<summary type="html">&lt;p&gt;Adammw: /* vc_tvservice_* */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:RPi_Software}}&lt;br /&gt;
&lt;br /&gt;
[[File:Raspberrypi_video_API_03.svg|500px|thumb|Source: http://elinux.org/images/b/be/Raspberrypi_video_API_03.svg]]&lt;br /&gt;
&lt;br /&gt;
The Raspberry Pi contains a Broadcom [http://en.wikipedia.org/wiki/Videocore VideoCore] IV GPU providing OpenGL ES 1.1, OpenGL ES 2.0, hardware-accelerated OpenVG 1.1, Open EGL, OpenMAX and 1080p30 H.264 high-profile decode. There are 24 GFLOPS of general purpose compute and a bunch of texture filtering and DMA infrastructure. Eben worked on the architecture team for this and the Raspberry Pi team are looking at how they can make some of the proprietary features available to application programmers. &lt;br /&gt;
&lt;br /&gt;
Currently C header files and libraries for many of the Broadcom APIs are located in &amp;lt;code&amp;gt;/opt/vc/include&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;/opt/vc/lib&amp;lt;/code&amp;gt; respectively, or available from [https://github.com/raspberrypi/firmware GitHub] within the same directory structure. Some documentation is contained within comments in the header files, as well as documentation for the OpenMAX IL components in the [https://github.com/raspberrypi/firmware/tree/master/documentation/ilcomponents documentation directory on Github], however it is severely lacking and difficult to understand in a general sense for people wanting to experiment with the device due to it being proprietary. As such, we encourage you to [http://elinux.org/index.php?title=RPi_VideoCore_APIs&amp;amp;action=edit edit this page] to help us build a much better open documentation.&lt;br /&gt;
&lt;br /&gt;
==Quirks==&lt;br /&gt;
&lt;br /&gt;
* The Raspberry Pi requires that the &amp;lt;code&amp;gt;bcm_host_init()&amp;lt;/code&amp;gt; function is called first before any GPU calls can be made.&lt;br /&gt;
* Before calling any of the vc_* functions, you need to initialise vcos and vchi, and make a vchi connection, before then calling the corresponding vc_*_init function for the part of the library you want to use: &amp;lt;code&amp;gt;vc_vchi_dispmanx_init&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;vc_vchi_tv_init&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;vc_vchi_cec_init&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;vc_vchi_gencmd_init&amp;lt;/code&amp;gt;.&amp;lt;br /&amp;gt;(See this [https://github.com/adammw/rpi-output-swapper/blob/master/video_swap.c#L152-169 sample code] which does initialisation for vc_tvservice_* APIs)&lt;br /&gt;
* &amp;lt;code&amp;gt;[[#graphics_get_display_size|graphics_get_display_size()]]&amp;lt;/code&amp;gt; is a broadcom-specific function&lt;br /&gt;
&lt;br /&gt;
== Built-in Sample Programs==&lt;br /&gt;
The Raspberry Pi comes with 7 sample programs and two helper libraries in the /opt/vc/src/hello_pi directory showing some of the system's capabilities and sample code. &lt;br /&gt;
===hello_video===&lt;br /&gt;
This sample decodes h264 video using the OpenMAX APIs and the ilclient library, and is distributed with a short scene of [http://www.bigbuckbunny.org/ Big Buck Bunny]&lt;br /&gt;
===ilclient helper library===&lt;br /&gt;
This library is described as:&lt;br /&gt;
&amp;lt;code&amp;gt;This API defines helper functions for writing IL clients.&lt;br /&gt;
 *&lt;br /&gt;
 * This file defines an IL client side library.  This is useful when&lt;br /&gt;
 * writing IL clients, since there tends to be much repeated and&lt;br /&gt;
 * common code across both single and multiple clients.  This library&lt;br /&gt;
 * seeks to remove that common code and abstract some of the&lt;br /&gt;
 * interactions with components.  There is a wrapper around a&lt;br /&gt;
 * component and tunnel, and some operations can be done on lists of&lt;br /&gt;
 * these.  The callbacks from components are handled, and specific&lt;br /&gt;
 * events can be checked or waited for.&lt;br /&gt;
 */&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Libraries ==&lt;br /&gt;
=== libbcm_host ===&lt;br /&gt;
bcm_host is the Broadcom hardware interface library.&lt;br /&gt;
&lt;br /&gt;
=== vc_dispmanx_*===&lt;br /&gt;
Dispmanx is a windowing system in the process of being deprecated in favour of [http://www.khronos.org/openwf/ OpenWF] (or similar), however dispmanx is still used in all API demos and it's replacement may not yet be available. &amp;lt;ref&amp;gt;http://www.raspberrypi.org/phpBB3/viewtopic.php?t=5621&amp;amp;p=77981&amp;lt;/ref&amp;gt;(confirmation required?)&lt;br /&gt;
=== vc_tvservice_* ===&lt;br /&gt;
These APIs allow controlling the HDMI and SDTV video outputs of the Raspberry Pi, as well as allowing the user to query the supported HDMI resolutions and audio formats and turn on/off copy protection. The Raspberry Pi can only have one output active at a time - turning on the HDMI automatically turns off the SDTV and vice-versa. However either can be turned off using the &amp;lt;code&amp;gt;vc_tv_power_off()&amp;lt;/code&amp;gt; function.&lt;br /&gt;
&lt;br /&gt;
The header file [https://github.com/raspberrypi/firmware/blob/master/opt/vc/include/interface/vmcs_host/vc_tvservice.h vc_tvservice.h] documents the functions quite well via comments above each prototype function, however before any of these functions will succeed you must initialise the connection to the host API like so:&lt;br /&gt;
&lt;br /&gt;
 void tvservice_init() {&lt;br /&gt;
    VCHI_INSTANCE_T vchi_instance;&lt;br /&gt;
    VCHI_CONNECTION_T *vchi_connections;&lt;br /&gt;
    &lt;br /&gt;
    // initialise bcm_host&lt;br /&gt;
    bcm_host_init();&lt;br /&gt;
    &lt;br /&gt;
    // initialise vcos/vchi&lt;br /&gt;
    vcos_init();&lt;br /&gt;
    if (vchi_initialise(&amp;amp;vchi_instance) != VCHIQ_SUCCESS) {&lt;br /&gt;
        fprintf(stderr, &amp;quot;failed to open vchiq instance\n&amp;quot;);&lt;br /&gt;
        exit(-2);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    // create a vchi connection&lt;br /&gt;
    if ( vchi_connect( NULL, 0, vchi_instance ) != 0) {&lt;br /&gt;
        fprintf(stderr, &amp;quot;failed to connect to VCHI\n&amp;quot;);&lt;br /&gt;
        exit(-3);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    // connect to tvservice&lt;br /&gt;
    if ( vc_vchi_tv_init( vchi_instance, &amp;amp;vchi_connections, 1) != 0) {&lt;br /&gt;
        fprintf(stderr, &amp;quot;failed to connect to tvservice\n&amp;quot;);&lt;br /&gt;
        exit(-4);&lt;br /&gt;
    }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
''TODO: Deinitialization''&lt;br /&gt;
==== Samples ====&lt;br /&gt;
* [https://github.com/adammw/rpi-output-swapper rpi-output-swapper] Uses tvservice apis to power on HDMI or SDTV display in specific or preferred mode.&lt;br /&gt;
&lt;br /&gt;
=== vc_cec_* ===&lt;br /&gt;
''TODO''&lt;br /&gt;
&lt;br /&gt;
=== vc_gencmd_* ===&lt;br /&gt;
''TODO''&lt;br /&gt;
&lt;br /&gt;
=== EGL ===&lt;br /&gt;
[http://www.khronos.org/egl/ EGL (Native Platform Graphics Interface)] is an interface between Khronos rendering APIs such as OpenGL ES or OpenVG and the underlying native platform. The Raspberry Pi supports [http://www.khronos.org/registry/egl/specs/eglspec.1.4.20110406.pdf EGL Version 1.4] and the following EGL extensions (links are to EGL registry documentation):&amp;lt;ref name=&amp;quot;egl-info&amp;quot;&amp;gt;eglinfo, http://www.raspberrypi.org/phpBB3/viewtopic.php?p=35942#p35942 , http://www.raspberrypi.org/phpBB3/viewtopic.php?p=36318#p36318&amp;lt;/ref&amp;gt;&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_image.txt EGL_KHR_image]&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_image_base.txt EGL_KHR_image_base]&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_image_pixmap.txt EGL_KHR_image_pixmap]&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_vg_parent_image.txt EGL_KHR_vg_parent_image]&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_gl_image.txt EGL_KHR_gl_texture_2D_image]&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_gl_image.txt EGL_KHR_gl_texture_cubemap_image]&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_lock_surface.txt EGL_KHR_lock_surface]&lt;br /&gt;
&lt;br /&gt;
==== Samples====&lt;br /&gt;
&lt;br /&gt;
See [http://jonmacey.blogspot.com.au/2012/05/getting-started-with-egl-on-raspberry.html Getting Started with EGL] post by Jon Macey. &lt;br /&gt;
Extended documentation available in the [http://www.khronos.org/registry/egl/specs/eglspec.1.4.20110406.pdf EGL Version 1.4 Specification] and Simple Reference available in the [http://www.khronos.org/files/egl-1-4-quick-reference-card.pdf EGL 1.4 API Quick Reference Card].&lt;br /&gt;
&lt;br /&gt;
==== Function Documentation====&lt;br /&gt;
====={{anchor|graphics_get_display_size}}&amp;lt;code&amp;gt;int32_t graphics_get_display_size( const uint16_t display_number, uint32_t *width, uint32_t *height);&amp;lt;/code&amp;gt;=====&lt;br /&gt;
&lt;br /&gt;
This function allows you to get the size of the display, and is often used in creating an EGL Surface. width and height are pointers that you pass in to where you want the response values to be written to, display number 0 is usually used for the Raspberry Pi. return value of &amp;gt;= 0 indicates success, &amp;lt;0 indicates failure.&lt;br /&gt;
&lt;br /&gt;
This function is implemented in libbcm_host, and the implementation has been made [https://github.com/raspberrypi/firmware/issues/14#issuecomment-5652185 public] showing that it internally calls the vc_dispmanx_display_get_info function to get the width and height of the current mode.&lt;br /&gt;
&lt;br /&gt;
Bugs present in early versions of the firmware caused this function to always return 1920x1080, however this can easily be fixed by updating the firmware with [https://github.com/Hexxeh/rpi-update Hexxeh's rpi-update] (see the [[R-Pi_Troubleshooting#Updating_firmware|Updating firmware]] page for help).&amp;lt;ref&amp;gt;http://www.raspberrypi.org/phpBB3/viewtopic.php?f=68&amp;amp;t=8252&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;https://github.com/raspberrypi/firmware/issues/14&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== OpenGL ES ===&lt;br /&gt;
The Raspberry Pi supports OpenGL ES 2.0 with the following extensions: &amp;lt;ref name=&amp;quot;egl-info&amp;quot; /&amp;gt;&lt;br /&gt;
*GL_OES_compressed_ETC1_RGB8_texture&lt;br /&gt;
*GL_OES_compressed_paletted_texture&lt;br /&gt;
*GL_OES_texture_npot GL_OES_depth24&lt;br /&gt;
*GL_OES_vertex_half_float&lt;br /&gt;
*GL_OES_EGL_image&lt;br /&gt;
*GL_OES_EGL_image_external&lt;br /&gt;
*GL_EXT_discard_framebuffer&lt;br /&gt;
*GL_OES_rgb8_rgba8&lt;br /&gt;
*GL_OES_depth32&lt;br /&gt;
*GL_OES_mapbuffer&lt;br /&gt;
*GL_EXT_texture_format_BGRA8888&lt;br /&gt;
*GL_APPLE_rgb_422&lt;br /&gt;
*GL_EXT_debug_marker&lt;br /&gt;
 &lt;br /&gt;
''TODO: Sample of how to use/initalise OpenGL ES''&lt;br /&gt;
&lt;br /&gt;
=== OpenVG ===&lt;br /&gt;
The Raspberry Pi supports OpenVG 1.1 for hardware-accelerated two-dimensional vector and raster graphics. See the full specification [http://www.khronos.org/registry/vg/specs/openvg-1.1.pdf here] or [http://www.khronos.org/files/openvg-quick-reference-card.pdf the API quick reference card].&lt;br /&gt;
&lt;br /&gt;
==== Samples ====&lt;br /&gt;
* [http://docs.blackberry.com/en/developers/deliverables/17967/CS_Drawing_a_triangle_using_OpenVG_1241146_11.jsp Code sample: Drawing a triangle by using OpenVG] ''(Java implentation for RIM devices, however should be able to get a grasp on how it works and be able to port it to the Raspberry Pi)''&lt;br /&gt;
&lt;br /&gt;
=== OpenMAX ===&lt;br /&gt;
See [https://github.com/raspberrypi/firmware/tree/master/documentation/ilcomponents /documentation/ilcomponents] on GitHub firmware repository for official documentation.&lt;br /&gt;
&lt;br /&gt;
''TODO: Sample of how to use OpenMAX to decode audio/video/images, etc.''&lt;br /&gt;
&lt;br /&gt;
== Bindings for Other Programming Languages ==&lt;br /&gt;
'''Python'''&lt;br /&gt;
* [https://bitbucket.org/bryancole/rpi_vid_core/ RPi_Vid_Core] - ''python bindings of EGL, OpenGL ES, OpenVG and bcm_host for Raspberry Pi implemented using Cython''&lt;br /&gt;
&lt;br /&gt;
== Open Source Software compatible with the VideoCore APIs ==&lt;br /&gt;
* '''[https://github.com/huceke/omxplayer omxplayer]''' - ''a command line a/v player for the Raspberry Pi utilising the OpenMAX APIs and ffmpeg''&lt;br /&gt;
* '''[http://wiki.xbmc.org/index.php?title=Raspberry_Pi XBMC]''' - ''a media center, omxplayer's &amp;quot;big brother&amp;quot; ''&lt;br /&gt;
* '''[http://nccastaff.bournemouth.ac.uk/jmacey/GraphicsLib/piNGL/index.html piNGL]''' - ''port of the NGL graphics library to Raspberry Pi''&lt;br /&gt;
* '''[http://qt-project.org/wiki/Qt-RaspberryPi Qt on Pi]''' - ''Raspberry Pi port of the Qt toolkit''&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Template:Raspberry Pi}}&lt;br /&gt;
[[Category: RaspberryPi]]&lt;/div&gt;</summary>
		<author><name>Adammw</name></author>	</entry>

	<entry>
		<id>http://elinux.org/RPi_VideoCore_APIs</id>
		<title>RPi VideoCore APIs</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/RPi_VideoCore_APIs"/>
				<updated>2012-06-25T00:55:26Z</updated>
		
		<summary type="html">&lt;p&gt;Adammw: Move image&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:RPi_Software}}&lt;br /&gt;
&lt;br /&gt;
[[File:Raspberrypi_video_API_03.svg|500px|thumb|Source: http://elinux.org/images/b/be/Raspberrypi_video_API_03.svg]]&lt;br /&gt;
&lt;br /&gt;
The Raspberry Pi contains a Broadcom [http://en.wikipedia.org/wiki/Videocore VideoCore] IV GPU providing OpenGL ES 1.1, OpenGL ES 2.0, hardware-accelerated OpenVG 1.1, Open EGL, OpenMAX and 1080p30 H.264 high-profile decode. There are 24 GFLOPS of general purpose compute and a bunch of texture filtering and DMA infrastructure. Eben worked on the architecture team for this and the Raspberry Pi team are looking at how they can make some of the proprietary features available to application programmers. &lt;br /&gt;
&lt;br /&gt;
Currently C header files and libraries for many of the Broadcom APIs are located in &amp;lt;code&amp;gt;/opt/vc/include&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;/opt/vc/lib&amp;lt;/code&amp;gt; respectively, or available from [https://github.com/raspberrypi/firmware GitHub] within the same directory structure. Some documentation is contained within comments in the header files, as well as documentation for the OpenMAX IL components in the [https://github.com/raspberrypi/firmware/tree/master/documentation/ilcomponents documentation directory on Github], however it is severely lacking and difficult to understand in a general sense for people wanting to experiment with the device due to it being proprietary. As such, we encourage you to [http://elinux.org/index.php?title=RPi_VideoCore_APIs&amp;amp;action=edit edit this page] to help us build a much better open documentation.&lt;br /&gt;
&lt;br /&gt;
==Quirks==&lt;br /&gt;
&lt;br /&gt;
* The Raspberry Pi requires that the &amp;lt;code&amp;gt;bcm_host_init()&amp;lt;/code&amp;gt; function is called first before any GPU calls can be made.&lt;br /&gt;
* Before calling any of the vc_* functions, you need to initialise vcos and vchi, and make a vchi connection, before then calling the corresponding vc_*_init function for the part of the library you want to use: &amp;lt;code&amp;gt;vc_vchi_dispmanx_init&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;vc_vchi_tv_init&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;vc_vchi_cec_init&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;vc_vchi_gencmd_init&amp;lt;/code&amp;gt;.&amp;lt;br /&amp;gt;(See this [https://github.com/adammw/rpi-output-swapper/blob/master/video_swap.c#L152-169 sample code] which does initialisation for vc_tvservice_* APIs)&lt;br /&gt;
* &amp;lt;code&amp;gt;[[#graphics_get_display_size|graphics_get_display_size()]]&amp;lt;/code&amp;gt; is a broadcom-specific function&lt;br /&gt;
&lt;br /&gt;
== Built-in Sample Programs==&lt;br /&gt;
The Raspberry Pi comes with 7 sample programs and two helper libraries in the /opt/vc/src/hello_pi directory showing some of the system's capabilities and sample code. &lt;br /&gt;
===hello_video===&lt;br /&gt;
This sample decodes h264 video using the OpenMAX APIs and the ilclient library, and is distributed with a short scene of [http://www.bigbuckbunny.org/ Big Buck Bunny]&lt;br /&gt;
===ilclient helper library===&lt;br /&gt;
This library is described as:&lt;br /&gt;
&amp;lt;code&amp;gt;This API defines helper functions for writing IL clients.&lt;br /&gt;
 *&lt;br /&gt;
 * This file defines an IL client side library.  This is useful when&lt;br /&gt;
 * writing IL clients, since there tends to be much repeated and&lt;br /&gt;
 * common code across both single and multiple clients.  This library&lt;br /&gt;
 * seeks to remove that common code and abstract some of the&lt;br /&gt;
 * interactions with components.  There is a wrapper around a&lt;br /&gt;
 * component and tunnel, and some operations can be done on lists of&lt;br /&gt;
 * these.  The callbacks from components are handled, and specific&lt;br /&gt;
 * events can be checked or waited for.&lt;br /&gt;
 */&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Libraries ==&lt;br /&gt;
=== libbcm_host ===&lt;br /&gt;
bcm_host is the Broadcom hardware interface library.&lt;br /&gt;
&lt;br /&gt;
=== vc_dispmanx_*===&lt;br /&gt;
Dispmanx is a windowing system in the process of being deprecated in favour of [http://www.khronos.org/openwf/ OpenWF] (or similar), however dispmanx is still used in all API demos and it's replacement may not yet be available. &amp;lt;ref&amp;gt;http://www.raspberrypi.org/phpBB3/viewtopic.php?t=5621&amp;amp;p=77981&amp;lt;/ref&amp;gt;(confirmation required?)&lt;br /&gt;
=== vc_tvservice_* ===&lt;br /&gt;
These APIs allow controlling the HDMI and SDTV video outputs of the Raspberry Pi, as well as allowing the user to query the supported HDMI resolutions and audio formats and turn on/off copy protection. The Raspberry Pi can only have one output active at a time - turning on the HDMI automatically turns off the SDTV and vice-versa. However either can be turned off using the &amp;lt;code&amp;gt;vc_tv_power_off()&amp;lt;/code&amp;gt; function.&lt;br /&gt;
&lt;br /&gt;
The header file [https://github.com/raspberrypi/firmware/blob/master/opt/vc/include/interface/vmcs_host/vc_tvservice.h vc_tvservice.h] documents the functions quite well via comments above each prototype function, however before any of these functions will succeed you must initialise the connection to the host API like so:&lt;br /&gt;
&lt;br /&gt;
 void tvservice_init() {&lt;br /&gt;
    VCHI_INSTANCE_T vchi_instance;&lt;br /&gt;
    VCHI_CONNECTION_T *vchi_connections;&lt;br /&gt;
    &lt;br /&gt;
    // initialise bcm_host&lt;br /&gt;
    bcm_host_init();&lt;br /&gt;
    &lt;br /&gt;
    // initialise vcos/vchi&lt;br /&gt;
    vcos_init();&lt;br /&gt;
    if (vchi_initialise(&amp;amp;vchi_instance) != VCHIQ_SUCCESS) {&lt;br /&gt;
        fprintf(stderr, &amp;quot;failed to open vchiq instance\n&amp;quot;);&lt;br /&gt;
        exit(-2);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    // create a vchi connection&lt;br /&gt;
    if ( vchi_connect( NULL, 0, vchi_instance ) != 0) {&lt;br /&gt;
        fprintf(stderr, &amp;quot;failed to connect to VCHI\n&amp;quot;);&lt;br /&gt;
        exit(-3);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    // connect to tvservice&lt;br /&gt;
    if ( vc_vchi_tv_init( vchi_instance, &amp;amp;vchi_connections, 1) != 0) {&lt;br /&gt;
        fprintf(stderr, &amp;quot;failed to connect to tvservice\n&amp;quot;);&lt;br /&gt;
        exit(-4);&lt;br /&gt;
    }&lt;br /&gt;
 }&lt;br /&gt;
==== Samples ====&lt;br /&gt;
* [https://github.com/adammw/rpi-output-swapper rpi-output-swapper] Uses tvservice apis to power on HDMI or SDTV display in specific or preferred mode.&lt;br /&gt;
&lt;br /&gt;
=== vc_cec_* ===&lt;br /&gt;
''TODO''&lt;br /&gt;
&lt;br /&gt;
=== vc_gencmd_* ===&lt;br /&gt;
''TODO''&lt;br /&gt;
&lt;br /&gt;
=== EGL ===&lt;br /&gt;
[http://www.khronos.org/egl/ EGL (Native Platform Graphics Interface)] is an interface between Khronos rendering APIs such as OpenGL ES or OpenVG and the underlying native platform. The Raspberry Pi supports [http://www.khronos.org/registry/egl/specs/eglspec.1.4.20110406.pdf EGL Version 1.4] and the following EGL extensions (links are to EGL registry documentation):&amp;lt;ref name=&amp;quot;egl-info&amp;quot;&amp;gt;eglinfo, http://www.raspberrypi.org/phpBB3/viewtopic.php?p=35942#p35942 , http://www.raspberrypi.org/phpBB3/viewtopic.php?p=36318#p36318&amp;lt;/ref&amp;gt;&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_image.txt EGL_KHR_image]&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_image_base.txt EGL_KHR_image_base]&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_image_pixmap.txt EGL_KHR_image_pixmap]&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_vg_parent_image.txt EGL_KHR_vg_parent_image]&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_gl_image.txt EGL_KHR_gl_texture_2D_image]&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_gl_image.txt EGL_KHR_gl_texture_cubemap_image]&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_lock_surface.txt EGL_KHR_lock_surface]&lt;br /&gt;
&lt;br /&gt;
==== Samples====&lt;br /&gt;
&lt;br /&gt;
See [http://jonmacey.blogspot.com.au/2012/05/getting-started-with-egl-on-raspberry.html Getting Started with EGL] post by Jon Macey. &lt;br /&gt;
Extended documentation available in the [http://www.khronos.org/registry/egl/specs/eglspec.1.4.20110406.pdf EGL Version 1.4 Specification] and Simple Reference available in the [http://www.khronos.org/files/egl-1-4-quick-reference-card.pdf EGL 1.4 API Quick Reference Card].&lt;br /&gt;
&lt;br /&gt;
==== Function Documentation====&lt;br /&gt;
====={{anchor|graphics_get_display_size}}&amp;lt;code&amp;gt;int32_t graphics_get_display_size( const uint16_t display_number, uint32_t *width, uint32_t *height);&amp;lt;/code&amp;gt;=====&lt;br /&gt;
&lt;br /&gt;
This function allows you to get the size of the display, and is often used in creating an EGL Surface. width and height are pointers that you pass in to where you want the response values to be written to, display number 0 is usually used for the Raspberry Pi. return value of &amp;gt;= 0 indicates success, &amp;lt;0 indicates failure.&lt;br /&gt;
&lt;br /&gt;
This function is implemented in libbcm_host, and the implementation has been made [https://github.com/raspberrypi/firmware/issues/14#issuecomment-5652185 public] showing that it internally calls the vc_dispmanx_display_get_info function to get the width and height of the current mode.&lt;br /&gt;
&lt;br /&gt;
Bugs present in early versions of the firmware caused this function to always return 1920x1080, however this can easily be fixed by updating the firmware with [https://github.com/Hexxeh/rpi-update Hexxeh's rpi-update] (see the [[R-Pi_Troubleshooting#Updating_firmware|Updating firmware]] page for help).&amp;lt;ref&amp;gt;http://www.raspberrypi.org/phpBB3/viewtopic.php?f=68&amp;amp;t=8252&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;https://github.com/raspberrypi/firmware/issues/14&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== OpenGL ES ===&lt;br /&gt;
The Raspberry Pi supports OpenGL ES 2.0 with the following extensions: &amp;lt;ref name=&amp;quot;egl-info&amp;quot; /&amp;gt;&lt;br /&gt;
*GL_OES_compressed_ETC1_RGB8_texture&lt;br /&gt;
*GL_OES_compressed_paletted_texture&lt;br /&gt;
*GL_OES_texture_npot GL_OES_depth24&lt;br /&gt;
*GL_OES_vertex_half_float&lt;br /&gt;
*GL_OES_EGL_image&lt;br /&gt;
*GL_OES_EGL_image_external&lt;br /&gt;
*GL_EXT_discard_framebuffer&lt;br /&gt;
*GL_OES_rgb8_rgba8&lt;br /&gt;
*GL_OES_depth32&lt;br /&gt;
*GL_OES_mapbuffer&lt;br /&gt;
*GL_EXT_texture_format_BGRA8888&lt;br /&gt;
*GL_APPLE_rgb_422&lt;br /&gt;
*GL_EXT_debug_marker&lt;br /&gt;
 &lt;br /&gt;
''TODO: Sample of how to use/initalise OpenGL ES''&lt;br /&gt;
&lt;br /&gt;
=== OpenVG ===&lt;br /&gt;
The Raspberry Pi supports OpenVG 1.1 for hardware-accelerated two-dimensional vector and raster graphics. See the full specification [http://www.khronos.org/registry/vg/specs/openvg-1.1.pdf here] or [http://www.khronos.org/files/openvg-quick-reference-card.pdf the API quick reference card].&lt;br /&gt;
&lt;br /&gt;
==== Samples ====&lt;br /&gt;
* [http://docs.blackberry.com/en/developers/deliverables/17967/CS_Drawing_a_triangle_using_OpenVG_1241146_11.jsp Code sample: Drawing a triangle by using OpenVG] ''(Java implentation for RIM devices, however should be able to get a grasp on how it works and be able to port it to the Raspberry Pi)''&lt;br /&gt;
&lt;br /&gt;
=== OpenMAX ===&lt;br /&gt;
See [https://github.com/raspberrypi/firmware/tree/master/documentation/ilcomponents /documentation/ilcomponents] on GitHub firmware repository for official documentation.&lt;br /&gt;
&lt;br /&gt;
''TODO: Sample of how to use OpenMAX to decode audio/video/images, etc.''&lt;br /&gt;
&lt;br /&gt;
== Bindings for Other Programming Languages ==&lt;br /&gt;
'''Python'''&lt;br /&gt;
* [https://bitbucket.org/bryancole/rpi_vid_core/ RPi_Vid_Core] - ''python bindings of EGL, OpenGL ES, OpenVG and bcm_host for Raspberry Pi implemented using Cython''&lt;br /&gt;
&lt;br /&gt;
== Open Source Software compatible with the VideoCore APIs ==&lt;br /&gt;
* '''[https://github.com/huceke/omxplayer omxplayer]''' - ''a command line a/v player for the Raspberry Pi utilising the OpenMAX APIs and ffmpeg''&lt;br /&gt;
* '''[http://wiki.xbmc.org/index.php?title=Raspberry_Pi XBMC]''' - ''a media center, omxplayer's &amp;quot;big brother&amp;quot; ''&lt;br /&gt;
* '''[http://nccastaff.bournemouth.ac.uk/jmacey/GraphicsLib/piNGL/index.html piNGL]''' - ''port of the NGL graphics library to Raspberry Pi''&lt;br /&gt;
* '''[http://qt-project.org/wiki/Qt-RaspberryPi Qt on Pi]''' - ''Raspberry Pi port of the Qt toolkit''&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Template:Raspberry Pi}}&lt;br /&gt;
[[Category: RaspberryPi]]&lt;/div&gt;</summary>
		<author><name>Adammw</name></author>	</entry>

	<entry>
		<id>http://elinux.org/File:Raspberrypi_video_API_03.svg</id>
		<title>File:Raspberrypi video API 03.svg</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/File:Raspberrypi_video_API_03.svg"/>
				<updated>2012-06-25T00:51:58Z</updated>
		
		<summary type="html">&lt;p&gt;Adammw: uploaded a new version of &amp;amp;quot;File:Raspberrypi video API 03.svg&amp;amp;quot;: Replace text with paths so PNG renders display correctly&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Source: http://commons.wikimedia.org/wiki/File:Raspberrypi_video_API_03.svg&lt;/div&gt;</summary>
		<author><name>Adammw</name></author>	</entry>

	<entry>
		<id>http://elinux.org/File:Raspberrypi_video_API_03.svg</id>
		<title>File:Raspberrypi video API 03.svg</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/File:Raspberrypi_video_API_03.svg"/>
				<updated>2012-06-25T00:50:25Z</updated>
		
		<summary type="html">&lt;p&gt;Adammw: uploaded a new version of &amp;amp;quot;File:Raspberrypi video API 03.svg&amp;amp;quot;: Reverted to version as of 15:52, 20 June 2012&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Source: http://commons.wikimedia.org/wiki/File:Raspberrypi_video_API_03.svg&lt;/div&gt;</summary>
		<author><name>Adammw</name></author>	</entry>

	<entry>
		<id>http://elinux.org/File:Raspberrypi_video_API_03.svg</id>
		<title>File:Raspberrypi video API 03.svg</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/File:Raspberrypi_video_API_03.svg"/>
				<updated>2012-06-25T00:50:08Z</updated>
		
		<summary type="html">&lt;p&gt;Adammw: uploaded a new version of &amp;amp;quot;File:Raspberrypi video API 03.svg&amp;amp;quot;: Use DejaVuSans font&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Source: http://commons.wikimedia.org/wiki/File:Raspberrypi_video_API_03.svg&lt;/div&gt;</summary>
		<author><name>Adammw</name></author>	</entry>

	<entry>
		<id>http://elinux.org/RPi_VideoCore_APIs</id>
		<title>RPi VideoCore APIs</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/RPi_VideoCore_APIs"/>
				<updated>2012-06-25T00:44:28Z</updated>
		
		<summary type="html">&lt;p&gt;Adammw: Tweak section names&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:RPi_Software}}&lt;br /&gt;
&lt;br /&gt;
The Raspberry Pi contains a Broadcom [http://en.wikipedia.org/wiki/Videocore VideoCore] IV GPU providing OpenGL ES 1.1, OpenGL ES 2.0, hardware-accelerated OpenVG 1.1, Open EGL, OpenMAX and 1080p30 H.264 high-profile decode. There are 24 GFLOPS of general purpose compute and a bunch of texture filtering and DMA infrastructure. Eben worked on the architecture team for this and the Raspberry Pi team are looking at how they can make some of the proprietary features available to application programmers. &lt;br /&gt;
&lt;br /&gt;
Currently C header files and libraries for many of the Broadcom APIs are located in &amp;lt;code&amp;gt;/opt/vc/include&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;/opt/vc/lib&amp;lt;/code&amp;gt; respectively, or available from [https://github.com/raspberrypi/firmware GitHub] within the same directory structure. Some documentation is contained within comments in the header files, as well as documentation for the OpenMAX IL components in the [https://github.com/raspberrypi/firmware/tree/master/documentation/ilcomponents documentation directory on Github], however it is severely lacking and difficult to understand in a general sense for people wanting to experiment with the device due to it being proprietary. As such, we encourage you to [http://elinux.org/index.php?title=RPi_VideoCore_APIs&amp;amp;action=edit edit this page] to help us build a much better open documentation.&lt;br /&gt;
&lt;br /&gt;
[[File:Raspberrypi_video_API_03.svg]]&lt;br /&gt;
&lt;br /&gt;
http://elinux.org/images/b/be/Raspberrypi_video_API_03.svg&lt;br /&gt;
&lt;br /&gt;
==Quirks==&lt;br /&gt;
&lt;br /&gt;
* The Raspberry Pi requires that the &amp;lt;code&amp;gt;bcm_host_init()&amp;lt;/code&amp;gt; function is called first before any GPU calls can be made.&lt;br /&gt;
* Before calling any of the vc_* functions, you need to initialise vcos and vchi, and make a vchi connection, before then calling the corresponding vc_*_init function for the part of the library you want to use: &amp;lt;code&amp;gt;vc_vchi_dispmanx_init&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;vc_vchi_tv_init&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;vc_vchi_cec_init&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;vc_vchi_gencmd_init&amp;lt;/code&amp;gt;.&amp;lt;br /&amp;gt;(See this [https://github.com/adammw/rpi-output-swapper/blob/master/video_swap.c#L152-169 sample code] which does initialisation for vc_tvservice_* APIs)&lt;br /&gt;
* &amp;lt;code&amp;gt;[[#graphics_get_display_size|graphics_get_display_size()]]&amp;lt;/code&amp;gt; is a broadcom-specific function&lt;br /&gt;
&lt;br /&gt;
== Built-in Sample Programs==&lt;br /&gt;
The Raspberry Pi comes with 7 sample programs and two helper libraries in the /opt/vc/src/hello_pi directory showing some of the system's capabilities and sample code. &lt;br /&gt;
===hello_video===&lt;br /&gt;
This sample decodes h264 video using the OpenMAX APIs and the ilclient library, and is distributed with a short scene of [http://www.bigbuckbunny.org/ Big Buck Bunny]&lt;br /&gt;
===ilclient helper library===&lt;br /&gt;
This library is described as:&lt;br /&gt;
&amp;lt;code&amp;gt;This API defines helper functions for writing IL clients.&lt;br /&gt;
 *&lt;br /&gt;
 * This file defines an IL client side library.  This is useful when&lt;br /&gt;
 * writing IL clients, since there tends to be much repeated and&lt;br /&gt;
 * common code across both single and multiple clients.  This library&lt;br /&gt;
 * seeks to remove that common code and abstract some of the&lt;br /&gt;
 * interactions with components.  There is a wrapper around a&lt;br /&gt;
 * component and tunnel, and some operations can be done on lists of&lt;br /&gt;
 * these.  The callbacks from components are handled, and specific&lt;br /&gt;
 * events can be checked or waited for.&lt;br /&gt;
 */&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Libraries ==&lt;br /&gt;
=== libbcm_host ===&lt;br /&gt;
bcm_host is the Broadcom hardware interface library.&lt;br /&gt;
&lt;br /&gt;
=== vc_dispmanx_*===&lt;br /&gt;
Dispmanx is a windowing system in the process of being deprecated in favour of [http://www.khronos.org/openwf/ OpenWF] (or similar), however dispmanx is still used in all API demos and it's replacement may not yet be available. &amp;lt;ref&amp;gt;http://www.raspberrypi.org/phpBB3/viewtopic.php?t=5621&amp;amp;p=77981&amp;lt;/ref&amp;gt;(confirmation required?)&lt;br /&gt;
=== vc_tvservice_* ===&lt;br /&gt;
These APIs allow controlling the HDMI and SDTV video outputs of the Raspberry Pi, as well as allowing the user to query the supported HDMI resolutions and audio formats and turn on/off copy protection. The Raspberry Pi can only have one output active at a time - turning on the HDMI automatically turns off the SDTV and vice-versa. However either can be turned off using the &amp;lt;code&amp;gt;vc_tv_power_off()&amp;lt;/code&amp;gt; function.&lt;br /&gt;
&lt;br /&gt;
The header file [https://github.com/raspberrypi/firmware/blob/master/opt/vc/include/interface/vmcs_host/vc_tvservice.h vc_tvservice.h] documents the functions quite well via comments above each prototype function, however before any of these functions will succeed you must initialise the connection to the host API like so:&lt;br /&gt;
&lt;br /&gt;
 void tvservice_init() {&lt;br /&gt;
    VCHI_INSTANCE_T vchi_instance;&lt;br /&gt;
    VCHI_CONNECTION_T *vchi_connections;&lt;br /&gt;
    &lt;br /&gt;
    // initialise bcm_host&lt;br /&gt;
    bcm_host_init();&lt;br /&gt;
    &lt;br /&gt;
    // initialise vcos/vchi&lt;br /&gt;
    vcos_init();&lt;br /&gt;
    if (vchi_initialise(&amp;amp;vchi_instance) != VCHIQ_SUCCESS) {&lt;br /&gt;
        fprintf(stderr, &amp;quot;failed to open vchiq instance\n&amp;quot;);&lt;br /&gt;
        exit(-2);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    // create a vchi connection&lt;br /&gt;
    if ( vchi_connect( NULL, 0, vchi_instance ) != 0) {&lt;br /&gt;
        fprintf(stderr, &amp;quot;failed to connect to VCHI\n&amp;quot;);&lt;br /&gt;
        exit(-3);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    // connect to tvservice&lt;br /&gt;
    if ( vc_vchi_tv_init( vchi_instance, &amp;amp;vchi_connections, 1) != 0) {&lt;br /&gt;
        fprintf(stderr, &amp;quot;failed to connect to tvservice\n&amp;quot;);&lt;br /&gt;
        exit(-4);&lt;br /&gt;
    }&lt;br /&gt;
 }&lt;br /&gt;
==== Samples ====&lt;br /&gt;
* [https://github.com/adammw/rpi-output-swapper rpi-output-swapper] Uses tvservice apis to power on HDMI or SDTV display in specific or preferred mode.&lt;br /&gt;
&lt;br /&gt;
=== vc_cec_* ===&lt;br /&gt;
''TODO''&lt;br /&gt;
&lt;br /&gt;
=== vc_gencmd_* ===&lt;br /&gt;
''TODO''&lt;br /&gt;
&lt;br /&gt;
=== EGL ===&lt;br /&gt;
[http://www.khronos.org/egl/ EGL (Native Platform Graphics Interface)] is an interface between Khronos rendering APIs such as OpenGL ES or OpenVG and the underlying native platform. The Raspberry Pi supports [http://www.khronos.org/registry/egl/specs/eglspec.1.4.20110406.pdf EGL Version 1.4] and the following EGL extensions (links are to EGL registry documentation):&amp;lt;ref name=&amp;quot;egl-info&amp;quot;&amp;gt;eglinfo, http://www.raspberrypi.org/phpBB3/viewtopic.php?p=35942#p35942 , http://www.raspberrypi.org/phpBB3/viewtopic.php?p=36318#p36318&amp;lt;/ref&amp;gt;&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_image.txt EGL_KHR_image]&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_image_base.txt EGL_KHR_image_base]&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_image_pixmap.txt EGL_KHR_image_pixmap]&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_vg_parent_image.txt EGL_KHR_vg_parent_image]&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_gl_image.txt EGL_KHR_gl_texture_2D_image]&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_gl_image.txt EGL_KHR_gl_texture_cubemap_image]&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_lock_surface.txt EGL_KHR_lock_surface]&lt;br /&gt;
&lt;br /&gt;
==== Samples====&lt;br /&gt;
&lt;br /&gt;
See [http://jonmacey.blogspot.com.au/2012/05/getting-started-with-egl-on-raspberry.html Getting Started with EGL] post by Jon Macey. &lt;br /&gt;
Extended documentation available in the [http://www.khronos.org/registry/egl/specs/eglspec.1.4.20110406.pdf EGL Version 1.4 Specification] and Simple Reference available in the [http://www.khronos.org/files/egl-1-4-quick-reference-card.pdf EGL 1.4 API Quick Reference Card].&lt;br /&gt;
&lt;br /&gt;
==== Function Documentation====&lt;br /&gt;
====={{anchor|graphics_get_display_size}}&amp;lt;code&amp;gt;int32_t graphics_get_display_size( const uint16_t display_number, uint32_t *width, uint32_t *height);&amp;lt;/code&amp;gt;=====&lt;br /&gt;
&lt;br /&gt;
This function allows you to get the size of the display, and is often used in creating an EGL Surface. width and height are pointers that you pass in to where you want the response values to be written to, display number 0 is usually used for the Raspberry Pi. return value of &amp;gt;= 0 indicates success, &amp;lt;0 indicates failure.&lt;br /&gt;
&lt;br /&gt;
This function is implemented in libbcm_host, and the implementation has been made [https://github.com/raspberrypi/firmware/issues/14#issuecomment-5652185 public] showing that it internally calls the vc_dispmanx_display_get_info function to get the width and height of the current mode.&lt;br /&gt;
&lt;br /&gt;
Bugs present in early versions of the firmware caused this function to always return 1920x1080, however this can easily be fixed by updating the firmware with [https://github.com/Hexxeh/rpi-update Hexxeh's rpi-update] (see the [[R-Pi_Troubleshooting#Updating_firmware|Updating firmware]] page for help).&amp;lt;ref&amp;gt;http://www.raspberrypi.org/phpBB3/viewtopic.php?f=68&amp;amp;t=8252&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;https://github.com/raspberrypi/firmware/issues/14&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== OpenGL ES ===&lt;br /&gt;
The Raspberry Pi supports OpenGL ES 2.0 with the following extensions: &amp;lt;ref name=&amp;quot;egl-info&amp;quot; /&amp;gt;&lt;br /&gt;
*GL_OES_compressed_ETC1_RGB8_texture&lt;br /&gt;
*GL_OES_compressed_paletted_texture&lt;br /&gt;
*GL_OES_texture_npot GL_OES_depth24&lt;br /&gt;
*GL_OES_vertex_half_float&lt;br /&gt;
*GL_OES_EGL_image&lt;br /&gt;
*GL_OES_EGL_image_external&lt;br /&gt;
*GL_EXT_discard_framebuffer&lt;br /&gt;
*GL_OES_rgb8_rgba8&lt;br /&gt;
*GL_OES_depth32&lt;br /&gt;
*GL_OES_mapbuffer&lt;br /&gt;
*GL_EXT_texture_format_BGRA8888&lt;br /&gt;
*GL_APPLE_rgb_422&lt;br /&gt;
*GL_EXT_debug_marker&lt;br /&gt;
 &lt;br /&gt;
''TODO: Sample of how to use/initalise OpenGL ES''&lt;br /&gt;
&lt;br /&gt;
=== OpenVG ===&lt;br /&gt;
The Raspberry Pi supports OpenVG 1.1 for hardware-accelerated two-dimensional vector and raster graphics. See the full specification [http://www.khronos.org/registry/vg/specs/openvg-1.1.pdf here] or [http://www.khronos.org/files/openvg-quick-reference-card.pdf the API quick reference card].&lt;br /&gt;
&lt;br /&gt;
==== Samples ====&lt;br /&gt;
* [http://docs.blackberry.com/en/developers/deliverables/17967/CS_Drawing_a_triangle_using_OpenVG_1241146_11.jsp Code sample: Drawing a triangle by using OpenVG] ''(Java implentation for RIM devices, however should be able to get a grasp on how it works and be able to port it to the Raspberry Pi)''&lt;br /&gt;
&lt;br /&gt;
=== OpenMAX ===&lt;br /&gt;
See [https://github.com/raspberrypi/firmware/tree/master/documentation/ilcomponents /documentation/ilcomponents] on GitHub firmware repository for official documentation.&lt;br /&gt;
&lt;br /&gt;
''TODO: Sample of how to use OpenMAX to decode audio/video/images, etc.''&lt;br /&gt;
&lt;br /&gt;
== Bindings for Other Programming Languages ==&lt;br /&gt;
'''Python'''&lt;br /&gt;
* [https://bitbucket.org/bryancole/rpi_vid_core/ RPi_Vid_Core] - ''python bindings of EGL, OpenGL ES, OpenVG and bcm_host for Raspberry Pi implemented using Cython''&lt;br /&gt;
&lt;br /&gt;
== Open Source Software compatible with the VideoCore APIs ==&lt;br /&gt;
* '''[https://github.com/huceke/omxplayer omxplayer]''' - ''a command line a/v player for the Raspberry Pi utilising the OpenMAX APIs and ffmpeg''&lt;br /&gt;
* '''[http://wiki.xbmc.org/index.php?title=Raspberry_Pi XBMC]''' - ''a media center, omxplayer's &amp;quot;big brother&amp;quot; ''&lt;br /&gt;
* '''[http://nccastaff.bournemouth.ac.uk/jmacey/GraphicsLib/piNGL/index.html piNGL]''' - ''port of the NGL graphics library to Raspberry Pi''&lt;br /&gt;
* '''[http://qt-project.org/wiki/Qt-RaspberryPi Qt on Pi]''' - ''Raspberry Pi port of the Qt toolkit''&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Template:Raspberry Pi}}&lt;br /&gt;
[[Category: RaspberryPi]]&lt;/div&gt;</summary>
		<author><name>Adammw</name></author>	</entry>

	<entry>
		<id>http://elinux.org/RPi_VideoCore_APIs</id>
		<title>RPi VideoCore APIs</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/RPi_VideoCore_APIs"/>
				<updated>2012-06-25T00:42:19Z</updated>
		
		<summary type="html">&lt;p&gt;Adammw: Add more detail on tvservice APIs drawing heavily on rpi-output-swapper code&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:RPi_Software}}&lt;br /&gt;
&lt;br /&gt;
The Raspberry Pi contains a Broadcom [http://en.wikipedia.org/wiki/Videocore VideoCore] IV GPU providing OpenGL ES 1.1, OpenGL ES 2.0, hardware-accelerated OpenVG 1.1, Open EGL, OpenMAX and 1080p30 H.264 high-profile decode. There are 24 GFLOPS of general purpose compute and a bunch of texture filtering and DMA infrastructure. Eben worked on the architecture team for this and the Raspberry Pi team are looking at how they can make some of the proprietary features available to application programmers. &lt;br /&gt;
&lt;br /&gt;
Currently C header files and libraries for many of the Broadcom APIs are located in &amp;lt;code&amp;gt;/opt/vc/include&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;/opt/vc/lib&amp;lt;/code&amp;gt; respectively, or available from [https://github.com/raspberrypi/firmware GitHub] within the same directory structure. Some documentation is contained within comments in the header files, as well as documentation for the OpenMAX IL components in the [https://github.com/raspberrypi/firmware/tree/master/documentation/ilcomponents documentation directory on Github], however it is severely lacking and difficult to understand in a general sense for people wanting to experiment with the device due to it being proprietary. As such, we encourage you to [http://elinux.org/index.php?title=RPi_VideoCore_APIs&amp;amp;action=edit edit this page] to help us build a much better open documentation.&lt;br /&gt;
&lt;br /&gt;
[[File:Raspberrypi_video_API_03.svg]]&lt;br /&gt;
&lt;br /&gt;
http://elinux.org/images/b/be/Raspberrypi_video_API_03.svg&lt;br /&gt;
&lt;br /&gt;
==Quirks==&lt;br /&gt;
&lt;br /&gt;
* The Raspberry Pi requires that the &amp;lt;code&amp;gt;bcm_host_init()&amp;lt;/code&amp;gt; function is called first before any GPU calls can be made.&lt;br /&gt;
* Before calling any of the vc_* functions, you need to initialise vcos and vchi, and make a vchi connection, before then calling the corresponding vc_*_init function for the part of the library you want to use: &amp;lt;code&amp;gt;vc_vchi_dispmanx_init&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;vc_vchi_tv_init&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;vc_vchi_cec_init&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;vc_vchi_gencmd_init&amp;lt;/code&amp;gt;.&amp;lt;br /&amp;gt;(See this [https://github.com/adammw/rpi-output-swapper/blob/master/video_swap.c#L152-169 sample code] which does initialisation for vc_tvservice_* APIs)&lt;br /&gt;
* &amp;lt;code&amp;gt;[[#graphics_get_display_size|graphics_get_display_size()]]&amp;lt;/code&amp;gt; is a broadcom-specific function&lt;br /&gt;
&lt;br /&gt;
== Sample Programs==&lt;br /&gt;
The Raspberry Pi comes with 7 sample programs and two helper libraries in the /opt/vc/src/hello_pi directory showing some of the system's capabilities and sample code. &lt;br /&gt;
===hello_video===&lt;br /&gt;
This sample decodes h264 video using the OpenMAX APIs and the ilclient library, and is distributed with a short scene of [http://www.bigbuckbunny.org/ Big Buck Bunny]&lt;br /&gt;
===ilclient helper library===&lt;br /&gt;
This library is described as:&lt;br /&gt;
&amp;lt;code&amp;gt;This API defines helper functions for writing IL clients.&lt;br /&gt;
 *&lt;br /&gt;
 * This file defines an IL client side library.  This is useful when&lt;br /&gt;
 * writing IL clients, since there tends to be much repeated and&lt;br /&gt;
 * common code across both single and multiple clients.  This library&lt;br /&gt;
 * seeks to remove that common code and abstract some of the&lt;br /&gt;
 * interactions with components.  There is a wrapper around a&lt;br /&gt;
 * component and tunnel, and some operations can be done on lists of&lt;br /&gt;
 * these.  The callbacks from components are handled, and specific&lt;br /&gt;
 * events can be checked or waited for.&lt;br /&gt;
 */&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Libraries ==&lt;br /&gt;
=== libbcm_host ===&lt;br /&gt;
bcm_host is the Broadcom hardware interface library.&lt;br /&gt;
&lt;br /&gt;
=== vc_dispmanx_*===&lt;br /&gt;
Dispmanx is a windowing system in the process of being deprecated in favour of [http://www.khronos.org/openwf/ OpenWF] (or similar), however dispmanx is still used in all API demos and it's replacement may not yet be available. &amp;lt;ref&amp;gt;http://www.raspberrypi.org/phpBB3/viewtopic.php?t=5621&amp;amp;p=77981&amp;lt;/ref&amp;gt;(confirmation required?)&lt;br /&gt;
=== vc_tvservice_* ===&lt;br /&gt;
These APIs allow controlling the HDMI and SDTV video outputs of the Raspberry Pi, as well as allowing the user to query the supported HDMI resolutions and audio formats and turn on/off copy protection. The Raspberry Pi can only have one output active at a time - turning on the HDMI automatically turns off the SDTV and vice-versa. However either can be turned off using the &amp;lt;code&amp;gt;vc_tv_power_off()&amp;lt;/code&amp;gt; function.&lt;br /&gt;
&lt;br /&gt;
The header file [https://github.com/raspberrypi/firmware/blob/master/opt/vc/include/interface/vmcs_host/vc_tvservice.h vc_tvservice.h] documents the functions quite well via comments above each prototype function, however before any of these functions will succeed you must initialise the connection to the host API like so:&lt;br /&gt;
&lt;br /&gt;
 void tvservice_init() {&lt;br /&gt;
    VCHI_INSTANCE_T vchi_instance;&lt;br /&gt;
    VCHI_CONNECTION_T *vchi_connections;&lt;br /&gt;
    &lt;br /&gt;
    // initialise bcm_host&lt;br /&gt;
    bcm_host_init();&lt;br /&gt;
    &lt;br /&gt;
    // initialise vcos/vchi&lt;br /&gt;
    vcos_init();&lt;br /&gt;
    if (vchi_initialise(&amp;amp;vchi_instance) != VCHIQ_SUCCESS) {&lt;br /&gt;
        fprintf(stderr, &amp;quot;failed to open vchiq instance\n&amp;quot;);&lt;br /&gt;
        exit(-2);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    // create a vchi connection&lt;br /&gt;
    if ( vchi_connect( NULL, 0, vchi_instance ) != 0) {&lt;br /&gt;
        fprintf(stderr, &amp;quot;failed to connect to VCHI\n&amp;quot;);&lt;br /&gt;
        exit(-3);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    // connect to tvservice&lt;br /&gt;
    if ( vc_vchi_tv_init( vchi_instance, &amp;amp;vchi_connections, 1) != 0) {&lt;br /&gt;
        fprintf(stderr, &amp;quot;failed to connect to tvservice\n&amp;quot;);&lt;br /&gt;
        exit(-4);&lt;br /&gt;
    }&lt;br /&gt;
 }&lt;br /&gt;
==== Samples ====&lt;br /&gt;
* [https://github.com/adammw/rpi-output-swapper rpi-output-swapper] Uses tvservice apis to power on HDMI or SDTV display in specific or preferred mode.&lt;br /&gt;
&lt;br /&gt;
=== vc_cec_* ===&lt;br /&gt;
''TODO''&lt;br /&gt;
&lt;br /&gt;
=== vc_gencmd_* ===&lt;br /&gt;
''TODO''&lt;br /&gt;
&lt;br /&gt;
=== EGL ===&lt;br /&gt;
[http://www.khronos.org/egl/ EGL (Native Platform Graphics Interface)] is an interface between Khronos rendering APIs such as OpenGL ES or OpenVG and the underlying native platform. The Raspberry Pi supports [http://www.khronos.org/registry/egl/specs/eglspec.1.4.20110406.pdf EGL Version 1.4] and the following EGL extensions (links are to EGL registry documentation):&amp;lt;ref name=&amp;quot;egl-info&amp;quot;&amp;gt;eglinfo, http://www.raspberrypi.org/phpBB3/viewtopic.php?p=35942#p35942 , http://www.raspberrypi.org/phpBB3/viewtopic.php?p=36318#p36318&amp;lt;/ref&amp;gt;&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_image.txt EGL_KHR_image]&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_image_base.txt EGL_KHR_image_base]&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_image_pixmap.txt EGL_KHR_image_pixmap]&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_vg_parent_image.txt EGL_KHR_vg_parent_image]&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_gl_image.txt EGL_KHR_gl_texture_2D_image]&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_gl_image.txt EGL_KHR_gl_texture_cubemap_image]&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_lock_surface.txt EGL_KHR_lock_surface]&lt;br /&gt;
&lt;br /&gt;
==== Samples====&lt;br /&gt;
&lt;br /&gt;
See [http://jonmacey.blogspot.com.au/2012/05/getting-started-with-egl-on-raspberry.html Getting Started with EGL] post by Jon Macey. &lt;br /&gt;
Extended documentation available in the [http://www.khronos.org/registry/egl/specs/eglspec.1.4.20110406.pdf EGL Version 1.4 Specification] and Simple Reference available in the [http://www.khronos.org/files/egl-1-4-quick-reference-card.pdf EGL 1.4 API Quick Reference Card].&lt;br /&gt;
&lt;br /&gt;
==== Function Documentation====&lt;br /&gt;
====={{anchor|graphics_get_display_size}}&amp;lt;code&amp;gt;int32_t graphics_get_display_size( const uint16_t display_number, uint32_t *width, uint32_t *height);&amp;lt;/code&amp;gt;=====&lt;br /&gt;
&lt;br /&gt;
This function allows you to get the size of the display, and is often used in creating an EGL Surface. width and height are pointers that you pass in to where you want the response values to be written to, display number 0 is usually used for the Raspberry Pi. return value of &amp;gt;= 0 indicates success, &amp;lt;0 indicates failure.&lt;br /&gt;
&lt;br /&gt;
This function is implemented in libbcm_host, and the implementation has been made [https://github.com/raspberrypi/firmware/issues/14#issuecomment-5652185 public] showing that it internally calls the vc_dispmanx_display_get_info function to get the width and height of the current mode.&lt;br /&gt;
&lt;br /&gt;
Bugs present in early versions of the firmware caused this function to always return 1920x1080, however this can easily be fixed by updating the firmware with [https://github.com/Hexxeh/rpi-update Hexxeh's rpi-update] (see the [[R-Pi_Troubleshooting#Updating_firmware|Updating firmware]] page for help).&amp;lt;ref&amp;gt;http://www.raspberrypi.org/phpBB3/viewtopic.php?f=68&amp;amp;t=8252&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;https://github.com/raspberrypi/firmware/issues/14&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== OpenGL ES ===&lt;br /&gt;
The Raspberry Pi supports OpenGL ES 2.0 with the following extensions: &amp;lt;ref name=&amp;quot;egl-info&amp;quot; /&amp;gt;&lt;br /&gt;
*GL_OES_compressed_ETC1_RGB8_texture&lt;br /&gt;
*GL_OES_compressed_paletted_texture&lt;br /&gt;
*GL_OES_texture_npot GL_OES_depth24&lt;br /&gt;
*GL_OES_vertex_half_float&lt;br /&gt;
*GL_OES_EGL_image&lt;br /&gt;
*GL_OES_EGL_image_external&lt;br /&gt;
*GL_EXT_discard_framebuffer&lt;br /&gt;
*GL_OES_rgb8_rgba8&lt;br /&gt;
*GL_OES_depth32&lt;br /&gt;
*GL_OES_mapbuffer&lt;br /&gt;
*GL_EXT_texture_format_BGRA8888&lt;br /&gt;
*GL_APPLE_rgb_422&lt;br /&gt;
*GL_EXT_debug_marker&lt;br /&gt;
 &lt;br /&gt;
''TODO: Sample of how to use/initalise OpenGL ES''&lt;br /&gt;
&lt;br /&gt;
=== OpenVG ===&lt;br /&gt;
The Raspberry Pi supports OpenVG 1.1 for hardware-accelerated two-dimensional vector and raster graphics. See the full specification [http://www.khronos.org/registry/vg/specs/openvg-1.1.pdf here] or [http://www.khronos.org/files/openvg-quick-reference-card.pdf the API quick reference card].&lt;br /&gt;
&lt;br /&gt;
==== Samples ====&lt;br /&gt;
* [http://docs.blackberry.com/en/developers/deliverables/17967/CS_Drawing_a_triangle_using_OpenVG_1241146_11.jsp Code sample: Drawing a triangle by using OpenVG] ''(Java implentation for RIM devices, however should be able to get a grasp on how it works and be able to port it to the Raspberry Pi)''&lt;br /&gt;
&lt;br /&gt;
=== OpenMAX ===&lt;br /&gt;
See [https://github.com/raspberrypi/firmware/tree/master/documentation/ilcomponents /documentation/ilcomponents] on GitHub firmware repository for official documentation.&lt;br /&gt;
&lt;br /&gt;
''TODO: Sample of how to use OpenMAX to decode audio/video/images, etc.''&lt;br /&gt;
&lt;br /&gt;
== Other Programming Languages ==&lt;br /&gt;
'''Python'''&lt;br /&gt;
* [https://bitbucket.org/bryancole/rpi_vid_core/ RPi_Vid_Core] - ''python bindings of EGL, OpenGL ES, OpenVG and bcm_host for Raspberry Pi implemented using Cython''&lt;br /&gt;
&lt;br /&gt;
== Programs designed to work with the Raspberry Pi's VideoCore APIs ==&lt;br /&gt;
* '''[https://github.com/huceke/omxplayer omxplayer]''' - ''a command line a/v player for the Raspberry Pi utilising the OpenMAX APIs and ffmpeg''&lt;br /&gt;
* '''[http://wiki.xbmc.org/index.php?title=Raspberry_Pi XBMC]''' - ''a media center, omxplayer's &amp;quot;big brother&amp;quot; ''&lt;br /&gt;
* '''[http://nccastaff.bournemouth.ac.uk/jmacey/GraphicsLib/piNGL/index.html piNGL]''' - ''port of the NGL graphics library to Raspberry Pi''&lt;br /&gt;
* '''[http://qt-project.org/wiki/Qt-RaspberryPi Qt on Pi]''' - ''Raspberry Pi port of the Qt toolkit''&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Template:Raspberry Pi}}&lt;br /&gt;
[[Category: RaspberryPi]]&lt;/div&gt;</summary>
		<author><name>Adammw</name></author>	</entry>

	<entry>
		<id>http://elinux.org/RPi_VideoCore_APIs</id>
		<title>RPi VideoCore APIs</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/RPi_VideoCore_APIs"/>
				<updated>2012-06-25T00:27:27Z</updated>
		
		<summary type="html">&lt;p&gt;Adammw: /* OpenVG */ Add Drawing a Triangle OpenVG Sample Link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:RPi_Software}}&lt;br /&gt;
&lt;br /&gt;
The Raspberry Pi contains a Broadcom [http://en.wikipedia.org/wiki/Videocore VideoCore] IV GPU providing OpenGL ES 1.1, OpenGL ES 2.0, hardware-accelerated OpenVG 1.1, Open EGL, OpenMAX and 1080p30 H.264 high-profile decode. There are 24 GFLOPS of general purpose compute and a bunch of texture filtering and DMA infrastructure. Eben worked on the architecture team for this and the Raspberry Pi team are looking at how they can make some of the proprietary features available to application programmers. &lt;br /&gt;
&lt;br /&gt;
Currently C header files and libraries for many of the Broadcom APIs are located in &amp;lt;code&amp;gt;/opt/vc/include&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;/opt/vc/lib&amp;lt;/code&amp;gt; respectively, or available from [https://github.com/raspberrypi/firmware GitHub] within the same directory structure. Some documentation is contained within comments in the header files, as well as documentation for the OpenMAX IL components in the [https://github.com/raspberrypi/firmware/tree/master/documentation/ilcomponents documentation directory on Github], however it is severely lacking and difficult to understand in a general sense for people wanting to experiment with the device due to it being proprietary. As such, we encourage you to [http://elinux.org/index.php?title=RPi_VideoCore_APIs&amp;amp;action=edit edit this page] to help us build a much better open documentation.&lt;br /&gt;
&lt;br /&gt;
[[File:Raspberrypi_video_API_03.svg]]&lt;br /&gt;
&lt;br /&gt;
http://elinux.org/images/b/be/Raspberrypi_video_API_03.svg&lt;br /&gt;
&lt;br /&gt;
==Quirks==&lt;br /&gt;
&lt;br /&gt;
* The Raspberry Pi requires that the &amp;lt;code&amp;gt;bcm_host_init()&amp;lt;/code&amp;gt; function is called first before any GPU calls can be made.&lt;br /&gt;
* Before calling any of the vc_* functions, you need to initialise vcos and vchi, and make a vchi connection, before then calling the corresponding vc_*_init function for the part of the library you want to use: &amp;lt;code&amp;gt;vc_vchi_dispmanx_init&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;vc_vchi_tv_init&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;vc_vchi_cec_init&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;vc_vchi_gencmd_init&amp;lt;/code&amp;gt;.&amp;lt;br /&amp;gt;(See this [https://github.com/adammw/rpi-output-swapper/blob/master/video_swap.c#L152-169 sample code] which does initialisation for vc_tvservice_* APIs)&lt;br /&gt;
* &amp;lt;code&amp;gt;[[#graphics_get_display_size|graphics_get_display_size()]]&amp;lt;/code&amp;gt; is a broadcom-specific function&lt;br /&gt;
&lt;br /&gt;
== Sample Programs==&lt;br /&gt;
The Raspberry Pi comes with 7 sample programs and two helper libraries in the /opt/vc/src/hello_pi directory showing some of the system's capabilities and sample code. &lt;br /&gt;
===hello_video===&lt;br /&gt;
This sample decodes h264 video using the OpenMAX APIs and the ilclient library, and is distributed with a short scene of [http://www.bigbuckbunny.org/ Big Buck Bunny]&lt;br /&gt;
===ilclient helper library===&lt;br /&gt;
This library is described as:&lt;br /&gt;
&amp;lt;code&amp;gt;This API defines helper functions for writing IL clients.&lt;br /&gt;
 *&lt;br /&gt;
 * This file defines an IL client side library.  This is useful when&lt;br /&gt;
 * writing IL clients, since there tends to be much repeated and&lt;br /&gt;
 * common code across both single and multiple clients.  This library&lt;br /&gt;
 * seeks to remove that common code and abstract some of the&lt;br /&gt;
 * interactions with components.  There is a wrapper around a&lt;br /&gt;
 * component and tunnel, and some operations can be done on lists of&lt;br /&gt;
 * these.  The callbacks from components are handled, and specific&lt;br /&gt;
 * events can be checked or waited for.&lt;br /&gt;
 */&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Libraries ==&lt;br /&gt;
=== libbcm_host ===&lt;br /&gt;
bcm_host is the Broadcom hardware interface library.&lt;br /&gt;
&lt;br /&gt;
=== vc_dispmanx_*===&lt;br /&gt;
Dispmanx is a windowing system in the process of being deprecated in favour of [http://www.khronos.org/openwf/ OpenWF] (or similar), however dispmanx is still used in all API demos and it's replacement may not yet be available. &amp;lt;ref&amp;gt;http://www.raspberrypi.org/phpBB3/viewtopic.php?t=5621&amp;amp;p=77981&amp;lt;/ref&amp;gt;(confirmation required?)&lt;br /&gt;
=== vc_tvservice_* ===&lt;br /&gt;
These APIs allow controlling the HDMI and SDTV video outputs of the Raspberry Pi.&lt;br /&gt;
&lt;br /&gt;
''TODO: Describe better''&lt;br /&gt;
=== vc_cec_* ===&lt;br /&gt;
''TODO''&lt;br /&gt;
=== vc_gencmd_* ===&lt;br /&gt;
''TODO''&lt;br /&gt;
=== EGL ===&lt;br /&gt;
[http://www.khronos.org/egl/ EGL (Native Platform Graphics Interface)] is an interface between Khronos rendering APIs such as OpenGL ES or OpenVG and the underlying native platform. The Raspberry Pi supports [http://www.khronos.org/registry/egl/specs/eglspec.1.4.20110406.pdf EGL Version 1.4] and the following EGL extensions (links are to EGL registry documentation):&amp;lt;ref name=&amp;quot;egl-info&amp;quot;&amp;gt;eglinfo, http://www.raspberrypi.org/phpBB3/viewtopic.php?p=35942#p35942 , http://www.raspberrypi.org/phpBB3/viewtopic.php?p=36318#p36318&amp;lt;/ref&amp;gt;&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_image.txt EGL_KHR_image]&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_image_base.txt EGL_KHR_image_base]&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_image_pixmap.txt EGL_KHR_image_pixmap]&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_vg_parent_image.txt EGL_KHR_vg_parent_image]&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_gl_image.txt EGL_KHR_gl_texture_2D_image]&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_gl_image.txt EGL_KHR_gl_texture_cubemap_image]&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_lock_surface.txt EGL_KHR_lock_surface]&lt;br /&gt;
&lt;br /&gt;
==== Samples====&lt;br /&gt;
&lt;br /&gt;
See [http://jonmacey.blogspot.com.au/2012/05/getting-started-with-egl-on-raspberry.html Getting Started with EGL] post by Jon Macey. &lt;br /&gt;
Extended documentation available in the [http://www.khronos.org/registry/egl/specs/eglspec.1.4.20110406.pdf EGL Version 1.4 Specification] and Simple Reference available in the [http://www.khronos.org/files/egl-1-4-quick-reference-card.pdf EGL 1.4 API Quick Reference Card].&lt;br /&gt;
&lt;br /&gt;
==== Function Documentation====&lt;br /&gt;
====={{anchor|graphics_get_display_size}}&amp;lt;code&amp;gt;int32_t graphics_get_display_size( const uint16_t display_number, uint32_t *width, uint32_t *height);&amp;lt;/code&amp;gt;=====&lt;br /&gt;
&lt;br /&gt;
This function allows you to get the size of the display, and is often used in creating an EGL Surface. width and height are pointers that you pass in to where you want the response values to be written to, display number 0 is usually used for the Raspberry Pi. return value of &amp;gt;= 0 indicates success, &amp;lt;0 indicates failure.&lt;br /&gt;
&lt;br /&gt;
This function is implemented in libbcm_host, and the implementation has been made [https://github.com/raspberrypi/firmware/issues/14#issuecomment-5652185 public] showing that it internally calls the vc_dispmanx_display_get_info function to get the width and height of the current mode.&lt;br /&gt;
&lt;br /&gt;
Bugs present in early versions of the firmware caused this function to always return 1920x1080, however this can easily be fixed by updating the firmware with [https://github.com/Hexxeh/rpi-update Hexxeh's rpi-update] (see the [[R-Pi_Troubleshooting#Updating_firmware|Updating firmware]] page for help).&amp;lt;ref&amp;gt;http://www.raspberrypi.org/phpBB3/viewtopic.php?f=68&amp;amp;t=8252&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;https://github.com/raspberrypi/firmware/issues/14&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== OpenGL ES ===&lt;br /&gt;
The Raspberry Pi supports OpenGL ES 2.0 with the following extensions: &amp;lt;ref name=&amp;quot;egl-info&amp;quot; /&amp;gt;&lt;br /&gt;
*GL_OES_compressed_ETC1_RGB8_texture&lt;br /&gt;
*GL_OES_compressed_paletted_texture&lt;br /&gt;
*GL_OES_texture_npot GL_OES_depth24&lt;br /&gt;
*GL_OES_vertex_half_float&lt;br /&gt;
*GL_OES_EGL_image&lt;br /&gt;
*GL_OES_EGL_image_external&lt;br /&gt;
*GL_EXT_discard_framebuffer&lt;br /&gt;
*GL_OES_rgb8_rgba8&lt;br /&gt;
*GL_OES_depth32&lt;br /&gt;
*GL_OES_mapbuffer&lt;br /&gt;
*GL_EXT_texture_format_BGRA8888&lt;br /&gt;
*GL_APPLE_rgb_422&lt;br /&gt;
*GL_EXT_debug_marker&lt;br /&gt;
 &lt;br /&gt;
''TODO: Sample of how to use/initalise OpenGL ES''&lt;br /&gt;
&lt;br /&gt;
=== OpenVG ===&lt;br /&gt;
The Raspberry Pi supports OpenVG 1.1 for hardware-accelerated two-dimensional vector and raster graphics. See the full specification [http://www.khronos.org/registry/vg/specs/openvg-1.1.pdf here] or [http://www.khronos.org/files/openvg-quick-reference-card.pdf the API quick reference card].&lt;br /&gt;
&lt;br /&gt;
==== Samples ====&lt;br /&gt;
* [http://docs.blackberry.com/en/developers/deliverables/17967/CS_Drawing_a_triangle_using_OpenVG_1241146_11.jsp Code sample: Drawing a triangle by using OpenVG] ''(Java implentation for RIM devices, however should be able to get a grasp on how it works and be able to port it to the Raspberry Pi)''&lt;br /&gt;
&lt;br /&gt;
=== OpenMAX ===&lt;br /&gt;
See [https://github.com/raspberrypi/firmware/tree/master/documentation/ilcomponents /documentation/ilcomponents] on GitHub firmware repository for official documentation.&lt;br /&gt;
&lt;br /&gt;
''TODO: Sample of how to use OpenMAX to decode audio/video/images, etc.''&lt;br /&gt;
&lt;br /&gt;
== Other Programming Languages ==&lt;br /&gt;
'''Python'''&lt;br /&gt;
* [https://bitbucket.org/bryancole/rpi_vid_core/ RPi_Vid_Core] - ''python bindings of EGL, OpenGL ES, OpenVG and bcm_host for Raspberry Pi implemented using Cython''&lt;br /&gt;
&lt;br /&gt;
== Programs designed to work with the Raspberry Pi's VideoCore APIs ==&lt;br /&gt;
* '''[https://github.com/huceke/omxplayer omxplayer]''' - ''a command line a/v player for the Raspberry Pi utilising the OpenMAX APIs and ffmpeg''&lt;br /&gt;
* '''[http://wiki.xbmc.org/index.php?title=Raspberry_Pi XBMC]''' - ''a media center, omxplayer's &amp;quot;big brother&amp;quot; ''&lt;br /&gt;
* '''[http://nccastaff.bournemouth.ac.uk/jmacey/GraphicsLib/piNGL/index.html piNGL]''' - ''port of the NGL graphics library to Raspberry Pi''&lt;br /&gt;
* '''[http://qt-project.org/wiki/Qt-RaspberryPi Qt on Pi]''' - ''Raspberry Pi port of the Qt toolkit''&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Template:Raspberry Pi}}&lt;br /&gt;
[[Category: RaspberryPi]]&lt;/div&gt;</summary>
		<author><name>Adammw</name></author>	</entry>

	<entry>
		<id>http://elinux.org/RPi_VideoCore_APIs</id>
		<title>RPi VideoCore APIs</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/RPi_VideoCore_APIs"/>
				<updated>2012-06-24T13:08:05Z</updated>
		
		<summary type="html">&lt;p&gt;Adammw: /* Libraries */ Add OpenVG section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:RPi_Software}}&lt;br /&gt;
&lt;br /&gt;
The Raspberry Pi contains a Broadcom [http://en.wikipedia.org/wiki/Videocore VideoCore] IV GPU providing OpenGL ES 1.1, OpenGL ES 2.0, hardware-accelerated OpenVG 1.1, Open EGL, OpenMAX and 1080p30 H.264 high-profile decode. There are 24 GFLOPS of general purpose compute and a bunch of texture filtering and DMA infrastructure. Eben worked on the architecture team for this and the Raspberry Pi team are looking at how they can make some of the proprietary features available to application programmers. &lt;br /&gt;
&lt;br /&gt;
Currently C header files and libraries for many of the Broadcom APIs are located in &amp;lt;code&amp;gt;/opt/vc/include&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;/opt/vc/lib&amp;lt;/code&amp;gt; respectively, or available from [https://github.com/raspberrypi/firmware GitHub] within the same directory structure. Some documentation is contained within comments in the header files, as well as documentation for the OpenMAX IL components in the [https://github.com/raspberrypi/firmware/tree/master/documentation/ilcomponents documentation directory on Github], however it is severely lacking and difficult to understand in a general sense for people wanting to experiment with the device due to it being proprietary. As such, we encourage you to [http://elinux.org/index.php?title=RPi_VideoCore_APIs&amp;amp;action=edit edit this page] to help us build a much better open documentation.&lt;br /&gt;
&lt;br /&gt;
[[File:Raspberrypi_video_API_03.svg]]&lt;br /&gt;
&lt;br /&gt;
http://elinux.org/images/b/be/Raspberrypi_video_API_03.svg&lt;br /&gt;
&lt;br /&gt;
==Quirks==&lt;br /&gt;
&lt;br /&gt;
* The Raspberry Pi requires that the &amp;lt;code&amp;gt;bcm_host_init()&amp;lt;/code&amp;gt; function is called first before any GPU calls can be made.&lt;br /&gt;
* Before calling any of the vc_* functions, you need to initialise vcos and vchi, and make a vchi connection, before then calling the corresponding vc_*_init function for the part of the library you want to use: &amp;lt;code&amp;gt;vc_vchi_dispmanx_init&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;vc_vchi_tv_init&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;vc_vchi_cec_init&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;vc_vchi_gencmd_init&amp;lt;/code&amp;gt;.&amp;lt;br /&amp;gt;(See this [https://github.com/adammw/rpi-output-swapper/blob/master/video_swap.c#L152-169 sample code] which does initialisation for vc_tvservice_* APIs)&lt;br /&gt;
* &amp;lt;code&amp;gt;[[#graphics_get_display_size|graphics_get_display_size()]]&amp;lt;/code&amp;gt; is a broadcom-specific function&lt;br /&gt;
&lt;br /&gt;
== Sample Programs==&lt;br /&gt;
The Raspberry Pi comes with 7 sample programs and two helper libraries in the /opt/vc/src/hello_pi directory showing some of the system's capabilities and sample code. &lt;br /&gt;
===hello_video===&lt;br /&gt;
This sample decodes h264 video using the OpenMAX APIs and the ilclient library, and is distributed with a short scene of [http://www.bigbuckbunny.org/ Big Buck Bunny]&lt;br /&gt;
===ilclient helper library===&lt;br /&gt;
This library is described as:&lt;br /&gt;
&amp;lt;code&amp;gt;This API defines helper functions for writing IL clients.&lt;br /&gt;
 *&lt;br /&gt;
 * This file defines an IL client side library.  This is useful when&lt;br /&gt;
 * writing IL clients, since there tends to be much repeated and&lt;br /&gt;
 * common code across both single and multiple clients.  This library&lt;br /&gt;
 * seeks to remove that common code and abstract some of the&lt;br /&gt;
 * interactions with components.  There is a wrapper around a&lt;br /&gt;
 * component and tunnel, and some operations can be done on lists of&lt;br /&gt;
 * these.  The callbacks from components are handled, and specific&lt;br /&gt;
 * events can be checked or waited for.&lt;br /&gt;
 */&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Libraries ==&lt;br /&gt;
=== libbcm_host ===&lt;br /&gt;
bcm_host is the Broadcom hardware interface library.&lt;br /&gt;
&lt;br /&gt;
=== vc_dispmanx_*===&lt;br /&gt;
Dispmanx is a windowing system in the process of being deprecated in favour of [http://www.khronos.org/openwf/ OpenWF] (or similar), however dispmanx is still used in all API demos and it's replacement may not yet be available. &amp;lt;ref&amp;gt;http://www.raspberrypi.org/phpBB3/viewtopic.php?t=5621&amp;amp;p=77981&amp;lt;/ref&amp;gt;(confirmation required?)&lt;br /&gt;
=== vc_tvservice_* ===&lt;br /&gt;
These APIs allow controlling the HDMI and SDTV video outputs of the Raspberry Pi.&lt;br /&gt;
&lt;br /&gt;
''TODO: Describe better''&lt;br /&gt;
=== vc_cec_* ===&lt;br /&gt;
''TODO''&lt;br /&gt;
=== vc_gencmd_* ===&lt;br /&gt;
''TODO''&lt;br /&gt;
=== EGL ===&lt;br /&gt;
[http://www.khronos.org/egl/ EGL (Native Platform Graphics Interface)] is an interface between Khronos rendering APIs such as OpenGL ES or OpenVG and the underlying native platform. The Raspberry Pi supports [http://www.khronos.org/registry/egl/specs/eglspec.1.4.20110406.pdf EGL Version 1.4] and the following EGL extensions (links are to EGL registry documentation):&amp;lt;ref name=&amp;quot;egl-info&amp;quot;&amp;gt;eglinfo, http://www.raspberrypi.org/phpBB3/viewtopic.php?p=35942#p35942 , http://www.raspberrypi.org/phpBB3/viewtopic.php?p=36318#p36318&amp;lt;/ref&amp;gt;&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_image.txt EGL_KHR_image]&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_image_base.txt EGL_KHR_image_base]&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_image_pixmap.txt EGL_KHR_image_pixmap]&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_vg_parent_image.txt EGL_KHR_vg_parent_image]&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_gl_image.txt EGL_KHR_gl_texture_2D_image]&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_gl_image.txt EGL_KHR_gl_texture_cubemap_image]&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_lock_surface.txt EGL_KHR_lock_surface]&lt;br /&gt;
&lt;br /&gt;
==== Samples====&lt;br /&gt;
&lt;br /&gt;
See [http://jonmacey.blogspot.com.au/2012/05/getting-started-with-egl-on-raspberry.html Getting Started with EGL] post by Jon Macey. &lt;br /&gt;
Extended documentation available in the [http://www.khronos.org/registry/egl/specs/eglspec.1.4.20110406.pdf EGL Version 1.4 Specification] and Simple Reference available in the [http://www.khronos.org/files/egl-1-4-quick-reference-card.pdf EGL 1.4 API Quick Reference Card].&lt;br /&gt;
&lt;br /&gt;
==== Function Documentation====&lt;br /&gt;
====={{anchor|graphics_get_display_size}}&amp;lt;code&amp;gt;int32_t graphics_get_display_size( const uint16_t display_number, uint32_t *width, uint32_t *height);&amp;lt;/code&amp;gt;=====&lt;br /&gt;
&lt;br /&gt;
This function allows you to get the size of the display, and is often used in creating an EGL Surface. width and height are pointers that you pass in to where you want the response values to be written to, display number 0 is usually used for the Raspberry Pi. return value of &amp;gt;= 0 indicates success, &amp;lt;0 indicates failure.&lt;br /&gt;
&lt;br /&gt;
This function is implemented in libbcm_host, and the implementation has been made [https://github.com/raspberrypi/firmware/issues/14#issuecomment-5652185 public] showing that it internally calls the vc_dispmanx_display_get_info function to get the width and height of the current mode.&lt;br /&gt;
&lt;br /&gt;
Bugs present in early versions of the firmware caused this function to always return 1920x1080, however this can easily be fixed by updating the firmware with [https://github.com/Hexxeh/rpi-update Hexxeh's rpi-update] (see the [[R-Pi_Troubleshooting#Updating_firmware|Updating firmware]] page for help).&amp;lt;ref&amp;gt;http://www.raspberrypi.org/phpBB3/viewtopic.php?f=68&amp;amp;t=8252&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;https://github.com/raspberrypi/firmware/issues/14&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== OpenGL ES ===&lt;br /&gt;
The Raspberry Pi supports OpenGL ES 2.0 with the following extensions: &amp;lt;ref name=&amp;quot;egl-info&amp;quot; /&amp;gt;&lt;br /&gt;
*GL_OES_compressed_ETC1_RGB8_texture&lt;br /&gt;
*GL_OES_compressed_paletted_texture&lt;br /&gt;
*GL_OES_texture_npot GL_OES_depth24&lt;br /&gt;
*GL_OES_vertex_half_float&lt;br /&gt;
*GL_OES_EGL_image&lt;br /&gt;
*GL_OES_EGL_image_external&lt;br /&gt;
*GL_EXT_discard_framebuffer&lt;br /&gt;
*GL_OES_rgb8_rgba8&lt;br /&gt;
*GL_OES_depth32&lt;br /&gt;
*GL_OES_mapbuffer&lt;br /&gt;
*GL_EXT_texture_format_BGRA8888&lt;br /&gt;
*GL_APPLE_rgb_422&lt;br /&gt;
*GL_EXT_debug_marker&lt;br /&gt;
 &lt;br /&gt;
''TODO: Sample of how to use/initalise OpenGL ES''&lt;br /&gt;
&lt;br /&gt;
=== OpenVG ===&lt;br /&gt;
The Raspberry Pi supports OpenVG 1.1 for hardware-accelerated two-dimensional vector and raster graphics. See the full specification [http://www.khronos.org/registry/vg/specs/openvg-1.1.pdf here] or [http://www.khronos.org/files/openvg-quick-reference-card.pdf the API quick reference card].&lt;br /&gt;
&lt;br /&gt;
=== OpenMAX ===&lt;br /&gt;
See [https://github.com/raspberrypi/firmware/tree/master/documentation/ilcomponents /documentation/ilcomponents] on GitHub firmware repository for official documentation.&lt;br /&gt;
&lt;br /&gt;
''TODO: Sample of how to use OpenMAX to decode audio/video/images, etc.''&lt;br /&gt;
&lt;br /&gt;
== Other Programming Languages ==&lt;br /&gt;
'''Python'''&lt;br /&gt;
* [https://bitbucket.org/bryancole/rpi_vid_core/ RPi_Vid_Core] - ''python bindings of EGL, OpenGL ES, OpenVG and bcm_host for Raspberry Pi implemented using Cython''&lt;br /&gt;
&lt;br /&gt;
== Programs designed to work with the Raspberry Pi's VideoCore APIs ==&lt;br /&gt;
* '''[https://github.com/huceke/omxplayer omxplayer]''' - ''a command line a/v player for the Raspberry Pi utilising the OpenMAX APIs and ffmpeg''&lt;br /&gt;
* '''[http://wiki.xbmc.org/index.php?title=Raspberry_Pi XBMC]''' - ''a media center, omxplayer's &amp;quot;big brother&amp;quot; ''&lt;br /&gt;
* '''[http://nccastaff.bournemouth.ac.uk/jmacey/GraphicsLib/piNGL/index.html piNGL]''' - ''port of the NGL graphics library to Raspberry Pi''&lt;br /&gt;
* '''[http://qt-project.org/wiki/Qt-RaspberryPi Qt on Pi]''' - ''Raspberry Pi port of the Qt toolkit''&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Template:Raspberry Pi}}&lt;br /&gt;
[[Category: RaspberryPi]]&lt;/div&gt;</summary>
		<author><name>Adammw</name></author>	</entry>

	<entry>
		<id>http://elinux.org/RPi_VideoCore_APIs</id>
		<title>RPi VideoCore APIs</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/RPi_VideoCore_APIs"/>
				<updated>2012-06-20T18:31:53Z</updated>
		
		<summary type="html">&lt;p&gt;Adammw: Add libbcm_host section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:RPi_Software}}&lt;br /&gt;
&lt;br /&gt;
The Raspberry Pi contains a Broadcom [http://en.wikipedia.org/wiki/Videocore VideoCore] IV GPU providing OpenGL ES 1.1, OpenGL ES 2.0, hardware-accelerated OpenVG 1.1, Open EGL, OpenMAX and 1080p30 H.264 high-profile decode. There are 24 GFLOPS of general purpose compute and a bunch of texture filtering and DMA infrastructure. Eben worked on the architecture team for this and the Raspberry Pi team are looking at how they can make some of the proprietary features available to application programmers. &lt;br /&gt;
&lt;br /&gt;
Currently C header files and libraries for many of the Broadcom APIs are located in &amp;lt;code&amp;gt;/opt/vc/include&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;/opt/vc/lib&amp;lt;/code&amp;gt; respectively, or available from [https://github.com/raspberrypi/firmware GitHub] within the same directory structure. Some documentation is contained within comments in the header files, as well as documentation for the OpenMAX IL components in the [https://github.com/raspberrypi/firmware/tree/master/documentation/ilcomponents documentation directory on Github], however it is severely lacking and difficult to understand in a general sense for people wanting to experiment with the device due to it being proprietary. As such, we encourage you to [http://elinux.org/index.php?title=RPi_VideoCore_APIs&amp;amp;action=edit edit this page] to help us build a much better open documentation.&lt;br /&gt;
&lt;br /&gt;
I would like to add a picture of http://en.wikipedia.org/wiki/File:Raspberrypi_video_API_03.svg here but the stupid Wiki system keeps crashing on me so you'll have to follow the link. Fucking varnish.&lt;br /&gt;
&lt;br /&gt;
==Quirks==&lt;br /&gt;
&lt;br /&gt;
* The Raspberry Pi requires that the &amp;lt;code&amp;gt;bcm_host_init()&amp;lt;/code&amp;gt; function is called first before any GPU calls can be made.&lt;br /&gt;
* Before calling any of the vc_* functions, you need to initialise vcos and vchi, and make a vchi connection, before then calling the corresponding vc_*_init function for the part of the library you want to use: &amp;lt;code&amp;gt;vc_vchi_dispmanx_init&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;vc_vchi_tv_init&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;vc_vchi_cec_init&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;vc_vchi_gencmd_init&amp;lt;/code&amp;gt;.&amp;lt;br /&amp;gt;(See this [https://github.com/adammw/rpi-output-swapper/blob/master/video_swap.c#L152-169 sample code] which does initialisation for vc_tvservice_* APIs)&lt;br /&gt;
* &amp;lt;code&amp;gt;[[#graphics_get_display_size|graphics_get_display_size()]]&amp;lt;/code&amp;gt; is a broadcom-specific function&lt;br /&gt;
&lt;br /&gt;
== Sample Programs==&lt;br /&gt;
The Raspberry Pi comes with 7 sample programs and two helper libraries in the /opt/vc/src/hello_pi directory showing some of the system's capabilities and sample code. &lt;br /&gt;
===hello_video===&lt;br /&gt;
This sample decodes h264 video using the OpenMAX APIs and the ilclient library, and is distributed with a short scene of [http://www.bigbuckbunny.org/ Big Buck Bunny]&lt;br /&gt;
===ilclient helper library===&lt;br /&gt;
This library is described as:&lt;br /&gt;
&amp;lt;code&amp;gt;This API defines helper functions for writing IL clients.&lt;br /&gt;
 *&lt;br /&gt;
 * This file defines an IL client side library.  This is useful when&lt;br /&gt;
 * writing IL clients, since there tends to be much repeated and&lt;br /&gt;
 * common code across both single and multiple clients.  This library&lt;br /&gt;
 * seeks to remove that common code and abstract some of the&lt;br /&gt;
 * interactions with components.  There is a wrapper around a&lt;br /&gt;
 * component and tunnel, and some operations can be done on lists of&lt;br /&gt;
 * these.  The callbacks from components are handled, and specific&lt;br /&gt;
 * events can be checked or waited for.&lt;br /&gt;
 */&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Libraries ==&lt;br /&gt;
=== libbcm_host ===&lt;br /&gt;
bcm_host is the Broadcom hardware interface library.&lt;br /&gt;
&lt;br /&gt;
=== vc_dispmanx_*===&lt;br /&gt;
Dispmanx is a windowing system in the process of being deprecated in favour of [http://www.khronos.org/openwf/ OpenWF] (or similar), however dispmanx is still used in all API demos and it's replacement may not yet be available. &amp;lt;ref&amp;gt;http://www.raspberrypi.org/phpBB3/viewtopic.php?t=5621&amp;amp;p=77981&amp;lt;/ref&amp;gt;(confirmation required?)&lt;br /&gt;
=== vc_tvservice_* ===&lt;br /&gt;
These APIs allow controlling the HDMI and SDTV video outputs of the Raspberry Pi.&lt;br /&gt;
&lt;br /&gt;
''TODO: Describe better''&lt;br /&gt;
=== vc_cec_* ===&lt;br /&gt;
''TODO''&lt;br /&gt;
=== vc_gencmd_* ===&lt;br /&gt;
''TODO''&lt;br /&gt;
=== EGL ===&lt;br /&gt;
[http://www.khronos.org/egl/ EGL (Native Platform Graphics Interface)] is an interface between Khronos rendering APIs such as OpenGL ES or OpenVG and the underlying native platform. The Raspberry Pi supports [http://www.khronos.org/registry/egl/specs/eglspec.1.4.20110406.pdf EGL Version 1.4] and the following EGL extensions (links are to EGL registry documentation):&amp;lt;ref name=&amp;quot;egl-info&amp;quot;&amp;gt;eglinfo, http://www.raspberrypi.org/phpBB3/viewtopic.php?p=35942#p35942 , http://www.raspberrypi.org/phpBB3/viewtopic.php?p=36318#p36318&amp;lt;/ref&amp;gt;&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_image.txt EGL_KHR_image]&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_image_base.txt EGL_KHR_image_base]&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_image_pixmap.txt EGL_KHR_image_pixmap]&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_vg_parent_image.txt EGL_KHR_vg_parent_image]&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_gl_image.txt EGL_KHR_gl_texture_2D_image]&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_gl_image.txt EGL_KHR_gl_texture_cubemap_image]&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_lock_surface.txt EGL_KHR_lock_surface]&lt;br /&gt;
&lt;br /&gt;
==== Samples====&lt;br /&gt;
&lt;br /&gt;
See [http://jonmacey.blogspot.com.au/2012/05/getting-started-with-egl-on-raspberry.html Getting Started with EGL] post by Jon Macey. &lt;br /&gt;
Extended documentation available in the [http://www.khronos.org/registry/egl/specs/eglspec.1.4.20110406.pdf EGL Version 1.4 Specification] and Simple Reference available in the [http://www.khronos.org/files/egl-1-4-quick-reference-card.pdf EGL 1.4 API Quick Reference Card].&lt;br /&gt;
&lt;br /&gt;
==== Function Documentation====&lt;br /&gt;
====={{anchor|graphics_get_display_size}}&amp;lt;code&amp;gt;int32_t graphics_get_display_size( const uint16_t display_number, uint32_t *width, uint32_t *height);&amp;lt;/code&amp;gt;=====&lt;br /&gt;
&lt;br /&gt;
This function allows you to get the size of the display, and is often used in creating an EGL Surface. width and height are pointers that you pass in to where you want the response values to be written to, display number 0 is usually used for the Raspberry Pi. return value of &amp;gt;= 0 indicates success, &amp;lt;0 indicates failure.&lt;br /&gt;
&lt;br /&gt;
This function is implemented in libbcm_host, and the implementation has been made [https://github.com/raspberrypi/firmware/issues/14#issuecomment-5652185 public] showing that it internally calls the vc_dispmanx_display_get_info function to get the width and height of the current mode.&lt;br /&gt;
&lt;br /&gt;
Bugs present in early versions of the firmware caused this function to always return 1920x1080, however this can easily be fixed by updating the firmware with [https://github.com/Hexxeh/rpi-update Hexxeh's rpi-update] (see the [[R-Pi_Troubleshooting#Updating_firmware|Updating firmware]] page for help).&amp;lt;ref&amp;gt;http://www.raspberrypi.org/phpBB3/viewtopic.php?f=68&amp;amp;t=8252&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;https://github.com/raspberrypi/firmware/issues/14&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== OpenGL ES ===&lt;br /&gt;
The Raspberry Pi supports OpenGL ES 2.0 with the following extensions: &amp;lt;ref name=&amp;quot;egl-info&amp;quot; /&amp;gt;&lt;br /&gt;
*GL_OES_compressed_ETC1_RGB8_texture&lt;br /&gt;
*GL_OES_compressed_paletted_texture&lt;br /&gt;
*GL_OES_texture_npot GL_OES_depth24&lt;br /&gt;
*GL_OES_vertex_half_float&lt;br /&gt;
*GL_OES_EGL_image&lt;br /&gt;
*GL_OES_EGL_image_external&lt;br /&gt;
*GL_EXT_discard_framebuffer&lt;br /&gt;
*GL_OES_rgb8_rgba8&lt;br /&gt;
*GL_OES_depth32&lt;br /&gt;
*GL_OES_mapbuffer&lt;br /&gt;
*GL_EXT_texture_format_BGRA8888&lt;br /&gt;
*GL_APPLE_rgb_422&lt;br /&gt;
*GL_EXT_debug_marker&lt;br /&gt;
 &lt;br /&gt;
''TODO: Sample of how to use/initalise OpenGL ES''&lt;br /&gt;
&lt;br /&gt;
=== OpenMAX ===&lt;br /&gt;
See [https://github.com/raspberrypi/firmware/tree/master/documentation/ilcomponents /documentation/ilcomponents] on GitHub firmware repository for official documentation.&lt;br /&gt;
&lt;br /&gt;
''TODO: Sample of how to use OpenMAX to decode audio/video/images, etc.''&lt;br /&gt;
&lt;br /&gt;
== Other Programming Languages ==&lt;br /&gt;
'''Python'''&lt;br /&gt;
* [https://bitbucket.org/bryancole/rpi_vid_core/ RPi_Vid_Core] - ''python bindings of EGL, OpenGL ES, OpenVG and bcm_host for Raspberry Pi implemented using Cython''&lt;br /&gt;
&lt;br /&gt;
== Programs designed to work with the Raspberry Pi's VideoCore APIs ==&lt;br /&gt;
* '''[https://github.com/huceke/omxplayer omxplayer]''' - ''a command line a/v player for the Raspberry Pi utilising the OpenMAX APIs and ffmpeg''&lt;br /&gt;
* '''[http://wiki.xbmc.org/index.php?title=Raspberry_Pi XBMC]''' - ''a media center, omxplayer's &amp;quot;big brother&amp;quot; ''&lt;br /&gt;
* '''[http://nccastaff.bournemouth.ac.uk/jmacey/GraphicsLib/piNGL/index.html piNGL]''' - ''port of the NGL graphics library to Raspberry Pi''&lt;br /&gt;
* '''[http://qt-project.org/wiki/Qt-RaspberryPi Qt on Pi]''' - ''Raspberry Pi port of the Qt toolkit''&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Template:Raspberry Pi}}&lt;br /&gt;
[[Category: RaspberryPi]]&lt;/div&gt;</summary>
		<author><name>Adammw</name></author>	</entry>

	<entry>
		<id>http://elinux.org/RPi_VideoCore_APIs</id>
		<title>RPi VideoCore APIs</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/RPi_VideoCore_APIs"/>
				<updated>2012-06-20T18:30:54Z</updated>
		
		<summary type="html">&lt;p&gt;Adammw: Add Python binding, RPi_Vid_Core&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:RPi_Software}}&lt;br /&gt;
&lt;br /&gt;
The Raspberry Pi contains a Broadcom [http://en.wikipedia.org/wiki/Videocore VideoCore] IV GPU providing OpenGL ES 1.1, OpenGL ES 2.0, hardware-accelerated OpenVG 1.1, Open EGL, OpenMAX and 1080p30 H.264 high-profile decode. There are 24 GFLOPS of general purpose compute and a bunch of texture filtering and DMA infrastructure. Eben worked on the architecture team for this and the Raspberry Pi team are looking at how they can make some of the proprietary features available to application programmers. &lt;br /&gt;
&lt;br /&gt;
Currently C header files and libraries for many of the Broadcom APIs are located in &amp;lt;code&amp;gt;/opt/vc/include&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;/opt/vc/lib&amp;lt;/code&amp;gt; respectively, or available from [https://github.com/raspberrypi/firmware GitHub] within the same directory structure. Some documentation is contained within comments in the header files, as well as documentation for the OpenMAX IL components in the [https://github.com/raspberrypi/firmware/tree/master/documentation/ilcomponents documentation directory on Github], however it is severely lacking and difficult to understand in a general sense for people wanting to experiment with the device due to it being proprietary. As such, we encourage you to [http://elinux.org/index.php?title=RPi_VideoCore_APIs&amp;amp;action=edit edit this page] to help us build a much better open documentation.&lt;br /&gt;
&lt;br /&gt;
I would like to add a picture of http://en.wikipedia.org/wiki/File:Raspberrypi_video_API_03.svg here but the stupid Wiki system keeps crashing on me so you'll have to follow the link. Fucking varnish.&lt;br /&gt;
&lt;br /&gt;
==Quirks==&lt;br /&gt;
&lt;br /&gt;
* The Raspberry Pi requires that the &amp;lt;code&amp;gt;bcm_host_init()&amp;lt;/code&amp;gt; function is called first before any GPU calls can be made.&lt;br /&gt;
* Before calling any of the vc_* functions, you need to initialise vcos and vchi, and make a vchi connection, before then calling the corresponding vc_*_init function for the part of the library you want to use: &amp;lt;code&amp;gt;vc_vchi_dispmanx_init&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;vc_vchi_tv_init&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;vc_vchi_cec_init&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;vc_vchi_gencmd_init&amp;lt;/code&amp;gt;.&amp;lt;br /&amp;gt;(See this [https://github.com/adammw/rpi-output-swapper/blob/master/video_swap.c#L152-169 sample code] which does initialisation for vc_tvservice_* APIs)&lt;br /&gt;
* &amp;lt;code&amp;gt;[[#graphics_get_display_size|graphics_get_display_size()]]&amp;lt;/code&amp;gt; is a broadcom-specific function&lt;br /&gt;
&lt;br /&gt;
== Sample Programs==&lt;br /&gt;
The Raspberry Pi comes with 7 sample programs and two helper libraries in the /opt/vc/src/hello_pi directory showing some of the system's capabilities and sample code. &lt;br /&gt;
===hello_video===&lt;br /&gt;
This sample decodes h264 video using the OpenMAX APIs and the ilclient library, and is distributed with a short scene of [http://www.bigbuckbunny.org/ Big Buck Bunny]&lt;br /&gt;
===ilclient helper library===&lt;br /&gt;
This library is described as:&lt;br /&gt;
&amp;lt;code&amp;gt;This API defines helper functions for writing IL clients.&lt;br /&gt;
 *&lt;br /&gt;
 * This file defines an IL client side library.  This is useful when&lt;br /&gt;
 * writing IL clients, since there tends to be much repeated and&lt;br /&gt;
 * common code across both single and multiple clients.  This library&lt;br /&gt;
 * seeks to remove that common code and abstract some of the&lt;br /&gt;
 * interactions with components.  There is a wrapper around a&lt;br /&gt;
 * component and tunnel, and some operations can be done on lists of&lt;br /&gt;
 * these.  The callbacks from components are handled, and specific&lt;br /&gt;
 * events can be checked or waited for.&lt;br /&gt;
 */&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Libraries ==&lt;br /&gt;
=== vc_dispmanx_*===&lt;br /&gt;
Dispmanx is a windowing system in the process of being deprecated in favour of [http://www.khronos.org/openwf/ OpenWF] (or similar), however dispmanx is still used in all API demos and it's replacement may not yet be available. &amp;lt;ref&amp;gt;http://www.raspberrypi.org/phpBB3/viewtopic.php?t=5621&amp;amp;p=77981&amp;lt;/ref&amp;gt;(confirmation required?)&lt;br /&gt;
=== vc_tvservice_* ===&lt;br /&gt;
These APIs allow controlling the HDMI and SDTV video outputs of the Raspberry Pi.&lt;br /&gt;
&lt;br /&gt;
''TODO: Describe better''&lt;br /&gt;
=== vc_cec_* ===&lt;br /&gt;
''TODO''&lt;br /&gt;
=== vc_gencmd_* ===&lt;br /&gt;
''TODO''&lt;br /&gt;
=== EGL ===&lt;br /&gt;
[http://www.khronos.org/egl/ EGL (Native Platform Graphics Interface)] is an interface between Khronos rendering APIs such as OpenGL ES or OpenVG and the underlying native platform. The Raspberry Pi supports [http://www.khronos.org/registry/egl/specs/eglspec.1.4.20110406.pdf EGL Version 1.4] and the following EGL extensions (links are to EGL registry documentation):&amp;lt;ref name=&amp;quot;egl-info&amp;quot;&amp;gt;eglinfo, http://www.raspberrypi.org/phpBB3/viewtopic.php?p=35942#p35942 , http://www.raspberrypi.org/phpBB3/viewtopic.php?p=36318#p36318&amp;lt;/ref&amp;gt;&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_image.txt EGL_KHR_image]&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_image_base.txt EGL_KHR_image_base]&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_image_pixmap.txt EGL_KHR_image_pixmap]&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_vg_parent_image.txt EGL_KHR_vg_parent_image]&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_gl_image.txt EGL_KHR_gl_texture_2D_image]&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_gl_image.txt EGL_KHR_gl_texture_cubemap_image]&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_lock_surface.txt EGL_KHR_lock_surface]&lt;br /&gt;
&lt;br /&gt;
==== Samples====&lt;br /&gt;
&lt;br /&gt;
See [http://jonmacey.blogspot.com.au/2012/05/getting-started-with-egl-on-raspberry.html Getting Started with EGL] post by Jon Macey. &lt;br /&gt;
Extended documentation available in the [http://www.khronos.org/registry/egl/specs/eglspec.1.4.20110406.pdf EGL Version 1.4 Specification] and Simple Reference available in the [http://www.khronos.org/files/egl-1-4-quick-reference-card.pdf EGL 1.4 API Quick Reference Card].&lt;br /&gt;
&lt;br /&gt;
==== Function Documentation====&lt;br /&gt;
====={{anchor|graphics_get_display_size}}&amp;lt;code&amp;gt;int32_t graphics_get_display_size( const uint16_t display_number, uint32_t *width, uint32_t *height);&amp;lt;/code&amp;gt;=====&lt;br /&gt;
&lt;br /&gt;
This function allows you to get the size of the display, and is often used in creating an EGL Surface. width and height are pointers that you pass in to where you want the response values to be written to, display number 0 is usually used for the Raspberry Pi. return value of &amp;gt;= 0 indicates success, &amp;lt;0 indicates failure.&lt;br /&gt;
&lt;br /&gt;
This function is implemented in libbcm_host, and the implementation has been made [https://github.com/raspberrypi/firmware/issues/14#issuecomment-5652185 public] showing that it internally calls the vc_dispmanx_display_get_info function to get the width and height of the current mode.&lt;br /&gt;
&lt;br /&gt;
Bugs present in early versions of the firmware caused this function to always return 1920x1080, however this can easily be fixed by updating the firmware with [https://github.com/Hexxeh/rpi-update Hexxeh's rpi-update] (see the [[R-Pi_Troubleshooting#Updating_firmware|Updating firmware]] page for help).&amp;lt;ref&amp;gt;http://www.raspberrypi.org/phpBB3/viewtopic.php?f=68&amp;amp;t=8252&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;https://github.com/raspberrypi/firmware/issues/14&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== OpenGL ES ===&lt;br /&gt;
The Raspberry Pi supports OpenGL ES 2.0 with the following extensions: &amp;lt;ref name=&amp;quot;egl-info&amp;quot; /&amp;gt;&lt;br /&gt;
*GL_OES_compressed_ETC1_RGB8_texture&lt;br /&gt;
*GL_OES_compressed_paletted_texture&lt;br /&gt;
*GL_OES_texture_npot GL_OES_depth24&lt;br /&gt;
*GL_OES_vertex_half_float&lt;br /&gt;
*GL_OES_EGL_image&lt;br /&gt;
*GL_OES_EGL_image_external&lt;br /&gt;
*GL_EXT_discard_framebuffer&lt;br /&gt;
*GL_OES_rgb8_rgba8&lt;br /&gt;
*GL_OES_depth32&lt;br /&gt;
*GL_OES_mapbuffer&lt;br /&gt;
*GL_EXT_texture_format_BGRA8888&lt;br /&gt;
*GL_APPLE_rgb_422&lt;br /&gt;
*GL_EXT_debug_marker&lt;br /&gt;
 &lt;br /&gt;
''TODO: Sample of how to use/initalise OpenGL ES''&lt;br /&gt;
&lt;br /&gt;
=== OpenMAX ===&lt;br /&gt;
See [https://github.com/raspberrypi/firmware/tree/master/documentation/ilcomponents /documentation/ilcomponents] on GitHub firmware repository for official documentation.&lt;br /&gt;
&lt;br /&gt;
''TODO: Sample of how to use OpenMAX to decode audio/video/images, etc.''&lt;br /&gt;
&lt;br /&gt;
== Other Programming Languages ==&lt;br /&gt;
'''Python'''&lt;br /&gt;
* [https://bitbucket.org/bryancole/rpi_vid_core/ RPi_Vid_Core] - ''python bindings of EGL, OpenGL ES, OpenVG and bcm_host for Raspberry Pi implemented using Cython''&lt;br /&gt;
&lt;br /&gt;
== Programs designed to work with the Raspberry Pi's VideoCore APIs ==&lt;br /&gt;
* '''[https://github.com/huceke/omxplayer omxplayer]''' - ''a command line a/v player for the Raspberry Pi utilising the OpenMAX APIs and ffmpeg''&lt;br /&gt;
* '''[http://wiki.xbmc.org/index.php?title=Raspberry_Pi XBMC]''' - ''a media center, omxplayer's &amp;quot;big brother&amp;quot; ''&lt;br /&gt;
* '''[http://nccastaff.bournemouth.ac.uk/jmacey/GraphicsLib/piNGL/index.html piNGL]''' - ''port of the NGL graphics library to Raspberry Pi''&lt;br /&gt;
* '''[http://qt-project.org/wiki/Qt-RaspberryPi Qt on Pi]''' - ''Raspberry Pi port of the Qt toolkit''&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Template:Raspberry Pi}}&lt;br /&gt;
[[Category: RaspberryPi]]&lt;/div&gt;</summary>
		<author><name>Adammw</name></author>	</entry>

	<entry>
		<id>http://elinux.org/RPi_VideoCore_APIs</id>
		<title>RPi VideoCore APIs</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/RPi_VideoCore_APIs"/>
				<updated>2012-06-20T16:13:53Z</updated>
		
		<summary type="html">&lt;p&gt;Adammw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:RPi_Software}}&lt;br /&gt;
&lt;br /&gt;
The Raspberry Pi contains a Broadcom [http://en.wikipedia.org/wiki/Videocore VideoCore] IV GPU providing OpenGL ES 1.1, OpenGL ES 2.0, hardware-accelerated OpenVG 1.1, Open EGL, OpenMAX and 1080p30 H.264 high-profile decode. There are 24 GFLOPS of general purpose compute and a bunch of texture filtering and DMA infrastructure. Eben worked on the architecture team for this and the Raspberry Pi team are looking at how they can make some of the proprietary features available to application programmers. &lt;br /&gt;
&lt;br /&gt;
Currently C header files and libraries for many of the Broadcom APIs are located in &amp;lt;code&amp;gt;/opt/vc/include&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;/opt/vc/lib&amp;lt;/code&amp;gt; respectively, or available from [https://github.com/raspberrypi/firmware GitHub] within the same directory structure. Some documentation is contained within comments in the header files, as well as documentation for the OpenMAX IL components in the [https://github.com/raspberrypi/firmware/tree/master/documentation/ilcomponents documentation directory on Github], however it is severely lacking and difficult to understand in a general sense for people wanting to experiment with the device due to it being proprietary. As such, we encourage you to [http://elinux.org/index.php?title=RPi_VideoCore_APIs&amp;amp;action=edit edit this page] to help us build a much better open documentation.&lt;br /&gt;
&lt;br /&gt;
I would like to add a picture of http://en.wikipedia.org/wiki/File:Raspberrypi_video_API_03.svg here but the stupid Wiki system keeps crashing on me so you'll have to follow the link. Fucking varnish.&lt;br /&gt;
&lt;br /&gt;
==Quirks==&lt;br /&gt;
&lt;br /&gt;
* The Raspberry Pi requires that the &amp;lt;code&amp;gt;bcm_host_init()&amp;lt;/code&amp;gt; function is called first before any GPU calls can be made.&lt;br /&gt;
* Before calling any of the vc_* functions, you need to initialise vcos and vchi, and make a vchi connection, before then calling the corresponding vc_*_init function for the part of the library you want to use: &amp;lt;code&amp;gt;vc_vchi_dispmanx_init&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;vc_vchi_tv_init&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;vc_vchi_cec_init&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;vc_vchi_gencmd_init&amp;lt;/code&amp;gt;.&amp;lt;br /&amp;gt;(See this [https://github.com/adammw/rpi-output-swapper/blob/master/video_swap.c#L152-169 sample code] which does initialisation for vc_tvservice_* APIs)&lt;br /&gt;
* &amp;lt;code&amp;gt;[[#graphics_get_display_size|graphics_get_display_size()]]&amp;lt;/code&amp;gt; is a broadcom-specific function&lt;br /&gt;
&lt;br /&gt;
== Sample Programs==&lt;br /&gt;
The Raspberry Pi comes with 7 sample programs and two helper libraries in the /opt/vc/src/hello_pi directory showing some of the system's capabilities and sample code. &lt;br /&gt;
===hello_video===&lt;br /&gt;
This sample decodes h264 video using the OpenMAX APIs and the ilclient library, and is distributed with a short scene of [http://www.bigbuckbunny.org/ Big Buck Bunny]&lt;br /&gt;
===ilclient helper library===&lt;br /&gt;
This library is described as:&lt;br /&gt;
&amp;lt;code&amp;gt;This API defines helper functions for writing IL clients.&lt;br /&gt;
 *&lt;br /&gt;
 * This file defines an IL client side library.  This is useful when&lt;br /&gt;
 * writing IL clients, since there tends to be much repeated and&lt;br /&gt;
 * common code across both single and multiple clients.  This library&lt;br /&gt;
 * seeks to remove that common code and abstract some of the&lt;br /&gt;
 * interactions with components.  There is a wrapper around a&lt;br /&gt;
 * component and tunnel, and some operations can be done on lists of&lt;br /&gt;
 * these.  The callbacks from components are handled, and specific&lt;br /&gt;
 * events can be checked or waited for.&lt;br /&gt;
 */&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Libraries ==&lt;br /&gt;
=== vc_dispmanx_*===&lt;br /&gt;
Dispmanx is a windowing system in the process of being deprecated in favour of [http://www.khronos.org/openwf/ OpenWF] (or similar), however dispmanx is still used in all API demos and it's replacement may not yet be available. &amp;lt;ref&amp;gt;http://www.raspberrypi.org/phpBB3/viewtopic.php?t=5621&amp;amp;p=77981&amp;lt;/ref&amp;gt;(confirmation required?)&lt;br /&gt;
=== vc_tvservice_* ===&lt;br /&gt;
These APIs allow controlling the HDMI and SDTV video outputs of the Raspberry Pi.&lt;br /&gt;
&lt;br /&gt;
''TODO: Describe better''&lt;br /&gt;
=== vc_cec_* ===&lt;br /&gt;
''TODO''&lt;br /&gt;
=== vc_gencmd_* ===&lt;br /&gt;
''TODO''&lt;br /&gt;
=== EGL ===&lt;br /&gt;
[http://www.khronos.org/egl/ EGL (Native Platform Graphics Interface)] is an interface between Khronos rendering APIs such as OpenGL ES or OpenVG and the underlying native platform. The Raspberry Pi supports [http://www.khronos.org/registry/egl/specs/eglspec.1.4.20110406.pdf EGL Version 1.4] and the following EGL extensions (links are to EGL registry documentation):&amp;lt;ref name=&amp;quot;egl-info&amp;quot;&amp;gt;eglinfo, http://www.raspberrypi.org/phpBB3/viewtopic.php?p=35942#p35942 , http://www.raspberrypi.org/phpBB3/viewtopic.php?p=36318#p36318&amp;lt;/ref&amp;gt;&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_image.txt EGL_KHR_image]&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_image_base.txt EGL_KHR_image_base]&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_image_pixmap.txt EGL_KHR_image_pixmap]&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_vg_parent_image.txt EGL_KHR_vg_parent_image]&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_gl_image.txt EGL_KHR_gl_texture_2D_image]&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_gl_image.txt EGL_KHR_gl_texture_cubemap_image]&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_lock_surface.txt EGL_KHR_lock_surface]&lt;br /&gt;
&lt;br /&gt;
==== Samples====&lt;br /&gt;
&lt;br /&gt;
See [http://jonmacey.blogspot.com.au/2012/05/getting-started-with-egl-on-raspberry.html Getting Started with EGL] post by Jon Macey. &lt;br /&gt;
Extended documentation available in the [http://www.khronos.org/registry/egl/specs/eglspec.1.4.20110406.pdf EGL Version 1.4 Specification] and Simple Reference available in the [http://www.khronos.org/files/egl-1-4-quick-reference-card.pdf EGL 1.4 API Quick Reference Card].&lt;br /&gt;
&lt;br /&gt;
==== Function Documentation====&lt;br /&gt;
====={{anchor|graphics_get_display_size}}&amp;lt;code&amp;gt;int32_t graphics_get_display_size( const uint16_t display_number, uint32_t *width, uint32_t *height);&amp;lt;/code&amp;gt;=====&lt;br /&gt;
&lt;br /&gt;
This function allows you to get the size of the display, and is often used in creating an EGL Surface. width and height are pointers that you pass in to where you want the response values to be written to, display number 0 is usually used for the Raspberry Pi. return value of &amp;gt;= 0 indicates success, &amp;lt;0 indicates failure.&lt;br /&gt;
&lt;br /&gt;
This function is implemented in libbcm_host, and the implementation has been made [https://github.com/raspberrypi/firmware/issues/14#issuecomment-5652185 public] showing that it internally calls the vc_dispmanx_display_get_info function to get the width and height of the current mode.&lt;br /&gt;
&lt;br /&gt;
Bugs present in early versions of the firmware caused this function to always return 1920x1080, however this can easily be fixed by updating the firmware with [https://github.com/Hexxeh/rpi-update Hexxeh's rpi-update] (see the [[R-Pi_Troubleshooting#Updating_firmware|Updating firmware]] page for help).&amp;lt;ref&amp;gt;http://www.raspberrypi.org/phpBB3/viewtopic.php?f=68&amp;amp;t=8252&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;https://github.com/raspberrypi/firmware/issues/14&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== OpenGL ES ===&lt;br /&gt;
The Raspberry Pi supports OpenGL ES 2.0 with the following extensions: &amp;lt;ref name=&amp;quot;egl-info&amp;quot; /&amp;gt;&lt;br /&gt;
*GL_OES_compressed_ETC1_RGB8_texture&lt;br /&gt;
*GL_OES_compressed_paletted_texture&lt;br /&gt;
*GL_OES_texture_npot GL_OES_depth24&lt;br /&gt;
*GL_OES_vertex_half_float&lt;br /&gt;
*GL_OES_EGL_image&lt;br /&gt;
*GL_OES_EGL_image_external&lt;br /&gt;
*GL_EXT_discard_framebuffer&lt;br /&gt;
*GL_OES_rgb8_rgba8&lt;br /&gt;
*GL_OES_depth32&lt;br /&gt;
*GL_OES_mapbuffer&lt;br /&gt;
*GL_EXT_texture_format_BGRA8888&lt;br /&gt;
*GL_APPLE_rgb_422&lt;br /&gt;
*GL_EXT_debug_marker&lt;br /&gt;
 &lt;br /&gt;
''TODO: Sample of how to use/initalise OpenGL ES''&lt;br /&gt;
&lt;br /&gt;
=== OpenMAX ===&lt;br /&gt;
See [https://github.com/raspberrypi/firmware/tree/master/documentation/ilcomponents /documentation/ilcomponents] on GitHub firmware repository for official documentation.&lt;br /&gt;
&lt;br /&gt;
''TODO: Sample of how to use OpenMAX to decode audio/video/images, etc.''&lt;br /&gt;
&lt;br /&gt;
== Other Programming Languages ==&lt;br /&gt;
&lt;br /&gt;
''TODO: Find and list any libraries written for other languages (e.g. Python) that interface with the Pi's GPU''&lt;br /&gt;
&lt;br /&gt;
== Programs designed to work with the Raspberry Pi's VideoCore APIs ==&lt;br /&gt;
* '''[https://github.com/huceke/omxplayer omxplayer]''' - ''a command line a/v player for the Raspberry Pi utilising the OpenMAX APIs and ffmpeg''&lt;br /&gt;
* '''[http://wiki.xbmc.org/index.php?title=Raspberry_Pi XBMC]''' - ''a media center, omxplayer's &amp;quot;big brother&amp;quot; ''&lt;br /&gt;
* '''[http://nccastaff.bournemouth.ac.uk/jmacey/GraphicsLib/piNGL/index.html piNGL]''' - ''port of the NGL graphics library to Raspberry Pi''&lt;br /&gt;
* '''[http://qt-project.org/wiki/Qt-RaspberryPi Qt on Pi]''' - ''Raspberry Pi port of the Qt toolkit''&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Template:Raspberry Pi}}&lt;br /&gt;
[[Category: RaspberryPi]]&lt;/div&gt;</summary>
		<author><name>Adammw</name></author>	</entry>

	<entry>
		<id>http://elinux.org/File:Raspberrypi_video_API_03.svg</id>
		<title>File:Raspberrypi video API 03.svg</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/File:Raspberrypi_video_API_03.svg"/>
				<updated>2012-06-20T15:54:48Z</updated>
		
		<summary type="html">&lt;p&gt;Adammw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Source: http://commons.wikimedia.org/wiki/File:Raspberrypi_video_API_03.svg&lt;/div&gt;</summary>
		<author><name>Adammw</name></author>	</entry>

	<entry>
		<id>http://elinux.org/File:Raspberrypi_video_API_03.svg</id>
		<title>File:Raspberrypi video API 03.svg</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/File:Raspberrypi_video_API_03.svg"/>
				<updated>2012-06-20T15:52:52Z</updated>
		
		<summary type="html">&lt;p&gt;Adammw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Adammw</name></author>	</entry>

	<entry>
		<id>http://elinux.org/RPi_VideoCore_APIs</id>
		<title>RPi VideoCore APIs</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/RPi_VideoCore_APIs"/>
				<updated>2012-06-20T15:28:38Z</updated>
		
		<summary type="html">&lt;p&gt;Adammw: Briefly outline the secret initialisation sauce that makes the vc stuff work&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:RPi_Software}}&lt;br /&gt;
&lt;br /&gt;
The Raspberry Pi contains a Broadcom [http://en.wikipedia.org/wiki/Videocore VideoCore] IV GPU providing OpenGL ES 1.1, OpenGL ES 2.0, hardware-accelerated OpenVG 1.1, Open EGL, OpenMAX and 1080p30 H.264 high-profile decode. There are 24 GFLOPS of general purpose compute and a bunch of texture filtering and DMA infrastructure. Eben worked on the architecture team for this and the Raspberry Pi team are looking at how they can make some of the proprietary features available to application programmers. &lt;br /&gt;
&lt;br /&gt;
Currently C header files and libraries for many of the Broadcom APIs are located in &amp;lt;code&amp;gt;/opt/vc/include&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;/opt/vc/lib&amp;lt;/code&amp;gt; respectively, or available from [https://github.com/raspberrypi/firmware GitHub] within the same directory structure. Some documentation is contained within comments in the header files, as well as documentation for the OpenMAX IL components in the [https://github.com/raspberrypi/firmware/tree/master/documentation/ilcomponents documentation directory on Github], however it is severely lacking and difficult to understand in a general sense for people wanting to experiment with the device due to it being proprietary. As such, we encourage you to [http://elinux.org/index.php?title=RPi_VideoCore_APIs&amp;amp;action=edit edit this page] to help us build a much better open documentation.&lt;br /&gt;
&lt;br /&gt;
==Quirks==&lt;br /&gt;
&lt;br /&gt;
* The Raspberry Pi requires that the &amp;lt;code&amp;gt;bcm_host_init()&amp;lt;/code&amp;gt; function is called first before any GPU calls can be made.&lt;br /&gt;
* Before calling any of the vc_* functions, you need to initialise vcos and vchi, and make a vchi connection, before then calling the corresponding vc_*_init function for the part of the library you want to use: &amp;lt;code&amp;gt;vc_vchi_dispmanx_init&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;vc_vchi_tv_init&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;vc_vchi_cec_init&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;vc_vchi_gencmd_init&amp;lt;/code&amp;gt;.&amp;lt;br /&amp;gt;(See this [https://github.com/adammw/rpi-output-swapper/blob/master/video_swap.c#L152-169 sample code] which does initialisation for vc_tvservice_* APIs)&lt;br /&gt;
* &amp;lt;code&amp;gt;[[#graphics_get_display_size|graphics_get_display_size()]]&amp;lt;/code&amp;gt; is a broadcom-specific function&lt;br /&gt;
&lt;br /&gt;
== Sample Programs==&lt;br /&gt;
The Raspberry Pi comes with 7 sample programs and two helper libraries in the /opt/vc/src/hello_pi directory showing some of the system's capabilities and sample code. &lt;br /&gt;
===hello_video===&lt;br /&gt;
This sample decodes h264 video using the OpenMAX APIs and the ilclient library, and is distributed with a short scene of [http://www.bigbuckbunny.org/ Big Buck Bunny]&lt;br /&gt;
===ilclient helper library===&lt;br /&gt;
This library is described as:&lt;br /&gt;
&amp;lt;code&amp;gt;This API defines helper functions for writing IL clients.&lt;br /&gt;
 *&lt;br /&gt;
 * This file defines an IL client side library.  This is useful when&lt;br /&gt;
 * writing IL clients, since there tends to be much repeated and&lt;br /&gt;
 * common code across both single and multiple clients.  This library&lt;br /&gt;
 * seeks to remove that common code and abstract some of the&lt;br /&gt;
 * interactions with components.  There is a wrapper around a&lt;br /&gt;
 * component and tunnel, and some operations can be done on lists of&lt;br /&gt;
 * these.  The callbacks from components are handled, and specific&lt;br /&gt;
 * events can be checked or waited for.&lt;br /&gt;
 */&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Libraries ==&lt;br /&gt;
=== vc_dispmanx_*===&lt;br /&gt;
''TODO''&lt;br /&gt;
=== vc_tvservice_* ===&lt;br /&gt;
These APIs allow controlling the HDMI and SDTV video outputs of the Raspberry Pi.&lt;br /&gt;
&lt;br /&gt;
''TODO: Describe better''&lt;br /&gt;
=== vc_cec_* ===&lt;br /&gt;
''TODO''&lt;br /&gt;
=== vc_gencmd_* ===&lt;br /&gt;
''TODO''&lt;br /&gt;
=== EGL ===&lt;br /&gt;
[http://www.khronos.org/egl/ EGL (Native Platform Graphics Interface)] is an interface between Khronos rendering APIs such as OpenGL ES or OpenVG and the underlying native platform. The Raspberry Pi supports [http://www.khronos.org/registry/egl/specs/eglspec.1.4.20110406.pdf EGL Version 1.4] and the following EGL extensions (links are to EGL registry documentation):&amp;lt;ref name=&amp;quot;egl-info&amp;quot;&amp;gt;eglinfo, http://www.raspberrypi.org/phpBB3/viewtopic.php?p=35942#p35942 , http://www.raspberrypi.org/phpBB3/viewtopic.php?p=36318#p36318&amp;lt;/ref&amp;gt;&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_image.txt EGL_KHR_image]&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_image_base.txt EGL_KHR_image_base]&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_image_pixmap.txt EGL_KHR_image_pixmap]&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_vg_parent_image.txt EGL_KHR_vg_parent_image]&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_gl_image.txt EGL_KHR_gl_texture_2D_image]&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_gl_image.txt EGL_KHR_gl_texture_cubemap_image]&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_lock_surface.txt EGL_KHR_lock_surface]&lt;br /&gt;
&lt;br /&gt;
==== Samples====&lt;br /&gt;
&lt;br /&gt;
See [http://jonmacey.blogspot.com.au/2012/05/getting-started-with-egl-on-raspberry.html Getting Started with EGL] post by Jon Macey. &lt;br /&gt;
Extended documentation available in the [http://www.khronos.org/registry/egl/specs/eglspec.1.4.20110406.pdf EGL Version 1.4 Specification] and Simple Reference available in the [http://www.khronos.org/files/egl-1-4-quick-reference-card.pdf EGL 1.4 API Quick Reference Card].&lt;br /&gt;
&lt;br /&gt;
==== Function Documentation====&lt;br /&gt;
====={{anchor|graphics_get_display_size}}&amp;lt;code&amp;gt;int32_t graphics_get_display_size( const uint16_t display_number, uint32_t *width, uint32_t *height);&amp;lt;/code&amp;gt;=====&lt;br /&gt;
&lt;br /&gt;
This function allows you to get the size of the display, and is often used in creating an EGL Surface. width and height are pointers that you pass in to where you want the response values to be written to, display number 0 is usually used for the Raspberry Pi. return value of &amp;gt;= 0 indicates success, &amp;lt;0 indicates failure.&lt;br /&gt;
&lt;br /&gt;
This function is implemented in libbcm_host, and the implementation has been made [https://github.com/raspberrypi/firmware/issues/14#issuecomment-5652185 public] showing that it internally calls the vc_dispmanx_display_get_info function to get the width and height of the current mode.&lt;br /&gt;
&lt;br /&gt;
Bugs present in early versions of the firmware caused this function to always return 1920x1080, however this can easily be fixed by updating the firmware with [https://github.com/Hexxeh/rpi-update Hexxeh's rpi-update].&amp;lt;ref&amp;gt;http://www.raspberrypi.org/phpBB3/viewtopic.php?f=68&amp;amp;t=8252&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;https://github.com/raspberrypi/firmware/issues/14&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== OpenGL ES ===&lt;br /&gt;
The Raspberry Pi supports OpenGL ES 2.0 with the following extensions: &amp;lt;ref name=&amp;quot;egl-info&amp;quot; /&amp;gt;&lt;br /&gt;
*GL_OES_compressed_ETC1_RGB8_texture&lt;br /&gt;
*GL_OES_compressed_paletted_texture&lt;br /&gt;
*GL_OES_texture_npot GL_OES_depth24&lt;br /&gt;
*GL_OES_vertex_half_float&lt;br /&gt;
*GL_OES_EGL_image&lt;br /&gt;
*GL_OES_EGL_image_external&lt;br /&gt;
*GL_EXT_discard_framebuffer&lt;br /&gt;
*GL_OES_rgb8_rgba8&lt;br /&gt;
*GL_OES_depth32&lt;br /&gt;
*GL_OES_mapbuffer&lt;br /&gt;
*GL_EXT_texture_format_BGRA8888&lt;br /&gt;
*GL_APPLE_rgb_422&lt;br /&gt;
*GL_EXT_debug_marker&lt;br /&gt;
 &lt;br /&gt;
''TODO: Sample of how to use/initalise OpenGL ES''&lt;br /&gt;
&lt;br /&gt;
=== OpenMAX ===&lt;br /&gt;
See [https://github.com/raspberrypi/firmware/tree/master/documentation/ilcomponents /documentation/ilcomponents] on GitHub firmware repository for official documentation.&lt;br /&gt;
&lt;br /&gt;
''TODO: Sample of how to use OpenMAX to decode audio/video/images, etc.''&lt;br /&gt;
&lt;br /&gt;
== Other Programming Languages ==&lt;br /&gt;
&lt;br /&gt;
''TODO: Find and list any libraries written for other languages (e.g. Python) that interface with the Pi's GPU''&lt;br /&gt;
&lt;br /&gt;
== Programs designed to work with the Raspberry Pi's VideoCore APIs ==&lt;br /&gt;
* '''[https://github.com/huceke/omxplayer omxplayer]''' - ''a command line a/v player for the Raspberry Pi utilising the OpenMAX APIs and ffmpeg''&lt;br /&gt;
* '''[http://wiki.xbmc.org/index.php?title=Raspberry_Pi XBMC]''' - ''a media center, omxplayer's &amp;quot;big brother&amp;quot; ''&lt;br /&gt;
* '''[http://nccastaff.bournemouth.ac.uk/jmacey/GraphicsLib/piNGL/index.html piNGL]''' - ''port of the NGL graphics library to Raspberry Pi''&lt;br /&gt;
* '''[http://qt-project.org/wiki/Qt-RaspberryPi Qt on Pi]''' - ''Raspberry Pi port of the Qt toolkit''&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Template:Raspberry Pi}}&lt;br /&gt;
[[Category: RaspberryPi]]&lt;/div&gt;</summary>
		<author><name>Adammw</name></author>	</entry>

	<entry>
		<id>http://elinux.org/RPi_VideoCore_APIs</id>
		<title>RPi VideoCore APIs</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/RPi_VideoCore_APIs"/>
				<updated>2012-06-20T15:13:13Z</updated>
		
		<summary type="html">&lt;p&gt;Adammw: Add proper Qt5 link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:RPi_Software}}&lt;br /&gt;
&lt;br /&gt;
The Raspberry Pi contains a Broadcom [http://en.wikipedia.org/wiki/Videocore VideoCore] IV GPU providing OpenGL ES 1.1, OpenGL ES 2.0, hardware-accelerated OpenVG 1.1, Open EGL, OpenMAX and 1080p30 H.264 high-profile decode. There are 24 GFLOPS of general purpose compute and a bunch of texture filtering and DMA infrastructure. Eben worked on the architecture team for this and the Raspberry Pi team are looking at how they can make some of the proprietary features available to application programmers. &lt;br /&gt;
&lt;br /&gt;
Currently C header files and libraries for many of the Broadcom APIs are located in &amp;lt;code&amp;gt;/opt/vc/include&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;/opt/vc/lib&amp;lt;/code&amp;gt; respectively, or available from [https://github.com/raspberrypi/firmware GitHub] within the same directory structure. Some documentation is contained within comments in the header files, as well as documentation for the OpenMAX IL components in the [https://github.com/raspberrypi/firmware/tree/master/documentation/ilcomponents documentation directory on Github], however it is severely lacking and difficult to understand in a general sense for people wanting to experiment with the device due to it being proprietary. As such, we encourage you to [http://elinux.org/index.php?title=RPi_VideoCore_APIs&amp;amp;action=edit edit this page] to help us build a much better open documentation.&lt;br /&gt;
&lt;br /&gt;
==Quirks==&lt;br /&gt;
&lt;br /&gt;
* The Raspberry Pi requires that the &amp;lt;code&amp;gt;bcm_host_init()&amp;lt;/code&amp;gt; function is called first before any GPU calls can be made.&lt;br /&gt;
* &amp;lt;code&amp;gt;[[#graphics_get_display_size|graphics_get_display_size()]]&amp;lt;/code&amp;gt; is a broadcom-specific function&lt;br /&gt;
&lt;br /&gt;
== Sample Programs==&lt;br /&gt;
The Raspberry Pi comes with 7 sample programs and two helper libraries in the /opt/vc/src/hello_pi directory showing some of the system's capabilities and sample code. &lt;br /&gt;
===hello_video===&lt;br /&gt;
This sample decodes h264 video using the OpenMAX APIs and the ilclient library, and is distributed with a short scene of [http://www.bigbuckbunny.org/ Big Buck Bunny]&lt;br /&gt;
===ilclient helper library===&lt;br /&gt;
This library is described as:&lt;br /&gt;
&amp;lt;code&amp;gt;This API defines helper functions for writing IL clients.&lt;br /&gt;
 *&lt;br /&gt;
 * This file defines an IL client side library.  This is useful when&lt;br /&gt;
 * writing IL clients, since there tends to be much repeated and&lt;br /&gt;
 * common code across both single and multiple clients.  This library&lt;br /&gt;
 * seeks to remove that common code and abstract some of the&lt;br /&gt;
 * interactions with components.  There is a wrapper around a&lt;br /&gt;
 * component and tunnel, and some operations can be done on lists of&lt;br /&gt;
 * these.  The callbacks from components are handled, and specific&lt;br /&gt;
 * events can be checked or waited for.&lt;br /&gt;
 */&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Libraries ==&lt;br /&gt;
=== vc_dispmanx_*===&lt;br /&gt;
''TODO''&lt;br /&gt;
=== vc_tvservice_* ===&lt;br /&gt;
These APIs allow controlling the HDMI and SDTV video outputs of the Raspberry Pi.&lt;br /&gt;
&lt;br /&gt;
''TODO: Describe better''&lt;br /&gt;
=== vc_cec_* ===&lt;br /&gt;
''TODO''&lt;br /&gt;
=== vc_gencmd_* ===&lt;br /&gt;
''TODO''&lt;br /&gt;
=== EGL ===&lt;br /&gt;
[http://www.khronos.org/egl/ EGL (Native Platform Graphics Interface)] is an interface between Khronos rendering APIs such as OpenGL ES or OpenVG and the underlying native platform. The Raspberry Pi supports [http://www.khronos.org/registry/egl/specs/eglspec.1.4.20110406.pdf EGL Version 1.4] and the following EGL extensions (links are to EGL registry documentation):&amp;lt;ref name=&amp;quot;egl-info&amp;quot;&amp;gt;eglinfo, http://www.raspberrypi.org/phpBB3/viewtopic.php?p=35942#p35942 , http://www.raspberrypi.org/phpBB3/viewtopic.php?p=36318#p36318&amp;lt;/ref&amp;gt;&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_image.txt EGL_KHR_image]&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_image_base.txt EGL_KHR_image_base]&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_image_pixmap.txt EGL_KHR_image_pixmap]&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_vg_parent_image.txt EGL_KHR_vg_parent_image]&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_gl_image.txt EGL_KHR_gl_texture_2D_image]&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_gl_image.txt EGL_KHR_gl_texture_cubemap_image]&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_lock_surface.txt EGL_KHR_lock_surface]&lt;br /&gt;
&lt;br /&gt;
==== Samples====&lt;br /&gt;
&lt;br /&gt;
See [http://jonmacey.blogspot.com.au/2012/05/getting-started-with-egl-on-raspberry.html Getting Started with EGL] post by Jon Macey. &lt;br /&gt;
Extended documentation available in the [http://www.khronos.org/registry/egl/specs/eglspec.1.4.20110406.pdf EGL Version 1.4 Specification] and Simple Reference available in the [http://www.khronos.org/files/egl-1-4-quick-reference-card.pdf EGL 1.4 API Quick Reference Card].&lt;br /&gt;
&lt;br /&gt;
==== Function Documentation====&lt;br /&gt;
====={{anchor|graphics_get_display_size}}&amp;lt;code&amp;gt;int32_t graphics_get_display_size( const uint16_t display_number, uint32_t *width, uint32_t *height);&amp;lt;/code&amp;gt;=====&lt;br /&gt;
&lt;br /&gt;
This function allows you to get the size of the display, and is often used in creating an EGL Surface. width and height are pointers that you pass in to where you want the response values to be written to, display number 0 is usually used for the Raspberry Pi. return value of &amp;gt;= 0 indicates success, &amp;lt;0 indicates failure.&lt;br /&gt;
&lt;br /&gt;
This function is implemented in libbcm_host, and the implementation has been made [https://github.com/raspberrypi/firmware/issues/14#issuecomment-5652185 public] showing that it internally calls the vc_dispmanx_display_get_info function to get the width and height of the current mode.&lt;br /&gt;
&lt;br /&gt;
Bugs present in early versions of the firmware caused this function to always return 1920x1080, however this can easily be fixed by updating the firmware with [https://github.com/Hexxeh/rpi-update Hexxeh's rpi-update].&amp;lt;ref&amp;gt;http://www.raspberrypi.org/phpBB3/viewtopic.php?f=68&amp;amp;t=8252&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;https://github.com/raspberrypi/firmware/issues/14&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== OpenGL ES ===&lt;br /&gt;
The Raspberry Pi supports OpenGL ES 2.0 with the following extensions: &amp;lt;ref name=&amp;quot;egl-info&amp;quot; /&amp;gt;&lt;br /&gt;
*GL_OES_compressed_ETC1_RGB8_texture&lt;br /&gt;
*GL_OES_compressed_paletted_texture&lt;br /&gt;
*GL_OES_texture_npot GL_OES_depth24&lt;br /&gt;
*GL_OES_vertex_half_float&lt;br /&gt;
*GL_OES_EGL_image&lt;br /&gt;
*GL_OES_EGL_image_external&lt;br /&gt;
*GL_EXT_discard_framebuffer&lt;br /&gt;
*GL_OES_rgb8_rgba8&lt;br /&gt;
*GL_OES_depth32&lt;br /&gt;
*GL_OES_mapbuffer&lt;br /&gt;
*GL_EXT_texture_format_BGRA8888&lt;br /&gt;
*GL_APPLE_rgb_422&lt;br /&gt;
*GL_EXT_debug_marker&lt;br /&gt;
 &lt;br /&gt;
''TODO: Sample of how to use/initalise OpenGL ES''&lt;br /&gt;
&lt;br /&gt;
=== OpenMAX ===&lt;br /&gt;
See [https://github.com/raspberrypi/firmware/tree/master/documentation/ilcomponents /documentation/ilcomponents] on GitHub firmware repository for official documentation.&lt;br /&gt;
&lt;br /&gt;
''TODO: Sample of how to use OpenMAX to decode audio/video/images, etc.''&lt;br /&gt;
&lt;br /&gt;
== Other Programming Languages ==&lt;br /&gt;
&lt;br /&gt;
''TODO: Find and list any libraries written for other languages (e.g. Python) that interface with the Pi's GPU''&lt;br /&gt;
&lt;br /&gt;
== Programs designed to work with the Raspberry Pi's VideoCore APIs ==&lt;br /&gt;
* '''[https://github.com/huceke/omxplayer omxplayer]''' - ''a command line a/v player for the Raspberry Pi utilising the OpenMAX APIs and ffmpeg''&lt;br /&gt;
* '''[http://wiki.xbmc.org/index.php?title=Raspberry_Pi XBMC]''' - ''a media center, omxplayer's &amp;quot;big brother&amp;quot; ''&lt;br /&gt;
* '''[http://nccastaff.bournemouth.ac.uk/jmacey/GraphicsLib/piNGL/index.html piNGL]''' - ''port of the NGL graphics library to Raspberry Pi''&lt;br /&gt;
* '''[http://qt-project.org/wiki/Qt-RaspberryPi Qt on Pi]''' - ''Raspberry Pi port of the Qt toolkit''&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Template:Raspberry Pi}}&lt;br /&gt;
[[Category: RaspberryPi]]&lt;/div&gt;</summary>
		<author><name>Adammw</name></author>	</entry>

	<entry>
		<id>http://elinux.org/RPi_Software</id>
		<title>RPi Software</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/RPi_Software"/>
				<updated>2012-06-20T15:06:48Z</updated>
		
		<summary type="html">&lt;p&gt;Adammw: /* GPU */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: RaspberryPi]]&lt;br /&gt;
{{Template:RPi_Software}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
The Rpi is a fully fledged ARM computer, so it should be able to run about everything compiled for ARM (within system requirements). The boards do not have any on board storage, so everything is on the SD card. If you just want a working system, buy a preformatted SD card from the Foundation, or give [http://www.raspberrypi.org/forum/projects-and-collaboration-general/picard-gui-sd-preparation-tool/page-11 PiCard] a try, a GUI SD preparation tool made by Liam Frazer.&lt;br /&gt;
&lt;br /&gt;
==BootRom==&lt;br /&gt;
&lt;br /&gt;
The boards do not include NAND or NOR storage - everything is on the SD card, which has a FAT32 partition with GPU firmware and a kernel image, and an EXT2 partition with the rootfs.&lt;br /&gt;
&lt;br /&gt;
We're not currently using a bootloader - we actually boot via the GPU, which contains a proprietary RISC core (wacky architecture). The GPU mounts the SD card, loads GPU firmware and brings up display/video/3d, loads a kernel image, resets the SD card host and starts the ARM.&lt;br /&gt;
&lt;br /&gt;
You could replace the kernel image with a bootloader image, and that would work fine.&lt;br /&gt;
&lt;br /&gt;
==Distributions==&lt;br /&gt;
&lt;br /&gt;
Source code and binaries for Raspberry Pi will be available at various places from launch, including pre-built Linux distributions.&lt;br /&gt;
&lt;br /&gt;
Debian is the recommended distribution and pre-loaded SD cards with this distribution will be available shortly after the initial launch through the Raspberry Pi Store.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''Main page: [[RPi Distributions]]''&lt;br /&gt;
&lt;br /&gt;
==Development environments==&lt;br /&gt;
&lt;br /&gt;
Instead of just using compiler + editor, you can use &amp;quot;development tool chains&amp;quot; which integrate compiler, build system, packaging tools etc. in one tool chain.&lt;br /&gt;
&lt;br /&gt;
==Kernel==&lt;br /&gt;
&lt;br /&gt;
The initial patches ([[Media:Rpi-linux-patches-3.1.9.tgz]]) are released against the 3.1.9 kernel - but may also work against later kernels.&lt;br /&gt;
&lt;br /&gt;
The kernel is now also available on https://github.com/raspberrypi/linux&lt;br /&gt;
&lt;br /&gt;
See [[rpi kernel compilation]] (unfinished) for how to compile the kernel. &lt;br /&gt;
&lt;br /&gt;
(left here until new page is created:) TODO: Explain how to apply these patches and correctly obtain a default configured kernel.&lt;br /&gt;
&lt;br /&gt;
==Compiler==&lt;br /&gt;
&lt;br /&gt;
The Broadcom processor on Raspberry Pi contains an ARM v6 general purpose processor and a Broadcom VideoCore IV GPU.  No data is currently available on other cores (if any) available in the BCM2835.&lt;br /&gt;
&lt;br /&gt;
===ARM===&lt;br /&gt;
&lt;br /&gt;
There is broad compiler support including gcc - please see [http://www.elinux.org/ARMCompilers ARM Compilers]&lt;br /&gt;
&lt;br /&gt;
The ARM is capable of around 500 BOGOMIPS &amp;lt;ref&amp;gt;http://www.raspberrypi.org/?p=78#more-78&amp;lt;/ref&amp;gt;, 5400 LINPACK KFLOPS with software floating point and 22000 KFLOPS with softfp hardware floating point&amp;lt;ref&amp;gt;http://www.raspberrypi.org/?page_id=43&amp;amp;mingleforumaction=viewtopic&amp;amp;t=266.0&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The gcc compiler flags which will produce the most optimal code for the RPi are probably (can someone check!):&lt;br /&gt;
&amp;lt;pre&amp;gt;-mtune=arm1176jzf-s -mfpu=vfp -mfloat-abi=softfp [-marm or -mthumb]&amp;lt;/pre&amp;gt;&lt;br /&gt;
-marm produces arm code, which is the original 32 bit ARM instruction set, -mthumb produces [http://en.wikipedia.org/wiki/ARM_architecture#Thumb thumb] code, which is the 16 bit encoded RISC sub-set. Thumb code is smaller but requires more instructions so may be slower.&lt;br /&gt;
&lt;br /&gt;
===GPU===&lt;br /&gt;
The GPU provides APIs for Open GL ES 2.0, hardware-accelerated OpenVG, and 1080p30 H.264 high-profile decode.&lt;br /&gt;
&lt;br /&gt;
The GPU is capable of 1Gpixel/s, 1.5Gtexel/s or 24 GFLOPs of general purpose compute and features a bunch of texture filtering and DMA infrastructure - the Raspberry Pi team are looking at how they can make this available to application programmers. For the documentation on some Broadcom APIs exposed to control the GPU, see [[RPi VideoCore APIs]].&lt;br /&gt;
&lt;br /&gt;
The GPU blob is an 18MB elf file, including libraries. It does an awful lot. &amp;lt;ref&amp;gt;http://www.raspberrypi.org/?page_id=43&amp;amp;mingleforumaction=viewtopic&amp;amp;t=247&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===DSP===&lt;br /&gt;
&lt;br /&gt;
There is a DSP, but there isn't currently a public API (Liz thinks the BC team are keen to make one available at some point).&lt;br /&gt;
&lt;br /&gt;
==Other software==&lt;br /&gt;
&lt;br /&gt;
===Flash===&lt;br /&gt;
&lt;br /&gt;
From Eben:&lt;br /&gt;
&amp;quot;We'll have to take a look. We support hardware-accelerated OpenVG, and have had Flash Lite running incredibly fast. Personally, I'd like to get the official hardware-accelerated Flash 10 going on there, running against OpenGL ES 2.0, but that's something to think about after the launch.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Software hints==&lt;br /&gt;
&lt;br /&gt;
This section collects hints, tips &amp;amp; tricks for various software components.&lt;br /&gt;
&lt;br /&gt;
If you are using Debian and asked for an admin password, see this thread: http://www.raspberrypi.org/forum/absolute-beginners/debian-admin-password&lt;br /&gt;
&lt;br /&gt;
==Performance==&lt;br /&gt;
&lt;br /&gt;
[[RaspberryPiPerformance|Performance Page]]&lt;br /&gt;
&lt;br /&gt;
==Programming==&lt;br /&gt;
&lt;br /&gt;
Raspberry Pi plans to support Python and C as primary teaching languages, but expect to have some sort of BASIC on there too. Perhaps even BBC BASIC or SuperBASIC depending on copyright issues.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''See main page [[RPi Programming]] for more detail.''&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Template:Raspberry Pi}}&lt;/div&gt;</summary>
		<author><name>Adammw</name></author>	</entry>

	<entry>
		<id>http://elinux.org/RPi_VideoCore_APIs</id>
		<title>RPi VideoCore APIs</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/RPi_VideoCore_APIs"/>
				<updated>2012-06-20T15:02:44Z</updated>
		
		<summary type="html">&lt;p&gt;Adammw: /* Function Documentation */ Add more detail on graphics_get_display_size, implementation is public&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:RPi_Software}}&lt;br /&gt;
&lt;br /&gt;
The Raspberry Pi contains a Broadcom [http://en.wikipedia.org/wiki/Videocore VideoCore] IV GPU providing OpenGL ES 1.1, OpenGL ES 2.0, hardware-accelerated OpenVG 1.1, Open EGL, OpenMAX and 1080p30 H.264 high-profile decode. There are 24 GFLOPS of general purpose compute and a bunch of texture filtering and DMA infrastructure. Eben worked on the architecture team for this and the Raspberry Pi team are looking at how they can make some of the proprietary features available to application programmers. &lt;br /&gt;
&lt;br /&gt;
Currently C header files and libraries for many of the Broadcom APIs are located in &amp;lt;code&amp;gt;/opt/vc/include&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;/opt/vc/lib&amp;lt;/code&amp;gt; respectively, or available from [https://github.com/raspberrypi/firmware GitHub] within the same directory structure. Some documentation is contained within comments in the header files, as well as documentation for the OpenMAX IL components in the [https://github.com/raspberrypi/firmware/tree/master/documentation/ilcomponents documentation directory on Github], however it is severely lacking and difficult to understand in a general sense for people wanting to experiment with the device due to it being proprietary. As such, we encourage you to [http://elinux.org/index.php?title=RPi_VideoCore_APIs&amp;amp;action=edit edit this page] to help us build a much better open documentation.&lt;br /&gt;
&lt;br /&gt;
==Quirks==&lt;br /&gt;
&lt;br /&gt;
* The Raspberry Pi requires that the &amp;lt;code&amp;gt;bcm_host_init()&amp;lt;/code&amp;gt; function is called first before any GPU calls can be made.&lt;br /&gt;
* &amp;lt;code&amp;gt;[[#graphics_get_display_size|graphics_get_display_size()]]&amp;lt;/code&amp;gt; is a broadcom-specific function&lt;br /&gt;
&lt;br /&gt;
== Sample Programs==&lt;br /&gt;
The Raspberry Pi comes with 7 sample programs and two helper libraries in the /opt/vc/src/hello_pi directory showing some of the system's capabilities and sample code. &lt;br /&gt;
===hello_video===&lt;br /&gt;
This sample decodes h264 video using the OpenMAX APIs and the ilclient library, and is distributed with a short scene of [http://www.bigbuckbunny.org/ Big Buck Bunny]&lt;br /&gt;
===ilclient helper library===&lt;br /&gt;
This library is described as:&lt;br /&gt;
&amp;lt;code&amp;gt;This API defines helper functions for writing IL clients.&lt;br /&gt;
 *&lt;br /&gt;
 * This file defines an IL client side library.  This is useful when&lt;br /&gt;
 * writing IL clients, since there tends to be much repeated and&lt;br /&gt;
 * common code across both single and multiple clients.  This library&lt;br /&gt;
 * seeks to remove that common code and abstract some of the&lt;br /&gt;
 * interactions with components.  There is a wrapper around a&lt;br /&gt;
 * component and tunnel, and some operations can be done on lists of&lt;br /&gt;
 * these.  The callbacks from components are handled, and specific&lt;br /&gt;
 * events can be checked or waited for.&lt;br /&gt;
 */&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Libraries ==&lt;br /&gt;
=== vc_dispmanx_*===&lt;br /&gt;
''TODO''&lt;br /&gt;
=== vc_tvservice_* ===&lt;br /&gt;
These APIs allow controlling the HDMI and SDTV video outputs of the Raspberry Pi.&lt;br /&gt;
&lt;br /&gt;
''TODO: Describe better''&lt;br /&gt;
=== vc_cec_* ===&lt;br /&gt;
''TODO''&lt;br /&gt;
=== vc_gencmd_* ===&lt;br /&gt;
''TODO''&lt;br /&gt;
=== EGL ===&lt;br /&gt;
[http://www.khronos.org/egl/ EGL (Native Platform Graphics Interface)] is an interface between Khronos rendering APIs such as OpenGL ES or OpenVG and the underlying native platform. The Raspberry Pi supports [http://www.khronos.org/registry/egl/specs/eglspec.1.4.20110406.pdf EGL Version 1.4] and the following EGL extensions (links are to EGL registry documentation):&amp;lt;ref name=&amp;quot;egl-info&amp;quot;&amp;gt;eglinfo, http://www.raspberrypi.org/phpBB3/viewtopic.php?p=35942#p35942 , http://www.raspberrypi.org/phpBB3/viewtopic.php?p=36318#p36318&amp;lt;/ref&amp;gt;&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_image.txt EGL_KHR_image]&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_image_base.txt EGL_KHR_image_base]&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_image_pixmap.txt EGL_KHR_image_pixmap]&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_vg_parent_image.txt EGL_KHR_vg_parent_image]&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_gl_image.txt EGL_KHR_gl_texture_2D_image]&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_gl_image.txt EGL_KHR_gl_texture_cubemap_image]&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_lock_surface.txt EGL_KHR_lock_surface]&lt;br /&gt;
&lt;br /&gt;
==== Samples====&lt;br /&gt;
&lt;br /&gt;
See [http://jonmacey.blogspot.com.au/2012/05/getting-started-with-egl-on-raspberry.html Getting Started with EGL] post by Jon Macey. &lt;br /&gt;
Extended documentation available in the [http://www.khronos.org/registry/egl/specs/eglspec.1.4.20110406.pdf EGL Version 1.4 Specification] and Simple Reference available in the [http://www.khronos.org/files/egl-1-4-quick-reference-card.pdf EGL 1.4 API Quick Reference Card].&lt;br /&gt;
&lt;br /&gt;
==== Function Documentation====&lt;br /&gt;
====={{anchor|graphics_get_display_size}}&amp;lt;code&amp;gt;int32_t graphics_get_display_size( const uint16_t display_number, uint32_t *width, uint32_t *height);&amp;lt;/code&amp;gt;=====&lt;br /&gt;
&lt;br /&gt;
This function allows you to get the size of the display, and is often used in creating an EGL Surface. width and height are pointers that you pass in to where you want the response values to be written to, display number 0 is usually used for the Raspberry Pi. return value of &amp;gt;= 0 indicates success, &amp;lt;0 indicates failure.&lt;br /&gt;
&lt;br /&gt;
This function is implemented in libbcm_host, and the implementation has been made [https://github.com/raspberrypi/firmware/issues/14#issuecomment-5652185 public] showing that it internally calls the vc_dispmanx_display_get_info function to get the width and height of the current mode.&lt;br /&gt;
&lt;br /&gt;
Bugs present in early versions of the firmware caused this function to always return 1920x1080, however this can easily be fixed by updating the firmware with [https://github.com/Hexxeh/rpi-update Hexxeh's rpi-update].&amp;lt;ref&amp;gt;http://www.raspberrypi.org/phpBB3/viewtopic.php?f=68&amp;amp;t=8252&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;https://github.com/raspberrypi/firmware/issues/14&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== OpenGL ES ===&lt;br /&gt;
The Raspberry Pi supports OpenGL ES 2.0 with the following extensions: &amp;lt;ref name=&amp;quot;egl-info&amp;quot; /&amp;gt;&lt;br /&gt;
*GL_OES_compressed_ETC1_RGB8_texture&lt;br /&gt;
*GL_OES_compressed_paletted_texture&lt;br /&gt;
*GL_OES_texture_npot GL_OES_depth24&lt;br /&gt;
*GL_OES_vertex_half_float&lt;br /&gt;
*GL_OES_EGL_image&lt;br /&gt;
*GL_OES_EGL_image_external&lt;br /&gt;
*GL_EXT_discard_framebuffer&lt;br /&gt;
*GL_OES_rgb8_rgba8&lt;br /&gt;
*GL_OES_depth32&lt;br /&gt;
*GL_OES_mapbuffer&lt;br /&gt;
*GL_EXT_texture_format_BGRA8888&lt;br /&gt;
*GL_APPLE_rgb_422&lt;br /&gt;
*GL_EXT_debug_marker&lt;br /&gt;
 &lt;br /&gt;
''TODO: Sample of how to use/initalise OpenGL ES''&lt;br /&gt;
&lt;br /&gt;
=== OpenMAX ===&lt;br /&gt;
See [https://github.com/raspberrypi/firmware/tree/master/documentation/ilcomponents /documentation/ilcomponents] on GitHub firmware repository for official documentation.&lt;br /&gt;
&lt;br /&gt;
''TODO: Sample of how to use OpenMAX to decode audio/video/images, etc.''&lt;br /&gt;
&lt;br /&gt;
== Other Programming Languages ==&lt;br /&gt;
&lt;br /&gt;
''TODO: Find and list any libraries written for other languages (e.g. Python) that interface with the Pi's GPU''&lt;br /&gt;
&lt;br /&gt;
== Programs designed to work with the Raspberry Pi's VideoCore APIs ==&lt;br /&gt;
* '''[https://github.com/huceke/omxplayer omxplayer]''' - ''a command line a/v player for the Raspberry Pi utilising the OpenMAX APIs and ffmpeg''&lt;br /&gt;
* '''[http://wiki.xbmc.org/index.php?title=Raspberry_Pi XBMC]''' - ''a media center, omxplayer's &amp;quot;big brother&amp;quot; ''&lt;br /&gt;
* '''[http://nccastaff.bournemouth.ac.uk/jmacey/GraphicsLib/piNGL/index.html piNGL]''' - ''port of the NGL graphics library to Raspberry Pi''&lt;br /&gt;
* qt5 samples - ''TODO: Find link''&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Template:Raspberry Pi}}&lt;br /&gt;
[[Category: RaspberryPi]]&lt;/div&gt;</summary>
		<author><name>Adammw</name></author>	</entry>

	<entry>
		<id>http://elinux.org/RPi_VideoCore_APIs</id>
		<title>RPi VideoCore APIs</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/RPi_VideoCore_APIs"/>
				<updated>2012-06-20T14:55:01Z</updated>
		
		<summary type="html">&lt;p&gt;Adammw: /* Samples */ Add EGL Specification and Quick Reference Card&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:RPi_Software}}&lt;br /&gt;
&lt;br /&gt;
The Raspberry Pi contains a Broadcom [http://en.wikipedia.org/wiki/Videocore VideoCore] IV GPU providing OpenGL ES 1.1, OpenGL ES 2.0, hardware-accelerated OpenVG 1.1, Open EGL, OpenMAX and 1080p30 H.264 high-profile decode. There are 24 GFLOPS of general purpose compute and a bunch of texture filtering and DMA infrastructure. Eben worked on the architecture team for this and the Raspberry Pi team are looking at how they can make some of the proprietary features available to application programmers. &lt;br /&gt;
&lt;br /&gt;
Currently C header files and libraries for many of the Broadcom APIs are located in &amp;lt;code&amp;gt;/opt/vc/include&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;/opt/vc/lib&amp;lt;/code&amp;gt; respectively, or available from [https://github.com/raspberrypi/firmware GitHub] within the same directory structure. Some documentation is contained within comments in the header files, as well as documentation for the OpenMAX IL components in the [https://github.com/raspberrypi/firmware/tree/master/documentation/ilcomponents documentation directory on Github], however it is severely lacking and difficult to understand in a general sense for people wanting to experiment with the device due to it being proprietary. As such, we encourage you to [http://elinux.org/index.php?title=RPi_VideoCore_APIs&amp;amp;action=edit edit this page] to help us build a much better open documentation.&lt;br /&gt;
&lt;br /&gt;
==Quirks==&lt;br /&gt;
&lt;br /&gt;
* The Raspberry Pi requires that the &amp;lt;code&amp;gt;bcm_host_init()&amp;lt;/code&amp;gt; function is called first before any GPU calls can be made.&lt;br /&gt;
* &amp;lt;code&amp;gt;[[#graphics_get_display_size|graphics_get_display_size()]]&amp;lt;/code&amp;gt; is a broadcom-specific function&lt;br /&gt;
&lt;br /&gt;
== Sample Programs==&lt;br /&gt;
The Raspberry Pi comes with 7 sample programs and two helper libraries in the /opt/vc/src/hello_pi directory showing some of the system's capabilities and sample code. &lt;br /&gt;
===hello_video===&lt;br /&gt;
This sample decodes h264 video using the OpenMAX APIs and the ilclient library, and is distributed with a short scene of [http://www.bigbuckbunny.org/ Big Buck Bunny]&lt;br /&gt;
===ilclient helper library===&lt;br /&gt;
This library is described as:&lt;br /&gt;
&amp;lt;code&amp;gt;This API defines helper functions for writing IL clients.&lt;br /&gt;
 *&lt;br /&gt;
 * This file defines an IL client side library.  This is useful when&lt;br /&gt;
 * writing IL clients, since there tends to be much repeated and&lt;br /&gt;
 * common code across both single and multiple clients.  This library&lt;br /&gt;
 * seeks to remove that common code and abstract some of the&lt;br /&gt;
 * interactions with components.  There is a wrapper around a&lt;br /&gt;
 * component and tunnel, and some operations can be done on lists of&lt;br /&gt;
 * these.  The callbacks from components are handled, and specific&lt;br /&gt;
 * events can be checked or waited for.&lt;br /&gt;
 */&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Libraries ==&lt;br /&gt;
=== vc_dispmanx_*===&lt;br /&gt;
''TODO''&lt;br /&gt;
=== vc_tvservice_* ===&lt;br /&gt;
These APIs allow controlling the HDMI and SDTV video outputs of the Raspberry Pi.&lt;br /&gt;
&lt;br /&gt;
''TODO: Describe better''&lt;br /&gt;
=== vc_cec_* ===&lt;br /&gt;
''TODO''&lt;br /&gt;
=== vc_gencmd_* ===&lt;br /&gt;
''TODO''&lt;br /&gt;
=== EGL ===&lt;br /&gt;
[http://www.khronos.org/egl/ EGL (Native Platform Graphics Interface)] is an interface between Khronos rendering APIs such as OpenGL ES or OpenVG and the underlying native platform. The Raspberry Pi supports [http://www.khronos.org/registry/egl/specs/eglspec.1.4.20110406.pdf EGL Version 1.4] and the following EGL extensions (links are to EGL registry documentation):&amp;lt;ref name=&amp;quot;egl-info&amp;quot;&amp;gt;eglinfo, http://www.raspberrypi.org/phpBB3/viewtopic.php?p=35942#p35942 , http://www.raspberrypi.org/phpBB3/viewtopic.php?p=36318#p36318&amp;lt;/ref&amp;gt;&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_image.txt EGL_KHR_image]&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_image_base.txt EGL_KHR_image_base]&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_image_pixmap.txt EGL_KHR_image_pixmap]&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_vg_parent_image.txt EGL_KHR_vg_parent_image]&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_gl_image.txt EGL_KHR_gl_texture_2D_image]&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_gl_image.txt EGL_KHR_gl_texture_cubemap_image]&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_lock_surface.txt EGL_KHR_lock_surface]&lt;br /&gt;
&lt;br /&gt;
==== Samples====&lt;br /&gt;
&lt;br /&gt;
See [http://jonmacey.blogspot.com.au/2012/05/getting-started-with-egl-on-raspberry.html Getting Started with EGL] post by Jon Macey. &lt;br /&gt;
Extended documentation available in the [http://www.khronos.org/registry/egl/specs/eglspec.1.4.20110406.pdf EGL Version 1.4 Specification] and Simple Reference available in the [http://www.khronos.org/files/egl-1-4-quick-reference-card.pdf EGL 1.4 API Quick Reference Card].&lt;br /&gt;
&lt;br /&gt;
==== Function Documentation====&lt;br /&gt;
====={{anchor|graphics_get_display_size}}&amp;lt;code&amp;gt;int32_t graphics_get_display_size( const uint16_t display_number, uint32_t *width, uint32_t *height);&amp;lt;/code&amp;gt;=====&lt;br /&gt;
&lt;br /&gt;
This function allows you to get the size of the display, and is often used in creating an EGL Surface. width and height are pointers that you pass in to where you want the response values to be written to, display number 0 is usually used for the Raspberry Pi. return value meaning is unknown.&lt;br /&gt;
&lt;br /&gt;
Bugs present in early versions of the firmware caused this function to always return 1920x1080, however this can easily be fixed by updating the firmware with [https://github.com/Hexxeh/rpi-update Hexxeh's rpi-update].&amp;lt;ref&amp;gt;http://www.raspberrypi.org/phpBB3/viewtopic.php?f=68&amp;amp;t=8252&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== OpenGL ES ===&lt;br /&gt;
The Raspberry Pi supports OpenGL ES 2.0 with the following extensions: &amp;lt;ref name=&amp;quot;egl-info&amp;quot; /&amp;gt;&lt;br /&gt;
*GL_OES_compressed_ETC1_RGB8_texture&lt;br /&gt;
*GL_OES_compressed_paletted_texture&lt;br /&gt;
*GL_OES_texture_npot GL_OES_depth24&lt;br /&gt;
*GL_OES_vertex_half_float&lt;br /&gt;
*GL_OES_EGL_image&lt;br /&gt;
*GL_OES_EGL_image_external&lt;br /&gt;
*GL_EXT_discard_framebuffer&lt;br /&gt;
*GL_OES_rgb8_rgba8&lt;br /&gt;
*GL_OES_depth32&lt;br /&gt;
*GL_OES_mapbuffer&lt;br /&gt;
*GL_EXT_texture_format_BGRA8888&lt;br /&gt;
*GL_APPLE_rgb_422&lt;br /&gt;
*GL_EXT_debug_marker&lt;br /&gt;
 &lt;br /&gt;
''TODO: Sample of how to use/initalise OpenGL ES''&lt;br /&gt;
&lt;br /&gt;
=== OpenMAX ===&lt;br /&gt;
See [https://github.com/raspberrypi/firmware/tree/master/documentation/ilcomponents /documentation/ilcomponents] on GitHub firmware repository for official documentation.&lt;br /&gt;
&lt;br /&gt;
''TODO: Sample of how to use OpenMAX to decode audio/video/images, etc.''&lt;br /&gt;
&lt;br /&gt;
== Other Programming Languages ==&lt;br /&gt;
&lt;br /&gt;
''TODO: Find and list any libraries written for other languages (e.g. Python) that interface with the Pi's GPU''&lt;br /&gt;
&lt;br /&gt;
== Programs designed to work with the Raspberry Pi's VideoCore APIs ==&lt;br /&gt;
* '''[https://github.com/huceke/omxplayer omxplayer]''' - ''a command line a/v player for the Raspberry Pi utilising the OpenMAX APIs and ffmpeg''&lt;br /&gt;
* '''[http://wiki.xbmc.org/index.php?title=Raspberry_Pi XBMC]''' - ''a media center, omxplayer's &amp;quot;big brother&amp;quot; ''&lt;br /&gt;
* '''[http://nccastaff.bournemouth.ac.uk/jmacey/GraphicsLib/piNGL/index.html piNGL]''' - ''port of the NGL graphics library to Raspberry Pi''&lt;br /&gt;
* qt5 samples - ''TODO: Find link''&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Template:Raspberry Pi}}&lt;br /&gt;
[[Category: RaspberryPi]]&lt;/div&gt;</summary>
		<author><name>Adammw</name></author>	</entry>

	<entry>
		<id>http://elinux.org/RPi_VideoCore_APIs</id>
		<title>RPi VideoCore APIs</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/RPi_VideoCore_APIs"/>
				<updated>2012-06-20T14:52:50Z</updated>
		
		<summary type="html">&lt;p&gt;Adammw: /* EGL */ Forgot links, added them&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:RPi_Software}}&lt;br /&gt;
&lt;br /&gt;
The Raspberry Pi contains a Broadcom [http://en.wikipedia.org/wiki/Videocore VideoCore] IV GPU providing OpenGL ES 1.1, OpenGL ES 2.0, hardware-accelerated OpenVG 1.1, Open EGL, OpenMAX and 1080p30 H.264 high-profile decode. There are 24 GFLOPS of general purpose compute and a bunch of texture filtering and DMA infrastructure. Eben worked on the architecture team for this and the Raspberry Pi team are looking at how they can make some of the proprietary features available to application programmers. &lt;br /&gt;
&lt;br /&gt;
Currently C header files and libraries for many of the Broadcom APIs are located in &amp;lt;code&amp;gt;/opt/vc/include&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;/opt/vc/lib&amp;lt;/code&amp;gt; respectively, or available from [https://github.com/raspberrypi/firmware GitHub] within the same directory structure. Some documentation is contained within comments in the header files, as well as documentation for the OpenMAX IL components in the [https://github.com/raspberrypi/firmware/tree/master/documentation/ilcomponents documentation directory on Github], however it is severely lacking and difficult to understand in a general sense for people wanting to experiment with the device due to it being proprietary. As such, we encourage you to [http://elinux.org/index.php?title=RPi_VideoCore_APIs&amp;amp;action=edit edit this page] to help us build a much better open documentation.&lt;br /&gt;
&lt;br /&gt;
==Quirks==&lt;br /&gt;
&lt;br /&gt;
* The Raspberry Pi requires that the &amp;lt;code&amp;gt;bcm_host_init()&amp;lt;/code&amp;gt; function is called first before any GPU calls can be made.&lt;br /&gt;
* &amp;lt;code&amp;gt;[[#graphics_get_display_size|graphics_get_display_size()]]&amp;lt;/code&amp;gt; is a broadcom-specific function&lt;br /&gt;
&lt;br /&gt;
== Sample Programs==&lt;br /&gt;
The Raspberry Pi comes with 7 sample programs and two helper libraries in the /opt/vc/src/hello_pi directory showing some of the system's capabilities and sample code. &lt;br /&gt;
===hello_video===&lt;br /&gt;
This sample decodes h264 video using the OpenMAX APIs and the ilclient library, and is distributed with a short scene of [http://www.bigbuckbunny.org/ Big Buck Bunny]&lt;br /&gt;
===ilclient helper library===&lt;br /&gt;
This library is described as:&lt;br /&gt;
&amp;lt;code&amp;gt;This API defines helper functions for writing IL clients.&lt;br /&gt;
 *&lt;br /&gt;
 * This file defines an IL client side library.  This is useful when&lt;br /&gt;
 * writing IL clients, since there tends to be much repeated and&lt;br /&gt;
 * common code across both single and multiple clients.  This library&lt;br /&gt;
 * seeks to remove that common code and abstract some of the&lt;br /&gt;
 * interactions with components.  There is a wrapper around a&lt;br /&gt;
 * component and tunnel, and some operations can be done on lists of&lt;br /&gt;
 * these.  The callbacks from components are handled, and specific&lt;br /&gt;
 * events can be checked or waited for.&lt;br /&gt;
 */&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Libraries ==&lt;br /&gt;
=== vc_dispmanx_*===&lt;br /&gt;
''TODO''&lt;br /&gt;
=== vc_tvservice_* ===&lt;br /&gt;
These APIs allow controlling the HDMI and SDTV video outputs of the Raspberry Pi.&lt;br /&gt;
&lt;br /&gt;
''TODO: Describe better''&lt;br /&gt;
=== vc_cec_* ===&lt;br /&gt;
''TODO''&lt;br /&gt;
=== vc_gencmd_* ===&lt;br /&gt;
''TODO''&lt;br /&gt;
=== EGL ===&lt;br /&gt;
[http://www.khronos.org/egl/ EGL (Native Platform Graphics Interface)] is an interface between Khronos rendering APIs such as OpenGL ES or OpenVG and the underlying native platform. The Raspberry Pi supports [http://www.khronos.org/registry/egl/specs/eglspec.1.4.20110406.pdf EGL Version 1.4] and the following EGL extensions (links are to EGL registry documentation):&amp;lt;ref name=&amp;quot;egl-info&amp;quot;&amp;gt;eglinfo, http://www.raspberrypi.org/phpBB3/viewtopic.php?p=35942#p35942 , http://www.raspberrypi.org/phpBB3/viewtopic.php?p=36318#p36318&amp;lt;/ref&amp;gt;&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_image.txt EGL_KHR_image]&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_image_base.txt EGL_KHR_image_base]&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_image_pixmap.txt EGL_KHR_image_pixmap]&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_vg_parent_image.txt EGL_KHR_vg_parent_image]&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_gl_image.txt EGL_KHR_gl_texture_2D_image]&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_gl_image.txt EGL_KHR_gl_texture_cubemap_image]&lt;br /&gt;
*[http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_lock_surface.txt EGL_KHR_lock_surface]&lt;br /&gt;
&lt;br /&gt;
==== Samples====&lt;br /&gt;
&lt;br /&gt;
See [http://jonmacey.blogspot.com.au/2012/05/getting-started-with-egl-on-raspberry.html Getting Started with EGL] post by Jon Macey&lt;br /&gt;
&lt;br /&gt;
==== Function Documentation====&lt;br /&gt;
====={{anchor|graphics_get_display_size}}&amp;lt;code&amp;gt;int32_t graphics_get_display_size( const uint16_t display_number, uint32_t *width, uint32_t *height);&amp;lt;/code&amp;gt;=====&lt;br /&gt;
&lt;br /&gt;
This function allows you to get the size of the display, and is often used in creating an EGL Surface. width and height are pointers that you pass in to where you want the response values to be written to, display number 0 is usually used for the Raspberry Pi. return value meaning is unknown.&lt;br /&gt;
&lt;br /&gt;
Bugs present in early versions of the firmware caused this function to always return 1920x1080, however this can easily be fixed by updating the firmware with [https://github.com/Hexxeh/rpi-update Hexxeh's rpi-update].&amp;lt;ref&amp;gt;http://www.raspberrypi.org/phpBB3/viewtopic.php?f=68&amp;amp;t=8252&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== OpenGL ES ===&lt;br /&gt;
The Raspberry Pi supports OpenGL ES 2.0 with the following extensions: &amp;lt;ref name=&amp;quot;egl-info&amp;quot; /&amp;gt;&lt;br /&gt;
*GL_OES_compressed_ETC1_RGB8_texture&lt;br /&gt;
*GL_OES_compressed_paletted_texture&lt;br /&gt;
*GL_OES_texture_npot GL_OES_depth24&lt;br /&gt;
*GL_OES_vertex_half_float&lt;br /&gt;
*GL_OES_EGL_image&lt;br /&gt;
*GL_OES_EGL_image_external&lt;br /&gt;
*GL_EXT_discard_framebuffer&lt;br /&gt;
*GL_OES_rgb8_rgba8&lt;br /&gt;
*GL_OES_depth32&lt;br /&gt;
*GL_OES_mapbuffer&lt;br /&gt;
*GL_EXT_texture_format_BGRA8888&lt;br /&gt;
*GL_APPLE_rgb_422&lt;br /&gt;
*GL_EXT_debug_marker&lt;br /&gt;
 &lt;br /&gt;
''TODO: Sample of how to use/initalise OpenGL ES''&lt;br /&gt;
&lt;br /&gt;
=== OpenMAX ===&lt;br /&gt;
See [https://github.com/raspberrypi/firmware/tree/master/documentation/ilcomponents /documentation/ilcomponents] on GitHub firmware repository for official documentation.&lt;br /&gt;
&lt;br /&gt;
''TODO: Sample of how to use OpenMAX to decode audio/video/images, etc.''&lt;br /&gt;
&lt;br /&gt;
== Other Programming Languages ==&lt;br /&gt;
&lt;br /&gt;
''TODO: Find and list any libraries written for other languages (e.g. Python) that interface with the Pi's GPU''&lt;br /&gt;
&lt;br /&gt;
== Programs designed to work with the Raspberry Pi's VideoCore APIs ==&lt;br /&gt;
* '''[https://github.com/huceke/omxplayer omxplayer]''' - ''a command line a/v player for the Raspberry Pi utilising the OpenMAX APIs and ffmpeg''&lt;br /&gt;
* '''[http://wiki.xbmc.org/index.php?title=Raspberry_Pi XBMC]''' - ''a media center, omxplayer's &amp;quot;big brother&amp;quot; ''&lt;br /&gt;
* '''[http://nccastaff.bournemouth.ac.uk/jmacey/GraphicsLib/piNGL/index.html piNGL]''' - ''port of the NGL graphics library to Raspberry Pi''&lt;br /&gt;
* qt5 samples - ''TODO: Find link''&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Template:Raspberry Pi}}&lt;br /&gt;
[[Category: RaspberryPi]]&lt;/div&gt;</summary>
		<author><name>Adammw</name></author>	</entry>

	<entry>
		<id>http://elinux.org/Template:Raspberry_Pi</id>
		<title>Template:Raspberry Pi</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Template:Raspberry_Pi"/>
				<updated>2012-06-20T14:48:36Z</updated>
		
		<summary type="html">&lt;p&gt;Adammw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Navbox&lt;br /&gt;
| name  = Raspberry Pi&lt;br /&gt;
| title = [[R-Pi Hub|&amp;lt;span style=&amp;quot;color:#FFFFFF&amp;quot;&amp;gt;Raspberry Pi&amp;lt;/span&amp;gt;]]&lt;br /&gt;
|listclass = hlist&lt;br /&gt;
| state = plain&lt;br /&gt;
| style = width:100%&lt;br /&gt;
| image = [[File:RpiFront.jpg|167px]]&lt;br /&gt;
&lt;br /&gt;
| basestyle = background:#00CC00;&lt;br /&gt;
| groupstyle = background:#AA0033&lt;br /&gt;
| liststyle = background:#FFE0FF;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
| group1 = '''&amp;lt;span style=&amp;quot;color:#FFFFFF&amp;quot;&amp;gt;Startup&amp;lt;/span&amp;gt;'''&lt;br /&gt;
| list1  = &lt;br /&gt;
[[RPi Buying Guide|Buying Guide]] - [[RPi Easy SD Card Setup|SD Card Setup]] - [[RPi Hardware Basic Setup|Basic Setup]] - [[RPi Advanced Setup|Advanced Setup]] - [[RPi Beginners|Beginners Guide]] - [[R-Pi Troubleshooting|Troubleshooting]]&lt;br /&gt;
&lt;br /&gt;
| group2 = '''&amp;lt;span style=&amp;quot;color:#FFFFFF&amp;quot;&amp;gt;Hardware&amp;lt;/span&amp;gt;'''&lt;br /&gt;
| list2  = [[RPi Hardware|Hardware]] - [[RPi HardwareHistory|Hardware History]] - [[RPi Low-level peripherals|Low-level peripherals]] - [[RPi Expansion Boards|Expansion Boards]]&lt;br /&gt;
&lt;br /&gt;
| group3 = '''&amp;lt;span style=&amp;quot;color:#FFFFFF&amp;quot;&amp;gt;Peripherals&amp;lt;/span&amp;gt;'''&lt;br /&gt;
| list3  = &lt;br /&gt;
[[RPi Screens|Screens]] - [[RPi Cases|Cases]] - [[RPi VerifiedPeripherals|Other Peripherals]]&lt;br /&gt;
&lt;br /&gt;
| group4 = '''&amp;lt;span style=&amp;quot;color:#FFFFFF&amp;quot;&amp;gt;Software&amp;lt;/span&amp;gt;'''&lt;br /&gt;
| list4  =&lt;br /&gt;
[[RPi Software|Software]] - [[RPi Distributions|Distributions]] - [[RPi Kernel Compilation|Kernel]] - [[RPi Performance|Performance]] -  [[RPi Programming|Programming]] - [[RPi_VideoCore_APIs|VideoCore APIs]]&lt;br /&gt;
&lt;br /&gt;
| group5 = '''&amp;lt;span style=&amp;quot;color:#FFFFFF&amp;quot;&amp;gt;Projects&amp;lt;/span&amp;gt;'''&lt;br /&gt;
| list5  =&lt;br /&gt;
[[RPi Tutorials|Tutorials]] - [[RPi Guides|Guides]] - [[RPi Projects|Projects]] - [[RPi Tasks|Tasks]] - [[RPi DatasheetCategories|DataSheets]] - [[RPi Education|Education]] - [[RPi Community|Communities]] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
| below =&lt;br /&gt;
&lt;br /&gt;
}}&amp;lt;noinclude&amp;gt;'''''Please use this template only for the English language version''''', and make a copy if you wish to use it for another language. Please be careful when editing and use preview, as this template appears on a number of pages.&lt;br /&gt;
&lt;br /&gt;
To add this to a page, use &amp;lt;nowiki&amp;gt;{{Template:Raspberry Pi}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As the RaspberryPi category is included below, every article using this links table template should be forced to become a member of the category, but feel free to add the category tag to the article anyway as it does no harm.&lt;br /&gt;
&lt;br /&gt;
If you're wondering how this template is possible - it uses the Navbar, Navbox and Transclude templates from wikipedia under Creative Commons Sharealike licence, with CSS info added manually as eLinux doesn't allow editing of the master CSS.&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:RaspberryPi]]&lt;/div&gt;</summary>
		<author><name>Adammw</name></author>	</entry>

	<entry>
		<id>http://elinux.org/RPi_VideoCore_APIs</id>
		<title>RPi VideoCore APIs</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/RPi_VideoCore_APIs"/>
				<updated>2012-06-20T14:45:50Z</updated>
		
		<summary type="html">&lt;p&gt;Adammw: Start a community-driven documentation for the Raspberry Pi's VideoCore APIs&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:RPi_Software}}&lt;br /&gt;
&lt;br /&gt;
The Raspberry Pi contains a Broadcom [http://en.wikipedia.org/wiki/Videocore VideoCore] IV GPU providing OpenGL ES 1.1, OpenGL ES 2.0, hardware-accelerated OpenVG 1.1, Open EGL, OpenMAX and 1080p30 H.264 high-profile decode. There are 24 GFLOPS of general purpose compute and a bunch of texture filtering and DMA infrastructure. Eben worked on the architecture team for this and the Raspberry Pi team are looking at how they can make some of the proprietary features available to application programmers. &lt;br /&gt;
&lt;br /&gt;
Currently C header files and libraries for many of the Broadcom APIs are located in &amp;lt;code&amp;gt;/opt/vc/include&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;/opt/vc/lib&amp;lt;/code&amp;gt; respectively, or available from [https://github.com/raspberrypi/firmware GitHub] within the same directory structure. Some documentation is contained within comments in the header files, as well as documentation for the OpenMAX IL components in the [https://github.com/raspberrypi/firmware/tree/master/documentation/ilcomponents documentation directory on Github], however it is severely lacking and difficult to understand in a general sense for people wanting to experiment with the device due to it being proprietary. As such, we encourage you to [http://elinux.org/index.php?title=RPi_VideoCore_APIs&amp;amp;action=edit edit this page] to help us build a much better open documentation.&lt;br /&gt;
&lt;br /&gt;
==Quirks==&lt;br /&gt;
&lt;br /&gt;
* The Raspberry Pi requires that the &amp;lt;code&amp;gt;bcm_host_init()&amp;lt;/code&amp;gt; function is called first before any GPU calls can be made.&lt;br /&gt;
* &amp;lt;code&amp;gt;[[#graphics_get_display_size|graphics_get_display_size()]]&amp;lt;/code&amp;gt; is a broadcom-specific function&lt;br /&gt;
&lt;br /&gt;
== Sample Programs==&lt;br /&gt;
The Raspberry Pi comes with 7 sample programs and two helper libraries in the /opt/vc/src/hello_pi directory showing some of the system's capabilities and sample code. &lt;br /&gt;
===hello_video===&lt;br /&gt;
This sample decodes h264 video using the OpenMAX APIs and the ilclient library, and is distributed with a short scene of [http://www.bigbuckbunny.org/ Big Buck Bunny]&lt;br /&gt;
===ilclient helper library===&lt;br /&gt;
This library is described as:&lt;br /&gt;
&amp;lt;code&amp;gt;This API defines helper functions for writing IL clients.&lt;br /&gt;
 *&lt;br /&gt;
 * This file defines an IL client side library.  This is useful when&lt;br /&gt;
 * writing IL clients, since there tends to be much repeated and&lt;br /&gt;
 * common code across both single and multiple clients.  This library&lt;br /&gt;
 * seeks to remove that common code and abstract some of the&lt;br /&gt;
 * interactions with components.  There is a wrapper around a&lt;br /&gt;
 * component and tunnel, and some operations can be done on lists of&lt;br /&gt;
 * these.  The callbacks from components are handled, and specific&lt;br /&gt;
 * events can be checked or waited for.&lt;br /&gt;
 */&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Libraries ==&lt;br /&gt;
=== vc_dispmanx_*===&lt;br /&gt;
''TODO''&lt;br /&gt;
=== vc_tvservice_* ===&lt;br /&gt;
These APIs allow controlling the HDMI and SDTV video outputs of the Raspberry Pi.&lt;br /&gt;
&lt;br /&gt;
''TODO: Describe better''&lt;br /&gt;
=== vc_cec_* ===&lt;br /&gt;
''TODO''&lt;br /&gt;
=== vc_gencmd_* ===&lt;br /&gt;
''TODO''&lt;br /&gt;
=== EGL ===&lt;br /&gt;
[http://www.khronos.org/egl/ EGL (Native Platform Graphics Interface)] is an interface between Khronos rendering APIs such as OpenGL ES or OpenVG and the underlying native platform. The Raspberry Pi supports Version 1.4 and the following EGL extensions (links are to EGL registry documentation):&amp;lt;ref name=&amp;quot;egl-info&amp;quot;&amp;gt;eglinfo, http://www.raspberrypi.org/phpBB3/viewtopic.php?p=35942#p35942 , http://www.raspberrypi.org/phpBB3/viewtopic.php?p=36318#p36318&amp;lt;/ref&amp;gt;&lt;br /&gt;
*EGL_KHR_image&lt;br /&gt;
*EGL_KHR_image_base&lt;br /&gt;
*EGL_KHR_image_pixmap&lt;br /&gt;
*EGL_KHR_vg_parent_image&lt;br /&gt;
*EGL_KHR_gl_texture_2D_image&lt;br /&gt;
*EGL_KHR_gl_texture_cubemap_image&lt;br /&gt;
*EGL_KHR_lock_surface&lt;br /&gt;
&lt;br /&gt;
==== Samples====&lt;br /&gt;
&lt;br /&gt;
See [http://jonmacey.blogspot.com.au/2012/05/getting-started-with-egl-on-raspberry.html Getting Started with EGL] post by Jon Macey&lt;br /&gt;
&lt;br /&gt;
==== Function Documentation====&lt;br /&gt;
====={{anchor|graphics_get_display_size}}&amp;lt;code&amp;gt;int32_t graphics_get_display_size( const uint16_t display_number, uint32_t *width, uint32_t *height);&amp;lt;/code&amp;gt;=====&lt;br /&gt;
&lt;br /&gt;
This function allows you to get the size of the display, and is often used in creating an EGL Surface. width and height are pointers that you pass in to where you want the response values to be written to, display number 0 is usually used for the Raspberry Pi. return value meaning is unknown.&lt;br /&gt;
&lt;br /&gt;
Bugs present in early versions of the firmware caused this function to always return 1920x1080, however this can easily be fixed by updating the firmware with [https://github.com/Hexxeh/rpi-update Hexxeh's rpi-update].&amp;lt;ref&amp;gt;http://www.raspberrypi.org/phpBB3/viewtopic.php?f=68&amp;amp;t=8252&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== OpenGL ES ===&lt;br /&gt;
The Raspberry Pi supports OpenGL ES 2.0 with the following extensions: &amp;lt;ref name=&amp;quot;egl-info&amp;quot; /&amp;gt;&lt;br /&gt;
*GL_OES_compressed_ETC1_RGB8_texture&lt;br /&gt;
*GL_OES_compressed_paletted_texture&lt;br /&gt;
*GL_OES_texture_npot GL_OES_depth24&lt;br /&gt;
*GL_OES_vertex_half_float&lt;br /&gt;
*GL_OES_EGL_image&lt;br /&gt;
*GL_OES_EGL_image_external&lt;br /&gt;
*GL_EXT_discard_framebuffer&lt;br /&gt;
*GL_OES_rgb8_rgba8&lt;br /&gt;
*GL_OES_depth32&lt;br /&gt;
*GL_OES_mapbuffer&lt;br /&gt;
*GL_EXT_texture_format_BGRA8888&lt;br /&gt;
*GL_APPLE_rgb_422&lt;br /&gt;
*GL_EXT_debug_marker&lt;br /&gt;
 &lt;br /&gt;
''TODO: Sample of how to use/initalise OpenGL ES''&lt;br /&gt;
&lt;br /&gt;
=== OpenMAX ===&lt;br /&gt;
See [https://github.com/raspberrypi/firmware/tree/master/documentation/ilcomponents /documentation/ilcomponents] on GitHub firmware repository for official documentation.&lt;br /&gt;
&lt;br /&gt;
''TODO: Sample of how to use OpenMAX to decode audio/video/images, etc.''&lt;br /&gt;
&lt;br /&gt;
== Other Programming Languages ==&lt;br /&gt;
&lt;br /&gt;
''TODO: Find and list any libraries written for other languages (e.g. Python) that interface with the Pi's GPU''&lt;br /&gt;
&lt;br /&gt;
== Programs designed to work with the Raspberry Pi's VideoCore APIs ==&lt;br /&gt;
* '''[https://github.com/huceke/omxplayer omxplayer]''' - ''a command line a/v player for the Raspberry Pi utilising the OpenMAX APIs and ffmpeg''&lt;br /&gt;
* '''[http://wiki.xbmc.org/index.php?title=Raspberry_Pi XBMC]''' - ''a media center, omxplayer's &amp;quot;big brother&amp;quot; ''&lt;br /&gt;
* '''[http://nccastaff.bournemouth.ac.uk/jmacey/GraphicsLib/piNGL/index.html piNGL]''' - ''port of the NGL graphics library to Raspberry Pi''&lt;br /&gt;
* qt5 samples - ''TODO: Find link''&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Template:Raspberry Pi}}&lt;br /&gt;
[[Category: RaspberryPi]]&lt;/div&gt;</summary>
		<author><name>Adammw</name></author>	</entry>

	<entry>
		<id>http://elinux.org/RPi_config_for_your_TV</id>
		<title>RPi config for your TV</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/RPi_config_for_your_TV"/>
				<updated>2012-06-15T13:41:40Z</updated>
		
		<summary type="html">&lt;p&gt;Adammw: Add JVC TV, unsure of model, similar to AV-2134YE&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:RaspberryPi]]&lt;br /&gt;
&lt;br /&gt;
The config settings below are known to work for some users. [http://www.raspberrypi.org/forum/features-and-requests/should-we-make-a-wiki-page-for-overscan-settings/ Here is the forum thread]. Use it at own risk!&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
!Brand&lt;br /&gt;
!Model&lt;br /&gt;
!overscan_left&lt;br /&gt;
!overscan_right&lt;br /&gt;
!overscan_top&lt;br /&gt;
!overscan_bottom&lt;br /&gt;
!Remarks&lt;br /&gt;
|-&lt;br /&gt;
|DGM&lt;br /&gt;
|DGM ETV-2493WHC&lt;br /&gt;
|38&lt;br /&gt;
|38&lt;br /&gt;
|28&lt;br /&gt;
|20&lt;br /&gt;
|These are for 1080p mode. If you wish to 720p [HDMI=19] the settings may need tweaking again&lt;br /&gt;
|-&lt;br /&gt;
|Panasonic&lt;br /&gt;
|Viera TH-50PX60U&lt;br /&gt;
|20&lt;br /&gt;
|20&lt;br /&gt;
|10&lt;br /&gt;
|10&lt;br /&gt;
|TV is capable of 1080p, but RPi comes up at 1280x720. OS debian6-13-04-2012.zip.&lt;br /&gt;
|-&lt;br /&gt;
|LG&lt;br /&gt;
|Generic 17&amp;quot; LCD&lt;br /&gt;
|36&lt;br /&gt;
|48&lt;br /&gt;
|14&lt;br /&gt;
|18&lt;br /&gt;
|Composite video input&lt;br /&gt;
|-&lt;br /&gt;
|JVC&lt;br /&gt;
|Flat Screen Color Television&lt;br /&gt;
|25&lt;br /&gt;
|25&lt;br /&gt;
|5&lt;br /&gt;
|5&lt;br /&gt;
|Using sdtv_mode=2 with composite video input&lt;br /&gt;
|-&lt;br /&gt;
|Lilliput&lt;br /&gt;
|665 (7&amp;quot; monitor)&lt;br /&gt;
|80&lt;br /&gt;
|80&lt;br /&gt;
|80&lt;br /&gt;
|120&lt;br /&gt;
| Using sdtv_mode=2, hdmi_drive=2, sdtv_aspect=3, hdmi_mode=4&lt;br /&gt;
|-&lt;br /&gt;
!Brand&lt;br /&gt;
!Model&lt;br /&gt;
!overscan_left&lt;br /&gt;
!overscan_right&lt;br /&gt;
!overscan_top&lt;br /&gt;
!overscan_bottom&lt;br /&gt;
!Remarks&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Adammw</name></author>	</entry>

	<entry>
		<id>http://elinux.org/Talk:R-Pi_Troubleshooting</id>
		<title>Talk:R-Pi Troubleshooting</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Talk:R-Pi_Troubleshooting"/>
				<updated>2012-06-14T09:53:52Z</updated>
		
		<summary type="html">&lt;p&gt;Adammw: /* DVI Interference occuring after firmware upgrade */ new section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== New Power/startup issue ==&lt;br /&gt;
&lt;br /&gt;
I'm seeing a symptom not yet described on the page.&lt;br /&gt;
&lt;br /&gt;
The Red PWR led is on. The (normally) green led for OK is not, except for a tiny green dot in the center of the led.&lt;br /&gt;
Or is this point 1.2?&lt;br /&gt;
&lt;br /&gt;
In my case the board does not boot at all (no video, no flickering leds). According to Farnell there might be an issue with a recent series of boards that all seem to have this behaviour. But this still needs to be confirmed.&lt;br /&gt;
&lt;br /&gt;
I still have to test some other distro's and SD cards to exclude a few failure modes.&lt;br /&gt;
&lt;br /&gt;
== DVI Interference occuring after firmware upgrade ==&lt;br /&gt;
&lt;br /&gt;
Hi, I just got my raspberry Pi today and was playing with it fine on the firmware that came with the image download with clear picture and no interference with both the standard config.txt and with overscan disabled, but when updating to the newer firmware with Hexxeh's rpi-update command, the interference issue described on this page started occurring (although with red dots rather than green like the picture). It did go away when setting the config_hdmi_boost to 4 - but it might help others to note that this could be caused by a firmware update, and not necessarily mean that something is broken. Although, I do find it strange if the &amp;quot;defaults&amp;quot; were changed as it causes this problem. [[User:Adammw|Adammw]] 09:53, 14 June 2012 (UTC)&lt;/div&gt;</summary>
		<author><name>Adammw</name></author>	</entry>

	<entry>
		<id>http://elinux.org/RPi_VerifiedPeripherals</id>
		<title>RPi VerifiedPeripherals</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/RPi_VerifiedPeripherals"/>
				<updated>2012-06-14T05:00:42Z</updated>
		
		<summary type="html">&lt;p&gt;Adammw: /* USB Keyboards */ Added Sony PS2 Keyboard&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: Linux]]&lt;br /&gt;
[[Category: ARM Development Boards]]&lt;br /&gt;
[[Category: Broadcom]]&lt;br /&gt;
[[Category: Development Boards]]&lt;br /&gt;
[[Category: RaspberryPi]]&lt;br /&gt;
[[Category: Education]]&lt;br /&gt;
{{Template: RPi_Hardware}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''A note about this page: For USB devices, please specify if they required a powered hub'''&lt;br /&gt;
==Notes==&lt;br /&gt;
&lt;br /&gt;
19-Apr-2012: Now that the Model B board is shipping, details added should relate to this board and the [http://www.raspberrypi.org/downloads default Debian distribution] unless stated otherwise. A suggested suffix markup scheme is as follows:&lt;br /&gt;
&lt;br /&gt;
* (A) - Relates to model A production board&lt;br /&gt;
* (B) - Relates to model B production board&lt;br /&gt;
* (!) - Information from alpha and beta board days -- beta board verified peripherals should still apply to production boards for the most part, but the alpha board is fairly different&lt;br /&gt;
* No markup - relates to all production boards&lt;br /&gt;
&lt;br /&gt;
''Discuss: [http://www.raspberrypi.org/forum/?mingleforumaction=viewtopic&amp;amp;t=247 http://www.raspberrypi.org/forum/?mingleforumaction=viewtopic&amp;amp;t=247]''&lt;br /&gt;
&lt;br /&gt;
If you are adding to a product list it would help clarity if entries are kept/added in alphabetical order.&lt;br /&gt;
&lt;br /&gt;
{{Warning|Adding peripherals may increase the loading on the power supply to your board and this, in turn, may affect the voltage presented to the RPi. If the RPi's supply voltage falls below a certain value (anecdotally stated as around 4.75V), or it begins to fluctuate, your setup may become unstable. There is a [http://elinux.org/RPi_Hardware#Power Wiki section about this issue] which is worth a read.}}&lt;br /&gt;
&lt;br /&gt;
== Powered USB Hubs ==&lt;br /&gt;
A number of low-cost powered USB hubs are known to have caused problems. Members of the Raspberry Pi forums have reported low power or no power at all in some cases. The following is a list of specific Powered USB Hubs which appear to be fault-free. Please note that these do not take into account powering the Raspberry Pi from the hub, in addition to its peripherals.&lt;br /&gt;
&lt;br /&gt;
===Working USB Hubs===&lt;br /&gt;
*'''Belkin'''&lt;br /&gt;
** F4U040 4-Port Ultra-Slim Desktop hub (powered 5v, 2.6A)&lt;br /&gt;
** F5U224 4 port powered USB hub&lt;br /&gt;
** F5U231 Hi-speed USB 2.0 Tertrahub - 4 port powered USB hub&lt;br /&gt;
** F5U706ea/uk 2-in-1 Hub (USB 2.0, powered, 7-port)&lt;br /&gt;
*'''Digicom'''&lt;br /&gt;
** [http://www.digicom.it/digisit/prodotti.nsf/itprodottiidx/MiniHubUsb204P#]MiniHUB 4-Port USB 2.0 with PSU 5V - 2A .&lt;br /&gt;
*'''Logik'''&lt;br /&gt;
** LP4HUB10 4-Port USB Hub&lt;br /&gt;
*'''LogiLink'''&lt;br /&gt;
** UA0096 USB 2.0 Hub, 10-Port  with PSU 5V, 3.5A&lt;br /&gt;
*'''Newlink'''&lt;br /&gt;
** NLUSB2-224P 4 port USB 2.0 Mini hub with PSU 5V 1A&lt;br /&gt;
*'''SumVision'''&lt;br /&gt;
**  Sumvision Slim 4 Port High Speed USB 2.0 HUB with PSU 5V 1.0A (from [http://www.7dayshop.com/catalog/account_history_info.php?page=1&amp;amp;order_id=5130107 | 7dayshop ])&lt;br /&gt;
*'''Targus'''&lt;br /&gt;
** ACH81xx 7-port powered hub. 5V 3A power supply, with 2 high power ports. (possible conflicting behaviour with USB keyboard / Wifi Dongles)&lt;br /&gt;
&lt;br /&gt;
===Problem USB Hubs===&lt;br /&gt;
*'''Belkin'''&lt;br /&gt;
** 7-Port Powered Mobile Hub - device labelled F4U018, packaging labelled F5U701. lsusb reveals it to be two Genesys Logic 4-port hubs based on the GL850G chipset (vendor: 0x05e3 product: 0x0608) ganged together. Yields a lot of &amp;quot;handle_hc_chhltd_intr_dma:: XactErr without NYET/NAK/ACK&amp;quot; errors and device resets in /var/log/messages. Low speed devices such as keyboards work OK, wifi/mass storage is unreliable or broken.&lt;br /&gt;
** 7-Port Powered Hub - device labled F5U237 Rev.3 - ID 050d:0237 Wired ethernet fails to connect; gives &amp;quot;DWC OTG HCD URB enqueue failed adding QTD. Error status -4008&amp;quot; Result is same as DUB-H7 below.&lt;br /&gt;
** F5U404 Hi-Speed USB 2.0 4-Port Mobile Hub. Faulty/bad design; Leaks current back up the cable to the Raspberry Pi.&lt;br /&gt;
&lt;br /&gt;
*'''D-Link'''&lt;br /&gt;
** 7-Port USB Hub DUB-H7 (Prevents ethernet from being recognised so wrong time &amp;amp; no IP address).&lt;br /&gt;
&lt;br /&gt;
*'''E-Solution'''&lt;br /&gt;
** 4-Port 2A Supply (Does not detect at all during boot or after boot- no messages) [IC = Alcor Micro Corp (AU6254)]&lt;br /&gt;
&lt;br /&gt;
*'''Kensington'''&lt;br /&gt;
** 7-Port Dome Hub model no 1500129 (Possible problems with malfunctioning keyboard, kills mouse when GUI started).&lt;br /&gt;
&lt;br /&gt;
*'''Inland'''&lt;br /&gt;
** 4-Port USB 2.0 Cable Hub model no 480426 (Some devices work, some don't, cheap unshielded untwisted wire design)&lt;br /&gt;
&lt;br /&gt;
*'''Soniq'''&lt;br /&gt;
** 4-Port 5V supply. Model number CUH100. (B). Appears to draw power away from the Raspberry Pi, even when the Pi has an isolated power line. Netgear WNA1100 WiFi Adapter (which is known to work in other setups is recognized, but unresponsive.&lt;br /&gt;
&lt;br /&gt;
*'''Unbranded / Multiple Brands'''&lt;br /&gt;
** 7-port silver/black hub. Also sold elsewhere under brands such as 'EX-Pro', 'Trixes' and 'Xentra' -- This is ''probably'' due to an inadequate power supply.&lt;br /&gt;
** Generic 7-port black hub with Genesys Logic GL850A chipset&lt;br /&gt;
** Cerulian 10 Port USB 2.0 Top Loading Hub with 2A supply (kills mouse and network port)&amp;lt;ref&amp;gt;http://www.raspberrypi.org/forum/absolute-beginners/cheap-powered-usb-hub-uk/#p76452&amp;lt;/ref&amp;gt;&lt;br /&gt;
** [http://www.monoprice.com/products/product.asp?c_id=103&amp;amp;cp_id=10307&amp;amp;cs_id=1030701&amp;amp;p_id=226 USB 2.0 4 PORT INT/EXT DUAL HUB BAY] -- Genesys Chipset -- idVendor=05e3, idProduct=0607 -- low speed devices worked, but strange USB failures when X session started.  High speed devices such as hard drives had failures.&lt;br /&gt;
&lt;br /&gt;
== USB Remotes ==&lt;br /&gt;
* [https://www.google.com/search?q=tranksung+TS-Y150 Tranksung TS-Y150] USB RF Keyboard and air mouse (B)&lt;br /&gt;
&lt;br /&gt;
* [http://www.digicom.it/digisit/prodotti.nsf/itprodottiidx/WKEYPE01] '''DIGICOM WKEYPE01''' - Mini RF Wireless  Keyboard and touchpad&lt;br /&gt;
&lt;br /&gt;
== USB Keyboards ==&lt;br /&gt;
USB keyboards that present themselves as a standard HID (Human Interface Device) device should work.  '''Please be aware that some of these keyboards were probably used with a powered hub'''&lt;br /&gt;
=== Working USB Keyboards ===&lt;br /&gt;
The following is a list of specific keyboards known to work and which appear to be fault-free.&lt;br /&gt;
&lt;br /&gt;
* '''A4 Tech'''&lt;br /&gt;
** Model KL-5 USB Keyboard, 20mA.&lt;br /&gt;
&lt;br /&gt;
* '''ABS'''&lt;br /&gt;
** M1 Heavy Duty Professional Gaming Mechanical Keyboard (B)&lt;br /&gt;
&lt;br /&gt;
* '''Accuratus'''&lt;br /&gt;
** KYB-Toughball-HI&lt;br /&gt;
&lt;br /&gt;
* '''Acer'''&lt;br /&gt;
** KG-0917 Wireless Keyboard And Mouse Bundle  (B)&lt;br /&gt;
** KU-0906 Compact Keyboard (B) (Also known as Genius LuxeMate i200 Keyboard)&lt;br /&gt;
** SK-9625 Multimedia Keyboard (B) (multimedia functions not tested)&lt;br /&gt;
&lt;br /&gt;
* '''Adesso'''&lt;br /&gt;
** [http://ergoprise.com/product_images/j/699/ADP-PU21_big__14173_zoom.jpg PS/2 to USB Adapter] ADP-PU21, 100mA (tested only with keyboards)&lt;br /&gt;
&lt;br /&gt;
* '''Apple'''&lt;br /&gt;
** Apple Keyboard (109 keys) A1048 - requires powered hub&lt;br /&gt;
** Apple Keyboard with Numeric Keypad (aluminium/wired) A1243&lt;br /&gt;
&lt;br /&gt;
* '''Asda'''&lt;br /&gt;
** Basic Wired Keyboard HK2026 (B)&lt;br /&gt;
** Basic Wired Keyboard HK3014&lt;br /&gt;
*** (Please note when I put this keyboard through Newlink USB hub, it didn't work as expected)&lt;br /&gt;
&lt;br /&gt;
* '''Asda'''&lt;br /&gt;
** Premium Wireless Keyboard (white keys, silver back) HK8028&lt;br /&gt;
** Wireless Multimedia Deskset (keyboard, mouse and USB dongle) Model: HKM8016B (Note: Shown on Asda Website as HK8016B) (B)&lt;br /&gt;
&lt;br /&gt;
* '''Bush'''&lt;br /&gt;
** Wired Slimline Keyboard KU-0833&lt;br /&gt;
*** This does not require a USB hub in order to work with the Raspberry Pi&lt;br /&gt;
*** In the UK, it is available from Argos for £9.99&lt;br /&gt;
&lt;br /&gt;
* '''Cerulian''' &lt;br /&gt;
** Mini wireless keyboard and mouse deskset (B)&lt;br /&gt;
&lt;br /&gt;
* '''Cherry'''&lt;br /&gt;
** CyMotion Master Linux (B)&lt;br /&gt;
** RS 6000 USB ON&lt;br /&gt;
&lt;br /&gt;
* '''Dell'''&lt;br /&gt;
** SK-8135 (B) (Rated 1.5A. Takes too much power from pi even when not used as USB hub. Symptom = repeated keystrokes)&lt;br /&gt;
** SK-8115 (B) (Rated 100mA. Works directly in pi)&lt;br /&gt;
** L100 (B)&lt;br /&gt;
&lt;br /&gt;
* '''Das Keyboard'''&lt;br /&gt;
** Model S Professional Keyboard (Built in USB hub not tested) (B)&lt;br /&gt;
&lt;br /&gt;
* '''Dynex'''&lt;br /&gt;
** DX_-WKBD (60ma) (B)&lt;br /&gt;
&lt;br /&gt;
* '''EAPPLY'''&lt;br /&gt;
** EBO-013 Wireless 2.4GHz compact keyboard with touchpad. Rated &amp;lt;40mA works directly from Pi. eBay ref 260962010276 from Shenzen, China.&lt;br /&gt;
&lt;br /&gt;
* '''Emprex'''&lt;br /&gt;
** Wireless Media Control Keyboard With Trackball 9039ARF III (Media functions untested)&lt;br /&gt;
&lt;br /&gt;
* '''Fujitsu Siemens''' &lt;br /&gt;
** KB SC USB UK (!)&lt;br /&gt;
** KB910 USB, with led light on the highest level (B)&lt;br /&gt;
** KB400 USB US&lt;br /&gt;
&lt;br /&gt;
* '''Gear Head''' &lt;br /&gt;
** KB3700TP (USB Mini Smart Touch Touchpad Keyboard) (B)&lt;br /&gt;
** KB3800TP (Wireless Touch Mini Touchpad Keyboard with Smart Touch) (B)&lt;br /&gt;
*** Works when plugged directly into Raspberry Pi, did not work with powered hub (could be a hub issue)&lt;br /&gt;
** KB4950TPW (Wireless Touch II Touchpad Keyboard) (B)&lt;br /&gt;
&lt;br /&gt;
* '''Genius'''&lt;br /&gt;
** Ergomedia 700 (GK-04008/C) used without Hub&lt;br /&gt;
** KB-06XE (K639) (B)&lt;br /&gt;
** Slimstar 8000 wireless keyboard&lt;br /&gt;
&lt;br /&gt;
* '''HP'''&lt;br /&gt;
** KG-1061&lt;br /&gt;
** KG-0851 Wireless Keyboard and Mouse&lt;br /&gt;
&lt;br /&gt;
* '''IOGEAR'''&lt;br /&gt;
** IOGEAR GKM561R Wireless HTPC Multimedia Keyboard with Trackball&lt;br /&gt;
&lt;br /&gt;
* '''Jenkins'''&lt;br /&gt;
** Jenkins Wireless Desktop Set Blue (B)&lt;br /&gt;
&lt;br /&gt;
* '''KeySonic'''&lt;br /&gt;
** ACK-540RF&lt;br /&gt;
** ACK-3700C&lt;br /&gt;
&lt;br /&gt;
* '''Lenovo'''&lt;br /&gt;
** SK-8825 UK (B)&lt;br /&gt;
** Lenovo Enhanced Multimedia Remote with backlit keyboard N5902 (US)&lt;br /&gt;
** Lenovo Mini Wireless Keyboard N5901 (US)&lt;br /&gt;
&lt;br /&gt;
* '''Logik'''&lt;br /&gt;
** Ultra slim keyboard LKBWSL11 (B)&lt;br /&gt;
&lt;br /&gt;
* '''Logitech''' &lt;br /&gt;
** diNovo Mini wireless keyboard with media controls and clickpad 920-000586 (B)&lt;br /&gt;
** Wii wireless keyboard KG-0802 (!)&lt;br /&gt;
** C-BG17-Dual Wireless keyboard and mouse with wired USB receiver (B)&lt;br /&gt;
** MK 220 wireless keyboard and mouse&lt;br /&gt;
** MK 250 wireless keyboard and mouse&lt;br /&gt;
** MK 260 wireless keyboard and mouse&lt;br /&gt;
** MK 320 wireless keyboard and mouse [http://www.amazon.co.uk/Logitech-920-002885-MK320-Wireless-Desktop/dp/B003STDQYW/ref=sr_1_3?ie=UTF8&amp;amp;qid=1339166178&amp;amp;sr=8-3]&lt;br /&gt;
** MK 520 wireless keyboard and mouse&lt;br /&gt;
** EX110 Cordless Desktop, wireless keyboard and mouse (B)&lt;br /&gt;
** K120 Keyboard (B)&lt;br /&gt;
** K200 Keyboard (B)&lt;br /&gt;
** K360 Wireless Keyboard (B)&lt;br /&gt;
** K400 wireless keyboard with touchpad (B)&lt;br /&gt;
** K520 Keyboard (B)&lt;br /&gt;
** K750 Wireless Solar Keyboard (B)&lt;br /&gt;
** Ultra-Flat Keyboard (M/N Y-BP62A P/N 820-000245 PID SY126UK)labelled 100 mA.  OK direct into Model B RPi.&lt;br /&gt;
&lt;br /&gt;
* '''Microsoft''' &lt;br /&gt;
**Wired Keyboard 600 Model 1366 (Debian 28-May-2012 on Production Model B)&lt;br /&gt;
**Comfort Curve Keyboard 2000 v1.0 (Debian 13-Apr-2012 on Production Model B)&lt;br /&gt;
**Comfort Curve Keyboard 3000 for Business&lt;br /&gt;
**Microsoft Digital Media Pro Keyboard Model : 1031 (Debian 13-Apr-2012)&lt;br /&gt;
**Microsoft Wireless Desktop 700 Keyboard v2.0 (Raspbian Pisces image 08-June-2012 on Production Model B)&lt;br /&gt;
&lt;br /&gt;
* '''Mikomi''' &lt;br /&gt;
** Wireless Deskset KM80545 Keyboard and mouse (Works but range is terrible less than a metre) (B)&lt;br /&gt;
&lt;br /&gt;
* '''Monoprice'''&lt;br /&gt;
** [http://www.monoprice.com/products/product.asp?c_id=104&amp;amp;cp_id=10404&amp;amp;cs_id=1040401&amp;amp;p_id=6854&amp;amp;seq=1&amp;amp;format=2|Monoprice PS/2 To USB Adapter] Directly and through an unpowered hub with a USB mouse plugged in.&lt;br /&gt;
&lt;br /&gt;
* '''Novatech'''&lt;br /&gt;
** [http://www.novatech.co.uk/products/peripherals/desktopkits/nov-wcombo.html|Novatech Wireless Combo - Keyboard &amp;amp; Mouse, Nano adapter] (B)&lt;br /&gt;
&lt;br /&gt;
* '''Perixx''' &lt;br /&gt;
**Periboard 716 Wireless Ultra-Slim Keyboard with Touchpad (Debian 07-Jun-2012 on Production Model B)&lt;br /&gt;
&lt;br /&gt;
* '''Philips''' &lt;br /&gt;
**Wired Multimedia Keyboard SPK3700BC/97 (Debian 19-Apr-2012 on Production Model B)&lt;br /&gt;
&lt;br /&gt;
* '''Rapoo'''&lt;br /&gt;
**Rapoo E9080 Wireless Ultra-Slim Keyboard with Touchpad&lt;br /&gt;
&lt;br /&gt;
*'''Riitek'''&lt;br /&gt;
**RT-MWK03 mini wireless keyboard &amp;amp; trackpad&lt;br /&gt;
&lt;br /&gt;
*'''Saitek'''&lt;br /&gt;
** Eclipse II Backlit Keyboard PK02AU (B)&lt;br /&gt;
** Eclipse Backlit Keyboard PZ30AV (B)&lt;br /&gt;
** Expression Keyboard (US) &lt;br /&gt;
** Cyborg V.5 (B)&lt;br /&gt;
&lt;br /&gt;
*'''Silvercrest'''&lt;br /&gt;
** MTS2219 Wireless Keyboard and mouse set. Powered hub NOT used. (B) &lt;br /&gt;
&lt;br /&gt;
*'''Sony'''&lt;br /&gt;
** Keyboard for PlayStation 2 (PS2) Linux. Works without powered hub with 5v1A supply, requires manual keyboard remapping with Debian Squeeze to USA 101-key layout.&lt;br /&gt;
&lt;br /&gt;
* '''SteelSeries'''&lt;br /&gt;
** Merc keyboard (B)&lt;br /&gt;
&lt;br /&gt;
* '''Sun microsystems'''&lt;br /&gt;
** Model: Type 7 , SUN PN: 320-1348-02 (Danish key layout)&lt;br /&gt;
&lt;br /&gt;
* '''Technika'''&lt;br /&gt;
** WKEY03 (B)&lt;br /&gt;
** TKD-211&lt;br /&gt;
&lt;br /&gt;
* '''Tesco'''&lt;br /&gt;
** Value Keyboard VK109 (B)&lt;br /&gt;
** Multimedia K211 Wired Keyboard (B)&lt;br /&gt;
&lt;br /&gt;
* '''Trust'''&lt;br /&gt;
** Trust 17916 Compact Wireless Entertainment Keyboard http://www.trust.com/products/product.aspx?artnr=17916 (B)&lt;br /&gt;
** Trust ClassicLine Keyboard http://trust.com/17184 &lt;br /&gt;
&lt;br /&gt;
* '''Q-Connect'''&lt;br /&gt;
** AK-808 (B)&lt;br /&gt;
&lt;br /&gt;
* '''Xenta'''&lt;br /&gt;
** 2.4GHz Wireless Multimedia Entertainment Keyboard with Touchpad (B)&lt;br /&gt;
** Multimedia Wireless Keyboard and Mouse Set (Keyboard Model: HK3518B) (B)&lt;br /&gt;
&lt;br /&gt;
===Problem USB Keyboards===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Accuratus'''&lt;br /&gt;
** Accuratus KYBAC100-101USBBLK causes kernel panic (rated 100mA). Tested with 1000mA cheap unbranded and Nokia 1200mA power adaptors.&lt;br /&gt;
*'''Argos'''&lt;br /&gt;
** Argos Value Wired Keyboard causes kernel panic&lt;br /&gt;
* '''Cit''' &lt;br /&gt;
** KB-1807UB Causes kernel panic (Rated &amp;lt;200ma)&lt;br /&gt;
* '''Dell'''&lt;br /&gt;
** SK-8115 causes kernel panic (rated 100mA) Debian 6-19-04-2012 (B)&lt;br /&gt;
* '''Gear Head'''&lt;br /&gt;
** KB2300U - Causes kernel panic (B)&lt;br /&gt;
* '''Inland''' &lt;br /&gt;
** Inland USB Keyboard Model #70010&lt;br /&gt;
* '''Microsoft''' &lt;br /&gt;
** Wireless Desktop 800 - Keyboard has 'sticky' keys. (B)&lt;br /&gt;
** Wireless Entertainment Keyboard - No key input recognized (possibly connectivity issue as pairing devices does not seem to work)&lt;br /&gt;
** Wireless Optical Desktop 1000 - Keyboard has 'sticky' keys (B)&lt;br /&gt;
** Wireless Keyboard 2000 - Keyboard has 'sticky' keys. (B)&lt;br /&gt;
** Arc wireless - Keyboard has 'sticky' keys. (B)&lt;br /&gt;
** Sidewinder X6 - Keyboard has 'sticky' keys. (B)&lt;br /&gt;
** Wireless Comfort Keyboard 5000 - Keyboard has 'sticky' keys. (B)&lt;br /&gt;
* '''Novatech'''&lt;br /&gt;
**  NOV-KEY2 - Causes kernel panic (B)&amp;lt;ref&amp;gt;http://www.raspberrypi.org/forum/troubleshooting/keyboard-creates-kernal-panic/page-2&amp;lt;/ref&amp;gt;&lt;br /&gt;
* '''Unbranded'''&lt;br /&gt;
** Compuparts&lt;br /&gt;
** model no. HK-6106 (B) &amp;lt;ref&amp;gt;http://www.raspberrypi.org/forum/troubleshooting/keyboard-creates-kernal-panic/page-2&amp;lt;/ref&amp;gt;&lt;br /&gt;
** LK-890 (Multimedia keyboard &amp;amp; Optical Mouse) - kernel panic on Debian Squeeze, ArchLinux and Qtonpi.&lt;br /&gt;
* '''Logik'''&lt;br /&gt;
** Wired Multimedia Keyboard Model: LKBWMM11 - causes kernel panic (on Debian 190412 distro) (B)&lt;br /&gt;
* '''Logitech'''&lt;br /&gt;
** Logitech Illuminated Keyboard (unstable; not working with led light on; testet both US and NO layouts with both Apple iPad 2 and Asus TF-101 USB chargers)&lt;br /&gt;
** G110 Gaming Keyboard - only works with illumination off, otherwise unresponsive. Once failed it needs reconnecting before another attempt. (B)&lt;br /&gt;
** G15 Gaming Keyboard - LCD and key backlights flicker, 95% unresponsive to typing. I don't know of a way to turn the illumination off. (B)&lt;br /&gt;
* '''PC World Essentials'''&lt;br /&gt;
** PKBW11 Wired Keyboard - no power to keyboard, no error messages on both Arch 29-04-2012 and Debian6-19-04-2012, same Pi works with Asda keyboard. Me too, but caused a kernel panic -- tested on powered hub and direct.&lt;br /&gt;
* '''Razor'''&lt;br /&gt;
** Razer Tarantula gaming keyboard - sticky keys, could be power issue as is programmable with host powered USB hub and audio jacks.&lt;br /&gt;
* '''Texet'''&lt;br /&gt;
** MB-768B standard keyboard (Rated 5V 1.5A(!), so probably too much power drain. Kernel panic, Debian6-19-04-2012)&lt;br /&gt;
* '''Trust''' &lt;br /&gt;
** TRUST GXT 18 Gaming Keyboard - No power to keyboard, could be a driver issue - no error messages.&lt;br /&gt;
* '''Wilkinsons / TEXET'''&lt;br /&gt;
** Model MB-768B causes kernel panic on debian6-19-04-2012.&lt;br /&gt;
* '''Xenta'''&lt;br /&gt;
** HK-6106 - causes kernel panic (on Debian 190412 distro)(B)&lt;br /&gt;
* '''Jeway'''&lt;br /&gt;
** JK-8170 &amp;quot;The Hunter&amp;quot; - causes kernel oops (Debian6-19-04-2012) (B)&lt;br /&gt;
&lt;br /&gt;
== USB Mouse devices ==&lt;br /&gt;
USB mouse devices that present themselves as a standard HID (Human Interface Device) device should work, however some hardware requires special drivers or additional software, usually only compatible with Windows operating systems.  &lt;br /&gt;
&lt;br /&gt;
===Working USB Mouse Devices===&lt;br /&gt;
The following is a list of specific mouse devices known to work and which appear to be fault-free.&lt;br /&gt;
&lt;br /&gt;
* '''A4Tech'''&lt;br /&gt;
** OP-530NU Padless Wired Mouse&lt;br /&gt;
&lt;br /&gt;
* '''Asda'''&lt;br /&gt;
** HM5058 (Smart Price) Wired Mouse&lt;br /&gt;
** Wireless Multimedia Deskset (keyboard, mouse and USB dongle) Model: HKM8016B (Note: Shown on Asda Website as HK8016B) (B)&lt;br /&gt;
&lt;br /&gt;
* '''Belkin'''&lt;br /&gt;
**F8E882-OPT (B)&lt;br /&gt;
&lt;br /&gt;
* '''Dell'''&lt;br /&gt;
** M-UVDEL1 (B)&lt;br /&gt;
** M056U0A (B)&lt;br /&gt;
&lt;br /&gt;
* '''Dynex'''&lt;br /&gt;
** DX-WMSE (100ma) (B)&lt;br /&gt;
&lt;br /&gt;
* '''Genius'''&lt;br /&gt;
** GM-04003A (B)&lt;br /&gt;
** Slimstar 8000 wireless mouse (Can be intermitent. Mouse pointer sometimes is irratic.)&lt;br /&gt;
&lt;br /&gt;
* '''Jenkins'''&lt;br /&gt;
** Jenkins Wireless Desktop Set Blue (B)&lt;br /&gt;
&lt;br /&gt;
* '''Logik'''&lt;br /&gt;
** Wired Optical Glow Mouse Model: LGGMO10. (B)&lt;br /&gt;
&lt;br /&gt;
* '''Logitech'''&lt;br /&gt;
** G5 Logitech Gaming Mouse (B)&lt;br /&gt;
** G500 Logitech Gaming Mouse (B)&lt;br /&gt;
** G700 Logitech Wireless Gaming Mouse (B)&lt;br /&gt;
** M305 Wireless Mouse&lt;br /&gt;
** MX320/MX400 laser mouse. (B)&lt;br /&gt;
** M505 USB wireless laser, model no: 910-001324 (B)&lt;br /&gt;
** M-BJ79 (B)&lt;br /&gt;
** M185 Wireless Mouse (B)&lt;br /&gt;
** LX-700 Cordless Desktop Receiver (B)&lt;br /&gt;
** Optical wheel mouse. (B)&lt;br /&gt;
** MX518 Optical wheel mouse (B)&lt;br /&gt;
** M210 (part of the MK260 set) (B)&lt;br /&gt;
** M310 Cordless Mouse&lt;br /&gt;
** M510 Wireless Mouse (B)&lt;br /&gt;
** Performance Mouse MX (B)&lt;br /&gt;
&lt;br /&gt;
* '''Microsoft''' &lt;br /&gt;
** Comfort Curve Mouse 3000 for Business&lt;br /&gt;
** Comfort Mouse 6000&lt;br /&gt;
** Compact optical mouse 500 V2.0 (B)&lt;br /&gt;
** Wheel Optical Mouse (wheel and additional buttons not tested) (B)&lt;br /&gt;
** Microsoft Intellimouse Optical Mouse&lt;br /&gt;
** Microsoft Wireless Laser Mouse 8000&lt;br /&gt;
** Microsoft Wireless Mobile Mouse 3500&lt;br /&gt;
** Microsoft Wireless Mobile Mouse 4000&lt;br /&gt;
** Microsoft Wireless Mouse 700 v2.0&lt;br /&gt;
&lt;br /&gt;
* '''Novatech'''&lt;br /&gt;
** [http://www.novatech.co.uk/products/peripherals/miceandtrackballs/nov-mouser.html|Novatech M1 USB Mouse - Wired](B)&lt;br /&gt;
** [http://www.novatech.co.uk/products/peripherals/miceandtrackballs/nov-dl10.html|Novatech DL10 Wireless Mouse] (B)&lt;br /&gt;
&lt;br /&gt;
* '''Saitek'''&lt;br /&gt;
** Notebook Optical Mouse (PM46)&lt;br /&gt;
&lt;br /&gt;
* '''Sun microsystems'''&lt;br /&gt;
** Model: FID-638 , SunPN: 371-0788-01&lt;br /&gt;
&lt;br /&gt;
* '''Targus'''&lt;br /&gt;
** AMU2701EUK (B)&lt;br /&gt;
&lt;br /&gt;
* '''Technika'''&lt;br /&gt;
** TKOPTM2 (B)&lt;br /&gt;
**TKD-211&lt;br /&gt;
&lt;br /&gt;
* '''Tesco'''&lt;br /&gt;
** Wired optical mouse M211 (B)&lt;br /&gt;
&lt;br /&gt;
* '''Xenta'''&lt;br /&gt;
** MOW0810 (B)&lt;br /&gt;
** Multimedia Wireless Keyboard and Mouse Set (Mouse Model: HM-3301) (B)&lt;br /&gt;
&lt;br /&gt;
* '''Generic'''&lt;br /&gt;
** Generic 2.4GHz Wireless Mouse (ID 040b:2013 Weltrend Semiconductor) (B)&lt;br /&gt;
&lt;br /&gt;
===Problem USB Mouse Devices===&lt;br /&gt;
The following is a list of specific mouse devices that have problems working with the Raspberry Pi&lt;br /&gt;
&lt;br /&gt;
* '''Razer'''&lt;br /&gt;
** Naga Wired USB mouse - the mouse seems to present itself as a keyboard because the numpad on the left-hand side of the device works but the cursor doesn't move.&lt;br /&gt;
&lt;br /&gt;
== USB WiFi Adapters ==&lt;br /&gt;
&lt;br /&gt;
See also: http://www.element14.com/community/docs/DOC-44703/l/raspberry-pi-wifi-adapter-testing&lt;br /&gt;
&lt;br /&gt;
There is a howto on installing the TL-WN722N adapter [http://elinux.org/RPi_Peripherals#Wireless:_TP-Link_TL-WN722N_USB_wireless_adapter_.28Debian_6.29 here], which also acts as a guide for installing others too.&lt;br /&gt;
&lt;br /&gt;
===Working USB Wifi Adapters===&lt;br /&gt;
&lt;br /&gt;
These adapters are known to work on the Raspberry Pi. This list is not exhaustive, other adapters may well work, but have not yet been tried.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' A WiFi adapter will probably need more power than the Raspberry Pi USB port can provide, especially if&lt;br /&gt;
there is a large distance from the WiFi adapter to the WiFi Access Point. Therefore, you may need to plug the WiFi adapter into a powered USB hub.&lt;br /&gt;
&lt;br /&gt;
* '''3COM'''&lt;br /&gt;
** 3CRUSB10075: ZyDAS zd1211rw chipset (!)&lt;br /&gt;
&lt;br /&gt;
* '''Alfa'''&lt;br /&gt;
** AWUS036NEH: Tested on Debian Squeeze (with Ralink firmware package)&lt;br /&gt;
&lt;br /&gt;
* '''Asus'''&lt;br /&gt;
** [http://www.element14.com/community/docs/DOC-44703 USB-N10] USB ID 0b05:1786, r8712u staging driver, included on Fedora Remix &amp;amp; Arch, must [http://www.element14.com/community/servlet/JiveServlet/download/44948-8-97488/r8712u_ko.zip download] for Debian and install firmware-realtek from non-free squeeze repo (B)&lt;br /&gt;
** [http://www.element14.com/community/docs/DOC-44703 USB-N13] USB ID 0b05:17ab, [http://www.electrictea.co.uk/rpi/8192cu.tar.gz download] compiled manufacturer driver for RTL8192CU per [http://www.raspberrypi.org/forum/troubleshooting/trying-to-get-an-rtl8188cus-wireless-usb-nic-working instructions] (B)&lt;br /&gt;
&lt;br /&gt;
* '''Belkin'''&lt;br /&gt;
** Belkin Components F5D7050 Wireless G Adapter v3000 [Ralink RT2571W]. On Debian requires the firmware-ralink package from the non-free repository. The usbcore module needs to be added to /etc/modules [http://www.penguintutor.com/blog/viewblog.php?blog=6281 install instructions].&lt;br /&gt;
** Belkin Components F7D1101 v1 Basic Wireless Adapter [Realtek RTL8188SU] USB ID 050d:945a, r8712u staging driver, included on Fedora Remix &amp;amp; Arch, must [http://www.element14.com/community/servlet/JiveServlet/download/44948-8-97488/r8712u_ko.zip download] for Debian and install firmware-realtek from non-free squeeze repo (B)&lt;br /&gt;
&lt;br /&gt;
* '''BlueProton'''&lt;br /&gt;
** [http://www.element14.com/community/docs/DOC-44703 BT3] USB ID: 0bda:8187; tested on Debian, Fedora &amp;amp; Arch; rtl8187 driver (B)&lt;br /&gt;
&lt;br /&gt;
* '''Conrad'''&lt;br /&gt;
** WLAN Stick N150 mini. Works out of the box in OpenELEC, [http://www.t3node.com/blog/sempre-wireless-usb-stick-wu300-2-on-raspberry-pi/ requires firmware-realtek and r8712u kernel module on Debian].&lt;br /&gt;
** WLAN Stick N150 Nano [Realtek RTL8188CUS]. Requires a powered USB hub. See Micronet SP907NS for installation instructions and script.&lt;br /&gt;
&lt;br /&gt;
* '''D-Link'''&lt;br /&gt;
** AirPlus G DWL-G122 (rev. E). USB ID 07d1:3c0f, Ralink RT2870. On Debian requires the &amp;lt;code&amp;gt;firmware-ralink&amp;lt;/code&amp;gt; package from the &amp;lt;code&amp;gt;squeeze-firmware&amp;lt;/code&amp;gt; non-free repository.&lt;br /&gt;
** DWA-140 (Version B1). USB ID 07d1:3c09, Ralink RT2870. On Debian requires the &amp;lt;code&amp;gt;firmware-ralink&amp;lt;/code&amp;gt; package from the &amp;lt;code&amp;gt;squeeze-firmware&amp;lt;/code&amp;gt; non-free repository.&lt;br /&gt;
** DWA-160 (Version B1). USB ID 07d1:3c11, Ralink RT2870. On Debian requires the &amp;lt;code&amp;gt;firmware-ralink&amp;lt;/code&amp;gt; package from the &amp;lt;code&amp;gt;squeeze-firmware&amp;lt;/code&amp;gt; non-free repository.&lt;br /&gt;
&lt;br /&gt;
* '''Edimax'''&lt;br /&gt;
** [http://www.edimax.co.uk/en/produce_detail.php?pd_id=328&amp;amp;pl1_id=1&amp;amp;pl2_id=44 EW-7811Un] USB ID 7392:7811, RTL8192CU, driver blob [http://www.electrictea.co.uk/rpi/8192cu.tar.gz download] via [http://www.element14.com/community/docs/DOC-44703 Element14], works with WPA2-AES-CCMP ([http://www.ctrl-alt-del.cc/2012/05/raspberry-pi-meets-edimax-ew-7811un-wireless-ada.html howto]) (B)&lt;br /&gt;
** Simple step-by-step instructions for [http://www.edimax.co.uk/en/produce_detail.php?pd_id=328&amp;amp;pl1_id=1&amp;amp;pl2_id=44 EW-7811Un] which uses the RTL8192 chipset [[RPi_edimax_EW-7811Un]](B)&lt;br /&gt;
** [http://www.edimax.com/en/produce_detail.php?pd_id=8&amp;amp;pl1_id=1&amp;amp;pl2_id=44 EW-7318USg] USB ID 148f:2573, rt73usb. RT2573 chipset. Works with powered usb-hub or shorted polyfuses.&lt;br /&gt;
&lt;br /&gt;
* '''edup'''&lt;br /&gt;
** [[http://www2.buyincoins.com/details/usb-150m-wifi-wireless-lan-network-card-adapter-antenna-product-1916.html Edup 150MBPS wifi adapter]] USB ID: 148f:5370 Ralink Technology, Corp. RT5370 Wireless Adapter. Driver is the RT2800USB module, I had to install the firmware as rt2870.bin in /lib/firmware.&lt;br /&gt;
** [http://www.szedup.com/show.aspx?id=1681 edup nano EP-N8508] Use method shown  [http://www.raspberrypi.org/phpBB3/viewtopic.php?t=7471&amp;amp;p=91736 here] for debian. Powered directly from RPi (B)&lt;br /&gt;
&lt;br /&gt;
* '''EnGenus'''&lt;br /&gt;
** EUB9603 EXT - Realtek r8712u driver &lt;br /&gt;
&lt;br /&gt;
* '''Gigabyte'''&lt;br /&gt;
**  Gigabyte GN-WB32L 802.11n USB WLAN Card. Works with the rt2800usb driver.&lt;br /&gt;
* '''IOGear'''&lt;br /&gt;
** [http://www.element14.com/community/docs/DOC-44703 GWU625] USB ID 0bda:8172, r8712u staging driver, included on Fedora Remix &amp;amp; Arch, must [http://www.element14.com/community/servlet/JiveServlet/download/44948-8-97488/r8712u_ko.zip download] for Debian and install firmware-realtek from non-free squeeze repo (B)&lt;br /&gt;
&lt;br /&gt;
* '''Micronet'''&lt;br /&gt;
** Micronet SP907NS, 11N Wireless LAN USB Adapter (uses Realtek RTL8188CUS) works plugged directly into R-Pi USB (B) [http://dl.dropbox.com/u/80256631/install-rtl8188cus.txt Debian installation instructions] read this first, and [http://dl.dropbox.com/u/80256631/install-rtl8188cus-20120611.sh Auto-install script]. The script has been used to install other adapters using the RTL8188CUS chip. [http://dl.dropbox.com/u/80256631/8192cu-20120611.tar.gz Updated driver] that handles the latest rpi-updates that kill the original driver, download for manual installation, automatically installed by the Auto-install script.&lt;br /&gt;
&lt;br /&gt;
* '''Netgear''' &lt;br /&gt;
** N150: Reported as WNA1100 device, uses the Atheros ar9271 chipset. On Debian, requires the &amp;lt;code&amp;gt;firmware-atheros&amp;lt;/code&amp;gt; package from the &amp;lt;code&amp;gt;squeeze-backports&amp;lt;/code&amp;gt; non-free repository  (!)&lt;br /&gt;
** WG111v2: Realtek rtl8187 chipset (!)&lt;br /&gt;
&lt;br /&gt;
* '''OvisLink'''&lt;br /&gt;
** Evo-W300USB: USB ID 148f:2270 Ralink Technology RT2770. apt-get install firmware-ralink&lt;br /&gt;
&lt;br /&gt;
* '''Patriot Memory'''&lt;br /&gt;
** [http://patriotmemory.com/products/detailp.jsp?prodline=6&amp;amp;catid=69&amp;amp;prodgroupid=163&amp;amp;id=1198&amp;amp;type=20 PCUSBW1150] Wireless 11N USB adapter  (uses Realtek RTL8188CUS) Install using Micronet script. Works only through powered usb hub.&lt;br /&gt;
** [http://www.patriotmemory.com/products/detailp.jsp?prodline=6&amp;amp;catid=69&amp;amp;prodgroupid=163&amp;amp;id=973&amp;amp;type=20 PCBOWAU2-N] Wireless 11N USB adapter  (uses Realtek RTL8191SU chip) Installed using r8712u Kernel module&lt;br /&gt;
&lt;br /&gt;
* '''Ralink'''&lt;br /&gt;
** inner 02 joggler wifi usb RT2770F  USB-ID 148f:2770 (firmware-ralink required) (only got dhcp on powered hub)&lt;br /&gt;
** [http://www.dx.com/p/24688 RT2070] USB-ID 148f:2070 ([http://wiki.debian.org/rt2870sta requires firmware])&lt;br /&gt;
** [http://www.element14.com/community/docs/DOC-44703 RT2501/RT2573] USB-ID 148f:2573 (firmware required) (B)&lt;br /&gt;
** RT5370 USB-ID 148f:5370 ([http://raspberry-pi-notes.blogspot.com/2012/05/rt5370-cheap-micro-usb-wireless-dongle.html requires firmware-ralink from wheezy]) (B)&lt;br /&gt;
&lt;br /&gt;
* '''Rosewill'''&lt;br /&gt;
** RNX-N180UBE Wireless B/G/N Adapter&lt;br /&gt;
*** Realtek RTL8191SU chipset, USB-ID 0bda:8172&lt;br /&gt;
*** Tested in Arch, works out of box. USB hub required.&lt;br /&gt;
** RNX-G1 Wireless B/G Adapter&lt;br /&gt;
*** Realtek RTL8187 chipset, USB-ID 0bda:8187&lt;br /&gt;
*** Tested in Arch, works out of box. USB hub required.&lt;br /&gt;
&lt;br /&gt;
* '''Sagem'''&lt;br /&gt;
** Sagem Wireless USB stick XG-760N : USB ID 079b:0062, Module is not shipped in Debian image, but can be &amp;quot;sudo apt-get install zd1211-firmware&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* '''Sempre'''&lt;br /&gt;
** Sempre Wireless USB stick WU300-2: USB ID 0bda:8172, Realtek r8712u driver + firmware-realtek package. Module is not shipped in Debian image, but can be found here: http://www.t3node.com/blog/sempre-wireless-usb-stick-wu300-2-on-raspberry-pi/&lt;br /&gt;
&lt;br /&gt;
* '''Tenda''' &lt;br /&gt;
** USB 11n adapter on a G network: Ralink  2870/3070 driver (!)&lt;br /&gt;
&lt;br /&gt;
* '''TP-Link'''&lt;br /&gt;
** TL-WN722N (ath9k_htc device with htc_9271.fw file from http://linuxwireless.org/download/htc_fw/1.3/htc_9271.fw) (B)&lt;br /&gt;
** TL-WN821N v3 (ath9k_htc, htc_7010.fw); works out of the box on ArchLinuxARM and on OpenElec (&amp;gt;r11211), Problems with prior OpenElec; needs powered USB Hub (B) &lt;br /&gt;
&lt;br /&gt;
* '''ZyXEL'''&lt;br /&gt;
** [http://www.element14.com/community/message/50015#50015/l/re-installing-kernel-headers-on-the-pi NWD2105] USB ID: 0586:341e, RT3070 chipset, rt2800usb driver (B)&lt;br /&gt;
&lt;br /&gt;
===Problem USB Wifi Adapters===&lt;br /&gt;
&lt;br /&gt;
These adapters were tested and found to have issues the Raspberry Pi. Note [http://www.raspberrypi.org/phpBB3/viewtopic.php?f=28&amp;amp;t=6928] as a possible solution/explanation for errors while running LXDE.&lt;br /&gt;
&lt;br /&gt;
* '''Realtek'''&lt;br /&gt;
** RTL8188CUS USB-ID 0bda:8176, kernel oops in dmesg and freeze when pulled from USB. (B)&lt;br /&gt;
* '''Trendnet'''&lt;br /&gt;
** [http://www.element14.com/community/docs/DOC-44703 TEW-424UB] USB ID: 0bda:8189; tested on Debian, Fedora &amp;amp; Arch; rtl8187 driver; errors with LXDE running (B)&lt;br /&gt;
* '''TP-Link'''&lt;br /&gt;
** [http://www.element14.com/community/docs/DOC-44703 TL-WN821N] USB ID: 0cf3:7015; tested on Debian; requires [http://linuxwireless.org/download/htc_fw/1.3/htc_7010.fw htc_7010.fw] firmware; ath9k_htc driver; errors with LXDE running (B)&lt;br /&gt;
** TL-WN723N USB ID: 0bda:8176; tested on Arch without a powered hub; it seems to draw too much current.&lt;br /&gt;
&lt;br /&gt;
== USB Bluetooth adapters ==&lt;br /&gt;
* Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode) - (USB ID 0a12:0001)&lt;br /&gt;
&lt;br /&gt;
== USB Ethernet adapters ==&lt;br /&gt;
&lt;br /&gt;
== USB Sound Cards ==&lt;br /&gt;
You will usually want the &amp;lt;code&amp;gt;alsa&amp;lt;/code&amp;gt; package for sound. In the Debian image for Raspberry Pi (and possibly other distributions) USB sound cards are prevented from loading as the first sound card, which can be an annoyance if it's the only device you have. To disable this behaviour edit &amp;lt;code&amp;gt;/etc/modprobe.d/alsa-base.conf&amp;lt;/code&amp;gt; and comment out the last line; &amp;lt;code&amp;gt;options snd-usb-audio index=-2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''Creative'''&lt;br /&gt;
** [http://asia.creative.com/products/product.asp?category=1&amp;amp;subcategory=207&amp;amp;product=17892 Sound Blaster Play!]&lt;br /&gt;
* '''Edirol'''&lt;br /&gt;
** [http://www.roland.com/products/en/UA-1A/ UA-1A]&lt;br /&gt;
&lt;br /&gt;
==USB 3G Dongles==&lt;br /&gt;
* Huawei E220&lt;br /&gt;
&lt;br /&gt;
== USB IR Receivers==&lt;br /&gt;
SMK Manufacturing, Inc. eHome Infrared Receiver (Works out of the box with OpenELEC)&lt;br /&gt;
&lt;br /&gt;
== USB TV Tuners and DVB devices==&lt;br /&gt;
*August&lt;br /&gt;
**DVB-T205, based on rtl2832u chipset, working with [https://github.com/ambrosa/DVB-Realtek-RTL2832U-2.2.2-10tuner-mod_kernel-3.0.0 this driver]. Tested with Saorview (Irish DTT service), both HD &amp;amp; SD.&lt;br /&gt;
*Technisat&lt;br /&gt;
**Technisat_SkyStar_USB_HD. Instructions: http://www.linuxtv.org/wiki/index.php/Technisat_SkyStar_USB_HD Used the Pi to receive and redirect it via network to another host. Didn't try to play back the stream on the Pi itself. Tested with Astra 19.2E radio and SD-TV channels&lt;br /&gt;
*Generic&lt;br /&gt;
** [http://www.onsources.com/product_images/a/757/watch_and_record_digital_tv_dongle__44323_zoom.jpg DVB-T USB Dongle (Silver casing)], based on AF9015 chipset.&lt;br /&gt;
** [http://www.electrodepot.fr/media/catalog/product/cache/1/image/500x/9df78eab33525d08d6e5fb8d27136e95/P926993.jpg DVB-T USB Dongle], based on RTL2832 FC12 (HD/SD), IR detected but not tested&lt;br /&gt;
&lt;br /&gt;
== USB Webcam ==&lt;br /&gt;
*Creative VF0470 Live! (works out of the box on ArchLinux)&lt;br /&gt;
*Logitech&lt;br /&gt;
**Logitech c270 (using external power)&lt;br /&gt;
**Logitech, Inc. Webcam C200&lt;br /&gt;
*Microsoft &lt;br /&gt;
**Xbox Live Vision camera (045e:0294), powered by Raspi, working on Arch&lt;br /&gt;
*Sony&lt;br /&gt;
**PlayStation Eye (for PlayStation 3)&lt;br /&gt;
* Trust 2MP Auto Focus Webcam (works out of the box on ArchLinux)&lt;br /&gt;
&lt;br /&gt;
== USB GPS devices ==&lt;br /&gt;
*Royaltek&lt;br /&gt;
**Royaltek RGM 2000 SiRF2 using the included serial (TTL) to USB - converter. That uses a Profilic pl2303-chip so you'll need to compile the module or the kernel manually&lt;br /&gt;
*Garmin&lt;br /&gt;
**Garmin eTrex Vista HCx: Works but may draw much power. To get it working (software part): https://wiki.openstreetmap.org/wiki/USB_Garmin_on_GNU/Linux&lt;br /&gt;
*Wintec&lt;br /&gt;
**WBT-200: No problem on Debian&lt;br /&gt;
&lt;br /&gt;
== USB UART adapters ==&lt;br /&gt;
The USB UART adapter is used to access the serial console of the Raspberry Pi from a development host such as a laptop or desktop PC.  The USB end connects to the PC and the UART header end connects to the USB.  While it is possible to connect the USB end to another Raspberry Pi, this configuration has not been tested unless explicitly mentioned against an individual entry below.&lt;br /&gt;
&lt;br /&gt;
== Other, exotic USB devices ==&lt;br /&gt;
*PEAK-System (www.peak-system.com)&lt;br /&gt;
**PCAN-USB using the driver (kernel module) from http://www.peak-system.com/fileadmin/media/linux/index.htm&lt;br /&gt;
*Tellstick (www.telldus.com)&lt;br /&gt;
**Depends on libftdi1&lt;br /&gt;
&lt;br /&gt;
== Power adapters ==&lt;br /&gt;
The Raspberry Pi uses a standard Micro USB (type B) power connector, which runs at 5v. Generally you can use a MicroUSB to USB cable and then either power the Raspberry Pi directly from your main computers USB ports (if they provide enough power), or by using a USB to Mains adaptor. A number of mobile phones use MicroUSB power cables, and these are compatible with the Raspberry Pi in most cases. Below is a list of power adaptors known to work.&lt;br /&gt;
&lt;br /&gt;
===Wired Adaptors===&lt;br /&gt;
* '''AlcaPower'''&lt;br /&gt;
** 5V 2.5A Model AP5A - Charger/switching with 7 connectors(also Microusb)&lt;br /&gt;
* '''Apple'''&lt;br /&gt;
** 5V 2.1A USB charger for iPad2, model A1357&lt;br /&gt;
** 5V 1.0A USB Charger for iPod&lt;br /&gt;
** 5V 1.0A USB Charger for iPhone 4&lt;br /&gt;
* '''Amazon'''&lt;br /&gt;
** 5V 0.85A USB charger for Kindle&lt;br /&gt;
** 5V 2A Mains to USB A adaptor, Branded &amp;quot;CostMad&amp;quot; &lt;br /&gt;
* '''Belkin'''&lt;br /&gt;
** 5V 2.6A 4 port Ultra-Slim Desktop hub (Model F4U040) (RPi running from USB Hub port)&lt;br /&gt;
** 5V 2.5A 4 port USB Hub (Model F5U404) (RPi running from USB Hub port)&lt;br /&gt;
** 5V 3.5A 7 port USB Hub (Model F5U706) (RPi running from USB Hub port)&lt;br /&gt;
* '''Blackberry'''&lt;br /&gt;
** Charger for Pearl Flip 8220, Bold 9600 (B)&lt;br /&gt;
** 5V 0.7A Model PSM04R-0500CHW1(M), RIM Part Number HDW-17957-003 (B)&lt;br /&gt;
* '''Dell'''&lt;br /&gt;
** USB Hub integrated in Dell monitors (B)&lt;br /&gt;
* '''Garmin'''&lt;br /&gt;
** 5V 1A charger (Model: PSA105R-050Q) supplied with Garmin Edge 800 GPS. Requires a USB-A to MicroUSB-B cable. Belkin 6ft cable (F3U151B06) works.&lt;br /&gt;
* '''HP'''&lt;br /&gt;
** 5.3V 2A Charger for HP Touchpad (B)&lt;br /&gt;
* '''HTC'''&lt;br /&gt;
** 5V 1A TCP-300 USB phone charger (B)&lt;br /&gt;
** 5V 1A TC E250 USB charger (HTC R/N: 79H00098-02M)&lt;br /&gt;
* '''i-box (Philex Electronic Ltd)'''&lt;br /&gt;
** 5V 1A USB charger, 1 USB socket, no USB lead supplied, Model: 76971HS/02 (available from ASDA and others in the UK) (B).&lt;br /&gt;
* '''LG'''&lt;br /&gt;
** 4.8V 1A Travel Adapter&lt;br /&gt;
**5.1V .7A Travel Adapter&lt;br /&gt;
* '''Logic'''&lt;br /&gt;
** 4 port USB Hub (Model LP4HUB10). (RPi running from USB Hub port, red power line (+5v) inside hub cut) (B)&lt;br /&gt;
* '''Maplin Electronics'''&lt;br /&gt;
** 5V 1A dual USB power supply, model number H25B-MT-K2&lt;br /&gt;
** Micro USB Power Supply N19HX&lt;br /&gt;
* '''Motorola'''&lt;br /&gt;
** [http://www.amazon.com/Motorola-Micro-USB-Home-Travel-Charger/dp/B004EYSKM8/ 5V 0.85A SPN5504 Charger with Cable]&lt;br /&gt;
* '''Nokia'''&lt;br /&gt;
** 5V 1.2A AC-10E Charger&lt;br /&gt;
* '''Noname'''&lt;br /&gt;
** 5V 2.1A KMS-AC09 4 port USB charger (B) [http://www.miniinthebox.com/kms-ac09-universal-ac-adapter-for-ipad-ipad-2-iphone-white_p208568.html]&lt;br /&gt;
** 5.2V 1A MW-3NU10GT - no cable, but this one works well (1m): [http://www.amazon.de/gp/product/B005L8VELA]&lt;br /&gt;
* '''Novatel Wireless'''&lt;br /&gt;
** 5V 1.05A Charger, model number SSW-1811, packaged with Verizon Wireless MiFi device&lt;br /&gt;
* '''Orange'''&lt;br /&gt;
** 5V 0.7A Charger for Orange San Francisco&lt;br /&gt;
* '''Palm'''&lt;br /&gt;
** 5V 1A Charger for Palm Pixi+ (B)&lt;br /&gt;
* '''Pantech'''&lt;br /&gt;
** 5.0V 1A CNR USB with LG DLC100 micro usb cable&lt;br /&gt;
* '''Samsung'''&lt;br /&gt;
** 5V 0.7A Charger for Galaxy S model ETA0U10EBE&lt;br /&gt;
** 5V 0.7A Charger for Galaxy SII&lt;br /&gt;
* '''Sony Ericsson'''&lt;br /&gt;
** 5V 0.7A Charger CST-80&lt;br /&gt;
* '''Travel Charger'''&lt;br /&gt;
** 5V 2.0A USB Power Adapter, [http://www.amazon.co.uk/gp/product/B0065JCIPU/ Amazon Link]&lt;br /&gt;
* '''Technika'''&lt;br /&gt;
** 5V 1A USB Power Adapter, model MPASS01 (B)&lt;br /&gt;
* '''TruePower'''&lt;br /&gt;
** [http://u-socket.com/ U-Socket] 5V 2.1A AC Receptacle with Built-in USB ports (2.1A per USB port) model ACE-7169&lt;br /&gt;
&lt;br /&gt;
===External Batteries===&lt;br /&gt;
* ''' New Trent'''&lt;br /&gt;
** iCurve IMP70D 7000mAh (Approx 12hrs from full charge)&lt;br /&gt;
* ''' Sinoele'''&lt;br /&gt;
** Movpower - Power Bank 5200mAh (8hrs with Wifi active)&lt;br /&gt;
* ''' TeckNet'''&lt;br /&gt;
** iEP392 Dual-Port 12000mAh External Power Bank (1A port, ~16.5 hours)&lt;br /&gt;
* '''Energizer/XPAL'''&lt;br /&gt;
** XP18000 18000mAh Power Pack&lt;br /&gt;
&lt;br /&gt;
== Display adapters ==&lt;br /&gt;
While technically there shouldn't be a difference between one (for example) HDMI-&amp;gt;DVI adapter and another, it would be nice to have a list of working ones so if necessary, you can just buy a recommended one (contributors should give links) instead of hunting around. This section could contain information about verified HDMI-&amp;gt;DVI, CompositeRCA-&amp;gt;SCART, CompositeRCA-&amp;gt;VGA ''boxes/chipsets'', and HDMI-&amp;gt;VGA ''boxes/chipsets''.&lt;br /&gt;
&lt;br /&gt;
===HDMI-&amp;gt;DVI-D===&lt;br /&gt;
A combination cable of a short HDMI cable &amp;amp; HDMI/DVI converter from [http://www.kenable.co.uk Kenable] worked.  The parts used are 1 x PSG02582 and 1 x C-HDMI-1.5-LC&lt;br /&gt;
&lt;br /&gt;
The HDMI to DVI-D cable provided by Apple with the 2010 Mac Mini  worked. It does not appear this adapter can be purchased separately.&lt;br /&gt;
&lt;br /&gt;
[http://www.anyware.com.au/RC-HDMIDVI-2H.aspx AnyWare Cables HDMI -&amp;gt; DVI cable] perfectly functional&lt;br /&gt;
&lt;br /&gt;
===HDMI-&amp;gt;VGA converter boxes===&lt;br /&gt;
Note that the [[RPi_config.txt]] file will have to be edited if the converter or VGA monitor does not support 1080p resolution, this is because the Rpi cannot detect the resolution. initially setting to VGA resolution is probably best&lt;br /&gt;
&lt;br /&gt;
Also note that hdmi_force_hotplug may have to be enabled.&lt;br /&gt;
&lt;br /&gt;
According to user &amp;quot;asb&amp;quot; -- http://www.amazon.co.uk/gp/product/B007KEIRNG -- the Neewer HDMI to VGA adapter works with the Pi.&lt;br /&gt;
&lt;br /&gt;
This adapter (from Kanaan) -- http://www.amazon.co.uk/KanaaN-Adapter-Converter-Cable-Resolutions/dp/B007QT0NNW -- is working. Quality not wonderful, but certainly usable, on 1400x900 monitor.&lt;br /&gt;
&lt;br /&gt;
According to user &amp;quot;na1pir&amp;quot; -- [original eBay sale posted by &amp;quot;na1pir&amp;quot; closed. Updated seller link from user &amp;quot;bondo&amp;quot; is] http://www.ebay.com/itm/ws/eBayISAPI.dll?ViewItem&amp;amp;item=130699741793#ht_2343wt_704&lt;br /&gt;
&lt;br /&gt;
This adapter -- http://www.ebay.co.uk/itm/300692770623 -- works from 640x480 up to 1920x1080, audio over HDMI works too.&lt;br /&gt;
Sadly the IC's on the PCB have all been scrubbed.&lt;br /&gt;
Requires HDMI boost and overscan, [[RPi_config.txt|config.txt]] settings for 640x480@60Hz:&lt;br /&gt;
&amp;lt;br&amp;gt;hdmi_drive=2&lt;br /&gt;
&amp;lt;br&amp;gt;hdmi_group=2&lt;br /&gt;
&amp;lt;br&amp;gt;hdmi_mode=4&lt;br /&gt;
&amp;lt;br&amp;gt;config_hdmi_boost=4&lt;br /&gt;
&amp;lt;br&amp;gt;overscan_top=-30&lt;br /&gt;
&amp;lt;br&amp;gt;overscan_bottom=-30&lt;br /&gt;
&amp;lt;br&amp;gt;overscan_left=-30&lt;br /&gt;
&amp;lt;br&amp;gt;overscan_right=-30&lt;br /&gt;
&lt;br /&gt;
===Composite-&amp;gt;SCART===&lt;br /&gt;
None explicitly mentioned &lt;br /&gt;
===Composite-&amp;gt;VGA converter boxes===&lt;br /&gt;
None explicitly mentioned, and they are pricey so the chances of someone buying one to test functionality is low&lt;br /&gt;
== SD cards ==&lt;br /&gt;
&lt;br /&gt;
Note that manufacturers change their designs over time, even as the specs stay the same. (E.g. an ACME 8 GB class 4 card manufactured in 2011 might work, while one manufactured in 2012 might not.)&lt;br /&gt;
For this reason, please specify product numbers in the lists below, when possible.&lt;br /&gt;
&lt;br /&gt;
===Working SD Cards===&lt;br /&gt;
* '''Adata''' &lt;br /&gt;
** 8GB SDHC Class 2 (MMB3F08GWMCA-GE)&lt;br /&gt;
** 8GB SDHC Class 4 (MicroSD w/ adapter)&lt;br /&gt;
** 8GB SDHC Class 6 (MMAGR08GUDCA-DB)&lt;br /&gt;
** 8GB SDHC Class 10 (AUSDH8GCL10-R)&lt;br /&gt;
** 16GB SDHC Class 6&lt;br /&gt;
** 16GB SDHC Class 10 (16GSDHC10)&lt;br /&gt;
* '''AmazonBasics'''&lt;br /&gt;
** [http://www.amazon.com/AmazonBasics-SDHC-Class-Secure-Digital/dp/B0058GH0LS 8GB SDHC Class 10 B0058GH0LS]&lt;br /&gt;
* '''Apacer'''&lt;br /&gt;
** 8GB microSDHC Class 10 (with adapter)&lt;br /&gt;
* '''CnMemory'''&lt;br /&gt;
** 8GB SDHC Class 4 (Silver/Black label says 'High Capacity Card') 84209_8GB_SDHC, bought from Maplins.  No error messages seen, but operation is much slower than with a SanDisk 4GB Class 4 card.&lt;br /&gt;
* '''Dane-Elec''' &lt;br /&gt;
** 16GB SDHC Class 4&lt;br /&gt;
* '''Duracell'''&lt;br /&gt;
** 4GB SDHC Class 4&lt;br /&gt;
** 16GB SDHC Class 10 (labelled Pro Photo 200x)&lt;br /&gt;
* '''Extrememory''' &lt;br /&gt;
** 16GB SDHC Class 10&lt;br /&gt;
** 32GB SDHC Class 10&lt;br /&gt;
* '''Hama''' &lt;br /&gt;
** 8GB SDHC High Speed Pro Class 6&lt;br /&gt;
* '''Hema (Dutch dept. store)'''&lt;br /&gt;
** 8GB SDHC Class 4&lt;br /&gt;
* '''Goodram''' &lt;br /&gt;
** 8GB microSDHC Class 4&lt;br /&gt;
* '''HP'''&lt;br /&gt;
** 8GB SDHC Class 4 (doesn't reboot during first time startup process, but restart again and fine after that).&lt;br /&gt;
* '''ICIDU'''&lt;br /&gt;
** 8GB microSDHC Class 10&lt;br /&gt;
** 16GB SDHC Class 10 (image write had issues, might be my inexperience. It boots &amp;amp; shows Xserver)&lt;br /&gt;
* '''Integral''' &lt;br /&gt;
** 4GB SDHC Ultima Pro Class 10&lt;br /&gt;
** 8GB SDHC Ultima Pro Class 6 (Works - initial error -110 but boots within 5 seconds with no further errors or issues)&lt;br /&gt;
** 8GB SDHC Ultima Pro Class 10 (20MB/s) (Works - initial error -110 but boots within 5 seconds with no further errors or issues)&lt;br /&gt;
** [http://www.amazon.co.uk/gp/product/B0047T6XME 16GB SDHC Class 10 Ultima Pro (20MB/s)]&lt;br /&gt;
* '''Joyflash''' &lt;br /&gt;
** 16GB SDHC Class 10 (LTSD1112016GB)&lt;br /&gt;
* '''Kingmax''' &lt;br /&gt;
** 4GB SDHC Class 2&lt;br /&gt;
** 4GB microSDHC Class 4 (KM04GMCSDHC4) won`t reboot when it`s hot&lt;br /&gt;
* '''Kingston''' &lt;br /&gt;
** 2GB SD&lt;br /&gt;
** 4GB microSD Class 4&lt;br /&gt;
** 4GB SDHC Class 4 (SD4/4GB)&lt;br /&gt;
** [http://img341.imageshack.us/img341/1619/dsc0253y.jpg 8GB SDHC Class 4] ([http://img833.imageshack.us/img833/2028/dsc0254br.jpg SD4/8GB]) (does not work with current build of raspbmc)&lt;br /&gt;
** [http://img600.imageshack.us/img600/3849/dsc0251et.jpg 8GB microSDHC Class 4] ([http://img707.imageshack.us/img707/363/dsc0252ld.jpg SDC4/8GB])&lt;br /&gt;
** 8GB SDHC Class 6 (SD6/8GB) (errors on boot, but works fine)&lt;br /&gt;
** 8GB SDHC Class 10 (SD10G2/8GB, SD10V/8GB, ultimateX 100X, ultimateX 120X)&lt;br /&gt;
** 16GB SDHC Class 4 (SD4/16GB)&lt;br /&gt;
** 16GB SDHC Class 10 (SD10G2/16GB, ultimateX 100X)&lt;br /&gt;
** 16GB SDHC Class 10 (SD4/16GBET)&lt;br /&gt;
** 32GB SDHC Class 10 (SD10G2/32GB, ultimateX 100X)&lt;br /&gt;
* '''Kodak''' &lt;br /&gt;
** 4GB SDHC Class 2&lt;br /&gt;
** 8GB SDHC Class 4&lt;br /&gt;
* '''Kruidvat''' &lt;br /&gt;
** 8GB SDHC Class 4&lt;br /&gt;
* '''Lexar''' &lt;br /&gt;
** 4GB SDHC Class 4 (Boots consistently and no error messages in log after 1/2 hour use ) (works with Raspbmc)&lt;br /&gt;
** 4GB SDHC Class 6 Platinum II (from [http://www.microcenter.com/single_product_results.phtml?product_id=0350735 Microcenter])&lt;br /&gt;
** 8GB SDHC Class 4&lt;br /&gt;
** 8GB SDHC Class 6 Platinum II&lt;br /&gt;
** 16GB SDHC Class 6 Platinum II&lt;br /&gt;
* '''Microcenter Brand (sold in bins at checkout)'''&lt;br /&gt;
** [http://www.microcenter.com/single_product_results.phtml?product_id=0289508 8GB SDHC Class 4]&lt;br /&gt;
** [http://www.microcenter.com/single_product_results.phtml?product_id=0349728 8GB SDHC Class 10]&lt;br /&gt;
* '''Mushkin'''&lt;br /&gt;
** 32GB SDHC Class 10 (MKNSDHCC10-32GB) [http://www.newegg.com/Product/Product.aspx?Item=N82E16820226235]&lt;br /&gt;
* '''Mustang'''&lt;br /&gt;
** [http://www.mustang-flash.de/Products/Flash%20Products/Secure%20Digital/SD-Card/8GB%20Mustang%20SDHC%20Card%20LeMans%2C%20Class%2010%2C%20Retail|SD8GHCCL10MU-R.html 8GB SDHC Class 10]&lt;br /&gt;
* '''MyMemory''' &lt;br /&gt;
** 8GB SDHC Class 10 (MYMESDH8G10) [http://www.mymemory.co.uk/SDHC/MyMemory/MyMemory-8GB-SD-Card-%28SDHC%29---Class-10 MyMemory 8GB class 10] (Latest batch not working)&lt;br /&gt;
** 16GB SDHC Class 10 (MYMESDH16G10) [http://www.mymemory.co.uk/SDHC/MyMemory/MyMemory-16GB-SD-Card-(SDHC)---Class-10]&lt;br /&gt;
* '''Optima'''&lt;br /&gt;
** 8GB SDHC Class 10 (Pro-Speed)&lt;br /&gt;
* '''Panasonic''' &lt;br /&gt;
** 8GB SDHC Class 6 (~4.8MB/s read, ~4.4MB/s write, following [[RPi_Performance#SD_card]])&lt;br /&gt;
* '''Patriot''' &lt;br /&gt;
** 8GB SDHC Class 6 (PSF8GSDHC10-PC)&lt;br /&gt;
** 8GB SDHC Class 10 LX Series (PSF8GSDHC10-PC1)&lt;br /&gt;
** 16GB SDHC Class 10 (PSF16GMCSDHC10)&lt;br /&gt;
** 16GB microSDHC Class 10 (PSF16GMSHC10) (requires recent kernel update for boot)&lt;br /&gt;
** 32GB SDHC Class 10 (PSF32GSDHC10)&lt;br /&gt;
* '''Peak''' &lt;br /&gt;
** 4GB microSDHC Class 4 (MMBTR04GUBCA-ME) tested with Arch&lt;br /&gt;
* '''Play.com''' &lt;br /&gt;
** 4GB SDHC Class 6 (S4E3CD04GEFAA 0907090121106)&lt;br /&gt;
* '''PNY''' &lt;br /&gt;
** 4GB SDHC Class 4&lt;br /&gt;
** 4GB SDHC Class 4 Optima (SD-K04G 0834TT1297Y)&lt;br /&gt;
** 8GB SDHC Class 6&lt;br /&gt;
** 16GB SDHC Class 4&lt;br /&gt;
** 16GB SDHC Class 10 (P-SDHC16G10-GE)&lt;br /&gt;
* '''Samsung''' &lt;br /&gt;
** 4GB SDHC&lt;br /&gt;
** 8GB SDHC Class 6 (MB-SS8GAEU)&lt;br /&gt;
** 8GB SDHC Class 10 (MB-MP8GA, MB-SP8GA/EU)&lt;br /&gt;
** 16GB SDHC Class 6 (MB-SSAGAEU)&lt;br /&gt;
** 16GB SDHC Class 10 (MB-SPAGA aka MB-SPAGAEU)&lt;br /&gt;
* '''SanDisk''' &lt;br /&gt;
** 2GB SD, white &amp;quot;SanDisk for Wii&amp;quot; branded, no class mentioned&lt;br /&gt;
** 2GB SD (with a circle 2 --probably class 2), writes at 3.5 Mb/s&lt;br /&gt;
** 2GB SD Class 2 (BE0816113150D)&lt;br /&gt;
** 2GB SD Class 4 Ultra (15MB/s)&lt;br /&gt;
** 2GB SD Class 4 Ultra II&lt;br /&gt;
** 2GB SD Extreme III (BE0715105083B)&lt;br /&gt;
** 4GB SDHC Class 4 (SDSDB-004G-B35)&lt;br /&gt;
** 4GB SDHC Class 4 Ultra (SDSDH-004G-U46) won`t reboot when it`s hot&lt;br /&gt;
** 4GB SDHC Class 4 Ultra II&lt;br /&gt;
** 4GB SDHC Class 6 Ultra (30MB/s BH1200421822D)&lt;br /&gt;
** 4GB SDHC Class 6 Ultra (SDSDH-004G-U46 - BH1136121837G, BH1130521822D)&lt;br /&gt;
** 4GB SDHC Class 10 Extreme (BH10297143382G)&lt;br /&gt;
** 8GB SDHC Class 4 (writes at ~1.5MB/s)&lt;br /&gt;
** 8GB SDHC Class 4 Ultra labelled as 15MB/s (BI1024716014G)&lt;br /&gt;
** 8GB SDHC Class 6 Ultra &lt;br /&gt;
*** except SDSDH-008G-U46 - BI1131222083D could be problematic, see below&lt;br /&gt;
*** except SDSRH-008G-A11 could be problematic, see below&lt;br /&gt;
** 8GB SDHC Class 6 Ultra labelled as 20MB/s (BI11321422083D)&lt;br /&gt;
** 8GB SDHC Class 10 Extreme (BI11017514367G)&lt;br /&gt;
** 8GB SDHC Class 10 Ultra(30MB/s) (SDSDU-008G-U46) - Work with stock debian6-19-04-2012 image but not with OpenELEC r11212&lt;br /&gt;
** 16GB SDHC Class 4&lt;br /&gt;
** 16GB SDHC Class 10 Ultra(30MB/s) (SDSDU-016G-U46) - Work with stock debian6-19-04-2012 image&lt;br /&gt;
** 32GB SDHC Class 10 Ultra (30MB/s) - Works with stock debian6-19-04-2012 image&lt;br /&gt;
** 16GB SDHC Class 10 Extreme (45MB/s U1) (BL1203322025G) - Doesn't work with stock debian6-19-04-2012 image, but does work with freshly compiled kernel&lt;br /&gt;
** 16GB SDHC Class 10 Extreme Pro (95MB/s UHS-I) (SDSDXPA-016G-A75) - Doesn't work with stock debian6-19-04-2012 image, but does work with freshly compiled kernel&lt;br /&gt;
** 32GB SDHC Class 4&lt;br /&gt;
** 32GB SDHC Class 6&lt;br /&gt;
** 32GB SDHC Class 10 Extreme (45MB/s UHS-I) (SDSDX-032G-X46) - works with arch-04-29-image and latest firmware (booting problems without firmware update)&lt;br /&gt;
** 4GB microSDHC Class 2&lt;br /&gt;
** 4GB microSDHC Class 4&lt;br /&gt;
** 8GB microSDHC Class 2&lt;br /&gt;
** 8GB microSDHC Class 4&lt;br /&gt;
** 8GB microSDHC Class 6 Mobile Ultra (SDSDQY-008G-U46A) working with the latest firmware, won`t reboot when it`s hot&lt;br /&gt;
** [http://img217.imageshack.us/img217/6435/dsc0255uc.jpg 64GB microSDXC Class 6 Mobile Ultra] (SDSDQY-064G-A11A) (boots up much more consistently with latest firmware)&lt;br /&gt;
* '''Silicon Power''' &lt;br /&gt;
** 4GB microSDHC Class 6 (SP004GBSTH006V10-SP)&lt;br /&gt;
** 16GB microSDHC Class 10 (SP016GBSDH010V10)&lt;br /&gt;
* '''Sony'''&lt;br /&gt;
** 4GB SDHC Class 4 (SF-4B4) (Write 6MB/s, Read 20MB/s)&lt;br /&gt;
** 4GB SDHC Class 4 (SF-4N4)&lt;br /&gt;
** [http://store.sony.com/webapp/wcs/stores/servlet/ProductDisplay?catalogId=10551&amp;amp;storeId=10151&amp;amp;langId=-1&amp;amp;partNumber=SF32NX/TQ#features 32GB SDHC Class 10 (SF-32NX/TQ)] (Max read speed of ~94MB/s, min write speed of ~10MB/s) - Works with archlinuxarm-29-04-2012 dd image with latest firmware update (as of 10-06-2012) &lt;br /&gt;
* '''TakeMS'''&lt;br /&gt;
** 4GB microSDHC Class 4 (with adapter) [http://www.takems.com/products.php?categ=flash&amp;amp;prod=Micro_SDHC-Card Micro SDHC Class 4 + 1 Adapter(Order No.88662)]&lt;br /&gt;
* '''TDK'''&lt;br /&gt;
** 4GB SDHC Class 4 (1008WW5261B)&lt;br /&gt;
** 4GB SDHC Class 4 (80-56-10275-004G,Debian works '''BUT''' mmc0 errors when booting Fedora)&lt;br /&gt;
** 4GB microSDHC Class 4 (80-56-10301-004G)&lt;br /&gt;
* '''Toshiba'''&lt;br /&gt;
** 8GB mircoSDHC SD-C08GJ(BL3A&lt;br /&gt;
* '''Transcend''' &lt;br /&gt;
** 4GB SDHC Class 4 - we've found these to work without any errors and offer reasonable performance&lt;br /&gt;
** 4GB SDHC Class 4 (TS4GSDHC4 - BH1130821915G)&lt;br /&gt;
** 4GB SDHC Class 6 (TS4GSDHC6) - no problems. (does not work with Raspbmc as of 6/1/12)&lt;br /&gt;
** 4GB SDHC Class 10 (TS4GSDHC10E)&lt;br /&gt;
** 8GB SDHC Class 4&lt;br /&gt;
** 8GB SDHC Class 6 (~5.8 MB/s read/write following [[RPi_Performance#SD_card]])&lt;br /&gt;
** 8GB SDHC Class 6 (TS8GSDHC6-P2 - MMBFG08GWACA-M6)&lt;br /&gt;
** 8GB SDHC Class 10 (TS8GSDHC10) [http://www.mymemory.co.uk/SDHC/Transcend/Transcend-8GB-SD-Card-%28SDHC%29---Class-10- Transcend 8G class 10]&lt;br /&gt;
** 16GB SDHC Class 6 (TS16GSDHC6)&lt;br /&gt;
** 16GB SDHC Class 10 (TS16GSDHC10)&lt;br /&gt;
** [http://www.transcend.com.es/tarjetas-de-memoria/sd-sdhc/32gb-sdhc-class-10 32GB SDHC Class 10] (TS32GSDHC10)(TS32GSDHC10E)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Known good (and pre-loaded) cards will be available for sale from RS and element14 at a ''later'' date (TBA).&lt;br /&gt;
&lt;br /&gt;
===Problem SD Cards===&lt;br /&gt;
&lt;br /&gt;
There are issues with most Class 10 SDHC cards, apparently due to a bug in the Broadcom bootloader.[http://www.raspberrypi.org/forum/general-discussion/class-10-sd-cards-on-the-production-boards/page-3/#p39181]&lt;br /&gt;
&lt;br /&gt;
This seems to have been fixed in sdhci.c: [https://github.com/raspberrypi/linux/commit/7e8ae226fe6e95954df6b0dcdde40a53dbbc1a0b] Further feedback will be useful.&lt;br /&gt;
&lt;br /&gt;
If you add an SD card here, please also mention the kernel date and the date you tried it. This allows people to estimate how likely it is that a driver-fix in the kernel has been fixed. (i.e. I think some/most of the cards here work fine now, because a problem in the kernel driver has been fixed). &lt;br /&gt;
&lt;br /&gt;
* '''Acumem'''&lt;br /&gt;
** 8GB SDHC Class 6 (many errors on 6/7/2012)&lt;br /&gt;
* '''Adata'''&lt;br /&gt;
** 8GB SDHC Class 6 - Sometimes boots&lt;br /&gt;
** 16GB SDHC Class 6 (Possibly SD5MY168G0, label with gold &amp;lt;&amp;gt; black gradient) - Doesn't boot&lt;br /&gt;
* '''Amazon Basics'''&lt;br /&gt;
** 16GB SDHC Class 10 (many errors on 6/7/2012)&lt;br /&gt;
* '''Delkin Devices'''&lt;br /&gt;
** 4GB SDHC Class 6 &amp;quot;Delkin pro&amp;quot; -- Note: works with Fedora Beefy Miracle 17&lt;br /&gt;
* '''GSkill'''&lt;br /&gt;
** 32GB SDHC Class 10&lt;br /&gt;
* '''Integral'''&lt;br /&gt;
** 16GB SDHC Class 6 Ultima Pro (SH016GAA2BB)&lt;br /&gt;
** 4GB SDHC class 4 (S404G1115)&lt;br /&gt;
* '''Kingston''' &lt;br /&gt;
** 2GB SD [http://www.geeks.com/details.asp?invtid=KING-SD-M02G-BULK looks like this] - boots the kernel, but damages the filesystem.&lt;br /&gt;
** 4GB SDHC Class 6 - Boots kernel but won't run init (times out)&lt;br /&gt;
* '''Memory2GO'''&lt;br /&gt;
** 4GB SDHC Class 6 (S404G1029) - I/O Errors leading to Kernel Panic on startup.&lt;br /&gt;
* '''Micro Center'''&lt;br /&gt;
**4GB SDHC Class 4 — hasn't worked with any of the images I've tried; appears to be completely unrecognized&lt;br /&gt;
* '''MyMemory.com''' &lt;br /&gt;
** 8GB SDHC Class 10&lt;br /&gt;
* '''Panasonic''' &lt;br /&gt;
** 8GB SDHC Class 10 (RP-SDU08GD1K) mmc0: timeout waiting for hardware interrupt [http://www.mymemory.co.uk/SDHC/Panasonic/Panasonic-8GB-UHS-1-London-2012-Collection-SDHC-Card---Class-10 Panasonic 8GB Class 10]&lt;br /&gt;
* '''Patriot''' &lt;br /&gt;
** 8GB SDHC Class 10 (PSF8GSDHC10)&lt;br /&gt;
* '''PNY'''&lt;br /&gt;
** 8GB Optima SDHC 120 HD Class 4 SD-K08G 0928 WF3673 - mmc -110 errors at init time on 6/12/12&lt;br /&gt;
** 32GB SDHC Class 10 Professional (P-SDHC32G10-EF) from [http://www.play.com/Electronics/Electronics/4-/18814903/-/Product.html play.com] (mmc0 timeout with Debian, error -84 whilst initialising sd card with Fedora and QtonPi. Arch seems to work, gets to the login prompt)&lt;br /&gt;
* '''Samsung'''&lt;br /&gt;
** 32GB SDHC Class 10 (MB-SSBGA, MBSSBGVEOBGA-SH) tested with debian6-19-04-2012: mmc0: timeout waiting for hardware interrupt&lt;br /&gt;
* '''SanDisk''' &lt;br /&gt;
** 4GB SDHC Class 2 - Debian and xbmc boot, but fedora gets a lot of mmc0 note long write sync errors and then hc_xfer_timeout errors at the login prompt.&lt;br /&gt;
** 4GB SDHC Class 2 &amp;quot;Limited Edition&amp;quot; (8H825413279G) - Error -110 whilst initialising sd card&lt;br /&gt;
** 4GB SDHC Class 4 (BH1030216016G) - Doesn't boot.&lt;br /&gt;
** 4GB SDHC Class 4 (BH1031116016G) - Doesn't boot.&lt;br /&gt;
** 4GB SDHC Class 6 Extreme (BH0822411730D)&lt;br /&gt;
** 4GB SDHC Class 6 Extreme III (30 MB/s) (BH0822712362G)&lt;br /&gt;
** 4GB SDHC Class 10 Extreme (30 MB/s HD Video) (Doesn't boot) - Works with new kernel.img and start.elf [https://github.com/raspberrypi/firmware/tree/master/boot]&lt;br /&gt;
** 8GB SDHC Class 6 Ultra (B11201421964G)&lt;br /&gt;
** 8GB SDHC Class 6 Ultra (SDSDH-008G-U46 - BI1131222083D) - Boots kernel but won't run init ( mmc timeout waiting for interrupt )&lt;br /&gt;
** 8GB SDHC Class 6 Ultra labelled as 30MB/s (BI1208721965G)) - Boots kernel but won't run init ( mmc timeout waiting for interrupt )&lt;br /&gt;
** 8GB SDHC Class 6 Ultra labelled as 30MB/s SDSRH-008G-A11 - Boots kernel but won't run init ( mmc timeout waiting for interrupt ) &lt;br /&gt;
** 8GB SDHC Class 6 Ultra I (BI1201221964G) - Boots kernel but won't run init ( mmc timeout waiting for interrupt )&lt;br /&gt;
** 8GB SDHC Class 6 Extreme (BI1101116253G)&lt;br /&gt;
** 8GB SDHC Class 10 Extreme (BI1108716254G) / (B11209116254G)&lt;br /&gt;
** 8GB SDHC Class 10 Extreme (BI1201516254G) [[http://www.amazon.co.uk/gp/product/B00422FBJ2 amazon.co.uk]]+amazon.fr&lt;br /&gt;
** 8GB SDHC Class 10 Extreme (BI1200916252D/SDSDX-008G-X46) - Doesn't boot. Tried (6th June 2012) with debian6-19-04-2012.img and with replacement kernel.img and start.elf from github&lt;br /&gt;
** 8GB SDHC Class 10 Extreme Pro- Works with updated kernel/firmware, stock debian6-19-04-2012 boots kernel but won't run init ( mmc timeout waiting for interrupt )&lt;br /&gt;
** 16GB SDHC Class 10 Extreme (30MB/s HD Video) (SDSDX3-016G-X46) - Doesn't boot with debian6-19-04-2012.img.&lt;br /&gt;
** 16GB SDHC Class 6 Ultra (BL1202021933G)&lt;br /&gt;
** 16GB SDHC Class 6 Ultra I (BL1205921933G) - Boots kernel but won't run init ( mmc timeout waiting for interrupt )&lt;br /&gt;
* '''TDK'''&lt;br /&gt;
** 4GB SDHC Class 6 (S404G1041) - Tried (end May 2012) with new kernel.img and start.elf [https://github.com/raspberrypi/firmware/tree/master/boot] but still won't run init.&lt;br /&gt;
** 4GB SDHC Class 6 (S404G1046) [Barcode: 4 902030 784447] - Tried (4th June 2012) with debian6-19-04-2012.img and with replacement kernel.img and start.elf from github [https://github.com/raspberrypi/firmware/tree/87a04c0be0c05e20f94f223183a0310b37c9bd89/boot] but still got 'Error -84' and 'Kernel panic - not syncing: No init found'&lt;br /&gt;
* '''Veho'''&lt;br /&gt;
** 4GB SDHC Class 6 &lt;br /&gt;
&lt;br /&gt;
The usual warnings against less reputable sellers (such as Ebay merchants) apply.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note that the following error is sometimes accompanied with a non-working SD card after booting (on Debian):&lt;br /&gt;
&lt;br /&gt;
 mmc0: timeout waiting for hardware interrupt&lt;br /&gt;
&lt;br /&gt;
=== Benchmarks ===&lt;br /&gt;
&lt;br /&gt;
* http://www.sakoman.com/OMAP/microsd-card-perfomance-test-results.html&lt;br /&gt;
* http://usbspeed.nirsoft.net/usb_drive_speed_summary.html?o=11&lt;br /&gt;
* http://www.raspberrypi.org/phpBB3/viewtopic.php?f=2&amp;amp;t=4076&lt;br /&gt;
&lt;br /&gt;
== Foreign Language Translations ==&lt;br /&gt;
* [[Ru:RaspberryPiBoardVerifiedPeripherals]]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;references&amp;gt;&lt;br /&gt;
&amp;lt;/references&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Template:Raspberry Pi}}&lt;/div&gt;</summary>
		<author><name>Adammw</name></author>	</entry>

	</feed>