GStreamer 1.0 Codec Engine Plugin

From RidgeRun Developer Wiki


Overview of GStreamer 1.0 Codec Engine Plugin

Previous plugin

Documentation

The Doxygen documentation can be found at GStreamer 1.0 Codec Engine Plugin Design Documentation.

gst-inspect output

~ # gst-inspect-1.0 ce_h264enc
Factory Details:
  Rank                     primary (256)
  Long-name                CE H.264 video encoder
  Klass                    Codec/Encoder/Video
  Description              Encode video in H.264 format
  Author                   Melissa Montero <melissa.montero@ridgerun.com>

Plugin Details:
  Name                     ceplugin
  Description              GStreamer Plugin for codecs based on CodecEngine API for Texas Instruments SoC
  Filename                 /usr/lib/gstreamer-1.0/libgstce.so
  Version                  0.0
  Source module            gst-ce-plugins
  Binary package           gst-ce-plugin
  Origin URL               RidgeRun

GObject
 +----GInitiallyUnowned
       +----GstObject
             +----GstElement
                   +----GstVideoEncoder
                         +----GstCeVidEnc
                               +----GstCeH264Enc

Implemented Interfaces:
  GstPreset

Pad Templates:
  SRC template: 'src'
    Availability: Always
    Capabilities:
      video/x-h264
              framerate: [ 0/1, 120/1 ]
                  width: [ 128, 4080 ]
                 height: [ 96, 4096 ]
          stream-format: { (string)avc, (string)byte-stream }

  SINK template: 'sink'
    Availability: Always
    Capabilities:
      video/x-raw
                 format: NV12
              framerate: [ 0/1, 120/1 ]
                  width: [ 128, 4080 ]
                 height: [ 96, 4096 ]


Element Flags:
  no flags set

Element Implementation:
  Has change_state() function: gst_video_encoder_change_state

Element has no clocking capabilities.
Element has no URI handling capabilities.

Pads:
  SINK: 'sink'
    Pad Template: 'sink'
  SRC: 'src'
    Pad Template: 'src'

Element Properties:
  name                : The name of the object
                        flags: readable, writable
                        String. Default: "ceh264enc0"
  parent              : The parent of the object
                        flags: readable, writable
                        Object of type "GstObject"
  rate-control        : Encoding rate control
                        flags: readable, writable
                        Enum "GstCeVidEncRate" Default: 1, "CBR"
                           (1): CBR              - Constant Bit Rate, for video conferencing
                           (2): VBR              - Variable Bit Rate, for storage
                           (3): Two Pass         - Two pass rate, for non real-time applications
                           (4): None             - No Rate Control is used
                           (5): User             - User defined on algorithm specific properties
  encoding-preset     : Encoding preset
                        flags: readable, writable
                        Enum "GstCeVidEncPreset" Default: 2, "speed"
                           (1): quality          - High quality
                           (2): speed            - High speed, for storage
                           (3): user             - User defined on algorithm specific properties
  max-bitrate         : Maximum bit rate to be supported in bits per second
                        flags: readable, writable
                        Integer. Range: 1000 - 50000000 Default: 6000000 
  target-bitrate      : Target bit rate in bits per second, should be <= than the maxbitrate
                        flags: readable, writable
                        Integer. Range: 1000 - 20000000 Default: 6000000 
  intraframe-interval : Interval between two consecutive intra frames
                        flags: readable, writable
                        Integer. Range: 0 - 2147483647 Default: 30 
  force-frame         : Force next frame to be encoded as a specific type
                        flags: readable, writable
                        Enum "GstCeVidEncForce" Default: -1, "na"
                           (-1): na               - No forcing of any specific frame type for the frame
                           (0): i-frame          - Force the frame to be encoded as I frame
                           (3): idr-frame        - Force the frame to be encoded as an IDR frame
  num-out-buffers     : Number of buffers to be used in the output buffer pool
                        flags: readable, writable
                        Integer. Range: 3 - 2147483647 Default: 3 
  min-size-percentage : Define the minimum size acceptable for an output buffer,as a percentage of the input buffer size recomended by the encoder.The encoder will use the defined smaller buffer when there is not enough free memory. Only set this property to less than 100 if you can ensure the encoder will compress the data enough to fit in the smaller buffer and you don't want to drop buffers
                        flags: readable, writable
                        Integer. Range: 10 - 100 Default: 100 
  fix-timestamp       : Set if the buffers timestamp should be changed 
