admin管理员组

文章数量:1287101

public void displayProcess (String path) throws FileNotFoundException {
    rawVideoFile = new FileInputStream(path);
    yuvBuffer = new byte[height * width * 3];
    new Thread(this::playYUVVideo).start();
}

public void playYUVVideo() {
    try {
        while (rawVideoFile.read(yuvBuffer) == yuvBuffer.length){
            //convert YUV to bitmap
            ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
            YuvImage yuvImage = new YuvImage(yuvBuffer, ImageFormat.YCBCR_P010, width, height,null);
            yuvImagepressToJpeg(new Rect(0, 0, width, height), 50, outputStream);
            byte[] imageBytes = outputStream.toByteArray();
            Bitmap bitmap = BitmapFactory.decodeByteArray(imageBytes, 0, imageBytes.length);

            runOnUiThread(() -> mImageView.setImageBitmap(bitmap));
            Thread.sleep(33);
        }
    }catch (Exception e) {
        e.printStackTrace();
    }
}

The log said that : java.lang.IllegalArgumentException: Only ImageFormat.NV21 and ImageFormat.YUY2 are supported. at android.graphics.YuvImagepressToJpeg(YuvImage.java:220) at com.example.hlgplus.MainActivity.playYUVVideo(MainActivity.java:101) at com.example.hlgplus.MainActivity$$ExternalSyntheticLambda3.run(D8$$SyntheticClass:0) at java.lang.Thread.run(Thread.java:1012)

I want to display P010 directly without converting. Please help me. Thank you!

Edit (26/2/2025):

As I searched, there are 2 reasons for that:

  1. YuvImage does not support P010.
  2. BitmapFactory.decodeByteArray just supports JPEG, PNG, WebP. it can't handle 10-bit YUV.

本文标签: How can I display P010 rawvideo data in Android without converting it to another formatsStack Overflow