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

Commit 6aea6b7f authored by nicolasroard's avatar nicolasroard
Browse files

Fix ImagePreset handling

- fix border ordering
- fix Fx apply

Change-Id: Icf407431a77e150d255d416b983dacb8df5f73fb
parent ef8d4d2c
Loading
Loading
Loading
Loading
+0 −51
Original line number Diff line number Diff line
@@ -424,57 +424,6 @@ public class CachingPipeline implements PipelineInterface {
        mEnvironment.cache(result);
    }

    public synchronized void computeOld(SharedBuffer buffer, ImagePreset preset, int type) {
        synchronized (CachingPipeline.class) {
            if (getRenderScriptContext() == null) {
                return;
            }
            if (DEBUG) {
                Log.v(LOGTAG, "compute preset " + preset);
                preset.showFilters();
            }

            String thread = Thread.currentThread().getName();
            long time = System.currentTimeMillis();
            setupEnvironment(preset, false);
            mFiltersManager.freeFilterResources(preset);

            Bitmap resizedOriginalBitmap = mResizedOriginalBitmap;
            if (updateOriginalAllocation(preset) || buffer.getProducer() == null) {
                resizedOriginalBitmap = mResizedOriginalBitmap;
                buffer.setProducer(resizedOriginalBitmap);
                mEnvironment.cache(buffer.getProducer());
            }

            Bitmap bitmap = buffer.getProducer().getBitmap();
            long time2 = System.currentTimeMillis();

            if (bitmap == null || (bitmap.getWidth() != resizedOriginalBitmap.getWidth())
                    || (bitmap.getHeight() != resizedOriginalBitmap.getHeight())) {
                mEnvironment.cache(buffer.getProducer());
                buffer.setProducer(resizedOriginalBitmap);
                bitmap = buffer.getProducer().getBitmap();
            }
            mOriginalAllocation.copyTo(bitmap);

            Bitmap tmpbitmap = preset.apply(bitmap, mEnvironment);
            if (tmpbitmap != bitmap) {
                mEnvironment.cache(buffer.getProducer());
                buffer.setProducer(tmpbitmap);
            }

            mFiltersManager.freeFilterResources(preset);

            time = System.currentTimeMillis() - time;
            time2 = System.currentTimeMillis() - time2;
            if (DEBUG) {
                Log.v(LOGTAG, "Applying type " + type + " filters to bitmap "
                        + bitmap + " (" + bitmap.getWidth() + " x " + bitmap.getHeight()
                        + ") took " + time + " ms, " + time2 + " ms for the filter, on thread " + thread);
            }
        }
    }

    public boolean needsRepaint() {
        SharedBuffer buffer = MasterImage.getImage().getPreviewBuffer();
        return buffer.checkRepaintNeeded();
+29 −5
Original line number Diff line number Diff line
@@ -347,12 +347,22 @@ public class ImagePreset {
    public void addFilter(FilterRepresentation representation) {
        if (representation instanceof FilterUserPresetRepresentation) {
            ImagePreset preset = ((FilterUserPresetRepresentation) representation).getImagePreset();
            // user preset replace everything but geometry
            if (preset.nbFilters() == 1
                && preset.contains(FilterRepresentation.TYPE_FX)) {
                FilterRepresentation rep = preset.getFilterRepresentationForType(
                        FilterRepresentation.TYPE_FX);
                removeFilter(rep);
                if (!isNoneBorderFilter(rep)) {
                    mFilters.add(rep);
                }
            } else {
                // user preset replaces everything
                mFilters.clear();
                for (int i = 0; i < preset.nbFilters(); i++) {
                    addFilter(preset.getFilterRepresentation(i));
                }
                mFilters.add(representation);
            }
        } else if (representation.getFilterType() == FilterRepresentation.TYPE_GEOMETRY) {
            // Add geometry filter, removing duplicates and do-nothing operations.
            for (int i = 0; i < mFilters.size(); i++) {
@@ -426,6 +436,20 @@ public class ImagePreset {
        } else {
            mFilters.add(representation);
        }
        // Enforces Filter type ordering for borders
        FilterRepresentation border = null;
        for (int i = 0; i < mFilters.size();) {
            FilterRepresentation rep = mFilters.elementAt(i);
            if (rep.getFilterType() == FilterRepresentation.TYPE_BORDER) {
                border = rep;
                mFilters.remove(i);
                continue;
            }
            i++;
        }
        if (border != null) {
            mFilters.add(border);
        }
    }

    private boolean isNoneBorderFilter(FilterRepresentation representation) {