在GStreamer for Android中启用OMX支持

kh212irz  于 2022-11-20  发布在  Android
关注(0)|答案(1)|浏览(362)

我目前正试图挂钩到一个HW H.264解码器上的Oculus任务2(Adreno 650)。
该平台仅支持一个硬件解码器OMX.qcom.video.decoder.avc
视频解码管道是使用GStreamer创建的,当前如下所示:rtspsrc location=rtsp://192.168.1.239:8554/left ! application/x-rtp,encoding-name=H264,payload=96 ! rtph264depay ! decodebin ! videoconvert ! video/x-raw,width=1920,height=1080,format=RGBA ! appsink emit-signals=true name=wallesink sync=false
decodebin bin应自动使用可用的OMX解码器,但GStreamer库的构建不支持该解码器。
我目前正在使用GStreamer的这个版本。
所以我的问题很简单:What is the easiest way to add support for said OMX decoder?
我尝试过用Meson从源代码构建,但在启用OMX的情况下无法完成。
是否有任何其他版本的Android有这个解码器捆绑?

7cwmlq89

7cwmlq891#

这些编解码器预建在android二进制文件中,从gstreamer主页https://gstreamer.freedesktop.org/data/pkg/android/分发。
OMX解码器至少在gstreamer 1.18.6中可用,当使用decodebin3节点时,它知道如何在quest1和quest2上选择硬件解码器。
然而,在1.20.4中,自动选择并不起作用,必须为omx解码器设置更高的排名,使decodebin选择它们。
https://gstreamer.freedesktop.org/documentation/tutorials/playback/hardware-accelerated-video-decoding.html?gi-language=c
在这里我找到了一个在github中的C语言例子: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;
}

我还注意到,对于1.20.4,输入HEVC流应该使用main-10配置文件生成,因为出于某种原因,main配置文件在gstreamer 1.18.6之后不再列在amcviddec-omxqcomvideodecoderhevc功能中

相关问题