对于Android Multimedia 来说,无可避免要使用的MediaCodec 支持的Codec List,本文章目的是理清MediaCodecList 是怎么产生的?怎么查看当前MediaCodec 支持的Codec List?
以Android S 为code base 进行分析。
一、Codec Service
系统起来后,Codec Service 也已经ready.
可以在播放MM 下,android console 下 敲 top 看看
Tasks: 431 total, 2 running, 429 sleeping, 0 stopped, 0 zombie
Mem: 3151492K total, 2757436K used, 394056K free, 7932K buffers
Swap: 1572860K total, 723712K used, 849148K free, 1168260K cached
400%cpu 99%user 3%nice 59%sys 231%idle 1%iow 0%irq 8%sirq 0%host
PID USER PR NI VIRT RES SHR S[%CPU] %MEM TIME+ ARGS
504 audioserver 20 0 69M 13M 4.1M S 77.0 0.4 177:50.14 android.hardware.audio.service
550 system -2 -8 3.1G 37M 32M S 19.0 1.2 1:51.02 surfaceflinger
855 media 20 0 397M 17M 13M S 12.0 0.5 0:05.16 mediaserver
531 root 20 0 111M 8.2M 6.5M S 9.6 0.2 9:39.52 vendor.huaweitv.hardware.hwtvdriverbase@1.0-service
859 mediacodec 20 0 78M 6.1M 5.4M S 5.6 0.1 0:02.22 media.codec hw/android.hardware.media.omx@1.0-service
542 audioserver 20 0 2.6G 20M 17M S 5.0 0.6 5:17.14 audioserver
pid 859 就是 codec service.
ls /proc/859/exe
lrwxrwxrwx 1 mediacodec camera 0 2023-03-27 20:20 exe -> /vendor/bin/hw/android.hardware.media.omx@1.0-service
再看一下此service 的rc 文件,frameworks\av\services\mediacodec\android.hardware.media.omx@1.0-service.rc
service vendor.media.omx /vendor/bin/hw/android.hardware.media.omx@1.0-service
class main
user mediacodec
group camera drmrpc mediadrm
ioprio rt 4
writepid /dev/cpuset/foreground/tasks
此Service 对应的main 函数在frameworks\av\services\mediacodec\main_codecservice.cpp 中
// Must match location in Android.mk.
static const char kSystemSeccompPolicyPath[] =
"/system/etc/seccomp_policy/mediacodec.policy";
static const char kVendorSeccompPolicyPath[] =
"/vendor/etc/seccomp_policy/mediacodec.policy";
int main(int argc __unused, char** argv)
{
strcpy(argv[0], "media.codec");
LOG(INFO) << "mediacodecservice starting";
signal(SIGPIPE, SIG_IGN);
SetUpMinijail(kSystemSeccompPolicyPath, kVendorSeccompPolicyPath);
android::Proce