<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.pine64.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Link+Mauve</id>
	<title>PINE64 - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.pine64.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Link+Mauve"/>
	<link rel="alternate" type="text/html" href="https://wiki.pine64.org/wiki/Special:Contributions/Link_Mauve"/>
	<updated>2026-06-05T08:28:32Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.37.1</generator>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=Mainline_Hardware_Encoding&amp;diff=21696</id>
		<title>Mainline Hardware Encoding</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=Mainline_Hardware_Encoding&amp;diff=21696"/>
		<updated>2024-12-11T15:27:25Z</updated>

		<summary type="html">&lt;p&gt;Link Mauve: /* SoC Support */ JPEG encoding is supported on the rk3588 since Linux 6.12.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Mainline Hardware Encoding''' of video can be achieved through the V4L2 user-space API, for which currently only GStreamer implements the required code.&lt;br /&gt;
&lt;br /&gt;
== SoC Support ==&lt;br /&gt;
&lt;br /&gt;
The following table shows the current supported codecs for encoding for each SoC. Support for decoding is separate.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable plainrowheaders&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; {{Diagonal split header|Codec|SoC}}&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | RK3328&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | RK3399&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | RK3566&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | RK3588&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | JPEG&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot;| N/A&lt;br /&gt;
| style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;| Yes&lt;br /&gt;
| style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;| Yes&lt;br /&gt;
| style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;| Yes&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | VP8&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot;| N/A&lt;br /&gt;
| style=&amp;quot;background:LightYellow; text-align:center;&amp;quot;| RFC&amp;lt;sup&amp;gt;[https://lore.kernel.org/linux-rockchip/20230309125651.23911-1-andrzej.p@collabora.com/T/]&amp;lt;/sup&amp;gt;&amp;lt;sup style=&amp;quot;font-style:italic;color:green&amp;quot;&amp;gt;a&amp;lt;/sup&amp;gt;&lt;br /&gt;
| style=&amp;quot;background:LightYellow; text-align:center;&amp;quot;| RFC&amp;lt;sup&amp;gt;[https://lore.kernel.org/linux-rockchip/20230309125651.23911-1-andrzej.p@collabora.com/T/]&amp;lt;/sup&amp;gt;&amp;lt;sup style=&amp;quot;font-style:italic;color:green&amp;quot;&amp;gt;a&amp;lt;/sup&amp;gt;&lt;br /&gt;
| style=&amp;quot;background:#F99; text-align:center;&amp;quot;| No&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | H.264/AVC&lt;br /&gt;
| style=&amp;quot;background:#F99; text-align:center;&amp;quot;| No&lt;br /&gt;
| style=&amp;quot;background:#F99; text-align:center;&amp;quot;| No&lt;br /&gt;
| style=&amp;quot;background:#F99; text-align:center;&amp;quot;| No&amp;lt;sup style=&amp;quot;font-style:italic;color:green&amp;quot;&amp;gt;a&amp;lt;/sup&amp;gt;&lt;br /&gt;
| style=&amp;quot;background:#F99; text-align:center;&amp;quot;| No&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | H.265/HEVC&lt;br /&gt;
| style=&amp;quot;background:#F99; text-align:center;&amp;quot;| No&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot;| N/A&lt;br /&gt;
| style=&amp;quot;background:#F99; text-align:center;&amp;quot;| No&lt;br /&gt;
| style=&amp;quot;background:#F99; text-align:center;&amp;quot;| No&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Notes ===&lt;br /&gt;
&amp;lt;ol style=&amp;quot;list-style-type:lower-alpha&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;Userspace API [https://lore.kernel.org/linux-media/ZK2NiQd1KnraAr20@aptenodytes/ under discussion] as part of the V4L2 stateless encoder uAPI development, with experimental implementations being worked on.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Encoding With GStreamer ==&lt;br /&gt;
&lt;br /&gt;
With GStreamer, in general, any V4L2 control can be set using the &amp;lt;code&amp;gt;extra-controls=foo,name=value&amp;lt;/code&amp;gt; syntax after the encode pipeline stage identifier, where &amp;lt;code&amp;gt;foo&amp;lt;/code&amp;gt; is any name you wish which GStreamer will promptly ignore, &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; is the name of the V4L2 control as shown by &amp;lt;code&amp;gt;v4l2-ctl --list-ctrls&amp;lt;/code&amp;gt; (make sure to pick the right device with &amp;lt;code&amp;gt;-d&amp;lt;/code&amp;gt;), and &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; is whatever value you want to set it to.&lt;br /&gt;
&lt;br /&gt;
=== JPEG Encoding ===&lt;br /&gt;
&lt;br /&gt;
This example converts an input MP4 file to an output MJPEG-inside-MKV file at JPEG quality 95, without any audio.&lt;br /&gt;
&lt;br /&gt;
 gst-launch-1.0 filesrc location=input.mp4 ! qtdemux name=demux demux.video_0 ! decodebin ! videoconvert ! v4l2jpegenc extra-controls=s,compression_quality=95 ! matroskamux ! filesink location=output.mkv&lt;br /&gt;
&lt;br /&gt;
=== VP8 Encoding ===&lt;br /&gt;
&lt;br /&gt;
{{hint|'''Note:''' This requires a draft [https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3736 GStreamer merge request] and the RFC kernel patchset applied.}}&lt;br /&gt;
{{note|'''Note:''' Patchset no longer applies cleanly, as AV1 decode controls were introduced and conflict.}}&lt;br /&gt;
&lt;br /&gt;
This example converts an input MP4 file to an output VP8-inside-MKV file with a quantiser between 12 and 28, without any audio. The quantiser value goes from 0 (best quality, biggest filesize) to 63 (worst quality, smallest filesize).&lt;br /&gt;
&lt;br /&gt;
 gst-launch-1.0 filesrc location=input.mp4 ! qtdemux name=demux demux.video_0 ! decodebin ! videoconvert ! v4l2slvp8enc min-quality=12 max-quality=28 ! queue ! matroskamux ! filesink location=output.mkv&lt;br /&gt;
&lt;br /&gt;
Alternatively, you can encode in variable bitrate mode with a target bitrate given in bits per second. Do note that Hantro doesn't seem to do target bitrates below 2 mbit/s. In this example, the file is transcoded at a target bitrate of 3 megabits per second.&lt;br /&gt;
&lt;br /&gt;
 gst-launch-1.0 filesrc location=input.mp4 ! qtdemux name=demux demux.video_0 ! decodebin ! videoconvert ! v4l2slvp8enc bitrate=3000000 ! queue ! matroskamux ! filesink location=output.mkv&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
* [[Mainline Hardware Decoding]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Quartz64]] [[Category:ROCKPro64]] [[Category:Rockchip RK3566]] [[Category:Rockchip RK3399]] [[Category:Pinebook Pro]] [[Category:PinePhone Pro]] [[Category:PineNote]] [[Category:Rockchip RK3588]] [[Category:Rockchip RK3328]] [[Category:ROCK64]]&lt;/div&gt;</summary>
		<author><name>Link Mauve</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=Mainline_Hardware_Decoding&amp;diff=21695</id>
		<title>Mainline Hardware Decoding</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=Mainline_Hardware_Decoding&amp;diff=21695"/>
		<updated>2024-12-11T15:18:44Z</updated>

		<summary type="html">&lt;p&gt;Link Mauve: /* Supported Codecs By SoC */ Oops, AV1 should be in green.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{hint|This page is incomplete, you're welcome to improve it.}}&lt;br /&gt;
&lt;br /&gt;
'''Mainline Hardware Decoding''' refers to video decoding done using hardware accelerators on the mainline Linux kernel (i.e. what sits in Linus' tree).&lt;br /&gt;
&lt;br /&gt;
On most consumer-oriented SoCs, there is what is referred to as a VPU (Video Processing Unit). The VPU is responsible for power-efficient encoding and decoding of videos. Hardware-accelerated video decoding can be useful to get smoother video playback on your devices, lower power consumption, and lower CPU utilisation. Below is information regarding various hardware PINE64 uses and software that works with it.&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
Here's a table of the current support for different hardware. &amp;quot;In review&amp;quot; means the patch series to enable support has been posted to the mailing lists but is undergoing review, &amp;quot;linux-next&amp;quot; means it has been accepted and staged for the next Linux merge window.&lt;br /&gt;
&lt;br /&gt;
=== Supported Codecs By SoC ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable plainrowheaders&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; {{Diagonal split header|Codec|SoC}}&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; style=&amp;quot;width:6em&amp;quot; | A64&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; style=&amp;quot;width:6em&amp;quot; | RK3328&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; style=&amp;quot;width:6em&amp;quot; | RK3399&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; style=&amp;quot;width:6em&amp;quot; | RK3566&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; style=&amp;quot;width:6em&amp;quot; | RK3588&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | JPEG&lt;br /&gt;
| style=&amp;quot;background:#F99; text-align:center;&amp;quot;| No&lt;br /&gt;
| style=&amp;quot;background:#F99; text-align:center;&amp;quot;| No&lt;br /&gt;
| style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;| Yes&lt;br /&gt;
| style=&amp;quot;background:#F99; text-align:center;&amp;quot;| No&lt;br /&gt;
| style=&amp;quot;background:#F99; text-align:center;&amp;quot;| No&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | MPEG-2&lt;br /&gt;
| style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;| Yes&lt;br /&gt;
| style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;| Yes&lt;br /&gt;
| style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;| Yes&lt;br /&gt;
| style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;| Yes&lt;br /&gt;
| style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;| Yes&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | MPEG-4 Part 2/H.263&lt;br /&gt;
| style=&amp;quot;background:#F99; text-align:center;&amp;quot;| No&lt;br /&gt;
| style=&amp;quot;background:#F99; text-align:center;&amp;quot;| No&lt;br /&gt;
| style=&amp;quot;background:#F99; text-align:center;&amp;quot;| No&lt;br /&gt;
| style=&amp;quot;background:#F99; text-align:center;&amp;quot;| No&lt;br /&gt;
| style=&amp;quot;background:#F99; text-align:center;&amp;quot;| No&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | VP8&lt;br /&gt;
| style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;| Yes&lt;br /&gt;
| style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;| Yes&lt;br /&gt;
| style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;| Yes&lt;br /&gt;
| style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;| Yes&lt;br /&gt;
| style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;| Yes&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | H.264/AVC&lt;br /&gt;
| style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;| Yes&lt;br /&gt;
| style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;| Yes&lt;br /&gt;
| style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;| Yes&lt;br /&gt;
| style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;| Yes &amp;lt;sup style=&amp;quot;font-style:italic;color:green&amp;quot;&amp;gt;a&amp;lt;/sup&amp;gt;&lt;br /&gt;
| style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;| Yes&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | H.265/HEVC&lt;br /&gt;
| style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;| Yes&lt;br /&gt;
| style=&amp;quot;background:LightYellow; text-align:center;&amp;quot;| In review&lt;br /&gt;
| style=&amp;quot;background:LightYellow; text-align:center;&amp;quot;| Patches Exist&lt;br /&gt;
| style=&amp;quot;background:#F99; text-align:center;&amp;quot;| No&lt;br /&gt;
| style=&amp;quot;background:#F99; text-align:center;&amp;quot;| No&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | VP9&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot;| N/A&lt;br /&gt;
| style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;| Yes&lt;br /&gt;
| style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;| Yes&lt;br /&gt;
| style=&amp;quot;background:#F99; text-align:center;&amp;quot;| No&lt;br /&gt;
| style=&amp;quot;background:#F99; text-align:center;&amp;quot;| No&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | AVS2&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot;| N/A&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot;| N/A&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot;| N/A&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot;| N/A&lt;br /&gt;
| style=&amp;quot;background:#F99; text-align:center;&amp;quot;| No&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | AV1&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot;| N/A&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot;| N/A&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot;| N/A&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot;| N/A&lt;br /&gt;
| style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;| Yes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Notes ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol style=&amp;quot;list-style-type:lower-alpha&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;only Hantro, not rkvdec2, so with a maximum resolution of 1080p for now&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Used SoC By Device ===&lt;br /&gt;
&lt;br /&gt;
This table provides a quick reference to check which SoC is used in what Pine devices, for ease of navigating the previous table.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable plainrowheaders&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! SoC&lt;br /&gt;
! Device(s)&lt;br /&gt;
|-&lt;br /&gt;
! Allwinner A64&lt;br /&gt;
| PinePhone, PineTab1, Pinebook, PINE A64, PINE A64-LTS, SOPINE&lt;br /&gt;
|-&lt;br /&gt;
! Rockchip RK3328&lt;br /&gt;
| ROCK64&lt;br /&gt;
|-&lt;br /&gt;
! Rockchip RK3399&lt;br /&gt;
| PinePhone Pro, Pinebook Pro, ROCKPro64&lt;br /&gt;
|-&lt;br /&gt;
! Rockchip RK3566&lt;br /&gt;
| Quartz64 Model A and B, SOQuartz, PineTab2&lt;br /&gt;
|-&lt;br /&gt;
! Rockchip RK3588&lt;br /&gt;
| QuartzPro64&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Cedrus ===&lt;br /&gt;
&lt;br /&gt;
In 2018, Bootlin launched a crowdfunding campaign to bring a open source Allwinner VPU driver to mainline Linux, which came to be called Cedrus. The Cedrus media driver (For Allwinner SOCs such as A64) supported by mainline Linux supports H.264 and H.265 video decoding as of Linux 5.10, and with 5.11 came VP8 decoding support and a H.264 stateless video decoder interface. For more information refer to the [https://linux-sunxi.org/Sunxi-Cedrus#Codec_Support Sunxi wiki].&lt;br /&gt;
&lt;br /&gt;
=== Hantro ===&lt;br /&gt;
&lt;br /&gt;
The Hantro media driver supports Rockchip and NXP SoCs including the RK3399 used in the Pinebook Pro and RockPro64. In November 2020 it [https://www.cnx-software.com/2020/11/24/hantro-h1-hardware-accelerated-video-encoding-support-in-mainline-linux/ was announced] that Bootlin was working on encoding support for the driver.&lt;br /&gt;
&lt;br /&gt;
=== rkvdec ===&lt;br /&gt;
&lt;br /&gt;
rkvdec is the video decoding hardware that's developed by Rockchip presumably in house. It's what Rockchip uses for decoding 4K H.264/AVC, VP9 and H.265/HEVC content. The driver in mainline linux for the first generation rkvdec (used in RK3328 and RK3399) supports VP9 and H.264, [https://patchwork.kernel.org/project/linux-rockchip/list/?series=659401 patches for HEVC support] exist but require modification and resubmission to mainline.&lt;br /&gt;
&lt;br /&gt;
RK3566, RK3568 and likely RK3588 use a second generation of rkvdec called rkvdec2. No mainline driver for this exists yet. The rkvdec instance on RK3588 additionally supports the [https://en.wikipedia.org/wiki/Audio_Video_Standard AVS2 video codec].&lt;br /&gt;
&lt;br /&gt;
=== rkdjpeg ===&lt;br /&gt;
&lt;br /&gt;
rkdjpeg is Rockchip's in-house hardware accelerated JPEG decoder. It can be found on the RK3566 and RK3568 as well as the RK3588.&lt;br /&gt;
&lt;br /&gt;
No mainline driver exists for it so far.&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
=== GStreamer ===&lt;br /&gt;
&lt;br /&gt;
H.264, H.265, MPEG-2, VP8, VP9 and AV1 video decoding is possible when using GStreamer's command line tools, or an application utilizing it such as [https://github.com/Rafostar/clapper Clapper] or [https://flathub.org/apps/details/org.sigxcpu.Livi µPlayer]. µPlayer includes a indicator of when hardware acceleration is properly working and in use.&lt;br /&gt;
&lt;br /&gt;
==== Using gst-launch ====&lt;br /&gt;
&lt;br /&gt;
To test out hardware decoding from the command line, &amp;lt;code&amp;gt;gst-launch-1.0&amp;lt;/code&amp;gt; may be used. An example pipeline to demux, hardware decode and display H.264 video in an MP4 container would be as follows:&lt;br /&gt;
&lt;br /&gt;
 gst-launch-1.0 filesrc location=yourfilehere.mp4 ! qtdemux ! v4l2slh264dec ! videoconvert ! autovideosink&lt;br /&gt;
&lt;br /&gt;
To do the same for a VP8 WebM file, one may use:&lt;br /&gt;
&lt;br /&gt;
 gst-launch-1.0 filesrc location=yourfilehere.webm ! matroskademux ! v4l2slvp8dec ! videoconvert ! autovideosink&lt;br /&gt;
&lt;br /&gt;
Depending on your GStreamer version and your GStreamer's build configuration, the following may be available as well: &amp;lt;code&amp;gt;v4l2slmpeg2dec&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v4l2slav1dec&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v4l2slvp9dec&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;v4l2slh265dec&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
On platforms with a 2D accelerator (such as Rockchip's RGA) that is supported by v4l2, one may use &amp;lt;code&amp;gt;v4l2convert&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;videoconvert&amp;lt;/code&amp;gt; to also hardware accelerate the pixel format conversion.&lt;br /&gt;
&lt;br /&gt;
=== FFmpeg ===&lt;br /&gt;
&lt;br /&gt;
Mainline FFmpeg currently lacks the necessary patches to use the v4l2-requests based API, but [https://github.com/jernejsk/FFmpeg a fork that can utilise it exists]. Fedora users can install precompiled binaries from a [https://dl.kwizart.net/pub/ffmpeg-v4l2-request/ dedicated repository] by one of the Fedora maintainers.&lt;br /&gt;
&lt;br /&gt;
To build it, use something like&lt;br /&gt;
&lt;br /&gt;
 git clone -b v4l2-request-n6.0 https://github.com/jernejsk/FFmpeg.git&lt;br /&gt;
 cd FFmpeg&lt;br /&gt;
 ./configure --enable-v4l2-request --enable-libudev --enable-libdrm --enable-gnutls --prefix=/some/install/prefix/here&lt;br /&gt;
 make -j$(nproc)&lt;br /&gt;
&lt;br /&gt;
After compiling, you can install it into your specified prefix with&lt;br /&gt;
&lt;br /&gt;
 make install&lt;br /&gt;
&lt;br /&gt;
And then modify your PATH to include the prefix's bin directory.&lt;br /&gt;
&lt;br /&gt;
With the patched ffmpeg, you can utilise hardware decoding using the &amp;lt;code&amp;gt;-hwaccel drm&amp;lt;/code&amp;gt; parameter, e.g.:&lt;br /&gt;
&lt;br /&gt;
 ffmpeg -hwaccel drm -i input.mp4 -f null - -benchmark&lt;br /&gt;
&lt;br /&gt;
to measure how fast it decodes.&lt;br /&gt;
&lt;br /&gt;
=== mpv ===&lt;br /&gt;
&lt;br /&gt;
mpv v0.35 or later, built against the aforementioned FFmpeg fork, can be used to play back videos with hardware accelerated decoding. The hardware decoder path features interop with the GPU output, saving an expensive copyback operation. You can utilise the hardware decoding with e.g.:&lt;br /&gt;
&lt;br /&gt;
  mpv --hwdec=drm ''video''&lt;br /&gt;
&lt;br /&gt;
In mpv versions prior to 0.35, you can use the copyback hwdec with:&lt;br /&gt;
&lt;br /&gt;
  mpv --hwdec=drm-copy ''video''&lt;br /&gt;
&lt;br /&gt;
To build an mpv against the FFmpeg in your prefix, you can run&lt;br /&gt;
&lt;br /&gt;
  PKG_CONFIG_PATH=&amp;quot;/path/to/your/ffmpeg/prefix/lib/pkgconfig:$PKG_CONFIG_PATH&amp;quot; meson setup build&lt;br /&gt;
  ninja -C build&lt;br /&gt;
&lt;br /&gt;
=== HEVC on Linux for RK3399 ===&lt;br /&gt;
&lt;br /&gt;
[https://libreelec.tv/ LibreELEC] maintains [https://github.com/LibreELEC/LibreELEC.tv/tree/master/projects/Rockchip/patches/linux/default patches] applicable to mainline Linux that, almong other things, add HEVC decode to &amp;lt;code&amp;gt;rkvdec&amp;lt;/code&amp;gt;. Patches &amp;lt;code&amp;gt;linux-0011-v4l2-from-list.patch&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;linux-1001-v4l2-rockchip.patch&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;linux-2000-v4l2-wip-rkvdec-hevc.patch&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;linux-2001-v4l2-wip-iep-driver.patch&amp;lt;/code&amp;gt; from commit [https://github.com/LibreELEC/LibreELEC.tv/tree/269fd4f127ee3acb9306e5ba82e7fb9ca15505cd/projects/Rockchip/patches/linux/default 269fd4f] can be applied to Linux 6.5.2 (tested) and are sufficient to use hardware HEVC decode on the RK3399.&lt;br /&gt;
&lt;br /&gt;
== More Resources ==&lt;br /&gt;
&lt;br /&gt;
* [https://xnux.eu/devices/feature/cedrus-pp.html Megi's Cedrus Information]&lt;br /&gt;
* [https://briandaniels.me/2021/06/27/hardware-accelerated-video-playback-on-the-pinephone.html HW accelerated GStreamer playback on the PinePhone]&lt;br /&gt;
* [https://briandaniels.me/2021/07/06/hardware-accelerated-video-playback-on-the-pinephone-with-clapper.html HW accelerated Clapper video player on the PinePhone]&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
* [[Mainline Hardware Encoding]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Quartz64]] [[Category:ROCKPro64]] [[Category:Rockchip RK3566]] [[Category:Rockchip RK3399]] [[Category:Pinebook Pro]] [[Category:PinePhone Pro]] [[Category:PineNote]] [[Category:Rockchip RK3588]] [[Category:Rockchip RK3328]] [[Category:ROCK64]] [[Category:Allwinner A64]] [[Category:PinePhone]] [[Category:PINE A64-LTS]] [[Category:SOPINE]]&lt;/div&gt;</summary>
		<author><name>Link Mauve</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=Mainline_Hardware_Decoding&amp;diff=21694</id>
		<title>Mainline Hardware Decoding</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=Mainline_Hardware_Decoding&amp;diff=21694"/>
		<updated>2024-12-11T15:18:15Z</updated>

		<summary type="html">&lt;p&gt;Link Mauve: /* Supported Codecs By SoC */ Fix outdated information about rk3588&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{hint|This page is incomplete, you're welcome to improve it.}}&lt;br /&gt;
&lt;br /&gt;
'''Mainline Hardware Decoding''' refers to video decoding done using hardware accelerators on the mainline Linux kernel (i.e. what sits in Linus' tree).&lt;br /&gt;
&lt;br /&gt;
On most consumer-oriented SoCs, there is what is referred to as a VPU (Video Processing Unit). The VPU is responsible for power-efficient encoding and decoding of videos. Hardware-accelerated video decoding can be useful to get smoother video playback on your devices, lower power consumption, and lower CPU utilisation. Below is information regarding various hardware PINE64 uses and software that works with it.&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
Here's a table of the current support for different hardware. &amp;quot;In review&amp;quot; means the patch series to enable support has been posted to the mailing lists but is undergoing review, &amp;quot;linux-next&amp;quot; means it has been accepted and staged for the next Linux merge window.&lt;br /&gt;
&lt;br /&gt;
=== Supported Codecs By SoC ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable plainrowheaders&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; {{Diagonal split header|Codec|SoC}}&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; style=&amp;quot;width:6em&amp;quot; | A64&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; style=&amp;quot;width:6em&amp;quot; | RK3328&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; style=&amp;quot;width:6em&amp;quot; | RK3399&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; style=&amp;quot;width:6em&amp;quot; | RK3566&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; style=&amp;quot;width:6em&amp;quot; | RK3588&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | JPEG&lt;br /&gt;
| style=&amp;quot;background:#F99; text-align:center;&amp;quot;| No&lt;br /&gt;
| style=&amp;quot;background:#F99; text-align:center;&amp;quot;| No&lt;br /&gt;
| style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;| Yes&lt;br /&gt;
| style=&amp;quot;background:#F99; text-align:center;&amp;quot;| No&lt;br /&gt;
| style=&amp;quot;background:#F99; text-align:center;&amp;quot;| No&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | MPEG-2&lt;br /&gt;
| style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;| Yes&lt;br /&gt;
| style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;| Yes&lt;br /&gt;
| style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;| Yes&lt;br /&gt;
| style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;| Yes&lt;br /&gt;
| style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;| Yes&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | MPEG-4 Part 2/H.263&lt;br /&gt;
| style=&amp;quot;background:#F99; text-align:center;&amp;quot;| No&lt;br /&gt;
| style=&amp;quot;background:#F99; text-align:center;&amp;quot;| No&lt;br /&gt;
| style=&amp;quot;background:#F99; text-align:center;&amp;quot;| No&lt;br /&gt;
| style=&amp;quot;background:#F99; text-align:center;&amp;quot;| No&lt;br /&gt;
| style=&amp;quot;background:#F99; text-align:center;&amp;quot;| No&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | VP8&lt;br /&gt;
| style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;| Yes&lt;br /&gt;
| style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;| Yes&lt;br /&gt;
| style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;| Yes&lt;br /&gt;
| style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;| Yes&lt;br /&gt;
| style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;| Yes&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | H.264/AVC&lt;br /&gt;
| style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;| Yes&lt;br /&gt;
| style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;| Yes&lt;br /&gt;
| style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;| Yes&lt;br /&gt;
| style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;| Yes &amp;lt;sup style=&amp;quot;font-style:italic;color:green&amp;quot;&amp;gt;a&amp;lt;/sup&amp;gt;&lt;br /&gt;
| style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;| Yes&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | H.265/HEVC&lt;br /&gt;
| style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;| Yes&lt;br /&gt;
| style=&amp;quot;background:LightYellow; text-align:center;&amp;quot;| In review&lt;br /&gt;
| style=&amp;quot;background:LightYellow; text-align:center;&amp;quot;| Patches Exist&lt;br /&gt;
| style=&amp;quot;background:#F99; text-align:center;&amp;quot;| No&lt;br /&gt;
| style=&amp;quot;background:#F99; text-align:center;&amp;quot;| No&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | VP9&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot;| N/A&lt;br /&gt;
| style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;| Yes&lt;br /&gt;
| style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;| Yes&lt;br /&gt;
| style=&amp;quot;background:#F99; text-align:center;&amp;quot;| No&lt;br /&gt;
| style=&amp;quot;background:#F99; text-align:center;&amp;quot;| No&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | AVS2&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot;| N/A&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot;| N/A&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot;| N/A&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot;| N/A&lt;br /&gt;
| style=&amp;quot;background:#F99; text-align:center;&amp;quot;| No&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | AV1&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot;| N/A&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot;| N/A&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot;| N/A&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot;| N/A&lt;br /&gt;
| style=&amp;quot;background:#F99; text-align:center;&amp;quot;| Yes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Notes ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol style=&amp;quot;list-style-type:lower-alpha&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;only Hantro, not rkvdec2, so with a maximum resolution of 1080p for now&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Used SoC By Device ===&lt;br /&gt;
&lt;br /&gt;
This table provides a quick reference to check which SoC is used in what Pine devices, for ease of navigating the previous table.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable plainrowheaders&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! SoC&lt;br /&gt;
! Device(s)&lt;br /&gt;
|-&lt;br /&gt;
! Allwinner A64&lt;br /&gt;
| PinePhone, PineTab1, Pinebook, PINE A64, PINE A64-LTS, SOPINE&lt;br /&gt;
|-&lt;br /&gt;
! Rockchip RK3328&lt;br /&gt;
| ROCK64&lt;br /&gt;
|-&lt;br /&gt;
! Rockchip RK3399&lt;br /&gt;
| PinePhone Pro, Pinebook Pro, ROCKPro64&lt;br /&gt;
|-&lt;br /&gt;
! Rockchip RK3566&lt;br /&gt;
| Quartz64 Model A and B, SOQuartz, PineTab2&lt;br /&gt;
|-&lt;br /&gt;
! Rockchip RK3588&lt;br /&gt;
| QuartzPro64&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Cedrus ===&lt;br /&gt;
&lt;br /&gt;
In 2018, Bootlin launched a crowdfunding campaign to bring a open source Allwinner VPU driver to mainline Linux, which came to be called Cedrus. The Cedrus media driver (For Allwinner SOCs such as A64) supported by mainline Linux supports H.264 and H.265 video decoding as of Linux 5.10, and with 5.11 came VP8 decoding support and a H.264 stateless video decoder interface. For more information refer to the [https://linux-sunxi.org/Sunxi-Cedrus#Codec_Support Sunxi wiki].&lt;br /&gt;
&lt;br /&gt;
=== Hantro ===&lt;br /&gt;
&lt;br /&gt;
The Hantro media driver supports Rockchip and NXP SoCs including the RK3399 used in the Pinebook Pro and RockPro64. In November 2020 it [https://www.cnx-software.com/2020/11/24/hantro-h1-hardware-accelerated-video-encoding-support-in-mainline-linux/ was announced] that Bootlin was working on encoding support for the driver.&lt;br /&gt;
&lt;br /&gt;
=== rkvdec ===&lt;br /&gt;
&lt;br /&gt;
rkvdec is the video decoding hardware that's developed by Rockchip presumably in house. It's what Rockchip uses for decoding 4K H.264/AVC, VP9 and H.265/HEVC content. The driver in mainline linux for the first generation rkvdec (used in RK3328 and RK3399) supports VP9 and H.264, [https://patchwork.kernel.org/project/linux-rockchip/list/?series=659401 patches for HEVC support] exist but require modification and resubmission to mainline.&lt;br /&gt;
&lt;br /&gt;
RK3566, RK3568 and likely RK3588 use a second generation of rkvdec called rkvdec2. No mainline driver for this exists yet. The rkvdec instance on RK3588 additionally supports the [https://en.wikipedia.org/wiki/Audio_Video_Standard AVS2 video codec].&lt;br /&gt;
&lt;br /&gt;
=== rkdjpeg ===&lt;br /&gt;
&lt;br /&gt;
rkdjpeg is Rockchip's in-house hardware accelerated JPEG decoder. It can be found on the RK3566 and RK3568 as well as the RK3588.&lt;br /&gt;
&lt;br /&gt;
No mainline driver exists for it so far.&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
=== GStreamer ===&lt;br /&gt;
&lt;br /&gt;
H.264, H.265, MPEG-2, VP8, VP9 and AV1 video decoding is possible when using GStreamer's command line tools, or an application utilizing it such as [https://github.com/Rafostar/clapper Clapper] or [https://flathub.org/apps/details/org.sigxcpu.Livi µPlayer]. µPlayer includes a indicator of when hardware acceleration is properly working and in use.&lt;br /&gt;
&lt;br /&gt;
==== Using gst-launch ====&lt;br /&gt;
&lt;br /&gt;
To test out hardware decoding from the command line, &amp;lt;code&amp;gt;gst-launch-1.0&amp;lt;/code&amp;gt; may be used. An example pipeline to demux, hardware decode and display H.264 video in an MP4 container would be as follows:&lt;br /&gt;
&lt;br /&gt;
 gst-launch-1.0 filesrc location=yourfilehere.mp4 ! qtdemux ! v4l2slh264dec ! videoconvert ! autovideosink&lt;br /&gt;
&lt;br /&gt;
To do the same for a VP8 WebM file, one may use:&lt;br /&gt;
&lt;br /&gt;
 gst-launch-1.0 filesrc location=yourfilehere.webm ! matroskademux ! v4l2slvp8dec ! videoconvert ! autovideosink&lt;br /&gt;
&lt;br /&gt;
Depending on your GStreamer version and your GStreamer's build configuration, the following may be available as well: &amp;lt;code&amp;gt;v4l2slmpeg2dec&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v4l2slav1dec&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v4l2slvp9dec&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;v4l2slh265dec&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
On platforms with a 2D accelerator (such as Rockchip's RGA) that is supported by v4l2, one may use &amp;lt;code&amp;gt;v4l2convert&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;videoconvert&amp;lt;/code&amp;gt; to also hardware accelerate the pixel format conversion.&lt;br /&gt;
&lt;br /&gt;
=== FFmpeg ===&lt;br /&gt;
&lt;br /&gt;
Mainline FFmpeg currently lacks the necessary patches to use the v4l2-requests based API, but [https://github.com/jernejsk/FFmpeg a fork that can utilise it exists]. Fedora users can install precompiled binaries from a [https://dl.kwizart.net/pub/ffmpeg-v4l2-request/ dedicated repository] by one of the Fedora maintainers.&lt;br /&gt;
&lt;br /&gt;
To build it, use something like&lt;br /&gt;
&lt;br /&gt;
 git clone -b v4l2-request-n6.0 https://github.com/jernejsk/FFmpeg.git&lt;br /&gt;
 cd FFmpeg&lt;br /&gt;
 ./configure --enable-v4l2-request --enable-libudev --enable-libdrm --enable-gnutls --prefix=/some/install/prefix/here&lt;br /&gt;
 make -j$(nproc)&lt;br /&gt;
&lt;br /&gt;
After compiling, you can install it into your specified prefix with&lt;br /&gt;
&lt;br /&gt;
 make install&lt;br /&gt;
&lt;br /&gt;
And then modify your PATH to include the prefix's bin directory.&lt;br /&gt;
&lt;br /&gt;
With the patched ffmpeg, you can utilise hardware decoding using the &amp;lt;code&amp;gt;-hwaccel drm&amp;lt;/code&amp;gt; parameter, e.g.:&lt;br /&gt;
&lt;br /&gt;
 ffmpeg -hwaccel drm -i input.mp4 -f null - -benchmark&lt;br /&gt;
&lt;br /&gt;
to measure how fast it decodes.&lt;br /&gt;
&lt;br /&gt;
=== mpv ===&lt;br /&gt;
&lt;br /&gt;
mpv v0.35 or later, built against the aforementioned FFmpeg fork, can be used to play back videos with hardware accelerated decoding. The hardware decoder path features interop with the GPU output, saving an expensive copyback operation. You can utilise the hardware decoding with e.g.:&lt;br /&gt;
&lt;br /&gt;
  mpv --hwdec=drm ''video''&lt;br /&gt;
&lt;br /&gt;
In mpv versions prior to 0.35, you can use the copyback hwdec with:&lt;br /&gt;
&lt;br /&gt;
  mpv --hwdec=drm-copy ''video''&lt;br /&gt;
&lt;br /&gt;
To build an mpv against the FFmpeg in your prefix, you can run&lt;br /&gt;
&lt;br /&gt;
  PKG_CONFIG_PATH=&amp;quot;/path/to/your/ffmpeg/prefix/lib/pkgconfig:$PKG_CONFIG_PATH&amp;quot; meson setup build&lt;br /&gt;
  ninja -C build&lt;br /&gt;
&lt;br /&gt;
=== HEVC on Linux for RK3399 ===&lt;br /&gt;
&lt;br /&gt;
[https://libreelec.tv/ LibreELEC] maintains [https://github.com/LibreELEC/LibreELEC.tv/tree/master/projects/Rockchip/patches/linux/default patches] applicable to mainline Linux that, almong other things, add HEVC decode to &amp;lt;code&amp;gt;rkvdec&amp;lt;/code&amp;gt;. Patches &amp;lt;code&amp;gt;linux-0011-v4l2-from-list.patch&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;linux-1001-v4l2-rockchip.patch&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;linux-2000-v4l2-wip-rkvdec-hevc.patch&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;linux-2001-v4l2-wip-iep-driver.patch&amp;lt;/code&amp;gt; from commit [https://github.com/LibreELEC/LibreELEC.tv/tree/269fd4f127ee3acb9306e5ba82e7fb9ca15505cd/projects/Rockchip/patches/linux/default 269fd4f] can be applied to Linux 6.5.2 (tested) and are sufficient to use hardware HEVC decode on the RK3399.&lt;br /&gt;
&lt;br /&gt;
== More Resources ==&lt;br /&gt;
&lt;br /&gt;
* [https://xnux.eu/devices/feature/cedrus-pp.html Megi's Cedrus Information]&lt;br /&gt;
* [https://briandaniels.me/2021/06/27/hardware-accelerated-video-playback-on-the-pinephone.html HW accelerated GStreamer playback on the PinePhone]&lt;br /&gt;
* [https://briandaniels.me/2021/07/06/hardware-accelerated-video-playback-on-the-pinephone-with-clapper.html HW accelerated Clapper video player on the PinePhone]&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
* [[Mainline Hardware Encoding]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Quartz64]] [[Category:ROCKPro64]] [[Category:Rockchip RK3566]] [[Category:Rockchip RK3399]] [[Category:Pinebook Pro]] [[Category:PinePhone Pro]] [[Category:PineNote]] [[Category:Rockchip RK3588]] [[Category:Rockchip RK3328]] [[Category:ROCK64]] [[Category:Allwinner A64]] [[Category:PinePhone]] [[Category:PINE A64-LTS]] [[Category:SOPINE]]&lt;/div&gt;</summary>
		<author><name>Link Mauve</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=Mainline_Hardware_Decoding&amp;diff=20058</id>
		<title>Mainline Hardware Decoding</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=Mainline_Hardware_Decoding&amp;diff=20058"/>
		<updated>2023-07-10T16:03:32Z</updated>

		<summary type="html">&lt;p&gt;Link Mauve: /* Hardware */ Add A64 support in the table.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{hint|This page is incomplete, you're welcome to improve it.}}&lt;br /&gt;
&lt;br /&gt;
'''Mainline Hardware Decoding''' refers to video decoding done using hardware accelerators on the mainline Linux kernel (i.e. what sits in Linus' tree).&lt;br /&gt;
&lt;br /&gt;
On most consumer-oriented SoCs, there is what is referred to as a VPU (Video Processing Unit). The VPU is responsible for power-efficient encoding and decoding of videos. Hardware-accelerated video decoding can be useful to get smoother video playback on your devices, lower power consumption, and lower CPU utilisation. Below is information regarding various hardware PINE64 uses and software that works with it.&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
Here's a table of the current support for different hardware. &amp;quot;In review&amp;quot; means the patch series to enable support has been posted to the mailing lists but is undergoing review, &amp;quot;linux-next&amp;quot; means it has been accepted and staged for the next Linux merge window.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable plainrowheaders&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; {{Diagonal split header|Codec|SoC}}&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | A64&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | RK3328&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | RK3399&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | RK3566&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | RK3588&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | JPEG&lt;br /&gt;
| style=&amp;quot;background:#F99; text-align:center;&amp;quot;| No&lt;br /&gt;
| style=&amp;quot;background:#F99; text-align:center;&amp;quot;| No&lt;br /&gt;
| style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;| Yes&lt;br /&gt;
| style=&amp;quot;background:#F99; text-align:center;&amp;quot;| No&lt;br /&gt;
| style=&amp;quot;background:#F99; text-align:center;&amp;quot;| No&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | MPEG-2&lt;br /&gt;
| style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;| Yes&lt;br /&gt;
| style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;| Yes&lt;br /&gt;
| style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;| Yes&lt;br /&gt;
| style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;| Yes&lt;br /&gt;
| style=&amp;quot;background:#F99; text-align:center;&amp;quot;| No&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | MPEG-4 Part 2/H.263&lt;br /&gt;
| style=&amp;quot;background:#F99; text-align:center;&amp;quot;| No&lt;br /&gt;
| style=&amp;quot;background:#F99; text-align:center;&amp;quot;| No&lt;br /&gt;
| style=&amp;quot;background:#F99; text-align:center;&amp;quot;| No&lt;br /&gt;
| style=&amp;quot;background:#F99; text-align:center;&amp;quot;| No&lt;br /&gt;
| style=&amp;quot;background:#F99; text-align:center;&amp;quot;| No&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | VP8&lt;br /&gt;
| style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;| Yes&lt;br /&gt;
| style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;| Yes&lt;br /&gt;
| style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;| Yes&lt;br /&gt;
| style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;| Yes&lt;br /&gt;
| style=&amp;quot;background:#F99; text-align:center;&amp;quot;| No&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | H.264/AVC&lt;br /&gt;
| style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;| Yes&lt;br /&gt;
| style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;| Yes&lt;br /&gt;
| style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;| Yes&lt;br /&gt;
| style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;| Yes &amp;lt;sup style=&amp;quot;font-style:italic;color:green&amp;quot;&amp;gt;a&amp;lt;/sup&amp;gt;&lt;br /&gt;
| style=&amp;quot;background:#F99; text-align:center;&amp;quot;| No&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | H.265/HEVC&lt;br /&gt;
| style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;| Yes&lt;br /&gt;
| style=&amp;quot;background:LightYellow; text-align:center;&amp;quot;| In review&lt;br /&gt;
| style=&amp;quot;background:LightYellow; text-align:center;&amp;quot;| In review&lt;br /&gt;
| style=&amp;quot;background:#F99; text-align:center;&amp;quot;| No&lt;br /&gt;
| style=&amp;quot;background:#F99; text-align:center;&amp;quot;| No&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | VP9&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot;| N/A&lt;br /&gt;
| style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;| Yes&lt;br /&gt;
| style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;| Yes&lt;br /&gt;
| style=&amp;quot;background:#F99; text-align:center;&amp;quot;| No&lt;br /&gt;
| style=&amp;quot;background:#F99; text-align:center;&amp;quot;| No&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | AVS2&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot;| N/A&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot;| N/A&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot;| N/A&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot;| N/A&lt;br /&gt;
| style=&amp;quot;background:#F99; text-align:center;&amp;quot;| No&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | AV1&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot;| N/A&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot;| N/A&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot;| N/A&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot;| N/A&lt;br /&gt;
| style=&amp;quot;background:#F99; text-align:center;&amp;quot;| No&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Notes ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol style=&amp;quot;list-style-type:lower-alpha&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;only Hantro, not rkvdec2, so with a maximum resolution of 1080p for now&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Cedrus ===&lt;br /&gt;
&lt;br /&gt;
In 2018, Bootlin launched a crowdfunding campaign to bring a open source Allwinner VPU driver to mainline Linux, which came to be called Cedrus. The Cedrus media driver (For Allwinner SOCs such as A64) supported by mainline Linux supports H.264 and H.265 video decoding as of Linux 5.10, and with 5.11 came VP8 decoding support and a H.264 stateless video decoder interface. For more information refer to the [https://linux-sunxi.org/Sunxi-Cedrus#Codec_Support Sunxi wiki].&lt;br /&gt;
&lt;br /&gt;
=== Hantro ===&lt;br /&gt;
&lt;br /&gt;
The Hantro media driver supports Rockchip and NXP SoCs including the RK3399 used in the Pinebook Pro and RockPro64. In November 2020 it [https://www.cnx-software.com/2020/11/24/hantro-h1-hardware-accelerated-video-encoding-support-in-mainline-linux/ was announced] that Bootlin was working on encoding support for the driver.&lt;br /&gt;
&lt;br /&gt;
=== rkvdec ===&lt;br /&gt;
&lt;br /&gt;
rkvdec is the video decoding hardware that's developed by Rockchip presumably in house. It's what Rockchip uses for decoding 4K H.264/AVC, VP9 and H.265/HEVC content. The driver in mainline linux for the first generation rkvdec (used in RK3328 and RK3399) supports VP9 and H.264, [https://patchwork.kernel.org/project/linux-rockchip/list/?series=659401 patches for HEVC support] are also in the process of review.&lt;br /&gt;
&lt;br /&gt;
RK3566, RK3568 and likely RK3588 use a second generation of rkvdec called rkvdec2. No mainline driver for this exists yet. The rkvdec instance on RK3588 additionally supports the [https://en.wikipedia.org/wiki/Audio_Video_Standard AVS2 video codec].&lt;br /&gt;
&lt;br /&gt;
=== rkdjpeg ===&lt;br /&gt;
&lt;br /&gt;
rkdjpeg is Rockchip's in-house hardware accelerated JPEG decoder. It can be found on the RK3566 and RK3568 as well as the RK3588.&lt;br /&gt;
&lt;br /&gt;
No mainline driver exists for it so far.&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
=== GStreamer ===&lt;br /&gt;
H.264 video decoding is possible when using GStreamer built from source, or an application utilizing it such as [https://github.com/Rafostar/clapper Clapper] or [https://flathub.org/apps/details/org.sigxcpu.Livi µPlayer]. µPlayer includes a indicator of when hardware acceleration is properly working and in use.&lt;br /&gt;
&lt;br /&gt;
=== FFmpeg ===&lt;br /&gt;
&lt;br /&gt;
Mainline FFmpeg currently lacks the necessary patches to use the v4l2-requests based API, but [https://github.com/jernejsk/FFmpeg a fork that can utilise it exists]. Fedora users can install precompiled binaries from a [https://dl.kwizart.net/pub/ffmpeg-v4l2-request/ dedicated repository] by one of the Fedora maintainers.&lt;br /&gt;
&lt;br /&gt;
To build it, use something like&lt;br /&gt;
&lt;br /&gt;
 git clone -b v4l2-request-n6.0 https://github.com/jernejsk/FFmpeg.git&lt;br /&gt;
 cd FFmpeg&lt;br /&gt;
 ./configure --enable-v4l2-request --enable-libudev --enable-libdrm --enable-gnutls --prefix=/some/install/prefix/here&lt;br /&gt;
 make -j$(nproc)&lt;br /&gt;
&lt;br /&gt;
After compiling, you can install it into your specified prefix with&lt;br /&gt;
&lt;br /&gt;
 make install&lt;br /&gt;
&lt;br /&gt;
And then modify your PATH to include the prefix's bin directory.&lt;br /&gt;
&lt;br /&gt;
With the patched ffmpeg, you can utilise hardware decoding using the &amp;lt;code&amp;gt;-hwaccel drm&amp;lt;/code&amp;gt; parameter, e.g.:&lt;br /&gt;
&lt;br /&gt;
 ffmpeg -hwaccel drm -i input.mp4 -f null - -benchmark&lt;br /&gt;
&lt;br /&gt;
to measure how fast it decodes.&lt;br /&gt;
&lt;br /&gt;
=== mpv ===&lt;br /&gt;
&lt;br /&gt;
mpv v0.35 or later, used against the aforementioned FFmpeg fork (re-building isn't required when using shared ffmpeg libraries), can be used to play back videos with hardware accelerated decoding. The hardware decoder path features interop with the GPU output, saving an expensive copyback operation. You can utilise the hardware decoding with e.g.:&lt;br /&gt;
&lt;br /&gt;
  mpv --hwdec=drm ''video''&lt;br /&gt;
&lt;br /&gt;
In mpv versions prior to 0.35, you can use the copyback hwdec with:&lt;br /&gt;
&lt;br /&gt;
  mpv --hwdec=drm-copy ''video''&lt;br /&gt;
&lt;br /&gt;
To build an mpv against the FFmpeg in your prefix, you can run&lt;br /&gt;
&lt;br /&gt;
  PKG_CONFIG_PATH=&amp;quot;/path/to/your/ffmpeg/prefix/lib/pkgconfig:$PKG_CONFIG_PATH&amp;quot; meson setup build&lt;br /&gt;
  ninja -C build&lt;br /&gt;
&lt;br /&gt;
== More Resources ==&lt;br /&gt;
&lt;br /&gt;
* [https://xnux.eu/devices/feature/cedrus-pp.html Megi's Cedrus Information]&lt;br /&gt;
* [https://briandaniels.me/2021/06/27/hardware-accelerated-video-playback-on-the-pinephone.html HW accelerated GStreamer playback on the PinePhone]&lt;br /&gt;
* [https://briandaniels.me/2021/07/06/hardware-accelerated-video-playback-on-the-pinephone-with-clapper.html HW accelerated Clapper video player on the PinePhone]&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
* [[Mainline Hardware Encoding]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Quartz64]] [[Category:ROCKPro64]] [[Category:Rockchip RK3566]] [[Category:Rockchip RK3399]] [[Category:Pinebook Pro]] [[Category:PinePhone Pro]] [[Category:PineNote]] [[Category:Rockchip RK3588]] [[Category:Rockchip RK3328]] [[Category:ROCK64]] [[Category:Allwinner A64]] [[Category:PinePhone]] [[Category:PINE A64-LTS]] [[Category:SOPINE]]&lt;/div&gt;</summary>
		<author><name>Link Mauve</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=PinePhone_Carrier_Support&amp;diff=10936</id>
		<title>PinePhone Carrier Support</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=PinePhone_Carrier_Support&amp;diff=10936"/>
		<updated>2021-07-30T09:08:42Z</updated>

		<summary type="html">&lt;p&gt;Link Mauve: /* Europe */ Add Free in France.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{under construction}}&lt;br /&gt;
&lt;br /&gt;
{{hint|MMS currently doesn't work in any distribution on the PinePhone without a [[PinePhone_Carrier_Support#MMS_workarounds|script]]! This means images and group chats will not work in text messages.}}&lt;br /&gt;
&lt;br /&gt;
This page contains hints on setting up cellular network connectivity for specific carriers.&lt;br /&gt;
For more general information, see [[PinePhone#Modem_and_carrier_support|Modem and carrier support]]. For the APN settings see [[PinePhone APN Settings]].&lt;br /&gt;
&lt;br /&gt;
= Check compatibility =&lt;br /&gt;
To check if the PinePhone is supported on your carrier:&lt;br /&gt;
&lt;br /&gt;
Search for your carrier on [https://www.frequencycheck.com/ frequencycheck.com] and compare the carrier's LTE/GSM/WCDMA frequencies to the PinePhone's supported frequencies (listed in the [https://www.quectel.com/UploadFile/Product/Quectel_EG25-G_LTE_Specification_V1.1.pdf modem specification sheet]).&lt;br /&gt;
&lt;br /&gt;
It is likely that there will be a few frequencies that your carrier uses which are not supported by the PinePhone. Not all of the carrier's frequencies need to be supported by the PinePhone for it to work - as long as ''most'' of them are supported, you will still get good coverage.&lt;br /&gt;
&lt;br /&gt;
= Tested and working carriers =&lt;br /&gt;
&lt;br /&gt;
The following is a list of carriers which has been tested by users and confirmed to be working (excerpt):&lt;br /&gt;
&lt;br /&gt;
== Asia ==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
!Country || Carrier name || SMS working || MMS working || Calls working || Data working || Tested OS (with version) and UI&lt;br /&gt;
|-&lt;br /&gt;
| Japan || SoftBank || Not tested || Unsupported by carrier || No || No || Mobian Phosh, December 2020&lt;br /&gt;
|-&lt;br /&gt;
| Japan || Rakuten Mobile || Unsupported by carrier || Unsupported by carrier || Yes || Yes || Mobian Phosh, January 2020&lt;br /&gt;
|-&lt;br /&gt;
| Japan || Rakuten Mobile || Unsupported by carrier || Unsupported by carrier || Yes || No || Manjaro Plasma Mobile February 2021&lt;br /&gt;
|-&lt;br /&gt;
| Japan || Docomo || Yes || Not tested || Yes || Yes || Mobian Phosh, February 2021&lt;br /&gt;
|-&lt;br /&gt;
| India || Vodafone / Vi India || Yes || Not tested || Yes || Yes || DanctNIX (Arch Linux ARM) with Phosh, March 2021&lt;br /&gt;
|-&lt;br /&gt;
| South Korea || KT || Yes || Not tested || Yes || Yes || Manjaro Phosh, June 2021&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Africa ==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
!Country || Carrier name || SMS working || MMS working || Calls working || Data working || Tested OS (with version) and UI&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| Test || Test || Yes || Yes || Yes || Yes || TestOS with Phosh, 20201129&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Europe ==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
!Country || Carrier name || SMS working || MMS working || Calls working || Data working || Tested OS (with version) and UI&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| Sweden || Telenor SE || Not tested || Not tested || Yes || Not tested || Manjaro Plasma Mobile beta2&lt;br /&gt;
|-&lt;br /&gt;
| UK     || Three || Yes || Not tested || Yes || Yes || Manjaro Plasma Mobile beta2&lt;br /&gt;
|-&lt;br /&gt;
| UK     || Vodafone || Yes || Not tested || Yes || Yes || ALARM &amp;amp; pmOS (Phosh?), modem FW latest - 26 Feb 21&lt;br /&gt;
|-&lt;br /&gt;
| France     || Orange || Yes || Not tested || Yes || Yes || Manjaro Phosh Beta6 and later - 9 march 2021&lt;br /&gt;
|-&lt;br /&gt;
| France     || SFR || Yes || Not tested || Yes || Yes || Manjaro Phosh Beta6 and later - 9 march 2021&lt;br /&gt;
|-&lt;br /&gt;
| France     || Free || Yes || Not tested || Yes || Not tested || ArchLinux - 30 July 2021&lt;br /&gt;
|-&lt;br /&gt;
| Czech Republic     || O2 || Yes (only on 2G) || Not tested || Yes || Yes || Mobian Phosh (20210517 image up to date) - 2 June 2021&lt;br /&gt;
|-&lt;br /&gt;
| Germany     || Congstar || Yes || Not tested || Yes || Yes (IPv4 &amp;amp; IPv6) || Mobian (Megi's kernel 5.13.0-rc4, apt up-to-date) with Phosh, 2021-06-07&lt;br /&gt;
|-&lt;br /&gt;
| Germany     || Telekom  || Yes || Not tested || Yes || Not tested        || Mobian Phosh (5.10-sunxi64), 2021-07-28&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== North America ==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
!Country || Carrier name || SMS working || MMS working || Calls working || Data working || Tested OS (with version) and UI&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| USA || T-Mobile || Yes || No || Yes || Yes || &lt;br /&gt;
* Arch Linux Arm 2020/11/29  &lt;br /&gt;
* Mobian - Phosh &lt;br /&gt;
* Manjaro - KDE Plasma Mobile&lt;br /&gt;
|-&lt;br /&gt;
| USA || MetroPCS (T-Mobile) || Yes || No || Yes || Yes || &lt;br /&gt;
*Arch Linux Arm (Phosh,SXMO) 2021/04/29 &lt;br /&gt;
*Manjaro - Phosh 2021/04/29 &lt;br /&gt;
*Mobian - Phosh 2021/3/20&lt;br /&gt;
|-&lt;br /&gt;
| USA || T-Mobile || Yes - buggy || No || Yes - buggy || Yes - buggy || &lt;br /&gt;
*Manjaro - Plasma Dev 2020/11/21  &lt;br /&gt;
*Ubuntu Touch - 2020/11/26 &lt;br /&gt;
*KDE Neon 2020/11/02&lt;br /&gt;
|-&lt;br /&gt;
| USA || Mint Mobile (T-Mobile) || Yes || Not tested || Yes || Yes || &lt;br /&gt;
*Mobian - Phosh 2021/3/14&lt;br /&gt;
*postMarketOS - Phosh, Sxmo, Plasma Mobile 2021/5/26&lt;br /&gt;
*Ubuntu Touch 2021/5/24&lt;br /&gt;
|-&lt;br /&gt;
| USA || Verizon || Yes || Not tested || Yes || Yes || &lt;br /&gt;
*Mobian - Phosh 2021/3/1&lt;br /&gt;
|-&lt;br /&gt;
| USA || Verizon || No || No || No || No ||&lt;br /&gt;
*Ubuntu Touch 2021/5/24 (You can occasionally get the settings to work with Verizon, but it seems like the settings automatically changes the carrier to the wrong one after a few minutes) &lt;br /&gt;
|-&lt;br /&gt;
| USA || Verizon || Not tested || Not tested || Yes || Not via gui || &lt;br /&gt;
*Manjaro - KDE Plasma Mobile 2021/5/10 &lt;br /&gt;
|-&lt;br /&gt;
| USA || Verizon || Yes || Not tested || Yes || Not via gui || &lt;br /&gt;
*Manjaro - Phosh 2021/5/31 &lt;br /&gt;
|-&lt;br /&gt;
| USA || Verizon || Yes || Not tested || Yes || Yes || &lt;br /&gt;
*postmarketOS - Phosh 2021/5/31 &lt;br /&gt;
|-&lt;br /&gt;
| USA || Verizon || Yes || Not tested || Yes || Yes || &lt;br /&gt;
*Arch - Phosh 2021/5/31 &lt;br /&gt;
|-&lt;br /&gt;
| Canada || Freedom || Yes || Not tested || Yes || Yes || &lt;br /&gt;
*Arch Pinephone - Phosh (APN: internet.windmobile.ca), 2021/4/25 &lt;br /&gt;
|-&lt;br /&gt;
| USA || FaithWireless (AT&amp;amp;T) || Yes || No || Yes || Yes || &lt;br /&gt;
*Arch Linux Arm - Phosh 2021/04/29  (version 0.10.1-1, see the [[PinePhone_Carrier_Support#AT.26T|AT&amp;amp;T issues]] below.)&lt;br /&gt;
|-&lt;br /&gt;
| USA || Consumer Cellular (AT&amp;amp;T) || Yes || No || Yes || Yes || &lt;br /&gt;
*Manjaro - Phosh 2021/06/26&lt;br /&gt;
|-&lt;br /&gt;
| USA || Google Fi (T-Mobile) || Yes || No || Yes || Yes || &lt;br /&gt;
*Arch Linux Arm - Phosh 0.10.2 2021/05/29&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== South America ==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
!Country || Carrier name || SMS working || MMS working || Calls working || Data working || Tested OS (with version) and UI&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| Test || Test || Yes || Yes || Yes || Yes || TestOS with Phosh, 20201129&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Australia / Oceania ==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
!Country || Carrier name || SMS working || MMS working || Calls working || Data working || Tested OS (with version) and UI&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| Test || Test || Yes || Yes || Yes || Yes || TestOS with Phosh, 20201129&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Middle East  ==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
!Country || Carrier name || SMS working || MMS working || Calls working || Data working || Tested OS (with version) and UI&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| Israel|| Cellcom prepay|| receive+notify|| NA || ring+ notify || NA || on PmOS Sxmo May 14 2021.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Israel|| Golan TC || receive+notify|| NA || ring+ notify || NA || on PmOS Sxmo May 14 2021.&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| Israel|| Partner prepay || receive+notify|| NA || ring+ notify || NA || on PmOS Sxmo May 14 2021.&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| Israel|| Pelephone prepay|| receive+notify|| NA || ring+ notify || NA || on PmOS Sxmo May 14 2021.&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| Israel|| Hot prepay|| receive+notify|| NA || ring+ notify || NA || on PmOS Sxmo May 14 2021.&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| Israel|| 019 prepay|| No || NA ||Bars only || NA || on PmOS Sxmo May 14 2021.&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;
= Special carrier notes =&lt;br /&gt;
&lt;br /&gt;
{{Warning|This section contains providers which do not work or require special settings or actions to work.}}&lt;br /&gt;
&lt;br /&gt;
Some carriers might support only certain frequencies or might require certain settings in Ofono or ModemManager. The following is a list of collected notes for carriers regarding special settings, hints or information:&lt;br /&gt;
&lt;br /&gt;
== USA ==&lt;br /&gt;
=== AT&amp;amp;T ===&lt;br /&gt;
According to [https://ltefix.com/wp-content/uploads/USA-Major-Carriers-Bands-Frequencies-CA.pdf this page], AT&amp;amp;T's primary bands are 12 and 17 - 700ac and 700 MHz respectively. The PinePhone seems to work out-of-the-box with AT&amp;amp;T. If you transfer a SIM card from another phone you were using with AT&amp;amp;T, you need to activate the PinePhone through [https://www.att.com/buy/wireless/byod/byod AT&amp;amp;T's website]. Calls and SMS messages work. VoLTE is as yet untested.&lt;br /&gt;
&lt;br /&gt;
However, it is likely AT&amp;amp;T will drop support with their network upgrade in the near future like their child company Cricket Wireless already has. [https://www.att.com/ecms/dam/att/consumer/help/pdf/Devices-Working-on-ATT-Network.pdf This page] lists their supported devices for their new network.&lt;br /&gt;
&lt;br /&gt;
=== Consumer Cellular ===&lt;br /&gt;
&lt;br /&gt;
Consumer Cellular is a MVNO that uses both AT&amp;amp;T and T-Mobile networks. On the AT&amp;amp;T network LTE data works without special configuration. If you transfer a SIM card from another phone to the PinePhone, you may need to contact customer support in order for them to register the IMEI association to the correct hardware; in one case it was first incorrectly identified as a Samsung Google Nexus Prime before later being correctly identified by the modem model Quectel EG25-G. Customer support also explicitly enabled VoLTE on the device. After VoLTE instructions on this site were followed and APN instructions on the Consumer Cellular site were followed, VoLTE was confirmed working.&lt;br /&gt;
&lt;br /&gt;
=== Cricket Wireless ===&lt;br /&gt;
Cricket wireless is a MVNO that uses AT&amp;amp;T's network. VoLTE was fully supported, but the PinePhone is no longer considered a compatible device in the US by the carrier (as of March 2021).&lt;br /&gt;
&lt;br /&gt;
=== SimpleMobile ===&lt;br /&gt;
SimpleMobile is a T-Mobile prepaid MVNO operating in the United States. 4G LTE, VoLTE, data, and SMS all work on the PinePhone after activation. Activation can be done online without extra software or assistance, go to https://www.simplemobile.com/activation/byopcollectsim and make sure you have your SIM card and IMEI ready.&lt;br /&gt;
&lt;br /&gt;
=== Sprint ===&lt;br /&gt;
Sprint is currently not supported due to unknown reasons. Any input regarding this issue is highly appreciated.&lt;br /&gt;
&lt;br /&gt;
=== T-Mobile ===&lt;br /&gt;
According to [https://ltefix.com/wp-content/uploads/USA-Major-Carriers-Bands-Frequencies-CA.pdf this page],&lt;br /&gt;
T-Mobile's primary frequency band for the United States is 12 (700ac MHz).&lt;br /&gt;
&lt;br /&gt;
T-Mobile's bands and protocols are summarized on&lt;br /&gt;
[https://www.frequencycheck.com/carriers/t-mobile-united-states this page].&lt;br /&gt;
&lt;br /&gt;
While the PinePhone's modem does support all LTE bands that T-Mobile uses in the US (And is one of the best choices for band support with the PinePhone's modem in the US), VoLTE is still listed as &amp;quot;Under development&amp;quot; by the modem manufacturer. T-Mobile's system also does not list the PinePhone as a compatible device due to this lack of official VoLTE support. The modem is capable of working on T-Mobile with VoLTE support enabled.&lt;br /&gt;
&lt;br /&gt;
=== Verizon ===&lt;br /&gt;
According to [https://ltefix.com/wp-content/uploads/USA-Major-Carriers-Bands-Frequencies-CA.pdf this page],&lt;br /&gt;
Verizon's primary frequency band for the United States is 13 (700 MHz). Verizon's bands and protocols are summarized on&lt;br /&gt;
[https://www.frequencycheck.com/carriers/verizon-wireless-united-states this page]. According to the same page, Verizon might restrict their network to only approved devices.&lt;br /&gt;
&lt;br /&gt;
Some users reported that they were able to activate their Verizon SIM by using an Verizon-approved burner phone and then inserting the SIM into the PinePhone.&lt;br /&gt;
&lt;br /&gt;
=== Google Fi ===&lt;br /&gt;
Only T-Mobile service works currently, not US Cellular or Sprint.&lt;br /&gt;
The APN is h2g2.&lt;br /&gt;
Information from [https://forum.pine64.org/showthread.php?tid=11675&amp;amp;page=7 the forum].&lt;br /&gt;
&lt;br /&gt;
Bear in mind that initial activation of the SIM card is not possible without an Android phone running Google Apps. &lt;br /&gt;
&lt;br /&gt;
It should also be noted that Google uses a non-standard MMS implementation that is unlikely to be supported on the PinePhone at any point.&lt;br /&gt;
&lt;br /&gt;
== Europe ==&lt;br /&gt;
=== Telekom Germany ===&lt;br /&gt;
With low signal, there may be loud interference noise audible in calls on the receiving end. It has not yet been tested whether or not this problem is carrier specific. An easy fix is extending the modem antenna with aluminum foil (or similar) inside the back cover of the phone.&lt;br /&gt;
&lt;br /&gt;
= Known issues =&lt;br /&gt;
Known issues:&lt;br /&gt;
* The [https://www.frequencycheck.com/models FrequencyCheck model page] does not list either Pine64 or the PinePhone.&lt;br /&gt;
* T-Mobile's system does not list the PinePhone as a compatible device due to the lack of official VoLTE support from the manufacturer, despite the fact that it does work.&lt;br /&gt;
* MMS doesn't currently work in any distribution on the PinePhone by default. This means images and group chats will not work in text messages.&lt;br /&gt;
* Some providers may allow only certain known devices identified by their [https://en.wikipedia.org/wiki/Type_Allocation_Code Type Allocation Code].&lt;br /&gt;
&lt;br /&gt;
= MMS workarounds =&lt;br /&gt;
These scripts allow partial MMS support on a [[PinePhone]]:&lt;br /&gt;
&lt;br /&gt;
* JMMS: [https://git.sr.ht/~amindfv/jmms]&lt;br /&gt;
* silvermms: [https://gitlab.com/5ilver/silvermms]&lt;br /&gt;
* MMS via Matrix with mmmpuppet: [[PinePhone MMS with Matrix]]&lt;br /&gt;
&lt;br /&gt;
There is a Haskel MMS client. MMS can also be manually composed with mmsd on the command line.&lt;br /&gt;
&lt;br /&gt;
= Resources =&lt;br /&gt;
* IMEI - [https://en.wikipedia.org/wiki/International_Mobile_Equipment_Identity International Mobile Equipment Identity]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:PinePhone]]&lt;/div&gt;</summary>
		<author><name>Link Mauve</name></author>
	</entry>
</feed>