3288硬件265解码无画面
大家好,最近入手了3288的开发版,烧写了rk3288_box-userdebug版本的固件,然后我参考下面的链接http://developer.t-firefly.com/forum.php?mod=viewthread&tid=299&highlight=%BD%E2%C2%EB
能够成功的解码出264的文件,yuv数据都是对的,画面没什么问题。
然而,我去解码265的时候,发现解不出来,但是没有报错,但是yuv数据都是空的,画面是绿色的,从下方的打印来看,系统已经识别出了视频的分辨率(1280x720)。
下面是logcat的数据:
03-04 10:50:12.192: I/System.out(19966): decoder dequeueOutputBuffer:-1
03-04 10:50:12.192: D/DecodeActivity(19966): dequeueOutputBuffer timed out! android.media.MediaCodec$BufferInfo@19253be5
03-04 10:50:12.192: I/System.out(19966): dequeueInputBuffer start.
03-04 10:50:12.192: I/System.out(19966): inIndex:1
03-04 10:50:12.211: D/(163): return info change
03-04 10:50:12.211: E/(163): infochange value 0
03-04 10:50:12.211: E/(163): decode nal units value 0
03-04 10:50:12.211: I/pv_hevcdec_api(163): return info change default_width 1920,default_height 1080,new nDisplayWidth 1280,nDisplayHeight 720
03-04 10:50:12.211: I/vpu_api(163): info_change break
03-04 10:50:12.211: I/vpu_api(163): get info change out xxxx
03-04 10:50:12.238: I/System.out(19966): decoder dequeueOutputBuffer:-1
03-04 10:50:12.238: D/DecodeActivity(19966): dequeueOutputBuffer timed out! android.media.MediaCodec$BufferInfo@19253be5
03-04 10:50:12.238: I/System.out(19966): dequeueInputBuffer start.
03-04 10:50:12.239: I/System.out(19966): inIndex:2
03-04 10:50:12.255: E/ROCKCHIP_VIDEO_DECCONTROL(163): OMX_IndexParamdescribeColorFormat get
03-04 10:50:12.256: E/ROCKCHIP_OSAL_Android(163): OMX_ERRORTYPE Rockchip_OSAL_GetANBParameter(OMX_HANDLETYPE, OMX_INDEXTYPE, OMX_PTR): Rockchip_OMX_Check_SizeVersion(DescribeColorFormatParams) is failed
03-04 10:50:12.256: E/OMXNodeInstance(163): getParameter(2c:rk._decoder.hevc, ??(0x7f000017)) ERROR: BadParameter(0x80001005)
03-04 10:50:12.256: W/ACodec(19966): do not know color format 0x0 = 0
03-04 10:50:12.256: E/OMXNodeInstance(163): getConfig(2c:rk._decoder.hevc, ConfigCommonOutputCrop(0x700000f)) ERROR: UnsupportedIndex(0x8000101a)
03-04 10:50:12.267: I/System.out(19966): decoder dequeueOutputBuffer:-3
03-04 10:50:12.267: D/DecodeActivity(19966): INFO_OUTPUT_BUFFERS_CHANGED
03-04 10:50:12.268: I/System.out(19966): dequeueInputBuffer start.
03-04 10:50:12.268: I/System.out(19966): inIndex:3
03-04 10:50:12.314: I/System.out(19966): decoder dequeueOutputBuffer:-2
03-04 10:50:12.315: D/DecodeActivity(19966): New format {image-data=java.nio.ByteArrayBuffer, mime=video/raw, crop-top=0, crop-right=1279, slice-height=720, color-format=0, height=720, width=1280, what=1869968451, crop-bottom=719, crop-left=0, stride=1280}
我对比了和264的打印,区别是264的在这个后面还用红色的打印了一次分辨率。
1.我用的265视频数据肯定是没有任何问题,而且保证是有I帧的。
2.我传递到mediacode的数据能保证是每一帧都是刚刚好分开的。
3.我的264和265的视频都是裸码流,能够直接用标准的工具(Elecard 、Elecard HEVC Analyzer)进行播放的。
4.硬解265从上方的打印来看的话,好像系统认为已经解码成功了,但是不知道为什么,出来的yuv数据是空的,所以看到的画面都是绿色的!
5.各位大神给看看是啥原因
完了说一声,我用的固件5.1 box版:ro.build.display.id=rk3288_box-userdebug 5.1.1 LMY48W 你这样仅仅贴个log是很难看出问题的,首先 你的贴出你的代码。 String mimeType = "video/hevc";//“video/avc”
codec= MediaCodec.createDecoderByType(mimeType);
MediaFormat format = MediaFormat.createVideoFormat(mimeType, mStreamSrcWidth, mStreamSrcHeigth);
codec.configure(format, null, null, 0);
codec.start();
ByteBuffer[] inputBuffers = codec.getInputBuffers();
ByteBuffer[] outputBuffers = codec.getOutputBuffers();
for (;;) {
int inputBufferIndex = codec.dequeueInputBuffer(timeoutUs);
if (inputBufferIndex >= 0) {
ByteBuffer buffer = inputBuffers;
// 等待数据,并且填充数据
...
codec.queueInputBuffer(inIndex, 0, sampleSize, 0, 0);
}
int outputBufferIndex = codec.dequeueOutputBuffer(timeoutUs);
if (outputBufferIndex >= 0) {
// outputBuffer is ready to be processed or rendered.
ByteBuffer buffer = outputBuffers;
if(buffer!=null){
。。。。。。。。 //保存数据或者显示数据
}
decoder.releaseOutputBuffer(outIndex, true);
} else if (outputBufferIndex == MediaCodec.INFO_OUTPUT_BUFFERS_CHANGED) {
outputBuffers = codec.getOutputBuffers();
} else if (outputBufferIndex == MediaCodec.INFO_OUTPUT_FORMAT_CHANGED) {
// Subsequent data will conform to new format.
MediaFormat format = codec.getOutputFormat();
}
}
codec.stop();
codec.release();
codec = null;代码如上,参考http://developer.t-firefly.com/forum.php?mod=viewthread&tid=299&highlight=%BD%E2%C2%EB这个改的,264是没什么问题的,265有问题,我感觉代码本身没什么问题,但是系统感觉硬解有点问题
在MediaCodec上我们确实没有测试过H265。或许你可以用底层库 试试,用jni. 兄弟,HEVC解码器必须首先识别到I帧才开始解码! 我也遇到了同样的问题,不知道各位解决了没有,能否指导一下谢谢!! I帧可定是有的! 查看了视频流带有SPS PPSI帧 qchfu2006 发表于 2016-8-22 17:43
I帧可定是有的! 查看了视频流带有SPS PPSI帧
我的意思是,你送入解码器的第一帧,必须是I帧 噢! 谢谢!能加我一下QQ : 172741208
吗?
有些问题还需要请教一下 谢谢
页:
[1]
2