content: package com.hm.videoedit.mediacodec;
  
  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;
  
  /**
   * Created by 海米 on 2018/9/12.
   */
  
  public class FastYUVtoRGB {
      private RenderScript rs;
      private ScriptIntrinsicYuvToRGB yuvToRgbIntrinsic;
      private Type.Builder yuvType, rgbaType;
      private Allocation in, out;
      public FastYUVtoRGB(Context context){
          rs = RenderScript.create(context);
          yuvToRgbIntrinsic = ScriptIntrinsicYuvToRGB.create(rs, Element.U8_4(rs));
      }
      public Bitmap convertYUVtoRGB(byte[] yuvData, int width, int height){
          if (yuvType == null){
              yuvType = new Type.Builder(rs, Element.U8(rs)).setX(yuvData.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(yuvData);
          yuvToRgbIntrinsic.setInput(in);
          yuvToRgbIntrinsic.forEach(out);
          Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
          out.copyTo(bitmap);
          return bitmap;
      }
  }
  