TI MM H.264 Decoder User Guide
Introduction

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