VideoCore is a low-power mobile multimedia processor originally developed by Alphamosaic Ltd and now owned by Broadcom. Its two-dimensional DSP architecture makes it flexible and efficient enough to decode (as well as encode) a number of multimedia codecs in software while maintaining low power usage. The semiconductor intellectual property core (SIP core) has been found so far only on Broadcom SoCs.
Multimedia system constraintsEdit
Mobile multimedia devices require a lot of high-speed video processing, but at low power for long battery life. The ARM processor core has a high IPS per watt figure (and thus dominates the mobile phone market), but requires video acceleration coprocessors and display controllers for a complete system. The amount of data passing between these chips at high speed results in higher power consumption. Specialised co-processors may be optimised for throughput over latency (more cores and data parallelism, but at a lower clock speed), and have instruction-sets and memory architectures designed for media processing (e.g. saturation arithmetic, and handling of specialised data formats).
The 3D engine is composed out of various subsystems, the most abundant being the QPUs. A QPU is a 16-way Single instruction, multiple data (SIMD) (or Single instruction, multiple threads (SIMT)?) processor.
"Each processor has two vector floating-point ALUs which carry out multiply and non-multiply operations in parallel with single instruction cycle latency. Internally the QPU is a 4-way SIMD processor multiplexed 4× over four cycles, making it particularly suited to processing streams of quads of pixels," according to Broadcom's VideoCore® IV 3D Architecture Reference Guide. 
These "slices" correspond roughly to AMD's Compute Units.
Video compression algorithmsEdit
Of video compression algorithms currently in wide use, such as H.263, H.264/MPEG-4 AVC, MPEG-4, MPEG-2, MPEG-1, H.265, Daala, Theora, VP8 and VP9, Broadcom's VideoCore products support hardware acceleration of some operations. In some cases only decompression, only compression or both up to a certain resolution (e.g. 720p or 1080p) and up to a certain frame rate (e.g. 30 or 60 frames per second).
(It should be understood that lack of hardware acceleration is not an absolute obstacle to obtaining some method of processing or transcoding such streams, using general-purpose CPU instructions, perhaps at a rate perceived slow levied against hardware acceleration, may overcome such an obstacle. Preventing such an obstacle by using a lower resolution decreases power use and redacts heat sinks as it aids the preservation of components.)
VideoCore key featuresEdit
- Instruction set written with video processing in mind from the start. For example, saturation arithmetic so that the sum of two bright pixels does not 'wrap around' into dark values.
- An array of graphics processing units for parallel computing of video data at relatively low clock speed.
- Very high integration puts CPU, GPUs, memory and display circuitry on a single chip, removing the power burden of driving fast off-chip buses.
The VideoCore I-based VC01 provides video and multimedia capabilities to various Samsung phones, including SCH-V540, SCH-V4200, SCH-V490.
The VideoCore IV BCM2763 processor improves on the VideoCore III with support for 1080p encode and decode, along with higher resolution camera support and faster 2D and 3D graphics, all at very low power. It is used in the Nokia 808 PureView, and the Raspberry Pi (2835/2836 models for versions 1/2 accordingly).
The VideoCore IV BCM28155 processor supports for 1080p encode and decode, improved 2D and 3D graphics with dual-core ARM Cortex-A9 CPU in BCM28155 chipset. It is used in the Samsung Galaxy S II Plus, Samsung Galaxy Grand and Amazon Fire TV Stick.
Table of SoCs adopting VideoCore SIP blocksEdit
|SoC||GPU||CPU||Max display||Utilizing devices|
|Microarchitecture||Freq. (MHz)||Instruction set||Microarchitecture||Cores||Freq. (MHz)|
|BCM2702 (VC02)||VideoCore 2||None||SD PAL/NTSC|
|BCM2705 (VC05)||VideoCore 2||None||SD PAL/NTSC|
|BCM2722||VideoCore 2||None||SD PAL/NTSC|
|BCM2724||VideoCore 2||None||SD PAL/NTSC|
|BCM2727||VideoCore 3||None||HD 720p|
|BCM11181||VideoCore 3||None||HD 720p|
|BCM2763||VideoCore 4||None||Full HD 1080p|
|BCM2820||VideoCore 4||ARMv6||ARM1176||1||600||Full HD 1080p|
|BCM2835||VideoCore 4||250||ARMv6||ARM1176||1||700||Full HD 1080p|
|BCM2836[permanent dead link]||VideoCore 4||250||ARMv7||Cortex-A7||4||900||Full HD 1080p*||Raspberry Pi 2|
|BCM2837[permanent dead link]||VideoCore 4||300||ARMv8||Cortex-A53||4||1200||Full HD 1080p*||Raspberry Pi 3|
|BCM11182||VideoCore 4||None||Full HD 1080p|
|BCM11311||VideoCore 4||ARMv7||Cortex-A9||2||Full HD 1080p|
|BCM21654||VideoCore 4||ARMv7||Cortex-A9 + Cortex-R4||1+1||Full HD 1080p|
|BCM21654G||VideoCore 4||ARMv7||Cortex-A9||1||up to 1000||HD 720p|
|BCM21663||VideoCore 4||ARMv7||Cortex-A9||1||up to 1200||HD 720p|
|BCM21664||VideoCore 4||ARMv7||Cortex-A9||1||up to 1000||HD 720p|
|BCM21664T||VideoCore 4||ARMv7||Cortex-A9||1||up to 1200||Full HD 1080p|
|BCM28150||VideoCore 4||ARMv7||Cortex-A9||2||Full HD 1080p|
|BCM21553||VideoCore 4||ARMv6||ARM11||1||Full HD 1080p|
|BCM28145/28155||VideoCore 4||ARMv7||Cortex-A9||2||1200||Full HD 1080p|
|BCM23550||VideoCore 4||ARMv7||Cortex-A7||4||1200||Full HD 1080p|
|SoC||Microarchitecture||Freq. (MHz)||Instruction set||Microarchitecture||Cores||Freq. (MHz)||Max display||Utilizing devices|
- Editing /boot/config.txt can yield higher resolutions by changing scan count and pixel clocks (i.e. 2560x1080)
VideoCore chips can run complete applications - they are not simply video DSP chips that require a separate processor to supply and collect data. In practice though, they are often used like simple accelerators, as companies usually prefer to cautiously assimilate new technology rather than take a big risk in porting a large amount of application code from an existing ARM-based design. The VideoCore may also not be optimally power-efficient at non-DSP tasks, but may be coupled with a highly efficient CPU core, for instance typical non-multimedia tasks rarely require more than 32-bit bus width, while the VideoCore design employs multiple wide-bus-width cores. The Apple video iPod is a good example of this approach.
Low-power laptops use low-power processors and graphics chips, and therefore often struggle to play video at full frame rates. It isn't desirable or practical to port a full operating system onto a VideoCore chip, so only the video decoding need be offloaded onto a video accelerator board (e.g. using the BCM70015 chip).
Blu-ray players can also use it as a low-power video accelerator.
Noting that VideoCore chips were usually used with ARM-based chips, the latest chips have VideoCore and ARM processors.
On 28 February 2014, on the day of the second anniversary of the Raspberry Pi, Broadcom, together with the Raspberry PI foundation, announced the release of full documentation for the VideoCore IV graphics core, and a complete source release of the graphics stack under a 3-clause BSD license.
- Official Broadcom VideoCore IV 3D Architecture Reference: VideoCoreIV-AG100-R.pdf
However, only a minor part of the driver was actually released as open source and all of the actual video acceleration is done using a firmware coded for its proprietary GPU, and which was not open sourced; the entire SoC itself is managed / initialized by a ThreadX-based RTOS that is loaded into the Videocore's VPU during bootup.
An architectural overview of the VideoCore based system was compiled (based on reverse engineering & patent research) by Herman Hermitage and is available on GitHub.
In June 2014, Eric Anholt left Intel to instead work for Broadcom to develop a free driver (DRM/KMS driver and Gallium3D-driver) for VC4 (VideoCore 4). After just one week, he reported a noteworthy progress.
|“||I've taken on a new role as an open source developer there. I'm going to be working on building an MIT-licensed Mesa 3D and kernel DRM driver for the 2708 (aka the 2835), the chip that's in the Raspberry Pi.||”|
|— Eric Anholt, http://anholt.livejournal.com/44239.html|
The free licensed 3D graphics code was committed to Mesa on 29 August 2014, and first appeared on Mesa 10.3 release.
The Broadcom YouTube page has videos demonstrating the video processing capability, but their website only goes as far as providing product briefs. Detailed data and development tools are only available under NDA, and then only for manufacturers with a market for very many units. However, on 28 February 2014, on the day of the second anniversary of the Raspberry Pi, Broadcom, together with the Raspberry Pi Foundation, announced the release of full documentation for the VideoCore IV graphics core, and a complete source release of the graphics stack under a 3-clause BSD license.
- Alphamosaic Ltd > Technology – VideoCore, archived on 9 February 2003.
- "Can I play Morrowind with OpenMW on other platforms like the Raspberry Pi?".
- Ecker, Clint (20 October 2005). "Video iPod: Vivisection". Ars Technica. Retrieved 29 March 2008.
- "BCM2835 - Raspberry Pi Documentation".
- "Raspberry Pi FAQs - Frequently Asked Questions".
- "Roku 2 XS Teardown". 28 July 2011.
- www.xolo.in/Opus-HD Archived 10 October 2014 at the Wayback Machine.
- "Raspberry Pi marks 2nd birthday with plan for open source graphics driver".
- "A birthday present from Broadcom - Raspberry Pi". 28 February 2014.
- Hermitage, Herman (21 Mar 2015). "Fun and Games with the Videocoreiv Quad Processor Units".
- "Eric Anholt Leaves Intel's Linux Graphics Team For Broadcom". 17 June 2014.
- "VC4 Linux driver". Archived from the original on 22 July 2014. Retrieved 22 June 2014.
- "VC4 driver week 1". 22 June 2014. Archived from the original on 16 August 2014.
- "vc4: Initial skeleton driver import". The Mesa 3D Graphics Library. 2014-08-09.
- "Broadcom Limited".