问题标签 [ashmem]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
140 浏览

android - 使用 Android Nougat 的共享内存进行媒体解码

我正在将我的基于 Android AOSP 的发行版从 Android K 移植到 Android N。它包括一个可以解码 DVD 字幕的媒体播放器的修改版本。媒体播放器的架构在这两个版本之间发生了很大变化。特别是,它现在分为 3 个进程(请参阅https://source.android.com/devices/media/framework-hardening)。

因此,我试图使用 Shared Memory 使MediaCodecService将解码的位图字幕发送到MediaServer。我修改了之前由MediaCodecService创建的结构的内容,并在解码的位图字幕中添加了subtitle_fd属性,文件描述符。当MediaServerNuplayer接收到要渲染的消息时,代码会尝试映射上述文件描述符。

不幸的是,调用::mmap的结果总是MAP_FAILED

你知道我错过了什么吗?

  • MediaCodecService 部分的代码

    /li>
  • MediaServer 部分的代码

    /li>

太感谢了 !

0 投票
2 回答
123 浏览

android - ashmem 给予 [Errno 13] 权限被拒绝

在我扎根的 Android 设备中,

给出 -1 和 fopen 导致错误 13。我也尝试使用 chmod 777 更改权限,但无济于事。

有任何想法吗?感谢您的帮助。

0 投票
0 回答
66 浏览

android - 在 ashmem_create_region fd 上尝试 write() 时出现 EINVAL

我正在尝试在 Android 上获取 memfd。当我这样做时,一切似乎都很好:

memfd_create系统调用在较旧的 Android 版本上不存在。所以我试图在libcutils.so中调用ashmem_create_region。(不使用 ASharedMemory_create 因为 minSDK 26 仍然太高) 首先我注入 zygote 以对符号进行 dlsym。

然后我将memfd_create替换为ashmem_create_region

我成功地得到了一个 fd(不是 -1),但是 write() 抛出了 EINVAL,在尝试从这个 fd 中读取时也遇到了 EBADF。现在我想知道为什么会发生这种情况,我应该怎么做才能在 Android 7 ~ 11 上获得 memfd?