当前位置:首页 » 安卓系统 » android硬解码

android硬解码

发布时间: 2024-01-09 12:14:12

1. 在android 平台实现硬解的大侠们,你们是怎么实现硬解码的

1、视频尺寸
一般都能支持176X144/352X288这种尺寸,但是大一些的,640X480就有很多机子不行了,至于为什么,我也不知道。当然,这个尺寸必须和摄像头预览的尺寸一致,预览的尺寸可以枚举一下。
2、颜色空间
根据ANdroid SDK文档,确保所有硬件平台都支持的颜色,在摄像头预览输出是YUV12,在编码器输入是COLOR_FormatYUV420Planar,也就是前面代码中设置的那样。 不过,文档终究是文档,否则安卓就不是安卓。
在有的平台上,这两个颜色格式是一样的,摄像头的输出可以直接作为编码器的输入。也有的平台,两个是不一样的,前者就是YUV12,后者等于I420,需要把前者的UV分量颠倒一下。
byte[] i420bytes = null;
private byte[] swapYV12toI420(byte[] yv12bytes, int width, int height) {
if (i420bytes == null)
i420bytes = new byte[yv12bytes.length];
for (int i = 0; i < width*height; i++)
i420bytes[i] = yv12bytes[i];
for (int i = width*height; i < width*height + (width/2*height/2); i++)
i420bytes[i] = yv12bytes[i + (width/2*height/2)];
for (int i = width*height + (width/2*height/2); i < width*height + 2*(width/2*height/2); i++)
i420bytes[i] = yv12bytes[i - (width/2*height/2)];
return i420bytes;
}
3、输入输出缓冲区的格式
SDK里并没有规定格式,但是,这种情况H264的格式基本上就是附录B。但是,也有比较有特色的,它就是不带那个StartCode,就是那个0x000001,搞得把他编码器编出来的东西送给他的解码器。
ByteBuffer outputBuffer = outputBuffers[outputBufferIndex];
byte[] outData = new byte[bufferInfo.size + 3];
outputBuffer.get(outData, 3, bufferInfo.size);
if (frameListener != null) {
if ((outData[3]==0 && outData[4]==0 && outData[5]==1)
|| (outData[3]==0 && outData[4]==0 && outData[5]==0 && outData[6]==1))
{
frameListener.onFrame(outData, 3, outData.length-3, bufferInfo.flags);
}
else
{
outData[0] = 0;
outData[1] = 0;
outData[2] = 1;
frameListener.onFrame(outData, 0, outData.length, bufferInfo.flags);
}
}

热点内容
oc访问成员变量吗 发布:2024-11-29 00:14:59 浏览:517
七牛云服务器生成缩略图 发布:2024-11-29 00:12:36 浏览:272
如何重设华为账号密码 发布:2024-11-29 00:03:33 浏览:813
安卓听小说下载到哪个文件夹 发布:2024-11-29 00:03:01 浏览:932
闲鱼挂脚本 发布:2024-11-29 00:01:27 浏览:630
ae加快缓存 发布:2024-11-28 23:50:34 浏览:342
java的版本号 发布:2024-11-28 23:48:18 浏览:100
sql存储过程区别 发布:2024-11-28 23:35:37 浏览:919
ms计算机需要什么配置 发布:2024-11-28 23:34:21 浏览:975
淘宝直接访问的流量 发布:2024-11-28 23:33:11 浏览:50