3288硬件265解码无画面

大家好,最近入手了3288的开发版,烧写了rk3288_box-userdebug版本的固件,然后我参考下面的链接
http://developer.t-firefly.com/forum.php?mod=viewthread&tid=299&highlight=����
能够成功的解码出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[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.各位大神给看看是啥原因

完了说一声,我用的固件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[inIndex];
                 // 等待数据,并且填充数据
                   ...
                  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[outIndex];
                    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=����这个改的,264是没什么问题的,265有问题,我感觉代码本身没什么问题,但是系统感觉硬解有点问题

在MediaCodec上我们确实没有测试过H265。或许你可以用底层库 试试,用jni.

兄弟,HEVC解码器必须首先识别到I帧才开始解码!

我也遇到了同样的问题,不知道各位解决了没有,能否指导一下 谢谢!!

I帧可定是有的! 查看了视频流 带有SPS PPS I帧

qchfu2006 发表于 2016-8-22 17:43
I帧可定是有的! 查看了视频流 带有SPS PPS I帧

我的意思是,你送入解码器的第一帧,必须是I帧

噢! 谢谢! 能加我一下QQ : 172741208
吗?
有些问题还需要请教一下 谢谢

同问

路过,看看

楼主,解码实时264码流显示会有延时吗

遇到同样问题,是一下android 7.1版本系统,解码问题已经解决了

这个是5.xROM的一个bug,好像已经发布了更新包吧

楼主解决了吗?能否告知一下吗?