androidvideoh.264openmax

Significance of OMX_IndexParamVideoAvc for an OMX Video Decoder


I have a query on the significance of OMX_IndexParamVideoAvc for an OMX video decoder. Specifically, my query is: Should an OMX Video Decoder support the index OMX_IndexParamVideoAvc as part of get and set functionalities?

Background:

From my understanding, this index is more useful from a video encoder perspective, as this is employed by an OMXIL Client to query the underlying component on the existing support and further configure the encoder as the client's needs.

From a specification perspective, I observe that the specification does indicate the support for index OMX_IndexParamVideoAvc on VPB+0 for a video decoder as in page 359 of the specification. In this section, only profile and level are populated.

Potentially I feel that this index could be employed for OMX_GetParameter to retrieve the max. profile and level supported by the component. However, the same could also be retrieved from OMX_IndexParamVideoProfileLevelQuerySupported.

Hence,my main doubts are:

  1. Should an OMX video decoder support the index OMX_IndexParamVideoAvc?

  2. If this index is supported, then what should be the default values when an OMXIL client queries the same, say in LOADED state?

  3. The point where this index could logically be filled only after the component is in EXECUTING state and the first buffer with OMX_BUFFERFLAG_CODECONFIG has been decoded. Until this state is reached, should the decoder populate only max. profile and level fields and set other fields to zero?

  4. Is there a practical scenario where this index is queried from an OMX video decoder? A quick search on android shows a predominant support for this index from encoders. Even in AOSP sources, the support for this index from Exynos implementations is for profile and level. Hence, I am not particularly convinced of the intended use of this index for OMX video decoders.

Common Implementations:

When I tried to search for common implementations, I found some interesting data. TI and Broadcomm encoders support this index (in some cases partially) as shown in OMX_VENC and omx.broadcomm.video_encode. However, a similar search for decoders as in OMX_VDEC and omx.broadcommn.video_decode showed that there is no apparent support for this index in decoders. The only exception to this understanding is found in samsung's aries implementation as shown in decoder code here.

Any pointers/comments/suggestions would be highly helpful.Many thanks in advance.


Solution

  • I think that you are right it should be used for enc component setup.

    OMX_IndexParamVideoProfileLevelQuerySupported used like here along with OMX_IndexParamVideoProfileLevelCurrent covers the case and purpose of OMX_IndexParamVideoAvc is to get/set the rest of OMX_VIDEO_PARAM_AVCTYPE

    I think that providing max supported values via OMX_IndexParamVideoAvc might be missleading.