# Features
Source: [https://docs.qualcomm.com/doc/80-70014-20/topic/features.html](https://docs.qualcomm.com/doc/80-70014-20/topic/features.html)
The Adreno VPU provides various video decoding and encoding features. The following table
lists the features applicable to this platform:
| Use case | Feature | QCS6490 |
| --- | --- | --- |
| Codecs | H.264 (8‑bit decoder) | Yes |
| Codecs | HEVC (8‑bit decoder) | Yes |
| Codecs | HEVC (10‑bit decoder) | Yes |
| Codecs | VP9 (8‑bit decoder) | Yes |
| Codecs | VP9 (10‑bit decoder) | Yes |
| Codecs | H.264 (8‑bit encoder) | Yes |
| Codecs | HEVC (8‑bit encoder) | Yes |
| Features | [B-frame
encode](https://docs.qualcomm.com/doc/80-70014-20/topic/features.html#concept_i4r_c5h_bzb__p_gv4_f4s_q1c_eputla_03-06-24-1242-21-896) | Yes |
| Features | [Encoder
initial QP override](https://docs.qualcomm.com/doc/80-70014-20/topic/features.html#concept_i4r_c5h_bzb__p_k41_y1t_q1c_eputla_03-06-24-1419-9-910) | Yes |
| Features | [Hierarchical-P encode](https://docs.qualcomm.com/doc/80-70014-20/topic/features.html#concept_i4r_c5h_bzb__p_zvc_1bt_q1c_eputla_03-06-24-1419-46-611) | Yes |
| Features | [Slice
encode](https://docs.qualcomm.com/doc/80-70014-20/topic/features.html#concept_i4r_c5h_bzb__p_szx_dbt_q1c_eputla_03-06-24-1420-53-632) | Yes |
| Features | [Intra-refresh](https://docs.qualcomm.com/doc/80-70014-20/topic/features.html#concept_i4r_c5h_bzb__p_wb2_3bt_q1c_eputla_03-06-24-1422-8-48) | Yes |
| Features | [Preprocessing](https://docs.qualcomm.com/doc/80-70014-20/topic/features.html#concept_i4r_c5h_bzb__p_vh4_3bt_q1c_eputla_03-06-24-1422-14-963) | Yes |
| Features | [Rate
control](https://docs.qualcomm.com/doc/80-70014-20/topic/features.html#concept_i4r_c5h_bzb__p_tf5_gbt_q1c_eputla_03-06-24-1421-43-813) | Yes |
| Features | [Long
term reference (LTR)](https://docs.qualcomm.com/doc/80-70014-20/topic/features.html#concept_i4r_c5h_bzb__p_mpl_nbt_q1c_eputla_03-06-24-1423-41-14) | Yes |
| Features | [Dynamic
properties](https://docs.qualcomm.com/doc/80-70014-20/topic/features.html#concept_i4r_c5h_bzb__p_ykm_qbt_q1c_eputla_03-06-24-1424-34-300) | Yes |
| Concurrency | Multi-instance support | Yes |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
## Feature descriptions
The supported decode and encode features are described here.
**B-frame encode**
B-Frame is a type of frame that uses both earlier and future frames as data reference
to get the highest amount of data compression. The Adreno VPU can encode frames with
adaptive B type to get the highest possible compression without compromising on the
video quality.
**Encoder initial QP override**
Video encoding involves mapping signal levels to discrete values that are easily
compressed. Quantization is a lossy process, and the levels of quantization govern
the quality versus compression. Encoders typically start with a default Quantization
Parameter (QP) at the beginning. Based on the configured bit rate and scene
complexity, encoders try to arrive at the right QP value by continuously monitoring
the complexity and redundancy across frames. It may take a few seconds for the
encoder to reach a steady state and predict the right QP value that matches the
target bit rate (also known as rate convergence).
**Hierarchical-P encode**
With the Hierarchical-P (Hier-P) feature, the encoder organizes the frames into
multiple layers, with frames of one layer referencing only frames from the lower
layers as shown in the following figure. The lowest layer, also known as layer 0 or
the base layer, is the only exception.
Figure : Hier-P layer encoding pattern

In the preceding figure, the TL-0 represents the base layer, and the remaining layers
represent the enhancement layers. Hier-P improves error resilience and temporal
scalability. The Hier-P feature is useful for video telephony (VT) or video
conferencing applications that involve channel errors. Hier-P allows you to control
error propagation by selectively dropping the enhancement layers.
**Slice encode**
Encoders can compress a frame with an independently decodable Group-of-Blocks (GOBs),
also known as slices. Each slice is independently decodable, and are intended to be
units of recovery if there is a data loss or corruption. The following are the
advantages of introducing slices in an encoded frame:
- A corrupt slice can be ignored and skipped to a next slice, thus restricting
the corruption to a part of the frame instead of the entire frame.
- Slices can be sized to fit within a network packet to help with
transmission.
- Erroneous slices can be retransmitted instead of sending the whole
frame.
- Applications can use slices to reduce latency in real-time communication.
Slices can be transmitted and decoded in parallel without having to wait for
the entire frame to be encoded.
Slices also work as resynchronization markers since the decoders can resume from the
next slice (marker) when there are bit errors. On the Qualcomm Linux platform, the
H.264 and HEVC encoders support slicing. A slice boundary can be specified as the
number of bits per slice or the number of macroblocks per slice.
**Intra refresh**
The intra-refresh feature helps in reducing the channel loss in streaming and casting
applications that favor a constant bit rate. The Adreno VPU supports random
intra-refresh mode.
**Video encoder preprocessing**
In cases where a YUV frame must be rotated or flipped, applications can use the
Adreno VPU to perform the rotation or flip operations before encoding the YUV frame.
The rotation or flip operation is performed by the Adreno VPU without consuming
extra power.
**Rate control**
The following table lists the supported rate control algorithms:
| Rate control mode | Description |
| --- | --- |
| Variable bit rate (VBR) |
- Minimizes the frame-by-frame video quality
fluctuation.
- Camcorder and Wi-Fi display are the example use
cases
|
| Constant bit rate (CBR) |
- Reduces bit rate fluctuation
- Used for real-time communication with channel bandwidth
limitation
- Videotelephony and streaming are the example use
cases
|
| Maximum bit rate (MBR) |
- Limits the bit rate while maintaining flexibility and
may bounce up and down within the set target
- Bit rate increases when the activity in a scene
increases within a maximum limit
- Integrated with a smart bit allocation (SBA) feature, to
achieve better quality at a lower bit rate
|
**Long Term Reference (LTR) support**
Video compression works by eliminating redundancies within the frame (intra-frame)
and between the frames (inter-frame). Previously, the encoded frames that used to
serve as a basis to derive future frames were known as reference frames.
Following are the two types of reference frames that allow advanced encoding
applications to control how the reference frames are stored and referred:
- Short Term Reference (STR): Recent frames are maintained in a reference
buffer list from the newest to the oldest. The encoder automatically manages
frames using STRs for reference and deletes them from a stored list when
they are no longer used.
- Long Term Reference (LTR): Frames that the application can save, use, and
remove. The LTR frames are used to improve quality and ensure error
resiliency in video communication. The maximum number of frames that can be
marked with LTR frames depends on the device capability.
LTR frames are useful in error-prone channels. Referring to LTR in error-prone
channels reduces the chance of drift error due to channel losses. The receiver must
confirm that the LTR is received successfully and can request a new LTR when an
error occurs. The network protocols have checksums that can confirm this, along with
the decoder corruption flags. New LTR frames are generated from the sender until the
receiver confirms that a successful LTR is received.
LTR frames are also useful in videos with scene changes where an LTR with the
previous scene can be preserved. If that scene comes back, then the LTR can be used
effectively.
At the start of the new Group of pictures (GOP), the encoder automatically fills the
LTR slots, and the first slot (slot# 0) is filled with an IDR frame. However, an
application can explicitly send an LTR mark request to mark the LTR frames in the
appropriate slots. The following image shows the flow diagram for LTR usage, and how
LTR frames can be marked and used on an H.264 or HEVC encoder:
Figure : Long Term Reference encoding

**Dynamic encoder properties**
The Adreno VPU encoder supports dynamic change of properties like bit rate, frame
rate, and sync frame. This support enables the application to seamlessly change the
properties and helps in improved visual experience, video data adjusting to network
conditions, and minimize the loss of data during transmission.
## QCS6490 video capabilities and features
The Adreno VPU on the QCS6490 is a sixth-generation Ultra-HD video processing unit
that comes with the following capabilities:
| Feature | Capability |
| --- | --- |
| Video decode | Up to 4096 × 2160 at 60 fps for H.264/HEVC/VP9 |
| Video encode | Up to 4096 × 2160 at 30 fps for H.264/HEVC |
| Video concurrency |
- 1920 × 1088 at 60 fps decode and 1920 × 1088 at 60 fps
encode
- 3840 × 2160 at 30 fps decode and 1920 × 1088 at 30 fps
encode
- 4096 × 2160 at 30 fps encode and 1280 × 720 at 30 fps
encode
|
| High frame rate capture | 1280 × 720 at 480 fps or 1920 × 1088 at 240 fps |
| Maximum macro blocks per second | 2088960
- You can calculate the maximum macroblocks per second
using the formula: (aligned width × aligned height ×
fps)/(macroblock size). For example,
(4096 × 2176 × 60)/256 = 2088960
|
| 10-bit playback | HEVC and VP9 |
Table : Adreno VPU decoder capabilities
| Decoder standard | Supported profile and level | Minimum/Maximum resolution, Maximum frame rate and
bit rate | Maximum supported resolution, frame rate, and bit
rate | Limitations/tools not supported |
| :---: | :---: | :---: | :---: | :---: |
| HEVC |
- Main profile 8‑bit up to level 5.1
- Main profile 10‑bit, up to level 5.1, HLG schemes
|
Minimum resolution: 96 × 96
Maximum resolution: 4096 × 2160 or 2160 × 4096
Maximum frame rate: 480 fps
- Maximum bit rate: 100 Mbps
|
- 1280 × 720 at 480 fps, 100 Mbps
- 1920 × 1088 at 240 fps, 100 Mbps
- 3840 × 2160 at 60 fps, 100 Mbps
- 4096 × 2160 at 60 fps, 100 Mbps
|
- Maximum 128 slices per frame
- Individual slice-based decoding
|
| H.264 | Constrained baseline, baseline, main, high, constrained high
profiles; up to level 5.2 |
- Minimum resolution: 96 × 96
- Maximum resolution: 4096 × 2160 or 2160 × 4096
- Maximum frame rate: 480 fps
- Maximum bit rate: 100 Mbps
|
- 1280 × 720 at 480 fps, 100 Mbps
- 1920 × 1088 at 240 fps, 100 Mbps
- 3840 × 2160 at 60 fps, 100 Mbps
- 4096 × 2160 at 60 fps, 100 Mbps
|
- Flexible macroblock order (FMO)
- Arbitrary slice ordering (ASO)
- Redundant slices (RS)
- Data partition
- Maximum 10 slices per frame
- Interlaced content is not supported
|
| VP9 |
- Profile 0; 8‑bit, up to level 5.1
- Profile 2; 10‑bit, up to level 5.1 HLG/PQ schemes
|
- Minimum resolution: 96 × 96
- Maximum resolution: 4096 × 2160 or 2160 × 4096
- Maximum frame rate: 480 fps
- Maximum bit rate: 100 Mbps
|
- 1280 × 720 at 480 fps, 100 Mbps
- 1920 × 1088 at 240 fps, 100 Mbps
- 3840 × 2160 at 60 fps, 100 Mbps
- 4096 × 2160 at 60 fps, 100 Mbps
| Profile 2; 12‑bit is not supported |
Table : Adreno VPU encoder capabilities
| Encoder standard | Supported profile and level and RC modes | Minimum/Maximum resolution, maximum frame rate,
and maximum bit rate | Supported resolution, frame rate, bit rate | Limitations/tools not supported |
| :---: | :---: | :---: | :---: | :---: |
| H.264 |
- Constrained baseline, baseline, main, high, constrained high
profiles; up to level 5
- VBR, CBR, MBR
|
- Minimum resolution: 128 × 128
- Maximum resolution: 4096 × 2160 or 2160 × 4096
- Maximum frame rate: 240 fps
- Maximum bit rate: 100 Mbps
|
- 1280 × 720 at 240 fps, 100 Mbps
- 1920 × 1088 at 120 fps, 100 Mbps
- 3840 × 2160 at 30 fps, 100 Mbps
- 4096 × 2160 at 30 fps, 100 Mbps
| None |
| HEVC |
- Main profile 8‑bit, up to level 5.0
- Main/High tier VBR, CBR, MBR
|
- Minimum resolution: 128 × 128
- Maximum resolution: 4096 × 2160 or 2160 × 4096
- Maximum frame rate: 240 fps
- Maximum bit rate: 100 Mbps
|
- 1280 × 720 at 240 fps, 100 Mbps
- 1920 × 1088 at 120 fps, 100 Mbps
- 3840 × 2160 at 30 fps, 100 Mbps
- 4096 × 2160 at30 fps, 100 Mbps
| Vertical tiling is only enabled for frame width ≥
960 |
Table : Adreno VPU feature description
| Feature | Description | Codecs | Remarks |
| :---: | :---: | :---: | :---: |
| Encoder input color formats | NV12 and QC08C | H.264 and HEVC | – |
| Decoder output color formats | NV12, QC08C, and QC10C | H.264, HEVC, and VP9 | – |
| Rotation | Supports 90, 180, and 270‑degree rotation before encoding the
frame | H.264 and HEVC | Supports static rotation only |
| Flip | Supports horizontal and vertical flip before encoding the
frame | H.264 and HEVC | Supports static and dynamic flip |
| B-frame encode | Up to 1920 × 1088 at 60 fps encode | H.264 and HEVC | The maximum number of B-frames supported between two P-frames
is one |
| Hierarchical-P encode | Up to 5 layers | H.264 and HEVC | – |
| Initial QP override | Supported for I, P and B-frames | H.264 and HEVC | – |
| Slice encode | Yes | H.264 and HEVC | The slice boundary is supported based on the number of bits
per slice or the number of macroblocks per slice |
| Intra refresh | Random refresh mode | H.264 and HEVC |
- Supported only in 8‑bit encoding
- Supported only in the CBR RC mode
|
| Rate control | CBR, VBR, and MBR | H.264 and HEVC | – |
| Long term reference (LTR) | Two frames | H.264 and HEVC | Supports only in the CBR RC mode |
| Dynamic properties for encoder | Sync frame, bit rate, and fps | H.264 and HEVC | – |
| Multichannel support | Up to 16 instances | H.264, HEVC, and VP9 | Subject to maximum macroblock capability |
Last Published: Jul 12, 2024
[Previous Topic
Getting started](https://docs.qualcomm.com/bundle/publicresource/80-70014-20/topics/samples.md) [Next Topic
Architecture](https://docs.qualcomm.com/bundle/publicresource/80-70014-20/topics/architecture.md)