Supported Features
TI’s embedded processors such as J721E having Imagination Technologies D5520MP2 (DECODER) for accelerating multimedia decode. "TI MM H.264 Video Decoder" supports:
- H.264 decoding up to 1080p (1920x1080) resolution
- NV12 (two plane) format, 8-bit content support
- Frame based decoding
- I-Frame only decoding
- I & P Frame decoding (with one reference frame)
- Two channel decoding up to 1080p (1920x1080) resolution at 30fps
- In order to support more than two channels, the carveout memory for video codecs needs to be increased from the current 64MB
- Please see SDK Documentation on the SDK memory map for more information on how to increase the carveout.
- Support fully H.264 spec compliant streams; there is no error recovery support.
Non-Supported Features
"TI MM H.264 Video Decoder" does not support:
- I & P Frame video streams with more than 1 reference frame
- B-Frame decoding
- Non NV12 pixel formats
- 10-bit video content
- Error recovery for crashes due to non-compliant streams
- Greater than two channels decoding
Prerequisites
Checking Video Stream Compliance
Make sure the video stream is fully compliant to H.264 specification. Recommended steps:
- Please validate the stream by decoding using ffmpeg or JM decoder and try playing the bitstream using the ffplay utility provided by ffmpeg.
- OR Elecard StreamEye can be used as a stream analyzer for H.264 streams.
- For generating custom video streams, please use any version of JM encoder to generate *.h264/*.264 files.
Transcode Video Stream
If the required video stream is not compliant to H.264 specification, we recommend transcoding the video stream to meet the specification. Recommended steps:
- For any container stream, this will show the stream info: /code ffmpeg -find_stream_info -i input.mkv -o output.h264 /endcode
- Here "input.mkv" is just an example, any format should work: *.3gp, *.flv, *.mkv, *.mp4, ...
- When the above command is executed, the log will display if your stream is currently H.264 or not. The key thing to check in the log is "Stream #0:0(und): Video.********
- If it has H.264, just copying the video steram out of this file should be fine. ex: /code ffmpeg -i input.mkv -vcodec copy -acodec copy output.mp4 ffmpeg -i input.mp4 -c:v copy -bsf:v h264_mp4toannexb -an output.h264 /endcode
- If it doesn't contain H.264 video, then you cannot just "copy" the video stream out of the file and expect to have a valid H.264 file. If ffmpeg was compiled to support libx264, you can transcode from MP4V to H.264: /code ffmpeg -i file_example_MP4_480_1_5MG.mkv -an -vcodec libx264 -crf 23 output.h264 /endcode
- Once the output.h264 is created, please verify it in JM-Decoder (standard ref decoder) as mentioned above
Directory Structure
The main modules in Video Codec are listed below
Video Codec Modules | Description |
concerto | Makefile build infrastructure |
docs | User documentation. |
examples | Application/Demo and Additional utility functions. |
examples/apps/bios_cfg | Application bios configuration for TI-RTOS on R5F and A72. |
examples/apps/common | Application common source code for TI-RTOS on R5F, and A72. |
examples/apps/decoder | Application/Demo sample application for single and multichannel usecase. |
examples/apps/mcu2_0 | R5F configuration. |
examples/apps/mpu1 | A72 configuration. |
examples/utils | Additional utility functions used. |
lib | MM Driver fw library. |
makerules | Build utility. |
out | Build/Generated files and executables. |
ti-img-encode-decode | MM Decoder Driver source code and firmware binary. |
tools | Scripts used to load and run the executables on CCS. |
Known Limitations
- QCIF resolution decoding not working
- memcpy on decoded output buffer present inside OpenVx Decoder Node
- Only two simultaneous channels are supported with the current memory carveout setup for Video Codecs