HTC(高通) 编码端:zhanganl encode frame.width():360 frame.height():480 width_ :360 height_:480 //实际编码384 480
解码端:zhanganl width:360 height:480 stride:384 output_buffer_size:276480
mate7(海思) 编码端:zhanganl encode frame.width():360 frame.height():480 width_ :360 height_:480 //实际编码368 480
解码端:zhanganl width:368 height:480 stride:368 output_buffer_size:264960
红米note(高通) 编码端:zhanganl encode frame.width():360 frame.height():480 width_ :360 height_:480 //实际编码368 480
解码端:zhanganl width:360 height:480 stride:368 output_buffer_size:278528
金立f103(MTK) 编码端:zhanganl encode frame.width():360 frame.height():480 width_ :360 height_:480 //实际编码368 480
解码端:zhanganl width:360 height:480 stride:360 output_buffer_size:259200
三星S6(Exynos) 编码端:zhanganl encoded image width :368 height:480 fps :0
frame_cropping_flag:1 left_offset:0 right_offset:4 top_offset:0 bottom_offset:0
结论:对于非16对齐的分辨率,都会对齐,但是解码端,解码出来的结果不同,这个主要适配点。
华为mate7,在解码360*480变到240*320的变分辨率时,会有很大的问题,还会保持360*480,而没有变化分辨率,导致一个大屏和一个小屏同时存在。
三星note5 n9200
报如下错误:
03-07 10:21:45.736 F/art (30938): art/runtime/java_vm_ext.cc:410] JNI DETECTED ERROR IN APPLICATION: input is not valid Modified UTF-8: illegal start byte 0xb7
03-07 10:21:45.736 F/art (30938): art/runtime/java_vm_ext.cc:410] string: 'Thread-1334 - 0إӿ'
03-07 10:21:45.736 F/art (30938): art/runtime/java_vm_ext.cc:410] in call to NewStringUTF
03-07 10:21:45.736 F/art (30938): art/runtime/java_vm_ext.cc:410] "<native thread without managed peer>" prio=10 tid=23 Runnable (still starting up)
参考文章:
解决方法则为在AndroidMainifest.xml中的application中加入android:debuggable="false"。
Found target encoder for mime video/avc : OMX.MTK.VIDEO.ENCODER.AVC. Color: 0x13
Found target encoder for mime video/avc : OMX.IMG.TOPAZ.VIDEO.Encoder. Color: 0x15
Found target encoder for mime video/avc : OMX.qcom.video.encoder.avc. Color: 0x15
Found target encoder for mime video/avc : OMX.Exynos.AVC.Encoder. Color: 0x13
Found target encoder for mime video/avc : OMX.Exynos.AVC.Encoder. Color: 0x15
三星S6 240320 支持 360480 花屏
编解码端还有stride 适配问题
对于360*480的编码后,stride会变成368,而华为海思解码后,width和stride都会解码成368,对渲染有影响,图像右边出现绿条。
http://stackoverflow.com/questions/26257474/select-h264-profile-when-encoding-with-mediacodec-and-mtk-codec
http://xcshen.blog.51cto.com/2835389/552669/
统一所有机器使用的profile和level,避免有的手机使用cabac编码,而解码端使用baseline,不支持cabac,无法解码
format.setInteger("profile", 0x01);
format.setInteger("level", 0x01);
关于mediacodec解码遇到的相关问题总结:
1、解码过程中变化分辨率,mate7等会大小屏。
2、对于360*480等不是16整数倍的宽高,不同机器的表现不一,一系列适配问题。
3、解码过程中重新设置解码器,会出现问题。
华为mate7编码720*1280时,会分为2个slice。
相关文章:
http://blog.csdn.net/u012917616/article/details/40948469
http://blog.csdn.net/zqs62761130/article/details/49007879
http://bigflake.com/mediacodec/
网友评论