SRB2/android/src/org/srb2/nativecode/Video.java

40 lines
1011 B
Java

package org.srb2.nativecode;
import java.nio.ByteBuffer;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.view.SurfaceHolder;
public class Video {
public static int width = 340;
public static int height = 240;
private SurfaceHolder sh;
public ByteBuffer fb;
public Bitmap bmp;
public Video(SRB2 srb2, SurfaceHolder sh) {
this.sh = sh;
fb = ByteBuffer.allocateDirect(fbSize());
bmp = Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565);
}
private int fbSize() {
// naively assuming RGBA8888 now, even though that is entirely wrong.
// ... well, at least, that's what the Canvas/Bitmap will expect.
return width * height * 4;
}
public void gotFrame() {
Canvas canvas = sh.lockCanvas();
canvas.drawARGB(0xff, 0, 0, 0);
// ugh, an extra copy. the only way to avoid this, I suppose,
// is to use the surface in native code directly.
bmp.copyPixelsFromBuffer(fb);
canvas.drawBitmap(bmp, 0, 0, null);
sh.unlockCanvasAndPost(canvas);
}
}