本文共 2603 字,大约阅读时间需要 8 分钟。
MediaCodec??Android??????????native??????create?config?????????????????????????????????
?????mediacodec?create?config????native??????????????????????
?mediacodec?????????????ACodec???ACodec???????????????????UninitializedState???????????
MediaCodec.cppstatus_t MediaCodec::init(const AString &name, bool nameIsType, bool encoder) { // 1. ???ACodec mCodec = new ACodec; // 2. ?MediaCodec??????ALooper???ACodec?????? if (needDedicatedLooper) { if (mCodecLooper == NULL) { mCodecLooper = new ALooper; mCodecLooper->setName("CodecLooper"); mCodecLooper->start(false, false, ANDROID_PRIORITY_AUDIO); } mCodecLooper->registerHandler(mCodec); } else { // 3. ?ACodec???MediaCodec???ALooper? mLooper->registerHandler(mCodec); } // 4. ?MediaCodec???jni????ALooper? mLooper->registerHandler(this); mCodec->setNotificationMessage(new AMessage(kWhatCodecNotify, id())); // 5. ????kWhatInit?? sp msg = new AMessage(kWhatInit, id()); msg->setString("name", name); msg->setInt32("nameIsType", nameIsType); if (nameIsType) { msg->setInt32("encoder", encoder); } sp response; return PostAndAwaitResponse(msg, &response);} ?onMessageReceived??????????kWhatInit??????????UNINITIALIZED????????mReplyID??????INITIALIZING????ACodec?initiateAllocateComponent???
ACodec?????AHierarchicalStateMachine????????UninitializedState?????changeState???????UninitializedState???kWhatAllocateComponent??????onAllocateComponent???
?config???mediacodec???kWhatConfigure?????onMessageReceived?????
??????kWhatConfigure???initiateConfigureComponent???LoadedState?onMessageReceived?????kWhatConfigureComponent?????configureCodec???
??ACodec?configureCodec????????mime???componentName??????????
mediacodec?create?config????native?????????????
???????mediacodec?Android????????????????????????????????
转载地址:http://gfwwz.baihongyu.com/