Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a8dfe557 authored by Mark Harman's avatar Mark Harman
Browse files

Resync (fix sorting code for using hi_value); update sortLuminanceInfo for this.

parent 052e7a93
Loading
Loading
Loading
Loading
+38 −5
Original line number Diff line number Diff line
@@ -1856,6 +1856,14 @@ public class HDRProcessor {
                sort_cb.sortOrder(sort_order);
            }
        }
        /*{
            // test
            for(int i = 0; i < luminanceInfos.length-1; i++) {
                if( luminanceInfos[i].compareTo(luminanceInfos[i+1]) == 0 ) {
                    throw new RuntimeException("this: " + luminanceInfos[i] + " , that: " + luminanceInfos[i+1]);
                }
            }
        }*/

        int median_brightness = -1;
        if( use_mtb ) {
@@ -2174,18 +2182,20 @@ public class HDRProcessor {
    public static class LuminanceInfo implements Comparable<LuminanceInfo> {
        final int min_value;
        final int median_value;
        final int hi_value;
        final boolean noisy;

        public LuminanceInfo(int min_value, int median_value, boolean noisy) {
        public LuminanceInfo(int min_value, int median_value, int hi_value, boolean noisy) {
            this.min_value = min_value;
            this.median_value = median_value;
            this.hi_value = hi_value;
            this.noisy = noisy;
        }

        @Override
        @NonNull
        public String toString() {
            return "min: " + min_value + " , median: " + median_value + " , noisy: " + noisy;
            return "min: " + min_value + " , median: " + median_value + " , hi: " + hi_value + " , noisy: " + noisy;
        }

        @Override
@@ -2195,6 +2205,10 @@ public class HDRProcessor {
                // fall back to using min_value
                value = this.min_value - o.min_value;
            }
            if( value == 0 ) {
                // fall back to using hi_value
                value = this.hi_value - o.hi_value;
            }
            return value;
        }
    }
@@ -2243,7 +2257,26 @@ public class HDRProcessor {
        int middle = total/2;
        int count = 0;
        boolean noisy = false;
        int min_value = -1;
        int min_value = -1, hi_value = -1;
        // first count backwards to get hi_value
        for(int i=255;i>=0;i--) {
            /*if( histo[i] > 0 ) {
                if( MyDebug.LOG )
                    Log.d(TAG, "max luminance " + i);
                max_value = i;
                break;
            }*/
            count += histo[i];
            if( count >= total/10 ) {
                if( MyDebug.LOG )
                    Log.d(TAG, "hi luminance " + i);
                hi_value = i;
                break;
            }
        }

        // then count forwards to get min and median values
        count = 0;
        for(int i=0;i<256;i++) {
            count += histo[i];
            if( min_value == -1 && histo[i] > 0 ) {
@@ -2278,11 +2311,11 @@ public class HDRProcessor {
                        Log.d(TAG, "too dark/noisy");
                    noisy = true;
                }
                return new LuminanceInfo(min_value, i, noisy);
                return new LuminanceInfo(min_value, i, hi_value, noisy);
            }
        }
        Log.e(TAG, "computeMedianLuminance failed");
        return new LuminanceInfo(min_value, 127, true);
        return new LuminanceInfo(min_value, 127, hi_value, true);
    }

    @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
+34 −15
Original line number Diff line number Diff line
@@ -881,9 +881,9 @@ public class UnitTest {
        List<HDRProcessor.LuminanceInfo> luminanceInfosSorted;

        luminanceInfos.clear();
        luminanceInfos.add(new HDRProcessor.LuminanceInfo(0, 64, false));
        luminanceInfos.add(new HDRProcessor.LuminanceInfo(16, 80, false));
        luminanceInfos.add(new HDRProcessor.LuminanceInfo(33, 116, false));
        luminanceInfos.add(new HDRProcessor.LuminanceInfo(0, 64, 255, false));
        luminanceInfos.add(new HDRProcessor.LuminanceInfo(16, 80, 255, false));
        luminanceInfos.add(new HDRProcessor.LuminanceInfo(33, 116, 255, false));
        luminanceInfosSorted = new ArrayList<>(luminanceInfos);
        Collections.sort(luminanceInfosSorted);
        assertEquals(luminanceInfos.size(), luminanceInfosSorted.size());
@@ -892,9 +892,9 @@ public class UnitTest {
        assertEquals(luminanceInfos.get(2), luminanceInfosSorted.get(2));

        luminanceInfos.clear();
        luminanceInfos.add(new HDRProcessor.LuminanceInfo(16, 80, false));
        luminanceInfos.add(new HDRProcessor.LuminanceInfo(0, 64, false));
        luminanceInfos.add(new HDRProcessor.LuminanceInfo(33, 116, false));
        luminanceInfos.add(new HDRProcessor.LuminanceInfo(16, 80,255, false));
        luminanceInfos.add(new HDRProcessor.LuminanceInfo(0, 64, 255, false));
        luminanceInfos.add(new HDRProcessor.LuminanceInfo(33, 116, 255, false));
        luminanceInfosSorted = new ArrayList<>(luminanceInfos);
        Collections.sort(luminanceInfosSorted);
        assertEquals(luminanceInfos.size(), luminanceInfosSorted.size());
@@ -903,9 +903,9 @@ public class UnitTest {
        assertEquals(luminanceInfos.get(2), luminanceInfosSorted.get(2));

        luminanceInfos.clear();
        luminanceInfos.add(new HDRProcessor.LuminanceInfo(33, 116, false));
        luminanceInfos.add(new HDRProcessor.LuminanceInfo(0, 64, false));
        luminanceInfos.add(new HDRProcessor.LuminanceInfo(16, 80, false));
        luminanceInfos.add(new HDRProcessor.LuminanceInfo(33, 116, 255, false));
        luminanceInfos.add(new HDRProcessor.LuminanceInfo(0, 64, 255, false));
        luminanceInfos.add(new HDRProcessor.LuminanceInfo(16, 80, 255, false));
        luminanceInfosSorted = new ArrayList<>(luminanceInfos);
        Collections.sort(luminanceInfosSorted);
        assertEquals(luminanceInfos.size(), luminanceInfosSorted.size());
@@ -915,9 +915,9 @@ public class UnitTest {

        // case that requires using min value as well as median value
        luminanceInfos.clear();
        luminanceInfos.add(new HDRProcessor.LuminanceInfo(93, 255, false));
        luminanceInfos.add(new HDRProcessor.LuminanceInfo(68, 255, false));
        luminanceInfos.add(new HDRProcessor.LuminanceInfo(17, 193, false));
        luminanceInfos.add(new HDRProcessor.LuminanceInfo(93, 255, 255, false));
        luminanceInfos.add(new HDRProcessor.LuminanceInfo(68, 255, 255, false));
        luminanceInfos.add(new HDRProcessor.LuminanceInfo(17, 193, 255, false));
        luminanceInfosSorted = new ArrayList<>(luminanceInfos);
        Collections.sort(luminanceInfosSorted);
        assertEquals(luminanceInfos.size(), luminanceInfosSorted.size());
@@ -927,14 +927,33 @@ public class UnitTest {

        // case that should never use min value
        luminanceInfos.clear();
        luminanceInfos.add(new HDRProcessor.LuminanceInfo(60, 255, false));
        luminanceInfos.add(new HDRProcessor.LuminanceInfo(70, 240, false));
        luminanceInfos.add(new HDRProcessor.LuminanceInfo(80, 95, false));
        luminanceInfos.add(new HDRProcessor.LuminanceInfo(60, 255, 255, false));
        luminanceInfos.add(new HDRProcessor.LuminanceInfo(70, 240, 255, false));
        luminanceInfos.add(new HDRProcessor.LuminanceInfo(80, 95, 255, false));
        luminanceInfosSorted = new ArrayList<>(luminanceInfos);
        Collections.sort(luminanceInfosSorted);
        assertEquals(luminanceInfos.size(), luminanceInfosSorted.size());
        assertEquals(luminanceInfos.get(2), luminanceInfosSorted.get(0));
        assertEquals(luminanceInfos.get(1), luminanceInfosSorted.get(1));
        assertEquals(luminanceInfos.get(0), luminanceInfosSorted.get(2));

        // case that requires using hi value as well as median and min values
        luminanceInfos.clear();
        luminanceInfos.add(new HDRProcessor.LuminanceInfo(17, 31, 100, false));
        luminanceInfos.add(new HDRProcessor.LuminanceInfo(34, 127, 255, false));
        luminanceInfos.add(new HDRProcessor.LuminanceInfo(93, 255, 255, false));
        luminanceInfos.add(new HDRProcessor.LuminanceInfo(68, 255, 255, false));
        luminanceInfos.add(new HDRProcessor.LuminanceInfo(0, 0, 90, false));
        luminanceInfos.add(new HDRProcessor.LuminanceInfo(0, 0, 80, false));
        luminanceInfosSorted = new ArrayList<>(luminanceInfos);
        Collections.sort(luminanceInfosSorted);
        assertEquals(luminanceInfos.size(), luminanceInfosSorted.size());
        assertEquals(luminanceInfos.get(5), luminanceInfosSorted.get(0));
        assertEquals(luminanceInfos.get(4), luminanceInfosSorted.get(1));
        assertEquals(luminanceInfos.get(0), luminanceInfosSorted.get(2));
        assertEquals(luminanceInfos.get(1), luminanceInfosSorted.get(3));
        assertEquals(luminanceInfos.get(3), luminanceInfosSorted.get(4));
        assertEquals(luminanceInfos.get(2), luminanceInfosSorted.get(5));

    }
}