|
RK3288硬解码器(H265) 解码1080P视频问题
发表于 2015-8-21 13:59:49
浏览:32003
|
回复:21
打印
只看该作者
[复制链接]
楼主
在使用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;
}
}
|
|