to follow pipeline framerate. This property ignores input buffer timestamp
                        flags: readable, writable
                        Boolean. Default: false
  bytestream          : Generate h264 NAL unit stream instead of 'packetized' stream (no codec_data is generated)
                        flags: readable, writable
                        Boolean. Default: false
  headers             : Include on the stream the SPS/PPS headers
                        flags: readable, writable
                        Boolean. Default: false
  single-nalu         : Buffers contains a single NALU
                        flags: readable, writable
                        Boolean. Default: false
  profile             : Profile identification for the encoder
                        flags: readable, writable
                        Enum "GstCeH264EncProfile" Default: 100, "high"
                           (66): base             - Base line
                           (77): main             - Main profile
                           (100): high             - High profile
  level               : Level identification for the encoder
                        flags: readable, writable
                        Enum "GstCeH264EncLevel" Default: 40, "4.0"
                           (10): 1.0              - Level 1.0
                           (9): 1.b              - Level 1.b
                           (11): 1.1              - Level 1.1
                           (12): 1.2              - Level 1.2
                           (13): 1.3              - Level 1.3
                           (20): 2.0              - Level 2.0
                           (21): 2.1              - Level 2.1
                           (22): 2.2              - Level 2.2
                           (30): 3.0              - Level 3.0
                           (31): 3.1              - Level 3.1
                           (32): 3.2              - Level 3.2
                           (40): 4.0              - Level 4.0
                           (41): 4.1              - Level 4.1
                           (42): 4.2              - Level 4.2
                           (50): 5.0              - Level 5.0
                           (51): 5.1              - Level 5.1
  entropy             : Flag for Entropy Coding Mode
                        flags: readable, writable
                        Enum "GstCeH264EncEntropy" Default: 1, "cabac"
                           (0): cavlc            - CAVLC
                           (1): cabac            - CABAC
  t8x8intra           : Enable 8x8 Transform for I Frame (only for High Profile)
                        flags: readable, writable
                        Boolean. Default: true
  t8x8inter           : Enable 8x8 Transform for P Frame (only for High Profile)
                        flags: readable, writable
                        Boolean. Default: false
  encquality          : Encoder quality setting
                        flags: readable, writable
                        Enum "GstCeVidEncQuality" Default: 2, "speed"
                           (0): backward         - version 1.1, backward compatible mode
                           (1): quality          - High quality mode
                           (2): speed            - High speed mode
  enabletcm           : When encquality is 0, this flag controls if TCM memory should be used (otherwise is ignored and default to yes)
                        flags: readable, writable
                        Boolean. Default: false
  ddrbuf              : Use DDR buffers instead of IMCOP buffers
                        flags: readable, writable
                        Boolean. Default: false
  ntemplayers         : Number of temporal Layers for SVC
                        flags: readable, writable
                        Enum "GstCeH264EncLayers" Default: 0, "one"
                           (0): one              - One layer (Stream with frame rate: F)
                           (1): two              - Two layers (Stream with frame rate: F, F/2)
                           (2): three            - Three layers (Stream with frame rate: F, F/2, F/8)
                           (255): three            - all P refer to previous I or IDR frame (Stream with frame rate: F)
  svcsyntaxen         : Control for SVC syntax and DPB management
                        flags: readable, writable
                        Enum "GstCeH264EncSeqSvcSyntax" Default: 0, "sw"
                           (0): sw               - SVC disabled sliding window enabled
                           (1): svc-sw           - SVC enabled sliding window enabled
                           (2): mmco             - SVC disabled MMCO enabled
                           (3): svc-mmco         - SVC enabled MMCO enabled
  seqscaling          : Use of sequence scaling matrix
                        flags: readable, writable
                        Enum "GstCeH264EncSeqScaling" Default: 1, "auto"
                           (0): disable          - Disable
                           (1): auto             - Auto
                           (2): low              - Low
                           (3): moderate         - Moderate
  qpintra             : Quantization Parameter (QP) for I frames (only valid when rate control is disabled or is fixed QP)
                        flags: readable, writable
                        Integer. Range: 1 - 51 Default: 28 
  qpinter             : Quantization Parameter (QP) for P frame (only valid when rate control is disabled or is fixed QP)
                        flags: readable, writable
                        Integer. Range: 1 - 41 Default: 28 
  rcalgo              : Rate Control Algorithm (requires ratecontrol set to 5)
                        flags: readable, writable
                        Enum "GstCeH264EncRCAlgo" Default: 1, "vbr"
                           (0): cbr              - CBR
                           (1): vbr              - VBR
                           (2): fixedqp          - Fixed QP
                           (3): cvbr             - CVBR
                           (4): rc1              - RC1
                           (5): cbr1             - CBR1
                           (6): vbr1             - VBR1
  airrate             : Adaptive intra refresh. This indicates the maximum number of MBs(per frame) that can be refreshed using AIR.
                        flags: readable, writable
                        Integer. Range: 0 - 2147483647 Default: 0 
  idrinterval         : Interval between two consecutive IDR frames
                        flags: readable, writable
                        Integer. Range: 0 - 2147483647 Default: 0 
  interlace           : Enable/Disable interlace encoding
                        flags: readable, writable
                        Boolean. Default: false
  interlace-mode      : Control the reference picture selection in case of interlaced encoding
                        flags: readable, writable
                        Enum "GstCeH264EncInterlaceMode" Default: 0, "arf"
                           (0): arf              - Adaptive reference field
                           (1): spf              - Same parity field
                           (2): mrcf             - Most recent coded field

