android: lcd_update/_rect() changes

* rename some java methods (to update(), initialize())
* re-create the ByteBuffer object from the framebuffer on every update.
  This is needed now since 2c71aa9 added the possiblity for lcd_framebuffer to change.
* do so, along with the creation of the dirty Rect object, in native code.

Change-Id: Id39ea8e4b6148987c5f216a87e0ff3c8e7babe92
This commit is contained in:
Thomas Martitz 2012-03-22 23:00:53 +01:00
parent 6e6f0c6ef3
commit 901521d6de
2 changed files with 42 additions and 29 deletions

View file

@ -39,7 +39,6 @@ public class RockboxFramebuffer extends SurfaceView
{
private final DisplayMetrics metrics;
private final ViewConfiguration view_config;
private ByteBuffer native_buf;
private Bitmap btm;
/* first stage init; needs to run from a thread that has a Looper
@ -47,7 +46,6 @@ public class RockboxFramebuffer extends SurfaceView
public RockboxFramebuffer(Context c)
{
super(c);
metrics = c.getResources().getDisplayMetrics();
view_config = ViewConfiguration.get(c);
getHolder().addCallback(this);
@ -61,18 +59,17 @@ public class RockboxFramebuffer extends SurfaceView
/* second stage init; called from Rockbox with information about the
* display framebuffer */
private void java_lcd_init(int lcd_width, int lcd_height, ByteBuffer native_fb)
private void initialize(int lcd_width, int lcd_height)
{
btm = Bitmap.createBitmap(lcd_width, lcd_height, Bitmap.Config.RGB_565);
native_buf = native_fb;
setEnabled(true);
}
private void java_lcd_update()
private void update(ByteBuffer framebuffer)
{
SurfaceHolder holder = getHolder();
Canvas c = holder.lockCanvas(null);
btm.copyPixelsFromBuffer(native_buf);
Canvas c = holder.lockCanvas();
btm.copyPixelsFromBuffer(framebuffer);
synchronized (holder)
{ /* draw */
c.drawBitmap(btm, 0.0f, 0.0f, null);
@ -80,14 +77,12 @@ public class RockboxFramebuffer extends SurfaceView
holder.unlockCanvasAndPost(c);
}
private void java_lcd_update_rect(int x, int y, int width, int height)
private void update(ByteBuffer framebuffer, Rect dirty)
{
SurfaceHolder holder = getHolder();
Rect dirty = new Rect(x, y, x+width, y+height);
Canvas c = holder.lockCanvas(dirty);
/* can't copy a partial buffer,
* but it doesn't make a noticeable difference anyway */
btm.copyPixelsFromBuffer(native_buf);
/* can't copy a partial buffer, but it doesn't make a noticeable difference anyway */
btm.copyPixelsFromBuffer(framebuffer);
synchronized (holder)
{ /* draw */
c.drawBitmap(btm, dirty, dirty, null);