Firefly开源社区

标题: RK3288硬解码器(H265) 解码1080P视频问题 [打印本页]

作者: tju_hongwei    时间: 2015-8-21 13:59
标题: RK3288硬解码器(H265) 解码1080P视频问题
在使用firefly盒子(rk3288)做视频的开发测试,发现在使用HEVC  H265硬解码器进行1080P解码时出现以下问题:
1、解码器设置的参数为width=1920,height=1080
2、给出的原始数据1920*1080的编码后数据
  解码结果:发现图像信息错位
最后跟踪原因:在进行解码过程中,解码器会出INFO_OUTPUT_FORMAT_CHANGED事件,获取的slice-height参数为1088。

想请教下,采用什么样的方式才能对1080P的数据进行正常的解码,或者如果对1080P的数据解码后,如何处理才能回复正常的图片



注:1、RK3288  HEVC H265解码器对720P的数据可正常解码,效果不错
       2、同样1080P的数据,其他机顶盒的HEVC H265解码器也可正常解码








解码器工作时OutputBuffer的代码如下所示:
ByteBuffer[] outputBuffers = mc.getOutputBuffers();
BufferInfo info = new BufferInfo();
int index = mc.dequeueOutputBuffer(info, timeout);
Log.v(TAG, "java output index="+index);
switch (index) {
case MediaCodec.INFO_TRY_AGAIN_LATER:
break;
case MediaCodec.INFO_OUTPUT_FORMAT_CHANGED:
mDecOutputFormat = mc.getOutputFormat();
mWidth = mDecOutputFormat.getInteger(MediaFormat.KEY_WIDTH);
mHeight = mDecOutputFormat.getInteger(MediaFormat.KEY_HEIGHT);
mSliceHeight = mDecOutputFormat.getInteger("slice-height");
mDecoderColorFormat = mDecOutputFormat.getInteger(MediaFormat.KEY_COLOR_FORMAT);
break;
case MediaCodec.INFO_OUTPUT_BUFFERS_CHANGED:
outputBuffers = mc.getOutputBuffers();
break;
default:
if (index >= 0) {
Log.v(TAG, "before java output buffer,info.size="+info.size+",info.offset="+info.offset+",frameBuffer.capacity="+frameBuffer.capacity());
ByteBuffer outputData = outputBuffers[index];
//设置outputData的起始位置
outputData.position(info.offset);
//设置outputData可取数据的范围
outputData.limit(info.offset + info.size);
frameBuffer.put(outputData);
//释放编解码器的内存
mc.releaseOutputBuffer(index, false);
return info.size;
}
}



作者: isle    时间: 2015-8-21 16:58
VPU 解码是16位数对齐的,1080不够16整除 就补到1088了。但rk在后期处理数据有点问题。
如果使用rk自己的编码器编码的数据 1080P是正常的,如果使用外部的数据源 1080P会出现数据偏位。

目前我们这边有个暂时的解决方案,得到数据后,在使用数据的时候,譬如显示的时候,将UV的数据,往前拷贝补齐位。1080就是往前补8行。这个方法有个后遗症,uv的补齐位数据缺失,所以,譬如你显示的时候,后8行就不要显示了,
作者: tju_hongwei    时间: 2015-8-21 18:20
用UV的数据往前拷贝补齐位,是不是说要删掉8行Y的数据,然后后面UV的数据前移,跟着Y的数据
作者: tju_hongwei    时间: 2015-8-21 18:22
isle 发表于 2015-8-21 16:58
VPU 解码是16位数对齐的,1080不够16整除 就补到1088了。但rk在后期处理数据有点问题。
如果使用rk自己的 ...

用UV的数据往前拷贝补齐位,是不是说要删掉8行Y的数据,然后后面UV的数据前移,跟着Y的数据
作者: isle    时间: 2015-8-22 09:11
是的。
作者: tju_hongwei    时间: 2015-8-22 11:50
isle 发表于 2015-8-22 09:11
是的。