Supported hardware

Texas Instruments processors that support the Codec Engine API are of interesting.

Processor Status
DM365 Supported
DM368 Supported
DMVA1 Supported
DMVA2 Supported
DM3730 Not started
OMAP3 Not started
DM6446 Not started

Plugin status

Functionality Element name Owner Status
H.264 encode ce_h264enc Melissa Done
AAC encode ce_aacenc Melissa Done
MPEG4 encode ce_mpeg4enc Melissa Done
MJPEG/JPEG encode ce_jpegenc Carlos Done
MP3 encode ce_mp3enc Community Not started
Resizer ??? Community Not started
Dual encoder ??? RidgeRun SDK add-on
Dual resizer dualresizer Carlos SDK add-on
H264 decode ce_h264dec Community Not assigned
JPEG decode ce_jpegdec Community Not assigned
MPEG4 decode ce_mpeg4dec Community Not assigned
AAC decode ce_aacdec Community Not assigned

Community

Building

The GStreamer 1.0 Codec Engine plugin has build dependencies on several GStreamer packages and on TI Codec Engine which is part of the DVSDK. In addition, the processor is an ARM, so the plugin is built using a cross compiler. For all of these reasons, it is easiest to build the plugin using the RidgeRun evaluation SDK.

GStreamer core compatibility

Currently, the GStreamer 1.0 Codec Engine plugin is being build with the following GStreamer and related packages:

Package Version
GStreamer 1.0.5
Base plugin 1.0.5
Good plugin 1.0.5
Bad plugin 1.0.5
av lib 1.0.5

Example pipelines

There are a lot of tested example pipelines available.


RidgeRun Resources

Quick Start Client Engagement Process RidgeRun Blog Homepage
Technical and Sales Support RidgeRun Online Store RidgeRun Videos Contact Us
RidgeRun.ai: Artificial Intelligence | Generative AI | Machine Learning

Contact Us

Visit our Main Website for the RidgeRun Products and Online Store. RidgeRun Engineering informations are available in RidgeRun Professional Services, RidgeRun Subscription Model and Client Engagement Process wiki pages. Please email to support@ridgerun.com for technical questions and contactus@ridgerun.com for other queries. Contact details for sponsoring the RidgeRun GStreamer projects are available in Sponsor Projects page.