您的位置:首页 > 移动开发 > Android开发

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

2017-06-20 14:41 736 查看
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层异步消息处理框架
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: