gpt4 book ai didi

c - 不使用 OpenMAX 在 Raspberry Pi 中解码视频?

转载 作者:太空狗 更新时间:2023-10-29 16:31:20 26 4
gpt4 key购买 nike

我正在寻找一个直接在 Raspberry Pi 上解码视频的示例,而不使用 OpenMAX。

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

Raspberry Pi Architecture

还有一个此处未显示的附加层,“MMAL”层(我相信)是 OpenMAX 周围的 Broadcom 包装器。 (如果不是,它将是一个 OpenMAX 替代方案,位于内核驱动程序之上)例如 raspivid 和 raspistill 是使用 MMAL 编写的。

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

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

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

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

最佳答案

我没有工作示例,但我有 API 演练。 有点……

Link to the full source code

我发现以下函数演示了如何调用 vchiq_bulk_transmit

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

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

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);

关于c - 不使用 OpenMAX 在 Raspberry Pi 中解码视频?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19149441/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com