1ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray/* 2ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray * Copyright (C) 2013 The Android Open Source Project 3ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray * 4ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray * Licensed under the Apache License, Version 2.0 (the "License"); 5ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray * you may not use this file except in compliance with the License. 6ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray * You may obtain a copy of the License at 7ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray * 8ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray * http://www.apache.org/licenses/LICENSE-2.0 9ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray * 10ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray * Unless required by applicable law or agreed to in writing, software 11ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray * distributed under the License is distributed on an "AS IS" BASIS, 12ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray * See the License for the specific language governing permissions and 14ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray * limitations under the License. 15ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray */ 16ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray 17ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murraypackage android.support.v8.renderscript; 18ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray 19179158fa990160cf3f309f6a87a039e71ab664e8Tim Murrayimport java.lang.reflect.Field; 20179158fa990160cf3f309f6a87a039e71ab664e8Tim Murrayimport java.lang.reflect.Method; 21179158fa990160cf3f309f6a87a039e71ab664e8Tim Murray 22ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murrayimport android.content.Context; 23ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murrayimport android.content.pm.ApplicationInfo; 24ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murrayimport android.content.pm.PackageManager; 25ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murrayimport android.content.res.AssetManager; 26ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murrayimport android.os.Process; 27ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murrayimport android.util.Log; 28ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murrayimport android.view.Surface; 29ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray 30ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray 31ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray 32ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murrayclass RenderScriptThunker extends RenderScript { 33ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray android.renderscript.RenderScript mN; 34ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray 35ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray void validate() { 36ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray if (mN == null) { 37ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray throw new RSInvalidStateException("Calling RS with no Context active."); 38ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray } 39ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray } 40ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray 41ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray public void setPriority(Priority p) { 42d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray try { 43d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray if (p == Priority.LOW) mN.setPriority(android.renderscript.RenderScript.Priority.LOW); 44d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray if (p == Priority.NORMAL) mN.setPriority(android.renderscript.RenderScript.Priority.NORMAL); 45d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray } catch (android.renderscript.RSRuntimeException e) { 46d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray throw ExceptionThunker.convertException(e); 47d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray } 48ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray } 49ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray 50ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray RenderScriptThunker(Context ctx) { 51ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray super(ctx); 52ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray isNative = true; 53ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray } 54ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray 55ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray public static RenderScript create(Context ctx, int sdkVersion) { 56d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray try { 57d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray RenderScriptThunker rs = new RenderScriptThunker(ctx); 58179158fa990160cf3f309f6a87a039e71ab664e8Tim Murray Class<?> javaRS = Class.forName("android.renderscript.RenderScript"); 59179158fa990160cf3f309f6a87a039e71ab664e8Tim Murray Class[] signature = {Context.class, Integer.TYPE}; 60179158fa990160cf3f309f6a87a039e71ab664e8Tim Murray Object[] args = {ctx, new Integer(sdkVersion)}; 61179158fa990160cf3f309f6a87a039e71ab664e8Tim Murray Method create = javaRS.getDeclaredMethod("create", signature); 62179158fa990160cf3f309f6a87a039e71ab664e8Tim Murray rs.mN = (android.renderscript.RenderScript)create.invoke(null, args); 63d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray return rs; 64d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray } 65d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray catch(android.renderscript.RSRuntimeException e) { 66d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray throw ExceptionThunker.convertException(e); 67179158fa990160cf3f309f6a87a039e71ab664e8Tim Murray } catch (Exception e) { 68179158fa990160cf3f309f6a87a039e71ab664e8Tim Murray throw new RSRuntimeException("Failure to create platform RenderScript context"); 69d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray } 70ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray } 71ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray 72ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray public void contextDump() { 73d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray try { 74d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray mN.contextDump(); 75d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray } catch (android.renderscript.RSRuntimeException e) { 76d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray throw ExceptionThunker.convertException(e); 77d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray } 78ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray } 79ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray 80ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray public void finish() { 81d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray try { 82d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray mN.finish(); 83d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray } catch (android.renderscript.RSRuntimeException e) { 84d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray throw ExceptionThunker.convertException(e); 85d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray } 86ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray } 87ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray 88ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray public void destroy() { 89d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray try { 90d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray mN.destroy(); 91d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray mN = null; 92d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray } catch (android.renderscript.RSRuntimeException e) { 93d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray throw ExceptionThunker.convertException(e); 94d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray } 95d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray 96ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray } 97eeb3042428fbe3a3cace554d3aca43b324904ad1Tim Murray 988b33529b03912efab1aedd30ca5bd818ddbe3713Tim Murray public void setMessageHandler(RSMessageHandler msg) { 998b33529b03912efab1aedd30ca5bd818ddbe3713Tim Murray mMessageCallback = msg; 1008b33529b03912efab1aedd30ca5bd818ddbe3713Tim Murray try { 1018b33529b03912efab1aedd30ca5bd818ddbe3713Tim Murray android.renderscript.RenderScript.RSMessageHandler handler = 1028b33529b03912efab1aedd30ca5bd818ddbe3713Tim Murray new android.renderscript.RenderScript.RSMessageHandler() { 1038b33529b03912efab1aedd30ca5bd818ddbe3713Tim Murray public void run() { 1048b33529b03912efab1aedd30ca5bd818ddbe3713Tim Murray mMessageCallback.mData = mData; 1058b33529b03912efab1aedd30ca5bd818ddbe3713Tim Murray mMessageCallback.mID = mID; 1068b33529b03912efab1aedd30ca5bd818ddbe3713Tim Murray mMessageCallback.mLength = mLength; 1078b33529b03912efab1aedd30ca5bd818ddbe3713Tim Murray mMessageCallback.run(); 1088b33529b03912efab1aedd30ca5bd818ddbe3713Tim Murray } 1098b33529b03912efab1aedd30ca5bd818ddbe3713Tim Murray }; 1108b33529b03912efab1aedd30ca5bd818ddbe3713Tim Murray mN.setMessageHandler(handler); 1118b33529b03912efab1aedd30ca5bd818ddbe3713Tim Murray } catch (android.renderscript.RSRuntimeException e) { 1128b33529b03912efab1aedd30ca5bd818ddbe3713Tim Murray throw ExceptionThunker.convertException(e); 1138b33529b03912efab1aedd30ca5bd818ddbe3713Tim Murray } 1148b33529b03912efab1aedd30ca5bd818ddbe3713Tim Murray } 1158b33529b03912efab1aedd30ca5bd818ddbe3713Tim Murray 1168b33529b03912efab1aedd30ca5bd818ddbe3713Tim Murray public void setErrorHandler(RSErrorHandler msg) { 1178b33529b03912efab1aedd30ca5bd818ddbe3713Tim Murray mErrorCallback = msg; 1188b33529b03912efab1aedd30ca5bd818ddbe3713Tim Murray try { 1198b33529b03912efab1aedd30ca5bd818ddbe3713Tim Murray android.renderscript.RenderScript.RSErrorHandler handler = 1208b33529b03912efab1aedd30ca5bd818ddbe3713Tim Murray new android.renderscript.RenderScript.RSErrorHandler() { 1218b33529b03912efab1aedd30ca5bd818ddbe3713Tim Murray public void run() { 1228b33529b03912efab1aedd30ca5bd818ddbe3713Tim Murray mErrorCallback.mErrorMessage = mErrorMessage; 1238b33529b03912efab1aedd30ca5bd818ddbe3713Tim Murray mErrorCallback.mErrorNum = mErrorNum; 1248b33529b03912efab1aedd30ca5bd818ddbe3713Tim Murray mErrorCallback.run(); 1258b33529b03912efab1aedd30ca5bd818ddbe3713Tim Murray } 1268b33529b03912efab1aedd30ca5bd818ddbe3713Tim Murray }; 1278b33529b03912efab1aedd30ca5bd818ddbe3713Tim Murray mN.setErrorHandler(handler); 1288b33529b03912efab1aedd30ca5bd818ddbe3713Tim Murray } catch (android.renderscript.RSRuntimeException e) { 1298b33529b03912efab1aedd30ca5bd818ddbe3713Tim Murray throw ExceptionThunker.convertException(e); 1308b33529b03912efab1aedd30ca5bd818ddbe3713Tim Murray } 1318b33529b03912efab1aedd30ca5bd818ddbe3713Tim Murray } 1328b33529b03912efab1aedd30ca5bd818ddbe3713Tim Murray 1338b33529b03912efab1aedd30ca5bd818ddbe3713Tim Murray 134eeb3042428fbe3a3cace554d3aca43b324904ad1Tim Murray boolean equals(Object obj1, Object obj2) { 135eeb3042428fbe3a3cace554d3aca43b324904ad1Tim Murray if (obj2 instanceof android.support.v8.renderscript.BaseObj) { 136eeb3042428fbe3a3cace554d3aca43b324904ad1Tim Murray return ((android.renderscript.BaseObj)obj1).equals(((android.support.v8.renderscript.BaseObj)obj2).getNObj()); 137eeb3042428fbe3a3cace554d3aca43b324904ad1Tim Murray } 138eeb3042428fbe3a3cace554d3aca43b324904ad1Tim Murray return false; 139eeb3042428fbe3a3cace554d3aca43b324904ad1Tim Murray } 140ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray} 141