This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

Limited functionality of OpenMAX H264 encoder

I would like to implement an application which can encode H264 with Region of Interest and unregistered user defined SEI messages to run on a DM8148 platform.

Having read the document "H264_Encoder_HDVICP2_UserGuide.pdf" It appears that the HDVICP2 processor of the DM8148 is capable of these features, however I am having trouble working out how to implement them.

It appears as though I must use the OpenMAX components to encode video with the DM8148 and ti's OpenMAX H264 encoder component seems to be very limited in functionality.

This is really perplexing, please tell me there is another way; for instance, why can I not program against the XDM interface as described in the aforementioned user guide?

  • Hi Robert,

    You should be able to modify both static and dynamic parameters of encoder for your setting using indicies 

    OMX_TI_IndexParamVideoStaticParams and OMX_TI_IndexConfigVideoDynamicParams.

    Please refer http://processors.wiki.ti.com/index.php/OMX_VENC for the reference.

    Thanks

    Ram

  • Thanks for the reply.

    It would be possible to enable ROI with the dynamic parameters and SEI with the static parameters, but I can't see how it is possible to pass the actual ROI and SEI data to to encoder for each frame.

    Regarding user defined unregistered SEI the encoder documentation states: "The way to pass meta data to encode is through inBufs to the encoder during process call."

    Regarding ROI: "IH264ENC_RoiInput parameter is added in IH264ENC_InArgs to enable the application to pass ROI-related information to the encoder.", Again, additional information provided during the process call.

    I guess that the OMX component would need to define additional ports in order to accept this data?

  • I am still waiting for a reply to this.

  • I'm still waiting for a solution to this problem.

    Also I would like to use the sub frame output mode for the H264 encoder since I am expending a lot of cpu cycles parsing the frames for NAL unit's for RTP streaming. This also appears to be unsupported.

    Is there really no option other than OMX? and if so, why is the OMX implementation so limited?

    We purchase the DM8148 SOC which has an HDVICP2 advertised as being capable of such features, but in reality it only supports a very limited set of features.

  • Hi Robert,

    It is possible to send ROI inputs through EmptyThisBuffer Call from iLClient application with proper nOffset to indicate where actual input buffer starts, so that omx_venc interprets this and sets ROI inputs in InArgs. This requires some changes in OMX component.

    Similarly configuring slice based encoding will be simple but outputting slices whenever they are are generated will be very complex in OMX. This requires allocation buffer for each output slice and sending the same via FillThisBuffer and encoder getting this from encoder's callback getBufferFxn.

    and encoder component outputting each slice via FillThisBufferdone from the Encoder callback putDataFxn.

    TI is not planning any new features on EZSDK.

    DVR-RDK is another software stack with non-OMX framework which supports ROI but slice outputting is not supported here also.

    Thanks

    Ram