0

我想添加一个带有 OMX 的新音频格式(比如“.abc”文件),以便 android 系统可以直接将 .abc 文件识别为音频格式(例如 android 系统文件资源管理器、应用程序内的文件接收器、取消归档应用程序等),打开它并正确播放。我已完成以下步骤:

  1. 在 frameworks/av/media/extractors 中,添加一个名为“abc”的文件夹,并在该文件夹内创建 ABCExtractor.h/cpp、exports.lds 和 Android.bp。

  2. 在frameworks/av/media/libstagefright/codecs中,添加一个名为“abcdec”的文件夹,并在该文件夹内创建SoftABC.h/cpp、exports.lds和Android.bp。我还添加并链接了我自己的 libabcdec.so 库,它具有核心解码算法。

  3. 在frameworks/av/media/libstagefright/foundation/MediaDefs.cpp中,添加一个字符串: const char *MEDIA_MIMETYPE_AUDIO_ABC = "audio/abc";

  4. 在frameworks/av/media/libstagefright/include/media/stagefright/MediaCodecConstants.h中,添加一个字符串: constexpr char MIMETYPE_AUDIO_ABC[] = "audio/abc";

  5. 在system/media/audio/include/system/audio-base.h中,注册一个abc格式的ID:AUDIO_FORMAT_ABC = 0x30000000u,

  6. 在system/media/audio/include/system/audio.h中,为上述ID添加一个case,让它返回true;

  7. 在 frameworks/av/media/libstagefright/data/media_codecs_google_audio.xml 中,添加新的解码器配置:

  8. 在frameworks/av/apex/Android.bp中,添加“libabcextractor”链接;

  9. 在frameworks/base/media/java/android/media/MediaFormat.java中,添加一个新的mimetype:public static final String MIMETYPE_AUDIO_ABC = "audio/abc";

  10. 在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;}

  11. 在frameworks/base/media/java/android/media/MediaFile.java中,注册abc格式:addFileType(MtpConstants.FORMAT_ABC, "audio/abc");

  12. 在frameworks/base/media/java/android/mtp/MtpConstants.java中,添加一个常量:public static final int FORMAT_ABC = 0x3100;

  13. 在frameworks/base/media/java/android/mtp/MtpDatabase.java中,添加一个MtpConstants.FORMAT_ABC case,其中MP3/AAC...出现;

  14. 在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

4

0 回答 0