问题标签 [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.
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属性,文件描述符。当MediaServer的Nuplayer接收到要渲染的消息时,代码会尝试映射上述文件描述符。
不幸的是,调用::mmap的结果总是MAP_FAILED。
你知道我错过了什么吗?
MediaCodecService 部分的代码
/li>MediaServer 部分的代码
/li>
太感谢了 !
android - ashmem 给予 [Errno 13] 权限被拒绝
在我扎根的 Android 设备中,
给出 -1 和 fopen 导致错误 13。我也尝试使用 chmod 777 更改权限,但无济于事。
有任何想法吗?感谢您的帮助。
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?