Use Tree Navigation
public final class

Shared

extends Object
/*
 * Copyright (C) 2009 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.
 */


package com.cooliris.media;

import android.graphics.Color;
import android.media.ExifInterface;

public final class Shared {
   
// Constants.
   
public static final int INVALID = -1;
   
public static final int INFINITY = Integer.MAX_VALUE;

   
public static int argb(float a, float r, float g, float b) {
       
return Color.argb((int) (a * 255f), (int) (r * 255f), (int) (g * 255f), (int) (b * 255f));
   
}

   
public static boolean isPowerOf2(int n) {
       
return (n & -n) == n;
   
}

   
/**
     * @param i
     *            : running variable
     * @return 0, +1, -1, +2, -2, +3, -3 ..
     */

   
public static int midPointIterator(int i) {
       
if (i != 0) {
           
int tick = ((i - 1) / 2) + 1;
           
int pass = ((i - 1) % 2 == 0) ? 1 : -1;
           
return tick * pass;
       
}
       
return 0;
   
}

   
public static int nextPowerOf2(int n) {
        n
-= 1;
        n
|= n >>> 16;
        n
|= n >>> 8;
        n
|= n >>> 4;
        n
|= n >>> 2;
        n
|= n >>> 1;
       
return n + 1;
   
}

   
public static int prevPowerOf2(int n) {
       
if (isPowerOf2(n)) {
           
return nextPowerOf2(n);
       
} else {
           
return nextPowerOf2(n) - 1;
       
}
   
}

   
public static int clamp(int value, int min, int max) {
       
if (value < min) {
            value
= min;
       
} else if (value > max) {
            value
= max;
       
}
       
return value;
   
}

   
public static long clamp(long value, long min, long max) {
       
if (value < min) {
            value
= min;
       
} else if (value > max) {
            value
= max;
       
}
       
return value;
   
}

   
public static float scaleToFit(float srcWidth, float srcHeight, float outerWidth, float outerHeight, boolean clipToFit) {
       
float scaleX = outerWidth / srcWidth;
       
float scaleY = outerHeight / srcHeight;
       
return (clipToFit ? scaleX > scaleY : scaleX < scaleY) ? scaleX : scaleY;
   
}

   
// Returns an angle between 0 and 360 degrees independent of the input
   
// angle.
   
public static float normalizePositive(float angleToRotate) {
       
if (angleToRotate == 0.0f) {
           
return 0.0f;
       
}
       
float nf = (angleToRotate / 360.0f);
       
int n = 0;
       
if (angleToRotate < 0) {
            n
= (int) (nf - 1.0f);
       
} else if (angleToRotate > 360) {
            n
= (int) (nf);
       
}
        angleToRotate
-= (n * 360.0f);
       
if (angleToRotate == 360.0f) {
            angleToRotate
= 0;
       
}
       
return angleToRotate;
   
}

   
public static int degreesToExifOrientation(float normalizedAngle) {
       
if (normalizedAngle == 0.0f) {
           
return ExifInterface.ORIENTATION_NORMAL;
       
} else if (normalizedAngle == 90.0f) {
           
return ExifInterface.ORIENTATION_ROTATE_90;
       
} else if (normalizedAngle == 180.0f) {
           
return ExifInterface.ORIENTATION_ROTATE_180;
       
} else if (normalizedAngle == 270.0f) {
           
return ExifInterface.ORIENTATION_ROTATE_270;
       
}
       
return ExifInterface.ORIENTATION_NORMAL;
   
}

   
public static float exifOrientationToDegrees(int exifOrientation) {
       
if (exifOrientation == ExifInterface.ORIENTATION_ROTATE_90) {
           
return 90;
       
} else if (exifOrientation == ExifInterface.ORIENTATION_ROTATE_180) {
           
return 180;
       
} else if (exifOrientation == ExifInterface.ORIENTATION_ROTATE_270) {
           
return 270;
       
}
       
return 0;
   
}
}