From 69b308a36881c6a46e25b1825cd466ad9540e4da Mon Sep 17 00:00:00 2001 From: Alexander Smorkalov <alexander.smorkalov@itseez.com> Date: Fri, 5 Jul 2013 14:08:37 +0400 Subject: [PATCH] Various fixes in android sample NativeActivity. --- samples/android/native-activity/.cproject | 2 +- .../native-activity/AndroidManifest.xml | 5 ++++- .../android/native-activity/jni/Android.mk | 2 +- .../android/native-activity/jni/native.cpp | 21 ++++++++++++++----- 4 files changed, 22 insertions(+), 8 deletions(-) diff --git a/samples/android/native-activity/.cproject b/samples/android/native-activity/.cproject index 44aadfe9af..83ca04b55b 100644 --- a/samples/android/native-activity/.cproject +++ b/samples/android/native-activity/.cproject @@ -20,7 +20,7 @@ <folderInfo id="0.882924228." name="/" resourcePath=""> <toolChain id="org.eclipse.cdt.build.core.prefbase.toolchain.1667980868" name="No ToolChain" resourceTypeBasedDiscovery="false" superClass="org.eclipse.cdt.build.core.prefbase.toolchain"> <targetPlatform id="org.eclipse.cdt.build.core.prefbase.toolchain.1667980868.2108168132" name=""/> - <builder autoBuildTarget="" command=""${NDKROOT}/ndk-build.cmd"" enableAutoBuild="true" enableCleanBuild="false" id="org.eclipse.cdt.build.core.settings.default.builder.328915772" incrementalBuildTarget="" keepEnvironmentInBuildfile="false" managedBuildOn="false" name="Gnu Make Builder" superClass="org.eclipse.cdt.build.core.settings.default.builder"/> + <builder autoBuildTarget="" command="${NDKROOT}/ndk-build.cmd" enableAutoBuild="true" enableCleanBuild="false" id="org.eclipse.cdt.build.core.settings.default.builder.328915772" incrementalBuildTarget="" keepEnvironmentInBuildfile="false" managedBuildOn="false" name="Gnu Make Builder" superClass="org.eclipse.cdt.build.core.settings.default.builder"/> <tool id="org.eclipse.cdt.build.core.settings.holder.libs.630148311" name="holder for library settings" superClass="org.eclipse.cdt.build.core.settings.holder.libs"/> <tool id="org.eclipse.cdt.build.core.settings.holder.525090327" name="Assembly" superClass="org.eclipse.cdt.build.core.settings.holder"> <inputType id="org.eclipse.cdt.build.core.settings.holder.inType.1491216279" languageId="org.eclipse.cdt.core.assembly" languageName="Assembly" sourceContentType="org.eclipse.cdt.core.asmSource" superClass="org.eclipse.cdt.build.core.settings.holder.inType"/> diff --git a/samples/android/native-activity/AndroidManifest.xml b/samples/android/native-activity/AndroidManifest.xml index 369bc75027..55b696ba47 100644 --- a/samples/android/native-activity/AndroidManifest.xml +++ b/samples/android/native-activity/AndroidManifest.xml @@ -10,6 +10,7 @@ <activity android:name="CvNativeActivity" android:label="@string/app_name" + android:screenOrientation="landscape" android:configChanges="orientation|keyboardHidden"> <intent-filter> <action android:name="android.intent.action.MAIN" /> @@ -17,7 +18,9 @@ </intent-filter> </activity> <activity android:name="android.app.NativeActivity" - android:label="@string/app_name"> + android:label="@string/app_name" + android:screenOrientation="landscape" + android:configChanges="keyboardHidden|orientation"> <meta-data android:name="android.app.lib_name" android:value="native_activity" /> </activity> diff --git a/samples/android/native-activity/jni/Android.mk b/samples/android/native-activity/jni/Android.mk index fd4fd2bfbb..7ae31e24ca 100644 --- a/samples/android/native-activity/jni/Android.mk +++ b/samples/android/native-activity/jni/Android.mk @@ -7,7 +7,7 @@ include ../../sdk/native/jni/OpenCV.mk LOCAL_MODULE := native_activity LOCAL_SRC_FILES := native.cpp LOCAL_LDLIBS += -lm -llog -landroid -LOCAL_STATIC_LIBRARIES := android_native_app_glue +LOCAL_STATIC_LIBRARIES += android_native_app_glue include $(BUILD_SHARED_LIBRARY) diff --git a/samples/android/native-activity/jni/native.cpp b/samples/android/native-activity/jni/native.cpp index 5cfb3a9611..0054da9da2 100644 --- a/samples/android/native-activity/jni/native.cpp +++ b/samples/android/native-activity/jni/native.cpp @@ -78,18 +78,29 @@ static void engine_draw_frame(Engine* engine, const cv::Mat& frame) return; } - void* pixels = buffer.bits; + int32_t* pixels = (int32_t*)buffer.bits; int left_indent = (buffer.width-frame.cols)/2; int top_indent = (buffer.height-frame.rows)/2; - for (int yy = top_indent; yy < std::min(frame.rows+top_indent, buffer.height); yy++) + if (top_indent > 0) { - unsigned char* line = (unsigned char*)pixels + left_indent*4*sizeof(unsigned char); - size_t line_size = std::min(frame.cols, buffer.width)*4*sizeof(unsigned char); + memset(pixels, 0, top_indent*buffer.stride*sizeof(int32_t)); + pixels += top_indent*buffer.stride; + } + + for (int yy = 0; yy < frame.rows; yy++) + { + if (left_indent > 0) + { + memset(pixels, 0, left_indent*sizeof(int32_t)); + memset(pixels+left_indent+frame.cols, 0, (buffer.stride-frame.cols-left_indent)*sizeof(int32_t)); + } + int32_t* line = pixels + left_indent; + size_t line_size = frame.cols*4*sizeof(unsigned char); memcpy(line, frame.ptr<unsigned char>(yy), line_size); // go to next line - pixels = (int32_t*)pixels + buffer.stride; + pixels += buffer.stride; } ANativeWindow_unlockAndPost(engine->app->window); }