导航:首页 > 操作系统 > androidyuv格式

androidyuv格式

发布时间:2022-06-20 22:47:03

‘壹’ 求助:怎么直接显示YUV格式图像

其实android里面定义的有overlay的接口,如果你的硬件支持的话,应该可以直接调用显示。但是好像没有开放overlay的借口给java层,所以你应该只能在framework层调用overlay来显示你的解码后的图像。具体的例子,你可以参考一下camera 的实现,做pre-view的时候就是调用的overlay直接显示的。

‘贰’ android采集的摄像头数据是什么格式的

android camera初始采集到的格式是yuv格式的,图像绘制的时候会转换成rgb格式的。

‘叁’ android手机preview设置了yuv420sp格式输出,可是输出的是yuv420p

建议上神族论坛,求教大家,或者直接刷机

‘肆’ android 摄像头出来的格式怎么会是yuv420p 而不是yuv420sp(nv21)呢

那是因为你在相机参数初始化的时候未设置,加上这个就可以了

List<Integer> formatsList = parameters.getSupportedPreviewFormats(); //获取设备支持的预览format
if(formatsList.contains(ImageFormat.NV21))
parameters.setPreviewFormat(ImageFormat.NV21); //设置预览格式为NV21,默认为NV21
if(formatsList.contains(ImageFormat.JPEG))
parameters.setPictureFormat(ImageFormat.JPEG); //设置照片储存格式

‘伍’ 如何在Android上快速显示yuv数据

最近在搞Android方面的视频处理开发,解码出来的都是YUV420格式的数据,如何在surface上高效显示出来,颇费了一点周折,现在总结一下。

思路1:在java中将Surface指针传递到jni层,lock之后就可以获得SurfaceInfo,进而取得要显示的surface格式、高度、宽度,在2.2/2.3版本,surface的Format一般都是RGB565格式,只用做一个颜色空间的转换,scaler就可以将yuv数据显示出来。
颜色空间转换和Scaler算是比较耗时的操作了。如何提高效率,scaler最好能交给android的底层函数去做,如果有gpu的,底层函数直接会利用gpu,效率非常高,又不占用cpu资源。

思路2:
参考framework中的AwesomePlayer,里面利用AwesomeLocalRenderer/AwesomeRemoteRenderer来实现解码出来的数据显示,这个效率应该非常高,但是平台的关联性会增加很多。
调用接口比较简单,
首先创建一个render,
mVideoRenderer = new AwesomeRemoteRenderer(
mClient.interface()->createRenderer(
mISurface, component,
(OMX_COLOR_FORMATTYPE)format,
decodedWidth, decodedHeight,
mVideoWidth, mVideoHeight,
rotationDegrees));
直接调用render函数就可以显示了。
virtual void render(MediaBuffer *buffer) {
void *id;
if (buffer->meta_data()->findPointer(kKeyBufferID, &id)) {
mTarget->render((IOMX::buffer_id)id);
}
}

其它的参数都很容易获得,关键是buffer_id 怎么获得?OMXCodec.cpp中有相关的可以参考。
实际的效果在我的S510E上跑,效率非常高,几乎不占用主控cpu资源,很可能都交给dsp和gpu去搞了。

思路3:
参考 camera的方式。由于在第2步已经取得了非常好的效果,笔者没有做深入研究。

‘陆’ android yuv格式数组怎么判断红色

这些代码都在一个文件里,

变量定义,库加载和jni注册
#include <stdio.h>
#include "JNIHelp.h"

#include <jni.h>
#include <stddef.h>
#include <unistd.h>
#include <limits.h>
#include "types.h"
using namespace android;
static const char *classPathName = "com/example/yuvplayer/YuvStream"; //xia
static sp<Surface> native_surface; //xia

‘柒’ android yuv怎么转换成RGB565

参数分别是宽,高,原数据指针,转化后的目标数据指针。


你找的这个函数是用C写的,而你的save(byte[]yuv420,Stringpath,intwidth,intheight,intquality)是JAVA,因此你要使用JNI。或者你把cvt_420p_to_rgb565函数转成JAVA版。

举个例子使用jni(实际自己测试):

cvt_420p_to_rgb565修改为

#ifdef__cplusplus
extern"C"{
#endif

JNIEXPORTjobjectArrayJNICALL你的包名_类名_cvt420pToRGB565(JNIEnv*env,jobjectobj,jintwidth,jintheight,jcharArraysrcData,jcharArraydstData);
#ifdef__cplusplus
};
#endif

JNIEXPORTjobjectArrayJNICALL你的包名_类名_cvt420pToRGB565(JNIEnv*env,jobjectobj,jintwidth,jintheight,jcharArraysrcData,jcharArraydstData)
{
unsignedchar*src=(unsignedchar*)(env->GetByteArrayElements(srcData,0));
unsignedchar*dst=(unsignedchar*)(env->GetByteArrayElements(dstData,0));

下面照抄!!

‘捌’ Android Camera提取出来的yuv源数据怎么提取y,u,v分量

Android
camera采集到的可以是yuv420sp也可以食yuv420p。我知道yuv420中yuv的分布。现在主要有个前提是从Android
Camera
中采集到的yuv420数据,这个byte[]的长度是一倍的视频宽高乘积,不是1.5倍。在jni里面获取到的长度又确实是1.5倍,但是在jni里面转换为jbyte*
的长度还是1倍,就不知道怎么弄了~
查看原帖>>

‘玖’ android camera 采集到的数据是yuv吗

是,android camera初始采集到的格式是yuv格式的,图像绘制的时候会转换成rgb格式的。

‘拾’ android 怎么设置yuv444

提供个思路。在java中将Surface指针传递到jni层,lock之后就可以获得SurfaceInfo,进而取得要显示的surface格式、高度、宽度,在2.2/2.3版本,surface的Format一般都是RGB565格式,只用做一个颜色空间的转换,scaler就可以将yuv数据显示出来。
颜色空间转换和Scaler算是比较耗时的操作了。如何提高效率,scaler最好能交给android的底层函数去做,如果有gpu的,底层函数直接会利用gpu,效率非常高,又不占用cpu资源。

阅读全文

与androidyuv格式相关的资料

热点内容
php读取word乱码 浏览:753
minicom源码 浏览:1000
海尔冷柜压缩机 浏览:415
联通服务器如何调试信号 浏览:135
stata新命令 浏览:940
单调栈算法python 浏览:605
微信解压游戏怎么下载 浏览:961
忍三服务器不同如何登上账号 浏览:821
php求积 浏览:294
封面命令 浏览:879
手机复制文件夹到另一个文件夹 浏览:992
手游为什么不能统一下服务器 浏览:246
iphone上pdf 浏览:884
window定时python脚本 浏览:64
怎么运行cmd命令行 浏览:366
php中类的继承 浏览:228
openvpnlinux安装配置 浏览:463
PHP7从入门到精通 浏览:27
单片机生日 浏览:500
linux当前进程号 浏览:728