日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

YV12toI420 yuv420、NV12、YV12相互转换

發布時間:2023/12/8 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 YV12toI420 yuv420、NV12、YV12相互转换 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在錄像時設置了YV12要保存圖片時

YUV420P、I420、NV12、YV12格式轉NV12保存圖片
GLSurfaceView implements SurfaceHolder.Callback, Camera.PreviewCallback {

Camera.Parameters parameters = camera.getParameters();
parameters.setPreviewFormat(ImageFormat.YV12);
在使用camera設置為YV12或者NV12時要轉換時所用的工具

FileClientSender fileSender;UDPClientSender udpSender;private ExecutorService executorService;//如果是其他頁面進來的則只顯示public static boolean isAll = true;boolean isOpen = false;//false 為已打開如果是顯示的則不用在設置Visibility@Overridepublic void onPreviewFrame(final byte[] data, final Camera camera) {// executorService.execute(new Runnable() { // @Override // public void run() { // YuvUtils.scaleAndRotateYV12ToI420(data, h264, // PREVIEW_WIDTH, // PREVIEW_HEIGHT, 0, 504, 896);// // 獲取到一幀預覽數據 // // 將yv12的幀轉化為h254的幀final int ret = avcCodec.offerEncoder(data, h264);// 發送h264數據new Thread(new Runnable() {@Overridepublic void run() {if (MainActivity.client != null) {udpSender.send(h264, ret);}}}).start();if (isAll) {if (isOpen) {customSurfaceView.setVisibility(VISIBLE);isOpen = false;}new Thread(new Runnable() {@Overridepublic void run() {fileSender.send(h264, ret);}}).start();// } // });new Thread(new Runnable() {@Overridepublic void run() {long l = System.currentTimeMillis();if (keybs) {uploodTask(data, l);} else {if (uploadInt == 20) {uploodTask(data, l);uploadInt = 0;} else {uploadInt++;}}}}).start();}camera.addCallbackBuffer(data);}int uploadInt = 0;public boolean keybs = false;@SuppressLint("NewApi")private void uploodTask(final byte[] data, final long l) {new AsyncTask<String, Void, Boolean>() {@Overrideprotected Boolean doInBackground(String... params) { /*傳遞多個String參數*/// ?如果你輸出格式是nv21 或者 yuy2 轉圖片 /**照相后的保存路徑*/File file = new File(SavaFileNameUtil.getImageRoot() +SavaFileNameUtil.getCaptureImageName(Config.USER_NUMBER));// ?如果你輸出格式是nv21 或者 yuy2 轉圖片try {byte[] NV21 = new byte[MAX_SEND_SIZE];Yuv.YV12toNV21(data, NV21, PREVIEW_WIDTH, PREVIEW_HEIGHT);Bitmap bmp = Yuv.NV21ToBitmap(NV21, PREVIEW_WIDTH, PREVIEW_HEIGHT);//得到long類型當前時間//new日期對象Date date = new Date(l);//轉換提日期輸出格式SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");bmp = createWaterMark(bmp, null, dateFormat.format(date));FileOutputStream outStream = new FileOutputStream(file);bmp.compress(Bitmap.CompressFormat.JPEG, 100, outStream);outStream.close();LogUtils.e(TAG + "======================Ftp4jUtil", "圖片寫入完成----------------------------------");if (keybs) {//點擊拍照上傳upload(file, ftpPath, null, false);keybs = false;} else {//自動上傳upload(file, ftpPath + "_auto", null, false);}} catch (Exception e) {e.printStackTrace();LogUtils.e(TAG, "Ftp4jUtil圖片寫入出現異常", e);}return true;}// @Override // protected void onPostExecute(Boolean isSuccess) { // if (isSuccess) { // //耗時操作成功后的操作 // } else { // //打印錯誤 // } // }}.execute(""); /*傳遞參數*/}

如果要保存圖片,或著保存視頻時使用的一個工具類
YUV420P、I420、NV12、YV12格式轉NV12保存圖片
// 將yv12的幀轉化為h254的幀
?如果你輸出格式是nv21 或者 yuy2 轉圖片

YUV420P、YV12、NV12、YV12格式轉NV12保存圖片

總結

以上是生活随笔為你收集整理的YV12toI420 yuv420、NV12、YV12相互转换的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。