[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层异步消息处理框架
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层异步消息处理框架
相关文章推荐
- [RK3288][Android6.0] WiFi之Framework连接过程小结
- [RK3288][Android6.0] WiFi之无线网络配置的关闭过程
- [RK3288][Android6.0] WIFI接入过程的加密和认证方式小结
- [RK3288][Android6.0] WiFi之无线网络配置的保存过程
- [RK3288][Android6.0] WiFi在Setting中的开启过程小结
- [RK3288][Android6.0] USB 枚举过程小结
- [RK3288][Android6.0] Audio的音量计算过程小结
- [RK3288][Android6.0] MediaCodec初始化过程小结
- [RK3288][Android6.0] 系统重启调用过程小结
- [RK3288][Android6.0] WiFi之无线网络配置的忘记(移除)过程
- [RK3288][Android6.0] USB 枚举过程小结
- [RK3288][Android6.0] 系统关机调用过程小结
- [RK3288][Android6.0] Apk设置显示旋转过程小结
- [RK3288][Android6.0] WiFi的驱动初始化过程小结
- [RK3288][Android6.0] Audio中的混音过程小结
- [RK3288][Android6.0] MediaCodec的bitrate_mode配置问题
- [RK3288][Android6.0] USB Mass Storage流程小结
- [RK3288][Android6.0] 如何配置MIPI DSI Clock和PCLK
- [RK3288][Android6.0] 音频调试方法小结
- [RK3288][Android6.0] WiFi在Settings中的热点开启流程小结