问题标签 [openmax]
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 H.264 编解码器并在手机上运行
首先我应该让你知道我是Android系统的新手。
我想稍微调整一下 Android 使用的现有 H.264/AVC 编解码器。具体来说,我想更改编解码器计算从输入缓冲区获取的任何数据的方式,然后再将其发送到输出缓冲区。
当我查看 Android 媒体架构时,似乎stagefright只是某种包装器,我找不到 OMX IL 硬件 H.264 实现的源代码。
所以我想我的第一个问题是,从位到实际图片的计算在哪里发生?
问题的第二部分是将这个调整后的编解码器放入移动设备中。我想我只是重写现有文件(当我找到它时)?据我了解,我不需要遵循实现自定义编解码器,因为我想保持更改的编解码器以相同的名称注册。
在这一点上,我应该告诉您,我不希望这将在一般用途中起作用,而仅在用于研究目的的自定义应用程序中起作用。
编辑 1:我不希望得到确切解决方案的答案,但希望有一些指导方针,以修改编解码器为目标,从哪里开始我的探索。
编辑 2:我将使用不安全(有根)设备。
raspberry-pi - “内部数据流错误。” 在 gstreamer 中使用 omxh264enc 时
我目前正在尝试将来自 Raspberry Pi 相机的实时提要转换为 H264,并使用 gstreamer 将其存储为 mp4 视频。由于我使用的是 Raspberry Pi 1,因此我需要使用硬件加速的视频编码,否则编码器无法跟上。
我尝试了以下管道,我手动输入 RGB 图像数据:
但是,它失败并显示以下输出:
奇怪的是,如果我omxh264enc
用非加速版本替换x264enc
,它可以工作(尽管它在几帧后落后)。
我认为之前的警告Internal data stream error
可能会表明实际出了什么问题,但我无法从中理解。
完整的代码可以在这里找到:https ://pastebin.com/pgr940yu ,以及该代码的完整调试输出:https ://pastebin.com/CLwAfxMG 。
提前非常感谢!
最好的,霍曼
raspberry-pi - Raspberry-Pi 4B 上的 Vulkan 视频解码
过去几周我一直在研究 Vulkan API。这是我第一次使用计算机图形学和学习 C++,但我对学习所有这些非常感兴趣。
我唯一的目标是解码 H.264 文件并使用 Vulkan 将其渲染到屏幕上。我有一个 RPi4B 1GB。
我的理解是可以使用硬件加速进行解码,但最大分辨率为 1920x1080。由于 Vulkan 显然还不支持视频加速,因此我寻找了另一种解决方案并找到了 OpenMax(OMX)。
我的问题是:
使用 OpenMax 库进行解码并使用 Vulkan 显示此内容是一个好习惯吗?
我将如何使用 vulkan 解码视频?我应该如何复制这些数据(创建一个大缓冲区)?
linux - 如何强制 Firefox 使用特定的共享库来解码视频?
提到的库使用 OMX API。我尝试使用此补丁:
这没有用。没有明显的变化,当我播放视频时,Firefox 没有改变图书馆。
我将此库与 GStreamer 插件一起使用,效果很好。
我什至应该如何使用 Firefox 来解决这个问题?
我对 Firefox 代码库不是很精通,但如果需要并且需要一个起点,我愿意投入工作。
android - 在 android 10 上添加带有 OpenMAX 的新音频编解码器格式时出现问题
我想添加一个带有 OMX 的新音频格式(比如“.abc”文件),以便 android 系统可以直接将 .abc 文件识别为音频格式(例如 android 系统文件资源管理器、应用程序内的文件接收器、取消归档应用程序等),打开它并正确播放。我已完成以下步骤:
在 frameworks/av/media/extractors 中,添加一个名为“abc”的文件夹,并在该文件夹内创建 ABCExtractor.h/cpp、exports.lds 和 Android.bp。
在frameworks/av/media/libstagefright/codecs中,添加一个名为“abcdec”的文件夹,并在该文件夹内创建SoftABC.h/cpp、exports.lds和Android.bp。我还添加并链接了我自己的 libabcdec.so 库,它具有核心解码算法。
在frameworks/av/media/libstagefright/foundation/MediaDefs.cpp中,添加一个字符串: const char *MEDIA_MIMETYPE_AUDIO_ABC = "audio/abc";
在frameworks/av/media/libstagefright/include/media/stagefright/MediaCodecConstants.h中,添加一个字符串: constexpr char MIMETYPE_AUDIO_ABC[] = "audio/abc";
在system/media/audio/include/system/audio-base.h中,注册一个abc格式的ID:AUDIO_FORMAT_ABC = 0x30000000u,
在system/media/audio/include/system/audio.h中,为上述ID添加一个case,让它返回true;
在 frameworks/av/media/libstagefright/data/media_codecs_google_audio.xml 中,添加新的解码器配置:
在frameworks/av/apex/Android.bp中,添加“libabcextractor”链接;
在frameworks/base/media/java/android/media/MediaFormat.java中,添加一个新的mimetype:public static final String MIMETYPE_AUDIO_ABC = "audio/abc";
在frameworks/base/media/java/android/media/MediaCodecInfo.java中,在applyLevelLimits()函数中添加一个case:else if (mime.equalsIgnoreCase(MediaFormat.MIMETYPE_AUDIO_ABC)) { sampleRates = new int[] { 8000,11025, 12000,16000,22050,24000,32000,44100,48000 }; 比特率 = Range.create(8000, 960000); 最大通道数 = 8;}
在frameworks/base/media/java/android/media/MediaFile.java中,注册abc格式:addFileType(MtpConstants.FORMAT_ABC, "audio/abc");
在frameworks/base/media/java/android/mtp/MtpConstants.java中,添加一个常量:public static final int FORMAT_ABC = 0x3100;
在frameworks/base/media/java/android/mtp/MtpDatabase.java中,添加一个MtpConstants.FORMAT_ABC case,其中MP3/AAC...出现;
在frameworks/base/services/core/java/com/android/server/storage/FileCollector.java中,将abc格式放入extension map:EXTENSION_MAP.put("abc", AUDIO);
但是当我把一个abc文件放到手机里的时候,文件还是未知格式,不是音频格式,更别说解码了....
有任何想法吗?我还错过了什么?
PS 我使用 Google Pixel 3 和 Android 10.0