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的数据:
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.各位大神给看看是啥原因
作者:
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
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/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