Those codecs are prebuilt in the android binaries, distributed from gstreamer home page https://gstreamer.freedesktop.org/data/pkg/android/
OMX decoder is available at least in gstreamer 1.18.6 and when using decodebin3 node it knew how to choose the HW decoder on quest1 and quest2.
However with 1.20.4 automatic selecting didn't work out-of-box and one has to set higher ranking for omx decoders to make decodebin to select them.
https://gstreamer.freedesktop.org/documentation/tutorials/playback/hardware-accelerated-video-decoding.html?gi-language=c
Here I did find one C example how to do it from github:
https://github.com/github0925/test/blob/0a919ce6f278a8fc5c7d203aaa220b3e703bb6b1/source/vendor/vpu/gstreamer_middleware/player/gstreamer_middleware_decode.c#L7
int change_omx_decode_element_rank()
{
GstRegistry *registry = gst_registry_get();
if (!registry) {
ERROR("Failed to get gstreamer registry");
return -1;
}
char *omx_decode_element_list[] = {
"amcviddec-omxqcomvideodecoderh263",
"amcviddec-omxqcomvideodecoderavc",
"amcviddec-omxqcomvideodecoderhevc",
"amcviddec-omxqcomvideodecodermpeg2",
"amcviddec-omxqcomvideodecodermpeg4",
"amcviddec-omxqcomvideodecodervp8",
"amcviddec-omxqcomvideodecodervp9",
"amcvidenc-omxqcomvideoencoderavc",
"amcvidenc-omxqcomvideoencoderh263",
"amcvidenc-omxqcomvideoencoderhevc",
"amcvidenc-omxqcomvideoencodermpeg4",
"amcvidenc-omxqcomvideoencodervp8"
};
for (int i = 0; i < ARRAYSIZE(omx_decode_element_list); i++) {
GstPluginFeature *feature =
gst_registry_lookup_feature(registry, omx_decode_element_list[i]);
if (!feature) {
WARN("Featuer does not exist: %s", omx_decode_element_list[i]);
continue;
}
gst_plugin_feature_set_rank(feature, GST_RANK_PRIMARY + 1);
gst_registry_add_feature(registry, feature);
gst_object_unref(feature);
}
return 0;
}
Also I noticed that with 1.20.4 incoming HEVC stream should be generated with main-10 profile, since for some reason, main profile is not listed in amcviddec-omxqcomvideodecoderhevc capabilities anymore after gstreamer 1.18.6