按照你给的方案尝试了一下还是不行
我给的是1920*1080数据,解码后数据的大小还是3110400(1920*1080*3/2)。
按照你上面的解释,他会自动补齐,解码后的数据大小应该是3133440(1920*1088*3/2)才对吧?

我按照你给的方案,对3110400的数据做了以下处理
Y值取了0 --- 1920*1080之间的字节
UV值取了1920*1088 ---3110400之间的字节
但是结果还是图像错位。


作者: isle    时间: 2015-8-24 09:24
怎么会。我们这边已经验证过是可以的。
你一开始的图像是不是Y数据正常。UV数据下移?
作者: tju_hongwei    时间: 2015-8-24 10:04
isle 发表于 2015-8-24 09:24
怎么会。我们这边已经验证过是可以的。
你一开始的图像是不是Y数据正常。UV数据下移?

一开始Y数据都不正常.UV数据我尝试过去掉,Y数据都不正常
作者: isle    时间: 2015-8-25 09:24
不正常是个什么样子 ,你前面不是说是错位么。截个图来看看
作者: tju_hongwei    时间: 2015-8-25 11:52
isle 发表于 2015-8-25 09:24
不正常是个什么样子 ,你前面不是说是错位么。截个图来看看




解码的结果显示看的话,其实是Y、U、V数据都错位了,因为画面全绿屏,只是会有一些条纹看到在动,应该是Y的数据(黑色的部分),但是某一部分的Y信息,貌似显示了5个竖屏(图片中可清楚的看到)



作者: isle    时间: 2015-8-25 17:51
正确的图像是一个画面而不是5个画面 。是么?。参数有没有设置错误?仔细检查下参数,你的数据源是什么?方便让我们这边试了么?
作者: tju_hongwei    时间: 2015-8-26 09:26
isle 发表于 2015-8-25 17:51
正确的图像是一个画面而不是5个画面 。是么?。参数有没有设置错误?仔细检查下参数,你的数据源是什么?方 ...

参数已经检查过,没问题,同一套参数,用其他机顶盒解码就没问题的

能给个邮箱地址,或者其他联系方式不,我把数据源文件发给你
作者: isle    时间: 2015-8-26 10:09
3082193221@qq.com
作者: tju_hongwei    时间: 2015-8-28 09:28
isle 发表于 2015-8-26 10:09

你好,我想问下,我给的数据源文件,测试结果出来没?
作者: isle    时间: 2015-8-29 09:22
抱歉,事情太多,没时间安排。可能需要些时间。
作者: tju_hongwei    时间: 2015-8-29 12:21
isle 发表于 2015-8-29 09:22
抱歉,事情太多,没时间安排。可能需要些时间。

好的,谢谢,辛苦了
作者: tju_hongwei    时间: 2015-9-2 16:29
isle 发表于 2015-8-29 09:22
抱歉,事情太多,没时间安排。可能需要些时间。

兄弟,有空帮看下哦,别忘了,谢谢
作者: isle    时间: 2015-9-6 10:35
呵呵,抽不出空啊,你那个是你自己压缩的吧,你能封装成一个mp4文件,然后用系统播放器播一下,看能正常解码么。
作者: tju_hongwei    时间: 2015-9-6 11:30
isle 发表于 2015-9-6 10:35
呵呵,抽不出空啊,你那个是你自己压缩的吧,你能封装成一个mp4文件,然后用系统播放器播一下,看能正常解 ...

我们播放过,播放器是可以播放的。
等你有空的时候,帮看下吧,谢谢
作者: nil820309    时间: 2015-9-10 08:57
1080p 的视频在硬件中解出来的时候,就是 1088 的 16 对齐的高度,这个是正常的,协议如此
这种情况要在显示的时候进行处理,把图像的垂直方向 stride 配置成 1088,显示高度配置成 1080,显示模块就会自动进行 crop 操作,无缩放,无失真。
所以,这个问题只是显示端配置的问题
作者: qchfu2006    时间: 2016-8-23 08:22
各位能发个联系方式吗?  我也遇到了此类问题,请教一下。QQ: 172741208
作者: 214740484    时间: 2016-9-21 18:09
谢谢楼主!!




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