diff --git a/CMakeLists.txt b/CMakeLists.txt
index 290b7d6c3..0f9d6697c 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -209,7 +209,7 @@ if(ANDROID)
message(STATUS "FREERDP_ANDROID_EXTERNAL_SSL_PATH not set! - Needs to be set if openssl is not found in the android NDK (which usually isn't)")
endif()
set(CMAKE_FIND_ROOT_PATH ${CMAKE_FIND_ROOT_PATH} ${FREERDP_ANDROID_EXTERNAL_SSL_PATH})
- set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/client/Android/libs/${ANDROID_ABI})
+ set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/client/Android/FreeRDPCore/libs/${ANDROID_ABI})
endif()
set(CMAKE_THREAD_PREFER_PTHREAD TRUE)
diff --git a/client/Android/AndroidManifest.xml.cmake b/client/Android/AndroidManifest.xml.cmake
deleted file mode 100644
index 0fd9e9c1b..000000000
--- a/client/Android/AndroidManifest.xml.cmake
+++ /dev/null
@@ -1,109 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/client/Android/CMakeLists.txt b/client/Android/CMakeLists.txt
index bf543ed2e..9557f7e63 100644
--- a/client/Android/CMakeLists.txt
+++ b/client/Android/CMakeLists.txt
@@ -1,7 +1,6 @@
# FreeRDP: A Remote Desktop Protocol Implementation
# Android Client
#
-# Copyright 2012 Marc-Andre Moreau
# Copyright 2013 Bernhard Miklautz
#
# Licensed under the Apache License, Version 2.0 (the "License");
@@ -16,23 +15,10 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-set(ANDROID_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
-set(ANDROID_PACKAGE_NAME "aFreeRDP")
-
-CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/AndroidManifest.xml.cmake ${CMAKE_CURRENT_SOURCE_DIR}/AndroidManifest.xml @ONLY)
-
-if (ANDROID_SDK)
- CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/local.properties.cmake ${CMAKE_CURRENT_SOURCE_DIR}/local.properties @ONLY)
-endif()
-
-add_subdirectory(jni)
-
-
if(ANDROID_BUILD_JAVA)
if (NOT ANDROID_SDK)
message(FATAL_ERROR "ANDROID_SDK not set but required for building the java gui (ANDROID_BUILD_JAVA)")
endif()
-
# And isn't shiped with the android ndk/sdk so
# we need to find it on the local machine
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER, BOTH)
@@ -43,22 +29,12 @@ if(ANDROID_BUILD_JAVA)
message(FATAL_ERROR "ant not found but required to build android java")
endif()
- if(ANDROID_BUILD_JAVA_DEBUG)
+ if(ANDROID_BUILD_JAVA_DEBUG)
set(ANDROID_BUILD_TYPE "debug")
- set(APK "${ANDROID_SOURCE_DIR}/bin/${ANDROID_PACKAGE_NAME}-release-unsigned.apk")
else()
set(ANDROID_BUILD_TYPE "release")
- set(APK "${ANDROID_SOURCE_DIR}/bin/${ANDROID_PACKAGE_NAME}-debug.apk")
endif()
+endif(ANDROID_BUILD_JAVA)
- # command to create the android package
- add_custom_command(
- OUTPUT "${APK}"
- COMMAND ${ANT_COMMAND} ${ANDROID_BUILD_TYPE}
- WORKING_DIRECTORY "${ANDROID_SOURCE_DIR}"
- MAIN_DEPENDENCY AndroidManifest.xml
- DEPENDS freerdp-android local.properties
- )
- add_custom_target(android-package ALL SOURCES "${APK}")
- SET_DIRECTORY_PROPERTIES(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "gen;bin")
-endif()
+add_subdirectory(FreeRDPCore)
+add_subdirectory(aFreeRDP)
diff --git a/client/Android/FreeRDPCore/.classpath b/client/Android/FreeRDPCore/.classpath
new file mode 100644
index 000000000..a4763d1ee
--- /dev/null
+++ b/client/Android/FreeRDPCore/.classpath
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/client/Android/FreeRDPCore/.project b/client/Android/FreeRDPCore/.project
new file mode 100644
index 000000000..85408c31b
--- /dev/null
+++ b/client/Android/FreeRDPCore/.project
@@ -0,0 +1,33 @@
+
+
+ FreeRDPCore
+
+
+
+
+
+ com.android.ide.eclipse.adt.ResourceManagerBuilder
+
+
+
+
+ com.android.ide.eclipse.adt.PreCompilerBuilder
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+ com.android.ide.eclipse.adt.ApkBuilder
+
+
+
+
+
+ com.android.ide.eclipse.adt.AndroidNature
+ org.eclipse.jdt.core.javanature
+
+
diff --git a/client/Android/FreeRDPCore/AndroidManifest.xml.cmake b/client/Android/FreeRDPCore/AndroidManifest.xml.cmake
new file mode 100644
index 000000000..03344d43f
--- /dev/null
+++ b/client/Android/FreeRDPCore/AndroidManifest.xml.cmake
@@ -0,0 +1,73 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/client/Android/FreeRDPCore/CMakeLists.txt b/client/Android/FreeRDPCore/CMakeLists.txt
new file mode 100644
index 000000000..005e90d45
--- /dev/null
+++ b/client/Android/FreeRDPCore/CMakeLists.txt
@@ -0,0 +1,44 @@
+# FreeRDP: A Remote Desktop Protocol Implementation
+# Android Client
+#
+# Copyright 2012 Marc-Andre Moreau
+# Copyright 2013 Bernhard Miklautz
+#
+# Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+set(ANDROID_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
+set(ANDROID_PACKAGE_NAME "aFreeRDPCore")
+
+CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/AndroidManifest.xml.cmake ${CMAKE_CURRENT_SOURCE_DIR}/AndroidManifest.xml @ONLY)
+
+if (ANDROID_SDK)
+ CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/local.properties.cmake ${CMAKE_CURRENT_SOURCE_DIR}/local.properties @ONLY)
+endif()
+
+add_subdirectory(jni)
+
+
+if(ANDROID_BUILD_JAVA)
+ set(ANDROIDLIB "${ANDROID_SOURCE_DIR}/bin/classes.jar")
+
+ # command to create the android package
+ add_custom_command(
+ OUTPUT "${ANDROIDLIB}"
+ COMMAND ${ANT_COMMAND} ${ANDROID_BUILD_TYPE}
+ WORKING_DIRECTORY "${ANDROID_SOURCE_DIR}"
+ MAIN_DEPENDENCY AndroidManifest.xml
+ DEPENDS freerdp-android local.properties
+ )
+ add_custom_target(android-lib ALL SOURCES "${ANDROIDLIB}")
+ SET_DIRECTORY_PROPERTIES(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "gen;bin")
+endif()
diff --git a/client/Android/FreeRDPCore/ant.properties b/client/Android/FreeRDPCore/ant.properties
new file mode 100644
index 000000000..73031c7a7
--- /dev/null
+++ b/client/Android/FreeRDPCore/ant.properties
@@ -0,0 +1,16 @@
+# This file is used to override default values used by the Ant build system.
+#
+# This file must be checked into Version Control Systems, as it is
+# integral to the build system of your project.
+
+# This file is only used by the Ant script.
+
+# You can use this to override default values such as
+# 'source.dir' for the location of your java source folder and
+# 'out.dir' for the location of your output folder.
+
+# You can also use it define how the release builds are signed by declaring
+# the following properties:
+# 'key.store' for the location of your keystore and
+# 'key.alias' for the name of the key to use.
+# The password will be asked during the build when you use the 'release' target.
diff --git a/client/Android/FreeRDPCore/build.xml b/client/Android/FreeRDPCore/build.xml
new file mode 100644
index 000000000..f07d7de42
--- /dev/null
+++ b/client/Android/FreeRDPCore/build.xml
@@ -0,0 +1,92 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/client/Android/jni/CMakeLists.txt b/client/Android/FreeRDPCore/jni/CMakeLists.txt
similarity index 100%
rename from client/Android/jni/CMakeLists.txt
rename to client/Android/FreeRDPCore/jni/CMakeLists.txt
diff --git a/client/Android/jni/android_debug.h b/client/Android/FreeRDPCore/jni/android_debug.h
similarity index 100%
rename from client/Android/jni/android_debug.h
rename to client/Android/FreeRDPCore/jni/android_debug.h
diff --git a/client/Android/jni/android_event.c b/client/Android/FreeRDPCore/jni/android_event.c
similarity index 100%
rename from client/Android/jni/android_event.c
rename to client/Android/FreeRDPCore/jni/android_event.c
diff --git a/client/Android/jni/android_event.h b/client/Android/FreeRDPCore/jni/android_event.h
similarity index 100%
rename from client/Android/jni/android_event.h
rename to client/Android/FreeRDPCore/jni/android_event.h
diff --git a/client/Android/jni/android_freerdp.c b/client/Android/FreeRDPCore/jni/android_freerdp.c
similarity index 99%
rename from client/Android/jni/android_freerdp.c
rename to client/Android/FreeRDPCore/jni/android_freerdp.c
index 6a31ebc0e..7f84dea75 100644
--- a/client/Android/jni/android_freerdp.c
+++ b/client/Android/FreeRDPCore/jni/android_freerdp.c
@@ -24,6 +24,7 @@
#include
#include
#include
+#include
#include
#include
@@ -536,7 +537,10 @@ JNIEXPORT void JNICALL jni_freerdp_set_data_directory(JNIEnv *env, jclass cls, j
const jbyte *directory = (*env)->GetStringUTFChars(env, jdirectory, NULL);
free(settings->HomePath);
+ free(settings->ConfigPath);
settings->HomePath = strdup(directory);
+ settings->ConfigPath = NULL;
+ freerdp_detect_paths(settings);
(*env)->ReleaseStringUTFChars(env, jdirectory, directory);
}
@@ -655,7 +659,6 @@ JNIEXPORT void JNICALL jni_freerdp_set_performance_flags(
settings->FastPathOutput = TRUE;
settings->ColorDepth = 32;
settings->LargePointerFlag = TRUE;
- settings->PerformanceFlags = PERF_FLAG_NONE;
settings->FrameMarkerCommandEnabled = TRUE;
}
@@ -680,6 +683,7 @@ JNIEXPORT void JNICALL jni_freerdp_set_performance_flags(
/* Create performance flags from settings */
+ settings->PerformanceFlags = PERF_FLAG_NONE;
if (settings->AllowFontSmoothing)
settings->PerformanceFlags |= PERF_ENABLE_FONT_SMOOTHING;
diff --git a/client/Android/jni/android_freerdp.h b/client/Android/FreeRDPCore/jni/android_freerdp.h
similarity index 100%
rename from client/Android/jni/android_freerdp.h
rename to client/Android/FreeRDPCore/jni/android_freerdp.h
diff --git a/client/Android/jni/android_jni_callback.c b/client/Android/FreeRDPCore/jni/android_jni_callback.c
similarity index 100%
rename from client/Android/jni/android_jni_callback.c
rename to client/Android/FreeRDPCore/jni/android_jni_callback.c
diff --git a/client/Android/jni/android_jni_callback.h b/client/Android/FreeRDPCore/jni/android_jni_callback.h
similarity index 100%
rename from client/Android/jni/android_jni_callback.h
rename to client/Android/FreeRDPCore/jni/android_jni_callback.h
diff --git a/client/Android/jni/generated/android_freerdp_jni.c b/client/Android/FreeRDPCore/jni/generated/android_freerdp_jni.c
similarity index 59%
rename from client/Android/jni/generated/android_freerdp_jni.c
rename to client/Android/FreeRDPCore/jni/generated/android_freerdp_jni.c
index 8d64e094c..308c146cb 100644
--- a/client/Android/jni/generated/android_freerdp_jni.c
+++ b/client/Android/FreeRDPCore/jni/generated/android_freerdp_jni.c
@@ -20,32 +20,32 @@
#include "android_freerdp.h"
#include "android_freerdp_jni.h"
-JNIEXPORT jint JNICALL Java_com_freerdp_afreerdp_services_LibFreeRDP_freerdp_1new(JNIEnv *env, jclass cls)
+JNIEXPORT jint JNICALL Java_com_freerdp_freerdpcore_services_LibFreeRDP_freerdp_1new(JNIEnv *env, jclass cls)
{
return jni_freerdp_new(env, cls);
}
-JNIEXPORT void JNICALL JNICALL Java_com_freerdp_afreerdp_services_LibFreeRDP_freerdp_1free(JNIEnv *env, jclass cls, jint instance)
+JNIEXPORT void JNICALL JNICALL Java_com_freerdp_freerdpcore_services_LibFreeRDP_freerdp_1free(JNIEnv *env, jclass cls, jint instance)
{
jni_freerdp_free(env, cls, instance);
}
-JNIEXPORT jboolean JNICALL Java_com_freerdp_afreerdp_services_LibFreeRDP_freerdp_1connect(JNIEnv *env, jclass cls, jint instance)
+JNIEXPORT jboolean JNICALL Java_com_freerdp_freerdpcore_services_LibFreeRDP_freerdp_1connect(JNIEnv *env, jclass cls, jint instance)
{
return jni_freerdp_connect(env, cls, instance);
}
-JNIEXPORT jboolean JNICALL Java_com_freerdp_afreerdp_services_LibFreeRDP_freerdp_1disconnect(JNIEnv *env, jclass cls, jint instance)
+JNIEXPORT jboolean JNICALL Java_com_freerdp_freerdpcore_services_LibFreeRDP_freerdp_1disconnect(JNIEnv *env, jclass cls, jint instance)
{
return jni_freerdp_disconnect(env, cls, instance);
}
-JNIEXPORT void JNICALL Java_com_freerdp_afreerdp_services_LibFreeRDP_freerdp_1cancel_1connection(JNIEnv *env, jclass cls, jint instance)
+JNIEXPORT void JNICALL Java_com_freerdp_freerdpcore_services_LibFreeRDP_freerdp_1cancel_1connection(JNIEnv *env, jclass cls, jint instance)
{
jni_freerdp_cancel_connection(env, cls, instance);
}
-JNIEXPORT void JNICALL Java_com_freerdp_afreerdp_services_LibFreeRDP_freerdp_1set_1connection_1info(JNIEnv *env, jclass cls, jint instance,
+JNIEXPORT void JNICALL Java_com_freerdp_freerdpcore_services_LibFreeRDP_freerdp_1set_1connection_1info(JNIEnv *env, jclass cls, jint instance,
jstring jhostname, jstring jusername, jstring jpassword, jstring jdomain, jint width, jint height, jint color_depth, jint port,
jboolean console, jint security, jstring certname)
{
@@ -53,48 +53,48 @@ JNIEXPORT void JNICALL Java_com_freerdp_afreerdp_services_LibFreeRDP_freerdp_1se
width, height, color_depth, port, console, security, certname);
}
-JNIEXPORT void JNICALL Java_com_freerdp_afreerdp_services_LibFreeRDP_freerdp_1set_1advanced_1settings(JNIEnv *env, jclass cls, jint instance, jstring remote_program, jstring work_dir)
+JNIEXPORT void JNICALL Java_com_freerdp_freerdpcore_services_LibFreeRDP_freerdp_1set_1advanced_1settings(JNIEnv *env, jclass cls, jint instance, jstring remote_program, jstring work_dir)
{
jni_freerdp_set_advanced_settings(env, cls, instance, remote_program, work_dir);
}
-JNIEXPORT void JNICALL Java_com_freerdp_afreerdp_services_LibFreeRDP_freerdp_1set_1data_1directory(JNIEnv *env, jclass cls, jint instance, jstring directory)
+JNIEXPORT void JNICALL Java_com_freerdp_freerdpcore_services_LibFreeRDP_freerdp_1set_1data_1directory(JNIEnv *env, jclass cls, jint instance, jstring directory)
{
jni_freerdp_set_data_directory(env, cls, instance, directory);
}
-JNIEXPORT void JNICALL Java_com_freerdp_afreerdp_services_LibFreeRDP_freerdp_1set_1performance_1flags(
+JNIEXPORT void JNICALL Java_com_freerdp_freerdpcore_services_LibFreeRDP_freerdp_1set_1performance_1flags(
JNIEnv *env, jclass cls, jint instance, jboolean remotefx, jboolean disableWallpaper, jboolean disableFullWindowDrag,
jboolean disableMenuAnimations, jboolean disableTheming, jboolean enableFontSmoothing, jboolean enableDesktopComposition)
{
jni_freerdp_set_performance_flags(env, cls, instance, remotefx, disableWallpaper, disableFullWindowDrag, disableMenuAnimations, disableTheming, enableFontSmoothing, enableDesktopComposition);
}
-JNIEXPORT jboolean JNICALL Java_com_freerdp_afreerdp_services_LibFreeRDP_freerdp_1update_1graphics(
+JNIEXPORT jboolean JNICALL Java_com_freerdp_freerdpcore_services_LibFreeRDP_freerdp_1update_1graphics(
JNIEnv *env, jclass cls, jint instance, jobject bitmap, jint x, jint y, jint width, jint height)
{
return jni_freerdp_update_graphics(env, cls, instance, bitmap, x, y, width, height);
}
-JNIEXPORT void JNICALL Java_com_freerdp_afreerdp_services_LibFreeRDP_freerdp_1send_1cursor_1event(
+JNIEXPORT void JNICALL Java_com_freerdp_freerdpcore_services_LibFreeRDP_freerdp_1send_1cursor_1event(
JNIEnv *env, jclass cls, jint instance, jint x, jint y, jint flags)
{
jni_freerdp_send_cursor_event(env, cls, instance, x, y, flags);
}
-JNIEXPORT void JNICALL Java_com_freerdp_afreerdp_services_LibFreeRDP_freerdp_1send_1key_1event(
+JNIEXPORT void JNICALL Java_com_freerdp_freerdpcore_services_LibFreeRDP_freerdp_1send_1key_1event(
JNIEnv *env, jclass cls, jint instance, jint keycode, jboolean down)
{
jni_freerdp_send_key_event(env, cls, instance, keycode, down);
}
-JNIEXPORT void JNICALL Java_com_freerdp_afreerdp_services_LibFreeRDP_freerdp_1send_1unicodekey_1event
+JNIEXPORT void JNICALL Java_com_freerdp_freerdpcore_services_LibFreeRDP_freerdp_1send_1unicodekey_1event
(JNIEnv *env, jclass cls, jint instance, jint keycode)
{
jni_freerdp_send_unicodekey_event(env, cls, instance, keycode);
}
-JNIEXPORT jstring JNICALL Java_com_freerdp_afreerdp_services_LibFreeRDP_freerdp_1get_1version(JNIEnv *env, jclass cls)
+JNIEXPORT jstring JNICALL Java_com_freerdp_freerdpcore_services_LibFreeRDP_freerdp_1get_1version(JNIEnv *env, jclass cls)
{
return jni_freerdp_get_version(env, cls);
}
diff --git a/client/Android/jni/generated/android_freerdp_jni.h b/client/Android/FreeRDPCore/jni/generated/android_freerdp_jni.h
similarity index 85%
rename from client/Android/jni/generated/android_freerdp_jni.h
rename to client/Android/FreeRDPCore/jni/generated/android_freerdp_jni.h
index a10d17cc6..fab4c7290 100644
--- a/client/Android/jni/generated/android_freerdp_jni.h
+++ b/client/Android/FreeRDPCore/jni/generated/android_freerdp_jni.h
@@ -20,9 +20,9 @@
#ifndef __ANDROID_FREERDP_JNI_H
#define __ANDROID_FREERDP_JNI_H
-#include "com_freerdp_afreerdp_services_LibFreeRDP.h"
+#include "com_freerdp_freerdpcore_services_LibFreeRDP.h"
-#define JAVA_LIBFREERDP_CLASS "com/freerdp/afreerdp/services/LibFreeRDP"
+#define JAVA_LIBFREERDP_CLASS "com/freerdp/freerdpcore/services/LibFreeRDP"
#endif /* __ANDROID_FREERDP_JNI_H */
diff --git a/client/Android/FreeRDPCore/jni/generated/com_freerdp_freerdpcore_services_LibFreeRDP.h b/client/Android/FreeRDPCore/jni/generated/com_freerdp_freerdpcore_services_LibFreeRDP.h
new file mode 100644
index 000000000..17c62cd99
--- /dev/null
+++ b/client/Android/FreeRDPCore/jni/generated/com_freerdp_freerdpcore_services_LibFreeRDP.h
@@ -0,0 +1,125 @@
+/* DO NOT EDIT THIS FILE - it is machine generated */
+#include
+/* Header for class com_freerdp_freerdpcore_services_LibFreeRDP */
+
+#ifndef _Included_com_freerdp_freerdpcore_services_LibFreeRDP
+#define _Included_com_freerdp_freerdpcore_services_LibFreeRDP
+#ifdef __cplusplus
+extern "C" {
+#endif
+/*
+ * Class: com_freerdp_freerdpcore_services_LibFreeRDP
+ * Method: freerdp_new
+ * Signature: ()I
+ */
+JNIEXPORT jint JNICALL Java_com_freerdp_freerdpcore_services_LibFreeRDP_freerdp_1new
+ (JNIEnv *, jclass);
+
+/*
+ * Class: com_freerdp_freerdpcore_services_LibFreeRDP
+ * Method: freerdp_free
+ * Signature: (I)V
+ */
+JNIEXPORT void JNICALL Java_com_freerdp_freerdpcore_services_LibFreeRDP_freerdp_1free
+ (JNIEnv *, jclass, jint);
+
+/*
+ * Class: com_freerdp_freerdpcore_services_LibFreeRDP
+ * Method: freerdp_connect
+ * Signature: (I)Z
+ */
+JNIEXPORT jboolean JNICALL Java_com_freerdp_freerdpcore_services_LibFreeRDP_freerdp_1connect
+ (JNIEnv *, jclass, jint);
+
+/*
+ * Class: com_freerdp_freerdpcore_services_LibFreeRDP
+ * Method: freerdp_disconnect
+ * Signature: (I)Z
+ */
+JNIEXPORT jboolean JNICALL Java_com_freerdp_freerdpcore_services_LibFreeRDP_freerdp_1disconnect
+ (JNIEnv *, jclass, jint);
+
+/*
+ * Class: com_freerdp_freerdpcore_services_LibFreeRDP
+ * Method: freerdp_cancel_connection
+ * Signature: (I)V
+ */
+JNIEXPORT void JNICALL Java_com_freerdp_freerdpcore_services_LibFreeRDP_freerdp_1cancel_1connection
+ (JNIEnv *, jclass, jint);
+
+/*
+ * Class: com_freerdp_freerdpcore_services_LibFreeRDP
+ * Method: freerdp_set_connection_info
+ * Signature: (ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;IIIIZILjava/lang/String;)V
+ */
+JNIEXPORT void JNICALL Java_com_freerdp_freerdpcore_services_LibFreeRDP_freerdp_1set_1connection_1info
+ (JNIEnv *, jclass, jint, jstring, jstring, jstring, jstring, jint, jint, jint, jint, jboolean, jint, jstring);
+
+/*
+ * Class: com_freerdp_freerdpcore_services_LibFreeRDP
+ * Method: freerdp_set_performance_flags
+ * Signature: (IZZZZZZZ)V
+ */
+JNIEXPORT void JNICALL Java_com_freerdp_freerdpcore_services_LibFreeRDP_freerdp_1set_1performance_1flags
+ (JNIEnv *, jclass, jint, jboolean, jboolean, jboolean, jboolean, jboolean, jboolean, jboolean);
+
+/*
+ * Class: com_freerdp_freerdpcore_services_LibFreeRDP
+ * Method: freerdp_set_advanced_settings
+ * Signature: (ILjava/lang/String;Ljava/lang/String;)V
+ */
+JNIEXPORT void JNICALL Java_com_freerdp_freerdpcore_services_LibFreeRDP_freerdp_1set_1advanced_1settings
+ (JNIEnv *, jclass, jint, jstring, jstring);
+
+/*
+ * Class: com_freerdp_freerdpcore_services_LibFreeRDP
+ * Method: freerdp_set_data_directory
+ * Signature: (ILjava/lang/String;)V
+ */
+JNIEXPORT void JNICALL Java_com_freerdp_freerdpcore_services_LibFreeRDP_freerdp_1set_1data_1directory
+ (JNIEnv *, jclass, jint, jstring);
+
+/*
+ * Class: com_freerdp_freerdpcore_services_LibFreeRDP
+ * Method: freerdp_update_graphics
+ * Signature: (ILandroid/graphics/Bitmap;IIII)Z
+ */
+JNIEXPORT jboolean JNICALL Java_com_freerdp_freerdpcore_services_LibFreeRDP_freerdp_1update_1graphics
+ (JNIEnv *, jclass, jint, jobject, jint, jint, jint, jint);
+
+/*
+ * Class: com_freerdp_freerdpcore_services_LibFreeRDP
+ * Method: freerdp_send_cursor_event
+ * Signature: (IIII)V
+ */
+JNIEXPORT void JNICALL Java_com_freerdp_freerdpcore_services_LibFreeRDP_freerdp_1send_1cursor_1event
+ (JNIEnv *, jclass, jint, jint, jint, jint);
+
+/*
+ * Class: com_freerdp_freerdpcore_services_LibFreeRDP
+ * Method: freerdp_send_key_event
+ * Signature: (IIZ)V
+ */
+JNIEXPORT void JNICALL Java_com_freerdp_freerdpcore_services_LibFreeRDP_freerdp_1send_1key_1event
+ (JNIEnv *, jclass, jint, jint, jboolean);
+
+/*
+ * Class: com_freerdp_freerdpcore_services_LibFreeRDP
+ * Method: freerdp_send_unicodekey_event
+ * Signature: (II)V
+ */
+JNIEXPORT void JNICALL Java_com_freerdp_freerdpcore_services_LibFreeRDP_freerdp_1send_1unicodekey_1event
+ (JNIEnv *, jclass, jint, jint);
+
+/*
+ * Class: com_freerdp_freerdpcore_services_LibFreeRDP
+ * Method: freerdp_get_version
+ * Signature: ()Ljava/lang/String;
+ */
+JNIEXPORT jstring JNICALL Java_com_freerdp_freerdpcore_services_LibFreeRDP_freerdp_1get_1version
+ (JNIEnv *, jclass);
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/client/Android/local.properties.cmake b/client/Android/FreeRDPCore/local.properties.cmake
similarity index 100%
rename from client/Android/local.properties.cmake
rename to client/Android/FreeRDPCore/local.properties.cmake
diff --git a/client/Android/FreeRDPCore/project.properties b/client/Android/FreeRDPCore/project.properties
new file mode 100644
index 000000000..db721fd89
--- /dev/null
+++ b/client/Android/FreeRDPCore/project.properties
@@ -0,0 +1,15 @@
+# This file is automatically generated by Android Tools.
+# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
+#
+# This file must be checked in Version Control Systems.
+#
+# To customize properties used by the Ant build system edit
+# "ant.properties", and override values to adapt the script to your
+# project structure.
+#
+# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):
+#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
+
+# Project target.
+target=android-8
+android.library=true
diff --git a/client/Android/res/drawable-hdpi/icon_button_add.png b/client/Android/FreeRDPCore/res/drawable-hdpi/icon_button_add.png
similarity index 100%
rename from client/Android/res/drawable-hdpi/icon_button_add.png
rename to client/Android/FreeRDPCore/res/drawable-hdpi/icon_button_add.png
diff --git a/client/Android/res/drawable-hdpi/icon_edittext_clear.png b/client/Android/FreeRDPCore/res/drawable-hdpi/icon_edittext_clear.png
similarity index 100%
rename from client/Android/res/drawable-hdpi/icon_edittext_clear.png
rename to client/Android/FreeRDPCore/res/drawable-hdpi/icon_edittext_clear.png
diff --git a/client/Android/res/drawable-hdpi/icon_edittext_search.png b/client/Android/FreeRDPCore/res/drawable-hdpi/icon_edittext_search.png
similarity index 100%
rename from client/Android/res/drawable-hdpi/icon_edittext_search.png
rename to client/Android/FreeRDPCore/res/drawable-hdpi/icon_edittext_search.png
diff --git a/client/Android/res/drawable-hdpi/icon_launcher_freerdp.png b/client/Android/FreeRDPCore/res/drawable-hdpi/icon_launcher_freerdp.png
similarity index 100%
rename from client/Android/res/drawable-hdpi/icon_launcher_freerdp.png
rename to client/Android/FreeRDPCore/res/drawable-hdpi/icon_launcher_freerdp.png
diff --git a/client/Android/res/drawable-hdpi/icon_menu_about.png b/client/Android/FreeRDPCore/res/drawable-hdpi/icon_menu_about.png
similarity index 100%
rename from client/Android/res/drawable-hdpi/icon_menu_about.png
rename to client/Android/FreeRDPCore/res/drawable-hdpi/icon_menu_about.png
diff --git a/client/Android/res/drawable-hdpi/icon_menu_add.png b/client/Android/FreeRDPCore/res/drawable-hdpi/icon_menu_add.png
similarity index 100%
rename from client/Android/res/drawable-hdpi/icon_menu_add.png
rename to client/Android/FreeRDPCore/res/drawable-hdpi/icon_menu_add.png
diff --git a/client/Android/res/drawable-hdpi/icon_menu_close.png b/client/Android/FreeRDPCore/res/drawable-hdpi/icon_menu_close.png
similarity index 100%
rename from client/Android/res/drawable-hdpi/icon_menu_close.png
rename to client/Android/FreeRDPCore/res/drawable-hdpi/icon_menu_close.png
diff --git a/client/Android/res/drawable-hdpi/icon_menu_disconnect.png b/client/Android/FreeRDPCore/res/drawable-hdpi/icon_menu_disconnect.png
similarity index 100%
rename from client/Android/res/drawable-hdpi/icon_menu_disconnect.png
rename to client/Android/FreeRDPCore/res/drawable-hdpi/icon_menu_disconnect.png
diff --git a/client/Android/res/drawable-hdpi/icon_menu_ext_keyboard.png b/client/Android/FreeRDPCore/res/drawable-hdpi/icon_menu_ext_keyboard.png
similarity index 100%
rename from client/Android/res/drawable-hdpi/icon_menu_ext_keyboard.png
rename to client/Android/FreeRDPCore/res/drawable-hdpi/icon_menu_ext_keyboard.png
diff --git a/client/Android/res/drawable-hdpi/icon_menu_help.png b/client/Android/FreeRDPCore/res/drawable-hdpi/icon_menu_help.png
similarity index 100%
rename from client/Android/res/drawable-hdpi/icon_menu_help.png
rename to client/Android/FreeRDPCore/res/drawable-hdpi/icon_menu_help.png
diff --git a/client/Android/res/drawable-hdpi/icon_menu_preferences.png b/client/Android/FreeRDPCore/res/drawable-hdpi/icon_menu_preferences.png
similarity index 100%
rename from client/Android/res/drawable-hdpi/icon_menu_preferences.png
rename to client/Android/FreeRDPCore/res/drawable-hdpi/icon_menu_preferences.png
diff --git a/client/Android/res/drawable-hdpi/icon_menu_settings.png b/client/Android/FreeRDPCore/res/drawable-hdpi/icon_menu_settings.png
similarity index 100%
rename from client/Android/res/drawable-hdpi/icon_menu_settings.png
rename to client/Android/FreeRDPCore/res/drawable-hdpi/icon_menu_settings.png
diff --git a/client/Android/res/drawable-hdpi/icon_menu_sys_keyboard.png b/client/Android/FreeRDPCore/res/drawable-hdpi/icon_menu_sys_keyboard.png
similarity index 100%
rename from client/Android/res/drawable-hdpi/icon_menu_sys_keyboard.png
rename to client/Android/FreeRDPCore/res/drawable-hdpi/icon_menu_sys_keyboard.png
diff --git a/client/Android/res/drawable-hdpi/icon_menu_touch_pointer.png b/client/Android/FreeRDPCore/res/drawable-hdpi/icon_menu_touch_pointer.png
similarity index 100%
rename from client/Android/res/drawable-hdpi/icon_menu_touch_pointer.png
rename to client/Android/FreeRDPCore/res/drawable-hdpi/icon_menu_touch_pointer.png
diff --git a/client/Android/res/drawable-hdpi/icon_star_off.png b/client/Android/FreeRDPCore/res/drawable-hdpi/icon_star_off.png
similarity index 100%
rename from client/Android/res/drawable-hdpi/icon_star_off.png
rename to client/Android/FreeRDPCore/res/drawable-hdpi/icon_star_off.png
diff --git a/client/Android/res/drawable-hdpi/icon_star_on.png b/client/Android/FreeRDPCore/res/drawable-hdpi/icon_star_on.png
similarity index 100%
rename from client/Android/res/drawable-hdpi/icon_star_on.png
rename to client/Android/FreeRDPCore/res/drawable-hdpi/icon_star_on.png
diff --git a/client/Android/res/drawable-hdpi/search_plate.9.png b/client/Android/FreeRDPCore/res/drawable-hdpi/search_plate.9.png
similarity index 100%
rename from client/Android/res/drawable-hdpi/search_plate.9.png
rename to client/Android/FreeRDPCore/res/drawable-hdpi/search_plate.9.png
diff --git a/client/Android/res/drawable-hdpi/sym_keyboard_delete.png b/client/Android/FreeRDPCore/res/drawable-hdpi/sym_keyboard_delete.png
similarity index 100%
rename from client/Android/res/drawable-hdpi/sym_keyboard_delete.png
rename to client/Android/FreeRDPCore/res/drawable-hdpi/sym_keyboard_delete.png
diff --git a/client/Android/res/drawable-hdpi/sym_keyboard_feedback_delete.png b/client/Android/FreeRDPCore/res/drawable-hdpi/sym_keyboard_feedback_delete.png
similarity index 100%
rename from client/Android/res/drawable-hdpi/sym_keyboard_feedback_delete.png
rename to client/Android/FreeRDPCore/res/drawable-hdpi/sym_keyboard_feedback_delete.png
diff --git a/client/Android/res/drawable-hdpi/sym_keyboard_feedback_return.png b/client/Android/FreeRDPCore/res/drawable-hdpi/sym_keyboard_feedback_return.png
similarity index 100%
rename from client/Android/res/drawable-hdpi/sym_keyboard_feedback_return.png
rename to client/Android/FreeRDPCore/res/drawable-hdpi/sym_keyboard_feedback_return.png
diff --git a/client/Android/res/drawable-hdpi/sym_keyboard_return.png b/client/Android/FreeRDPCore/res/drawable-hdpi/sym_keyboard_return.png
similarity index 100%
rename from client/Android/res/drawable-hdpi/sym_keyboard_return.png
rename to client/Android/FreeRDPCore/res/drawable-hdpi/sym_keyboard_return.png
diff --git a/client/Android/res/drawable-ldpi/icon_button_add.png b/client/Android/FreeRDPCore/res/drawable-ldpi/icon_button_add.png
similarity index 100%
rename from client/Android/res/drawable-ldpi/icon_button_add.png
rename to client/Android/FreeRDPCore/res/drawable-ldpi/icon_button_add.png
diff --git a/client/Android/res/drawable-ldpi/icon_edittext_search.png b/client/Android/FreeRDPCore/res/drawable-ldpi/icon_edittext_search.png
similarity index 100%
rename from client/Android/res/drawable-ldpi/icon_edittext_search.png
rename to client/Android/FreeRDPCore/res/drawable-ldpi/icon_edittext_search.png
diff --git a/client/Android/res/drawable-ldpi/icon_launcher_freerdp.png b/client/Android/FreeRDPCore/res/drawable-ldpi/icon_launcher_freerdp.png
similarity index 100%
rename from client/Android/res/drawable-ldpi/icon_launcher_freerdp.png
rename to client/Android/FreeRDPCore/res/drawable-ldpi/icon_launcher_freerdp.png
diff --git a/client/Android/res/drawable-ldpi/icon_menu_about.png b/client/Android/FreeRDPCore/res/drawable-ldpi/icon_menu_about.png
similarity index 100%
rename from client/Android/res/drawable-ldpi/icon_menu_about.png
rename to client/Android/FreeRDPCore/res/drawable-ldpi/icon_menu_about.png
diff --git a/client/Android/res/drawable-ldpi/icon_menu_add.png b/client/Android/FreeRDPCore/res/drawable-ldpi/icon_menu_add.png
similarity index 100%
rename from client/Android/res/drawable-ldpi/icon_menu_add.png
rename to client/Android/FreeRDPCore/res/drawable-ldpi/icon_menu_add.png
diff --git a/client/Android/res/drawable-ldpi/icon_menu_disconnect.png b/client/Android/FreeRDPCore/res/drawable-ldpi/icon_menu_disconnect.png
similarity index 100%
rename from client/Android/res/drawable-ldpi/icon_menu_disconnect.png
rename to client/Android/FreeRDPCore/res/drawable-ldpi/icon_menu_disconnect.png
diff --git a/client/Android/res/drawable-ldpi/icon_menu_exit.png b/client/Android/FreeRDPCore/res/drawable-ldpi/icon_menu_exit.png
similarity index 100%
rename from client/Android/res/drawable-ldpi/icon_menu_exit.png
rename to client/Android/FreeRDPCore/res/drawable-ldpi/icon_menu_exit.png
diff --git a/client/Android/res/drawable-ldpi/icon_menu_ext_keyboard.png b/client/Android/FreeRDPCore/res/drawable-ldpi/icon_menu_ext_keyboard.png
similarity index 100%
rename from client/Android/res/drawable-ldpi/icon_menu_ext_keyboard.png
rename to client/Android/FreeRDPCore/res/drawable-ldpi/icon_menu_ext_keyboard.png
diff --git a/client/Android/res/drawable-ldpi/icon_menu_help.png b/client/Android/FreeRDPCore/res/drawable-ldpi/icon_menu_help.png
similarity index 100%
rename from client/Android/res/drawable-ldpi/icon_menu_help.png
rename to client/Android/FreeRDPCore/res/drawable-ldpi/icon_menu_help.png
diff --git a/client/Android/res/drawable-ldpi/icon_menu_preferences.png b/client/Android/FreeRDPCore/res/drawable-ldpi/icon_menu_preferences.png
similarity index 100%
rename from client/Android/res/drawable-ldpi/icon_menu_preferences.png
rename to client/Android/FreeRDPCore/res/drawable-ldpi/icon_menu_preferences.png
diff --git a/client/Android/res/drawable-ldpi/icon_menu_settings.png b/client/Android/FreeRDPCore/res/drawable-ldpi/icon_menu_settings.png
similarity index 100%
rename from client/Android/res/drawable-ldpi/icon_menu_settings.png
rename to client/Android/FreeRDPCore/res/drawable-ldpi/icon_menu_settings.png
diff --git a/client/Android/res/drawable-ldpi/icon_menu_sys_keyboard.png b/client/Android/FreeRDPCore/res/drawable-ldpi/icon_menu_sys_keyboard.png
similarity index 100%
rename from client/Android/res/drawable-ldpi/icon_menu_sys_keyboard.png
rename to client/Android/FreeRDPCore/res/drawable-ldpi/icon_menu_sys_keyboard.png
diff --git a/client/Android/res/drawable-ldpi/icon_menu_touch_pointer.png b/client/Android/FreeRDPCore/res/drawable-ldpi/icon_menu_touch_pointer.png
similarity index 100%
rename from client/Android/res/drawable-ldpi/icon_menu_touch_pointer.png
rename to client/Android/FreeRDPCore/res/drawable-ldpi/icon_menu_touch_pointer.png
diff --git a/client/Android/res/drawable-ldpi/icon_star_off.png b/client/Android/FreeRDPCore/res/drawable-ldpi/icon_star_off.png
similarity index 100%
rename from client/Android/res/drawable-ldpi/icon_star_off.png
rename to client/Android/FreeRDPCore/res/drawable-ldpi/icon_star_off.png
diff --git a/client/Android/res/drawable-ldpi/icon_star_on.png b/client/Android/FreeRDPCore/res/drawable-ldpi/icon_star_on.png
similarity index 100%
rename from client/Android/res/drawable-ldpi/icon_star_on.png
rename to client/Android/FreeRDPCore/res/drawable-ldpi/icon_star_on.png
diff --git a/client/Android/res/drawable-ldpi/search_plate.9.png b/client/Android/FreeRDPCore/res/drawable-ldpi/search_plate.9.png
similarity index 100%
rename from client/Android/res/drawable-ldpi/search_plate.9.png
rename to client/Android/FreeRDPCore/res/drawable-ldpi/search_plate.9.png
diff --git a/client/Android/res/drawable-ldpi/sym_keyboard_delete.png b/client/Android/FreeRDPCore/res/drawable-ldpi/sym_keyboard_delete.png
similarity index 100%
rename from client/Android/res/drawable-ldpi/sym_keyboard_delete.png
rename to client/Android/FreeRDPCore/res/drawable-ldpi/sym_keyboard_delete.png
diff --git a/client/Android/res/drawable-ldpi/sym_keyboard_feedback_delete.png b/client/Android/FreeRDPCore/res/drawable-ldpi/sym_keyboard_feedback_delete.png
similarity index 100%
rename from client/Android/res/drawable-ldpi/sym_keyboard_feedback_delete.png
rename to client/Android/FreeRDPCore/res/drawable-ldpi/sym_keyboard_feedback_delete.png
diff --git a/client/Android/res/drawable-ldpi/sym_keyboard_feedback_return.png b/client/Android/FreeRDPCore/res/drawable-ldpi/sym_keyboard_feedback_return.png
similarity index 100%
rename from client/Android/res/drawable-ldpi/sym_keyboard_feedback_return.png
rename to client/Android/FreeRDPCore/res/drawable-ldpi/sym_keyboard_feedback_return.png
diff --git a/client/Android/res/drawable-ldpi/sym_keyboard_return.png b/client/Android/FreeRDPCore/res/drawable-ldpi/sym_keyboard_return.png
similarity index 100%
rename from client/Android/res/drawable-ldpi/sym_keyboard_return.png
rename to client/Android/FreeRDPCore/res/drawable-ldpi/sym_keyboard_return.png
diff --git a/client/Android/res/drawable-mdpi/icon_button_add.png b/client/Android/FreeRDPCore/res/drawable-mdpi/icon_button_add.png
similarity index 100%
rename from client/Android/res/drawable-mdpi/icon_button_add.png
rename to client/Android/FreeRDPCore/res/drawable-mdpi/icon_button_add.png
diff --git a/client/Android/res/drawable-mdpi/icon_edittext_clear.png b/client/Android/FreeRDPCore/res/drawable-mdpi/icon_edittext_clear.png
similarity index 100%
rename from client/Android/res/drawable-mdpi/icon_edittext_clear.png
rename to client/Android/FreeRDPCore/res/drawable-mdpi/icon_edittext_clear.png
diff --git a/client/Android/res/drawable-mdpi/icon_edittext_search.png b/client/Android/FreeRDPCore/res/drawable-mdpi/icon_edittext_search.png
similarity index 100%
rename from client/Android/res/drawable-mdpi/icon_edittext_search.png
rename to client/Android/FreeRDPCore/res/drawable-mdpi/icon_edittext_search.png
diff --git a/client/Android/res/drawable-mdpi/icon_launcher_freerdp.png b/client/Android/FreeRDPCore/res/drawable-mdpi/icon_launcher_freerdp.png
similarity index 100%
rename from client/Android/res/drawable-mdpi/icon_launcher_freerdp.png
rename to client/Android/FreeRDPCore/res/drawable-mdpi/icon_launcher_freerdp.png
diff --git a/client/Android/res/drawable-mdpi/icon_menu_about.png b/client/Android/FreeRDPCore/res/drawable-mdpi/icon_menu_about.png
similarity index 100%
rename from client/Android/res/drawable-mdpi/icon_menu_about.png
rename to client/Android/FreeRDPCore/res/drawable-mdpi/icon_menu_about.png
diff --git a/client/Android/res/drawable-mdpi/icon_menu_add.png b/client/Android/FreeRDPCore/res/drawable-mdpi/icon_menu_add.png
similarity index 100%
rename from client/Android/res/drawable-mdpi/icon_menu_add.png
rename to client/Android/FreeRDPCore/res/drawable-mdpi/icon_menu_add.png
diff --git a/client/Android/res/drawable-mdpi/icon_menu_disconnect.png b/client/Android/FreeRDPCore/res/drawable-mdpi/icon_menu_disconnect.png
similarity index 100%
rename from client/Android/res/drawable-mdpi/icon_menu_disconnect.png
rename to client/Android/FreeRDPCore/res/drawable-mdpi/icon_menu_disconnect.png
diff --git a/client/Android/res/drawable-mdpi/icon_menu_exit.png b/client/Android/FreeRDPCore/res/drawable-mdpi/icon_menu_exit.png
similarity index 100%
rename from client/Android/res/drawable-mdpi/icon_menu_exit.png
rename to client/Android/FreeRDPCore/res/drawable-mdpi/icon_menu_exit.png
diff --git a/client/Android/res/drawable-mdpi/icon_menu_ext_keyboard.png b/client/Android/FreeRDPCore/res/drawable-mdpi/icon_menu_ext_keyboard.png
similarity index 100%
rename from client/Android/res/drawable-mdpi/icon_menu_ext_keyboard.png
rename to client/Android/FreeRDPCore/res/drawable-mdpi/icon_menu_ext_keyboard.png
diff --git a/client/Android/res/drawable-mdpi/icon_menu_help.png b/client/Android/FreeRDPCore/res/drawable-mdpi/icon_menu_help.png
similarity index 100%
rename from client/Android/res/drawable-mdpi/icon_menu_help.png
rename to client/Android/FreeRDPCore/res/drawable-mdpi/icon_menu_help.png
diff --git a/client/Android/res/drawable-mdpi/icon_menu_preferences.png b/client/Android/FreeRDPCore/res/drawable-mdpi/icon_menu_preferences.png
similarity index 100%
rename from client/Android/res/drawable-mdpi/icon_menu_preferences.png
rename to client/Android/FreeRDPCore/res/drawable-mdpi/icon_menu_preferences.png
diff --git a/client/Android/res/drawable-mdpi/icon_menu_settings.png b/client/Android/FreeRDPCore/res/drawable-mdpi/icon_menu_settings.png
similarity index 100%
rename from client/Android/res/drawable-mdpi/icon_menu_settings.png
rename to client/Android/FreeRDPCore/res/drawable-mdpi/icon_menu_settings.png
diff --git a/client/Android/res/drawable-mdpi/icon_menu_sys_keyboard.png b/client/Android/FreeRDPCore/res/drawable-mdpi/icon_menu_sys_keyboard.png
similarity index 100%
rename from client/Android/res/drawable-mdpi/icon_menu_sys_keyboard.png
rename to client/Android/FreeRDPCore/res/drawable-mdpi/icon_menu_sys_keyboard.png
diff --git a/client/Android/res/drawable-mdpi/icon_menu_touch_pointer.png b/client/Android/FreeRDPCore/res/drawable-mdpi/icon_menu_touch_pointer.png
similarity index 100%
rename from client/Android/res/drawable-mdpi/icon_menu_touch_pointer.png
rename to client/Android/FreeRDPCore/res/drawable-mdpi/icon_menu_touch_pointer.png
diff --git a/client/Android/res/drawable-mdpi/icon_star_off.png b/client/Android/FreeRDPCore/res/drawable-mdpi/icon_star_off.png
similarity index 100%
rename from client/Android/res/drawable-mdpi/icon_star_off.png
rename to client/Android/FreeRDPCore/res/drawable-mdpi/icon_star_off.png
diff --git a/client/Android/res/drawable-mdpi/icon_star_on.png b/client/Android/FreeRDPCore/res/drawable-mdpi/icon_star_on.png
similarity index 100%
rename from client/Android/res/drawable-mdpi/icon_star_on.png
rename to client/Android/FreeRDPCore/res/drawable-mdpi/icon_star_on.png
diff --git a/client/Android/res/drawable-mdpi/search_plate.9.png b/client/Android/FreeRDPCore/res/drawable-mdpi/search_plate.9.png
similarity index 100%
rename from client/Android/res/drawable-mdpi/search_plate.9.png
rename to client/Android/FreeRDPCore/res/drawable-mdpi/search_plate.9.png
diff --git a/client/Android/res/drawable-mdpi/sym_keyboard_delete.png b/client/Android/FreeRDPCore/res/drawable-mdpi/sym_keyboard_delete.png
similarity index 100%
rename from client/Android/res/drawable-mdpi/sym_keyboard_delete.png
rename to client/Android/FreeRDPCore/res/drawable-mdpi/sym_keyboard_delete.png
diff --git a/client/Android/res/drawable-mdpi/sym_keyboard_feedback_delete.png b/client/Android/FreeRDPCore/res/drawable-mdpi/sym_keyboard_feedback_delete.png
similarity index 100%
rename from client/Android/res/drawable-mdpi/sym_keyboard_feedback_delete.png
rename to client/Android/FreeRDPCore/res/drawable-mdpi/sym_keyboard_feedback_delete.png
diff --git a/client/Android/res/drawable-mdpi/sym_keyboard_feedback_return.png b/client/Android/FreeRDPCore/res/drawable-mdpi/sym_keyboard_feedback_return.png
similarity index 100%
rename from client/Android/res/drawable-mdpi/sym_keyboard_feedback_return.png
rename to client/Android/FreeRDPCore/res/drawable-mdpi/sym_keyboard_feedback_return.png
diff --git a/client/Android/res/drawable-mdpi/sym_keyboard_return.png b/client/Android/FreeRDPCore/res/drawable-mdpi/sym_keyboard_return.png
similarity index 100%
rename from client/Android/res/drawable-mdpi/sym_keyboard_return.png
rename to client/Android/FreeRDPCore/res/drawable-mdpi/sym_keyboard_return.png
diff --git a/client/Android/res/drawable/button_background.xml b/client/Android/FreeRDPCore/res/drawable/button_background.xml
similarity index 100%
rename from client/Android/res/drawable/button_background.xml
rename to client/Android/FreeRDPCore/res/drawable/button_background.xml
diff --git a/client/Android/res/drawable/icon_button_cancel.png b/client/Android/FreeRDPCore/res/drawable/icon_button_cancel.png
similarity index 100%
rename from client/Android/res/drawable/icon_button_cancel.png
rename to client/Android/FreeRDPCore/res/drawable/icon_button_cancel.png
diff --git a/client/Android/res/drawable/icon_launcher_freerdp.png b/client/Android/FreeRDPCore/res/drawable/icon_launcher_freerdp.png
similarity index 100%
rename from client/Android/res/drawable/icon_launcher_freerdp.png
rename to client/Android/FreeRDPCore/res/drawable/icon_launcher_freerdp.png
diff --git a/client/Android/res/drawable/separator_background.xml b/client/Android/FreeRDPCore/res/drawable/separator_background.xml
similarity index 100%
rename from client/Android/res/drawable/separator_background.xml
rename to client/Android/FreeRDPCore/res/drawable/separator_background.xml
diff --git a/client/Android/res/drawable/sym_keyboard_arrows.png b/client/Android/FreeRDPCore/res/drawable/sym_keyboard_arrows.png
similarity index 100%
rename from client/Android/res/drawable/sym_keyboard_arrows.png
rename to client/Android/FreeRDPCore/res/drawable/sym_keyboard_arrows.png
diff --git a/client/Android/res/drawable/sym_keyboard_arrows_black.png b/client/Android/FreeRDPCore/res/drawable/sym_keyboard_arrows_black.png
similarity index 100%
rename from client/Android/res/drawable/sym_keyboard_arrows_black.png
rename to client/Android/FreeRDPCore/res/drawable/sym_keyboard_arrows_black.png
diff --git a/client/Android/res/drawable/sym_keyboard_down_arrow.png b/client/Android/FreeRDPCore/res/drawable/sym_keyboard_down_arrow.png
similarity index 100%
rename from client/Android/res/drawable/sym_keyboard_down_arrow.png
rename to client/Android/FreeRDPCore/res/drawable/sym_keyboard_down_arrow.png
diff --git a/client/Android/res/drawable/sym_keyboard_down_arrow_black.png b/client/Android/FreeRDPCore/res/drawable/sym_keyboard_down_arrow_black.png
similarity index 100%
rename from client/Android/res/drawable/sym_keyboard_down_arrow_black.png
rename to client/Android/FreeRDPCore/res/drawable/sym_keyboard_down_arrow_black.png
diff --git a/client/Android/res/drawable/sym_keyboard_left_arrow.png b/client/Android/FreeRDPCore/res/drawable/sym_keyboard_left_arrow.png
similarity index 100%
rename from client/Android/res/drawable/sym_keyboard_left_arrow.png
rename to client/Android/FreeRDPCore/res/drawable/sym_keyboard_left_arrow.png
diff --git a/client/Android/res/drawable/sym_keyboard_left_arrow_black.png b/client/Android/FreeRDPCore/res/drawable/sym_keyboard_left_arrow_black.png
similarity index 100%
rename from client/Android/res/drawable/sym_keyboard_left_arrow_black.png
rename to client/Android/FreeRDPCore/res/drawable/sym_keyboard_left_arrow_black.png
diff --git a/client/Android/res/drawable/sym_keyboard_menu.png b/client/Android/FreeRDPCore/res/drawable/sym_keyboard_menu.png
similarity index 100%
rename from client/Android/res/drawable/sym_keyboard_menu.png
rename to client/Android/FreeRDPCore/res/drawable/sym_keyboard_menu.png
diff --git a/client/Android/res/drawable/sym_keyboard_menu_black.png b/client/Android/FreeRDPCore/res/drawable/sym_keyboard_menu_black.png
similarity index 100%
rename from client/Android/res/drawable/sym_keyboard_menu_black.png
rename to client/Android/FreeRDPCore/res/drawable/sym_keyboard_menu_black.png
diff --git a/client/Android/res/drawable/sym_keyboard_right_arrow.png b/client/Android/FreeRDPCore/res/drawable/sym_keyboard_right_arrow.png
similarity index 100%
rename from client/Android/res/drawable/sym_keyboard_right_arrow.png
rename to client/Android/FreeRDPCore/res/drawable/sym_keyboard_right_arrow.png
diff --git a/client/Android/res/drawable/sym_keyboard_right_arrow_black.png b/client/Android/FreeRDPCore/res/drawable/sym_keyboard_right_arrow_black.png
similarity index 100%
rename from client/Android/res/drawable/sym_keyboard_right_arrow_black.png
rename to client/Android/FreeRDPCore/res/drawable/sym_keyboard_right_arrow_black.png
diff --git a/client/Android/res/drawable/sym_keyboard_up_arrow.png b/client/Android/FreeRDPCore/res/drawable/sym_keyboard_up_arrow.png
similarity index 100%
rename from client/Android/res/drawable/sym_keyboard_up_arrow.png
rename to client/Android/FreeRDPCore/res/drawable/sym_keyboard_up_arrow.png
diff --git a/client/Android/res/drawable/sym_keyboard_up_arrow_black.png b/client/Android/FreeRDPCore/res/drawable/sym_keyboard_up_arrow_black.png
similarity index 100%
rename from client/Android/res/drawable/sym_keyboard_up_arrow_black.png
rename to client/Android/FreeRDPCore/res/drawable/sym_keyboard_up_arrow_black.png
diff --git a/client/Android/res/drawable/sym_keyboard_winkey.png b/client/Android/FreeRDPCore/res/drawable/sym_keyboard_winkey.png
similarity index 100%
rename from client/Android/res/drawable/sym_keyboard_winkey.png
rename to client/Android/FreeRDPCore/res/drawable/sym_keyboard_winkey.png
diff --git a/client/Android/res/drawable/sym_keyboard_winkey_black.png b/client/Android/FreeRDPCore/res/drawable/sym_keyboard_winkey_black.png
similarity index 100%
rename from client/Android/res/drawable/sym_keyboard_winkey_black.png
rename to client/Android/FreeRDPCore/res/drawable/sym_keyboard_winkey_black.png
diff --git a/client/Android/res/drawable/touch_pointer_active.png b/client/Android/FreeRDPCore/res/drawable/touch_pointer_active.png
similarity index 100%
rename from client/Android/res/drawable/touch_pointer_active.png
rename to client/Android/FreeRDPCore/res/drawable/touch_pointer_active.png
diff --git a/client/Android/res/drawable/touch_pointer_default.png b/client/Android/FreeRDPCore/res/drawable/touch_pointer_default.png
similarity index 100%
rename from client/Android/res/drawable/touch_pointer_default.png
rename to client/Android/FreeRDPCore/res/drawable/touch_pointer_default.png
diff --git a/client/Android/res/drawable/touch_pointer_extkeyboard.png b/client/Android/FreeRDPCore/res/drawable/touch_pointer_extkeyboard.png
similarity index 100%
rename from client/Android/res/drawable/touch_pointer_extkeyboard.png
rename to client/Android/FreeRDPCore/res/drawable/touch_pointer_extkeyboard.png
diff --git a/client/Android/res/drawable/touch_pointer_keyboard.png b/client/Android/FreeRDPCore/res/drawable/touch_pointer_keyboard.png
similarity index 100%
rename from client/Android/res/drawable/touch_pointer_keyboard.png
rename to client/Android/FreeRDPCore/res/drawable/touch_pointer_keyboard.png
diff --git a/client/Android/res/drawable/touch_pointer_lclick.png b/client/Android/FreeRDPCore/res/drawable/touch_pointer_lclick.png
similarity index 100%
rename from client/Android/res/drawable/touch_pointer_lclick.png
rename to client/Android/FreeRDPCore/res/drawable/touch_pointer_lclick.png
diff --git a/client/Android/res/drawable/touch_pointer_rclick.png b/client/Android/FreeRDPCore/res/drawable/touch_pointer_rclick.png
similarity index 100%
rename from client/Android/res/drawable/touch_pointer_rclick.png
rename to client/Android/FreeRDPCore/res/drawable/touch_pointer_rclick.png
diff --git a/client/Android/res/drawable/touch_pointer_reset.png b/client/Android/FreeRDPCore/res/drawable/touch_pointer_reset.png
similarity index 100%
rename from client/Android/res/drawable/touch_pointer_reset.png
rename to client/Android/FreeRDPCore/res/drawable/touch_pointer_reset.png
diff --git a/client/Android/res/drawable/touch_pointer_scroll.png b/client/Android/FreeRDPCore/res/drawable/touch_pointer_scroll.png
similarity index 100%
rename from client/Android/res/drawable/touch_pointer_scroll.png
rename to client/Android/FreeRDPCore/res/drawable/touch_pointer_scroll.png
diff --git a/client/Android/res/layout/bookmark_list_item.xml b/client/Android/FreeRDPCore/res/layout/bookmark_list_item.xml
similarity index 100%
rename from client/Android/res/layout/bookmark_list_item.xml
rename to client/Android/FreeRDPCore/res/layout/bookmark_list_item.xml
diff --git a/client/Android/res/layout/button_preference.xml b/client/Android/FreeRDPCore/res/layout/button_preference.xml
similarity index 100%
rename from client/Android/res/layout/button_preference.xml
rename to client/Android/FreeRDPCore/res/layout/button_preference.xml
diff --git a/client/Android/res/layout/credentials.xml b/client/Android/FreeRDPCore/res/layout/credentials.xml
similarity index 100%
rename from client/Android/res/layout/credentials.xml
rename to client/Android/FreeRDPCore/res/layout/credentials.xml
diff --git a/client/Android/res/layout/dont_show_again_dialog.xml b/client/Android/FreeRDPCore/res/layout/dont_show_again_dialog.xml
similarity index 100%
rename from client/Android/res/layout/dont_show_again_dialog.xml
rename to client/Android/FreeRDPCore/res/layout/dont_show_again_dialog.xml
diff --git a/client/Android/res/layout/home.xml b/client/Android/FreeRDPCore/res/layout/home.xml
similarity index 100%
rename from client/Android/res/layout/home.xml
rename to client/Android/FreeRDPCore/res/layout/home.xml
diff --git a/client/Android/res/layout/list_header.xml b/client/Android/FreeRDPCore/res/layout/list_header.xml
similarity index 100%
rename from client/Android/res/layout/list_header.xml
rename to client/Android/FreeRDPCore/res/layout/list_header.xml
diff --git a/client/Android/res/layout/session.xml b/client/Android/FreeRDPCore/res/layout/session.xml
similarity index 91%
rename from client/Android/res/layout/session.xml
rename to client/Android/FreeRDPCore/res/layout/session.xml
index aa4db7296..925e73d95 100644
--- a/client/Android/res/layout/session.xml
+++ b/client/Android/FreeRDPCore/res/layout/session.xml
@@ -24,7 +24,7 @@
android:visibility="gone"
/>
-
-
-
+
-
+ />
diff --git a/client/Android/res/menu/session_menu.xml b/client/Android/FreeRDPCore/res/menu/session_menu.xml
similarity index 100%
rename from client/Android/res/menu/session_menu.xml
rename to client/Android/FreeRDPCore/res/menu/session_menu.xml
diff --git a/client/Android/res/values-land/dimens.xml b/client/Android/FreeRDPCore/res/values-land/dimens.xml
similarity index 100%
rename from client/Android/res/values-land/dimens.xml
rename to client/Android/FreeRDPCore/res/values-land/dimens.xml
diff --git a/client/Android/res/values/attrs.xml b/client/Android/FreeRDPCore/res/values/attrs.xml
similarity index 100%
rename from client/Android/res/values/attrs.xml
rename to client/Android/FreeRDPCore/res/values/attrs.xml
diff --git a/client/Android/res/values/dimens.xml b/client/Android/FreeRDPCore/res/values/dimens.xml
similarity index 100%
rename from client/Android/res/values/dimens.xml
rename to client/Android/FreeRDPCore/res/values/dimens.xml
diff --git a/client/Android/res/values/integers.xml b/client/Android/FreeRDPCore/res/values/integers.xml
similarity index 100%
rename from client/Android/res/values/integers.xml
rename to client/Android/FreeRDPCore/res/values/integers.xml
diff --git a/client/Android/res/values/strings.xml b/client/Android/FreeRDPCore/res/values/strings.xml
similarity index 97%
rename from client/Android/res/values/strings.xml
rename to client/Android/FreeRDPCore/res/values/strings.xml
index 780a7aa3e..810127219 100644
--- a/client/Android/res/values/strings.xml
+++ b/client/Android/FreeRDPCore/res/values/strings.xml
@@ -1,7 +1,5 @@
- aFreeRDP
-
Yes
No
@@ -29,6 +27,8 @@
Manual Connections
Active Sessions
+
+ Connect to Computer
Login
No Servers
@@ -38,10 +38,6 @@
Wrong Password
Invalid Username
Add Connection
-
- aFreeRDP
- Connect to Computer
- Remote Computers
Host
Label
diff --git a/client/Android/res/values/theme.xml b/client/Android/FreeRDPCore/res/values/theme.xml
similarity index 100%
rename from client/Android/res/values/theme.xml
rename to client/Android/FreeRDPCore/res/values/theme.xml
diff --git a/client/Android/res/xml/advanced_settings.xml b/client/Android/FreeRDPCore/res/xml/advanced_settings.xml
similarity index 62%
rename from client/Android/res/xml/advanced_settings.xml
rename to client/Android/FreeRDPCore/res/xml/advanced_settings.xml
index 657a0dd7c..9158acf16 100644
--- a/client/Android/res/xml/advanced_settings.xml
+++ b/client/Android/FreeRDPCore/res/xml/advanced_settings.xml
@@ -15,20 +15,20 @@
-
+
-
+
-
+
diff --git a/client/Android/res/xml/application_settings.xml b/client/Android/FreeRDPCore/res/xml/application_settings.xml
similarity index 81%
rename from client/Android/res/xml/application_settings.xml
rename to client/Android/FreeRDPCore/res/xml/application_settings.xml
index 314b2acb9..9d7cc0a67 100644
--- a/client/Android/res/xml/application_settings.xml
+++ b/client/Android/FreeRDPCore/res/xml/application_settings.xml
@@ -9,7 +9,7 @@
If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
-->
-
+
@@ -21,7 +21,7 @@
-
+
diff --git a/client/Android/FreeRDPCore/res/xml/bookmark_settings.xml b/client/Android/FreeRDPCore/res/xml/bookmark_settings.xml
new file mode 100644
index 000000000..c49d4272a
--- /dev/null
+++ b/client/Android/FreeRDPCore/res/xml/bookmark_settings.xml
@@ -0,0 +1,54 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/client/Android/res/xml/credentials_settings.xml b/client/Android/FreeRDPCore/res/xml/credentials_settings.xml
similarity index 100%
rename from client/Android/res/xml/credentials_settings.xml
rename to client/Android/FreeRDPCore/res/xml/credentials_settings.xml
diff --git a/client/Android/res/xml/cursor_keyboard.xml b/client/Android/FreeRDPCore/res/xml/cursor_keyboard.xml
similarity index 100%
rename from client/Android/res/xml/cursor_keyboard.xml
rename to client/Android/FreeRDPCore/res/xml/cursor_keyboard.xml
diff --git a/client/Android/res/xml/modifiers_keyboard.xml b/client/Android/FreeRDPCore/res/xml/modifiers_keyboard.xml
similarity index 100%
rename from client/Android/res/xml/modifiers_keyboard.xml
rename to client/Android/FreeRDPCore/res/xml/modifiers_keyboard.xml
diff --git a/client/Android/res/xml/numpad_keyboard.xml b/client/Android/FreeRDPCore/res/xml/numpad_keyboard.xml
similarity index 100%
rename from client/Android/res/xml/numpad_keyboard.xml
rename to client/Android/FreeRDPCore/res/xml/numpad_keyboard.xml
diff --git a/client/Android/res/xml/performance_flags.xml b/client/Android/FreeRDPCore/res/xml/performance_flags.xml
similarity index 100%
rename from client/Android/res/xml/performance_flags.xml
rename to client/Android/FreeRDPCore/res/xml/performance_flags.xml
diff --git a/client/Android/res/xml/performance_flags_3g.xml b/client/Android/FreeRDPCore/res/xml/performance_flags_3g.xml
similarity index 100%
rename from client/Android/res/xml/performance_flags_3g.xml
rename to client/Android/FreeRDPCore/res/xml/performance_flags_3g.xml
diff --git a/client/Android/res/xml/screen_settings_3g.xml b/client/Android/FreeRDPCore/res/xml/screen_settings.xml
similarity index 51%
rename from client/Android/res/xml/screen_settings_3g.xml
rename to client/Android/FreeRDPCore/res/xml/screen_settings.xml
index de750855c..265c1c9e9 100644
--- a/client/Android/res/xml/screen_settings_3g.xml
+++ b/client/Android/FreeRDPCore/res/xml/screen_settings.xml
@@ -1,7 +1,7 @@
-
+
-
-
-
-
+
+
+
+
diff --git a/client/Android/FreeRDPCore/res/xml/screen_settings_3g.xml b/client/Android/FreeRDPCore/res/xml/screen_settings_3g.xml
new file mode 100644
index 000000000..0eb0a7925
--- /dev/null
+++ b/client/Android/FreeRDPCore/res/xml/screen_settings_3g.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/client/Android/res/xml/specialkeys_keyboard.xml b/client/Android/FreeRDPCore/res/xml/specialkeys_keyboard.xml
similarity index 100%
rename from client/Android/res/xml/specialkeys_keyboard.xml
rename to client/Android/FreeRDPCore/res/xml/specialkeys_keyboard.xml
diff --git a/client/Android/src/com/freerdp/afreerdp/application/GlobalApp.java b/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/application/GlobalApp.java
similarity index 93%
rename from client/Android/src/com/freerdp/afreerdp/application/GlobalApp.java
rename to client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/application/GlobalApp.java
index 4fd849c21..c37f8df5a 100644
--- a/client/Android/src/com/freerdp/afreerdp/application/GlobalApp.java
+++ b/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/application/GlobalApp.java
@@ -7,7 +7,7 @@
If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
-package com.freerdp.afreerdp.application;
+package com.freerdp.freerdpcore.application;
import android.app.Application;
import android.content.Intent;
@@ -16,13 +16,13 @@ import android.util.Log;
import java.util.*;
-import com.freerdp.afreerdp.application.SessionState;
-import com.freerdp.afreerdp.domain.BookmarkBase;
-import com.freerdp.afreerdp.services.BookmarkDB;
-import com.freerdp.afreerdp.services.HistoryDB;
-import com.freerdp.afreerdp.services.LibFreeRDP;
-import com.freerdp.afreerdp.services.ManualBookmarkGateway;
-import com.freerdp.afreerdp.services.QuickConnectHistoryGateway;
+import com.freerdp.freerdpcore.application.SessionState;
+import com.freerdp.freerdpcore.domain.BookmarkBase;
+import com.freerdp.freerdpcore.services.BookmarkDB;
+import com.freerdp.freerdpcore.services.HistoryDB;
+import com.freerdp.freerdpcore.services.LibFreeRDP;
+import com.freerdp.freerdpcore.services.ManualBookmarkGateway;
+import com.freerdp.freerdpcore.services.QuickConnectHistoryGateway;
public class GlobalApp extends Application implements LibFreeRDP.EventListener
{
diff --git a/client/Android/src/com/freerdp/afreerdp/application/GlobalSettings.java b/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/application/GlobalSettings.java
similarity index 98%
rename from client/Android/src/com/freerdp/afreerdp/application/GlobalSettings.java
rename to client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/application/GlobalSettings.java
index 48ef10fbb..5b876dd94 100644
--- a/client/Android/src/com/freerdp/afreerdp/application/GlobalSettings.java
+++ b/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/application/GlobalSettings.java
@@ -7,7 +7,7 @@
If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
-package com.freerdp.afreerdp.application;
+package com.freerdp.freerdpcore.application;
import android.content.Context;
import android.content.SharedPreferences;
diff --git a/client/Android/src/com/freerdp/afreerdp/application/NetworkStateReceiver.java b/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/application/NetworkStateReceiver.java
similarity index 97%
rename from client/Android/src/com/freerdp/afreerdp/application/NetworkStateReceiver.java
rename to client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/application/NetworkStateReceiver.java
index 24a7ff990..86f9f075e 100644
--- a/client/Android/src/com/freerdp/afreerdp/application/NetworkStateReceiver.java
+++ b/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/application/NetworkStateReceiver.java
@@ -7,7 +7,7 @@
If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
-package com.freerdp.afreerdp.application;
+package com.freerdp.freerdpcore.application;
import android.content.BroadcastReceiver;
import android.content.Context;
diff --git a/client/Android/src/com/freerdp/afreerdp/application/ScreenReceiver.java b/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/application/ScreenReceiver.java
similarity index 95%
rename from client/Android/src/com/freerdp/afreerdp/application/ScreenReceiver.java
rename to client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/application/ScreenReceiver.java
index d2d74286e..25c392c7e 100644
--- a/client/Android/src/com/freerdp/afreerdp/application/ScreenReceiver.java
+++ b/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/application/ScreenReceiver.java
@@ -7,7 +7,7 @@
If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
-package com.freerdp.afreerdp.application;
+package com.freerdp.freerdpcore.application;
import android.content.BroadcastReceiver;
import android.content.Context;
diff --git a/client/Android/src/com/freerdp/afreerdp/application/SessionState.java b/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/application/SessionState.java
similarity index 93%
rename from client/Android/src/com/freerdp/afreerdp/application/SessionState.java
rename to client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/application/SessionState.java
index 18d19f232..fe213fb4f 100644
--- a/client/Android/src/com/freerdp/afreerdp/application/SessionState.java
+++ b/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/application/SessionState.java
@@ -7,15 +7,15 @@
If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
-package com.freerdp.afreerdp.application;
+package com.freerdp.freerdpcore.application;
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.os.Parcel;
import android.os.Parcelable;
-import com.freerdp.afreerdp.domain.BookmarkBase;
-import com.freerdp.afreerdp.services.LibFreeRDP;
+import com.freerdp.freerdpcore.domain.BookmarkBase;
+import com.freerdp.freerdpcore.services.LibFreeRDP;
public class SessionState implements Parcelable
{
diff --git a/client/Android/src/com/freerdp/afreerdp/domain/BookmarkBase.java b/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/domain/BookmarkBase.java
similarity index 99%
rename from client/Android/src/com/freerdp/afreerdp/domain/BookmarkBase.java
rename to client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/domain/BookmarkBase.java
index dc73872e1..12828ffd4 100644
--- a/client/Android/src/com/freerdp/afreerdp/domain/BookmarkBase.java
+++ b/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/domain/BookmarkBase.java
@@ -7,9 +7,9 @@
If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
-package com.freerdp.afreerdp.domain;
+package com.freerdp.freerdpcore.domain;
-import com.freerdp.afreerdp.application.GlobalApp;
+import com.freerdp.freerdpcore.application.GlobalApp;
import android.content.SharedPreferences;
import android.os.Parcel;
diff --git a/client/Android/src/com/freerdp/afreerdp/domain/ConnectionReference.java b/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/domain/ConnectionReference.java
similarity index 97%
rename from client/Android/src/com/freerdp/afreerdp/domain/ConnectionReference.java
rename to client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/domain/ConnectionReference.java
index 7975f795e..270139c51 100644
--- a/client/Android/src/com/freerdp/afreerdp/domain/ConnectionReference.java
+++ b/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/domain/ConnectionReference.java
@@ -7,7 +7,7 @@
If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
-package com.freerdp.afreerdp.domain;
+package com.freerdp.freerdpcore.domain;
public class ConnectionReference
{
diff --git a/client/Android/src/com/freerdp/afreerdp/domain/ManualBookmark.java b/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/domain/ManualBookmark.java
similarity index 98%
rename from client/Android/src/com/freerdp/afreerdp/domain/ManualBookmark.java
rename to client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/domain/ManualBookmark.java
index 4d749c5a1..81d9b717c 100644
--- a/client/Android/src/com/freerdp/afreerdp/domain/ManualBookmark.java
+++ b/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/domain/ManualBookmark.java
@@ -7,7 +7,7 @@
If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
-package com.freerdp.afreerdp.domain;
+package com.freerdp.freerdpcore.domain;
import android.content.SharedPreferences;
import android.os.Parcel;
diff --git a/client/Android/src/com/freerdp/afreerdp/domain/PlaceholderBookmark.java b/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/domain/PlaceholderBookmark.java
similarity index 97%
rename from client/Android/src/com/freerdp/afreerdp/domain/PlaceholderBookmark.java
rename to client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/domain/PlaceholderBookmark.java
index 54b08d431..b6712ec02 100644
--- a/client/Android/src/com/freerdp/afreerdp/domain/PlaceholderBookmark.java
+++ b/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/domain/PlaceholderBookmark.java
@@ -7,7 +7,7 @@
If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
-package com.freerdp.afreerdp.domain;
+package com.freerdp.freerdpcore.domain;
import android.content.SharedPreferences;
import android.os.Parcel;
diff --git a/client/Android/src/com/freerdp/afreerdp/domain/QuickConnectBookmark.java b/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/domain/QuickConnectBookmark.java
similarity index 97%
rename from client/Android/src/com/freerdp/afreerdp/domain/QuickConnectBookmark.java
rename to client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/domain/QuickConnectBookmark.java
index 1f6780c26..396853989 100644
--- a/client/Android/src/com/freerdp/afreerdp/domain/QuickConnectBookmark.java
+++ b/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/domain/QuickConnectBookmark.java
@@ -7,7 +7,7 @@
If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
-package com.freerdp.afreerdp.domain;
+package com.freerdp.freerdpcore.domain;
import android.content.SharedPreferences;
import android.os.Parcel;
diff --git a/client/Android/src/com/freerdp/afreerdp/presentation/AboutActivity.java b/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/presentation/AboutActivity.java
similarity index 95%
rename from client/Android/src/com/freerdp/afreerdp/presentation/AboutActivity.java
rename to client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/presentation/AboutActivity.java
index f5a525b37..dc030c977 100644
--- a/client/Android/src/com/freerdp/afreerdp/presentation/AboutActivity.java
+++ b/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/presentation/AboutActivity.java
@@ -7,14 +7,14 @@
If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
-package com.freerdp.afreerdp.presentation;
+package com.freerdp.freerdpcore.presentation;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.IllegalFormatException;
-import com.freerdp.afreerdp.services.LibFreeRDP;
+import com.freerdp.freerdpcore.services.LibFreeRDP;
import android.app.Activity;
import android.content.pm.PackageManager.NameNotFoundException;
diff --git a/client/Android/src/com/freerdp/afreerdp/presentation/ApplicationSettingsActivity.java b/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/presentation/ApplicationSettingsActivity.java
similarity index 97%
rename from client/Android/src/com/freerdp/afreerdp/presentation/ApplicationSettingsActivity.java
rename to client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/presentation/ApplicationSettingsActivity.java
index 6dd387de3..3b99ee240 100644
--- a/client/Android/src/com/freerdp/afreerdp/presentation/ApplicationSettingsActivity.java
+++ b/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/presentation/ApplicationSettingsActivity.java
@@ -7,11 +7,11 @@
If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
-package com.freerdp.afreerdp.presentation;
+package com.freerdp.freerdpcore.presentation;
import java.io.File;
-import com.freerdp.afreerdp.R;
+import com.freerdp.freerdpcore.R;
import android.app.AlertDialog;
import android.content.DialogInterface;
diff --git a/client/Android/src/com/freerdp/afreerdp/presentation/BookmarkActivity.java b/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/presentation/BookmarkActivity.java
similarity index 93%
rename from client/Android/src/com/freerdp/afreerdp/presentation/BookmarkActivity.java
rename to client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/presentation/BookmarkActivity.java
index 40ebeddfa..078852f3b 100644
--- a/client/Android/src/com/freerdp/afreerdp/presentation/BookmarkActivity.java
+++ b/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/presentation/BookmarkActivity.java
@@ -7,21 +7,23 @@
If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
-package com.freerdp.afreerdp.presentation;
+package com.freerdp.freerdpcore.presentation;
-import com.freerdp.afreerdp.R;
-import com.freerdp.afreerdp.application.GlobalApp;
-import com.freerdp.afreerdp.domain.BookmarkBase;
-import com.freerdp.afreerdp.domain.ConnectionReference;
-import com.freerdp.afreerdp.domain.ManualBookmark;
-import com.freerdp.afreerdp.services.BookmarkBaseGateway;
+import com.freerdp.freerdpcore.R;
+import com.freerdp.freerdpcore.application.GlobalApp;
+import com.freerdp.freerdpcore.domain.BookmarkBase;
+import com.freerdp.freerdpcore.domain.ConnectionReference;
+import com.freerdp.freerdpcore.domain.ManualBookmark;
+import com.freerdp.freerdpcore.services.BookmarkBaseGateway;
import android.app.AlertDialog;
+import android.content.ComponentName;
import android.content.DialogInterface;
import android.content.SharedPreferences;
import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
import android.os.Bundle;
import android.preference.ListPreference;
+import android.preference.Preference;
import android.preference.PreferenceActivity;
public class BookmarkActivity extends PreferenceActivity implements OnSharedPreferenceChangeListener
@@ -137,8 +139,35 @@ public class BookmarkActivity extends PreferenceActivity implements OnSharedPref
// register for preferences changed notification
getPreferenceManager().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
+
+ // set the correct component names in our preferencescreen settings
+ setIntentComponentNames();
}
+ private void setIntentComponentNames()
+ {
+ // we set the component name for our sub-activity calls here because we don't know the package
+ // name of the main app in our library project.
+ ComponentName compName = new ComponentName(getPackageName(), BookmarkActivity.class.getName());
+ String[] prefKeys = {
+ "bookmark.credentials",
+ "bookmark.screen",
+ "bookmark.performance",
+ "bookmark.advanced",
+ "bookmark.screen_3g",
+ "bookmark.performance_3g"
+ };
+
+ for (int i = 0; i < prefKeys.length; ++i)
+ {
+ Preference pref = findPreference(prefKeys[i]);
+ if (pref != null)
+ pref.getIntent().setComponent(compName);
+ }
+
+
+ }
+
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
settings_changed = true;
diff --git a/client/Android/src/com/freerdp/afreerdp/presentation/HelpActivity.java b/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/presentation/HelpActivity.java
similarity index 95%
rename from client/Android/src/com/freerdp/afreerdp/presentation/HelpActivity.java
rename to client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/presentation/HelpActivity.java
index 07f6cc9d4..2b526faee 100644
--- a/client/Android/src/com/freerdp/afreerdp/presentation/HelpActivity.java
+++ b/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/presentation/HelpActivity.java
@@ -7,7 +7,7 @@
If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
-package com.freerdp.afreerdp.presentation;
+package com.freerdp.freerdpcore.presentation;
import android.app.Activity;
import android.content.res.Configuration;
diff --git a/client/Android/src/com/freerdp/afreerdp/presentation/HomeActivity.java b/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/presentation/HomeActivity.java
similarity index 80%
rename from client/Android/src/com/freerdp/afreerdp/presentation/HomeActivity.java
rename to client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/presentation/HomeActivity.java
index 62fff1d98..8abd471c9 100644
--- a/client/Android/src/com/freerdp/afreerdp/presentation/HomeActivity.java
+++ b/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/presentation/HomeActivity.java
@@ -7,19 +7,19 @@
If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
-package com.freerdp.afreerdp.presentation;
+package com.freerdp.freerdpcore.presentation;
import java.util.ArrayList;
-import com.freerdp.afreerdp.R;
-import com.freerdp.afreerdp.application.GlobalApp;
-import com.freerdp.afreerdp.application.GlobalSettings;
-import com.freerdp.afreerdp.domain.BookmarkBase;
-import com.freerdp.afreerdp.domain.ConnectionReference;
-import com.freerdp.afreerdp.domain.PlaceholderBookmark;
-import com.freerdp.afreerdp.domain.QuickConnectBookmark;
-import com.freerdp.afreerdp.utils.BookmarkArrayAdapter;
-import com.freerdp.afreerdp.utils.SeparatedListAdapter;
+import com.freerdp.freerdpcore.R;
+import com.freerdp.freerdpcore.application.GlobalApp;
+import com.freerdp.freerdpcore.application.GlobalSettings;
+import com.freerdp.freerdpcore.domain.BookmarkBase;
+import com.freerdp.freerdpcore.domain.ConnectionReference;
+import com.freerdp.freerdpcore.domain.PlaceholderBookmark;
+import com.freerdp.freerdpcore.domain.QuickConnectBookmark;
+import com.freerdp.freerdpcore.utils.BookmarkArrayAdapter;
+import com.freerdp.freerdpcore.utils.SeparatedListAdapter;
import android.app.Activity;
import android.app.AlertDialog;
@@ -185,52 +185,49 @@ public class HomeActivity extends Activity
// get connection reference
AdapterContextMenuInfo menuInfo = (AdapterContextMenuInfo)aItem.getMenuInfo();
String refStr = menuInfo.targetView.getTag().toString();
-
- switch(aItem.getItemId()) {
-
- case R.id.bookmark_connect:
+
+ // refer to http://tools.android.com/tips/non-constant-fields why we can't use switch/case here ..
+ int itemId = aItem.getItemId();
+ if (itemId == R.id.bookmark_connect)
+ {
+ Bundle bundle = new Bundle();
+ bundle.putString(SessionActivity.PARAM_CONNECTION_REFERENCE, refStr);
+ Intent sessionIntent = new Intent(this, SessionActivity.class);
+ sessionIntent.putExtras(bundle);
+
+ startActivity(sessionIntent);
+ return true;
+ }
+ else if (itemId == R.id.bookmark_edit)
+ {
+ Bundle bundle = new Bundle();
+ bundle.putString(BookmarkActivity.PARAM_CONNECTION_REFERENCE, refStr);
+
+ Intent bookmarkIntent = new Intent(this.getApplicationContext(), BookmarkActivity.class);
+ bookmarkIntent.putExtras(bundle);
+ startActivity(bookmarkIntent);
+ return true;
+ }
+ else if (itemId == R.id.bookmark_delete)
+ {
+ if(ConnectionReference.isManualBookmarkReference(refStr))
{
- Bundle bundle = new Bundle();
- bundle.putString(SessionActivity.PARAM_CONNECTION_REFERENCE, refStr);
- Intent sessionIntent = new Intent(this, SessionActivity.class);
- sessionIntent.putExtras(bundle);
-
- startActivity(sessionIntent);
- return true;
+ long id = ConnectionReference.getManualBookmarkId(refStr);
+ GlobalApp.getManualBookmarkGateway().delete(id);
+ manualBookmarkAdapter.remove(id);
+ separatedListAdapter.notifyDataSetChanged();
+ }
+ else
+ {
+ assert false;
}
- case R.id.bookmark_edit:
- {
- Bundle bundle = new Bundle();
- bundle.putString(BookmarkActivity.PARAM_CONNECTION_REFERENCE, refStr);
-
- Intent bookmarkIntent = new Intent(this.getApplicationContext(), BookmarkActivity.class);
- bookmarkIntent.putExtras(bundle);
- startActivity(bookmarkIntent);
- return true;
- }
-
- case R.id.bookmark_delete:
- {
- if(ConnectionReference.isManualBookmarkReference(refStr))
- {
- long id = ConnectionReference.getManualBookmarkId(refStr);
- GlobalApp.getManualBookmarkGateway().delete(id);
- manualBookmarkAdapter.remove(id);
- separatedListAdapter.notifyDataSetChanged();
- }
- else
- {
- assert false;
- }
-
- showWelcomeScreenOrBookmarkList();
-
- // clear super bar text
- superBarEditText.setText("");
- return true;
- }
- }
+ showWelcomeScreenOrBookmarkList();
+
+ // clear super bar text
+ superBarEditText.setText("");
+ return true;
+ }
return false;
}
@@ -333,41 +330,31 @@ public class HomeActivity extends Activity
@Override
public boolean onOptionsItemSelected(MenuItem item) {
- switch (item.getItemId()) {
-
- case R.id.newBookmark:
- {
- Intent bookmarkIntent = new Intent(this, BookmarkActivity.class);
- startActivity(bookmarkIntent);
- break;
- }
-
- case R.id.appSettings:
- {
- Intent settingsIntent = new Intent(this, ApplicationSettingsActivity.class);
- startActivity(settingsIntent);
- break;
- }
-
- case R.id.help:
- {
- Intent helpIntent = new Intent(this, HelpActivity.class);
- startActivity(helpIntent);
- break;
- }
-
- case R.id.exit:
- {
- finish();
- break;
- }
-
- case R.id.about:
- {
- Intent aboutIntent = new Intent(this, AboutActivity.class);
- startActivity(aboutIntent);
- break;
- }
+ // refer to http://tools.android.com/tips/non-constant-fields why we can't use switch/case here ..
+ int itemId = item.getItemId();
+ if (itemId == R.id.newBookmark)
+ {
+ Intent bookmarkIntent = new Intent(this, BookmarkActivity.class);
+ startActivity(bookmarkIntent);
+ }
+ else if (itemId == R.id.appSettings)
+ {
+ Intent settingsIntent = new Intent(this, ApplicationSettingsActivity.class);
+ startActivity(settingsIntent);
+ }
+ else if (itemId == R.id.help)
+ {
+ Intent helpIntent = new Intent(this, HelpActivity.class);
+ startActivity(helpIntent);
+ }
+ else if (itemId == R.id.exit)
+ {
+ finish();
+ }
+ else if (itemId == R.id.about)
+ {
+ Intent aboutIntent = new Intent(this, AboutActivity.class);
+ startActivity(aboutIntent);
}
return true;
diff --git a/client/Android/src/com/freerdp/afreerdp/presentation/ScrollView2D.java b/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/presentation/ScrollView2D.java
similarity index 99%
rename from client/Android/src/com/freerdp/afreerdp/presentation/ScrollView2D.java
rename to client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/presentation/ScrollView2D.java
index 9150e5ccc..332306abb 100644
--- a/client/Android/src/com/freerdp/afreerdp/presentation/ScrollView2D.java
+++ b/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/presentation/ScrollView2D.java
@@ -19,7 +19,7 @@
* http://GORGES.us
*/
-package com.freerdp.afreerdp.presentation;
+package com.freerdp.freerdpcore.presentation;
import java.util.List;
diff --git a/client/Android/src/com/freerdp/afreerdp/presentation/SessionActivity.java b/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/presentation/SessionActivity.java
similarity index 95%
rename from client/Android/src/com/freerdp/afreerdp/presentation/SessionActivity.java
rename to client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/presentation/SessionActivity.java
index eef2c3d65..5a637930c 100644
--- a/client/Android/src/com/freerdp/afreerdp/presentation/SessionActivity.java
+++ b/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/presentation/SessionActivity.java
@@ -7,21 +7,21 @@
If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
-package com.freerdp.afreerdp.presentation;
+package com.freerdp.freerdpcore.presentation;
import java.util.Iterator;
import java.util.List;
-import com.freerdp.afreerdp.R;
-import com.freerdp.afreerdp.application.GlobalApp;
-import com.freerdp.afreerdp.application.GlobalSettings;
-import com.freerdp.afreerdp.application.SessionState;
-import com.freerdp.afreerdp.domain.BookmarkBase;
-import com.freerdp.afreerdp.domain.ConnectionReference;
-import com.freerdp.afreerdp.domain.ManualBookmark;
-import com.freerdp.afreerdp.services.LibFreeRDP;
-import com.freerdp.afreerdp.utils.KeyboardMapper;
-import com.freerdp.afreerdp.utils.Mouse;
+import com.freerdp.freerdpcore.R;
+import com.freerdp.freerdpcore.application.GlobalApp;
+import com.freerdp.freerdpcore.application.GlobalSettings;
+import com.freerdp.freerdpcore.application.SessionState;
+import com.freerdp.freerdpcore.domain.BookmarkBase;
+import com.freerdp.freerdpcore.domain.ConnectionReference;
+import com.freerdp.freerdpcore.domain.ManualBookmark;
+import com.freerdp.freerdpcore.services.LibFreeRDP;
+import com.freerdp.freerdpcore.utils.KeyboardMapper;
+import com.freerdp.freerdpcore.utils.Mouse;
import android.app.Activity;
import android.app.Dialog;
@@ -754,43 +754,36 @@ public class SessionActivity extends Activity
@Override
public boolean onOptionsItemSelected(MenuItem item) {
- switch (item.getItemId())
- {
- case R.id.session_touch_pointer:
- {
- // toggle touch pointer
- if(touchPointerView.getVisibility() == View.VISIBLE)
- {
- touchPointerView.setVisibility(View.INVISIBLE);
- sessionView.setTouchPointerPadding(0, 0);
- }
- else
- {
- touchPointerView.setVisibility(View.VISIBLE);
- sessionView.setTouchPointerPadding(touchPointerView.getPointerWidth(), touchPointerView.getPointerHeight());
- }
- break;
- }
+ // refer to http://tools.android.com/tips/non-constant-fields why we can't use switch/case here ..
+ int itemId = item.getItemId();
- case R.id.session_sys_keyboard:
+ if (itemId == R.id.session_touch_pointer)
+ {
+ // toggle touch pointer
+ if(touchPointerView.getVisibility() == View.VISIBLE)
{
- showKeyboard(!sysKeyboardVisible, false);
- break;
+ touchPointerView.setVisibility(View.INVISIBLE);
+ sessionView.setTouchPointerPadding(0, 0);
}
-
- case R.id.session_ext_keyboard:
+ else
{
- showKeyboard(false, !extKeyboardVisible);
- break;
- }
-
- case R.id.session_disconnect:
- {
- showKeyboard(false, false);
- LibFreeRDP.disconnect(session.getInstance());
- break;
+ touchPointerView.setVisibility(View.VISIBLE);
+ sessionView.setTouchPointerPadding(touchPointerView.getPointerWidth(), touchPointerView.getPointerHeight());
}
}
+ else if (itemId == R.id.session_sys_keyboard)
+ {
+ showKeyboard(!sysKeyboardVisible, false);
+ }
+ else if (itemId == R.id.session_ext_keyboard)
+ {
+ showKeyboard(false, !extKeyboardVisible);
+ }
+ else if (itemId == R.id.session_disconnect)
+ {
+ showKeyboard(false, false);
+ LibFreeRDP.disconnect(session.getInstance());
+ }
return true;
}
diff --git a/client/Android/src/com/freerdp/afreerdp/presentation/SessionView.java b/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/presentation/SessionView.java
similarity index 97%
rename from client/Android/src/com/freerdp/afreerdp/presentation/SessionView.java
rename to client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/presentation/SessionView.java
index f1234567f..0074e2eb9 100644
--- a/client/Android/src/com/freerdp/afreerdp/presentation/SessionView.java
+++ b/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/presentation/SessionView.java
@@ -7,7 +7,7 @@
If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
-package com.freerdp.afreerdp.presentation;
+package com.freerdp.freerdpcore.presentation;
import android.util.AttributeSet;
import android.util.Log;
@@ -21,9 +21,9 @@ import android.graphics.drawable.BitmapDrawable;
import java.util.*;
-import com.freerdp.afreerdp.application.SessionState;
-import com.freerdp.afreerdp.utils.DoubleGestureDetector;
-import com.freerdp.afreerdp.utils.GestureDetector;
+import com.freerdp.freerdpcore.application.SessionState;
+import com.freerdp.freerdpcore.utils.DoubleGestureDetector;
+import com.freerdp.freerdpcore.utils.GestureDetector;
public class SessionView extends View
diff --git a/client/Android/src/com/freerdp/afreerdp/presentation/ShortcutsActivity.java b/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/presentation/ShortcutsActivity.java
similarity index 94%
rename from client/Android/src/com/freerdp/afreerdp/presentation/ShortcutsActivity.java
rename to client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/presentation/ShortcutsActivity.java
index 947cb05e2..3281774c5 100644
--- a/client/Android/src/com/freerdp/afreerdp/presentation/ShortcutsActivity.java
+++ b/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/presentation/ShortcutsActivity.java
@@ -7,15 +7,15 @@
If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
-package com.freerdp.afreerdp.presentation;
+package com.freerdp.freerdpcore.presentation;
import java.util.ArrayList;
-import com.freerdp.afreerdp.R;
-import com.freerdp.afreerdp.application.GlobalApp;
-import com.freerdp.afreerdp.domain.BookmarkBase;
-import com.freerdp.afreerdp.services.SessionRequestHandlerActivity;
-import com.freerdp.afreerdp.utils.BookmarkArrayAdapter;
+import com.freerdp.freerdpcore.R;
+import com.freerdp.freerdpcore.application.GlobalApp;
+import com.freerdp.freerdpcore.domain.BookmarkBase;
+import com.freerdp.freerdpcore.services.SessionRequestHandlerActivity;
+import com.freerdp.freerdpcore.utils.BookmarkArrayAdapter;
import android.app.AlertDialog;
import android.app.ListActivity;
diff --git a/client/Android/src/com/freerdp/afreerdp/presentation/TouchPointerView.java b/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/presentation/TouchPointerView.java
similarity index 98%
rename from client/Android/src/com/freerdp/afreerdp/presentation/TouchPointerView.java
rename to client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/presentation/TouchPointerView.java
index 7850f9fdf..f58b840bd 100644
--- a/client/Android/src/com/freerdp/afreerdp/presentation/TouchPointerView.java
+++ b/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/presentation/TouchPointerView.java
@@ -7,10 +7,10 @@
If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
-package com.freerdp.afreerdp.presentation;
+package com.freerdp.freerdpcore.presentation;
-import com.freerdp.afreerdp.R;
-import com.freerdp.afreerdp.utils.GestureDetector;
+import com.freerdp.freerdpcore.R;
+import com.freerdp.freerdpcore.utils.GestureDetector;
import android.content.Context;
import android.graphics.Matrix;
diff --git a/client/Android/src/com/freerdp/afreerdp/services/BookmarkBaseGateway.java b/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/services/BookmarkBaseGateway.java
similarity index 99%
rename from client/Android/src/com/freerdp/afreerdp/services/BookmarkBaseGateway.java
rename to client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/services/BookmarkBaseGateway.java
index 97aefdde7..6abac51d2 100644
--- a/client/Android/src/com/freerdp/afreerdp/services/BookmarkBaseGateway.java
+++ b/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/services/BookmarkBaseGateway.java
@@ -7,12 +7,12 @@
If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
-package com.freerdp.afreerdp.services;
+package com.freerdp.freerdpcore.services;
import java.util.ArrayList;
-import com.freerdp.afreerdp.domain.BookmarkBase;
+import com.freerdp.freerdpcore.domain.BookmarkBase;
import android.content.ContentValues;
import android.database.Cursor;
diff --git a/client/Android/src/com/freerdp/afreerdp/services/BookmarkDB.java b/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/services/BookmarkDB.java
similarity index 92%
rename from client/Android/src/com/freerdp/afreerdp/services/BookmarkDB.java
rename to client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/services/BookmarkDB.java
index 02f74440b..5d10d7048 100644
--- a/client/Android/src/com/freerdp/afreerdp/services/BookmarkDB.java
+++ b/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/services/BookmarkDB.java
@@ -7,7 +7,7 @@
If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
-package com.freerdp.afreerdp.services;
+package com.freerdp.freerdpcore.services;
import android.content.Context;
import android.provider.BaseColumns;
@@ -82,8 +82,7 @@ public class BookmarkDB extends SQLiteOpenHelper
db.execSQL(sqlManualBookmarks);
- // REMOVE - FOR DEBUGGING ONLY!
-/*
+ // Insert a test entry
String sqlInsertDefaultScreenEntry =
"INSERT INTO tbl_screen_settings ("
+ "colors, "
@@ -91,8 +90,8 @@ public class BookmarkDB extends SQLiteOpenHelper
+ "width, "
+ "height) "
+ "VALUES ( "
- + "16, -1, 0, 0);";
- db.execSQL(sqlInsertDefaultScreenEntry);
+ + "32, 1, 1024, 768);";
+ db.execSQL(sqlInsertDefaultScreenEntry);
db.execSQL(sqlInsertDefaultScreenEntry);
String sqlInsertDefaultPerfFlags =
@@ -105,7 +104,7 @@ public class BookmarkDB extends SQLiteOpenHelper
+ "perf_font_smoothing, "
+ "perf_desktop_composition) "
+ "VALUES ( "
- + "0, 0, 0, 0, 0, 0, 0);";
+ + "1, 0, 0, 0, 0, 0, 0);";
db.execSQL(sqlInsertDefaultPerfFlags);
db.execSQL(sqlInsertDefaultPerfFlags);
@@ -126,14 +125,14 @@ public class BookmarkDB extends SQLiteOpenHelper
+ "work_dir, "
+ "console_mode) "
+ "VALUES ( "
- + "'test', "
- + "'192.168.50.125', "
- + "'demo1', "
- + "'qw', "
+ + "'Test Server', "
+ + "'testservice.afreerdp.com', "
+ + "'', "
+ + "'', "
+ "'', "
+ "3389, "
+ "1, 1, 2, 2, 0, '', '', 0);";
- db.execSQL(sqlInsertDefaultSessionEntry); */
+ db.execSQL(sqlInsertDefaultSessionEntry);
}
@Override
diff --git a/client/Android/src/com/freerdp/afreerdp/services/FreeRDPSuggestionProvider.java b/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/services/FreeRDPSuggestionProvider.java
similarity index 92%
rename from client/Android/src/com/freerdp/afreerdp/services/FreeRDPSuggestionProvider.java
rename to client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/services/FreeRDPSuggestionProvider.java
index 1fd06a7cf..ee242d5d4 100644
--- a/client/Android/src/com/freerdp/afreerdp/services/FreeRDPSuggestionProvider.java
+++ b/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/services/FreeRDPSuggestionProvider.java
@@ -7,15 +7,15 @@
If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
-package com.freerdp.afreerdp.services;
+package com.freerdp.freerdpcore.services;
import java.util.ArrayList;
-import com.freerdp.afreerdp.R;
-import com.freerdp.afreerdp.application.GlobalApp;
-import com.freerdp.afreerdp.domain.BookmarkBase;
-import com.freerdp.afreerdp.domain.ConnectionReference;
-import com.freerdp.afreerdp.domain.ManualBookmark;
+import com.freerdp.freerdpcore.R;
+import com.freerdp.freerdpcore.application.GlobalApp;
+import com.freerdp.freerdpcore.domain.BookmarkBase;
+import com.freerdp.freerdpcore.domain.ConnectionReference;
+import com.freerdp.freerdpcore.domain.ManualBookmark;
import android.app.SearchManager;
import android.content.ContentProvider;
diff --git a/client/Android/src/com/freerdp/afreerdp/services/HistoryDB.java b/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/services/HistoryDB.java
similarity index 96%
rename from client/Android/src/com/freerdp/afreerdp/services/HistoryDB.java
rename to client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/services/HistoryDB.java
index 900336f60..f12be6bb0 100644
--- a/client/Android/src/com/freerdp/afreerdp/services/HistoryDB.java
+++ b/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/services/HistoryDB.java
@@ -7,7 +7,7 @@
If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
-package com.freerdp.afreerdp.services;
+package com.freerdp.freerdpcore.services;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
diff --git a/client/Android/src/com/freerdp/afreerdp/services/LibFreeRDP.java b/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/services/LibFreeRDP.java
similarity index 96%
rename from client/Android/src/com/freerdp/afreerdp/services/LibFreeRDP.java
rename to client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/services/LibFreeRDP.java
index 8de2cc435..672dcd934 100644
--- a/client/Android/src/com/freerdp/afreerdp/services/LibFreeRDP.java
+++ b/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/services/LibFreeRDP.java
@@ -7,13 +7,13 @@
If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
-package com.freerdp.afreerdp.services;
+package com.freerdp.freerdpcore.services;
-import com.freerdp.afreerdp.application.GlobalApp;
-import com.freerdp.afreerdp.application.SessionState;
-import com.freerdp.afreerdp.domain.BookmarkBase;
-import com.freerdp.afreerdp.domain.ManualBookmark;
+import com.freerdp.freerdpcore.application.GlobalApp;
+import com.freerdp.freerdpcore.application.SessionState;
+import com.freerdp.freerdpcore.domain.BookmarkBase;
+import com.freerdp.freerdpcore.domain.ManualBookmark;
import android.graphics.Bitmap;
diff --git a/client/Android/src/com/freerdp/afreerdp/services/ManualBookmarkGateway.java b/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/services/ManualBookmarkGateway.java
similarity index 93%
rename from client/Android/src/com/freerdp/afreerdp/services/ManualBookmarkGateway.java
rename to client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/services/ManualBookmarkGateway.java
index a95f8e40d..6b07850ac 100644
--- a/client/Android/src/com/freerdp/afreerdp/services/ManualBookmarkGateway.java
+++ b/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/services/ManualBookmarkGateway.java
@@ -7,7 +7,7 @@
If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
-package com.freerdp.afreerdp.services;
+package com.freerdp.freerdpcore.services;
import java.util.ArrayList;
@@ -15,8 +15,8 @@ import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteOpenHelper;
-import com.freerdp.afreerdp.domain.BookmarkBase;
-import com.freerdp.afreerdp.domain.ManualBookmark;
+import com.freerdp.freerdpcore.domain.BookmarkBase;
+import com.freerdp.freerdpcore.domain.ManualBookmark;
public class ManualBookmarkGateway extends BookmarkBaseGateway {
diff --git a/client/Android/src/com/freerdp/afreerdp/services/QuickConnectHistoryGateway.java b/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/services/QuickConnectHistoryGateway.java
similarity index 95%
rename from client/Android/src/com/freerdp/afreerdp/services/QuickConnectHistoryGateway.java
rename to client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/services/QuickConnectHistoryGateway.java
index beb6a596f..df3cfb478 100644
--- a/client/Android/src/com/freerdp/afreerdp/services/QuickConnectHistoryGateway.java
+++ b/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/services/QuickConnectHistoryGateway.java
@@ -7,12 +7,12 @@
If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
-package com.freerdp.afreerdp.services;
+package com.freerdp.freerdpcore.services;
import java.util.ArrayList;
-import com.freerdp.afreerdp.domain.BookmarkBase;
-import com.freerdp.afreerdp.domain.QuickConnectBookmark;
+import com.freerdp.freerdpcore.domain.BookmarkBase;
+import com.freerdp.freerdpcore.domain.QuickConnectBookmark;
import android.database.Cursor;
import android.database.SQLException;
diff --git a/client/Android/src/com/freerdp/afreerdp/services/SessionRequestHandlerActivity.java b/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/services/SessionRequestHandlerActivity.java
similarity index 90%
rename from client/Android/src/com/freerdp/afreerdp/services/SessionRequestHandlerActivity.java
rename to client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/services/SessionRequestHandlerActivity.java
index ac41df7c1..57a61bddc 100644
--- a/client/Android/src/com/freerdp/afreerdp/services/SessionRequestHandlerActivity.java
+++ b/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/services/SessionRequestHandlerActivity.java
@@ -7,11 +7,11 @@
If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
-package com.freerdp.afreerdp.services;
+package com.freerdp.freerdpcore.services;
-import com.freerdp.afreerdp.domain.ConnectionReference;
-import com.freerdp.afreerdp.presentation.BookmarkActivity;
-import com.freerdp.afreerdp.presentation.SessionActivity;
+import com.freerdp.freerdpcore.domain.ConnectionReference;
+import com.freerdp.freerdpcore.presentation.BookmarkActivity;
+import com.freerdp.freerdpcore.presentation.SessionActivity;
import android.app.Activity;
import android.app.SearchManager;
diff --git a/client/Android/src/com/freerdp/afreerdp/utils/BookmarkArrayAdapter.java b/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/utils/BookmarkArrayAdapter.java
similarity index 91%
rename from client/Android/src/com/freerdp/afreerdp/utils/BookmarkArrayAdapter.java
rename to client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/utils/BookmarkArrayAdapter.java
index 50d2cf66b..cdd4721a6 100644
--- a/client/Android/src/com/freerdp/afreerdp/utils/BookmarkArrayAdapter.java
+++ b/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/utils/BookmarkArrayAdapter.java
@@ -7,7 +7,7 @@
If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
-package com.freerdp.afreerdp.utils;
+package com.freerdp.freerdpcore.utils;
import java.util.List;
@@ -22,12 +22,12 @@ import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;
-import com.freerdp.afreerdp.R;
-import com.freerdp.afreerdp.domain.BookmarkBase;
-import com.freerdp.afreerdp.domain.ConnectionReference;
-import com.freerdp.afreerdp.domain.ManualBookmark;
-import com.freerdp.afreerdp.domain.PlaceholderBookmark;
-import com.freerdp.afreerdp.presentation.BookmarkActivity;
+import com.freerdp.freerdpcore.R;
+import com.freerdp.freerdpcore.domain.BookmarkBase;
+import com.freerdp.freerdpcore.domain.ConnectionReference;
+import com.freerdp.freerdpcore.domain.ManualBookmark;
+import com.freerdp.freerdpcore.domain.PlaceholderBookmark;
+import com.freerdp.freerdpcore.presentation.BookmarkActivity;
public class BookmarkArrayAdapter extends ArrayAdapter
{
diff --git a/client/Android/src/com/freerdp/afreerdp/utils/ButtonPreference.java b/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/utils/ButtonPreference.java
similarity index 96%
rename from client/Android/src/com/freerdp/afreerdp/utils/ButtonPreference.java
rename to client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/utils/ButtonPreference.java
index fb9cbe261..3f119fa15 100644
--- a/client/Android/src/com/freerdp/afreerdp/utils/ButtonPreference.java
+++ b/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/utils/ButtonPreference.java
@@ -7,9 +7,9 @@
If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
-package com.freerdp.afreerdp.utils;
+package com.freerdp.freerdpcore.utils;
-import com.freerdp.afreerdp.R;
+import com.freerdp.freerdpcore.R;
import android.content.Context;
import android.preference.Preference;
diff --git a/client/Android/src/com/freerdp/afreerdp/utils/DoubleGestureDetector.java b/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/utils/DoubleGestureDetector.java
similarity index 99%
rename from client/Android/src/com/freerdp/afreerdp/utils/DoubleGestureDetector.java
rename to client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/utils/DoubleGestureDetector.java
index e837a6a2e..1146c4c92 100644
--- a/client/Android/src/com/freerdp/afreerdp/utils/DoubleGestureDetector.java
+++ b/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/utils/DoubleGestureDetector.java
@@ -7,14 +7,14 @@
If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
-package com.freerdp.afreerdp.utils;
+package com.freerdp.freerdpcore.utils;
import android.content.Context;
import android.os.Handler;
import android.view.MotionEvent;
import android.view.ScaleGestureDetector;
-import com.freerdp.afreerdp.utils.GestureDetector.OnGestureListener;
+import com.freerdp.freerdpcore.utils.GestureDetector.OnGestureListener;
public class DoubleGestureDetector {
/**
diff --git a/client/Android/src/com/freerdp/afreerdp/utils/GestureDetector.java b/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/utils/GestureDetector.java
similarity index 99%
rename from client/Android/src/com/freerdp/afreerdp/utils/GestureDetector.java
rename to client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/utils/GestureDetector.java
index e656bab77..c8773b930 100644
--- a/client/Android/src/com/freerdp/afreerdp/utils/GestureDetector.java
+++ b/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/utils/GestureDetector.java
@@ -16,7 +16,7 @@
* Modified for aFreeRDP by Martin Fleisz (mfleisz@thinstuff.at)
*/
-package com.freerdp.afreerdp.utils;
+package com.freerdp.freerdpcore.utils;
import android.content.Context;
import android.os.Build;
diff --git a/client/Android/src/com/freerdp/afreerdp/utils/IntEditTextPreference.java b/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/utils/IntEditTextPreference.java
similarity index 97%
rename from client/Android/src/com/freerdp/afreerdp/utils/IntEditTextPreference.java
rename to client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/utils/IntEditTextPreference.java
index 4ce494467..1142bc4ae 100644
--- a/client/Android/src/com/freerdp/afreerdp/utils/IntEditTextPreference.java
+++ b/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/utils/IntEditTextPreference.java
@@ -7,9 +7,9 @@
If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
-package com.freerdp.afreerdp.utils;
+package com.freerdp.freerdpcore.utils;
-import com.freerdp.afreerdp.R;
+import com.freerdp.freerdpcore.R;
import android.content.Context;
import android.content.res.TypedArray;
diff --git a/client/Android/src/com/freerdp/afreerdp/utils/IntListPreference.java b/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/utils/IntListPreference.java
similarity index 95%
rename from client/Android/src/com/freerdp/afreerdp/utils/IntListPreference.java
rename to client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/utils/IntListPreference.java
index 718a69ae7..49b718a29 100644
--- a/client/Android/src/com/freerdp/afreerdp/utils/IntListPreference.java
+++ b/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/utils/IntListPreference.java
@@ -7,7 +7,7 @@
If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
-package com.freerdp.afreerdp.utils;
+package com.freerdp.freerdpcore.utils;
import android.content.Context;
import android.preference.ListPreference;
diff --git a/client/Android/src/com/freerdp/afreerdp/utils/KeyboardMapper.java b/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/utils/KeyboardMapper.java
similarity index 99%
rename from client/Android/src/com/freerdp/afreerdp/utils/KeyboardMapper.java
rename to client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/utils/KeyboardMapper.java
index ae72de873..e9bbb2cd6 100644
--- a/client/Android/src/com/freerdp/afreerdp/utils/KeyboardMapper.java
+++ b/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/utils/KeyboardMapper.java
@@ -8,9 +8,9 @@
*/
-package com.freerdp.afreerdp.utils;
+package com.freerdp.freerdpcore.utils;
-import com.freerdp.afreerdp.R;
+import com.freerdp.freerdpcore.R;
import android.content.Context;
import android.view.KeyEvent;
diff --git a/client/Android/src/com/freerdp/afreerdp/utils/Mouse.java b/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/utils/Mouse.java
similarity index 93%
rename from client/Android/src/com/freerdp/afreerdp/utils/Mouse.java
rename to client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/utils/Mouse.java
index 202c4d5de..38743be93 100644
--- a/client/Android/src/com/freerdp/afreerdp/utils/Mouse.java
+++ b/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/utils/Mouse.java
@@ -7,9 +7,9 @@
If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
-package com.freerdp.afreerdp.utils;
+package com.freerdp.freerdpcore.utils;
-import com.freerdp.afreerdp.application.GlobalSettings;
+import com.freerdp.freerdpcore.application.GlobalSettings;
public class Mouse {
diff --git a/client/Android/src/com/freerdp/afreerdp/utils/SeparatedListAdapter.java b/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/utils/SeparatedListAdapter.java
similarity index 98%
rename from client/Android/src/com/freerdp/afreerdp/utils/SeparatedListAdapter.java
rename to client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/utils/SeparatedListAdapter.java
index 9ee8894c1..1528b78b4 100644
--- a/client/Android/src/com/freerdp/afreerdp/utils/SeparatedListAdapter.java
+++ b/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/utils/SeparatedListAdapter.java
@@ -8,12 +8,12 @@
If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
-package com.freerdp.afreerdp.utils;
+package com.freerdp.freerdpcore.utils;
import java.util.LinkedHashMap;
import java.util.Map;
-import com.freerdp.afreerdp.R;
+import com.freerdp.freerdpcore.R;
import android.content.Context;
import android.view.View;
diff --git a/client/Android/aFreeRDP/.classpath b/client/Android/aFreeRDP/.classpath
new file mode 100644
index 000000000..a4763d1ee
--- /dev/null
+++ b/client/Android/aFreeRDP/.classpath
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/client/Android/aFreeRDP/.project b/client/Android/aFreeRDP/.project
new file mode 100644
index 000000000..335291e03
--- /dev/null
+++ b/client/Android/aFreeRDP/.project
@@ -0,0 +1,33 @@
+
+
+ aFreeRDP
+
+
+
+
+
+ com.android.ide.eclipse.adt.ResourceManagerBuilder
+
+
+
+
+ com.android.ide.eclipse.adt.PreCompilerBuilder
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+ com.android.ide.eclipse.adt.ApkBuilder
+
+
+
+
+
+ com.android.ide.eclipse.adt.AndroidNature
+ org.eclipse.jdt.core.javanature
+
+
diff --git a/client/Android/aFreeRDP/AndroidManifest.xml.cmake b/client/Android/aFreeRDP/AndroidManifest.xml.cmake
new file mode 100644
index 000000000..e0d01c824
--- /dev/null
+++ b/client/Android/aFreeRDP/AndroidManifest.xml.cmake
@@ -0,0 +1,56 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/client/Android/aFreeRDP/CMakeLists.txt b/client/Android/aFreeRDP/CMakeLists.txt
new file mode 100644
index 000000000..9dd3b6179
--- /dev/null
+++ b/client/Android/aFreeRDP/CMakeLists.txt
@@ -0,0 +1,45 @@
+# FreeRDP: A Remote Desktop Protocol Implementation
+# Android Client
+#
+# Copyright 2012 Marc-Andre Moreau
+# Copyright 2013 Bernhard Miklautz
+#
+# Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+set(ANDROID_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
+set(ANDROID_PACKAGE_NAME "aFreeRDP")
+
+CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/AndroidManifest.xml.cmake ${CMAKE_CURRENT_SOURCE_DIR}/AndroidManifest.xml @ONLY)
+
+if (ANDROID_SDK)
+ CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/local.properties.cmake ${CMAKE_CURRENT_SOURCE_DIR}/local.properties @ONLY)
+endif()
+
+if(ANDROID_BUILD_JAVA)
+ if(ANDROID_BUILD_JAVA_DEBUG)
+ set(APK "${ANDROID_SOURCE_DIR}/bin/${ANDROID_PACKAGE_NAME}-release-unsigned.apk")
+ else()
+ set(APK "${ANDROID_SOURCE_DIR}/bin/${ANDROID_PACKAGE_NAME}-debug.apk")
+ endif()
+
+ # command to create the android package
+ add_custom_command(
+ OUTPUT "${APK}"
+ COMMAND ${ANT_COMMAND} ${ANDROID_BUILD_TYPE}
+ WORKING_DIRECTORY "${ANDROID_SOURCE_DIR}"
+ MAIN_DEPENDENCY AndroidManifest.xml
+ DEPENDS freerdp-android local.properties android-lib
+ )
+ add_custom_target(android-package ALL SOURCES "${APK}")
+ SET_DIRECTORY_PROPERTIES(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "gen;bin")
+endif()
diff --git a/client/Android/assets/about_page/FreeRDP_Logo.png b/client/Android/aFreeRDP/assets/about_page/FreeRDP_Logo.png
similarity index 100%
rename from client/Android/assets/about_page/FreeRDP_Logo.png
rename to client/Android/aFreeRDP/assets/about_page/FreeRDP_Logo.png
diff --git a/client/Android/assets/about_page/about.html b/client/Android/aFreeRDP/assets/about_page/about.html
similarity index 100%
rename from client/Android/assets/about_page/about.html
rename to client/Android/aFreeRDP/assets/about_page/about.html
diff --git a/client/Android/assets/about_page/about_phone.html b/client/Android/aFreeRDP/assets/about_page/about_phone.html
similarity index 100%
rename from client/Android/assets/about_page/about_phone.html
rename to client/Android/aFreeRDP/assets/about_page/about_phone.html
diff --git a/client/Android/assets/about_page/back.jpg b/client/Android/aFreeRDP/assets/about_page/back.jpg
similarity index 100%
rename from client/Android/assets/about_page/back.jpg
rename to client/Android/aFreeRDP/assets/about_page/back.jpg
diff --git a/client/Android/assets/about_page/background_transparent.png b/client/Android/aFreeRDP/assets/about_page/background_transparent.png
similarity index 100%
rename from client/Android/assets/about_page/background_transparent.png
rename to client/Android/aFreeRDP/assets/about_page/background_transparent.png
diff --git a/client/Android/assets/help_page/back.jpg b/client/Android/aFreeRDP/assets/help_page/back.jpg
similarity index 100%
rename from client/Android/assets/help_page/back.jpg
rename to client/Android/aFreeRDP/assets/help_page/back.jpg
diff --git a/client/Android/assets/help_page/gestures.html b/client/Android/aFreeRDP/assets/help_page/gestures.html
similarity index 100%
rename from client/Android/assets/help_page/gestures.html
rename to client/Android/aFreeRDP/assets/help_page/gestures.html
diff --git a/client/Android/assets/help_page/gestures.png b/client/Android/aFreeRDP/assets/help_page/gestures.png
similarity index 100%
rename from client/Android/assets/help_page/gestures.png
rename to client/Android/aFreeRDP/assets/help_page/gestures.png
diff --git a/client/Android/assets/help_page/gestures_phone.html b/client/Android/aFreeRDP/assets/help_page/gestures_phone.html
similarity index 100%
rename from client/Android/assets/help_page/gestures_phone.html
rename to client/Android/aFreeRDP/assets/help_page/gestures_phone.html
diff --git a/client/Android/assets/help_page/gestures_phone.png b/client/Android/aFreeRDP/assets/help_page/gestures_phone.png
similarity index 100%
rename from client/Android/assets/help_page/gestures_phone.png
rename to client/Android/aFreeRDP/assets/help_page/gestures_phone.png
diff --git a/client/Android/assets/help_page/nav_gestures.png b/client/Android/aFreeRDP/assets/help_page/nav_gestures.png
similarity index 100%
rename from client/Android/assets/help_page/nav_gestures.png
rename to client/Android/aFreeRDP/assets/help_page/nav_gestures.png
diff --git a/client/Android/assets/help_page/nav_toolbar.png b/client/Android/aFreeRDP/assets/help_page/nav_toolbar.png
similarity index 100%
rename from client/Android/assets/help_page/nav_toolbar.png
rename to client/Android/aFreeRDP/assets/help_page/nav_toolbar.png
diff --git a/client/Android/assets/help_page/nav_touch_pointer.png b/client/Android/aFreeRDP/assets/help_page/nav_touch_pointer.png
similarity index 100%
rename from client/Android/assets/help_page/nav_touch_pointer.png
rename to client/Android/aFreeRDP/assets/help_page/nav_touch_pointer.png
diff --git a/client/Android/assets/help_page/toolbar.html b/client/Android/aFreeRDP/assets/help_page/toolbar.html
similarity index 100%
rename from client/Android/assets/help_page/toolbar.html
rename to client/Android/aFreeRDP/assets/help_page/toolbar.html
diff --git a/client/Android/assets/help_page/toolbar.png b/client/Android/aFreeRDP/assets/help_page/toolbar.png
similarity index 100%
rename from client/Android/assets/help_page/toolbar.png
rename to client/Android/aFreeRDP/assets/help_page/toolbar.png
diff --git a/client/Android/assets/help_page/toolbar_phone.html b/client/Android/aFreeRDP/assets/help_page/toolbar_phone.html
similarity index 100%
rename from client/Android/assets/help_page/toolbar_phone.html
rename to client/Android/aFreeRDP/assets/help_page/toolbar_phone.html
diff --git a/client/Android/assets/help_page/toolbar_phone.png b/client/Android/aFreeRDP/assets/help_page/toolbar_phone.png
similarity index 100%
rename from client/Android/assets/help_page/toolbar_phone.png
rename to client/Android/aFreeRDP/assets/help_page/toolbar_phone.png
diff --git a/client/Android/assets/help_page/touch_pointer.html b/client/Android/aFreeRDP/assets/help_page/touch_pointer.html
similarity index 100%
rename from client/Android/assets/help_page/touch_pointer.html
rename to client/Android/aFreeRDP/assets/help_page/touch_pointer.html
diff --git a/client/Android/assets/help_page/touch_pointer.png b/client/Android/aFreeRDP/assets/help_page/touch_pointer.png
similarity index 100%
rename from client/Android/assets/help_page/touch_pointer.png
rename to client/Android/aFreeRDP/assets/help_page/touch_pointer.png
diff --git a/client/Android/assets/help_page/touch_pointer_phone.html b/client/Android/aFreeRDP/assets/help_page/touch_pointer_phone.html
similarity index 100%
rename from client/Android/assets/help_page/touch_pointer_phone.html
rename to client/Android/aFreeRDP/assets/help_page/touch_pointer_phone.html
diff --git a/client/Android/assets/help_page/touch_pointer_phone.png b/client/Android/aFreeRDP/assets/help_page/touch_pointer_phone.png
similarity index 100%
rename from client/Android/assets/help_page/touch_pointer_phone.png
rename to client/Android/aFreeRDP/assets/help_page/touch_pointer_phone.png
diff --git a/client/Android/assets/welcome_page/1.png b/client/Android/aFreeRDP/assets/welcome_page/1.png
similarity index 100%
rename from client/Android/assets/welcome_page/1.png
rename to client/Android/aFreeRDP/assets/welcome_page/1.png
diff --git a/client/Android/assets/welcome_page/2.png b/client/Android/aFreeRDP/assets/welcome_page/2.png
similarity index 100%
rename from client/Android/assets/welcome_page/2.png
rename to client/Android/aFreeRDP/assets/welcome_page/2.png
diff --git a/client/Android/assets/welcome_page/back.jpg b/client/Android/aFreeRDP/assets/welcome_page/back.jpg
similarity index 100%
rename from client/Android/assets/welcome_page/back.jpg
rename to client/Android/aFreeRDP/assets/welcome_page/back.jpg
diff --git a/client/Android/assets/welcome_page/new_connection.png b/client/Android/aFreeRDP/assets/welcome_page/new_connection.png
similarity index 100%
rename from client/Android/assets/welcome_page/new_connection.png
rename to client/Android/aFreeRDP/assets/welcome_page/new_connection.png
diff --git a/client/Android/assets/welcome_page/welcome.html b/client/Android/aFreeRDP/assets/welcome_page/welcome.html
similarity index 100%
rename from client/Android/assets/welcome_page/welcome.html
rename to client/Android/aFreeRDP/assets/welcome_page/welcome.html
diff --git a/client/Android/assets/welcome_page/welcome_phone.html b/client/Android/aFreeRDP/assets/welcome_page/welcome_phone.html
similarity index 100%
rename from client/Android/assets/welcome_page/welcome_phone.html
rename to client/Android/aFreeRDP/assets/welcome_page/welcome_phone.html
diff --git a/client/Android/build.xml b/client/Android/aFreeRDP/build.xml
similarity index 100%
rename from client/Android/build.xml
rename to client/Android/aFreeRDP/build.xml
diff --git a/client/Android/aFreeRDP/local.properties.cmake b/client/Android/aFreeRDP/local.properties.cmake
new file mode 100644
index 000000000..159126370
--- /dev/null
+++ b/client/Android/aFreeRDP/local.properties.cmake
@@ -0,0 +1,2 @@
+# This file is automatically generated by cmake.
+sdk.dir=@ANDROID_SDK@
diff --git a/client/Android/project.properties b/client/Android/aFreeRDP/project.properties
similarity index 83%
rename from client/Android/project.properties
rename to client/Android/aFreeRDP/project.properties
index ea89160e0..857d31de6 100644
--- a/client/Android/project.properties
+++ b/client/Android/aFreeRDP/project.properties
@@ -9,3 +9,5 @@
# Project target.
target=android-8
+android.library.reference.1=../FreeRDPCore
+manifestmerger.enabled=true
diff --git a/client/Android/aFreeRDP/res/drawable-hdpi/icon_launcher_freerdp.png b/client/Android/aFreeRDP/res/drawable-hdpi/icon_launcher_freerdp.png
new file mode 100644
index 000000000..45ed86123
Binary files /dev/null and b/client/Android/aFreeRDP/res/drawable-hdpi/icon_launcher_freerdp.png differ
diff --git a/client/Android/aFreeRDP/res/drawable-ldpi/icon_launcher_freerdp.png b/client/Android/aFreeRDP/res/drawable-ldpi/icon_launcher_freerdp.png
new file mode 100644
index 000000000..b57651bed
Binary files /dev/null and b/client/Android/aFreeRDP/res/drawable-ldpi/icon_launcher_freerdp.png differ
diff --git a/client/Android/aFreeRDP/res/drawable-mdpi/icon_launcher_freerdp.png b/client/Android/aFreeRDP/res/drawable-mdpi/icon_launcher_freerdp.png
new file mode 100644
index 000000000..55335c869
Binary files /dev/null and b/client/Android/aFreeRDP/res/drawable-mdpi/icon_launcher_freerdp.png differ
diff --git a/client/Android/aFreeRDP/res/drawable/button_background.xml b/client/Android/aFreeRDP/res/drawable/button_background.xml
new file mode 100644
index 000000000..9fdf3096d
--- /dev/null
+++ b/client/Android/aFreeRDP/res/drawable/button_background.xml
@@ -0,0 +1,61 @@
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
diff --git a/client/Android/aFreeRDP/res/drawable/icon_launcher_freerdp.png b/client/Android/aFreeRDP/res/drawable/icon_launcher_freerdp.png
new file mode 100644
index 000000000..ad325d46e
Binary files /dev/null and b/client/Android/aFreeRDP/res/drawable/icon_launcher_freerdp.png differ
diff --git a/client/Android/aFreeRDP/res/drawable/separator_background.xml b/client/Android/aFreeRDP/res/drawable/separator_background.xml
new file mode 100644
index 000000000..61c7b8925
--- /dev/null
+++ b/client/Android/aFreeRDP/res/drawable/separator_background.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/client/Android/aFreeRDP/res/values/strings.xml b/client/Android/aFreeRDP/res/values/strings.xml
new file mode 100644
index 000000000..f0aa7c6af
--- /dev/null
+++ b/client/Android/aFreeRDP/res/values/strings.xml
@@ -0,0 +1,7 @@
+
+
+ aFreeRDP
+
+ aFreeRDP
+ Remote Computers
+
diff --git a/client/Android/res/xml/searchable.xml b/client/Android/aFreeRDP/res/xml/searchable.xml
similarity index 100%
rename from client/Android/res/xml/searchable.xml
rename to client/Android/aFreeRDP/res/xml/searchable.xml
diff --git a/client/Android/aFreeRDP/src/com/freerdp/afreerdp/application/GlobalApp.java b/client/Android/aFreeRDP/src/com/freerdp/afreerdp/application/GlobalApp.java
new file mode 100644
index 000000000..c0b36f020
--- /dev/null
+++ b/client/Android/aFreeRDP/src/com/freerdp/afreerdp/application/GlobalApp.java
@@ -0,0 +1,6 @@
+package com.freerdp.afreerdp.application;
+
+
+public class GlobalApp extends com.freerdp.freerdpcore.application.GlobalApp {
+
+}
diff --git a/client/Android/jni/generated/com_freerdp_afreerdp_services_LibFreeRDP.h b/client/Android/jni/generated/com_freerdp_afreerdp_services_LibFreeRDP.h
deleted file mode 100644
index cfe8d65f5..000000000
--- a/client/Android/jni/generated/com_freerdp_afreerdp_services_LibFreeRDP.h
+++ /dev/null
@@ -1,125 +0,0 @@
-/* DO NOT EDIT THIS FILE - it is machine generated */
-#include
-/* Header for class com_freerdp_afreerdp_services_LibFreeRDP */
-
-#ifndef _Included_com_freerdp_afreerdp_services_LibFreeRDP
-#define _Included_com_freerdp_afreerdp_services_LibFreeRDP
-#ifdef __cplusplus
-extern "C" {
-#endif
-/*
- * Class: com_freerdp_afreerdp_services_LibFreeRDP
- * Method: freerdp_new
- * Signature: ()I
- */
-JNIEXPORT jint JNICALL Java_com_freerdp_afreerdp_services_LibFreeRDP_freerdp_1new
- (JNIEnv *, jclass);
-
-/*
- * Class: com_freerdp_afreerdp_services_LibFreeRDP
- * Method: freerdp_free
- * Signature: (I)V
- */
-JNIEXPORT void JNICALL Java_com_freerdp_afreerdp_services_LibFreeRDP_freerdp_1free
- (JNIEnv *, jclass, jint);
-
-/*
- * Class: com_freerdp_afreerdp_services_LibFreeRDP
- * Method: freerdp_connect
- * Signature: (I)Z
- */
-JNIEXPORT jboolean JNICALL Java_com_freerdp_afreerdp_services_LibFreeRDP_freerdp_1connect
- (JNIEnv *, jclass, jint);
-
-/*
- * Class: com_freerdp_afreerdp_services_LibFreeRDP
- * Method: freerdp_disconnect
- * Signature: (I)Z
- */
-JNIEXPORT jboolean JNICALL Java_com_freerdp_afreerdp_services_LibFreeRDP_freerdp_1disconnect
- (JNIEnv *, jclass, jint);
-
-/*
- * Class: com_freerdp_afreerdp_services_LibFreeRDP
- * Method: freerdp_cancel_connection
- * Signature: (I)V
- */
-JNIEXPORT void JNICALL Java_com_freerdp_afreerdp_services_LibFreeRDP_freerdp_1cancel_1connection
- (JNIEnv *, jclass, jint);
-
-/*
- * Class: com_freerdp_afreerdp_services_LibFreeRDP
- * Method: freerdp_set_connection_info
- * Signature: (ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;IIIIZILjava/lang/String;)V
- */
-JNIEXPORT void JNICALL Java_com_freerdp_afreerdp_services_LibFreeRDP_freerdp_1set_1connection_1info
- (JNIEnv *, jclass, jint, jstring, jstring, jstring, jstring, jint, jint, jint, jint, jboolean, jint, jstring);
-
-/*
- * Class: com_freerdp_afreerdp_services_LibFreeRDP
- * Method: freerdp_set_performance_flags
- * Signature: (IZZZZZZZ)V
- */
-JNIEXPORT void JNICALL Java_com_freerdp_afreerdp_services_LibFreeRDP_freerdp_1set_1performance_1flags
- (JNIEnv *, jclass, jint, jboolean, jboolean, jboolean, jboolean, jboolean, jboolean, jboolean);
-
-/*
- * Class: com_freerdp_afreerdp_services_LibFreeRDP
- * Method: freerdp_set_advanced_settings
- * Signature: (ILjava/lang/String;Ljava/lang/String;)V
- */
-JNIEXPORT void JNICALL Java_com_freerdp_afreerdp_services_LibFreeRDP_freerdp_1set_1advanced_1settings
- (JNIEnv *, jclass, jint, jstring, jstring);
-
-/*
- * Class: com_freerdp_afreerdp_services_LibFreeRDP
- * Method: freerdp_set_data_directory
- * Signature: (ILjava/lang/String;)V
- */
-JNIEXPORT void JNICALL Java_com_freerdp_afreerdp_services_LibFreeRDP_freerdp_1set_1data_1directory
- (JNIEnv *, jclass, jint, jstring);
-
-/*
- * Class: com_freerdp_afreerdp_services_LibFreeRDP
- * Method: freerdp_update_graphics
- * Signature: (ILandroid/graphics/Bitmap;IIII)Z
- */
-JNIEXPORT jboolean JNICALL Java_com_freerdp_afreerdp_services_LibFreeRDP_freerdp_1update_1graphics
- (JNIEnv *, jclass, jint, jobject, jint, jint, jint, jint);
-
-/*
- * Class: com_freerdp_afreerdp_services_LibFreeRDP
- * Method: freerdp_send_cursor_event
- * Signature: (IIII)V
- */
-JNIEXPORT void JNICALL Java_com_freerdp_afreerdp_services_LibFreeRDP_freerdp_1send_1cursor_1event
- (JNIEnv *, jclass, jint, jint, jint, jint);
-
-/*
- * Class: com_freerdp_afreerdp_services_LibFreeRDP
- * Method: freerdp_send_key_event
- * Signature: (IIZ)V
- */
-JNIEXPORT void JNICALL Java_com_freerdp_afreerdp_services_LibFreeRDP_freerdp_1send_1key_1event
- (JNIEnv *, jclass, jint, jint, jboolean);
-
-/*
- * Class: com_freerdp_afreerdp_services_LibFreeRDP
- * Method: freerdp_send_unicodekey_event
- * Signature: (II)V
- */
-JNIEXPORT void JNICALL Java_com_freerdp_afreerdp_services_LibFreeRDP_freerdp_1send_1unicodekey_1event
- (JNIEnv *, jclass, jint, jint);
-
-/*
- * Class: com_freerdp_afreerdp_services_LibFreeRDP
- * Method: freerdp_get_version
- * Signature: ()Ljava/lang/String;
- */
-JNIEXPORT jstring JNICALL Java_com_freerdp_afreerdp_services_LibFreeRDP_freerdp_1get_1version
- (JNIEnv *, jclass);
-
-#ifdef __cplusplus
-}
-#endif
-#endif
diff --git a/client/Android/res/xml/bookmark_settings.xml b/client/Android/res/xml/bookmark_settings.xml
deleted file mode 100644
index 86df480ad..000000000
--- a/client/Android/res/xml/bookmark_settings.xml
+++ /dev/null
@@ -1,54 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/client/Android/res/xml/screen_settings.xml b/client/Android/res/xml/screen_settings.xml
deleted file mode 100644
index 589a35a8d..000000000
--- a/client/Android/res/xml/screen_settings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-
-
-
-
-
-
-
-
diff --git a/client/CMakeLists.txt b/client/CMakeLists.txt
index 68aefcbb9..25b639caf 100644
--- a/client/CMakeLists.txt
+++ b/client/CMakeLists.txt
@@ -47,9 +47,7 @@ if(APPLE)
endif()
if(ANDROID)
- if(IS_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/Android")
- message(STATUS "Adding Android client")
- add_subdirectory(Android)
- endif()
+ message(STATUS "Adding Android client")
+ add_subdirectory(Android)
endif()
diff --git a/client/common/cmdline.c b/client/common/cmdline.c
index 3b21e21ce..8233204fb 100644
--- a/client/common/cmdline.c
+++ b/client/common/cmdline.c
@@ -291,7 +291,7 @@ int freerdp_client_add_device_channel(rdpSettings* settings, int count, char** p
printer->Type = RDPDR_DTYP_PRINT;
printer->Name = _strdup(params[1]);
- if (params[2])
+ if (count > 2)
printer->DriverName = _strdup(params[2]);
freerdp_device_collection_add(settings, (RDPDR_DEVICE*) printer);
diff --git a/client/iOS/Controllers/BookmarkListController.m b/client/iOS/Controllers/BookmarkListController.m
index 27a508134..301bd5f5d 100644
--- a/client/iOS/Controllers/BookmarkListController.m
+++ b/client/iOS/Controllers/BookmarkListController.m
@@ -13,6 +13,7 @@
#import "RDPSessionViewController.h"
#import "Toast+UIView.h"
#import "Reachability.h"
+#import "GlobalDefaults.h"
#define SECTION_SESSIONS 0
#define SECTION_BOOKMARKS 1
@@ -803,7 +804,10 @@
_manual_bookmarks = [self arrayFromDataStoreURL:[self manualBookmarksDataStoreURL]];
if(_manual_bookmarks == nil)
+ {
_manual_bookmarks = [[NSMutableArray alloc] init];
+ [_manual_bookmarks addObject:[[[GlobalDefaults sharedGlobalDefaults] newTestServerBookmark] autorelease]];
+ }
}
- (void)readConnectionHistoryFromDataStore
diff --git a/client/iOS/Defaults.plist b/client/iOS/Defaults.plist
index 88e2113b1..a60e3be19 100644
--- a/client/iOS/Defaults.plist
+++ b/client/iOS/Defaults.plist
@@ -9,11 +9,11 @@
port
3389
screen_resolution_type
- 0
+ 1
width
- 1024
+ 0
height
- 768
+ 0
colors
16
perf_font_smoothing
diff --git a/client/iOS/Models/GlobalDefaults.h b/client/iOS/Models/GlobalDefaults.h
index ecbee2c38..d522991bd 100644
--- a/client/iOS/Models/GlobalDefaults.h
+++ b/client/iOS/Models/GlobalDefaults.h
@@ -24,5 +24,6 @@
- (ConnectionParams*)newParams;
- (ComputerBookmark*)newBookmark;
+- (ComputerBookmark*)newTestServerBookmark;
@end
diff --git a/client/iOS/Models/GlobalDefaults.m b/client/iOS/Models/GlobalDefaults.m
index 1a0619a22..2b2ab293f 100644
--- a/client/iOS/Models/GlobalDefaults.m
+++ b/client/iOS/Models/GlobalDefaults.m
@@ -68,4 +68,17 @@
return param_copy;
}
+- (ComputerBookmark*)newTestServerBookmark
+{
+ ComputerBookmark* bm = [self newBookmark];
+ [bm setLabel:@"Test Server"];
+ [[bm params] setValue:@"testservice.ifreerdp.com" forKey:@"hostname"];
+ [[bm params] setInt:0 forKey:@"screen_resolution_type"];
+ [[bm params] setInt:1024 forKey:@"width"];
+ [[bm params] setInt:768 forKey:@"height"];
+ [[bm params] setInt:32 forKey:@"colors"];
+ [[bm params] setBool:YES forKey:@"perf_remotefx"];
+ return bm;
+}
+
@end
diff --git a/cmake/ConfigOptions.cmake b/cmake/ConfigOptions.cmake
index 0f63c742c..c922d2f78 100644
--- a/cmake/ConfigOptions.cmake
+++ b/cmake/ConfigOptions.cmake
@@ -17,10 +17,18 @@ else()
option(WITH_SSE2 "Enable SSE2 optimization." OFF)
endif()
-if((TARGET_ARCH MATCHES "ARM") AND (NOT DEFINED WITH_NEON))
- option(WITH_NEON "Enable NEON optimization." ON)
-else()
- option(WITH_NEON "Enable NEON optimization." OFF)
+if(TARGET_ARCH MATCHES "ARM")
+ if (NOT DEFINED WITH_NEON)
+ option(WITH_NEON "Enable NEON optimization." ON)
+ else()
+ option(WITH_NEON "Enable NEON optimization." OFF)
+ endif()
+ if (NOT DEFINED ARM_FP_ABI)
+ set(ARM_FP_ABI "softfp" CACHE STRING "Floating point ABI to use on arm")
+ else()
+ set(ARM_FP_ABI ${ARM_FP_API} CACHE STRING "Floating point ABI to use on arm")
+ endif()
+ mark_as_advanced(ARM_FP_ABI)
endif()
option(WITH_JPEG "Use JPEG decoding." OFF)
diff --git a/keymaps/macosx b/keymaps/macosx
index 8363f81cc..4f55dd72e 100644
--- a/keymaps/macosx
+++ b/keymaps/macosx
@@ -57,6 +57,8 @@ keyboard "macosx"
VK_OEM_PERIOD <55>
VK_OEM_2 <52>
VK_SPACE <57>
+ VK_LWIN <63>
+ VK_RWIN <71>
VK_LCONTROL <67>
VK_LMENU <66>
VK_LSHIFT <64>
diff --git a/libfreerdp/codec/CMakeLists.txt b/libfreerdp/codec/CMakeLists.txt
index 6c9615125..f69801897 100644
--- a/libfreerdp/codec/CMakeLists.txt
+++ b/libfreerdp/codec/CMakeLists.txt
@@ -72,12 +72,12 @@ if(WITH_NEON)
if(ANDROID)
set(ANDROID_CPU_FEATURES_PATH "${ANDROID_NDK}/sources/android/cpufeatures")
include_directories(${ANDROID_CPU_FEATURES_PATH})
- set(${MODULE_PREFIX}_NEON_SRCS ${${MODULE_PREFIX}_NEON_SRCS}
+ set(${MODULE_PREFIX}_SRCS ${${MODULE_PREFIX}_SRCS}
${ANDROID_CPU_FEATURES_PATH}/cpu-features.c
${ANDROID_CPU_FEATURES_PATH}/cpu-features.h)
endif()
set(${MODULE_PREFIX}_SRCS ${${MODULE_PREFIX}_SRCS} ${${MODULE_PREFIX}_NEON_SRCS})
- set_source_files_properties(${${MODULE_PREFIX}_NEON_SRCS} PROPERTIES COMPILE_FLAGS "-mfpu=neon -mfloat-abi=softfp -Wno-unused-variable")
+ set_source_files_properties(${${MODULE_PREFIX}_NEON_SRCS} PROPERTIES COMPILE_FLAGS "-mfpu=neon -mfloat-abi=${ARM_FP_ABI} -Wno-unused-variable")
endif()
if(WITH_JPEG)
diff --git a/libfreerdp/codec/nsc.c b/libfreerdp/codec/nsc.c
index d20e015c3..c405997d0 100644
--- a/libfreerdp/codec/nsc.c
+++ b/libfreerdp/codec/nsc.c
@@ -271,8 +271,8 @@ NSC_CONTEXT* nsc_context_new(void)
NSC_CONTEXT* nsc_context;
UINT8 i;
- nsc_context = (NSC_CONTEXT*) malloc(sizeof(NSC_CONTEXT));
- nsc_context->priv = (NSC_CONTEXT_PRIV*) malloc(sizeof(NSC_CONTEXT_PRIV));
+ nsc_context = (NSC_CONTEXT*) calloc(1, sizeof(NSC_CONTEXT));
+ nsc_context->priv = (NSC_CONTEXT_PRIV*) calloc(1, sizeof(NSC_CONTEXT_PRIV));
for (i=0; i < 5; ++i)
{
nsc_context->priv->plane_buf[i] = NULL;
diff --git a/libfreerdp/codec/rfx.c b/libfreerdp/codec/rfx.c
index e29a095ca..3f30cbd22 100644
--- a/libfreerdp/codec/rfx.c
+++ b/libfreerdp/codec/rfx.c
@@ -37,6 +37,7 @@
#include
#include
+#include
#include "rfx_constants.h"
#include "rfx_types.h"
@@ -45,13 +46,8 @@
#include "rfx_quantization.h"
#include "rfx_dwt.h"
-#ifdef WITH_SSE2
#include "rfx_sse2.h"
-#endif
-
-#ifdef WITH_NEON
#include "rfx_neon.h"
-#endif
#ifndef RFX_INIT_SIMD
#define RFX_INIT_SIMD(_rfx_context) do { } while (0)
@@ -209,6 +205,11 @@ RFX_CONTEXT* rfx_context_new(void)
if (context->priv->UseThreads)
{
+ /* Call primitives_get here in order to avoid race conditions when using primitives_get */
+ /* from multiple threads. This call will initialize all function pointers correctly */
+ /* before any decoding threads are started */
+ primitives_get();
+
context->priv->ThreadPool = CreateThreadpool(NULL);
InitializeThreadpoolEnvironment(&context->priv->ThreadPoolEnv);
SetThreadpoolCallbackPool(&context->priv->ThreadPoolEnv, context->priv->ThreadPool);
@@ -232,6 +233,8 @@ RFX_CONTEXT* rfx_context_new(void)
context->dwt_2d_decode = rfx_dwt_2d_decode;
context->dwt_2d_encode = rfx_dwt_2d_encode;
+ RFX_INIT_SIMD(context);
+
return context;
}
diff --git a/libfreerdp/codec/rfx_neon.c b/libfreerdp/codec/rfx_neon.c
index 7331ea18b..40683b91b 100644
--- a/libfreerdp/codec/rfx_neon.c
+++ b/libfreerdp/codec/rfx_neon.c
@@ -40,9 +40,7 @@
static __inline void __attribute__((__gnu_inline__, __always_inline__, __artificial__))
rfx_quantization_decode_block_NEON(INT16 * buffer, const int buffer_size, const UINT32 factor)
{
- if (factor <= 6)
- return;
- int16x8_t quantFactors = vdupq_n_s16(factor - 6);
+ int16x8_t quantFactors = vdupq_n_s16(factor);
int16x8_t* buf = (int16x8_t*)buffer;
int16x8_t* buf_end = (int16x8_t*)(buffer + buffer_size);
@@ -59,16 +57,18 @@ rfx_quantization_decode_block_NEON(INT16 * buffer, const int buffer_size, const
void
rfx_quantization_decode_NEON(INT16 * buffer, const UINT32 * quantization_values)
{
- rfx_quantization_decode_block_NEON(buffer, 1024, quantization_values[8]); /* HL1 */
- rfx_quantization_decode_block_NEON(buffer + 1024, 1024, quantization_values[7]); /* LH1 */
- rfx_quantization_decode_block_NEON(buffer + 2048, 1024, quantization_values[9]); /* HH1 */
- rfx_quantization_decode_block_NEON(buffer + 3072, 256, quantization_values[5]); /* HL2 */
- rfx_quantization_decode_block_NEON(buffer + 3328, 256, quantization_values[4]); /* LH2 */
- rfx_quantization_decode_block_NEON(buffer + 3584, 256, quantization_values[6]); /* HH2 */
- rfx_quantization_decode_block_NEON(buffer + 3840, 64, quantization_values[2]); /* HL3 */
- rfx_quantization_decode_block_NEON(buffer + 3904, 64, quantization_values[1]); /* LH3 */
- rfx_quantization_decode_block_NEON(buffer + 3968, 64, quantization_values[3]); /* HH3 */
- rfx_quantization_decode_block_NEON(buffer + 4032, 64, quantization_values[0]); /* LL3 */
+ rfx_quantization_decode_block_NEON(buffer, 4096, 5);
+
+ rfx_quantization_decode_block_NEON(buffer, 1024, quantization_values[8] - 6); /* HL1 */
+ rfx_quantization_decode_block_NEON(buffer + 1024, 1024, quantization_values[7] - 6); /* LH1 */
+ rfx_quantization_decode_block_NEON(buffer + 2048, 1024, quantization_values[9] - 6); /* HH1 */
+ rfx_quantization_decode_block_NEON(buffer + 3072, 256, quantization_values[5] - 6); /* HL2 */
+ rfx_quantization_decode_block_NEON(buffer + 3328, 256, quantization_values[4] - 6); /* LH2 */
+ rfx_quantization_decode_block_NEON(buffer + 3584, 256, quantization_values[6] - 6); /* HH2 */
+ rfx_quantization_decode_block_NEON(buffer + 3840, 64, quantization_values[2] - 6); /* HL3 */
+ rfx_quantization_decode_block_NEON(buffer + 3904, 64, quantization_values[1] - 6); /* LH3 */
+ rfx_quantization_decode_block_NEON(buffer + 3968, 64, quantization_values[3] - 6); /* HH3 */
+ rfx_quantization_decode_block_NEON(buffer + 4032, 64, quantization_values[0] - 6); /* LL3 */
}
@@ -278,8 +278,11 @@ int isNeonSupported()
}
return FALSE;
-#else
+#elif defined(__APPLE)
+ /* assume NEON support on iOS devices */
return TRUE;
+#else
+ return FALSE;
#endif
}
diff --git a/libfreerdp/codec/rfx_neon.h b/libfreerdp/codec/rfx_neon.h
index 4ec15b281..4a4edddf4 100644
--- a/libfreerdp/codec/rfx_neon.h
+++ b/libfreerdp/codec/rfx_neon.h
@@ -22,8 +22,6 @@
#include
-#if defined(__ARM_NEON__)
-
void rfx_init_neon(RFX_CONTEXT * context);
#ifndef RFX_INIT_SIMD
@@ -32,7 +30,5 @@ void rfx_init_neon(RFX_CONTEXT * context);
#endif
#endif
-#endif // __ARM_NEON__
-
#endif /* __RFX_NEON_H */
diff --git a/libfreerdp/codec/rfx_sse2.h b/libfreerdp/codec/rfx_sse2.h
index 2fc14fd47..f1ff20e6d 100644
--- a/libfreerdp/codec/rfx_sse2.h
+++ b/libfreerdp/codec/rfx_sse2.h
@@ -24,8 +24,10 @@
void rfx_init_sse2(RFX_CONTEXT* context);
-#ifndef RFX_INIT_SIMD
-#define RFX_INIT_SIMD(_rfx_context) rfx_init_sse2(_rfx_context)
+#ifdef WITH_SSE2
+ #ifndef RFX_INIT_SIMD
+ #define RFX_INIT_SIMD(_rfx_context) rfx_init_sse2(_rfx_context)
+ #endif
#endif
#endif /* __RFX_SSE2_H */
diff --git a/libfreerdp/core/nla.c b/libfreerdp/core/nla.c
index 5bf341fc0..441bf9680 100644
--- a/libfreerdp/core/nla.c
+++ b/libfreerdp/core/nla.c
@@ -1104,28 +1104,28 @@ void credssp_send(rdpCredssp* credssp)
/* [1] negoTokens (NegoData) */
if (nego_tokens_length > 0)
{
- length = der_get_content_length(nego_tokens_length);
- length -= der_write_contextual_tag(s, 1, length, TRUE); /* NegoData */
- length -= der_write_sequence_tag(s, length); /* SEQUENCE OF NegoDataItem */
- length -= der_write_sequence_tag(s, length); /* NegoDataItem */
- length -= der_write_contextual_tag(s, 0, length, TRUE); /* [0] negoToken */
- der_write_octet_string(s, (BYTE*) credssp->negoToken.pvBuffer, length); /* OCTET STRING */
+ length = nego_tokens_length;
+ length -= der_write_contextual_tag(s, 1, der_get_content_length(length), TRUE); /* NegoData */
+ length -= der_write_sequence_tag(s, der_get_content_length(length)); /* SEQUENCE OF NegoDataItem */
+ length -= der_write_sequence_tag(s, der_get_content_length(length)); /* NegoDataItem */
+ length -= der_write_contextual_tag(s, 0, der_get_content_length(length), TRUE); /* [0] negoToken */
+ der_write_octet_string(s, (BYTE*) credssp->negoToken.pvBuffer, credssp->negoToken.cbBuffer); /* OCTET STRING */
}
/* [2] authInfo (OCTET STRING) */
if (auth_info_length > 0)
{
- length = ber_get_content_length(auth_info_length);
- length -= ber_write_contextual_tag(s, 2, length, TRUE);
+ length = auth_info_length;
+ length -= ber_write_contextual_tag(s, 2, ber_get_content_length(length), TRUE);
ber_write_octet_string(s, credssp->authInfo.pvBuffer, credssp->authInfo.cbBuffer);
}
/* [3] pubKeyAuth (OCTET STRING) */
if (pub_key_auth_length > 0)
{
- length = ber_get_content_length(pub_key_auth_length);
- length -= ber_write_contextual_tag(s, 3, length, TRUE);
- ber_write_octet_string(s, credssp->pubKeyAuth.pvBuffer, length);
+ length = pub_key_auth_length;
+ length -= ber_write_contextual_tag(s, 3, ber_get_content_length(length), TRUE);
+ ber_write_octet_string(s, credssp->pubKeyAuth.pvBuffer, credssp->pubKeyAuth.cbBuffer);
}
transport_write(credssp->transport, s);
diff --git a/libfreerdp/crypto/ber.c b/libfreerdp/crypto/ber.c
index 344d5570d..963471dce 100644
--- a/libfreerdp/crypto/ber.c
+++ b/libfreerdp/crypto/ber.c
@@ -76,7 +76,7 @@ int ber_write_length(STREAM* s, int length)
int _ber_skip_length(int length)
{
- if (length > 0x7F)
+ if (length > 0x80)
return 3;
else
return 1;
@@ -84,7 +84,7 @@ int _ber_skip_length(int length)
int ber_get_content_length(int length)
{
- if (length - 1 > 0x7F)
+ if (length > 0x81)
return length - 4;
else
return length - 2;
diff --git a/libfreerdp/crypto/der.c b/libfreerdp/crypto/der.c
index ef77b2a7f..888a00036 100644
--- a/libfreerdp/crypto/der.c
+++ b/libfreerdp/crypto/der.c
@@ -25,9 +25,9 @@
int _der_skip_length(int length)
{
- if (length > 0x7F && length <= 0xFF)
+ if (length > 0x81 && length <= 0x102)
return 2;
- else if (length > 0xFF)
+ else if (length > 0x102)
return 3;
else
return 1;
@@ -56,9 +56,9 @@ int der_write_length(STREAM* s, int length)
int der_get_content_length(int length)
{
- if (length > 0x7F && length <= 0xFF)
+ if (length > 0x81 && length <= 0x102)
return length - 3;
- else if (length > 0xFF)
+ else if (length > 0x102)
return length - 4;
else
return length - 2;
diff --git a/libfreerdp/locale/keyboard_x11.c b/libfreerdp/locale/keyboard_x11.c
index a4030946e..2f938ae4d 100644
--- a/libfreerdp/locale/keyboard_x11.c
+++ b/libfreerdp/locale/keyboard_x11.c
@@ -277,7 +277,7 @@ const UINT32 KEYCODE_TO_VKCODE_MACOSX[256] =
0, /* 60 */
VK_ESCAPE, /* 61 */
0, /* 62 */
- 0, /* 63 */
+ VK_LWIN, /* 63 */
VK_LSHIFT, /* 64 */
VK_CAPITAL, /* 65 */
VK_LMENU, /* 66 */
@@ -285,7 +285,7 @@ const UINT32 KEYCODE_TO_VKCODE_MACOSX[256] =
VK_RSHIFT, /* 68 */
VK_RMENU, /* 69 */
0, /* 70 */
- 0, /* 71 */
+ VK_RWIN, /* 71 */
0, /* 72 */
VK_DECIMAL, /* 73 */
0, /* 74 */
diff --git a/libfreerdp/primitives/CMakeLists.txt b/libfreerdp/primitives/CMakeLists.txt
index 4cbae2717..e8d1a7bfb 100644
--- a/libfreerdp/primitives/CMakeLists.txt
+++ b/libfreerdp/primitives/CMakeLists.txt
@@ -28,6 +28,15 @@ set(${MODULE_PREFIX}_SRCS
primitives.c
prim_internal.h)
+set(${MODULE_PREFIX}_OPT_SRCS
+ prim_add_opt.c
+ prim_andor_opt.c
+ prim_alphaComp_opt.c
+ prim_colors_opt.c
+ prim_set_opt.c
+ prim_shift_opt.c
+ prim_sign_opt.c)
+
add_definitions(-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE})
### IPP Variable debugging
@@ -49,7 +58,7 @@ if(WITH_SSE2)
endif()
elseif(WITH_NEON)
if(CMAKE_COMPILER_IS_GNUCC)
- set(OPTIMIZATION "${OPTIMIZATION} -mfpu=neon -mfloat-abi=softfp")
+ set(OPTIMIZATION "${OPTIMIZATION} -mfpu=neon -mfloat-abi=${ARM_FP_ABI}")
endif()
# TODO: Add MSVC equivalent
endif()
@@ -63,7 +72,9 @@ if(ANDROID)
${ANDROID_CPU_FEATURES_PATH}/cpu-features.h)
endif()
-set_property(SOURCE ${${MODULE_PREFIX}_SRCS} PROPERTY COMPILE_FLAGS ${OPTIMIZATION})
+set_property(SOURCE ${${MODULE_PREFIX}_OPT_SRCS} PROPERTY COMPILE_FLAGS ${OPTIMIZATION})
+
+set(${MODULE_PREFIX}_SRCS ${${MODULE_PREFIX}_SRCS} ${${MODULE_PREFIX}_OPT_SRCS})
add_complex_library(MODULE ${MODULE_NAME} TYPE "OBJECT"
MONOLITHIC ${MONOLITHIC_BUILD}
diff --git a/libfreerdp/primitives/prim_add.c b/libfreerdp/primitives/prim_add.c
index 17e504201..258bcc6ea 100644
--- a/libfreerdp/primitives/prim_add.c
+++ b/libfreerdp/primitives/prim_add.c
@@ -18,27 +18,16 @@
#include "config.h"
#endif
-#include
-
#include
#include
-#ifdef WITH_SSE2
-#include
-#include
-#endif /* WITH_SSE2 */
-
-#ifdef WITH_IPP
-#include
-#endif /* WITH_IPP */
-
#include "prim_internal.h"
-#include "prim_templates.h"
+#include "prim_add.h"
/* ----------------------------------------------------------------------------
* 16-bit signed add with saturation (under and over).
*/
-PRIM_STATIC pstatus_t general_add_16s(
+pstatus_t general_add_16s(
const INT16 *pSrc1,
const INT16 *pSrc2,
INT16 *pDst,
@@ -55,29 +44,14 @@ PRIM_STATIC pstatus_t general_add_16s(
return PRIMITIVES_SUCCESS;
}
-#ifdef WITH_SSE2
-# if !defined(WITH_IPP) || defined(ALL_PRIMITIVES_VERSIONS)
-/* ------------------------------------------------------------------------- */
-SSE3_SSD_ROUTINE(sse3_add_16s, INT16, general_add_16s,
- _mm_adds_epi16, general_add_16s(sptr1++, sptr2++, dptr++, 1))
-# endif /* !defined(WITH_IPP) || defined(ALL_PRIMITIVES_VERSIONS) */
-#endif
-
/* ------------------------------------------------------------------------- */
void primitives_init_add(
const primitives_hints_t *hints,
primitives_t *prims)
{
prims->add_16s = general_add_16s;
-#ifdef WITH_IPP
- prims->add_16s = (__add_16s_t) ippsAdd_16s;
-#elif defined(WITH_SSE2)
- if ((hints->x86_flags & PRIM_X86_SSE2_AVAILABLE)
- && (hints->x86_flags & PRIM_X86_SSE3_AVAILABLE)) /* for LDDQU */
- {
- prims->add_16s = sse3_add_16s;
- }
-#endif
+
+ primitives_init_add_opt(hints, prims);
}
/* ------------------------------------------------------------------------- */
diff --git a/libfreerdp/primitives/prim_add.h b/libfreerdp/primitives/prim_add.h
new file mode 100644
index 000000000..4ad460279
--- /dev/null
+++ b/libfreerdp/primitives/prim_add.h
@@ -0,0 +1,30 @@
+/* FreeRDP: A Remote Desktop Protocol Client
+ * Add operations.
+ * vi:ts=4 sw=4
+ *
+ * (c) Copyright 2012 Hewlett-Packard Development Company, L.P.
+ * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing
+ * permissions and limitations under the License. Algorithms used by
+ * this code may be covered by patents by HP, Microsoft, or other parties.
+ *
+ */
+
+#ifdef __GNUC__
+# pragma once
+#endif
+
+#ifndef __PRIM_ADD_H_INCLUDED__
+#define __PRIM_ADD_H_INCLUDED__
+
+pstatus_t general_add_16s(const INT16 *pSrc1, const INT16 *pSrc2, INT16 *pDst, INT32 len);
+
+void primitives_init_add_opt(const primitives_hints_t *hints, primitives_t *prims);
+
+#endif /* !__PRIM_ADD_H_INCLUDED__ */
+
diff --git a/libfreerdp/primitives/prim_add_opt.c b/libfreerdp/primitives/prim_add_opt.c
new file mode 100644
index 000000000..2de0b8fc6
--- /dev/null
+++ b/libfreerdp/primitives/prim_add_opt.c
@@ -0,0 +1,62 @@
+/* FreeRDP: A Remote Desktop Protocol Client
+ * Optimized add operations.
+ * vi:ts=4 sw=4:
+ *
+ * (c) Copyright 2012 Hewlett-Packard Development Company, L.P.
+ * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing
+ * permissions and limitations under the License.
+ *
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include
+#include
+
+#ifdef WITH_SSE2
+#include
+#include
+#endif /* WITH_SSE2 */
+
+#ifdef WITH_IPP
+#include
+#endif /* WITH_IPP */
+
+#include "prim_internal.h"
+#include "prim_templates.h"
+#include "prim_add.h"
+
+
+#ifdef WITH_SSE2
+# if !defined(WITH_IPP) || defined(ALL_PRIMITIVES_VERSIONS)
+/* ------------------------------------------------------------------------- */
+SSE3_SSD_ROUTINE(sse3_add_16s, INT16, general_add_16s,
+ _mm_adds_epi16, general_add_16s(sptr1++, sptr2++, dptr++, 1))
+# endif /* !defined(WITH_IPP) || defined(ALL_PRIMITIVES_VERSIONS) */
+#endif
+
+/* ------------------------------------------------------------------------- */
+void primitives_init_add_opt(
+ const primitives_hints_t *hints,
+ primitives_t *prims)
+{
+#ifdef WITH_IPP
+ prims->add_16s = (__add_16s_t) ippsAdd_16s;
+#elif defined(WITH_SSE2)
+ if ((hints->x86_flags & PRIM_X86_SSE2_AVAILABLE)
+ && (hints->x86_flags & PRIM_X86_SSE3_AVAILABLE)) /* for LDDQU */
+ {
+ prims->add_16s = sse3_add_16s;
+ }
+#endif
+}
+
+
diff --git a/libfreerdp/primitives/prim_alphaComp.c b/libfreerdp/primitives/prim_alphaComp.c
index 7f1a19093..24f916770 100644
--- a/libfreerdp/primitives/prim_alphaComp.c
+++ b/libfreerdp/primitives/prim_alphaComp.c
@@ -24,21 +24,11 @@
#include "config.h"
#endif
-#include
-
#include
#include
#include "prim_internal.h"
-
-#ifdef WITH_SSE2
-#include
-#include
-#endif /* WITH_SSE2 */
-
-#ifdef WITH_IPP
-#include
-#endif /* WITH_IPP */
+#include "prim_alphaComp.h"
#define ALPHA(_k_) (((_k_) & 0xFF000000U) >> 24)
#define RED(_k_) (((_k_) & 0x00FF0000U) >> 16)
@@ -46,7 +36,7 @@
#define BLU(_k_) (((_k_) & 0x000000FFU))
/* ------------------------------------------------------------------------- */
-PRIM_STATIC pstatus_t general_alphaComp_argb(
+pstatus_t general_alphaComp_argb(
const BYTE *pSrc1, INT32 src1Step,
const BYTE *pSrc2, INT32 src2Step,
BYTE *pDst, INT32 dstStep,
@@ -111,188 +101,12 @@ PRIM_STATIC pstatus_t general_alphaComp_argb(
return PRIMITIVES_SUCCESS;
}
-/* ------------------------------------------------------------------------- */
-#ifdef WITH_SSE2
-#if !defined(WITH_IPP) || defined(ALL_PRIMITIVES_VERSIONS)
-
-PRIM_STATIC pstatus_t sse2_alphaComp_argb(
- const BYTE *pSrc1, INT32 src1Step,
- const BYTE *pSrc2, INT32 src2Step,
- BYTE *pDst, INT32 dstStep,
- INT32 width, INT32 height)
-{
- const UINT32 *sptr1 = (const UINT32 *) pSrc1;
- const UINT32 *sptr2 = (const UINT32 *) pSrc2;
- UINT32 *dptr;
- int linebytes, src1Jump, src2Jump, dstJump, y;
- __m128i xmm0, xmm1;
-
- if ((width <= 0) || (height <= 0)) return PRIMITIVES_SUCCESS;
-
- if (width < 4) /* pointless if too small */
- {
- return general_alphaComp_argb(pSrc1, src1Step, pSrc2, src2Step,
- pDst, dstStep, width, height);
- }
- dptr = (UINT32 *) pDst;
- linebytes = width * sizeof(UINT32);
- src1Jump = (src1Step - linebytes) / sizeof(UINT32);
- src2Jump = (src2Step - linebytes) / sizeof(UINT32);
- dstJump = (dstStep - linebytes) / sizeof(UINT32);
-
- xmm0 = _mm_set1_epi32(0);
- xmm1 = _mm_set1_epi16(1);
-
- for (y=0; y> 2;
- pixels -= count << 2;
- while (count--)
- {
- __m128i xmm2, xmm3, xmm4, xmm5, xmm6, xmm7;
- /* BdGdRdAdBcGcRcAcBbGbRbAbBaGaRaAa */
- xmm2 = LOAD_SI128(sptr1); sptr1 += 4;
- /* BhGhRhAhBgGgRgAgBfGfRfAfBeGeReAe */
- xmm3 = LOAD_SI128(sptr2); sptr2 += 4;
- /* 00Bb00Gb00Rb00Ab00Ba00Ga00Ra00Aa */
- xmm4 = _mm_unpackhi_epi8(xmm2, xmm0);
- /* 00Bf00Gf00Bf00Af00Be00Ge00Re00Ae */
- xmm5 = _mm_unpackhi_epi8(xmm3, xmm0);
- /* subtract */
- xmm6 = _mm_subs_epi16(xmm4, xmm5);
- /* 00Bb00Gb00Rb00Ab00Aa00Aa00Aa00Aa */
- xmm4 = _mm_shufflelo_epi16(xmm4, 0xff);
- /* 00Ab00Ab00Ab00Ab00Aa00Aa00Aa00Aa */
- xmm4 = _mm_shufflehi_epi16(xmm4, 0xff);
- /* Add one to alphas */
- xmm4 = _mm_adds_epi16(xmm4, xmm1);
- /* Multiply and take low word */
- xmm4 = _mm_mullo_epi16(xmm4, xmm6);
- /* Shift 8 right */
- xmm4 = _mm_srai_epi16(xmm4, 8);
- /* Add xmm5 */
- xmm4 = _mm_adds_epi16(xmm4, xmm5);
- /* 00Bj00Gj00Rj00Aj00Bi00Gi00Ri00Ai */
-
- /* 00Bd00Gd00Rd00Ad00Bc00Gc00Rc00Ac */
- xmm5 = _mm_unpacklo_epi8(xmm2, xmm0);
- /* 00Bh00Gh00Rh00Ah00Bg00Gg00Rg00Ag */
- xmm6 = _mm_unpacklo_epi8(xmm3, xmm0);
- /* subtract */
- xmm7 = _mm_subs_epi16(xmm5, xmm6);
- /* 00Bd00Gd00Rd00Ad00Ac00Ac00Ac00Ac */
- xmm5 = _mm_shufflelo_epi16(xmm5, 0xff);
- /* 00Ad00Ad00Ad00Ad00Ac00Ac00Ac00Ac */
- xmm5 = _mm_shufflehi_epi16(xmm5, 0xff);
- /* Add one to alphas */
- xmm5 = _mm_adds_epi16(xmm5, xmm1);
- /* Multiply and take low word */
- xmm5 = _mm_mullo_epi16(xmm5, xmm7);
- /* Shift 8 right */
- xmm5 = _mm_srai_epi16(xmm5, 8);
- /* Add xmm6 */
- xmm5 = _mm_adds_epi16(xmm5, xmm6);
- /* 00Bl00Gl00Rl00Al00Bk00Gk00Rk0ABk */
-
- /* Must mask off remainders or pack gets confused */
- xmm3 = _mm_set1_epi16(0x00ffU);
- xmm4 = _mm_and_si128(xmm4, xmm3);
- xmm5 = _mm_and_si128(xmm5, xmm3);
-
- /* BlGlRlAlBkGkRkAkBjGjRjAjBiGiRiAi */
- xmm5 = _mm_packus_epi16(xmm5, xmm4);
- _mm_store_si128((__m128i *) dptr, xmm5); dptr += 4;
- }
-
- /* Finish off the remainder. */
- if (pixels)
- {
- general_alphaComp_argb((const BYTE *) sptr1, src1Step,
- (const BYTE *) sptr2, src2Step,
- (BYTE *) dptr, dstStep, pixels, 1);
- sptr1 += pixels;
- sptr2 += pixels;
- dptr += pixels;
- }
-
- /* Jump to next row. */
- sptr1 += src1Jump;
- sptr2 += src2Jump;
- dptr += dstJump;
- }
-
- return PRIMITIVES_SUCCESS;
-}
-#endif /* !defined(WITH_IPP) || defined(ALL_PRIMITIVES_VERSIONS) */
-#endif
-
-#ifdef WITH_IPP
-/* ------------------------------------------------------------------------- */
-PRIM_STATIC pstatus_t ipp_alphaComp_argb(
- const BYTE *pSrc1, INT32 src1Step,
- const BYTE *pSrc2, INT32 src2Step,
- BYTE *pDst, INT32 dstStep,
- INT32 width, INT32 height)
-{
- IppiSize sz;
- sz.width = width;
- sz.height = height;
- return ippiAlphaComp_8u_AC4R(pSrc1, src1Step, pSrc2, src2Step,
- pDst, dstStep, sz, ippAlphaOver);
-}
-#endif
-
/* ------------------------------------------------------------------------- */
void primitives_init_alphaComp(const primitives_hints_t* hints, primitives_t* prims)
{
prims->alphaComp_argb = general_alphaComp_argb;
-#ifdef WITH_IPP
- prims->alphaComp_argb = ipp_alphaComp_argb;
-#elif defined(WITH_SSE2)
- if ((hints->x86_flags & PRIM_X86_SSE2_AVAILABLE)
- && (hints->x86_flags & PRIM_X86_SSE3_AVAILABLE)) /* for LDDQU */
- {
- prims->alphaComp_argb = sse2_alphaComp_argb;
- }
-#endif
+
+ primitives_init_alphaComp_opt(hints, prims);
}
/* ------------------------------------------------------------------------- */
@@ -300,3 +114,4 @@ void primitives_deinit_alphaComp(primitives_t *prims)
{
/* Nothing to do. */
}
+
diff --git a/libfreerdp/primitives/prim_alphaComp.h b/libfreerdp/primitives/prim_alphaComp.h
new file mode 100644
index 000000000..50591162d
--- /dev/null
+++ b/libfreerdp/primitives/prim_alphaComp.h
@@ -0,0 +1,30 @@
+/* FreeRDP: A Remote Desktop Protocol Client
+ * Alpha blending routines.
+ * vi:ts=4 sw=4
+ *
+ * (c) Copyright 2012 Hewlett-Packard Development Company, L.P.
+ * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing
+ * permissions and limitations under the License. Algorithms used by
+ * this code may be covered by patents by HP, Microsoft, or other parties.
+ *
+ */
+
+#ifdef __GNUC__
+# pragma once
+#endif
+
+#ifndef __PRIM_ALPHACOMP_H_INCLUDED__
+#define __PRIM_ALPHACOMP_H_INCLUDED__
+
+pstatus_t general_alphaComp_argb(const BYTE *pSrc1, INT32 src1Step, const BYTE *pSrc2, INT32 src2Step, BYTE *pDst, INT32 dstStep, INT32 width, INT32 height);
+
+void primitives_init_alphaComp_opt(const primitives_hints_t* hints, primitives_t* prims);
+
+#endif /* !__PRIM_ALPHACOMP_H_INCLUDED__ */
+
diff --git a/libfreerdp/primitives/prim_alphaComp_opt.c b/libfreerdp/primitives/prim_alphaComp_opt.c
new file mode 100644
index 000000000..5550fcbc1
--- /dev/null
+++ b/libfreerdp/primitives/prim_alphaComp_opt.c
@@ -0,0 +1,225 @@
+/* FreeRDP: A Remote Desktop Protocol Client
+ * Optimized alpha blending routines.
+ * vi:ts=4 sw=4:
+ *
+ * (c) Copyright 2012 Hewlett-Packard Development Company, L.P.
+ * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing
+ * permissions and limitations under the License.
+ *
+ * Note: this code assumes the second operand is fully opaque,
+ * e.g.
+ * newval = alpha1*val1 + (1-alpha1)*val2
+ * rather than
+ * newval = alpha1*val1 + (1-alpha1)*alpha2*val2
+ * The IPP gives other options.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include
+#include
+
+#ifdef WITH_SSE2
+#include
+#include
+#endif /* WITH_SSE2 */
+
+#ifdef WITH_IPP
+#include
+#endif /* WITH_IPP */
+
+#include "prim_internal.h"
+#include "prim_alphaComp.h"
+
+
+/* ------------------------------------------------------------------------- */
+#ifdef WITH_SSE2
+#if !defined(WITH_IPP) || defined(ALL_PRIMITIVES_VERSIONS)
+
+pstatus_t sse2_alphaComp_argb(
+ const BYTE *pSrc1, INT32 src1Step,
+ const BYTE *pSrc2, INT32 src2Step,
+ BYTE *pDst, INT32 dstStep,
+ INT32 width, INT32 height)
+{
+ const UINT32 *sptr1 = (const UINT32 *) pSrc1;
+ const UINT32 *sptr2 = (const UINT32 *) pSrc2;
+ UINT32 *dptr;
+ int linebytes, src1Jump, src2Jump, dstJump, y;
+ __m128i xmm0, xmm1;
+
+ if ((width <= 0) || (height <= 0)) return PRIMITIVES_SUCCESS;
+
+ if (width < 4) /* pointless if too small */
+ {
+ return general_alphaComp_argb(pSrc1, src1Step, pSrc2, src2Step,
+ pDst, dstStep, width, height);
+ }
+ dptr = (UINT32 *) pDst;
+ linebytes = width * sizeof(UINT32);
+ src1Jump = (src1Step - linebytes) / sizeof(UINT32);
+ src2Jump = (src2Step - linebytes) / sizeof(UINT32);
+ dstJump = (dstStep - linebytes) / sizeof(UINT32);
+
+ xmm0 = _mm_set1_epi32(0);
+ xmm1 = _mm_set1_epi16(1);
+
+ for (y=0; y> 2;
+ pixels -= count << 2;
+ while (count--)
+ {
+ __m128i xmm2, xmm3, xmm4, xmm5, xmm6, xmm7;
+ /* BdGdRdAdBcGcRcAcBbGbRbAbBaGaRaAa */
+ xmm2 = LOAD_SI128(sptr1); sptr1 += 4;
+ /* BhGhRhAhBgGgRgAgBfGfRfAfBeGeReAe */
+ xmm3 = LOAD_SI128(sptr2); sptr2 += 4;
+ /* 00Bb00Gb00Rb00Ab00Ba00Ga00Ra00Aa */
+ xmm4 = _mm_unpackhi_epi8(xmm2, xmm0);
+ /* 00Bf00Gf00Bf00Af00Be00Ge00Re00Ae */
+ xmm5 = _mm_unpackhi_epi8(xmm3, xmm0);
+ /* subtract */
+ xmm6 = _mm_subs_epi16(xmm4, xmm5);
+ /* 00Bb00Gb00Rb00Ab00Aa00Aa00Aa00Aa */
+ xmm4 = _mm_shufflelo_epi16(xmm4, 0xff);
+ /* 00Ab00Ab00Ab00Ab00Aa00Aa00Aa00Aa */
+ xmm4 = _mm_shufflehi_epi16(xmm4, 0xff);
+ /* Add one to alphas */
+ xmm4 = _mm_adds_epi16(xmm4, xmm1);
+ /* Multiply and take low word */
+ xmm4 = _mm_mullo_epi16(xmm4, xmm6);
+ /* Shift 8 right */
+ xmm4 = _mm_srai_epi16(xmm4, 8);
+ /* Add xmm5 */
+ xmm4 = _mm_adds_epi16(xmm4, xmm5);
+ /* 00Bj00Gj00Rj00Aj00Bi00Gi00Ri00Ai */
+
+ /* 00Bd00Gd00Rd00Ad00Bc00Gc00Rc00Ac */
+ xmm5 = _mm_unpacklo_epi8(xmm2, xmm0);
+ /* 00Bh00Gh00Rh00Ah00Bg00Gg00Rg00Ag */
+ xmm6 = _mm_unpacklo_epi8(xmm3, xmm0);
+ /* subtract */
+ xmm7 = _mm_subs_epi16(xmm5, xmm6);
+ /* 00Bd00Gd00Rd00Ad00Ac00Ac00Ac00Ac */
+ xmm5 = _mm_shufflelo_epi16(xmm5, 0xff);
+ /* 00Ad00Ad00Ad00Ad00Ac00Ac00Ac00Ac */
+ xmm5 = _mm_shufflehi_epi16(xmm5, 0xff);
+ /* Add one to alphas */
+ xmm5 = _mm_adds_epi16(xmm5, xmm1);
+ /* Multiply and take low word */
+ xmm5 = _mm_mullo_epi16(xmm5, xmm7);
+ /* Shift 8 right */
+ xmm5 = _mm_srai_epi16(xmm5, 8);
+ /* Add xmm6 */
+ xmm5 = _mm_adds_epi16(xmm5, xmm6);
+ /* 00Bl00Gl00Rl00Al00Bk00Gk00Rk0ABk */
+
+ /* Must mask off remainders or pack gets confused */
+ xmm3 = _mm_set1_epi16(0x00ffU);
+ xmm4 = _mm_and_si128(xmm4, xmm3);
+ xmm5 = _mm_and_si128(xmm5, xmm3);
+
+ /* BlGlRlAlBkGkRkAkBjGjRjAjBiGiRiAi */
+ xmm5 = _mm_packus_epi16(xmm5, xmm4);
+ _mm_store_si128((__m128i *) dptr, xmm5); dptr += 4;
+ }
+
+ /* Finish off the remainder. */
+ if (pixels)
+ {
+ general_alphaComp_argb((const BYTE *) sptr1, src1Step,
+ (const BYTE *) sptr2, src2Step,
+ (BYTE *) dptr, dstStep, pixels, 1);
+ sptr1 += pixels;
+ sptr2 += pixels;
+ dptr += pixels;
+ }
+
+ /* Jump to next row. */
+ sptr1 += src1Jump;
+ sptr2 += src2Jump;
+ dptr += dstJump;
+ }
+
+ return PRIMITIVES_SUCCESS;
+}
+#endif /* !defined(WITH_IPP) || defined(ALL_PRIMITIVES_VERSIONS) */
+#endif
+
+#ifdef WITH_IPP
+/* ------------------------------------------------------------------------- */
+pstatus_t ipp_alphaComp_argb(
+ const BYTE *pSrc1, INT32 src1Step,
+ const BYTE *pSrc2, INT32 src2Step,
+ BYTE *pDst, INT32 dstStep,
+ INT32 width, INT32 height)
+{
+ IppiSize sz;
+ sz.width = width;
+ sz.height = height;
+ return ippiAlphaComp_8u_AC4R(pSrc1, src1Step, pSrc2, src2Step,
+ pDst, dstStep, sz, ippAlphaOver);
+}
+#endif
+
+/* ------------------------------------------------------------------------- */
+void primitives_init_alphaComp_opt(const primitives_hints_t* hints, primitives_t* prims)
+{
+#ifdef WITH_IPP
+ prims->alphaComp_argb = ipp_alphaComp_argb;
+#elif defined(WITH_SSE2)
+ if ((hints->x86_flags & PRIM_X86_SSE2_AVAILABLE)
+ && (hints->x86_flags & PRIM_X86_SSE3_AVAILABLE)) /* for LDDQU */
+ {
+ prims->alphaComp_argb = sse2_alphaComp_argb;
+ }
+#endif
+}
+
diff --git a/libfreerdp/primitives/prim_andor.c b/libfreerdp/primitives/prim_andor.c
index 358d6c823..0b8092ff2 100644
--- a/libfreerdp/primitives/prim_andor.c
+++ b/libfreerdp/primitives/prim_andor.c
@@ -17,27 +17,16 @@
#include "config.h"
#endif
-#include
-
#include
#include
-#ifdef WITH_SSE2
-#include
-#include
-#endif /* WITH_SSE2 */
-
-#ifdef WITH_IPP
-#include
-#endif /* WITH_IPP */
-
#include "prim_internal.h"
-#include "prim_templates.h"
+#include "prim_andor.h"
/* ----------------------------------------------------------------------------
* 32-bit AND with a constant.
*/
-PRIM_STATIC pstatus_t general_andC_32u(
+pstatus_t general_andC_32u(
const UINT32 *pSrc,
UINT32 val,
UINT32 *pDst,
@@ -55,7 +44,7 @@ PRIM_STATIC pstatus_t general_andC_32u(
/* ----------------------------------------------------------------------------
* 32-bit OR with a constant.
*/
-PRIM_STATIC pstatus_t general_orC_32u(
+pstatus_t general_orC_32u(
const UINT32 *pSrc,
UINT32 val,
UINT32 *pDst,
@@ -70,16 +59,6 @@ PRIM_STATIC pstatus_t general_orC_32u(
return PRIMITIVES_SUCCESS;
}
-#ifdef WITH_SSE2
-# if !defined(WITH_IPP) || defined(ALL_PRIMITIVES_VERSIONS)
-/* ------------------------------------------------------------------------- */
-SSE3_SCD_PRE_ROUTINE(sse3_andC_32u, UINT32, general_andC_32u,
- _mm_and_si128, *dptr++ = *sptr++ & val)
-SSE3_SCD_PRE_ROUTINE(sse3_orC_32u, UINT32, general_orC_32u,
- _mm_or_si128, *dptr++ = *sptr++ | val)
-# endif /* !defined(WITH_IPP) || defined(ALL_PRIMITIVES_VERSIONS) */
-#endif
-
/* ------------------------------------------------------------------------- */
void primitives_init_andor(
const primitives_hints_t *hints,
@@ -89,17 +68,7 @@ void primitives_init_andor(
prims->andC_32u = general_andC_32u;
prims->orC_32u = general_orC_32u;
-#if defined(WITH_IPP)
- prims->andC_32u = (__andC_32u_t) ippsAndC_32u;
- prims->orC_32u = (__orC_32u_t) ippsOrC_32u;
-#elif defined(WITH_SSE2)
- if ((hints->x86_flags & PRIM_X86_SSE2_AVAILABLE)
- && (hints->x86_flags & PRIM_X86_SSE3_AVAILABLE))
- {
- prims->andC_32u = sse3_andC_32u;
- prims->orC_32u = sse3_orC_32u;
- }
-#endif
+ primitives_init_andor_opt(hints, prims);
}
/* ------------------------------------------------------------------------- */
@@ -108,3 +77,4 @@ void primitives_deinit_andor(
{
/* Nothing to do. */
}
+
diff --git a/libfreerdp/primitives/prim_andor.h b/libfreerdp/primitives/prim_andor.h
new file mode 100644
index 000000000..6a2e7ac46
--- /dev/null
+++ b/libfreerdp/primitives/prim_andor.h
@@ -0,0 +1,31 @@
+/* FreeRDP: A Remote Desktop Protocol Client
+ * Logical operations.
+ * vi:ts=4 sw=4
+ *
+ * (c) Copyright 2012 Hewlett-Packard Development Company, L.P.
+ * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing
+ * permissions and limitations under the License. Algorithms used by
+ * this code may be covered by patents by HP, Microsoft, or other parties.
+ *
+ */
+
+#ifdef __GNUC__
+# pragma once
+#endif
+
+#ifndef __PRIM_ANDOR_H_INCLUDED__
+#define __PRIM_ANDOR_H_INCLUDED__
+
+pstatus_t general_andC_32u(const UINT32 *pSrc, UINT32 val, UINT32 *pDst, INT32 len);
+pstatus_t general_orC_32u(const UINT32 *pSrc, UINT32 val, UINT32 *pDst, INT32 len);
+
+void primitives_init_andor_opt(const primitives_hints_t *hints, primitives_t *prims);
+
+#endif /* !__PRIM_ANDOR_H_INCLUDED__ */
+
diff --git a/libfreerdp/primitives/prim_andor_opt.c b/libfreerdp/primitives/prim_andor_opt.c
new file mode 100644
index 000000000..1a7ebd2a0
--- /dev/null
+++ b/libfreerdp/primitives/prim_andor_opt.c
@@ -0,0 +1,61 @@
+/* FreeRDP: A Remote Desktop Protocol Client
+ * Optimized Logical operations.
+ * vi:ts=4 sw=4:
+ *
+ * (c) Copyright 2012 Hewlett-Packard Development Company, L.P.
+ * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing
+ * permissions and limitations under the License.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include
+#include
+
+#ifdef WITH_SSE2
+#include
+#include
+#endif /* WITH_SSE2 */
+
+#ifdef WITH_IPP
+#include
+#endif /* WITH_IPP */
+
+#include "prim_internal.h"
+#include "prim_templates.h"
+#include "prim_andor.h"
+
+#ifdef WITH_SSE2
+# if !defined(WITH_IPP) || defined(ALL_PRIMITIVES_VERSIONS)
+/* ------------------------------------------------------------------------- */
+SSE3_SCD_PRE_ROUTINE(sse3_andC_32u, UINT32, general_andC_32u,
+ _mm_and_si128, *dptr++ = *sptr++ & val)
+SSE3_SCD_PRE_ROUTINE(sse3_orC_32u, UINT32, general_orC_32u,
+ _mm_or_si128, *dptr++ = *sptr++ | val)
+# endif /* !defined(WITH_IPP) || defined(ALL_PRIMITIVES_VERSIONS) */
+#endif
+
+/* ------------------------------------------------------------------------- */
+void primitives_init_andor_opt(const primitives_hints_t *hints, primitives_t *prims)
+{
+#if defined(WITH_IPP)
+ prims->andC_32u = (__andC_32u_t) ippsAndC_32u;
+ prims->orC_32u = (__orC_32u_t) ippsOrC_32u;
+#elif defined(WITH_SSE2)
+ if ((hints->x86_flags & PRIM_X86_SSE2_AVAILABLE)
+ && (hints->x86_flags & PRIM_X86_SSE3_AVAILABLE))
+ {
+ prims->andC_32u = sse3_andC_32u;
+ prims->orC_32u = sse3_orC_32u;
+ }
+#endif
+}
+
diff --git a/libfreerdp/primitives/prim_colors.c b/libfreerdp/primitives/prim_colors.c
index e6e7a18bf..179e569b7 100644
--- a/libfreerdp/primitives/prim_colors.c
+++ b/libfreerdp/primitives/prim_colors.c
@@ -21,16 +21,11 @@
#include "config.h"
#endif
-#include
#include
#include
-#ifdef WITH_SSE2
-#include
-#elif defined(WITH_NEON)
-#include
-#endif /* WITH_SSE2 else WITH_NEON */
+
#include "prim_internal.h"
-#include "prim_templates.h"
+#include "prim_colors.h"
#ifndef MINMAX
#define MINMAX(_v_, _l_, _h_) \
@@ -38,7 +33,7 @@
#endif /* !MINMAX */
/* ------------------------------------------------------------------------- */
-PRIM_STATIC pstatus_t general_yCbCrToRGB_16s16s_P3P3(
+pstatus_t general_yCbCrToRGB_16s16s_P3P3(
const INT16 *pSrc[3], INT32 srcStep,
INT16 *pDst[3], INT32 dstStep,
const prim_size_t *roi) /* region of interest */
@@ -119,7 +114,7 @@ PRIM_STATIC pstatus_t general_yCbCrToRGB_16s16s_P3P3(
}
/* ------------------------------------------------------------------------- */
-PRIM_STATIC pstatus_t general_RGBToYCbCr_16s16s_P3P3(
+pstatus_t general_RGBToYCbCr_16s16s_P3P3(
const INT16 *pSrc[3], INT32 srcStep,
INT16 *pDst[3], INT32 dstStep,
const prim_size_t *roi) /* region of interest */
@@ -187,7 +182,7 @@ PRIM_STATIC pstatus_t general_RGBToYCbCr_16s16s_P3P3(
}
/* ------------------------------------------------------------------------- */
-PRIM_STATIC pstatus_t general_RGBToRGB_16s8u_P3AC4R(
+pstatus_t general_RGBToRGB_16s8u_P3AC4R(
const INT16 *pSrc[3], /* 16-bit R,G, and B arrays */
int srcStep, /* bytes between rows in source data */
BYTE *pDst, /* 32-bit interleaved ARGB (ABGR?) data */
@@ -219,500 +214,6 @@ PRIM_STATIC pstatus_t general_RGBToRGB_16s8u_P3AC4R(
return PRIMITIVES_SUCCESS;
}
-
-#ifdef WITH_SSE2
-
-#ifdef __GNUC__
-# define GNU_INLINE \
- __attribute__((__gnu_inline__, __always_inline__, __artificial__))
-#else
-# define GNU_INLINE
-#endif
-
-#define CACHE_LINE_BYTES 64
-
-#define _mm_between_epi16(_val, _min, _max) \
- do { _val = _mm_min_epi16(_max, _mm_max_epi16(_val, _min)); } while (0)
-
-#ifdef DO_PREFETCH
-/*---------------------------------------------------------------------------*/
-static inline void GNU_INLINE _mm_prefetch_buffer(
- char * buffer,
- int num_bytes)
-{
- __m128i * buf = (__m128i*) buffer;
- unsigned int i;
- for (i = 0; i < (num_bytes / sizeof(__m128i));
- i+=(CACHE_LINE_BYTES / sizeof(__m128i)))
- {
- _mm_prefetch((char*)(&buf[i]), _MM_HINT_NTA);
- }
-}
-#endif /* DO_PREFETCH */
-
-/*---------------------------------------------------------------------------*/
-PRIM_STATIC pstatus_t sse2_yCbCrToRGB_16s16s_P3P3(
- const INT16 *pSrc[3],
- int srcStep,
- INT16 *pDst[3],
- int dstStep,
- const prim_size_t *roi) /* region of interest */
-{
- __m128i zero, max, r_cr, g_cb, g_cr, b_cb, c4096;
- __m128i *y_buf, *cb_buf, *cr_buf, *r_buf, *g_buf, *b_buf;
- int srcbump, dstbump, yp, imax;
-
- if (((ULONG_PTR) (pSrc[0]) & 0x0f)
- || ((ULONG_PTR) (pSrc[1]) & 0x0f)
- || ((ULONG_PTR) (pSrc[2]) & 0x0f)
- || ((ULONG_PTR) (pDst[0]) & 0x0f)
- || ((ULONG_PTR) (pDst[1]) & 0x0f)
- || ((ULONG_PTR) (pDst[2]) & 0x0f)
- || (roi->width & 0x07)
- || (srcStep & 127)
- || (dstStep & 127))
- {
- /* We can't maintain 16-byte alignment. */
- return general_yCbCrToRGB_16s16s_P3P3(pSrc, srcStep,
- pDst, dstStep, roi);
- }
-
- zero = _mm_setzero_si128();
- max = _mm_set1_epi16(255);
-
- y_buf = (__m128i*) (pSrc[0]);
- cb_buf = (__m128i*) (pSrc[1]);
- cr_buf = (__m128i*) (pSrc[2]);
- r_buf = (__m128i*) (pDst[0]);
- g_buf = (__m128i*) (pDst[1]);
- b_buf = (__m128i*) (pDst[2]);
-
- r_cr = _mm_set1_epi16(22986); /* 1.403 << 14 */
- g_cb = _mm_set1_epi16(-5636); /* -0.344 << 14 */
- g_cr = _mm_set1_epi16(-11698); /* -0.714 << 14 */
- b_cb = _mm_set1_epi16(28999); /* 1.770 << 14 */
- c4096 = _mm_set1_epi16(4096);
- srcbump = srcStep / sizeof(__m128i);
- dstbump = dstStep / sizeof(__m128i);
-
-#ifdef DO_PREFETCH
- /* Prefetch Y's, Cb's, and Cr's. */
- for (yp=0; ypheight; yp++)
- {
- int i;
- for (i=0; iwidth * sizeof(INT16) / sizeof(__m128i);
- i += (CACHE_LINE_BYTES / sizeof(__m128i)))
- {
- _mm_prefetch((char*)(&y_buf[i]), _MM_HINT_NTA);
- _mm_prefetch((char*)(&cb_buf[i]), _MM_HINT_NTA);
- _mm_prefetch((char*)(&cr_buf[i]), _MM_HINT_NTA);
- }
- y_buf += srcbump;
- cb_buf += srcbump;
- cr_buf += srcbump;
- }
- y_buf = (__m128i*) (pSrc[0]);
- cb_buf = (__m128i*) (pSrc[1]);
- cr_buf = (__m128i*) (pSrc[2]);
-#endif /* DO_PREFETCH */
-
- imax = roi->width * sizeof(INT16) / sizeof(__m128i);
- for (yp=0; ypheight; ++yp)
- {
- int i;
- for (i=0; i>5) + 128 + (cr*1.403)>>5 // our base formula
- * r = (y>>5) + 128 + (HIWORD(cr*(1.403<<14)<<2))>>5 // see above
- * r = (y+4096)>>5 + (HIWORD(cr*22986)<<2)>>5 // simplification
- * r = ((y+4096)>>2 + HIWORD(cr*22986)) >> 3
- */
-
- /* y = (y_r_buf[i] + 4096) >> 2 */
- __m128i y, cb, cr, r, g, b;
- y = _mm_load_si128(y_buf + i);
- y = _mm_add_epi16(y, c4096);
- y = _mm_srai_epi16(y, 2);
- /* cb = cb_g_buf[i]; */
- cb = _mm_load_si128(cb_buf + i);
- /* cr = cr_b_buf[i]; */
- cr = _mm_load_si128(cr_buf + i);
-
- /* (y + HIWORD(cr*22986)) >> 3 */
- r = _mm_add_epi16(y, _mm_mulhi_epi16(cr, r_cr));
- r = _mm_srai_epi16(r, 3);
-
- /* r_buf[i] = MINMAX(r, 0, 255); */
- _mm_between_epi16(r, zero, max);
- _mm_store_si128(r_buf + i, r);
-
- /* (y + HIWORD(cb*-5636) + HIWORD(cr*-11698)) >> 3 */
- g = _mm_add_epi16(y, _mm_mulhi_epi16(cb, g_cb));
- g = _mm_add_epi16(g, _mm_mulhi_epi16(cr, g_cr));
- g = _mm_srai_epi16(g, 3);
-
- /* g_buf[i] = MINMAX(g, 0, 255); */
- _mm_between_epi16(g, zero, max);
- _mm_store_si128(g_buf + i, g);
-
- /* (y + HIWORD(cb*28999)) >> 3 */
- b = _mm_add_epi16(y, _mm_mulhi_epi16(cb, b_cb));
- b = _mm_srai_epi16(b, 3);
- /* b_buf[i] = MINMAX(b, 0, 255); */
- _mm_between_epi16(b, zero, max);
- _mm_store_si128(b_buf + i, b);
- }
- y_buf += srcbump;
- cb_buf += srcbump;
- cr_buf += srcbump;
- r_buf += dstbump;
- g_buf += dstbump;
- b_buf += dstbump;
- }
-
- return PRIMITIVES_SUCCESS;
-}
-
-/*---------------------------------------------------------------------------*/
-/* The encodec YCbCr coeffectients are represented as 11.5 fixed-point
- * numbers. See the general code above.
- */
-PRIM_STATIC pstatus_t sse2_RGBToYCbCr_16s16s_P3P3(
- const INT16 *pSrc[3],
- int srcStep,
- INT16 *pDst[3],
- int dstStep,
- const prim_size_t *roi) /* region of interest */
-{
- __m128i min, max, y_r, y_g, y_b, cb_r, cb_g, cb_b, cr_r, cr_g, cr_b;
- __m128i *r_buf, *g_buf, *b_buf, *y_buf, *cb_buf, *cr_buf;
- int srcbump, dstbump, yp, imax;
-
- if (((ULONG_PTR) (pSrc[0]) & 0x0f)
- || ((ULONG_PTR) (pSrc[1]) & 0x0f)
- || ((ULONG_PTR) (pSrc[2]) & 0x0f)
- || ((ULONG_PTR) (pDst[0]) & 0x0f)
- || ((ULONG_PTR) (pDst[1]) & 0x0f)
- || ((ULONG_PTR) (pDst[2]) & 0x0f)
- || (roi->width & 0x07)
- || (srcStep & 127)
- || (dstStep & 127))
- {
- /* We can't maintain 16-byte alignment. */
- return general_RGBToYCbCr_16s16s_P3P3(pSrc, srcStep,
- pDst, dstStep, roi);
- }
-
- min = _mm_set1_epi16(-128 << 5);
- max = _mm_set1_epi16(127 << 5);
-
- r_buf = (__m128i*) (pSrc[0]);
- g_buf = (__m128i*) (pSrc[1]);
- b_buf = (__m128i*) (pSrc[2]);
- y_buf = (__m128i*) (pDst[0]);
- cb_buf = (__m128i*) (pDst[1]);
- cr_buf = (__m128i*) (pDst[2]);
-
- y_r = _mm_set1_epi16(9798); /* 0.299000 << 15 */
- y_g = _mm_set1_epi16(19235); /* 0.587000 << 15 */
- y_b = _mm_set1_epi16(3735); /* 0.114000 << 15 */
- cb_r = _mm_set1_epi16(-5535); /* -0.168935 << 15 */
- cb_g = _mm_set1_epi16(-10868); /* -0.331665 << 15 */
- cb_b = _mm_set1_epi16(16403); /* 0.500590 << 15 */
- cr_r = _mm_set1_epi16(16377); /* 0.499813 << 15 */
- cr_g = _mm_set1_epi16(-13714); /* -0.418531 << 15 */
- cr_b = _mm_set1_epi16(-2663); /* -0.081282 << 15 */
-
- srcbump = srcStep / sizeof(__m128i);
- dstbump = dstStep / sizeof(__m128i);
-
-#ifdef DO_PREFETCH
- /* Prefetch RGB's. */
- for (yp=0; ypheight; yp++)
- {
- int i;
- for (i=0; iwidth * sizeof(INT16) / sizeof(__m128i);
- i += (CACHE_LINE_BYTES / sizeof(__m128i)))
- {
- _mm_prefetch((char*)(&r_buf[i]), _MM_HINT_NTA);
- _mm_prefetch((char*)(&g_buf[i]), _MM_HINT_NTA);
- _mm_prefetch((char*)(&b_buf[i]), _MM_HINT_NTA);
- }
- r_buf += srcbump;
- g_buf += srcbump;
- b_buf += srcbump;
- }
- r_buf = (__m128i*) (pSrc[0]);
- g_buf = (__m128i*) (pSrc[1]);
- b_buf = (__m128i*) (pSrc[2]);
-#endif /* DO_PREFETCH */
-
- imax = roi->width * sizeof(INT16) / sizeof(__m128i);
- for (yp=0; ypheight; ++yp)
- {
- int i;
- for (i=0; iwidth & 0x0f)
- || (srcStep & 0x0f)
- || (dstStep & 0x0f))
- {
- return general_RGBToRGB_16s8u_P3AC4R(pSrc, srcStep, pDst, dstStep, roi);
- }
-
- out = (BYTE *) pDst;
- srcbump = (srcStep - (roi->width * sizeof(UINT16))) / sizeof(UINT16);
- dstbump = (dstStep - (roi->width * sizeof(UINT32)));
-
- for (y=0; yheight; ++y)
- {
- int width = roi->width;
- do {
- __m128i R0, R1, R2, R3, R4;
- /* The comments below pretend these are 8-byte registers
- * rather than 16-byte, for readability.
- */
- R0 = LOAD128(b); b += 8; /* R0 = 00B300B200B100B0 */
- R1 = LOAD128(b); b += 8; /* R1 = 00B700B600B500B4 */
- PACKUSWB(R0,R1); /* R0 = B7B6B5B4B3B2B1B0 */
- R1 = LOAD128(g); g += 8; /* R1 = 00G300G200G100G0 */
- R2 = LOAD128(g); g += 8; /* R2 = 00G700G600G500G4 */
- PACKUSWB(R1,R2); /* R1 = G7G6G5G4G3G2G1G0 */
- R2 = R1; /* R2 = G7G6G5G4G3G2G1G0 */
- PUNPCKLBW(R2,R0); /* R2 = G3B3G2B2G1B1G0B0 */
- PUNPCKHBW(R1,R0); /* R1 = G7B7G6B7G5B5G4B4 */
- R0 = LOAD128(r); r += 8; /* R0 = 00R300R200R100R0 */
- R3 = LOAD128(r); r += 8; /* R3 = 00R700R600R500R4 */
- PACKUSWB(R0,R3); /* R0 = R7R6R5R4R3R2R1R0 */
- R3 = XMM_ALL_ONES; /* R3 = FFFFFFFFFFFFFFFF */
- R4 = R3; /* R4 = FFFFFFFFFFFFFFFF */
- PUNPCKLBW(R4,R0); /* R4 = FFR3FFR2FFR1FFR0 */
- PUNPCKHBW(R3,R0); /* R3 = FFR7FFR6FFR5FFR4 */
- R0 = R4; /* R0 = R4 */
- PUNPCKLWD(R0,R2); /* R0 = FFR1G1B1FFR0G0B0 */
- PUNPCKHWD(R4,R2); /* R4 = FFR3G3B3FFR2G2B2 */
- R2 = R3; /* R2 = R3 */
- PUNPCKLWD(R2,R1); /* R2 = FFR5G5B5FFR4G4B4 */
- PUNPCKHWD(R3,R1); /* R3 = FFR7G7B7FFR6G6B6 */
- STORE128(out, R0); out += 16; /* FFR1G1B1FFR0G0B0 */
- STORE128(out, R4); out += 16; /* FFR3G3B3FFR2G2B2 */
- STORE128(out, R2); out += 16; /* FFR5G5B5FFR4G4B4 */
- STORE128(out, R3); out += 16; /* FFR7G7B7FFR6G6B6 */
- } while (width -= 16);
- /* Jump to next row. */
- r += srcbump;
- g += srcbump;
- b += srcbump;
- out += dstbump;
- }
- return PRIMITIVES_SUCCESS;
-}
-#endif /* WITH_SSE2 */
-
-/*---------------------------------------------------------------------------*/
-#ifdef WITH_NEON
-PRIM_STATIC pstatus_t neon_yCbCrToRGB_16s16s_P3P3(
- const INT16 *pSrc[3],
- int srcStep,
- INT16 *pDst[3],
- int dstStep,
- const prim_size_t *roi) /* region of interest */
-{
- /* TODO: If necessary, check alignments and call the general version. */
-
- int16x8_t zero = vdupq_n_s16(0);
- int16x8_t max = vdupq_n_s16(255);
- int16x8_t y_add = vdupq_n_s16(128);
-
- int16x8_t* y_buf = (int16x8_t*) pSrc[0];
- int16x8_t* cb_buf = (int16x8_t*) pSrc[1];
- int16x8_t* cr_buf = (int16x8_t*) pSrc[2];
- int16x8_t* r_buf = (int16x8_t*) pDst[0];
- int16x8_t* g_buf = (int16x8_t*) pDst[1];
- int16x8_t* b_buf = (int16x8_t*) pDst[2];
-
- int srcbump = srcStep / sizeof(int16x8_t);
- int dstbump = dstStep / sizeof(int16x8_t);
- int yp;
-
- int imax = roi->width * sizeof(INT16) / sizeof(int16x8_t);
- for (yp=0; ypheight; ++yp)
- {
- int i;
- for (i=0; i> 2) + (cr >> 3) + (cr >> 5)),
- * 0, 255);
- */
- int16x8_t r = vaddq_s16(y, cr);
- r = vaddq_s16(r, vshrq_n_s16(cr, 2));
- r = vaddq_s16(r, vshrq_n_s16(cr, 3));
- r = vaddq_s16(r, vshrq_n_s16(cr, 5));
- r = vminq_s16(vmaxq_s16(r, zero), max);
- vst1q_s16((INT16*) (r_buf+i), r);
-
- /* cb = cb_g_buf[i]; */
- int16x8_t cb = vld1q_s16((INT16*) (cb_buf+i));
-
- /* g = between(y - (cb >> 2) - (cb >> 4) - (cb >> 5) - (cr >> 1)
- * - (cr >> 3) - (cr >> 4) - (cr >> 5), 0, 255);
- */
- int16x8_t g = vsubq_s16(y, vshrq_n_s16(cb, 2));
- g = vsubq_s16(g, vshrq_n_s16(cb, 4));
- g = vsubq_s16(g, vshrq_n_s16(cb, 5));
- g = vsubq_s16(g, vshrq_n_s16(cr, 1));
- g = vsubq_s16(g, vshrq_n_s16(cr, 3));
- g = vsubq_s16(g, vshrq_n_s16(cr, 4));
- g = vsubq_s16(g, vshrq_n_s16(cr, 5));
- g = vminq_s16(vmaxq_s16(g, zero), max);
- vst1q_s16((INT16*) (g_buf+i), g);
-
- /* b = between((y + cb + (cb >> 1) + (cb >> 2) + (cb >> 6)),
- * 0, 255);
- */
- int16x8_t b = vaddq_s16(y, cb);
- b = vaddq_s16(b, vshrq_n_s16(cb, 1));
- b = vaddq_s16(b, vshrq_n_s16(cb, 2));
- b = vaddq_s16(b, vshrq_n_s16(cb, 6));
- b = vminq_s16(vmaxq_s16(b, zero), max);
- vst1q_s16((INT16*) (b_buf+i), b);
- }
- y_buf += srcbump;
- cb_buf += srcbump;
- cr_buf += srcbump;
- r_buf += dstbump;
- g_buf += dstbump;
- b_buf += dstbump;
- }
- return PRIMITIVES_SUCCESS;
-}
-#endif /* WITH_NEON */
-
-
-/* I don't see a direct IPP version of this, since the input is INT16
- * YCbCr. It may be possible via Deinterleave and then YCbCrToRGB_.
- * But that would likely be slower.
- */
-
/* ------------------------------------------------------------------------- */
void primitives_init_colors(const primitives_hints_t* hints, primitives_t* prims)
{
@@ -720,19 +221,7 @@ void primitives_init_colors(const primitives_hints_t* hints, primitives_t* prims
prims->yCbCrToRGB_16s16s_P3P3 = general_yCbCrToRGB_16s16s_P3P3;
prims->RGBToYCbCr_16s16s_P3P3 = general_RGBToYCbCr_16s16s_P3P3;
-#if defined(WITH_SSE2)
- if (hints->x86_flags & PRIM_X86_SSE2_AVAILABLE)
- {
- prims->RGBToRGB_16s8u_P3AC4R = sse2_RGBToRGB_16s8u_P3AC4R;
- prims->yCbCrToRGB_16s16s_P3P3 = sse2_yCbCrToRGB_16s16s_P3P3;
- prims->RGBToYCbCr_16s16s_P3P3 = sse2_RGBToYCbCr_16s16s_P3P3;
- }
-#elif defined(WITH_NEON)
- if (hints->arm_flags & PRIM_ARM_NEON_AVAILABLE)
- {
- prims->yCbCrToRGB_16s16s_P3P3 = neon_yCbCrToRGB_16s16s_P3P3;
- }
-#endif /* WITH_SSE2 */
+ primitives_init_colors_opt(hints, prims);
}
/* ------------------------------------------------------------------------- */
@@ -740,3 +229,4 @@ void primitives_deinit_colors(primitives_t* prims)
{
/* Nothing to do. */
}
+
diff --git a/libfreerdp/primitives/prim_colors.h b/libfreerdp/primitives/prim_colors.h
new file mode 100644
index 000000000..70f478547
--- /dev/null
+++ b/libfreerdp/primitives/prim_colors.h
@@ -0,0 +1,32 @@
+/* FreeRDP: A Remote Desktop Protocol Client
+ * Color conversion operations.
+ * vi:ts=4 sw=4
+ *
+ * (c) Copyright 2012 Hewlett-Packard Development Company, L.P.
+ * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing
+ * permissions and limitations under the License. Algorithms used by
+ * this code may be covered by patents by HP, Microsoft, or other parties.
+ *
+ */
+
+#ifdef __GNUC__
+# pragma once
+#endif
+
+#ifndef __PRIM_COLORS_H_INCLUDED__
+#define __PRIM_COLORS_H_INCLUDED__
+
+pstatus_t general_yCbCrToRGB_16s16s_P3P3(const INT16 *pSrc[3], INT32 srcStep, INT16 *pDst[3], INT32 dstStep, const prim_size_t *roi);
+pstatus_t general_RGBToYCbCr_16s16s_P3P3(const INT16 *pSrc[3], INT32 srcStep, INT16 *pDst[3], INT32 dstStep, const prim_size_t *roi);
+pstatus_t general_RGBToRGB_16s8u_P3AC4R(const INT16 *pSrc[3], int srcStep, BYTE *pDst, int dstStep, const prim_size_t *roi);
+
+void primitives_init_colors_opt(const primitives_hints_t* hints, primitives_t* prims);
+
+#endif /* !__PRIM_COLORS_H_INCLUDED__ */
+
diff --git a/libfreerdp/primitives/prim_colors_opt.c b/libfreerdp/primitives/prim_colors_opt.c
new file mode 100644
index 000000000..cfc87414e
--- /dev/null
+++ b/libfreerdp/primitives/prim_colors_opt.c
@@ -0,0 +1,561 @@
+/* FreeRDP: A Remote Desktop Protocol Client
+ * Optimized Color conversion operations.
+ * vi:ts=4 sw=4:
+ *
+ * Copyright 2011 Stephen Erisman
+ * Copyright 2011 Norbert Federa
+ * Copyright 2011 Martin Fleisz
+ * (c) Copyright 2012 Hewlett-Packard Development Company, L.P.
+ *
+ * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing
+ * permissions and limitations under the License.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include
+#include
+
+#ifdef WITH_SSE2
+#include
+#elif defined(WITH_NEON)
+#include
+#endif /* WITH_SSE2 else WITH_NEON */
+
+#include "prim_internal.h"
+#include "prim_templates.h"
+#include "prim_colors.h"
+
+#ifdef WITH_SSE2
+
+#ifdef __GNUC__
+# define GNU_INLINE \
+ __attribute__((__gnu_inline__, __always_inline__, __artificial__))
+#else
+# define GNU_INLINE
+#endif
+
+#define CACHE_LINE_BYTES 64
+
+#define _mm_between_epi16(_val, _min, _max) \
+ do { _val = _mm_min_epi16(_max, _mm_max_epi16(_val, _min)); } while (0)
+
+#ifdef DO_PREFETCH
+/*---------------------------------------------------------------------------*/
+static inline void GNU_INLINE _mm_prefetch_buffer(
+ char * buffer,
+ int num_bytes)
+{
+ __m128i * buf = (__m128i*) buffer;
+ unsigned int i;
+ for (i = 0; i < (num_bytes / sizeof(__m128i));
+ i+=(CACHE_LINE_BYTES / sizeof(__m128i)))
+ {
+ _mm_prefetch((char*)(&buf[i]), _MM_HINT_NTA);
+ }
+}
+#endif /* DO_PREFETCH */
+
+/*---------------------------------------------------------------------------*/
+pstatus_t sse2_yCbCrToRGB_16s16s_P3P3(
+ const INT16 *pSrc[3],
+ int srcStep,
+ INT16 *pDst[3],
+ int dstStep,
+ const prim_size_t *roi) /* region of interest */
+{
+ __m128i zero, max, r_cr, g_cb, g_cr, b_cb, c4096;
+ __m128i *y_buf, *cb_buf, *cr_buf, *r_buf, *g_buf, *b_buf;
+ int srcbump, dstbump, yp, imax;
+
+ if (((ULONG_PTR) (pSrc[0]) & 0x0f)
+ || ((ULONG_PTR) (pSrc[1]) & 0x0f)
+ || ((ULONG_PTR) (pSrc[2]) & 0x0f)
+ || ((ULONG_PTR) (pDst[0]) & 0x0f)
+ || ((ULONG_PTR) (pDst[1]) & 0x0f)
+ || ((ULONG_PTR) (pDst[2]) & 0x0f)
+ || (roi->width & 0x07)
+ || (srcStep & 127)
+ || (dstStep & 127))
+ {
+ /* We can't maintain 16-byte alignment. */
+ return general_yCbCrToRGB_16s16s_P3P3(pSrc, srcStep,
+ pDst, dstStep, roi);
+ }
+
+ zero = _mm_setzero_si128();
+ max = _mm_set1_epi16(255);
+
+ y_buf = (__m128i*) (pSrc[0]);
+ cb_buf = (__m128i*) (pSrc[1]);
+ cr_buf = (__m128i*) (pSrc[2]);
+ r_buf = (__m128i*) (pDst[0]);
+ g_buf = (__m128i*) (pDst[1]);
+ b_buf = (__m128i*) (pDst[2]);
+
+ r_cr = _mm_set1_epi16(22986); /* 1.403 << 14 */
+ g_cb = _mm_set1_epi16(-5636); /* -0.344 << 14 */
+ g_cr = _mm_set1_epi16(-11698); /* -0.714 << 14 */
+ b_cb = _mm_set1_epi16(28999); /* 1.770 << 14 */
+ c4096 = _mm_set1_epi16(4096);
+ srcbump = srcStep / sizeof(__m128i);
+ dstbump = dstStep / sizeof(__m128i);
+
+#ifdef DO_PREFETCH
+ /* Prefetch Y's, Cb's, and Cr's. */
+ for (yp=0; ypheight; yp++)
+ {
+ int i;
+ for (i=0; iwidth * sizeof(INT16) / sizeof(__m128i);
+ i += (CACHE_LINE_BYTES / sizeof(__m128i)))
+ {
+ _mm_prefetch((char*)(&y_buf[i]), _MM_HINT_NTA);
+ _mm_prefetch((char*)(&cb_buf[i]), _MM_HINT_NTA);
+ _mm_prefetch((char*)(&cr_buf[i]), _MM_HINT_NTA);
+ }
+ y_buf += srcbump;
+ cb_buf += srcbump;
+ cr_buf += srcbump;
+ }
+ y_buf = (__m128i*) (pSrc[0]);
+ cb_buf = (__m128i*) (pSrc[1]);
+ cr_buf = (__m128i*) (pSrc[2]);
+#endif /* DO_PREFETCH */
+
+ imax = roi->width * sizeof(INT16) / sizeof(__m128i);
+ for (yp=0; ypheight; ++yp)
+ {
+ int i;
+ for (i=0; i>5) + 128 + (cr*1.403)>>5 // our base formula
+ * r = (y>>5) + 128 + (HIWORD(cr*(1.403<<14)<<2))>>5 // see above
+ * r = (y+4096)>>5 + (HIWORD(cr*22986)<<2)>>5 // simplification
+ * r = ((y+4096)>>2 + HIWORD(cr*22986)) >> 3
+ */
+
+ /* y = (y_r_buf[i] + 4096) >> 2 */
+ __m128i y, cb, cr, r, g, b;
+ y = _mm_load_si128(y_buf + i);
+ y = _mm_add_epi16(y, c4096);
+ y = _mm_srai_epi16(y, 2);
+ /* cb = cb_g_buf[i]; */
+ cb = _mm_load_si128(cb_buf + i);
+ /* cr = cr_b_buf[i]; */
+ cr = _mm_load_si128(cr_buf + i);
+
+ /* (y + HIWORD(cr*22986)) >> 3 */
+ r = _mm_add_epi16(y, _mm_mulhi_epi16(cr, r_cr));
+ r = _mm_srai_epi16(r, 3);
+
+ /* r_buf[i] = MINMAX(r, 0, 255); */
+ _mm_between_epi16(r, zero, max);
+ _mm_store_si128(r_buf + i, r);
+
+ /* (y + HIWORD(cb*-5636) + HIWORD(cr*-11698)) >> 3 */
+ g = _mm_add_epi16(y, _mm_mulhi_epi16(cb, g_cb));
+ g = _mm_add_epi16(g, _mm_mulhi_epi16(cr, g_cr));
+ g = _mm_srai_epi16(g, 3);
+
+ /* g_buf[i] = MINMAX(g, 0, 255); */
+ _mm_between_epi16(g, zero, max);
+ _mm_store_si128(g_buf + i, g);
+
+ /* (y + HIWORD(cb*28999)) >> 3 */
+ b = _mm_add_epi16(y, _mm_mulhi_epi16(cb, b_cb));
+ b = _mm_srai_epi16(b, 3);
+ /* b_buf[i] = MINMAX(b, 0, 255); */
+ _mm_between_epi16(b, zero, max);
+ _mm_store_si128(b_buf + i, b);
+ }
+ y_buf += srcbump;
+ cb_buf += srcbump;
+ cr_buf += srcbump;
+ r_buf += dstbump;
+ g_buf += dstbump;
+ b_buf += dstbump;
+ }
+
+ return PRIMITIVES_SUCCESS;
+}
+
+/*---------------------------------------------------------------------------*/
+/* The encodec YCbCr coeffectients are represented as 11.5 fixed-point
+ * numbers. See the general code above.
+ */
+pstatus_t sse2_RGBToYCbCr_16s16s_P3P3(
+ const INT16 *pSrc[3],
+ int srcStep,
+ INT16 *pDst[3],
+ int dstStep,
+ const prim_size_t *roi) /* region of interest */
+{
+ __m128i min, max, y_r, y_g, y_b, cb_r, cb_g, cb_b, cr_r, cr_g, cr_b;
+ __m128i *r_buf, *g_buf, *b_buf, *y_buf, *cb_buf, *cr_buf;
+ int srcbump, dstbump, yp, imax;
+
+ if (((ULONG_PTR) (pSrc[0]) & 0x0f)
+ || ((ULONG_PTR) (pSrc[1]) & 0x0f)
+ || ((ULONG_PTR) (pSrc[2]) & 0x0f)
+ || ((ULONG_PTR) (pDst[0]) & 0x0f)
+ || ((ULONG_PTR) (pDst[1]) & 0x0f)
+ || ((ULONG_PTR) (pDst[2]) & 0x0f)
+ || (roi->width & 0x07)
+ || (srcStep & 127)
+ || (dstStep & 127))
+ {
+ /* We can't maintain 16-byte alignment. */
+ return general_RGBToYCbCr_16s16s_P3P3(pSrc, srcStep,
+ pDst, dstStep, roi);
+ }
+
+ min = _mm_set1_epi16(-128 << 5);
+ max = _mm_set1_epi16(127 << 5);
+
+ r_buf = (__m128i*) (pSrc[0]);
+ g_buf = (__m128i*) (pSrc[1]);
+ b_buf = (__m128i*) (pSrc[2]);
+ y_buf = (__m128i*) (pDst[0]);
+ cb_buf = (__m128i*) (pDst[1]);
+ cr_buf = (__m128i*) (pDst[2]);
+
+ y_r = _mm_set1_epi16(9798); /* 0.299000 << 15 */
+ y_g = _mm_set1_epi16(19235); /* 0.587000 << 15 */
+ y_b = _mm_set1_epi16(3735); /* 0.114000 << 15 */
+ cb_r = _mm_set1_epi16(-5535); /* -0.168935 << 15 */
+ cb_g = _mm_set1_epi16(-10868); /* -0.331665 << 15 */
+ cb_b = _mm_set1_epi16(16403); /* 0.500590 << 15 */
+ cr_r = _mm_set1_epi16(16377); /* 0.499813 << 15 */
+ cr_g = _mm_set1_epi16(-13714); /* -0.418531 << 15 */
+ cr_b = _mm_set1_epi16(-2663); /* -0.081282 << 15 */
+
+ srcbump = srcStep / sizeof(__m128i);
+ dstbump = dstStep / sizeof(__m128i);
+
+#ifdef DO_PREFETCH
+ /* Prefetch RGB's. */
+ for (yp=0; ypheight; yp++)
+ {
+ int i;
+ for (i=0; iwidth * sizeof(INT16) / sizeof(__m128i);
+ i += (CACHE_LINE_BYTES / sizeof(__m128i)))
+ {
+ _mm_prefetch((char*)(&r_buf[i]), _MM_HINT_NTA);
+ _mm_prefetch((char*)(&g_buf[i]), _MM_HINT_NTA);
+ _mm_prefetch((char*)(&b_buf[i]), _MM_HINT_NTA);
+ }
+ r_buf += srcbump;
+ g_buf += srcbump;
+ b_buf += srcbump;
+ }
+ r_buf = (__m128i*) (pSrc[0]);
+ g_buf = (__m128i*) (pSrc[1]);
+ b_buf = (__m128i*) (pSrc[2]);
+#endif /* DO_PREFETCH */
+
+ imax = roi->width * sizeof(INT16) / sizeof(__m128i);
+ for (yp=0; ypheight; ++yp)
+ {
+ int i;
+ for (i=0; iwidth & 0x0f)
+ || (srcStep & 0x0f)
+ || (dstStep & 0x0f))
+ {
+ return general_RGBToRGB_16s8u_P3AC4R(pSrc, srcStep, pDst, dstStep, roi);
+ }
+
+ out = (BYTE *) pDst;
+ srcbump = (srcStep - (roi->width * sizeof(UINT16))) / sizeof(UINT16);
+ dstbump = (dstStep - (roi->width * sizeof(UINT32)));
+
+ for (y=0; yheight; ++y)
+ {
+ int width = roi->width;
+ do {
+ __m128i R0, R1, R2, R3, R4;
+ /* The comments below pretend these are 8-byte registers
+ * rather than 16-byte, for readability.
+ */
+ R0 = LOAD128(b); b += 8; /* R0 = 00B300B200B100B0 */
+ R1 = LOAD128(b); b += 8; /* R1 = 00B700B600B500B4 */
+ PACKUSWB(R0,R1); /* R0 = B7B6B5B4B3B2B1B0 */
+ R1 = LOAD128(g); g += 8; /* R1 = 00G300G200G100G0 */
+ R2 = LOAD128(g); g += 8; /* R2 = 00G700G600G500G4 */
+ PACKUSWB(R1,R2); /* R1 = G7G6G5G4G3G2G1G0 */
+ R2 = R1; /* R2 = G7G6G5G4G3G2G1G0 */
+ PUNPCKLBW(R2,R0); /* R2 = G3B3G2B2G1B1G0B0 */
+ PUNPCKHBW(R1,R0); /* R1 = G7B7G6B7G5B5G4B4 */
+ R0 = LOAD128(r); r += 8; /* R0 = 00R300R200R100R0 */
+ R3 = LOAD128(r); r += 8; /* R3 = 00R700R600R500R4 */
+ PACKUSWB(R0,R3); /* R0 = R7R6R5R4R3R2R1R0 */
+ R3 = XMM_ALL_ONES; /* R3 = FFFFFFFFFFFFFFFF */
+ R4 = R3; /* R4 = FFFFFFFFFFFFFFFF */
+ PUNPCKLBW(R4,R0); /* R4 = FFR3FFR2FFR1FFR0 */
+ PUNPCKHBW(R3,R0); /* R3 = FFR7FFR6FFR5FFR4 */
+ R0 = R4; /* R0 = R4 */
+ PUNPCKLWD(R0,R2); /* R0 = FFR1G1B1FFR0G0B0 */
+ PUNPCKHWD(R4,R2); /* R4 = FFR3G3B3FFR2G2B2 */
+ R2 = R3; /* R2 = R3 */
+ PUNPCKLWD(R2,R1); /* R2 = FFR5G5B5FFR4G4B4 */
+ PUNPCKHWD(R3,R1); /* R3 = FFR7G7B7FFR6G6B6 */
+ STORE128(out, R0); out += 16; /* FFR1G1B1FFR0G0B0 */
+ STORE128(out, R4); out += 16; /* FFR3G3B3FFR2G2B2 */
+ STORE128(out, R2); out += 16; /* FFR5G5B5FFR4G4B4 */
+ STORE128(out, R3); out += 16; /* FFR7G7B7FFR6G6B6 */
+ } while (width -= 16);
+ /* Jump to next row. */
+ r += srcbump;
+ g += srcbump;
+ b += srcbump;
+ out += dstbump;
+ }
+ return PRIMITIVES_SUCCESS;
+}
+#endif /* WITH_SSE2 */
+
+/*---------------------------------------------------------------------------*/
+#ifdef WITH_NEON
+pstatus_t neon_yCbCrToRGB_16s16s_P3P3(
+ const INT16 *pSrc[3],
+ int srcStep,
+ INT16 *pDst[3],
+ int dstStep,
+ const prim_size_t *roi) /* region of interest */
+{
+ /* TODO: If necessary, check alignments and call the general version. */
+
+ int16x8_t zero = vdupq_n_s16(0);
+ int16x8_t max = vdupq_n_s16(255);
+
+ int16x8_t r_cr = vdupq_n_s16(22986); // 1.403 << 14
+ int16x8_t g_cb = vdupq_n_s16(-5636); // -0.344 << 14
+ int16x8_t g_cr = vdupq_n_s16(-11698); // -0.714 << 14
+ int16x8_t b_cb = vdupq_n_s16(28999); // 1.770 << 14
+ int16x8_t c4096 = vdupq_n_s16(4096);
+
+ int16x8_t* y_buf = (int16x8_t*) pSrc[0];
+ int16x8_t* cb_buf = (int16x8_t*) pSrc[1];
+ int16x8_t* cr_buf = (int16x8_t*) pSrc[2];
+ int16x8_t* r_buf = (int16x8_t*) pDst[0];
+ int16x8_t* g_buf = (int16x8_t*) pDst[1];
+ int16x8_t* b_buf = (int16x8_t*) pDst[2];
+
+ int srcbump = srcStep / sizeof(int16x8_t);
+ int dstbump = dstStep / sizeof(int16x8_t);
+ int yp;
+
+ int imax = roi->width * sizeof(INT16) / sizeof(int16x8_t);
+ for (yp=0; ypheight; ++yp)
+ {
+ int i;
+ for (i=0; i>5) + 128 + (cr*1.403)>>5 // our base formula
+ r = (y>>5) + 128 + (HIWORD(cr*(1.403<<14)<<2))>>5 // see above
+ r = (y+4096)>>5 + (HIWORD(cr*22986)<<2)>>5 // simplification
+ r = ((y+4096)>>2 + HIWORD(cr*22986)) >> 3
+ */
+
+ /* y = (y_buf[i] + 4096) >> 2 */
+ int16x8_t y = vld1q_s16((INT16*) &y_buf[i]);
+ y = vaddq_s16(y, c4096);
+ y = vshrq_n_s16(y, 2);
+ /* cb = cb_buf[i]; */
+ int16x8_t cb = vld1q_s16((INT16*)&cb_buf[i]);
+ /* cr = cr_buf[i]; */
+ int16x8_t cr = vld1q_s16((INT16*) &cr_buf[i]);
+
+ /* (y + HIWORD(cr*22986)) >> 3 */
+ int16x8_t r = vaddq_s16(y, vshrq_n_s16(vqdmulhq_s16(cr, r_cr), 1));
+ r = vshrq_n_s16(r, 3);
+ /* r_buf[i] = MINMAX(r, 0, 255); */
+ r = vminq_s16(vmaxq_s16(r, zero), max);
+ vst1q_s16((INT16*)&r_buf[i], r);
+
+ /* (y + HIWORD(cb*-5636) + HIWORD(cr*-11698)) >> 3 */
+ int16x8_t g = vaddq_s16(y, vshrq_n_s16(vqdmulhq_s16(cb, g_cb), 1));
+ g = vaddq_s16(g, vshrq_n_s16(vqdmulhq_s16(cr, g_cr), 1));
+ g = vshrq_n_s16(g, 3);
+ /* g_buf[i] = MINMAX(g, 0, 255); */
+ g = vminq_s16(vmaxq_s16(g, zero), max);
+ vst1q_s16((INT16*)&g_buf[i], g);
+
+ /* (y + HIWORD(cb*28999)) >> 3 */
+ int16x8_t b = vaddq_s16(y, vshrq_n_s16(vqdmulhq_s16(cb, b_cb), 1));
+ b = vshrq_n_s16(b, 3);
+ /* b_buf[i] = MINMAX(b, 0, 255); */
+ b = vminq_s16(vmaxq_s16(b, zero), max);
+ vst1q_s16((INT16*)&b_buf[i], b);
+ }
+
+ y_buf += srcbump;
+ cb_buf += srcbump;
+ cr_buf += srcbump;
+ r_buf += dstbump;
+ g_buf += dstbump;
+ b_buf += dstbump;
+ }
+ return PRIMITIVES_SUCCESS;
+}
+#endif /* WITH_NEON */
+
+
+/* I don't see a direct IPP version of this, since the input is INT16
+ * YCbCr. It may be possible via Deinterleave and then YCbCrToRGB_.
+ * But that would likely be slower.
+ */
+
+/* ------------------------------------------------------------------------- */
+void primitives_init_colors_opt(const primitives_hints_t* hints, primitives_t* prims)
+{
+#if defined(WITH_SSE2)
+ if (hints->x86_flags & PRIM_X86_SSE2_AVAILABLE)
+ {
+ prims->RGBToRGB_16s8u_P3AC4R = sse2_RGBToRGB_16s8u_P3AC4R;
+ prims->yCbCrToRGB_16s16s_P3P3 = sse2_yCbCrToRGB_16s16s_P3P3;
+ prims->RGBToYCbCr_16s16s_P3P3 = sse2_RGBToYCbCr_16s16s_P3P3;
+ }
+#elif defined(WITH_NEON)
+ if (hints->arm_flags & PRIM_ARM_NEON_AVAILABLE)
+ {
+ prims->yCbCrToRGB_16s16s_P3P3 = neon_yCbCrToRGB_16s16s_P3P3;
+ }
+#endif /* WITH_SSE2 */
+}
+
diff --git a/libfreerdp/primitives/prim_copy.c b/libfreerdp/primitives/prim_copy.c
index 71303b1a6..4198f2d8f 100644
--- a/libfreerdp/primitives/prim_copy.c
+++ b/libfreerdp/primitives/prim_copy.c
@@ -72,7 +72,7 @@ static BOOL memory_regions_overlap_2d(
}
/* ------------------------------------------------------------------------- */
-PRIM_STATIC pstatus_t general_copy_8u(
+pstatus_t general_copy_8u(
const BYTE *pSrc,
BYTE *pDst,
INT32 len)
@@ -94,7 +94,7 @@ PRIM_STATIC pstatus_t general_copy_8u(
* The addresses are assumed to have been already offset to the upper-left
* corners of the source and destination region of interest.
*/
-PRIM_STATIC pstatus_t general_copy_8u_AC4r(
+pstatus_t general_copy_8u_AC4r(
const BYTE *pSrc, INT32 srcStep,
BYTE *pDst, INT32 dstStep,
INT32 width, INT32 height)
diff --git a/libfreerdp/primitives/prim_internal.h b/libfreerdp/primitives/prim_internal.h
index 21df8cae0..001ab8562 100644
--- a/libfreerdp/primitives/prim_internal.h
+++ b/libfreerdp/primitives/prim_internal.h
@@ -27,15 +27,6 @@
#include
-/* Normally the internal entrypoints should be static, but a benchmark
- * program may want to access them directly and turn this off.
- */
-#ifndef PRIM_STATIC
-# define PRIM_STATIC static
-#else
-# undef PRIM_STATIC
-# define PRIM_STATIC
-#endif /* !PRIM_STATIC */
/* Use lddqu for unaligned; load for 16-byte aligned. */
#define LOAD_SI128(_ptr_) \
diff --git a/libfreerdp/primitives/prim_set.c b/libfreerdp/primitives/prim_set.c
index 5b40ce00c..9176c8722 100644
--- a/libfreerdp/primitives/prim_set.c
+++ b/libfreerdp/primitives/prim_set.c
@@ -19,18 +19,15 @@
#endif
#include
+
#include
#include
-#ifdef WITH_SSE2
-# include
-#endif /* WITH_SSE2 */
-#ifdef WITH_IPP
-# include
-#endif /* WITH_IPP */
+
#include "prim_internal.h"
+#include "prim_set.h"
/* ========================================================================= */
-PRIM_STATIC pstatus_t general_set_8u(
+pstatus_t general_set_8u(
BYTE val,
BYTE *pDst,
INT32 len)
@@ -40,7 +37,7 @@ PRIM_STATIC pstatus_t general_set_8u(
}
/* ------------------------------------------------------------------------- */
-PRIM_STATIC pstatus_t general_zero(
+pstatus_t general_zero(
void *pDst,
size_t len)
{
@@ -48,75 +45,8 @@ PRIM_STATIC pstatus_t general_zero(
return PRIMITIVES_SUCCESS;
}
-/* ------------------------------------------------------------------------- */
-#ifdef WITH_SSE2
-# if !defined(WITH_IPP) || defined(ALL_PRIMITIVES_VERSIONS)
-PRIM_STATIC pstatus_t sse2_set_8u(
- BYTE val,
- BYTE *pDst,
- INT32 len)
-{
- BYTE byte, *dptr;
- __m128i xmm0;
- size_t count;
-
- if (len < 16) return general_set_8u(val, pDst, len);
-
- byte = val;
- dptr = (BYTE *) pDst;
-
- /* Seek 16-byte alignment. */
- while ((ULONG_PTR) dptr & 0x0f)
- {
- *dptr++ = byte;
- if (--len == 0) return PRIMITIVES_SUCCESS;
- }
-
- xmm0 = _mm_set1_epi8(byte);
-
- /* Cover 256-byte chunks via SSE register stores. */
- count = len >> 8;
- len -= count << 8;
- /* Do 256-byte chunks using one XMM register. */
- while (count--)
- {
- _mm_store_si128((__m128i *) dptr, xmm0); dptr += 16;
- _mm_store_si128((__m128i *) dptr, xmm0); dptr += 16;
- _mm_store_si128((__m128i *) dptr, xmm0); dptr += 16;
- _mm_store_si128((__m128i *) dptr, xmm0); dptr += 16;
- _mm_store_si128((__m128i *) dptr, xmm0); dptr += 16;
- _mm_store_si128((__m128i *) dptr, xmm0); dptr += 16;
- _mm_store_si128((__m128i *) dptr, xmm0); dptr += 16;
- _mm_store_si128((__m128i *) dptr, xmm0); dptr += 16;
- _mm_store_si128((__m128i *) dptr, xmm0); dptr += 16;
- _mm_store_si128((__m128i *) dptr, xmm0); dptr += 16;
- _mm_store_si128((__m128i *) dptr, xmm0); dptr += 16;
- _mm_store_si128((__m128i *) dptr, xmm0); dptr += 16;
- _mm_store_si128((__m128i *) dptr, xmm0); dptr += 16;
- _mm_store_si128((__m128i *) dptr, xmm0); dptr += 16;
- _mm_store_si128((__m128i *) dptr, xmm0); dptr += 16;
- _mm_store_si128((__m128i *) dptr, xmm0); dptr += 16;
- }
-
- /* Cover 16-byte chunks via SSE register stores. */
- count = len >> 4;
- len -= count << 4;
- /* Do 16-byte chunks using one XMM register. */
- while (count--)
- {
- _mm_store_si128((__m128i *) dptr, xmm0); dptr += 16;
- }
-
- /* Do leftover bytes. */
- while (len--) *dptr++ = byte;
-
- return PRIMITIVES_SUCCESS;
-}
-# endif /* !defined(WITH_IPP) || defined(ALL_PRIMITIVES_VERSIONS) */
-#endif /* WITH_SSE2 */
-
/* ========================================================================= */
-PRIM_STATIC pstatus_t general_set_32s(
+pstatus_t general_set_32s(
INT32 val,
INT32 *pDst,
INT32 len)
@@ -148,7 +78,7 @@ PRIM_STATIC pstatus_t general_set_32s(
}
/* ------------------------------------------------------------------------- */
-PRIM_STATIC pstatus_t general_set_32u(
+pstatus_t general_set_32u(
UINT32 val,
UINT32 *pDst,
INT32 len)
@@ -179,104 +109,6 @@ PRIM_STATIC pstatus_t general_set_32u(
return PRIMITIVES_SUCCESS;
}
-/* ------------------------------------------------------------------------- */
-#ifdef WITH_SSE2
-# if !defined(WITH_IPP) || defined(ALL_PRIMITIVES_VERSIONS)
-PRIM_STATIC pstatus_t sse2_set_32u(
- UINT32 val,
- UINT32 *pDst,
- INT32 len)
-{
- UINT32 *dptr = (UINT32 *) pDst;
- __m128i xmm0;
- size_t count;
-
- /* If really short, just do it here. */
- if (len < 32)
- {
- while (len--) *dptr++ = val;
- return PRIMITIVES_SUCCESS;
- }
-
- /* Assure we can reach 16-byte alignment. */
- if (((ULONG_PTR) dptr & 0x03) != 0)
- {
- return general_set_32u(val, pDst, len);
- }
-
- /* Seek 16-byte alignment. */
- while ((ULONG_PTR) dptr & 0x0f)
- {
- *dptr++ = val;
- if (--len == 0) return PRIMITIVES_SUCCESS;
- }
-
- xmm0 = _mm_set1_epi32(val);
-
- /* Cover 256-byte chunks via SSE register stores. */
- count = len >> 6;
- len -= count << 6;
- /* Do 256-byte chunks using one XMM register. */
- while (count--)
- {
- _mm_store_si128((__m128i *) dptr, xmm0); dptr += 4;
- _mm_store_si128((__m128i *) dptr, xmm0); dptr += 4;
- _mm_store_si128((__m128i *) dptr, xmm0); dptr += 4;
- _mm_store_si128((__m128i *) dptr, xmm0); dptr += 4;
- _mm_store_si128((__m128i *) dptr, xmm0); dptr += 4;
- _mm_store_si128((__m128i *) dptr, xmm0); dptr += 4;
- _mm_store_si128((__m128i *) dptr, xmm0); dptr += 4;
- _mm_store_si128((__m128i *) dptr, xmm0); dptr += 4;
- _mm_store_si128((__m128i *) dptr, xmm0); dptr += 4;
- _mm_store_si128((__m128i *) dptr, xmm0); dptr += 4;
- _mm_store_si128((__m128i *) dptr, xmm0); dptr += 4;
- _mm_store_si128((__m128i *) dptr, xmm0); dptr += 4;
- _mm_store_si128((__m128i *) dptr, xmm0); dptr += 4;
- _mm_store_si128((__m128i *) dptr, xmm0); dptr += 4;
- _mm_store_si128((__m128i *) dptr, xmm0); dptr += 4;
- _mm_store_si128((__m128i *) dptr, xmm0); dptr += 4;
- }
-
- /* Cover 16-byte chunks via SSE register stores. */
- count = len >> 2;
- len -= count << 2;
- /* Do 16-byte chunks using one XMM register. */
- while (count--)
- {
- _mm_store_si128((__m128i *) dptr, xmm0); dptr += 4;
- }
-
- /* Do leftover bytes. */
- while (len--) *dptr++ = val;
-
- return PRIMITIVES_SUCCESS;
-}
-
-/* ------------------------------------------------------------------------- */
-PRIM_STATIC pstatus_t sse2_set_32s(
- INT32 val,
- INT32 *pDst,
- INT32 len)
-{
- UINT32 uval = *((UINT32 *) &val);
- return sse2_set_32u(uval, (UINT32 *) pDst, len);
-}
-# endif /* !defined(WITH_IPP) || defined(ALL_PRIMITIVES_VERSIONS) */
-#endif /* WITH_SSE2 */
-
-#ifdef WITH_IPP
-/* ------------------------------------------------------------------------- */
-PRIM_STATIC pstatus_t ipp_wrapper_set_32u(
- UINT32 val,
- UINT32 *pDst,
- INT32 len)
-{
- /* A little type conversion, then use the signed version. */
- INT32 sval = *((INT32 *) &val);
- return ippsSet_32s(sval, (INT32 *) pDst, len);
-}
-#endif
-
/* ------------------------------------------------------------------------- */
void primitives_init_set(
const primitives_hints_t *hints,
@@ -288,20 +120,7 @@ void primitives_init_set(
prims->set_32u = general_set_32u;
prims->zero = general_zero;
- /* Pick tuned versions if possible. */
-#ifdef WITH_IPP
- prims->set_8u = (__set_8u_t) ippsSet_8u;
- prims->set_32s = (__set_32s_t) ippsSet_32s;
- prims->set_32u = (__set_32u_t) ipp_wrapper_set_32u;
- prims->zero = (__zero_t) ippsZero_8u;
-#elif defined(WITH_SSE2)
- if (hints->x86_flags & PRIM_X86_SSE2_AVAILABLE)
- {
- prims->set_8u = sse2_set_8u;
- prims->set_32s = sse2_set_32s;
- prims->set_32u = sse2_set_32u;
- }
-#endif
+ primitives_init_set_opt(hints, prims);
}
/* ------------------------------------------------------------------------- */
@@ -310,3 +129,4 @@ void primitives_deinit_set(
{
/* Nothing to do. */
}
+
diff --git a/libfreerdp/primitives/prim_set.h b/libfreerdp/primitives/prim_set.h
new file mode 100644
index 000000000..e4504dc2c
--- /dev/null
+++ b/libfreerdp/primitives/prim_set.h
@@ -0,0 +1,34 @@
+/* FreeRDP: A Remote Desktop Protocol Client
+ * Routines to set a chunk of memory to a constant.
+ * vi:ts=4 sw=4
+ *
+ * (c) Copyright 2012 Hewlett-Packard Development Company, L.P.
+ * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing
+ * permissions and limitations under the License. Algorithms used by
+ * this code may be covered by patents by HP, Microsoft, or other parties.
+ *
+ */
+
+#ifdef __GNUC__
+# pragma once
+#endif
+
+#ifndef __PRIM_SET_H_INCLUDED__
+#define __PRIM_SET_H_INCLUDED__
+
+pstatus_t general_set_8u(BYTE val, BYTE *pDst, INT32 len);
+pstatus_t general_zero(void *pDst, size_t len);
+pstatus_t general_set_32s(INT32 val, INT32 *pDst, INT32 len);
+pstatus_t general_set_32u(UINT32 val, UINT32 *pDst, INT32 len);
+
+
+void primitives_init_set_opt(const primitives_hints_t *hints, primitives_t *prims);
+
+#endif /* !__PRIM_SET_H_INCLUDED__ */
+
diff --git a/libfreerdp/primitives/prim_set_opt.c b/libfreerdp/primitives/prim_set_opt.c
new file mode 100644
index 000000000..0523434ff
--- /dev/null
+++ b/libfreerdp/primitives/prim_set_opt.c
@@ -0,0 +1,218 @@
+/* FreeRDP: A Remote Desktop Protocol Client
+ * Optimized routines to set a chunk of memory to a constant.
+ * vi:ts=4 sw=4:
+ *
+ * (c) Copyright 2012 Hewlett-Packard Development Company, L.P.
+ * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing
+ * permissions and limitations under the License.
+ *
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include
+#include
+#include
+
+#ifdef WITH_SSE2
+# include
+#endif /* WITH_SSE2 */
+#ifdef WITH_IPP
+# include
+#endif /* WITH_IPP */
+
+#include "prim_internal.h"
+#include "prim_set.h"
+
+/* ========================================================================= */
+#ifdef WITH_SSE2
+# if !defined(WITH_IPP) || defined(ALL_PRIMITIVES_VERSIONS)
+pstatus_t sse2_set_8u(
+ BYTE val,
+ BYTE *pDst,
+ INT32 len)
+{
+ BYTE byte, *dptr;
+ __m128i xmm0;
+ size_t count;
+
+ if (len < 16) return general_set_8u(val, pDst, len);
+
+ byte = val;
+ dptr = (BYTE *) pDst;
+
+ /* Seek 16-byte alignment. */
+ while ((ULONG_PTR) dptr & 0x0f)
+ {
+ *dptr++ = byte;
+ if (--len == 0) return PRIMITIVES_SUCCESS;
+ }
+
+ xmm0 = _mm_set1_epi8(byte);
+
+ /* Cover 256-byte chunks via SSE register stores. */
+ count = len >> 8;
+ len -= count << 8;
+ /* Do 256-byte chunks using one XMM register. */
+ while (count--)
+ {
+ _mm_store_si128((__m128i *) dptr, xmm0); dptr += 16;
+ _mm_store_si128((__m128i *) dptr, xmm0); dptr += 16;
+ _mm_store_si128((__m128i *) dptr, xmm0); dptr += 16;
+ _mm_store_si128((__m128i *) dptr, xmm0); dptr += 16;
+ _mm_store_si128((__m128i *) dptr, xmm0); dptr += 16;
+ _mm_store_si128((__m128i *) dptr, xmm0); dptr += 16;
+ _mm_store_si128((__m128i *) dptr, xmm0); dptr += 16;
+ _mm_store_si128((__m128i *) dptr, xmm0); dptr += 16;
+ _mm_store_si128((__m128i *) dptr, xmm0); dptr += 16;
+ _mm_store_si128((__m128i *) dptr, xmm0); dptr += 16;
+ _mm_store_si128((__m128i *) dptr, xmm0); dptr += 16;
+ _mm_store_si128((__m128i *) dptr, xmm0); dptr += 16;
+ _mm_store_si128((__m128i *) dptr, xmm0); dptr += 16;
+ _mm_store_si128((__m128i *) dptr, xmm0); dptr += 16;
+ _mm_store_si128((__m128i *) dptr, xmm0); dptr += 16;
+ _mm_store_si128((__m128i *) dptr, xmm0); dptr += 16;
+ }
+
+ /* Cover 16-byte chunks via SSE register stores. */
+ count = len >> 4;
+ len -= count << 4;
+ /* Do 16-byte chunks using one XMM register. */
+ while (count--)
+ {
+ _mm_store_si128((__m128i *) dptr, xmm0); dptr += 16;
+ }
+
+ /* Do leftover bytes. */
+ while (len--) *dptr++ = byte;
+
+ return PRIMITIVES_SUCCESS;
+}
+# endif /* !defined(WITH_IPP) || defined(ALL_PRIMITIVES_VERSIONS) */
+#endif /* WITH_SSE2 */
+
+/* ------------------------------------------------------------------------- */
+#ifdef WITH_SSE2
+# if !defined(WITH_IPP) || defined(ALL_PRIMITIVES_VERSIONS)
+pstatus_t sse2_set_32u(
+ UINT32 val,
+ UINT32 *pDst,
+ INT32 len)
+{
+ UINT32 *dptr = (UINT32 *) pDst;
+ __m128i xmm0;
+ size_t count;
+
+ /* If really short, just do it here. */
+ if (len < 32)
+ {
+ while (len--) *dptr++ = val;
+ return PRIMITIVES_SUCCESS;
+ }
+
+ /* Assure we can reach 16-byte alignment. */
+ if (((ULONG_PTR) dptr & 0x03) != 0)
+ {
+ return general_set_32u(val, pDst, len);
+ }
+
+ /* Seek 16-byte alignment. */
+ while ((ULONG_PTR) dptr & 0x0f)
+ {
+ *dptr++ = val;
+ if (--len == 0) return PRIMITIVES_SUCCESS;
+ }
+
+ xmm0 = _mm_set1_epi32(val);
+
+ /* Cover 256-byte chunks via SSE register stores. */
+ count = len >> 6;
+ len -= count << 6;
+ /* Do 256-byte chunks using one XMM register. */
+ while (count--)
+ {
+ _mm_store_si128((__m128i *) dptr, xmm0); dptr += 4;
+ _mm_store_si128((__m128i *) dptr, xmm0); dptr += 4;
+ _mm_store_si128((__m128i *) dptr, xmm0); dptr += 4;
+ _mm_store_si128((__m128i *) dptr, xmm0); dptr += 4;
+ _mm_store_si128((__m128i *) dptr, xmm0); dptr += 4;
+ _mm_store_si128((__m128i *) dptr, xmm0); dptr += 4;
+ _mm_store_si128((__m128i *) dptr, xmm0); dptr += 4;
+ _mm_store_si128((__m128i *) dptr, xmm0); dptr += 4;
+ _mm_store_si128((__m128i *) dptr, xmm0); dptr += 4;
+ _mm_store_si128((__m128i *) dptr, xmm0); dptr += 4;
+ _mm_store_si128((__m128i *) dptr, xmm0); dptr += 4;
+ _mm_store_si128((__m128i *) dptr, xmm0); dptr += 4;
+ _mm_store_si128((__m128i *) dptr, xmm0); dptr += 4;
+ _mm_store_si128((__m128i *) dptr, xmm0); dptr += 4;
+ _mm_store_si128((__m128i *) dptr, xmm0); dptr += 4;
+ _mm_store_si128((__m128i *) dptr, xmm0); dptr += 4;
+ }
+
+ /* Cover 16-byte chunks via SSE register stores. */
+ count = len >> 2;
+ len -= count << 2;
+ /* Do 16-byte chunks using one XMM register. */
+ while (count--)
+ {
+ _mm_store_si128((__m128i *) dptr, xmm0); dptr += 4;
+ }
+
+ /* Do leftover bytes. */
+ while (len--) *dptr++ = val;
+
+ return PRIMITIVES_SUCCESS;
+}
+
+/* ------------------------------------------------------------------------- */
+pstatus_t sse2_set_32s(
+ INT32 val,
+ INT32 *pDst,
+ INT32 len)
+{
+ UINT32 uval = *((UINT32 *) &val);
+ return sse2_set_32u(uval, (UINT32 *) pDst, len);
+}
+# endif /* !defined(WITH_IPP) || defined(ALL_PRIMITIVES_VERSIONS) */
+#endif /* WITH_SSE2 */
+
+#ifdef WITH_IPP
+/* ------------------------------------------------------------------------- */
+pstatus_t ipp_wrapper_set_32u(
+ UINT32 val,
+ UINT32 *pDst,
+ INT32 len)
+{
+ /* A little type conversion, then use the signed version. */
+ INT32 sval = *((INT32 *) &val);
+ return ippsSet_32s(sval, (INT32 *) pDst, len);
+}
+#endif
+
+/* ------------------------------------------------------------------------- */
+void primitives_init_set_opt(const primitives_hints_t *hints, primitives_t *prims)
+{
+ /* Pick tuned versions if possible. */
+#ifdef WITH_IPP
+ prims->set_8u = (__set_8u_t) ippsSet_8u;
+ prims->set_32s = (__set_32s_t) ippsSet_32s;
+ prims->set_32u = (__set_32u_t) ipp_wrapper_set_32u;
+ prims->zero = (__zero_t) ippsZero_8u;
+#elif defined(WITH_SSE2)
+ if (hints->x86_flags & PRIM_X86_SSE2_AVAILABLE)
+ {
+ prims->set_8u = sse2_set_8u;
+ prims->set_32s = sse2_set_32s;
+ prims->set_32u = sse2_set_32u;
+ }
+#endif
+}
+
diff --git a/libfreerdp/primitives/prim_shift.c b/libfreerdp/primitives/prim_shift.c
index 331c7216e..bd26dc0a0 100644
--- a/libfreerdp/primitives/prim_shift.c
+++ b/libfreerdp/primitives/prim_shift.c
@@ -17,25 +17,15 @@
#include "config.h"
#endif
-#include
-
#include
#include
-#ifdef WITH_SSE2
-#include
-#include
-#endif /* WITH_SSE2 */
-
-#ifdef WITH_IPP
-#include
-#endif /* WITH_IPP */
-
#include "prim_internal.h"
-#include "prim_templates.h"
+#include "prim_shift.h"
+
/* ------------------------------------------------------------------------- */
-PRIM_STATIC pstatus_t general_lShiftC_16s(
+pstatus_t general_lShiftC_16s(
const INT16 *pSrc,
INT32 val,
INT16 *pDst,
@@ -47,7 +37,7 @@ PRIM_STATIC pstatus_t general_lShiftC_16s(
}
/* ------------------------------------------------------------------------- */
-PRIM_STATIC pstatus_t general_rShiftC_16s(
+pstatus_t general_rShiftC_16s(
const INT16 *pSrc,
INT32 val,
INT16 *pDst,
@@ -59,7 +49,7 @@ PRIM_STATIC pstatus_t general_rShiftC_16s(
}
/* ------------------------------------------------------------------------- */
-PRIM_STATIC pstatus_t general_lShiftC_16u(
+pstatus_t general_lShiftC_16u(
const UINT16 *pSrc,
INT32 val,
UINT16 *pDst,
@@ -71,7 +61,7 @@ PRIM_STATIC pstatus_t general_lShiftC_16u(
}
/* ------------------------------------------------------------------------- */
-PRIM_STATIC pstatus_t general_rShiftC_16u(
+pstatus_t general_rShiftC_16u(
const UINT16 *pSrc,
INT32 val,
UINT16 *pDst,
@@ -82,25 +72,8 @@ PRIM_STATIC pstatus_t general_rShiftC_16u(
return PRIMITIVES_SUCCESS;
}
-#ifdef WITH_SSE2
-# if !defined(WITH_IPP) || defined(ALL_PRIMITIVES_VERSIONS)
/* ------------------------------------------------------------------------- */
-SSE3_SCD_ROUTINE(sse2_lShiftC_16s, INT16, general_lShiftC_16s,
- _mm_slli_epi16, *dptr++ = *sptr++ << val)
-/* ------------------------------------------------------------------------- */
-SSE3_SCD_ROUTINE(sse2_rShiftC_16s, INT16, general_rShiftC_16s,
- _mm_srai_epi16, *dptr++ = *sptr++ >> val)
-/* ------------------------------------------------------------------------- */
-SSE3_SCD_ROUTINE(sse2_lShiftC_16u, UINT16, general_lShiftC_16u,
- _mm_slli_epi16, *dptr++ = *sptr++ << val)
-/* ------------------------------------------------------------------------- */
-SSE3_SCD_ROUTINE(sse2_rShiftC_16u, UINT16, general_rShiftC_16u,
- _mm_srli_epi16, *dptr++ = *sptr++ >> val)
-# endif /* !defined(WITH_IPP) || defined(ALL_PRIMITIVES_VERSIONS) */
-#endif
-
-/* ------------------------------------------------------------------------- */
-PRIM_STATIC pstatus_t general_shiftC_16s(
+pstatus_t general_shiftC_16s(
const INT16 *pSrc,
INT32 val,
INT16 *pDst,
@@ -115,7 +88,7 @@ PRIM_STATIC pstatus_t general_shiftC_16s(
}
/* ------------------------------------------------------------------------- */
-PRIM_STATIC pstatus_t general_shiftC_16u(
+pstatus_t general_shiftC_16u(
const UINT16 *pSrc,
INT32 val,
UINT16 *pDst,
@@ -129,11 +102,6 @@ PRIM_STATIC pstatus_t general_shiftC_16u(
else return prims->lShiftC_16u(pSrc, val, pDst, len);
}
-/* Note: the IPP version will have to call ippLShiftC_16s or ippRShiftC_16s
- * depending on the sign of val. To avoid using the deprecated inplace
- * routines, a wrapper can use the src for the dest.
- */
-
/* ------------------------------------------------------------------------- */
void primitives_init_shift(
const primitives_hints_t *hints,
@@ -144,24 +112,12 @@ void primitives_init_shift(
prims->rShiftC_16s = general_rShiftC_16s;
prims->lShiftC_16u = general_lShiftC_16u;
prims->rShiftC_16u = general_rShiftC_16u;
-#if defined(WITH_IPP)
- prims->lShiftC_16s = (__lShiftC_16s_t) ippsLShiftC_16s;
- prims->rShiftC_16s = (__rShiftC_16s_t) ippsRShiftC_16s;
- prims->lShiftC_16u = (__lShiftC_16u_t) ippsLShiftC_16u;
- prims->rShiftC_16u = (__rShiftC_16u_t) ippsRShiftC_16u;
-#elif defined(WITH_SSE2)
- if ((hints->x86_flags & PRIM_X86_SSE2_AVAILABLE)
- && (hints->x86_flags & PRIM_X86_SSE3_AVAILABLE))
- {
- prims->lShiftC_16s = sse2_lShiftC_16s;
- prims->rShiftC_16s = sse2_rShiftC_16s;
- prims->lShiftC_16u = sse2_lShiftC_16u;
- prims->rShiftC_16u = sse2_rShiftC_16u;
- }
-#endif
+
/* Wrappers */
prims->shiftC_16s = general_shiftC_16s;
prims->shiftC_16u = general_shiftC_16u;
+
+ primitives_init_shift_opt(hints, prims);
}
/* ------------------------------------------------------------------------- */
diff --git a/libfreerdp/primitives/prim_shift.h b/libfreerdp/primitives/prim_shift.h
new file mode 100644
index 000000000..cad054013
--- /dev/null
+++ b/libfreerdp/primitives/prim_shift.h
@@ -0,0 +1,35 @@
+/* FreeRDP: A Remote Desktop Protocol Client
+ * Shift operations.
+ * vi:ts=4 sw=4
+ *
+ * (c) Copyright 2012 Hewlett-Packard Development Company, L.P.
+ * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing
+ * permissions and limitations under the License. Algorithms used by
+ * this code may be covered by patents by HP, Microsoft, or other parties.
+ *
+ */
+
+#ifdef __GNUC__
+# pragma once
+#endif
+
+#ifndef __PRIM_SHIFT_H_INCLUDED__
+#define __PRIM_SHIFT_H_INCLUDED__
+
+pstatus_t general_lShiftC_16s(const INT16 *pSrc, INT32 val, INT16 *pDst, INT32 len);
+pstatus_t general_rShiftC_16s(const INT16 *pSrc, INT32 val, INT16 *pDst, INT32 len);
+pstatus_t general_lShiftC_16u(const UINT16 *pSrc, INT32 val, UINT16 *pDst, INT32 len);
+pstatus_t general_rShiftC_16u(const UINT16 *pSrc, INT32 val, UINT16 *pDst, INT32 len);
+pstatus_t general_shiftC_16s(const INT16 *pSrc, INT32 val, INT16 *pDst, INT32 len);
+pstatus_t general_shiftC_16u(const UINT16 *pSrc, INT32 val, UINT16 *pDst, INT32 len);
+
+void primitives_init_shift_opt(const primitives_hints_t *hints, primitives_t *prims);
+
+#endif /* !__PRIM_SHIFT_H_INCLUDED__ */
+
diff --git a/libfreerdp/primitives/prim_shift_opt.c b/libfreerdp/primitives/prim_shift_opt.c
new file mode 100644
index 000000000..0e57da269
--- /dev/null
+++ b/libfreerdp/primitives/prim_shift_opt.c
@@ -0,0 +1,79 @@
+/* FreeRDP: A Remote Desktop Protocol Client
+ * Shift operations.
+ * vi:ts=4 sw=4:
+ *
+ * (c) Copyright 2012 Hewlett-Packard Development Company, L.P.
+ * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing
+ * permissions and limitations under the License.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include
+#include
+
+#ifdef WITH_SSE2
+#include
+#include
+#endif /* WITH_SSE2 */
+
+#ifdef WITH_IPP
+#include
+#endif /* WITH_IPP */
+
+#include "prim_internal.h"
+#include "prim_templates.h"
+#include "prim_shift.h"
+
+
+#ifdef WITH_SSE2
+# if !defined(WITH_IPP) || defined(ALL_PRIMITIVES_VERSIONS)
+/* ------------------------------------------------------------------------- */
+SSE3_SCD_ROUTINE(sse2_lShiftC_16s, INT16, general_lShiftC_16s,
+ _mm_slli_epi16, *dptr++ = *sptr++ << val)
+/* ------------------------------------------------------------------------- */
+SSE3_SCD_ROUTINE(sse2_rShiftC_16s, INT16, general_rShiftC_16s,
+ _mm_srai_epi16, *dptr++ = *sptr++ >> val)
+/* ------------------------------------------------------------------------- */
+SSE3_SCD_ROUTINE(sse2_lShiftC_16u, UINT16, general_lShiftC_16u,
+ _mm_slli_epi16, *dptr++ = *sptr++ << val)
+/* ------------------------------------------------------------------------- */
+SSE3_SCD_ROUTINE(sse2_rShiftC_16u, UINT16, general_rShiftC_16u,
+ _mm_srli_epi16, *dptr++ = *sptr++ >> val)
+# endif /* !defined(WITH_IPP) || defined(ALL_PRIMITIVES_VERSIONS) */
+#endif
+
+
+/* Note: the IPP version will have to call ippLShiftC_16s or ippRShiftC_16s
+ * depending on the sign of val. To avoid using the deprecated inplace
+ * routines, a wrapper can use the src for the dest.
+ */
+
+/* ------------------------------------------------------------------------- */
+void primitives_init_shift_opt(const primitives_hints_t *hints, primitives_t *prims)
+{
+#if defined(WITH_IPP)
+ prims->lShiftC_16s = (__lShiftC_16s_t) ippsLShiftC_16s;
+ prims->rShiftC_16s = (__rShiftC_16s_t) ippsRShiftC_16s;
+ prims->lShiftC_16u = (__lShiftC_16u_t) ippsLShiftC_16u;
+ prims->rShiftC_16u = (__rShiftC_16u_t) ippsRShiftC_16u;
+#elif defined(WITH_SSE2)
+ if ((hints->x86_flags & PRIM_X86_SSE2_AVAILABLE)
+ && (hints->x86_flags & PRIM_X86_SSE3_AVAILABLE))
+ {
+ prims->lShiftC_16s = sse2_lShiftC_16s;
+ prims->rShiftC_16s = sse2_rShiftC_16s;
+ prims->lShiftC_16u = sse2_lShiftC_16u;
+ prims->rShiftC_16u = sse2_rShiftC_16u;
+ }
+#endif
+}
+
diff --git a/libfreerdp/primitives/prim_sign.c b/libfreerdp/primitives/prim_sign.c
index a3b11ee14..d7d2eb018 100644
--- a/libfreerdp/primitives/prim_sign.c
+++ b/libfreerdp/primitives/prim_sign.c
@@ -17,22 +17,16 @@
#include "config.h"
#endif
-#include
-
#include
#include
-#ifdef WITH_SSE2
-#include
-#include
-#endif /* WITH_SSE2 */
-
#include "prim_internal.h"
+#include "prim_sign.h"
/* ----------------------------------------------------------------------------
* Set pDst to the sign-value of the 16-bit values in pSrc (-1, 0, or 1).
*/
-PRIM_STATIC pstatus_t general_sign_16s(
+pstatus_t general_sign_16s(
const INT16 *pSrc,
INT16 *pDst,
INT32 len)
@@ -46,110 +40,6 @@ PRIM_STATIC pstatus_t general_sign_16s(
return PRIMITIVES_SUCCESS;
}
-#ifdef WITH_SSE2
-/* ------------------------------------------------------------------------- */
-PRIM_STATIC pstatus_t ssse3_sign_16s(
- const INT16 *pSrc,
- INT16 *pDst,
- INT32 len)
-{
- const INT16 *sptr = (const INT16 *) pSrc;
- INT16 *dptr = (INT16 *) pDst;
- size_t count;
-
- if (len < 16)
- {
- return general_sign_16s(pSrc, pDst, len);
- }
-
- /* Check for 16-byte alignment (eventually). */
- if ((ULONG_PTR) pDst & 0x01)
- {
- return general_sign_16s(pSrc, pDst, len);
- }
-
- /* Seek 16-byte alignment. */
- while ((ULONG_PTR) dptr & 0x0f)
- {
- INT16 src = *sptr++;
- *dptr++ = (src < 0) ? (-1) : ((src > 0) ? 1 : 0);
- if (--len == 0) return PRIMITIVES_SUCCESS;
- }
-
- /* Do 32-short chunks using 8 XMM registers. */
- count = len >> 5; /* / 32 */
- len -= count << 5; /* * 32 */
- if ((ULONG_PTR) sptr & 0x0f)
- {
- /* Unaligned */
- while (count--)
- {
- __m128i xmm0, xmm1, xmm2, xmm3, xmm4, xmm5, xmm6, xmm7;
- xmm0 = _mm_set1_epi16(0x0001U);
- xmm1 = _mm_set1_epi16(0x0001U);
- xmm2 = _mm_set1_epi16(0x0001U);
- xmm3 = _mm_set1_epi16(0x0001U);
- xmm4 = _mm_lddqu_si128((__m128i *) sptr); sptr += 8;
- xmm5 = _mm_lddqu_si128((__m128i *) sptr); sptr += 8;
- xmm6 = _mm_lddqu_si128((__m128i *) sptr); sptr += 8;
- xmm7 = _mm_lddqu_si128((__m128i *) sptr); sptr += 8;
- xmm0 = _mm_sign_epi16(xmm0, xmm4);
- xmm1 = _mm_sign_epi16(xmm1, xmm5);
- xmm2 = _mm_sign_epi16(xmm2, xmm6);
- xmm3 = _mm_sign_epi16(xmm3, xmm7);
- _mm_store_si128((__m128i *) dptr, xmm0); dptr += 8;
- _mm_store_si128((__m128i *) dptr, xmm1); dptr += 8;
- _mm_store_si128((__m128i *) dptr, xmm2); dptr += 8;
- _mm_store_si128((__m128i *) dptr, xmm3); dptr += 8;
- }
- }
- else
- {
- /* Aligned */
- while (count--)
- {
- __m128i xmm0, xmm1, xmm2, xmm3, xmm4, xmm5, xmm6, xmm7;
- xmm0 = _mm_set1_epi16(0x0001U);
- xmm1 = _mm_set1_epi16(0x0001U);
- xmm2 = _mm_set1_epi16(0x0001U);
- xmm3 = _mm_set1_epi16(0x0001U);
- xmm4 = _mm_load_si128((__m128i *) sptr); sptr += 8;
- xmm5 = _mm_load_si128((__m128i *) sptr); sptr += 8;
- xmm6 = _mm_load_si128((__m128i *) sptr); sptr += 8;
- xmm7 = _mm_load_si128((__m128i *) sptr); sptr += 8;
- xmm0 = _mm_sign_epi16(xmm0, xmm4);
- xmm1 = _mm_sign_epi16(xmm1, xmm5);
- xmm2 = _mm_sign_epi16(xmm2, xmm6);
- xmm3 = _mm_sign_epi16(xmm3, xmm7);
- _mm_store_si128((__m128i *) dptr, xmm0); dptr += 8;
- _mm_store_si128((__m128i *) dptr, xmm1); dptr += 8;
- _mm_store_si128((__m128i *) dptr, xmm2); dptr += 8;
- _mm_store_si128((__m128i *) dptr, xmm3); dptr += 8;
- }
- }
-
- /* Do 8-short chunks using two XMM registers. */
- count = len >> 3;
- len -= count << 3;
- while (count--)
- {
- __m128i xmm0 = _mm_set1_epi16(0x0001U);
- __m128i xmm1 = LOAD_SI128(sptr); sptr += 8;
- xmm0 = _mm_sign_epi16(xmm0, xmm1);
- _mm_store_si128((__m128i *) dptr, xmm0); dptr += 8;
- }
-
- /* Do leftovers. */
- while (len--)
- {
- INT16 src = *sptr++;
- *dptr++ = (src < 0) ? -1 : ((src > 0) ? 1 : 0);
- }
-
- return PRIMITIVES_SUCCESS;
-}
-#endif /* WITH_SSE2 */
-
/* ------------------------------------------------------------------------- */
void primitives_init_sign(
const primitives_hints_t *hints,
@@ -157,15 +47,8 @@ void primitives_init_sign(
{
/* Start with the default. */
prims->sign_16s = general_sign_16s;
- /* Pick tuned versions if possible. */
- /* I didn't spot an IPP version of this. */
-#if defined(WITH_SSE2)
- if ((hints->x86_flags & PRIM_X86_SSSE3_AVAILABLE)
- && (hints->x86_flags & PRIM_X86_SSE3_AVAILABLE))
- {
- prims->sign_16s = ssse3_sign_16s;
- }
-#endif
+
+ primitives_init_sign_opt(hints, prims);
}
/* ------------------------------------------------------------------------- */
@@ -174,3 +57,4 @@ void primitives_deinit_sign(
{
/* Nothing to do. */
}
+
diff --git a/libfreerdp/primitives/prim_sign.h b/libfreerdp/primitives/prim_sign.h
new file mode 100644
index 000000000..3592990ec
--- /dev/null
+++ b/libfreerdp/primitives/prim_sign.h
@@ -0,0 +1,30 @@
+/* FreeRDP: A Remote Desktop Protocol Client
+ * Sign operations.
+ * vi:ts=4 sw=4
+ *
+ * (c) Copyright 2012 Hewlett-Packard Development Company, L.P.
+ * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing
+ * permissions and limitations under the License. Algorithms used by
+ * this code may be covered by patents by HP, Microsoft, or other parties.
+ *
+ */
+
+#ifdef __GNUC__
+# pragma once
+#endif
+
+#ifndef __PRIM_SIGN_H_INCLUDED__
+#define __PRIM_SIGN_H_INCLUDED__
+
+pstatus_t general_sign_16s(const INT16 *pSrc, INT16 *pDst, INT32 len);
+
+void primitives_init_sign_opt(const primitives_hints_t *hints, primitives_t *prims);
+
+#endif /* !__PRIM_SIGN_H_INCLUDED__ */
+
diff --git a/libfreerdp/primitives/prim_sign_opt.c b/libfreerdp/primitives/prim_sign_opt.c
new file mode 100644
index 000000000..81842b9bd
--- /dev/null
+++ b/libfreerdp/primitives/prim_sign_opt.c
@@ -0,0 +1,149 @@
+/* FreeRDP: A Remote Desktop Protocol Client
+ * Optimized sign operations.
+ * vi:ts=4 sw=4:
+ *
+ * (c) Copyright 2012 Hewlett-Packard Development Company, L.P.
+ * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing
+ * permissions and limitations under the License.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include
+#include
+
+#ifdef WITH_SSE2
+#include
+#include
+#endif /* WITH_SSE2 */
+
+#include "prim_internal.h"
+#include "prim_sign.h"
+
+
+#ifdef WITH_SSE2
+/* ------------------------------------------------------------------------- */
+pstatus_t ssse3_sign_16s(
+ const INT16 *pSrc,
+ INT16 *pDst,
+ INT32 len)
+{
+ const INT16 *sptr = (const INT16 *) pSrc;
+ INT16 *dptr = (INT16 *) pDst;
+ size_t count;
+
+ if (len < 16)
+ {
+ return general_sign_16s(pSrc, pDst, len);
+ }
+
+ /* Check for 16-byte alignment (eventually). */
+ if ((ULONG_PTR) pDst & 0x01)
+ {
+ return general_sign_16s(pSrc, pDst, len);
+ }
+
+ /* Seek 16-byte alignment. */
+ while ((ULONG_PTR) dptr & 0x0f)
+ {
+ INT16 src = *sptr++;
+ *dptr++ = (src < 0) ? (-1) : ((src > 0) ? 1 : 0);
+ if (--len == 0) return PRIMITIVES_SUCCESS;
+ }
+
+ /* Do 32-short chunks using 8 XMM registers. */
+ count = len >> 5; /* / 32 */
+ len -= count << 5; /* * 32 */
+ if ((ULONG_PTR) sptr & 0x0f)
+ {
+ /* Unaligned */
+ while (count--)
+ {
+ __m128i xmm0, xmm1, xmm2, xmm3, xmm4, xmm5, xmm6, xmm7;
+ xmm0 = _mm_set1_epi16(0x0001U);
+ xmm1 = _mm_set1_epi16(0x0001U);
+ xmm2 = _mm_set1_epi16(0x0001U);
+ xmm3 = _mm_set1_epi16(0x0001U);
+ xmm4 = _mm_lddqu_si128((__m128i *) sptr); sptr += 8;
+ xmm5 = _mm_lddqu_si128((__m128i *) sptr); sptr += 8;
+ xmm6 = _mm_lddqu_si128((__m128i *) sptr); sptr += 8;
+ xmm7 = _mm_lddqu_si128((__m128i *) sptr); sptr += 8;
+ xmm0 = _mm_sign_epi16(xmm0, xmm4);
+ xmm1 = _mm_sign_epi16(xmm1, xmm5);
+ xmm2 = _mm_sign_epi16(xmm2, xmm6);
+ xmm3 = _mm_sign_epi16(xmm3, xmm7);
+ _mm_store_si128((__m128i *) dptr, xmm0); dptr += 8;
+ _mm_store_si128((__m128i *) dptr, xmm1); dptr += 8;
+ _mm_store_si128((__m128i *) dptr, xmm2); dptr += 8;
+ _mm_store_si128((__m128i *) dptr, xmm3); dptr += 8;
+ }
+ }
+ else
+ {
+ /* Aligned */
+ while (count--)
+ {
+ __m128i xmm0, xmm1, xmm2, xmm3, xmm4, xmm5, xmm6, xmm7;
+ xmm0 = _mm_set1_epi16(0x0001U);
+ xmm1 = _mm_set1_epi16(0x0001U);
+ xmm2 = _mm_set1_epi16(0x0001U);
+ xmm3 = _mm_set1_epi16(0x0001U);
+ xmm4 = _mm_load_si128((__m128i *) sptr); sptr += 8;
+ xmm5 = _mm_load_si128((__m128i *) sptr); sptr += 8;
+ xmm6 = _mm_load_si128((__m128i *) sptr); sptr += 8;
+ xmm7 = _mm_load_si128((__m128i *) sptr); sptr += 8;
+ xmm0 = _mm_sign_epi16(xmm0, xmm4);
+ xmm1 = _mm_sign_epi16(xmm1, xmm5);
+ xmm2 = _mm_sign_epi16(xmm2, xmm6);
+ xmm3 = _mm_sign_epi16(xmm3, xmm7);
+ _mm_store_si128((__m128i *) dptr, xmm0); dptr += 8;
+ _mm_store_si128((__m128i *) dptr, xmm1); dptr += 8;
+ _mm_store_si128((__m128i *) dptr, xmm2); dptr += 8;
+ _mm_store_si128((__m128i *) dptr, xmm3); dptr += 8;
+ }
+ }
+
+ /* Do 8-short chunks using two XMM registers. */
+ count = len >> 3;
+ len -= count << 3;
+ while (count--)
+ {
+ __m128i xmm0 = _mm_set1_epi16(0x0001U);
+ __m128i xmm1 = LOAD_SI128(sptr); sptr += 8;
+ xmm0 = _mm_sign_epi16(xmm0, xmm1);
+ _mm_store_si128((__m128i *) dptr, xmm0); dptr += 8;
+ }
+
+ /* Do leftovers. */
+ while (len--)
+ {
+ INT16 src = *sptr++;
+ *dptr++ = (src < 0) ? -1 : ((src > 0) ? 1 : 0);
+ }
+
+ return PRIMITIVES_SUCCESS;
+}
+#endif /* WITH_SSE2 */
+
+/* ------------------------------------------------------------------------- */
+void primitives_init_sign_opt(const primitives_hints_t *hints, primitives_t *prims)
+{
+ /* Pick tuned versions if possible. */
+ /* I didn't spot an IPP version of this. */
+#if defined(WITH_SSE2)
+ if ((hints->x86_flags & PRIM_X86_SSSE3_AVAILABLE)
+ && (hints->x86_flags & PRIM_X86_SSE3_AVAILABLE))
+ {
+ prims->sign_16s = ssse3_sign_16s;
+ }
+#endif
+}
+
diff --git a/libfreerdp/primitives/prim_templates.h b/libfreerdp/primitives/prim_templates.h
index c0b6ac10d..b530637b7 100644
--- a/libfreerdp/primitives/prim_templates.h
+++ b/libfreerdp/primitives/prim_templates.h
@@ -44,7 +44,7 @@
* SCD = Source, Constant, Destination
*/
#define SSE3_SCD_ROUTINE(_name_, _type_, _fallback_, _op_, _slowWay_) \
-PRIM_STATIC pstatus_t _name_(const _type_ *pSrc, INT32 val, _type_ *pDst, INT32 len) \
+pstatus_t _name_(const _type_ *pSrc, INT32 val, _type_ *pDst, INT32 len) \
{ \
int shifts; \
UINT32 offBeatMask; \
@@ -188,7 +188,7 @@ PRIM_STATIC pstatus_t _name_(const _type_ *pSrc, INT32 val, _type_ *pDst, INT32
* PRE = preload xmm0 with the constant.
*/
#define SSE3_SCD_PRE_ROUTINE(_name_, _type_, _fallback_, _op_, _slowWay_) \
-PRIM_STATIC pstatus_t _name_(const _type_ *pSrc, _type_ val, _type_ *pDst, INT32 len) \
+pstatus_t _name_(const _type_ *pSrc, _type_ val, _type_ *pDst, INT32 len) \
{ \
int shifts; \
UINT32 offBeatMask; \
@@ -293,7 +293,7 @@ PRIM_STATIC pstatus_t _name_(const _type_ *pSrc, _type_ val, _type_ *pDst, INT32
* SSD = Source1, Source2, Destination
*/
#define SSE3_SSD_ROUTINE(_name_, _type_, _fallback_, _op_, _slowWay_) \
-PRIM_STATIC pstatus_t _name_(const _type_ *pSrc1, const _type_ *pSrc2, _type_ *pDst, INT32 len) \
+pstatus_t _name_(const _type_ *pSrc1, const _type_ *pSrc2, _type_ *pDst, INT32 len) \
{ \
int shifts; \
UINT32 offBeatMask; \
diff --git a/libfreerdp/primitives/primitives.c b/libfreerdp/primitives/primitives.c
index ddafe7815..99c71e37f 100644
--- a/libfreerdp/primitives/primitives.c
+++ b/libfreerdp/primitives/primitives.c
@@ -150,7 +150,7 @@ static void set_hints(primitives_hints_t* hints)
#elif defined(_M_ARM)
-static UINT32 androidNeon(void)
+static UINT32 getNeonSupport(void)
{
#ifdef __ANDROID__
if (android_getCpuFamily() != ANDROID_CPU_FAMILY_ARM) return 0;
@@ -164,7 +164,9 @@ static UINT32 androidNeon(void)
return PRIM_ARM_NEON_AVAILABLE;
}
}
- /* else */
+#elif defined(__APPLE)
+ /* assume NEON support on iOS devices */
+ return PRIM_ARM_NEON_AVAILABLE;
#endif
return 0;
}
@@ -172,7 +174,7 @@ static UINT32 androidNeon(void)
static void set_hints(primitives_hints_t* hints)
{
/* ARM: TODO */
- hints->arm_flags |= androidNeon();
+ hints->arm_flags |= getNeonSupport();
}
#else
diff --git a/libfreerdp/primitives/test/CMakeLists.txt b/libfreerdp/primitives/test/CMakeLists.txt
index 49e1f2d3a..a39ab86bd 100644
--- a/libfreerdp/primitives/test/CMakeLists.txt
+++ b/libfreerdp/primitives/test/CMakeLists.txt
@@ -85,7 +85,7 @@ if(WITH_SSE2)
endif()
elseif(WITH_NEON)
if(CMAKE_COMPILER_IS_GNUCC)
- set(OPTIMZATION "${OPTFLAGS} -mfpu=neon -mfloat-abi=softfp -O2")
+ set(OPTIMZATION "${OPTFLAGS} -mfpu=neon -mfloat-abi=${ARM_FP_ABI} -O2")
endif()
# TODO: Add MSVC equivalent
endif()
diff --git a/server/Sample/sfreerdp.c b/server/Sample/sfreerdp.c
index 680be7d87..087d444cf 100644
--- a/server/Sample/sfreerdp.c
+++ b/server/Sample/sfreerdp.c
@@ -655,6 +655,7 @@ static void* test_peer_mainloop(void* arg)
client->settings->PrivateKeyFile = _strdup("server.key");
client->settings->NlaSecurity = FALSE;
client->settings->RemoteFxCodec = TRUE;
+ client->settings->ColorDepth = 32;
client->settings->SuppressOutput = TRUE;
client->settings->RefreshRect = TRUE;