Firefly开源社区

标题: 3288硬件265解码无画面 [打印本页]

作者: benbentemp    时间: 2016-3-4 19:01
标题: 3288硬件265解码无画面
大家好,最近入手了3288的开发版,烧写了rk3288_box-userdebug版本的固件,然后我参考下面的链接
http://developer.t-firefly.com/f ... hlight=%BD%E2%C2%EB
能够成功的解码出264的文件,yuv数据都是对的,画面没什么问题。
然而,我去解码265的时候,发现解不出来,但是没有报错,但是yuv数据都是空的,画面是绿色的,从下方的打印来看,系统已经识别出了视频的分辨率(1280x720)。
下面是logcat的数据:

  1. 03-04 10:50:12.192: I/System.out(19966): decoder dequeueOutputBuffer:-1
  2. 03-04 10:50:12.192: D/DecodeActivity(19966): dequeueOutputBuffer timed out! android.media.MediaCodec$BufferInfo@19253be5
  3. 03-04 10:50:12.192: I/System.out(19966): dequeueInputBuffer start.
  4. 03-04 10:50:12.192: I/System.out(19966): inIndex:1
  5. 03-04 10:50:12.211: D/(163): return info change
  6. 03-04 10:50:12.211: E/(163): infochange value 0
  7. 03-04 10:50:12.211: E/(163): decode nal units value 0
  8. 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
  9. 03-04 10:50:12.211: I/vpu_api(163): info_change break
  10. 03-04 10:50:12.211: I/vpu_api(163): get info change out xxxx
  11. 03-04 10:50:12.238: I/System.out(19966): decoder dequeueOutputBuffer:-1
  12. 03-04 10:50:12.238: D/DecodeActivity(19966): dequeueOutputBuffer timed out! android.media.MediaCodec$BufferInfo@19253be5
  13. 03-04 10:50:12.238: I/System.out(19966): dequeueInputBuffer start.
  14. 03-04 10:50:12.239: I/System.out(19966): inIndex:2
  15. 03-04 10:50:12.255: E/ROCKCHIP_VIDEO_DECCONTROL(163): OMX_IndexParamdescribeColorFormat get
  16. 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
  17. 03-04 10:50:12.256: E/OMXNodeInstance(163): getParameter(2c:rk._decoder.hevc, ??(0x7f000017)) ERROR: BadParameter(0x80001005)
  18. 03-04 10:50:12.256: W/ACodec(19966): do not know color format 0x0 = 0
  19. 03-04 10:50:12.256: E/OMXNodeInstance(163): getConfig(2c:rk._decoder.hevc, ConfigCommonOutputCrop(0x700000f)) ERROR: UnsupportedIndex(0x8000101a)
  20. 03-04 10:50:12.267: I/System.out(19966): decoder dequeueOutputBuffer:-3
  21. 03-04 10:50:12.267: D/DecodeActivity(19966): INFO_OUTPUT_BUFFERS_CHANGED
  22. 03-04 10:50:12.268: I/System.out(19966): dequeueInputBuffer start.
  23. 03-04 10:50:12.268: I/System.out(19966): inIndex:3
  24. 03-04 10:50:12.314: I/System.out(19966): decoder dequeueOutputBuffer:-2
  25. 03-04 10:50:12.315: D/DecodeActivity(19966): New format {image-data=java.nio.ByteArrayBuffer[position=0,limit=80,capacity=80], 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.各位大神给看看是啥原因





作者: benbentemp    时间: 2016-3-4 19:06
完了说一声,我用的固件5.1 box版:ro.build.display.id=rk3288_box-userdebug 5.1.1 LMY48W
作者: isle    时间: 2016-3-5 09:26
你这样仅仅贴个log是很难看出问题的,首先 你的贴出你的代码。
作者: benbentemp    时间: 2016-3-5 10:05
  1.     String mimeType = "video/hevc";//“video/avc”
  2.     codec= MediaCodec.createDecoderByType(mimeType);
  3. MediaFormat format = MediaFormat.createVideoFormat(mimeType, mStreamSrcWidth, mStreamSrcHeigth);
  4.     codec.configure(format, null, null, 0);
  5.     codec.start();
  6.     ByteBuffer[] inputBuffers = codec.getInputBuffers();
  7.     ByteBuffer[] outputBuffers = codec.getOutputBuffers();
  8.     for (;;) {
  9.            int inputBufferIndex = codec.dequeueInputBuffer(timeoutUs);
  10.            if (inputBufferIndex >= 0) {
  11.           ByteBuffer buffer = inputBuffers[inIndex];
  12.                  // 等待数据,并且填充数据
  13.                    ...
  14.                   codec.queueInputBuffer(inIndex, 0, sampleSize, 0, 0);
  15.            }

  16.             int outputBufferIndex = codec.dequeueOutputBuffer(timeoutUs);
  17.            if (outputBufferIndex >= 0) {
  18.                        // outputBuffer is ready to be processed or rendered.
  19.               ByteBuffer buffer = outputBuffers[outIndex];
  20.                     if(buffer!=null){
  21.                            。。。。。。。。 //保存数据或者显示数据
  22.                   }
  23.               decoder.releaseOutputBuffer(outIndex, true);
  24.               } else if (outputBufferIndex == MediaCodec.INFO_OUTPUT_BUFFERS_CHANGED) {
  25.                         outputBuffers = codec.getOutputBuffers();
  26.               } else if (outputBufferIndex == MediaCodec.INFO_OUTPUT_FORMAT_CHANGED) {
  27.                            // Subsequent data will conform to new format.
  28.                          MediaFormat format = codec.getOutputFormat();
  29.                
  30.               }
  31.     }
  32.     codec.stop();
  33.     codec.release();
  34.     codec = null;
复制代码
代码如上,参考http://developer.t-firefly.com/f ... hlight=%BD%E2%C2%EB这个改的,264是没什么问题的,265有问题,我感觉代码本身没什么问题,但是系统感觉硬解有点问题


作者: isle    时间: 2016-3-7 09:36
在MediaCodec上我们确实没有测试过H265。或许你可以用底层库 试试,用jni.
作者: jingjin221    时间: 2016-3-9 12:28
兄弟,HEVC解码器必须首先识别到I帧才开始解码!
作者: qchfu2006    时间: 2016-8-22 17:42
我也遇到了同样的问题,不知道各位解决了没有,能否指导一下  谢谢!!
作者: qchfu2006    时间: 2016-8-22 17:43
I帧可定是有的!    查看了视频流  带有SPS PPS  I帧
作者: jingjin221    时间: 2016-8-23 09:30
qchfu2006 发表于 2016-8-22 17:43
I帧可定是有的!    查看了视频流  带有SPS PPS  I帧

我的意思是,你送入解码器的第一帧,必须是I帧
作者: qchfu2006    时间: 2016-8-23 11:25
噢! 谢谢!  能加我一下QQ : 172741208
吗?
有些问题还需要请教一下 谢谢
作者: Hofmann    时间: 2016-8-24 20:48
同问
作者: proboy_li    时间: 2016-11-29 09:31
路过,看看
作者: she540061941    时间: 2017-6-1 17:06
楼主,解码实时264码流显示会有延时吗
作者: ZZP    时间: 2017-6-1 17:34
遇到同样问题,是一下android 7.1版本系统,解码问题已经解决了
作者: 华夏¥熊猫仔    时间: 2017-7-24 08:58
这个是5.xROM的一个bug,好像已经发布了更新包吧
作者: luobo    时间: 2021-11-9 19:46
楼主解决了吗?能否告知一下吗?




欢迎光临 Firefly开源社区 (https://dev.t-firefly.com/) Powered by Discuz! X3.1