[prev in list] [next in list] [prev in thread] [next in thread] 

List:       openjdk-openjfx-dev
Subject:    Re: [Integrated] RFR: 8227425: Add support for e-paper displays on i.MX6 devices
From:       John Neffenger <github.com+1413266+jgneff () openjdk ! java ! net>
Date:       2020-04-29 17:30:43
Message-ID: 2xwMvyvFpmgexAff0_OqdufGQu-ydnECt7hDfOwSKMo=.71ca225e-cc7a-4c90-92fc-e2326ce7ed9c () github ! com
[Download RAW message or body]

On Thu, 5 Dec 2019 00:06:21 GMT, John Neffenger \
<github.com+1413266+jgneff@openjdk.org> wrote:

> This pull request adds support for e-paper displays with the i.MX 6 Series of \
> Applications Processors and implements [Issue \
> #521](https://github.com/javafxports/openjdk-jfx/issues/521) in the obsolete \
> *javafxports/openjdk-jfx* repository. Some of the changes were made to support the \
> new device models, while others are minor changes to the existing support in JavaFX \
>                 13.  The following changes were made to support the new device \
>                 models.
> * Work around problems on the Kobo Glo HD Model N437.
> 
> Ignore the error ENOTTY (25), "Inappropriate ioctl for device," when setting the \
> waveform modes. The IOCTL call is ignored by the driver on the Kobo Glo HD where \
> the error occurs, anyway. 
> Use the visible y-resolution (`yres`), not the virtual y-resolution \
> (`yres_virtual`), when calculating the capacity of the off-screen byte buffer and \
> the length of the frame buffer mapping. The virtual y-resolution reported by the \
> frame buffer device driver can be an incorrect value.
> 
> * Work around problems on the Kobo Clara HD Model N249.
> 
> The Kobo Clara HD requires the native screen width to be set to the visible \
> x-resolution (`xres`), instead than the normal virtual x-resolution \
> (`xres_virtual`), when using an unrotated and uninverted 8-bit grayscale frame \
> buffer. The work-around is provided through a new Boolean system property called \
> *monocle.epd.fixWidthY8UR*. 
> The following changes were made to the existing code that supports e-paper displays \
> in JavaFX 13. 
> * Use the correct constant for the number of bytes per pixel.
> 
> Use the number of bytes per pixel (`Integer.BYTES`), not the number of bits per \
> pixel (`Integer.SIZE`), when calculating the capacity of the 32-bit off-screen byte \
> buffer. 
> * Do not round the luma value to the nearest integer.
> 
> Use the value of luma rounded toward zero automatically by Java when converting a \
> `float` to an `int` instead of rounding to the nearest integer. The additional \
> rounding operation can decrease performance anywhere from zero to 10 percent and \
> doesn't seem worth it for a display with just 16 levels of gray. 
> * Change camel case of system property *y8inverted*.
> 
> Change the camel case of the system property *monocle.epd.y8inverted* to the form \
> *monocle.epd.Y8Inverted* so that it is consistent with the other system properties \
> containing Y1, Y4, and Y8 in their names. 
> * Improve error handling when mapping the frame buffer.
> 
> Log the mapping and unmapping of the frame buffer. Log any errors that occur on \
> either of the system calls. Handle a `null` return value from \
> `EPDFrameBuffer.getMappedBuffer`. 
> * Replace non-ASCII characters with their ASCII equivalent.
> 
> Replace non-ASCII characters in comments and log messages as follows:
> 
> * "×" with "x" for display resolution and color depth,
> * "×" with "*" for multiplication,
> * "→" with "to" for transition, and
> * " °C" with "degrees Celsius" for temperature.
> 
> * Add descriptions to Monocle EPD system properties.
> 
> Add Javadoc comments to each constant that defines a Monocle EPD system property.
> 
> * Rename `IntStructure.getInteger` to `IntStructure.get`.
> 
> Rename the methods `getInteger` and `setInteger` in `IntStructure` to avoid \
> confusion with the Java method `Integer.getInteger`, which gets the integer value \
> of a system property. 
> Below are some of the more interesting test results.
> 
> * The Kobo Glo HD and Kobo Clara HD implement a true GC4 waveform mode that \
> displays only pixels with the four gray values `0x00`, `0x55`, `0xAA`, and `0xFF`. \
> On the older Kobo Touch models, the GC4 waveform mode is the same as GC16. 
> * When the *forceMonochrome* update flag is enabled, the Kobo Clara HD uses a \
> zero-percent threshold that displays black for pixels with the value `0x00` and \
> white for all other values. The other models use a 50-percent threshold that \
> displays black for values `0x7F` or less and white for values `0x80` or greater. 
> * The OpenJDK 11 package in Ubuntu 18.04 LTS runs twice as fast as the AdoptOpenJDK \
> build of OpenJDK 13 for some of the tests. The speed difference is greatest for the \
> tests that require pixel conversion into an 8-bit or 16-bit frame buffer. I plan to \
> investigate the cause of the performance difference. 
> * In general, the faster processor and memory bus of the newer models does not \
> fully compensate for the threefold increase in the number of pixels in their \
> displays. The table below shows the animation speed of each model in milliseconds \
> per frame and frames per second. 
> > Product Name  | Speed (ms) | Rate (fps) |
> > ------------- |:----------:|:----------:|
> > Kobo Touch B  | 125        | 8.0        |
> > Kobo Touch C  | 130        | 7.7        |
> > Kobo Glo HD   | 140        | 7.1        |
> > Kobo Clara HD | 145        | 6.9        |

This pull request has now been integrated.

Changeset: 66c3b385
Author:    John Neffenger <john@status6.com>
Committer: Kevin Rushforth <kcr@openjdk.org>
URL:       https://git.openjdk.java.net/jfx/commit/66c3b385
Stats:     238 lines in 7 files changed: 2 ins; 193 del; 43 mod

8227425: Add support for e-paper displays on i.MX6 devices

Reviewed-by: jvos, kcr

-------------

PR: https://git.openjdk.java.net/jfx/pull/60


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic