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

Commit b559b2dd authored by John Hoford's avatar John Hoford
Browse files

add vibrance fix a free in shadows

bug:7234321
Change-Id: I52b1b952fcdc34c23464793621df60aa7e8e00b2
parent 5448bf80
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -32,6 +32,7 @@ LOCAL_SRC_FILES := filters/bw.c \
                   filters/hue.c \
                   filters/shadows.c \
                   filters/hsv.c \
                   filters/vibrance.c \
		   filters/vignette.c

LOCAL_CFLAGS    += -ffast-math -O3 -funroll-loops
+1 −1
Original line number Diff line number Diff line
@@ -34,6 +34,6 @@
     }

     (*env)->ReleaseShortArrayElements(env, vlut, lut, 0);
     free(lut);
     free(hsv);
     AndroidBitmap_unlockPixels(env, bitmap);
 }

jni/filters/vibrance.c

0 → 100644
+62 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2012 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#include <math.h>
#include "filters.h"

void JNIFUNCF(ImageFilterVibrance, nativeApplyFilter, jobject bitmap, jint width, jint height,  jfloat vibrance)
{
    char* destination = 0;
    AndroidBitmap_lockPixels(env, bitmap, (void**) &destination);
    int i;
    int len = width * height * 4;
    float Rf = 0.2999f;
    float Gf = 0.587f;
    float Bf = 0.114f;
    float Vib = vibrance/100.f;
    float S  = Vib+1;
    float MS = 1.0f - S;
    float Rt = Rf * MS;
    float Gt = Gf * MS;
    float Bt = Bf * MS;
    float R, G, B;
    for (i = 0; i < len; i+=4)
    {
        int r = destination[RED];
        int g = destination[GREEN];
        int b = destination[BLUE];
        float red = (r-MAX(g, b))/256.f;
        float sx = (float)(Vib/(1+exp(-red*3)));
        S = sx+1;
        MS = 1.0f - S;
        Rt = Rf * MS;
        Gt = Gf * MS;
        Bt = Bf * MS;
        int t = (r + g) / 2;
        R = r;
        G = g;
        B = b;

        float Rc = R * (Rt + S) + G * Gt + B * Bt;
        float Gc = R * Rt + G * (Gt + S) + B * Bt;
        float Bc = R * Rt + G * Gt + B * (Bt + S);

        destination[RED] = CLAMP(Rc);
        destination[GREEN] = CLAMP(Gc);
        destination[BLUE] = CLAMP(Bc);
    }
    AndroidBitmap_unlockPixels(env, bitmap);
}
+6 −6
Original line number Diff line number Diff line
@@ -804,14 +804,14 @@ public class FilterShowActivity extends Activity implements OnItemClickListener,
                mImageShow.setVisibility(View.VISIBLE);
                mImageShow.setShowControls(true);
                ImagePreset preset = mImageShow.getImagePreset();
                ImageFilter filter = preset.getFilter("Shadows");
                ImageFilter filter = preset.getFilter("Vibrance");
                if (filter == null) {
                    ImageFilterShadows contrast = new ImageFilterShadows();
                    ImageFilterVibrance contrast = new ImageFilterVibrance();
                    ImagePreset copy = new ImagePreset(preset);
                    copy.add(contrast);
                    copy.setHistoryName(contrast.getName());
                    copy.setIsFx(false);
                    filter = copy.getFilter("Shadows");
                    filter = copy.getFilter("Vibrance");
                    mImageShow.setImagePreset(copy);
                }
                mImageShow.setCurrentFilter(filter);
@@ -856,14 +856,14 @@ public class FilterShowActivity extends Activity implements OnItemClickListener,
                mImageShow.setVisibility(View.VISIBLE);
                mImageShow.setShowControls(true);
                ImagePreset preset = mImageShow.getImagePreset();
                ImageFilter filter = preset.getFilter("Hue");
                ImageFilter filter = preset.getFilter("Shadows");
                if (filter == null) {
                    ImageFilterHue contrast = new ImageFilterHue();
                    ImageFilterShadows contrast = new ImageFilterShadows();
                    ImagePreset copy = new ImagePreset(preset);
                    copy.add(contrast);
                    copy.setHistoryName(contrast.getName());
                    copy.setIsFx(false);
                    filter = copy.getFilter("Hue");
                    filter = copy.getFilter("Shadows");
                    mImageShow.setImagePreset(copy);
                }
                mImageShow.setCurrentFilter(filter);
+22 −0
Original line number Diff line number Diff line

package com.android.gallery3d.filtershow.filters;

import android.graphics.Bitmap;

public class ImageFilterVibrance extends ImageFilter {

    public ImageFilterVibrance() {
        mName = "Vibrance";
    }

    native protected void nativeApplyFilter(Bitmap bitmap, int w, int h, float bright);

    @Override
    public void apply(Bitmap bitmap) {
        int w = bitmap.getWidth();
        int h = bitmap.getHeight();
        int p = mParameter;
        float value = p;
        nativeApplyFilter(bitmap, w, h, value);
    }
}