本文主要是介绍Android用surface直接显示yuv数据(三),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
本文用Java创建UI并联合JNI层操作surface来直接显示yuv数据(yv12),开发环境为Android 4.4,全志A23平台。
package com.example.myyuvviewer;import java.io.File;
import java.io.FileInputStream;
import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.Surface;
import android.view.SurfaceHolder;
import android.view.SurfaceHolder.Callback;
import android.view.SurfaceView;public class MainActivity extends Activity {final private String TAG = "MyYUVViewer";final private String FILE_NAME = "yuv_320_240.yuv";private int width = 320;private int height = 240;private int size = width * height * 3/2;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);nativeTest();SurfaceView surfaceview = (SurfaceView) findViewById(R.id.surfaceView);SurfaceHolder holder = surfaceview.getHolder();holder.addCallback(new Callback(){@Overridepublic void surfaceCreated(SurfaceHolder holder) {// TODO Auto-generated method stubLog.d(TAG,"surfaceCreated");byte[]yuvArray = new byte[size];readYUVFile(yuvArray, FILE_NAME);nativeSetVideoSurface(holder.getSurface());nativeShowYUV(yuvArray,width,height);}@Overridepublic void surfaceChanged(SurfaceHolder holder, int format,int width, int height) {// TODO Auto-generated method stub}@Overridepublic void surfaceDestroyed(SurfaceHolder holder) {// TODO Auto-generated method stub}});}private boolean readYUVFile(byte[] yuvArray,String filename){try {// 如果手机插入了SD卡,而且应用程序具有访问SD的权限if (En
这篇关于Android用surface直接显示yuv数据(三)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!