Skip to content

Commit 596ab74

Browse files
mtdxccqm
authored and
cqm
committed
android jni filter导出获取属性方法
1 parent 77a538c commit 596ab74

File tree

3 files changed

+130
-32
lines changed

3 files changed

+130
-32
lines changed

src/android/java/gpupixel/src/main/java/com/pixpark/gpupixel/GPUPixelFilter.java

Lines changed: 49 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -71,32 +71,36 @@ public String GetFilterClassName() {
7171
return filterClassName;
7272
}
7373

74-
public final void SetProperty(final String property, final double value) {
75-
SetProperty(property, (float) value);
74+
public final boolean SetProperty(final String property, final double value) {
75+
return SetProperty(property, (float) value);
7676
}
7777

78-
public final void SetProperty(final String property, final float value) {
78+
public final boolean SetProperty(final String property, final float value) {
7979
if (mNativeClassID != 0) {
80-
nativeFilterSetPropertyFloat(mNativeClassID, property, value);
80+
return nativeFilterSetPropertyFloat(mNativeClassID, property, value);
8181
}
82+
return false;
8283
}
8384

84-
public final void SetProperty(final String property, final float[] array) {
85+
public final boolean SetProperty(final String property, final float[] array) {
8586
if (mNativeClassID != 0) {
86-
nativeFilterSetPropertyFloatArray(mNativeClassID, property, array);
87+
return nativeFilterSetPropertyFloatArray(mNativeClassID, property, array);
8788
}
89+
return false;
8890
}
8991

90-
public final void SetProperty(final String property, final int value) {
92+
public final boolean SetProperty(final String property, final int value) {
9193
if (mNativeClassID != 0) {
92-
nativeFilterSetPropertyInt(mNativeClassID, property, value);
94+
return nativeFilterSetPropertyInt(mNativeClassID, property, value);
9395
}
96+
return false;
9497
}
9598

96-
public final void SetProperty(final String property, final String value) {
99+
public final boolean SetProperty(final String property, final String value) {
97100
if (mNativeClassID != 0) {
98-
nativeFilterSetPropertyString(mNativeClassID, property, value);
101+
return nativeFilterSetPropertyString(mNativeClassID, property, value);
99102
}
103+
return false;
100104
}
101105

102106
@Override
@@ -128,11 +132,42 @@ protected void finalize() throws Throwable {
128132
private static native long nativeFilterCreate(String filterClassName);
129133
private static native void nativeFilterDestroy(long classId);
130134
private static native void nativeFilterFinalize(long classId);
131-
private static native void nativeFilterSetPropertyFloat(
135+
private static native boolean nativeFilterSetPropertyFloat(
132136
long classId, String property, float value);
133-
private static native void nativeFilterSetPropertyInt(long classId, String property, int value);
134-
private static native void nativeFilterSetPropertyString(
137+
private static native boolean nativeFilterSetPropertyInt(long classId, String property, int value);
138+
private static native boolean nativeFilterSetPropertyString(
135139
long classId, String property, String value);
136-
private static native void nativeFilterSetPropertyFloatArray(
140+
private static native boolean nativeFilterSetPropertyFloatArray(
137141
long classId, String property, float[] array);
142+
143+
private static native float nativeFilterGetPropertyFloat(long classId, String property);
144+
private static native int nativeFilterGetPropertyInt(long classId, String property);
145+
private static native String nativeFilterGetPropertyString(long classId, String property);
146+
147+
private static native boolean nativeFilterHasProperty(long classId, String property, String type);
148+
public final boolean HasProperty(final String property, final String type) {
149+
if (mNativeClassID != 0) {
150+
return nativeFilterHasProperty(mNativeClassID, property, type);
151+
}
152+
return false;
153+
}
154+
155+
public final int GetPropertyInt(final String property) {
156+
if (mNativeClassID == 0) {
157+
return 0;
158+
}
159+
return nativeFilterGetPropertyInt(mNativeClassID, property);
160+
}
161+
public final float GetPropertyFloat(final String property) {
162+
if (mNativeClassID == 0) {
163+
return 0;
164+
}
165+
return nativeFilterGetPropertyFloat(mNativeClassID, property);
166+
}
167+
public final String GetPropertyString(final String property) {
168+
if (mNativeClassID == 0) {
169+
return null;
170+
}
171+
return nativeFilterGetPropertyString(mNativeClassID, property);
172+
}
138173
}

src/android/jni/jni_filter.cc

Lines changed: 80 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,8 @@ Java_com_pixpark_gpupixel_GPUPixelFilter_nativeFilterCreate(
3838
// Destroy filter
3939
extern "C" JNIEXPORT void JNICALL
4040
Java_com_pixpark_gpupixel_GPUPixelFilter_nativeFilterDestroy(JNIEnv* env,
41-
jclass obj,
42-
jlong classId) {
41+
jclass obj,
42+
jlong classId) {
4343
// Free the heap-allocated shared_ptr
4444
auto* ptr = reinterpret_cast<std::shared_ptr<Filter>*>(classId);
4545
delete ptr;
@@ -48,8 +48,8 @@ Java_com_pixpark_gpupixel_GPUPixelFilter_nativeFilterDestroy(JNIEnv* env,
4848
// Release filter resources
4949
extern "C" JNIEXPORT void JNICALL
5050
Java_com_pixpark_gpupixel_GPUPixelFilter_nativeFilterFinalize(JNIEnv* env,
51-
jclass obj,
52-
jlong classId) {
51+
jclass obj,
52+
jlong classId) {
5353
// Get shared_ptr and access the object
5454
auto* ptr = reinterpret_cast<std::shared_ptr<Filter>*>(classId);
5555
if (ptr && *ptr) {
@@ -58,7 +58,7 @@ Java_com_pixpark_gpupixel_GPUPixelFilter_nativeFilterFinalize(JNIEnv* env,
5858
};
5959

6060
// Set float property for filter
61-
extern "C" JNIEXPORT void JNICALL
61+
extern "C" JNIEXPORT bool JNICALL
6262
Java_com_pixpark_gpupixel_GPUPixelFilter_nativeFilterSetPropertyFloat(
6363
JNIEnv* env,
6464
jclass obj,
@@ -67,16 +67,17 @@ Java_com_pixpark_gpupixel_GPUPixelFilter_nativeFilterSetPropertyFloat(
6767
jfloat value) {
6868
auto* ptr = reinterpret_cast<std::shared_ptr<Filter>*>(classId);
6969
if (!ptr || !*ptr) {
70-
return;
70+
return false;
7171
}
7272

7373
const char* property = env->GetStringUTFChars(jProperty, 0);
74-
(*ptr)->SetProperty(property, value);
74+
bool ret = (*ptr)->SetProperty(property, value);
7575
env->ReleaseStringUTFChars(jProperty, property);
76+
return ret;
7677
};
7778

7879
// Set int property for filter
79-
extern "C" JNIEXPORT void JNICALL
80+
extern "C" JNIEXPORT bool JNICALL
8081
Java_com_pixpark_gpupixel_GPUPixelFilter_nativeFilterSetPropertyInt(
8182
JNIEnv* env,
8283
jclass obj,
@@ -85,16 +86,17 @@ Java_com_pixpark_gpupixel_GPUPixelFilter_nativeFilterSetPropertyInt(
8586
jint value) {
8687
auto* ptr = reinterpret_cast<std::shared_ptr<Filter>*>(classId);
8788
if (!ptr || !*ptr) {
88-
return;
89+
return false;
8990
}
9091

9192
const char* property = env->GetStringUTFChars(jProperty, 0);
92-
(*ptr)->SetProperty(property, value);
93+
bool ret = (*ptr)->SetProperty(property, value);
9394
env->ReleaseStringUTFChars(jProperty, property);
95+
return ret;
9496
};
9597

9698
// Set string property for filter
97-
extern "C" JNIEXPORT void JNICALL
99+
extern "C" JNIEXPORT bool JNICALL
98100
Java_com_pixpark_gpupixel_GPUPixelFilter_nativeFilterSetPropertyString(
99101
JNIEnv* env,
100102
jclass obj,
@@ -103,18 +105,19 @@ Java_com_pixpark_gpupixel_GPUPixelFilter_nativeFilterSetPropertyString(
103105
jstring jValue) {
104106
auto* ptr = reinterpret_cast<std::shared_ptr<Filter>*>(classId);
105107
if (!ptr || !*ptr) {
106-
return;
108+
return false;
107109
}
108110

109111
const char* property = env->GetStringUTFChars(jProperty, 0);
110112
const char* value = env->GetStringUTFChars(jValue, 0);
111-
(*ptr)->SetProperty(property, value);
113+
bool ret = (*ptr)->SetProperty(property, value);
112114
env->ReleaseStringUTFChars(jProperty, property);
113115
env->ReleaseStringUTFChars(jValue, value);
116+
return ret;
114117
};
115118

116119
// Set float array property for filter
117-
extern "C" JNIEXPORT void JNICALL
120+
extern "C" JNIEXPORT bool JNICALL
118121
Java_com_pixpark_gpupixel_GPUPixelFilter_nativeFilterSetPropertyFloatArray(
119122
JNIEnv* env,
120123
jclass clazz,
@@ -123,9 +126,9 @@ Java_com_pixpark_gpupixel_GPUPixelFilter_nativeFilterSetPropertyFloatArray(
123126
jfloatArray jarray) {
124127
auto* ptr = reinterpret_cast<std::shared_ptr<Filter>*>(class_id);
125128
if (!ptr || !*ptr) {
126-
return;
129+
return false;
127130
}
128-
131+
129132
const char* property = env->GetStringUTFChars(jProperty, 0);
130133
jsize length = env->GetArrayLength(jarray);
131134

@@ -136,9 +139,69 @@ Java_com_pixpark_gpupixel_GPUPixelFilter_nativeFilterSetPropertyFloatArray(
136139
vector.push_back(c_array[i]);
137140
}
138141

139-
(*ptr)->SetProperty(property, vector);
142+
bool ret = (*ptr)->SetProperty(property, vector);
140143

141144
env->ReleaseStringUTFChars(jProperty, property);
142145
// Release Java array memory
143146
env->ReleaseFloatArrayElements(jarray, c_array, JNI_ABORT);
147+
return ret;
148+
}
149+
150+
extern "C" JNIEXPORT bool JNICALL Java_com_pixpark_gpupixel_GPUPixelFilter_nativeFilterHasProperty(
151+
JNIEnv* env,
152+
jclass clazz,
153+
jlong class_id,
154+
jstring jProperty,
155+
jstring jType) {
156+
auto* ptr = reinterpret_cast<std::shared_ptr<Filter>*>(class_id);
157+
if (!ptr || !*ptr) {
158+
return false;
159+
}
160+
auto prop = JavaToStdString(env, jProperty);
161+
auto type = JavaToStdString(env, jType);
162+
return (*ptr)->HasProperty(prop, type);
163+
}
164+
165+
extern "C" JNIEXPORT jstring JNICALL Java_com_pixpark_gpupixel_GPUPixelFilter_nativeFilterGetPropertyString(
166+
JNIEnv* env,
167+
jclass clazz,
168+
jlong class_id,
169+
jstring jProperty) {
170+
auto* ptr = reinterpret_cast<std::shared_ptr<Filter>*>(class_id);
171+
if (!ptr || !*ptr) {
172+
return nullptr;
173+
}
174+
std::string ret,prop = JavaToStdString(env, jProperty);
175+
(*ptr)->GetProperty(prop, ret);
176+
return JavaStringFromStdString(env, ret);
177+
}
178+
179+
extern "C" JNIEXPORT int JNICALL Java_com_pixpark_gpupixel_GPUPixelFilter_nativeFilterGetPropertyInt(
180+
JNIEnv* env,
181+
jclass clazz,
182+
jlong class_id,
183+
jstring jProperty) {
184+
int ret = 0;
185+
auto* ptr = reinterpret_cast<std::shared_ptr<Filter>*>(class_id);
186+
if (!ptr || !*ptr) {
187+
return ret;
188+
}
189+
auto prop = JavaToStdString(env, jProperty);
190+
(*ptr)->GetProperty(prop, ret);
191+
return ret;
192+
}
193+
194+
extern "C" JNIEXPORT float JNICALL Java_com_pixpark_gpupixel_GPUPixelFilter_nativeFilterGetPropertyFloat(
195+
JNIEnv* env,
196+
jclass clazz,
197+
jlong class_id,
198+
jstring jProperty) {
199+
float ret = 0;
200+
auto* ptr = reinterpret_cast<std::shared_ptr<Filter>*>(class_id);
201+
if (!ptr || !*ptr) {
202+
return ret;
203+
}
204+
auto prop = JavaToStdString(env, jProperty);
205+
(*ptr)->GetProperty(prop, ret);
206+
return ret;
144207
}

src/filter/filter.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -485,7 +485,7 @@ Filter::Property* Filter::GetProperty(const std::string& name) {
485485

486486
bool Filter::HasProperty(const std::string& name, const std::string type) {
487487
Property* property = GetProperty(name);
488-
return property && property->type == type ? true : false;
488+
return property && (type.empty() || property->type == type);
489489
}
490490

491491
bool Filter::HasProperty(const std::string& name) {

0 commit comments

Comments
 (0)