///* //The contents of this file are subject to the Mozilla Public License //Version 1.1 (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.mozilla.org/MPL/ // //Software distributed under the License is distributed on an "AS IS" //basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the //License for the specific language governing rights and limitations //under the License. // //The Original Code is collection of files collectively known as Open Camera. // //The Initial Developer of the Original Code is Almalence Inc. //Portions created by Initial Developer are Copyright (C) 2013 //by Almalence Inc. All Rights Reserved. // */ // //package com.almalence.plugins.processing.sequence; // //import java.io.ByteArrayOutputStream; //import java.util.List; // //import android.content.SharedPreferences; //import android.graphics.Bitmap; //import android.graphics.Bitmap.Config; //import android.graphics.ImageFormat; //import android.graphics.Matrix; //import android.graphics.Rect; //import android.preference.PreferenceManager; //import android.util.Log; // //import com.almalence.SwapHeap; //import com.almalence.util.Size; // ///* <!-- +++ //import com.almalence.opencam_plus.ApplicationScreen; //+++ --> */ ////<!-- -+- //import com.almalence.opencam.ApplicationScreen; ////-+- --> // //public class AlmaCLRShot //{ // private final String TAG = this.getClass().getName() // .substring(this.getClass().getName().lastIndexOf(".") + 1); // // private int IMAGE_TO_LAYOUT = 8; // private static final int MAX_INPUT_FRAME = 8; // // private static final int MPIX_5 = 5000000; // // private List<byte[]> mJpegData; // private Size mPreviewSize; // private Size mInputFrameSize; // private int mNumOfFrame; // private int[] ARGBBuffer = null; // private int[] mCrop = null; // private int mSensitivity; // sensitivity: // // default // // is // // 0, // // useful // // range // // is // // [-15..+15] // private int mMinSize; // minSize: // // the // // smallest // // object // // size // // which // // will // // be // // detected // // (object // // area, // // in // // pixels). // private int mGhosting; // // private int mOutNV21 = 0; // private Rect[] mBoarderRect = null; // // private static final Object syncObject = new Object(); // // private AlmaCLRShot() // { // super(); // } // // private static final AlmaCLRShot mInstance = new AlmaCLRShot(); // // public static AlmaCLRShot getInstance() // { // return mInstance; // } // // public void addYUVInputFrame(List<Integer> inputFrame, Size size) throws Exception // { // mNumOfFrame = inputFrame.size(); // mInputFrameSize = size; // // //Log.d(TAG, "mInputFrameSize WxH = " + mInputFrameSize.getWidth() + " x " + mInputFrameSize.getHeight()); // // if (mNumOfFrame < 1 && mNumOfFrame > 8) // { // throw new Exception("Number of input frame is wrong"); // } // // Initialize(); // // int[] PointOfYUVData = new int[mNumOfFrame]; // int[] LengthOfYUVData = new int[mNumOfFrame]; // // int data_lenght = mInputFrameSize.getWidth() * mInputFrameSize.getHeight() + 2 // * ((mInputFrameSize.getWidth() + 1) / 2) * ((mInputFrameSize.getHeight() + 1) / 2); // for (int i = 0; i < mNumOfFrame; i++) // { // PointOfYUVData[i] = inputFrame.get(i); // LengthOfYUVData[i] = data_lenght; // if (PointOfYUVData[i] == 0) // { // Log.d(TAG, "Out of Memory in Native"); // throw new Exception("Out of Memory in Native"); // } // } // // int error = addYUVInputFrames(PointOfYUVData, LengthOfYUVData, mNumOfFrame, size.getWidth(), size.getHeight()); // if (error < 0) // { // Log.d(TAG, "Out Of Memory"); // throw new Exception("Out Of Memory"); // } else if (error < MAX_INPUT_FRAME) // { // Log.d(TAG, "YUV data is wrong in " + error + " frame"); // throw new Exception("Out Of Memory"); // } // // return; // } // // public boolean initialize(Size previewSize, int sensitivity, int minSize, int ghosting, // int[] sports_order) throws Exception // { // mGhosting = ghosting; // mPreviewSize = previewSize; // mSensitivity = sensitivity; // mMinSize = minSize; // // if (!mPreviewSize.isValid()) // { // Log.d(TAG, "Preview size is wrong"); // throw new Exception("Too Many Input Frame"); // } // // if (mSensitivity < -15 || mSensitivity > 15) // { // Log.d(TAG, "Sensitivity value is wrong"); // throw new Exception("Sensitivity value is wrong"); // } // // if (mMinSize < 0 || mMinSize > mInputFrameSize.getWidth() * mInputFrameSize.getHeight()) // { // Log.d(TAG, "MinSize value is wrong"); // throw new Exception("Sensitivity value is wrong"); // } // // mCrop = new int[5]; // mCrop[4] = 0; // // if(mInputFrameSize.getWidth() * mInputFrameSize.getHeight() > MPIX_5) // this.IMAGE_TO_LAYOUT = 16; // else // this.IMAGE_TO_LAYOUT = 8; // // removeProcessing(sports_order); // // return true; // } // // private Bitmap rotateBitmap(Bitmap b, int w, int h, float angle) // { // if (b == null) // { // return b; // } // if (angle == 0) // { // return b; // } // Matrix matrix = new Matrix(); // matrix.preRotate(angle); // Bitmap rotImage = Bitmap.createBitmap(b, 0, 0, w, h, matrix, true); // b.recycle(); // return rotImage; // } // // public Bitmap getPreviewBitmap() // { // Bitmap bitmap = Bitmap.createBitmap(mPreviewSize.getWidth(), mPreviewSize.getHeight(), Config.ARGB_8888); // // Rect rect = new Rect(0, 0, mInputFrameSize.getWidth(), mInputFrameSize.getHeight()); // ARGBBuffer = NV21toARGB(mOutNV21, mInputFrameSize, rect, mPreviewSize); // bitmap.setPixels(ARGBBuffer, 0, mPreviewSize.getWidth(), 0, 0, mPreviewSize.getWidth(), // mPreviewSize.getHeight()); // ARGBBuffer = null; // // return bitmap; // } // // public byte[] processingSaveData() // { // byte[] jpegBuffer = null; // // android.graphics.YuvImage out = new android.graphics.YuvImage(SwapHeap.SwapFromHeap(mOutNV21, // mInputFrameSize.getWidth() * mInputFrameSize.getHeight() * 3 / 2), ImageFormat.NV21, // mInputFrameSize.getWidth(), mInputFrameSize.getHeight(), null); // mOutNV21 = 0; // try // { // ByteArrayOutputStream os = new ByteArrayOutputStream(); // // Rect r = new Rect(mCrop[0], mCrop[1], mCrop[0] + mCrop[2], mCrop[1] + mCrop[3]); // // SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(ApplicationScreen.getMainContext()); // int jpegQuality = Integer.parseInt(prefs.getString(ApplicationScreen.sJPEGQualityPref, "95")); // if (!out.compressToJpeg(r, jpegQuality, os)) // { // Log.d(TAG, "the compression is not successful"); // } // jpegBuffer = os.toByteArray(); // os.close(); // // } catch (Exception e) // { // Log.d(TAG, "Exception occured"); // e.printStackTrace(); // } // // return jpegBuffer; // } // // public void release() // { // synchronized (syncObject) // { // Release(mNumOfFrame); // // mPreviewSize = null; // mInputFrameSize = null; // // ARGBBuffer = null; // mCrop = null; // // mBoarderRect = null; // // IMAGE_TO_LAYOUT = 8; // // if (mOutNV21 != 0) // { // SwapHeap.FreeFromHeap(mOutNV21); // mOutNV21 = 0; // } // // try // { // this.finalize(); // } catch (Throwable e) // { // Log.d(TAG, "Instance is not finalized correctly"); // e.printStackTrace(); // } // } // return; // } // // private synchronized void removeProcessing(int[] sports_order) // { // if (mOutNV21 != 0) // { // SwapHeap.FreeFromHeap(mOutNV21); // mOutNV21 = 0; // } // // mOutNV21 = MovObjProcess(mNumOfFrame, mInputFrameSize, mSensitivity, mMinSize, null, mCrop, null, mGhosting, // IMAGE_TO_LAYOUT, sports_order); // return; // } // // private static native String Initialize(); // // private static native int Release(int nFrames); // // private static native int ConvertFromJpeg(int[] frame, int[] frame_len, int nFrames, int sx, int sy); // // private static native int addYUVInputFrames(int[] frame, int[] frame_len, int nFrames, int sx, int sy); // // private static native int[] NV21toARGB(int inptr, Size src, Rect rect, Size dst); // // private static native int MovObjProcess(int nFrames, Size size, int sensitivity, int minSize, int[] base_area, int[] crop, byte[] layout, // int ghosting, int ratio, int[] sports_order); // // static // { // System.loadLibrary("utils-image"); // System.loadLibrary("almalib"); // System.loadLibrary("almashot-moving"); // } //}