package com.baidu.facelibrary.rd;
|
|
/**
|
* @author huwwds on 2022/01/20
|
*/
|
|
import android.content.Context;
|
import android.graphics.Bitmap;
|
import android.renderscript.Allocation;
|
import android.renderscript.Element;
|
import android.renderscript.RenderScript;
|
import android.renderscript.ScriptIntrinsicYuvToRGB;
|
import android.renderscript.Type;
|
|
public class NV21ToBitmap {
|
|
private RenderScript rs;
|
private ScriptIntrinsicYuvToRGB yuvToRgbIntrinsic;
|
private Type.Builder yuvType, rgbaType;
|
private Allocation in, out;
|
|
public NV21ToBitmap(Context context) {
|
rs = RenderScript.create(context);
|
yuvToRgbIntrinsic = ScriptIntrinsicYuvToRGB.create(rs, Element.U8_4(rs));
|
}
|
|
public Bitmap nv21ToBitmap(byte[] nv21, int width, int height) {
|
if (yuvType == null) {
|
yuvType = new Type.Builder(rs, Element.U8(rs)).setX(nv21.length);
|
in = Allocation.createTyped(rs, yuvType.create(), Allocation.USAGE_SCRIPT);
|
|
rgbaType = new Type.Builder(rs, Element.RGBA_8888(rs)).setX(width).setY(height);
|
out = Allocation.createTyped(rs, rgbaType.create(), Allocation.USAGE_SCRIPT);
|
}
|
|
in.copyFrom(nv21);
|
|
yuvToRgbIntrinsic.setInput(in);
|
yuvToRgbIntrinsic.forEach(out);
|
|
Bitmap bmpout = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
|
out.copyTo(bmpout);
|
|
return bmpout;
|
|
}
|
|
}
|