首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >不使用OpenMAX的Raspberry Pi解码视频?

不使用OpenMAX的Raspberry Pi解码视频?
EN

Stack Overflow用户
提问于 2013-10-03 01:30:44
回答 2查看 4.2K关注 0票数 17

我正在寻找一个例子,解码视频直接在树莓Pi,不使用OpenMAX。

这就解释了多媒体软件的不同层次:

这里还有一个没有显示的额外层,即"MMAL“层,它(我相信)是OpenMAX的一个Broadcom包装器。(如果不是,这将是一个OpenMAX替代方案,位于内核驱动程序之上)例如,raspivid和raspistill都是使用MMAL编写的。

我想要一个视频解码的例子,其中输入是原始H.264,输出要么是内存中的视频,要么是屏幕上的视频。我想使用VCHIQ直接使用,而不是使用OpenMAX。(主要是出于性能和灵活性的原因)

这个github存储库:https://github.com/raspberrypi/userland/包含上面显示的所有内容的源代码(橙色和绿色框;VCHIQ本身的源代码,VCHIQ之上的OpenMAX IL实现,以及OpenGL和EGL实现,.)。所以从理论上讲,这应该已经足够开始了。问题是如何使用它是非常不明显的,即使一个人非常熟悉OpenMAX和一般的多媒体框架。

例如:传送()似乎是用来向解码器发送视频的函数。但是如何初始化VCHIQ_SERVICE_HANDLE_T类型的第一个参数呢?结果到哪里去,在帧缓冲区中,在结果句柄中,或者.?

可以通过提供使用vchiq的视频解码的工作示例、显示调用序列的API演练(即使不是工作示例)或指向足够多文档的指针来收集编辑赏金。一个有用的例子将得到巨大的额外奖励:)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-02-03 19:03:36

我没有一个有用的示例,但我有一个API演练。有点..。

链接到完整的源代码。

我发现了下面的函数,演示如何调用vchiq_bulk_transmit

代码语言:javascript
运行
复制
int32_t vchi_bulk_queue_transmit(VCHI_SERVICE_HANDLE_T handle,
    void *data_src,
    uint32_t data_size,
    VCHI_FLAGS_T flags,
    void *bulk_handle)
{
    SHIM_SERVICE_T *service = (SHIM_SERVICE_T *)handle;
    ..
    status = vchiq_bulk_transmit(service->handle, data_src,
        data_size, bulk_handle, mode);
    ..
    return vchiq_status_to_vchi(status);
}
EXPORT_SYMBOL(vchi_bulk_queue_transmit);

有一个函数可以创建VCHI_SERVICE_HANDLE_T

代码语言:javascript
运行
复制
int32_t vchi_service_create(VCHI_INSTANCE_T instance_handle,
    SERVICE_CREATION_T *setup,
    VCHI_SERVICE_HANDLE_T *handle)
{
    VCHIQ_INSTANCE_T instance = (VCHIQ_INSTANCE_T)instance_handle;
    SHIM_SERVICE_T *service = service_alloc(instance, setup);

    *handle = (VCHI_SERVICE_HANDLE_T)service;
    ..
    return (service != NULL) ? 0 : -1;
}
EXPORT_SYMBOL(vchi_service_create);

但是您需要一个可以在这里初始化的VCHI_INSTANCE_T

代码语言:javascript
运行
复制
int32_t vchi_initialise(VCHI_INSTANCE_T *instance_handle)
{
    VCHIQ_INSTANCE_T instance;
    VCHIQ_STATUS_T status;

    status = vchiq_initialise(&instance);

    *instance_handle = (VCHI_INSTANCE_T)instance;

    return vchiq_status_to_vchi(status);
}
EXPORT_SYMBOL(vchi_initialise);
票数 2
EN

Stack Overflow用户

发布于 2014-01-11 15:44:18

我认为openmax在多媒体处理方面提供了更多的性能。您可以比较这两种选择的性能,简单地运行gstreamer各自的管道。对于此操作,不需要编程,您可以为此目的使用gst启动。Openmax插件从'omx‘前缀开始。在主CPU没有负载的情况下,omx可以很好地执行编解码操作。h264编码或解码的专有实现是一个非常困难的问题,如果不使用库,您可以花这么多年的时间。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19149441

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档