[RK3288][Android6.0] MediaCodec的configure配置过程小结

Platform: Rockchip
OS: Android 6.0
Kernel: 3.10.92

MediaCodec的参数设置都是存在MediaFormat结构体中,然后通过configure()来设置
MediaFormat mediaFormat = MediaFormat.createVideoFormat("video/avc", width, height);
mediaFormat.setInteger(MediaFormat.KEY_BIT_RATE, bitrate);
mediaFormat.setInteger(MediaFormat.KEY_FRAME_RATE, framerate);
mediaFormat.setInteger(MediaFormat.KEY_COLOR_FORMAT, MediaCodecInfo.CodecCapabilities.COLOR_FormatYUV420Planar);    
mediaFormat.setInteger(MediaFormat.KEY_I_FRAME_INTERVAL, 1);
mediaCodec.configure(mediaFormat, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE);


mediaCodec.configure ->
  configure -> MediaCodec.java
    native_configure -> 以keys/values形式存放
      android_media_MediaCodec_native_configure -> android_media_MediaCodec.cpp
        ConvertKeyValueArraysToMessage //把keys/values转换成Message
        codec->configure ->
          JMediaCodec::configure ->
            mCodec->configure    //调用Stagefright接口
            MediaCodec::configure -> MediaCodec.cpp
              new AMessage(kWhatConfigure, this);    //一会异步调用会用到
                msg->setMessage("format", format) //msg是format
                PostAndAwaitResponse ->
                  MediaCodec::onMessageReceived ->  //cmd是kWhatConfigure
                    mCodec->initiateConfigureComponent
                    ACodec::initiateConfigureComponent -> ACodec.cpp
                      msg->setWhat(kWhatConfigureComponent); //继续异步调用,不过这里是ACodec里的回调
                        ACodec::LoadedState::onMessageReceived -> 当前处于LoadedState状态
                          onConfigureComponent -> //会处理很多case,如decoder,encoder,audio,window等,只关注encoder.
                            setupVideoEncoder ->
                              mOMX->setParameter //cmd是OMX_IndexParamPortDefinition
                              setupAVCEncoderParameters ->
                                ACodec::configureBitrate ->
                                  getBitrateMode //如果没设置,那么默认就用OMX_Video_ControlRateVariable
                                  mOMX->setParameter //设置bitrate mode,cmd是OMX_IndexParamVideoBitrate
                                    OMX::setParameter OMX.cpp //后面就是so看不到代码了。
                

参考
Android Native层异步消息处理框架

你可能感兴趣的:(子类__Codec)