@@ -20,6 +20,7 @@ limitations under the License.
2020
2121#include " external/com_google_absl/absl/strings/str_cat.h"
2222#include " tensorflow_lite_support/cc/port/statusor.h"
23+ #include " tensorflow_lite_support/cc/task/core/proto/base_options_proto_inc.h"
2324#include " tensorflow_lite_support/cc/task/vision/core/frame_buffer.h"
2425#include " tensorflow_lite_support/cc/task/vision/image_segmenter.h"
2526#include " tensorflow_lite_support/cc/task/vision/proto/image_segmenter_options_proto_inc.h"
@@ -36,6 +37,7 @@ using ::tflite::support::utils::kAssertionError;
3637using ::tflite::support::utils::kIllegalArgumentException ;
3738using ::tflite::support::utils::kInvalidPointer ;
3839using ::tflite::support::utils::ThrowException;
40+ using ::tflite::task::core::BaseOptions;
3941using ::tflite::task::vision::FrameBuffer;
4042using ::tflite::task::vision::ImageSegmenter;
4143using ::tflite::task::vision::ImageSegmenterOptions;
@@ -58,9 +60,15 @@ constexpr int kOutputTypeConfidenceMask = 1;
5860ImageSegmenterOptions ConvertToProtoOptions (JNIEnv* env,
5961 jstring display_names_locale,
6062 jint output_type,
61- jint num_threads ) {
63+ jlong base_options_handle ) {
6264 ImageSegmenterOptions proto_options;
6365
66+ if (base_options_handle != kInvalidPointer ) {
67+ // proto_options will free the previous base_options and set the new one.
68+ proto_options.set_allocated_base_options (
69+ reinterpret_cast <BaseOptions*>(base_options_handle));
70+ }
71+
6472 const char * pchars = env->GetStringUTFChars (display_names_locale, nullptr );
6573 proto_options.set_display_names_locale (pchars);
6674 env->ReleaseStringUTFChars (display_names_locale, pchars);
@@ -78,8 +86,6 @@ ImageSegmenterOptions ConvertToProtoOptions(JNIEnv* env,
7886 " Unsupported output type: %d" , output_type);
7987 }
8088
81- proto_options.set_num_threads (num_threads);
82-
8389 return proto_options;
8490}
8591
@@ -185,10 +191,11 @@ extern "C" JNIEXPORT jlong JNICALL
185191Java_org_tensorflow_lite_task_vision_segmenter_ImageSegmenter_initJniWithModelFdAndOptions (
186192 JNIEnv* env, jclass thiz, jint file_descriptor,
187193 jlong file_descriptor_length, jlong file_descriptor_offset,
188- jstring display_names_locale, jint output_type, jint num_threads ) {
194+ jstring display_names_locale, jint output_type, jlong base_options_handle ) {
189195 ImageSegmenterOptions proto_options = ConvertToProtoOptions (
190- env, display_names_locale, output_type, num_threads);
191- auto file_descriptor_meta = proto_options.mutable_model_file_with_metadata ()
196+ env, display_names_locale, output_type, base_options_handle);
197+ auto file_descriptor_meta = proto_options.mutable_base_options ()
198+ ->mutable_model_file ()
192199 ->mutable_file_descriptor_meta ();
193200 file_descriptor_meta->set_fd (file_descriptor);
194201 if (file_descriptor_length > 0 ) {
@@ -203,10 +210,10 @@ Java_org_tensorflow_lite_task_vision_segmenter_ImageSegmenter_initJniWithModelFd
203210extern " C" JNIEXPORT jlong JNICALL
204211Java_org_tensorflow_lite_task_vision_segmenter_ImageSegmenter_initJniWithByteBuffer (
205212 JNIEnv* env, jclass thiz, jobject model_buffer,
206- jstring display_names_locale, jint output_type, jint num_threads ) {
213+ jstring display_names_locale, jint output_type, jlong base_options_handle ) {
207214 ImageSegmenterOptions proto_options = ConvertToProtoOptions (
208- env, display_names_locale, output_type, num_threads );
209- proto_options.mutable_model_file_with_metadata ()->set_file_content (
215+ env, display_names_locale, output_type, base_options_handle );
216+ proto_options.mutable_base_options ()-> mutable_model_file ()->set_file_content (
210217 static_cast <char *>(env->GetDirectBufferAddress (model_buffer)),
211218 static_cast <size_t >(env->GetDirectBufferCapacity (model_buffer)));
212219 return CreateImageSegmenterFromOptions (env, proto_options);
0 commit comments