平台: 高通8625Q
软件系统:android 4.1.2
概述:由于项目需要,使用mediacodec的cpp接口 完成视频的H264编解码功能,camrea数据处理后传给mediacodec encoder;
mediacodec decoder解码出的数据在c层通过opengl的接口绘制到glsurface上去。另外,由于使用的是手机,所以屏幕ui是竖屏。
问题现象:解码乍一看显示正常,但是挥挥手,快速的动一下,就发现屏幕上很多色点,甚至有横向的杂线。
分析:最先怀疑是编码器或者解码器配置的问题,但是检查了一下,没发现哪里配置不对,后来用ffmpeg软件解码器来解码,发现
解码出来的画面有四个重影,估计是宽和高弄错了,于是更换mediacodec encoder的编码宽高,发现ffmpeg解码正常了,快速晃动
也没有噪点、横线。于是换回mediacodec decoder,发现解码出来的图像也正常了。
总结:这个问题是由于编码宽和高设置的问题,对于mediacodec encoder ,宽和高设反了也一样可以编码,同样的宽和高设反了也
一样可以解码。但是,编码器编码出来的图像还是有隐藏的问题的,比如这个快速晃动会出现噪点的问题。
后记:坑爹的android系统,竖屏的时候,camera采集的图像是九十度的,用过camera.setPreviewCallback(new Camera.PreviewCallback(){};
接口的都知道这个问题。这样手动编码的时候还要把图像旋转一下。