From c4a4822bd38d7ebe6a387fc3618a258a1424a045 Mon Sep 17 00:00:00 2001 From: Martin Fleisz Date: Fri, 15 Feb 2013 02:22:28 -0800 Subject: [PATCH 01/29] Reorganizing into library project --- client/Android/FreeRDPCore/.classpath | 8 + client/Android/FreeRDPCore/.project | 33 ++++ .../Android/{ => FreeRDPCore}/CMakeLists.txt | 0 .../assets/about_page/FreeRDP_Logo.png | Bin .../assets/about_page/about.html | 0 .../assets/about_page/about_phone.html | 0 .../assets/about_page/back.jpg | Bin .../about_page/background_transparent.png | Bin .../assets/help_page/back.jpg | Bin .../assets/help_page/gestures.html | 0 .../assets/help_page/gestures.png | Bin .../assets/help_page/gestures_phone.html | 0 .../assets/help_page/gestures_phone.png | Bin .../assets/help_page/nav_gestures.png | Bin .../assets/help_page/nav_toolbar.png | Bin .../assets/help_page/nav_touch_pointer.png | Bin .../assets/help_page/toolbar.html | 0 .../assets/help_page/toolbar.png | Bin .../assets/help_page/toolbar_phone.html | 0 .../assets/help_page/toolbar_phone.png | Bin .../assets/help_page/touch_pointer.html | 0 .../assets/help_page/touch_pointer.png | Bin .../assets/help_page/touch_pointer_phone.html | 0 .../assets/help_page/touch_pointer_phone.png | Bin .../assets/welcome_page/1.png | Bin .../assets/welcome_page/2.png | Bin .../assets/welcome_page/back.jpg | Bin .../assets/welcome_page/new_connection.png | Bin .../assets/welcome_page/welcome.html | 0 .../assets/welcome_page/welcome_phone.html | 0 .../{ => FreeRDPCore}/jni/CMakeLists.txt | 0 .../{ => FreeRDPCore}/jni/android_debug.h | 0 .../{ => FreeRDPCore}/jni/android_event.c | 0 .../{ => FreeRDPCore}/jni/android_event.h | 0 .../{ => FreeRDPCore}/jni/android_freerdp.c | 0 .../{ => FreeRDPCore}/jni/android_freerdp.h | 0 .../jni/android_jni_callback.c | 0 .../jni/android_jni_callback.h | 0 .../jni/generated/android_freerdp_jni.c | 28 +-- .../jni/generated/android_freerdp_jni.h | 2 +- ...com_freerdp_afreerdp_services_LibFreeRDP.h | 28 +-- .../Android/FreeRDPCore/proguard-project.txt | 20 ++ client/Android/FreeRDPCore/project.properties | 15 ++ .../res/drawable-hdpi/icon_button_add.png | Bin .../res/drawable-hdpi/icon_edittext_clear.png | Bin .../drawable-hdpi/icon_edittext_search.png | Bin .../drawable-hdpi/icon_launcher_freerdp.png | Bin .../res/drawable-hdpi/icon_menu_about.png | Bin .../res/drawable-hdpi/icon_menu_add.png | Bin .../res/drawable-hdpi/icon_menu_close.png | Bin .../drawable-hdpi/icon_menu_disconnect.png | Bin .../drawable-hdpi/icon_menu_ext_keyboard.png | Bin .../res/drawable-hdpi/icon_menu_help.png | Bin .../drawable-hdpi/icon_menu_preferences.png | Bin .../res/drawable-hdpi/icon_menu_settings.png | Bin .../drawable-hdpi/icon_menu_sys_keyboard.png | Bin .../drawable-hdpi/icon_menu_touch_pointer.png | Bin .../res/drawable-hdpi/icon_star_off.png | Bin .../res/drawable-hdpi/icon_star_on.png | Bin .../res/drawable-hdpi/search_plate.9.png | Bin .../res/drawable-hdpi/sym_keyboard_delete.png | Bin .../sym_keyboard_feedback_delete.png | Bin .../sym_keyboard_feedback_return.png | Bin .../res/drawable-hdpi/sym_keyboard_return.png | Bin .../res/drawable-ldpi/icon_button_add.png | Bin .../drawable-ldpi/icon_edittext_search.png | Bin .../drawable-ldpi/icon_launcher_freerdp.png | Bin .../res/drawable-ldpi/icon_menu_about.png | Bin .../res/drawable-ldpi/icon_menu_add.png | Bin .../drawable-ldpi/icon_menu_disconnect.png | Bin .../res/drawable-ldpi/icon_menu_exit.png | Bin .../drawable-ldpi/icon_menu_ext_keyboard.png | Bin .../res/drawable-ldpi/icon_menu_help.png | Bin .../drawable-ldpi/icon_menu_preferences.png | Bin .../res/drawable-ldpi/icon_menu_settings.png | Bin .../drawable-ldpi/icon_menu_sys_keyboard.png | Bin .../drawable-ldpi/icon_menu_touch_pointer.png | Bin .../res/drawable-ldpi/icon_star_off.png | Bin .../res/drawable-ldpi/icon_star_on.png | Bin .../res/drawable-ldpi/search_plate.9.png | Bin .../res/drawable-ldpi/sym_keyboard_delete.png | Bin .../sym_keyboard_feedback_delete.png | Bin .../sym_keyboard_feedback_return.png | Bin .../res/drawable-ldpi/sym_keyboard_return.png | Bin .../res/drawable-mdpi/icon_button_add.png | Bin .../res/drawable-mdpi/icon_edittext_clear.png | Bin .../drawable-mdpi/icon_edittext_search.png | Bin .../drawable-mdpi/icon_launcher_freerdp.png | Bin .../res/drawable-mdpi/icon_menu_about.png | Bin .../res/drawable-mdpi/icon_menu_add.png | Bin .../drawable-mdpi/icon_menu_disconnect.png | Bin .../res/drawable-mdpi/icon_menu_exit.png | Bin .../drawable-mdpi/icon_menu_ext_keyboard.png | Bin .../res/drawable-mdpi/icon_menu_help.png | Bin .../drawable-mdpi/icon_menu_preferences.png | Bin .../res/drawable-mdpi/icon_menu_settings.png | Bin .../drawable-mdpi/icon_menu_sys_keyboard.png | Bin .../drawable-mdpi/icon_menu_touch_pointer.png | Bin .../res/drawable-mdpi/icon_star_off.png | Bin .../res/drawable-mdpi/icon_star_on.png | Bin .../res/drawable-mdpi/search_plate.9.png | Bin .../res/drawable-mdpi/sym_keyboard_delete.png | Bin .../sym_keyboard_feedback_delete.png | Bin .../sym_keyboard_feedback_return.png | Bin .../res/drawable-mdpi/sym_keyboard_return.png | Bin .../res/drawable/button_background.xml | 0 .../res/drawable/icon_button_cancel.png | Bin .../res/drawable/icon_launcher_freerdp.png | Bin .../res/drawable/separator_background.xml | 0 .../res/drawable/sym_keyboard_arrows.png | Bin .../drawable/sym_keyboard_arrows_black.png | Bin .../res/drawable/sym_keyboard_down_arrow.png | Bin .../sym_keyboard_down_arrow_black.png | Bin .../res/drawable/sym_keyboard_left_arrow.png | Bin .../sym_keyboard_left_arrow_black.png | Bin .../res/drawable/sym_keyboard_menu.png | Bin .../res/drawable/sym_keyboard_menu_black.png | Bin .../res/drawable/sym_keyboard_right_arrow.png | Bin .../sym_keyboard_right_arrow_black.png | Bin .../res/drawable/sym_keyboard_up_arrow.png | Bin .../drawable/sym_keyboard_up_arrow_black.png | Bin .../res/drawable/sym_keyboard_winkey.png | Bin .../drawable/sym_keyboard_winkey_black.png | Bin .../res/drawable/touch_pointer_active.png | Bin .../res/drawable/touch_pointer_default.png | Bin .../drawable/touch_pointer_extkeyboard.png | Bin .../res/drawable/touch_pointer_keyboard.png | Bin .../res/drawable/touch_pointer_lclick.png | Bin .../res/drawable/touch_pointer_rclick.png | Bin .../res/drawable/touch_pointer_reset.png | Bin .../res/drawable/touch_pointer_scroll.png | Bin .../res/layout/bookmark_list_item.xml | 0 .../res/layout/button_preference.xml | 0 .../res/layout/credentials.xml | 0 .../res/layout/dont_show_again_dialog.xml | 0 .../{ => FreeRDPCore}/res/layout/home.xml | 0 .../res/layout/list_header.xml | 0 .../{ => FreeRDPCore}/res/layout/session.xml | 0 .../res/layout/session_list_item.xml | 0 .../res/layout/super_bar.xml | 0 .../res/menu/bookmark_context_menu.xml | 0 .../{ => FreeRDPCore}/res/menu/home_menu.xml | 2 +- .../res/menu/session_menu.xml | 0 .../res/values-land/dimens.xml | 0 .../{ => FreeRDPCore}/res/values/attrs.xml | 0 .../{ => FreeRDPCore}/res/values/dimens.xml | 0 .../{ => FreeRDPCore}/res/values/integers.xml | 0 .../{ => FreeRDPCore}/res/values/strings.xml | 0 .../{ => FreeRDPCore}/res/values/theme.xml | 0 .../res/xml/advanced_settings.xml | 0 .../res/xml/application_settings.xml | 2 +- .../res/xml/bookmark_settings.xml | 2 +- .../res/xml/credentials_settings.xml | 0 .../res/xml/cursor_keyboard.xml | 0 .../res/xml/modifiers_keyboard.xml | 0 .../res/xml/numpad_keyboard.xml | 0 .../res/xml/performance_flags.xml | 0 .../res/xml/performance_flags_3g.xml | 0 .../res/xml/screen_settings.xml | 2 +- .../res/xml/screen_settings_3g.xml | 2 +- .../{ => FreeRDPCore}/res/xml/searchable.xml | 0 .../res/xml/specialkeys_keyboard.xml | 0 .../freerdpcore}/application/GlobalApp.java | 16 +- .../application/GlobalSettings.java | 2 +- .../application/NetworkStateReceiver.java | 2 +- .../application/ScreenReceiver.java | 2 +- .../application/SessionState.java | 6 +- .../freerdpcore}/domain/BookmarkBase.java | 4 +- .../domain/ConnectionReference.java | 2 +- .../freerdpcore}/domain/ManualBookmark.java | 2 +- .../domain/PlaceholderBookmark.java | 2 +- .../domain/QuickConnectBookmark.java | 2 +- .../presentation/AboutActivity.java | 4 +- .../ApplicationSettingsActivity.java | 4 +- .../presentation/BookmarkActivity.java | 14 +- .../presentation/HelpActivity.java | 2 +- .../presentation/HomeActivity.java | 163 ++++++++-------- .../presentation/ScrollView2D.java | 2 +- .../presentation/SessionActivity.java | 77 ++++---- .../presentation/SessionView.java | 8 +- .../presentation/ShortcutsActivity.java | 12 +- .../presentation/TouchPointerView.java | 6 +- .../services/BookmarkBaseGateway.java | 4 +- .../freerdpcore}/services/BookmarkDB.java | 2 +- .../services/FreeRDPSuggestionProvider.java | 12 +- .../freerdpcore}/services/HistoryDB.java | 2 +- .../freerdpcore}/services/LibFreeRDP.java | 10 +- .../services/ManualBookmarkGateway.java | 6 +- .../services/QuickConnectHistoryGateway.java | 6 +- .../SessionRequestHandlerActivity.java | 8 +- .../utils/BookmarkArrayAdapter.java | 14 +- .../freerdpcore}/utils/ButtonPreference.java | 4 +- .../utils/DoubleGestureDetector.java | 4 +- .../freerdpcore}/utils/GestureDetector.java | 2 +- .../utils/IntEditTextPreference.java | 4 +- .../freerdpcore}/utils/IntListPreference.java | 2 +- .../freerdpcore}/utils/KeyboardMapper.java | 4 +- .../com/freerdp/freerdpcore}/utils/Mouse.java | 4 +- .../utils/SeparatedListAdapter.java | 4 +- client/Android/aFreeRDP/.classpath | 8 + client/Android/aFreeRDP/.project | 33 ++++ .../{ => aFreeRDP}/AndroidManifest.xml.cmake | 0 client/Android/aFreeRDP/CMakeLists.txt | 64 +++++++ client/Android/{ => aFreeRDP}/build.xml | 0 client/Android/aFreeRDP/lint.xml | 3 + .../{ => aFreeRDP}/local.properties.cmake | 0 .../Android/{ => aFreeRDP}/project.properties | 1 + .../drawable-hdpi/icon_launcher_freerdp.png | Bin 0 -> 8832 bytes .../drawable-ldpi/icon_launcher_freerdp.png | Bin 0 -> 6946 bytes .../drawable-mdpi/icon_launcher_freerdp.png | Bin 0 -> 7653 bytes .../res/drawable/button_background.xml | 61 ++++++ .../res/drawable/icon_launcher_freerdp.png | Bin 0 -> 10166 bytes .../res/drawable/separator_background.xml | 13 ++ client/Android/aFreeRDP/res/values/dimens.xml | 4 + .../Android/aFreeRDP/res/values/integers.xml | 72 +++++++ .../Android/aFreeRDP/res/values/strings.xml | 179 ++++++++++++++++++ client/Android/aFreeRDP/res/values/theme.xml | 57 ++++++ .../Android/aFreeRDP/res/xml/searchable.xml | 26 +++ .../afreerdp/application/GlobalApp.java | 6 + 219 files changed, 839 insertions(+), 256 deletions(-) create mode 100644 client/Android/FreeRDPCore/.classpath create mode 100644 client/Android/FreeRDPCore/.project rename client/Android/{ => FreeRDPCore}/CMakeLists.txt (100%) rename client/Android/{ => FreeRDPCore}/assets/about_page/FreeRDP_Logo.png (100%) rename client/Android/{ => FreeRDPCore}/assets/about_page/about.html (100%) rename client/Android/{ => FreeRDPCore}/assets/about_page/about_phone.html (100%) rename client/Android/{ => FreeRDPCore}/assets/about_page/back.jpg (100%) rename client/Android/{ => FreeRDPCore}/assets/about_page/background_transparent.png (100%) rename client/Android/{ => FreeRDPCore}/assets/help_page/back.jpg (100%) rename client/Android/{ => FreeRDPCore}/assets/help_page/gestures.html (100%) rename client/Android/{ => FreeRDPCore}/assets/help_page/gestures.png (100%) rename client/Android/{ => FreeRDPCore}/assets/help_page/gestures_phone.html (100%) rename client/Android/{ => FreeRDPCore}/assets/help_page/gestures_phone.png (100%) rename client/Android/{ => FreeRDPCore}/assets/help_page/nav_gestures.png (100%) rename client/Android/{ => FreeRDPCore}/assets/help_page/nav_toolbar.png (100%) rename client/Android/{ => FreeRDPCore}/assets/help_page/nav_touch_pointer.png (100%) rename client/Android/{ => FreeRDPCore}/assets/help_page/toolbar.html (100%) rename client/Android/{ => FreeRDPCore}/assets/help_page/toolbar.png (100%) rename client/Android/{ => FreeRDPCore}/assets/help_page/toolbar_phone.html (100%) rename client/Android/{ => FreeRDPCore}/assets/help_page/toolbar_phone.png (100%) rename client/Android/{ => FreeRDPCore}/assets/help_page/touch_pointer.html (100%) rename client/Android/{ => FreeRDPCore}/assets/help_page/touch_pointer.png (100%) rename client/Android/{ => FreeRDPCore}/assets/help_page/touch_pointer_phone.html (100%) rename client/Android/{ => FreeRDPCore}/assets/help_page/touch_pointer_phone.png (100%) rename client/Android/{ => FreeRDPCore}/assets/welcome_page/1.png (100%) rename client/Android/{ => FreeRDPCore}/assets/welcome_page/2.png (100%) rename client/Android/{ => FreeRDPCore}/assets/welcome_page/back.jpg (100%) rename client/Android/{ => FreeRDPCore}/assets/welcome_page/new_connection.png (100%) rename client/Android/{ => FreeRDPCore}/assets/welcome_page/welcome.html (100%) rename client/Android/{ => FreeRDPCore}/assets/welcome_page/welcome_phone.html (100%) rename client/Android/{ => FreeRDPCore}/jni/CMakeLists.txt (100%) rename client/Android/{ => FreeRDPCore}/jni/android_debug.h (100%) rename client/Android/{ => FreeRDPCore}/jni/android_event.c (100%) rename client/Android/{ => FreeRDPCore}/jni/android_event.h (100%) rename client/Android/{ => FreeRDPCore}/jni/android_freerdp.c (100%) rename client/Android/{ => FreeRDPCore}/jni/android_freerdp.h (100%) rename client/Android/{ => FreeRDPCore}/jni/android_jni_callback.c (100%) rename client/Android/{ => FreeRDPCore}/jni/android_jni_callback.h (100%) rename client/Android/{ => FreeRDPCore}/jni/generated/android_freerdp_jni.c (59%) rename client/Android/{ => FreeRDPCore}/jni/generated/android_freerdp_jni.h (91%) rename client/Android/{ => FreeRDPCore}/jni/generated/com_freerdp_afreerdp_services_LibFreeRDP.h (67%) create mode 100644 client/Android/FreeRDPCore/proguard-project.txt create mode 100644 client/Android/FreeRDPCore/project.properties rename client/Android/{ => FreeRDPCore}/res/drawable-hdpi/icon_button_add.png (100%) rename client/Android/{ => FreeRDPCore}/res/drawable-hdpi/icon_edittext_clear.png (100%) rename client/Android/{ => FreeRDPCore}/res/drawable-hdpi/icon_edittext_search.png (100%) rename client/Android/{ => FreeRDPCore}/res/drawable-hdpi/icon_launcher_freerdp.png (100%) rename client/Android/{ => FreeRDPCore}/res/drawable-hdpi/icon_menu_about.png (100%) rename client/Android/{ => FreeRDPCore}/res/drawable-hdpi/icon_menu_add.png (100%) rename client/Android/{ => FreeRDPCore}/res/drawable-hdpi/icon_menu_close.png (100%) rename client/Android/{ => FreeRDPCore}/res/drawable-hdpi/icon_menu_disconnect.png (100%) rename client/Android/{ => FreeRDPCore}/res/drawable-hdpi/icon_menu_ext_keyboard.png (100%) rename client/Android/{ => FreeRDPCore}/res/drawable-hdpi/icon_menu_help.png (100%) rename client/Android/{ => FreeRDPCore}/res/drawable-hdpi/icon_menu_preferences.png (100%) rename client/Android/{ => FreeRDPCore}/res/drawable-hdpi/icon_menu_settings.png (100%) rename client/Android/{ => FreeRDPCore}/res/drawable-hdpi/icon_menu_sys_keyboard.png (100%) rename client/Android/{ => FreeRDPCore}/res/drawable-hdpi/icon_menu_touch_pointer.png (100%) rename client/Android/{ => FreeRDPCore}/res/drawable-hdpi/icon_star_off.png (100%) rename client/Android/{ => FreeRDPCore}/res/drawable-hdpi/icon_star_on.png (100%) rename client/Android/{ => FreeRDPCore}/res/drawable-hdpi/search_plate.9.png (100%) rename client/Android/{ => FreeRDPCore}/res/drawable-hdpi/sym_keyboard_delete.png (100%) rename client/Android/{ => FreeRDPCore}/res/drawable-hdpi/sym_keyboard_feedback_delete.png (100%) rename client/Android/{ => FreeRDPCore}/res/drawable-hdpi/sym_keyboard_feedback_return.png (100%) rename client/Android/{ => FreeRDPCore}/res/drawable-hdpi/sym_keyboard_return.png (100%) rename client/Android/{ => FreeRDPCore}/res/drawable-ldpi/icon_button_add.png (100%) rename client/Android/{ => FreeRDPCore}/res/drawable-ldpi/icon_edittext_search.png (100%) rename client/Android/{ => FreeRDPCore}/res/drawable-ldpi/icon_launcher_freerdp.png (100%) rename client/Android/{ => FreeRDPCore}/res/drawable-ldpi/icon_menu_about.png (100%) rename client/Android/{ => FreeRDPCore}/res/drawable-ldpi/icon_menu_add.png (100%) rename client/Android/{ => FreeRDPCore}/res/drawable-ldpi/icon_menu_disconnect.png (100%) rename client/Android/{ => FreeRDPCore}/res/drawable-ldpi/icon_menu_exit.png (100%) rename client/Android/{ => FreeRDPCore}/res/drawable-ldpi/icon_menu_ext_keyboard.png (100%) rename client/Android/{ => FreeRDPCore}/res/drawable-ldpi/icon_menu_help.png (100%) rename client/Android/{ => FreeRDPCore}/res/drawable-ldpi/icon_menu_preferences.png (100%) rename client/Android/{ => FreeRDPCore}/res/drawable-ldpi/icon_menu_settings.png (100%) rename client/Android/{ => FreeRDPCore}/res/drawable-ldpi/icon_menu_sys_keyboard.png (100%) rename client/Android/{ => FreeRDPCore}/res/drawable-ldpi/icon_menu_touch_pointer.png (100%) rename client/Android/{ => FreeRDPCore}/res/drawable-ldpi/icon_star_off.png (100%) rename client/Android/{ => FreeRDPCore}/res/drawable-ldpi/icon_star_on.png (100%) rename client/Android/{ => FreeRDPCore}/res/drawable-ldpi/search_plate.9.png (100%) rename client/Android/{ => FreeRDPCore}/res/drawable-ldpi/sym_keyboard_delete.png (100%) rename client/Android/{ => FreeRDPCore}/res/drawable-ldpi/sym_keyboard_feedback_delete.png (100%) rename client/Android/{ => FreeRDPCore}/res/drawable-ldpi/sym_keyboard_feedback_return.png (100%) rename client/Android/{ => FreeRDPCore}/res/drawable-ldpi/sym_keyboard_return.png (100%) rename client/Android/{ => FreeRDPCore}/res/drawable-mdpi/icon_button_add.png (100%) rename client/Android/{ => FreeRDPCore}/res/drawable-mdpi/icon_edittext_clear.png (100%) rename client/Android/{ => FreeRDPCore}/res/drawable-mdpi/icon_edittext_search.png (100%) rename client/Android/{ => FreeRDPCore}/res/drawable-mdpi/icon_launcher_freerdp.png (100%) rename client/Android/{ => FreeRDPCore}/res/drawable-mdpi/icon_menu_about.png (100%) rename client/Android/{ => FreeRDPCore}/res/drawable-mdpi/icon_menu_add.png (100%) rename client/Android/{ => FreeRDPCore}/res/drawable-mdpi/icon_menu_disconnect.png (100%) rename client/Android/{ => FreeRDPCore}/res/drawable-mdpi/icon_menu_exit.png (100%) rename client/Android/{ => FreeRDPCore}/res/drawable-mdpi/icon_menu_ext_keyboard.png (100%) rename client/Android/{ => FreeRDPCore}/res/drawable-mdpi/icon_menu_help.png (100%) rename client/Android/{ => FreeRDPCore}/res/drawable-mdpi/icon_menu_preferences.png (100%) rename client/Android/{ => FreeRDPCore}/res/drawable-mdpi/icon_menu_settings.png (100%) rename client/Android/{ => FreeRDPCore}/res/drawable-mdpi/icon_menu_sys_keyboard.png (100%) rename client/Android/{ => FreeRDPCore}/res/drawable-mdpi/icon_menu_touch_pointer.png (100%) rename client/Android/{ => FreeRDPCore}/res/drawable-mdpi/icon_star_off.png (100%) rename client/Android/{ => FreeRDPCore}/res/drawable-mdpi/icon_star_on.png (100%) rename client/Android/{ => FreeRDPCore}/res/drawable-mdpi/search_plate.9.png (100%) rename client/Android/{ => FreeRDPCore}/res/drawable-mdpi/sym_keyboard_delete.png (100%) rename client/Android/{ => FreeRDPCore}/res/drawable-mdpi/sym_keyboard_feedback_delete.png (100%) rename client/Android/{ => FreeRDPCore}/res/drawable-mdpi/sym_keyboard_feedback_return.png (100%) rename client/Android/{ => FreeRDPCore}/res/drawable-mdpi/sym_keyboard_return.png (100%) rename client/Android/{ => FreeRDPCore}/res/drawable/button_background.xml (100%) rename client/Android/{ => FreeRDPCore}/res/drawable/icon_button_cancel.png (100%) rename client/Android/{ => FreeRDPCore}/res/drawable/icon_launcher_freerdp.png (100%) rename client/Android/{ => FreeRDPCore}/res/drawable/separator_background.xml (100%) rename client/Android/{ => FreeRDPCore}/res/drawable/sym_keyboard_arrows.png (100%) rename client/Android/{ => FreeRDPCore}/res/drawable/sym_keyboard_arrows_black.png (100%) rename client/Android/{ => FreeRDPCore}/res/drawable/sym_keyboard_down_arrow.png (100%) rename client/Android/{ => FreeRDPCore}/res/drawable/sym_keyboard_down_arrow_black.png (100%) rename client/Android/{ => FreeRDPCore}/res/drawable/sym_keyboard_left_arrow.png (100%) rename client/Android/{ => FreeRDPCore}/res/drawable/sym_keyboard_left_arrow_black.png (100%) rename client/Android/{ => FreeRDPCore}/res/drawable/sym_keyboard_menu.png (100%) rename client/Android/{ => FreeRDPCore}/res/drawable/sym_keyboard_menu_black.png (100%) rename client/Android/{ => FreeRDPCore}/res/drawable/sym_keyboard_right_arrow.png (100%) rename client/Android/{ => FreeRDPCore}/res/drawable/sym_keyboard_right_arrow_black.png (100%) rename client/Android/{ => FreeRDPCore}/res/drawable/sym_keyboard_up_arrow.png (100%) rename client/Android/{ => FreeRDPCore}/res/drawable/sym_keyboard_up_arrow_black.png (100%) rename client/Android/{ => FreeRDPCore}/res/drawable/sym_keyboard_winkey.png (100%) rename client/Android/{ => FreeRDPCore}/res/drawable/sym_keyboard_winkey_black.png (100%) rename client/Android/{ => FreeRDPCore}/res/drawable/touch_pointer_active.png (100%) rename client/Android/{ => FreeRDPCore}/res/drawable/touch_pointer_default.png (100%) rename client/Android/{ => FreeRDPCore}/res/drawable/touch_pointer_extkeyboard.png (100%) rename client/Android/{ => FreeRDPCore}/res/drawable/touch_pointer_keyboard.png (100%) rename client/Android/{ => FreeRDPCore}/res/drawable/touch_pointer_lclick.png (100%) rename client/Android/{ => FreeRDPCore}/res/drawable/touch_pointer_rclick.png (100%) rename client/Android/{ => FreeRDPCore}/res/drawable/touch_pointer_reset.png (100%) rename client/Android/{ => FreeRDPCore}/res/drawable/touch_pointer_scroll.png (100%) rename client/Android/{ => FreeRDPCore}/res/layout/bookmark_list_item.xml (100%) rename client/Android/{ => FreeRDPCore}/res/layout/button_preference.xml (100%) rename client/Android/{ => FreeRDPCore}/res/layout/credentials.xml (100%) rename client/Android/{ => FreeRDPCore}/res/layout/dont_show_again_dialog.xml (100%) rename client/Android/{ => FreeRDPCore}/res/layout/home.xml (100%) rename client/Android/{ => FreeRDPCore}/res/layout/list_header.xml (100%) rename client/Android/{ => FreeRDPCore}/res/layout/session.xml (100%) rename client/Android/{ => FreeRDPCore}/res/layout/session_list_item.xml (100%) rename client/Android/{ => FreeRDPCore}/res/layout/super_bar.xml (100%) rename client/Android/{ => FreeRDPCore}/res/menu/bookmark_context_menu.xml (100%) rename client/Android/{ => FreeRDPCore}/res/menu/home_menu.xml (99%) rename client/Android/{ => FreeRDPCore}/res/menu/session_menu.xml (100%) rename client/Android/{ => FreeRDPCore}/res/values-land/dimens.xml (100%) rename client/Android/{ => FreeRDPCore}/res/values/attrs.xml (100%) rename client/Android/{ => FreeRDPCore}/res/values/dimens.xml (100%) rename client/Android/{ => FreeRDPCore}/res/values/integers.xml (100%) rename client/Android/{ => FreeRDPCore}/res/values/strings.xml (100%) rename client/Android/{ => FreeRDPCore}/res/values/theme.xml (100%) rename client/Android/{ => FreeRDPCore}/res/xml/advanced_settings.xml (100%) rename client/Android/{ => FreeRDPCore}/res/xml/application_settings.xml (95%) rename client/Android/{ => FreeRDPCore}/res/xml/bookmark_settings.xml (97%) rename client/Android/{ => FreeRDPCore}/res/xml/credentials_settings.xml (100%) rename client/Android/{ => FreeRDPCore}/res/xml/cursor_keyboard.xml (100%) rename client/Android/{ => FreeRDPCore}/res/xml/modifiers_keyboard.xml (100%) rename client/Android/{ => FreeRDPCore}/res/xml/numpad_keyboard.xml (100%) rename client/Android/{ => FreeRDPCore}/res/xml/performance_flags.xml (100%) rename client/Android/{ => FreeRDPCore}/res/xml/performance_flags_3g.xml (100%) rename client/Android/{ => FreeRDPCore}/res/xml/screen_settings.xml (94%) rename client/Android/{ => FreeRDPCore}/res/xml/screen_settings_3g.xml (94%) rename client/Android/{ => FreeRDPCore}/res/xml/searchable.xml (100%) rename client/Android/{ => FreeRDPCore}/res/xml/specialkeys_keyboard.xml (100%) rename client/Android/{src/com/freerdp/afreerdp => FreeRDPCore/src/com/freerdp/freerdpcore}/application/GlobalApp.java (93%) rename client/Android/{src/com/freerdp/afreerdp => FreeRDPCore/src/com/freerdp/freerdpcore}/application/GlobalSettings.java (98%) rename client/Android/{src/com/freerdp/afreerdp => FreeRDPCore/src/com/freerdp/freerdpcore}/application/NetworkStateReceiver.java (97%) rename client/Android/{src/com/freerdp/afreerdp => FreeRDPCore/src/com/freerdp/freerdpcore}/application/ScreenReceiver.java (95%) rename client/Android/{src/com/freerdp/afreerdp => FreeRDPCore/src/com/freerdp/freerdpcore}/application/SessionState.java (93%) rename client/Android/{src/com/freerdp/afreerdp => FreeRDPCore/src/com/freerdp/freerdpcore}/domain/BookmarkBase.java (99%) rename client/Android/{src/com/freerdp/afreerdp => FreeRDPCore/src/com/freerdp/freerdpcore}/domain/ConnectionReference.java (97%) rename client/Android/{src/com/freerdp/afreerdp => FreeRDPCore/src/com/freerdp/freerdpcore}/domain/ManualBookmark.java (98%) rename client/Android/{src/com/freerdp/afreerdp => FreeRDPCore/src/com/freerdp/freerdpcore}/domain/PlaceholderBookmark.java (97%) rename client/Android/{src/com/freerdp/afreerdp => FreeRDPCore/src/com/freerdp/freerdpcore}/domain/QuickConnectBookmark.java (97%) rename client/Android/{src/com/freerdp/afreerdp => FreeRDPCore/src/com/freerdp/freerdpcore}/presentation/AboutActivity.java (95%) rename client/Android/{src/com/freerdp/afreerdp => FreeRDPCore/src/com/freerdp/freerdpcore}/presentation/ApplicationSettingsActivity.java (97%) rename client/Android/{src/com/freerdp/afreerdp => FreeRDPCore/src/com/freerdp/freerdpcore}/presentation/BookmarkActivity.java (97%) rename client/Android/{src/com/freerdp/afreerdp => FreeRDPCore/src/com/freerdp/freerdpcore}/presentation/HelpActivity.java (95%) rename client/Android/{src/com/freerdp/afreerdp => FreeRDPCore/src/com/freerdp/freerdpcore}/presentation/HomeActivity.java (80%) rename client/Android/{src/com/freerdp/afreerdp => FreeRDPCore/src/com/freerdp/freerdpcore}/presentation/ScrollView2D.java (99%) rename client/Android/{src/com/freerdp/afreerdp => FreeRDPCore/src/com/freerdp/freerdpcore}/presentation/SessionActivity.java (95%) rename client/Android/{src/com/freerdp/afreerdp => FreeRDPCore/src/com/freerdp/freerdpcore}/presentation/SessionView.java (97%) rename client/Android/{src/com/freerdp/afreerdp => FreeRDPCore/src/com/freerdp/freerdpcore}/presentation/ShortcutsActivity.java (94%) rename client/Android/{src/com/freerdp/afreerdp => FreeRDPCore/src/com/freerdp/freerdpcore}/presentation/TouchPointerView.java (98%) rename client/Android/{src/com/freerdp/afreerdp => FreeRDPCore/src/com/freerdp/freerdpcore}/services/BookmarkBaseGateway.java (99%) rename client/Android/{src/com/freerdp/afreerdp => FreeRDPCore/src/com/freerdp/freerdpcore}/services/BookmarkDB.java (98%) rename client/Android/{src/com/freerdp/afreerdp => FreeRDPCore/src/com/freerdp/freerdpcore}/services/FreeRDPSuggestionProvider.java (92%) rename client/Android/{src/com/freerdp/afreerdp => FreeRDPCore/src/com/freerdp/freerdpcore}/services/HistoryDB.java (96%) rename client/Android/{src/com/freerdp/afreerdp => FreeRDPCore/src/com/freerdp/freerdpcore}/services/LibFreeRDP.java (96%) rename client/Android/{src/com/freerdp/afreerdp => FreeRDPCore/src/com/freerdp/freerdpcore}/services/ManualBookmarkGateway.java (93%) rename client/Android/{src/com/freerdp/afreerdp => FreeRDPCore/src/com/freerdp/freerdpcore}/services/QuickConnectHistoryGateway.java (95%) rename client/Android/{src/com/freerdp/afreerdp => FreeRDPCore/src/com/freerdp/freerdpcore}/services/SessionRequestHandlerActivity.java (90%) rename client/Android/{src/com/freerdp/afreerdp => FreeRDPCore/src/com/freerdp/freerdpcore}/utils/BookmarkArrayAdapter.java (91%) rename client/Android/{src/com/freerdp/afreerdp => FreeRDPCore/src/com/freerdp/freerdpcore}/utils/ButtonPreference.java (96%) rename client/Android/{src/com/freerdp/afreerdp => FreeRDPCore/src/com/freerdp/freerdpcore}/utils/DoubleGestureDetector.java (99%) rename client/Android/{src/com/freerdp/afreerdp => FreeRDPCore/src/com/freerdp/freerdpcore}/utils/GestureDetector.java (99%) rename client/Android/{src/com/freerdp/afreerdp => FreeRDPCore/src/com/freerdp/freerdpcore}/utils/IntEditTextPreference.java (97%) rename client/Android/{src/com/freerdp/afreerdp => FreeRDPCore/src/com/freerdp/freerdpcore}/utils/IntListPreference.java (95%) rename client/Android/{src/com/freerdp/afreerdp => FreeRDPCore/src/com/freerdp/freerdpcore}/utils/KeyboardMapper.java (99%) rename client/Android/{src/com/freerdp/afreerdp => FreeRDPCore/src/com/freerdp/freerdpcore}/utils/Mouse.java (93%) rename client/Android/{src/com/freerdp/afreerdp => FreeRDPCore/src/com/freerdp/freerdpcore}/utils/SeparatedListAdapter.java (98%) create mode 100644 client/Android/aFreeRDP/.classpath create mode 100644 client/Android/aFreeRDP/.project rename client/Android/{ => aFreeRDP}/AndroidManifest.xml.cmake (100%) create mode 100644 client/Android/aFreeRDP/CMakeLists.txt rename client/Android/{ => aFreeRDP}/build.xml (100%) create mode 100644 client/Android/aFreeRDP/lint.xml rename client/Android/{ => aFreeRDP}/local.properties.cmake (100%) rename client/Android/{ => aFreeRDP}/project.properties (89%) create mode 100644 client/Android/aFreeRDP/res/drawable-hdpi/icon_launcher_freerdp.png create mode 100644 client/Android/aFreeRDP/res/drawable-ldpi/icon_launcher_freerdp.png create mode 100644 client/Android/aFreeRDP/res/drawable-mdpi/icon_launcher_freerdp.png create mode 100644 client/Android/aFreeRDP/res/drawable/button_background.xml create mode 100644 client/Android/aFreeRDP/res/drawable/icon_launcher_freerdp.png create mode 100644 client/Android/aFreeRDP/res/drawable/separator_background.xml create mode 100644 client/Android/aFreeRDP/res/values/dimens.xml create mode 100644 client/Android/aFreeRDP/res/values/integers.xml create mode 100644 client/Android/aFreeRDP/res/values/strings.xml create mode 100644 client/Android/aFreeRDP/res/values/theme.xml create mode 100644 client/Android/aFreeRDP/res/xml/searchable.xml create mode 100644 client/Android/aFreeRDP/src/com/freerdp/afreerdp/application/GlobalApp.java 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/CMakeLists.txt b/client/Android/FreeRDPCore/CMakeLists.txt similarity index 100% rename from client/Android/CMakeLists.txt rename to client/Android/FreeRDPCore/CMakeLists.txt diff --git a/client/Android/assets/about_page/FreeRDP_Logo.png b/client/Android/FreeRDPCore/assets/about_page/FreeRDP_Logo.png similarity index 100% rename from client/Android/assets/about_page/FreeRDP_Logo.png rename to client/Android/FreeRDPCore/assets/about_page/FreeRDP_Logo.png diff --git a/client/Android/assets/about_page/about.html b/client/Android/FreeRDPCore/assets/about_page/about.html similarity index 100% rename from client/Android/assets/about_page/about.html rename to client/Android/FreeRDPCore/assets/about_page/about.html diff --git a/client/Android/assets/about_page/about_phone.html b/client/Android/FreeRDPCore/assets/about_page/about_phone.html similarity index 100% rename from client/Android/assets/about_page/about_phone.html rename to client/Android/FreeRDPCore/assets/about_page/about_phone.html diff --git a/client/Android/assets/about_page/back.jpg b/client/Android/FreeRDPCore/assets/about_page/back.jpg similarity index 100% rename from client/Android/assets/about_page/back.jpg rename to client/Android/FreeRDPCore/assets/about_page/back.jpg diff --git a/client/Android/assets/about_page/background_transparent.png b/client/Android/FreeRDPCore/assets/about_page/background_transparent.png similarity index 100% rename from client/Android/assets/about_page/background_transparent.png rename to client/Android/FreeRDPCore/assets/about_page/background_transparent.png diff --git a/client/Android/assets/help_page/back.jpg b/client/Android/FreeRDPCore/assets/help_page/back.jpg similarity index 100% rename from client/Android/assets/help_page/back.jpg rename to client/Android/FreeRDPCore/assets/help_page/back.jpg diff --git a/client/Android/assets/help_page/gestures.html b/client/Android/FreeRDPCore/assets/help_page/gestures.html similarity index 100% rename from client/Android/assets/help_page/gestures.html rename to client/Android/FreeRDPCore/assets/help_page/gestures.html diff --git a/client/Android/assets/help_page/gestures.png b/client/Android/FreeRDPCore/assets/help_page/gestures.png similarity index 100% rename from client/Android/assets/help_page/gestures.png rename to client/Android/FreeRDPCore/assets/help_page/gestures.png diff --git a/client/Android/assets/help_page/gestures_phone.html b/client/Android/FreeRDPCore/assets/help_page/gestures_phone.html similarity index 100% rename from client/Android/assets/help_page/gestures_phone.html rename to client/Android/FreeRDPCore/assets/help_page/gestures_phone.html diff --git a/client/Android/assets/help_page/gestures_phone.png b/client/Android/FreeRDPCore/assets/help_page/gestures_phone.png similarity index 100% rename from client/Android/assets/help_page/gestures_phone.png rename to client/Android/FreeRDPCore/assets/help_page/gestures_phone.png diff --git a/client/Android/assets/help_page/nav_gestures.png b/client/Android/FreeRDPCore/assets/help_page/nav_gestures.png similarity index 100% rename from client/Android/assets/help_page/nav_gestures.png rename to client/Android/FreeRDPCore/assets/help_page/nav_gestures.png diff --git a/client/Android/assets/help_page/nav_toolbar.png b/client/Android/FreeRDPCore/assets/help_page/nav_toolbar.png similarity index 100% rename from client/Android/assets/help_page/nav_toolbar.png rename to client/Android/FreeRDPCore/assets/help_page/nav_toolbar.png diff --git a/client/Android/assets/help_page/nav_touch_pointer.png b/client/Android/FreeRDPCore/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/FreeRDPCore/assets/help_page/nav_touch_pointer.png diff --git a/client/Android/assets/help_page/toolbar.html b/client/Android/FreeRDPCore/assets/help_page/toolbar.html similarity index 100% rename from client/Android/assets/help_page/toolbar.html rename to client/Android/FreeRDPCore/assets/help_page/toolbar.html diff --git a/client/Android/assets/help_page/toolbar.png b/client/Android/FreeRDPCore/assets/help_page/toolbar.png similarity index 100% rename from client/Android/assets/help_page/toolbar.png rename to client/Android/FreeRDPCore/assets/help_page/toolbar.png diff --git a/client/Android/assets/help_page/toolbar_phone.html b/client/Android/FreeRDPCore/assets/help_page/toolbar_phone.html similarity index 100% rename from client/Android/assets/help_page/toolbar_phone.html rename to client/Android/FreeRDPCore/assets/help_page/toolbar_phone.html diff --git a/client/Android/assets/help_page/toolbar_phone.png b/client/Android/FreeRDPCore/assets/help_page/toolbar_phone.png similarity index 100% rename from client/Android/assets/help_page/toolbar_phone.png rename to client/Android/FreeRDPCore/assets/help_page/toolbar_phone.png diff --git a/client/Android/assets/help_page/touch_pointer.html b/client/Android/FreeRDPCore/assets/help_page/touch_pointer.html similarity index 100% rename from client/Android/assets/help_page/touch_pointer.html rename to client/Android/FreeRDPCore/assets/help_page/touch_pointer.html diff --git a/client/Android/assets/help_page/touch_pointer.png b/client/Android/FreeRDPCore/assets/help_page/touch_pointer.png similarity index 100% rename from client/Android/assets/help_page/touch_pointer.png rename to client/Android/FreeRDPCore/assets/help_page/touch_pointer.png diff --git a/client/Android/assets/help_page/touch_pointer_phone.html b/client/Android/FreeRDPCore/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/FreeRDPCore/assets/help_page/touch_pointer_phone.html diff --git a/client/Android/assets/help_page/touch_pointer_phone.png b/client/Android/FreeRDPCore/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/FreeRDPCore/assets/help_page/touch_pointer_phone.png diff --git a/client/Android/assets/welcome_page/1.png b/client/Android/FreeRDPCore/assets/welcome_page/1.png similarity index 100% rename from client/Android/assets/welcome_page/1.png rename to client/Android/FreeRDPCore/assets/welcome_page/1.png diff --git a/client/Android/assets/welcome_page/2.png b/client/Android/FreeRDPCore/assets/welcome_page/2.png similarity index 100% rename from client/Android/assets/welcome_page/2.png rename to client/Android/FreeRDPCore/assets/welcome_page/2.png diff --git a/client/Android/assets/welcome_page/back.jpg b/client/Android/FreeRDPCore/assets/welcome_page/back.jpg similarity index 100% rename from client/Android/assets/welcome_page/back.jpg rename to client/Android/FreeRDPCore/assets/welcome_page/back.jpg diff --git a/client/Android/assets/welcome_page/new_connection.png b/client/Android/FreeRDPCore/assets/welcome_page/new_connection.png similarity index 100% rename from client/Android/assets/welcome_page/new_connection.png rename to client/Android/FreeRDPCore/assets/welcome_page/new_connection.png diff --git a/client/Android/assets/welcome_page/welcome.html b/client/Android/FreeRDPCore/assets/welcome_page/welcome.html similarity index 100% rename from client/Android/assets/welcome_page/welcome.html rename to client/Android/FreeRDPCore/assets/welcome_page/welcome.html diff --git a/client/Android/assets/welcome_page/welcome_phone.html b/client/Android/FreeRDPCore/assets/welcome_page/welcome_phone.html similarity index 100% rename from client/Android/assets/welcome_page/welcome_phone.html rename to client/Android/FreeRDPCore/assets/welcome_page/welcome_phone.html 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 100% rename from client/Android/jni/android_freerdp.c rename to client/Android/FreeRDPCore/jni/android_freerdp.c 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 91% rename from client/Android/jni/generated/android_freerdp_jni.h rename to client/Android/FreeRDPCore/jni/generated/android_freerdp_jni.h index a10d17cc6..fd5c82c32 100644 --- a/client/Android/jni/generated/android_freerdp_jni.h +++ b/client/Android/FreeRDPCore/jni/generated/android_freerdp_jni.h @@ -22,7 +22,7 @@ #include "com_freerdp_afreerdp_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/jni/generated/com_freerdp_afreerdp_services_LibFreeRDP.h b/client/Android/FreeRDPCore/jni/generated/com_freerdp_afreerdp_services_LibFreeRDP.h similarity index 67% rename from client/Android/jni/generated/com_freerdp_afreerdp_services_LibFreeRDP.h rename to client/Android/FreeRDPCore/jni/generated/com_freerdp_afreerdp_services_LibFreeRDP.h index cfe8d65f5..9d33c08dd 100644 --- a/client/Android/jni/generated/com_freerdp_afreerdp_services_LibFreeRDP.h +++ b/client/Android/FreeRDPCore/jni/generated/com_freerdp_afreerdp_services_LibFreeRDP.h @@ -12,7 +12,7 @@ extern "C" { * Method: freerdp_new * Signature: ()I */ -JNIEXPORT jint JNICALL Java_com_freerdp_afreerdp_services_LibFreeRDP_freerdp_1new +JNIEXPORT jint JNICALL Java_com_freerdp_freerdpcore_services_LibFreeRDP_freerdp_1new (JNIEnv *, jclass); /* @@ -20,7 +20,7 @@ JNIEXPORT jint JNICALL Java_com_freerdp_afreerdp_services_LibFreeRDP_freerdp_1ne * Method: freerdp_free * Signature: (I)V */ -JNIEXPORT void JNICALL Java_com_freerdp_afreerdp_services_LibFreeRDP_freerdp_1free +JNIEXPORT void JNICALL Java_com_freerdp_freerdpcore_services_LibFreeRDP_freerdp_1free (JNIEnv *, jclass, jint); /* @@ -28,7 +28,7 @@ JNIEXPORT void JNICALL Java_com_freerdp_afreerdp_services_LibFreeRDP_freerdp_1fr * Method: freerdp_connect * Signature: (I)Z */ -JNIEXPORT jboolean JNICALL Java_com_freerdp_afreerdp_services_LibFreeRDP_freerdp_1connect +JNIEXPORT jboolean JNICALL Java_com_freerdp_freerdpcore_services_LibFreeRDP_freerdp_1connect (JNIEnv *, jclass, jint); /* @@ -36,7 +36,7 @@ JNIEXPORT jboolean JNICALL Java_com_freerdp_afreerdp_services_LibFreeRDP_freerdp * Method: freerdp_disconnect * Signature: (I)Z */ -JNIEXPORT jboolean JNICALL Java_com_freerdp_afreerdp_services_LibFreeRDP_freerdp_1disconnect +JNIEXPORT jboolean JNICALL Java_com_freerdp_freerdpcore_services_LibFreeRDP_freerdp_1disconnect (JNIEnv *, jclass, jint); /* @@ -44,7 +44,7 @@ JNIEXPORT jboolean JNICALL Java_com_freerdp_afreerdp_services_LibFreeRDP_freerdp * Method: freerdp_cancel_connection * Signature: (I)V */ -JNIEXPORT void JNICALL Java_com_freerdp_afreerdp_services_LibFreeRDP_freerdp_1cancel_1connection +JNIEXPORT void JNICALL Java_com_freerdp_freerdpcore_services_LibFreeRDP_freerdp_1cancel_1connection (JNIEnv *, jclass, jint); /* @@ -52,7 +52,7 @@ JNIEXPORT void JNICALL Java_com_freerdp_afreerdp_services_LibFreeRDP_freerdp_1ca * 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 +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); /* @@ -60,7 +60,7 @@ JNIEXPORT void JNICALL Java_com_freerdp_afreerdp_services_LibFreeRDP_freerdp_1se * Method: freerdp_set_performance_flags * Signature: (IZZZZZZZ)V */ -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 *, jclass, jint, jboolean, jboolean, jboolean, jboolean, jboolean, jboolean, jboolean); /* @@ -68,7 +68,7 @@ JNIEXPORT void JNICALL Java_com_freerdp_afreerdp_services_LibFreeRDP_freerdp_1se * 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 +JNIEXPORT void JNICALL Java_com_freerdp_freerdpcore_services_LibFreeRDP_freerdp_1set_1advanced_1settings (JNIEnv *, jclass, jint, jstring, jstring); /* @@ -76,7 +76,7 @@ JNIEXPORT void JNICALL Java_com_freerdp_afreerdp_services_LibFreeRDP_freerdp_1se * Method: freerdp_set_data_directory * Signature: (ILjava/lang/String;)V */ -JNIEXPORT void JNICALL Java_com_freerdp_afreerdp_services_LibFreeRDP_freerdp_1set_1data_1directory +JNIEXPORT void JNICALL Java_com_freerdp_freerdpcore_services_LibFreeRDP_freerdp_1set_1data_1directory (JNIEnv *, jclass, jint, jstring); /* @@ -84,7 +84,7 @@ JNIEXPORT void JNICALL Java_com_freerdp_afreerdp_services_LibFreeRDP_freerdp_1se * Method: freerdp_update_graphics * Signature: (ILandroid/graphics/Bitmap;IIII)Z */ -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 *, jclass, jint, jobject, jint, jint, jint, jint); /* @@ -92,7 +92,7 @@ JNIEXPORT jboolean JNICALL Java_com_freerdp_afreerdp_services_LibFreeRDP_freerdp * Method: freerdp_send_cursor_event * Signature: (IIII)V */ -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 *, jclass, jint, jint, jint, jint); /* @@ -100,7 +100,7 @@ JNIEXPORT void JNICALL Java_com_freerdp_afreerdp_services_LibFreeRDP_freerdp_1se * Method: freerdp_send_key_event * Signature: (IIZ)V */ -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 *, jclass, jint, jint, jboolean); /* @@ -108,7 +108,7 @@ JNIEXPORT void JNICALL Java_com_freerdp_afreerdp_services_LibFreeRDP_freerdp_1se * Method: freerdp_send_unicodekey_event * Signature: (II)V */ -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 *, jclass, jint, jint); /* @@ -116,7 +116,7 @@ JNIEXPORT void JNICALL Java_com_freerdp_afreerdp_services_LibFreeRDP_freerdp_1se * Method: freerdp_get_version * Signature: ()Ljava/lang/String; */ -JNIEXPORT jstring JNICALL Java_com_freerdp_afreerdp_services_LibFreeRDP_freerdp_1get_1version +JNIEXPORT jstring JNICALL Java_com_freerdp_freerdpcore_services_LibFreeRDP_freerdp_1get_1version (JNIEnv *, jclass); #ifdef __cplusplus diff --git a/client/Android/FreeRDPCore/proguard-project.txt b/client/Android/FreeRDPCore/proguard-project.txt new file mode 100644 index 000000000..f2fe1559a --- /dev/null +++ b/client/Android/FreeRDPCore/proguard-project.txt @@ -0,0 +1,20 @@ +# To enable ProGuard in your project, edit project.properties +# to define the proguard.config property as described in that file. +# +# Add project specific ProGuard rules here. +# By default, the flags in this file are appended to flags specified +# in ${sdk.dir}/tools/proguard/proguard-android.txt +# You can edit the include path and order by changing the ProGuard +# include property in project.properties. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# Add any project specific keep options here: + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} 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 100% rename from client/Android/res/layout/session.xml rename to client/Android/FreeRDPCore/res/layout/session.xml diff --git a/client/Android/res/layout/session_list_item.xml b/client/Android/FreeRDPCore/res/layout/session_list_item.xml similarity index 100% rename from client/Android/res/layout/session_list_item.xml rename to client/Android/FreeRDPCore/res/layout/session_list_item.xml diff --git a/client/Android/res/layout/super_bar.xml b/client/Android/FreeRDPCore/res/layout/super_bar.xml similarity index 100% rename from client/Android/res/layout/super_bar.xml rename to client/Android/FreeRDPCore/res/layout/super_bar.xml diff --git a/client/Android/res/menu/bookmark_context_menu.xml b/client/Android/FreeRDPCore/res/menu/bookmark_context_menu.xml similarity index 100% rename from client/Android/res/menu/bookmark_context_menu.xml rename to client/Android/FreeRDPCore/res/menu/bookmark_context_menu.xml diff --git a/client/Android/res/menu/home_menu.xml b/client/Android/FreeRDPCore/res/menu/home_menu.xml similarity index 99% rename from client/Android/res/menu/home_menu.xml rename to client/Android/FreeRDPCore/res/menu/home_menu.xml index 6611b04d8..21fd280e8 100644 --- a/client/Android/res/menu/home_menu.xml +++ b/client/Android/FreeRDPCore/res/menu/home_menu.xml @@ -20,5 +20,5 @@ + /> 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 100% rename from client/Android/res/values/strings.xml rename to client/Android/FreeRDPCore/res/values/strings.xml 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 100% rename from client/Android/res/xml/advanced_settings.xml rename to client/Android/FreeRDPCore/res/xml/advanced_settings.xml diff --git a/client/Android/res/xml/application_settings.xml b/client/Android/FreeRDPCore/res/xml/application_settings.xml similarity index 95% rename from client/Android/res/xml/application_settings.xml rename to client/Android/FreeRDPCore/res/xml/application_settings.xml index 314b2acb9..4211650df 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/. */ --> - + diff --git a/client/Android/res/xml/bookmark_settings.xml b/client/Android/FreeRDPCore/res/xml/bookmark_settings.xml similarity index 97% rename from client/Android/res/xml/bookmark_settings.xml rename to client/Android/FreeRDPCore/res/xml/bookmark_settings.xml index 86df480ad..dcae89f3b 100644 --- a/client/Android/res/xml/bookmark_settings.xml +++ b/client/Android/FreeRDPCore/res/xml/bookmark_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/. */ --> - + 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.xml b/client/Android/FreeRDPCore/res/xml/screen_settings.xml similarity index 94% rename from client/Android/res/xml/screen_settings.xml rename to client/Android/FreeRDPCore/res/xml/screen_settings.xml index 589a35a8d..f684d1691 100644 --- a/client/Android/res/xml/screen_settings.xml +++ b/client/Android/FreeRDPCore/res/xml/screen_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/. */ --> - + diff --git a/client/Android/res/xml/screen_settings_3g.xml b/client/Android/FreeRDPCore/res/xml/screen_settings_3g.xml similarity index 94% rename from client/Android/res/xml/screen_settings_3g.xml rename to client/Android/FreeRDPCore/res/xml/screen_settings_3g.xml index de750855c..d34634e88 100644 --- a/client/Android/res/xml/screen_settings_3g.xml +++ b/client/Android/FreeRDPCore/res/xml/screen_settings_3g.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/. */ --> - + diff --git a/client/Android/res/xml/searchable.xml b/client/Android/FreeRDPCore/res/xml/searchable.xml similarity index 100% rename from client/Android/res/xml/searchable.xml rename to client/Android/FreeRDPCore/res/xml/searchable.xml 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 97% 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..ce5a830a2 100644 --- a/client/Android/src/com/freerdp/afreerdp/presentation/BookmarkActivity.java +++ b/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/presentation/BookmarkActivity.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 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.DialogInterface; 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 98% 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..4f209a299 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; 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/AndroidManifest.xml.cmake b/client/Android/aFreeRDP/AndroidManifest.xml.cmake similarity index 100% rename from client/Android/AndroidManifest.xml.cmake rename to client/Android/aFreeRDP/AndroidManifest.xml.cmake diff --git a/client/Android/aFreeRDP/CMakeLists.txt b/client/Android/aFreeRDP/CMakeLists.txt new file mode 100644 index 000000000..bf543ed2e --- /dev/null +++ b/client/Android/aFreeRDP/CMakeLists.txt @@ -0,0 +1,64 @@ +# 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() + +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) + find_program(ANT_COMMAND ant) + SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER, ONLY) + + if(ANT_COMMAND STREQUAL "ANT_COMMAND-NOTFOUND") + message(FATAL_ERROR "ant not found but required to build android java") + endif() + + 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() + + # 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() 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/lint.xml b/client/Android/aFreeRDP/lint.xml new file mode 100644 index 000000000..ee0eead5b --- /dev/null +++ b/client/Android/aFreeRDP/lint.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/client/Android/local.properties.cmake b/client/Android/aFreeRDP/local.properties.cmake similarity index 100% rename from client/Android/local.properties.cmake rename to client/Android/aFreeRDP/local.properties.cmake diff --git a/client/Android/project.properties b/client/Android/aFreeRDP/project.properties similarity index 89% rename from client/Android/project.properties rename to client/Android/aFreeRDP/project.properties index ea89160e0..9943db306 100644 --- a/client/Android/project.properties +++ b/client/Android/aFreeRDP/project.properties @@ -9,3 +9,4 @@ # Project target. target=android-8 +android.library.reference.1=../FreeRDPCore 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 0000000000000000000000000000000000000000..45ed8612398e90c7e7e481b0bb5853353fa0fe51 GIT binary patch literal 8832 zcmd5?2|SeR_je1~LJ2GKI+eP^EuHLE52o+x8XOqLllW8X?6TZ_0z%dEc3H&U3!cIp=wv^ZiVsjg`rCnK?3IVq(+H zOlfw|r|I}hN)mc^d|YM%eW(fPE<$_m8es^N&lV$laXr~EGk>Nx+m6lj3JW~PHWU+^ zRmE{|5xQ7fkXT%Q1LnAlL8w0u(iRglTpG$_vV7S>m?ztt6JP`%uC9Z_I9^6@XRIY) z$)mD;IHuuzwtcvj11sE@Mf8F%HHI06k{|>AY#|dC>hBjIAcY#iKiVZh*W+I!;joV) zLSG~JC#PI2ZD3R`pAEwr00+e4)EfCU!A&(}oeNkHA5XNI8?brft z5TC`S2SX!je|AhDv}6A|HUB^z5}#D&`EZ3?fe-g9lQ8-7B~wf&+*nq0l4@bPL5D_#|ox<&YOs z$ea{LBLENqVjWN@5*km!5*GpBufkj}&YG~l74>3~)^Pd$OlXEV;}wGB1$ciP&C-%& z79bEZ16XV`nh_jw)qunCBGIrY6q<@dVHsEo2+~mm8Wu;U5pWm^3VJdypLJT1M7WaeTpi%G`DjL88#INM;SK~n-VNt(X4E~?v!64!pzpX(61BaqfK{AcbAQ0&w z_H!lusTxqw@oW*AK+7x&!h!iwa1ef9 z9~1%xpbKsj{08|E<3{XGS$G70X z5=q}&=idtl2JtbxtGF04xy?g5bB-2b5QM64YD%80!^-@P~5= z9%N7`80b_&XW%gOKkw(0b&euI{TB9H_w(<+6pm0%DDuK z$B>koB#5XVIN63_5Y zkd5nleSuy1V>k0BW@NkppJc2^pUD+6MDUCgC4vc>fx`5jBpi&#S)Y&04ehTxSHq7J z;KzY9KVE$@g8b{zK1%+EfBdWrk(%R|lWZz`4 zg^gr?P0gnKxySN-5Tdmb$qmiynN;{ZP)D)Za)(aD>Zt6Hy0fr()tQ6$?y#fN?)D7# ze0cfFxM?`7FT`0Uj#3F+URoe4-jJ9xkUiGJ>$@IVkCYZj`HK#TQbTKAzcd-%^w#Z? zepY#$C|=rG2_gElgwgDz4IYTXKpxxW=1t>mH-Kp>y-9#AWhZl|;pf48^9bol@6L0*A=;BZ)M{ zy5Vc0mHCEaOGQ^{@CUZKXga!9J97PutaJTy2km0E^uM=GpN*L(b>7}>(Sq~OGL>V2 z8B(Yj+4C-L?$0=^teUAP9(b`zx6wCPDN<>D&MeW=#!$;?xxxa+L7rl|c_+m*dE~@e z32oBG{I*V-i_!r7w8s&<)B@agS8R#2D^5j>ZRfdF z15JKzUDzR&+T1QPOLcprI=T0`J8Ive{W|UY+OKks#V&q(JbO#YTx)Umj3LdzhEglW zN_(Y82YhqeAL_&A#mSG&?e7?(FeYA#h+GUn!Oaz4k-kfD=M1@x?&egr<&nZd)dKi+zL3b4mNxwIvQDbZfOT>aNF^TsG)j+0)`+KP^pHdc9Ue+ez5?g4HvXFECe1Em)W#+vbpo@N=xU(Ajo+it*C-*?otSwu`^= z(M!0!?ro&Cr2a;pD^5>uTTj6$4_sGEEU zg1zz1nNxekmcQRJ+9i6Wc)!E1S4F;Rv4{LY+@e;rKO9!3JN?;BwXpR!=e>_=YxB&i zsPa4Cd~qEjqV$MPMaGOdCuQm*N}S~uk&Vn>73Fl+%SNUmd{M1_59`-5_y~8k-6HSp zb!Vt4Ql(3OS}FY@sL;D$8o^#-O7x~Yt^z{WP=ClI^)dtQX|u*ExUPTqqrJ-cT`<9; zxt2E$+RcB2$E??S*E>X&R%kUl_u+AMx{PU$p@x?`+O@O)#1^kOtHZa?UC1fD)0dI7 zk(#QbyCWysEnZppV8lkOOj1`)F{!IJzja5iOm2j~uiwU%fB+Q#+03Ti07s@0R0__2=*GTbEoM)0I;u8Clz8 zD1TovTxoUv;(b3mgvXSVYvaZCw4Ca3tv{XRh}FC{=d7eeXm0?y!zS^T*;Ta{p79C8 z!fBE3-=;XVMqVt$>#G~YzV2DK(`3LhoE6GyJlB1D-{Io<&$u)Ew=-e z&1dCq9NAX<>fT0%@^EjQmVAstjEU;aXV1c|Dho}~?v%3@*~YV$ca)qRd?WEB#rO4x zQS!>PE05_N7uA}xwoR?O(sa5zuVwB1eQm|=XPD%Zi5_8h9_q}ulx$0PzEu`dkvrg} zgu#?0tEhVR9aJ;TKj<^ezsYmdG+%h2<#p6_<3mf=?>OMZdV}>9-3_b`I|MfLE<{uS@BvqZ zp}gwoasO!=dRG07nH`=@7p(j5VJ~<%Ht+ZMY0T_NklUr2|N=6zTus;W+oej`0rS#jvi8G&h0r^718t#NT>ysI@Hypcgl}O8I)Ey6ToE zlvS&vi@dcF4}0UT&{gkipYbH;l&PcGB*eB2R@0uE6)9iLl3B?hEih4N0QI)ZCxivA zIEx5qdOoHmOoW@Nw_n}2nMBvjSsU^)Oop}}<=>Mqjxf=C zUyyX{LyGW*=5m8P`dY-6f@?gpYR(XEaSi(eFSXqAF$ zL-Fl9-O*dsRnq2KZPhy0p{%p}5+xLVQd?AWlLnV6)qbyg{HLBca&eiQrEBtNq)4@|p6*<-EV|z>)M(X#y!cuRQL-lWwW>>2i}GH<4)>&c74ngl ztPqP4*2Eot5@OiebG3AnDp(BoiZ*D4KoE*;F=h^JvQ9eAh0Ht>zD z;fH$lU6>G+dxzc5qoezr5-djUwkb3ny?rdC<(J3nEDDp;^XlLIJltebt&mW8mt(ZK zKIlM7%!r%0hVlG!`+TZI(hcFX5v3V<&Xz~LULZ^27y6=xx}WO=YwBw~$v`SN-W;;D zK5bX4_=~Cu>I`DE6YsV>gMc`TWuN}|LA0wvq4kF3w+9R z8`+k`CkuHN;`@*LbpwfUm)5s$5i8K9=Q}dtK;GVxZuQ|0KRTr z=b$2NHz*i2JoxSf0)F7=ppE2>u@c{>rFEvF3s_Xu7M>7OF_kbbVo1j!6%}UAb7szw5$16QrW`~>Av5hTbAW+)IdhPQDdLR^ ze4`~MJ})R&#S6Z=Bo*LI)Idee2U>xeRG)!~rbOP_!(%c<4ZVC9z7OUcSZnR|@AcSw z{bYuP1`l!>?!x2o2B|}o;ouXpfA@bD{IsQ}-UJ_>9390?HOFvCjFsidbmnLlQX83A zHk@U2DRYjn0X&|2i9RBVi_%P@v}U7#vC9aOjTWHI;{^mJTNrHu%R$j>tllK$Hy!wl z59xJMek7rRH5LUMrw>WBvQtw-BebarT2jXkoCpOZQ^0_cU6mIF7SWLSa%;k{}5an60rwgd|BJj0#cIA4vGyQcN6^>~FI9 zbXridHmy}};q+z`WVgsfn-e)HA9&gh!Dw-qHQ74032c}!nXw2F0c?lVCaBXo?0Rm;+I z!HPbej@h_y_K&Uk3+h1Jp=^mWb7otd`5~L&__JdxER@2^GMw2OVKy5&qa4<01yW2U zAPu9{o9tHY9(KsHN`_;le0#+GVZtAlL?9vx#V8!Sg1E!&q8gAxI)-B$!k9md_#;FF zic*+_!ie!O@`tclr;kZ_tf)>)#h9%|2JEojULit@DYk7jjfPU2Y#d|KvTCK24_p=K z^*V}{iNs=s0wq+096@MQLgKIjLuim_uo#!OdkS=wW^JN9@}0W6KXkFj=}xxlLDeya zu57@V1V#`s4vSG(BtZ}vPQyw}iHej2ibybpJ+IsHiwe=(Kpav!DrG7=r{l?>huTt# zVzlu61~Sg=D~WeI*ymIxo_w~d+m z7_afi?A4>Z#wlFfnS4*+b%$wf9Ak=QLE{wip8^N*R5%DxFTtUdi*W@8i(&F1x%<#~ zNGJlmry2a81tL?@DhWv=L}w*EPz@+(PZA12dPzL)uWE@(K}&EY zNlFMME|Fth-~jy@fg?bhMF9@Hx8RWcxjy6)99EKu3MUjKEW$(&!6A-7Bot0k2-!^> ze>%h3bMb#t=NK)A6)KqwRQNb-UD01b-tN5}{S zp+H{2Xm7!RJt+|Unf^@e& zKwgO{FkAMHex;J!cP|kmD!Cj7w-Q<bw}avb0&#CyxVgb?F0RD{5t_jXA)^2$D%_m;c@1M{C|XA*%)xdIj`Xk4riVGlV6 zQ7i%>D8NA3xrttJFF`Owjsh&Gs-s_Z2M690{Yq%3&e|yk;r;AG`@530>cP0KvYL%x z$^#q|)fLb1SCH9tbzQJ4_fInqFeCN>+`(8m2pSn6cjL^UCo{%Yrw@Mv_EvVW;M z+3(V3%1Upk9Mhi{X*H|OU(htBMbYcj~Sr;BJkv!yQAQ` z#_~-EF2t|QODYf;cBr9MMaF!On?HCY=l)XMr}^uW>MiP>vo%gTe-O`X9!sP{@41F# z{8aPVoL%M>W5dmRuWfhr{q&4W<%|{kMhI`nM(_9A`qOjG?;Hscy%_FWK&Tg;*Et2Z2(8Al+@!&~ zkN2aeJ5jC@5pK;o!&D5{vR*uBqxfzpk!sc)|7eRxCY+`z}~py+By+ zUy)Q3vNOl&m$1CNicmKX${b{k&)Q)6U=c50?lUGY_tZX@^G&hk%;`yMi)SZ~YJ9;r z%itXQ)#u|&mIdTpz-~eDK})wC%yHA;nazuQ|64ZjErYYwt7Wls)o5g?`&$0^`rXjW zzLka7N^eF@Iuerb>)q39XA73i%yIiCTfEQ8I(fe4x%pH-byYAwQgZbz+~*U4E;~1$ zIe#%*c4XiJE-`oKFv+RAc>a&`_k8a4MtYDX=;x~fdHi8ZPSdG^VT~_VTsaqbdcgOV z4@#id3a?kU7Ud4xsrV&LIQSAQO`2&$~@d)u{fi2B%~)?HQqC`<{=zSp0wGx#2ZC=t%4M=}xyZ_Mc1LpuZZp z&#O!n>;3hDyM2>mN>51K=LJd^3Ik25ua2!@Mvjs{yDv&`dgO_~hCSa`(Hw|sD zs$wsvy}HZOCv8a?bG7F5opFBL8)u99X+0`eu1N@{H;lNuURrQ*cgr{@#=FcjA!{A% zUfs_dy6Bd@aj5hD`m#ee*4?Tb=g!iZL+{46uJ|B(N$n4s9M6qW(IP{`!6j-oBczyK zB^W)H7wo6HGH^|%XK4I%YP5Rp{CUcZTa5|FH-BnZL`Gw$(_1Di9O774JMNmrm3nyk4zfkX9p_dPmsZKmU zW%|^m;)&;%PkE(s&xCl(m4;L2KDljMedY}GepP(>j42zX`TT7KytJzgTXrN3yB)sf z-;KT=aeFQen4PyJQMSBz#dm33p`Y58<$irm896dZnJ}~m~&>%nVEA8?OdafP@%ROGY1o9#>}{krIs!(T_kO6 ziAtsDLg=Dmi&80@E;eCvDQVp*6{Xd8#%*u4t?ldg@%u67@I24^{NLyDzRzEjgZgq3Km`d@$Q*$6AejWv%s>EzX(#{^ zdcTPHYBHe*>d4{su7$r@61@}(DM}&*1_qi3Qp_bXPZEeA2nisQ$Ye8I!c49dEBHZX zV!2VD1r8<`$V5_wNFpYvEb`qY{t8PX?r9GMUunNtvAlPi@C_pc@ueit98f{(78DBl z<)r>HpYFwl0uttf`C?*)9G3~FBJt^q zvO}L00^12D*zpA-vC68-!(Mre!&hLIL{-Gi0N4zmJA+h|OhF<16^}d6BWj1|kdUw7 z_X|_Z0MHDCoylaBLPtSlHUR!6ED?%4lphrp3Q!M;%$JYvut-%QB&pc5do?>d)J7~< z@WlemhGR*@T{RbpgeVu_(KuX~4D(ex%@6#3j zrc3#l?gE(zuR6ZZ`)mLdIsk$+2%wPxDjfuw5EtN3IAkgZCWCYeTb0+{`Gs1G z=zUoN{Vq#LAM#ty5BP}J&`0*_@4SXkh}M^U|HA8D(*iHP*b~DWCyDq8IN(ph0aFJF z4i1Y3u_*uzKt7PWAB+bbg~`8b2LI=H@DLjB_cci8QOO)O$mDQ&bc74SeUh6IMDjQ^NNPzv*qCES3LTk?j?LfpTe=lyj~ zM)7$I9_V@gx$=s~`UD&ZN*UnCzHC?KwS5zsFORjoUARPf z$Y{4qdtvdD;E0IRYY!Qp)Xx!w{!lTetL2{7e$hj{cD-FuGdX&G-+G;`Hn1*8SnxL1 z1$^i-K6C3mi&8C9Vwdf8%hn*;vwTIKb)H(BVccqyl82W%66n-eEzLP=E(9b82@Lg; z4rxHOHWn3y6PdL)6uT^TYj94UF}tA5eB-bG-4AyQk8fMnR3O(;}WDmRF%uCQlM*ADZk{dvD`Jm&V*+@rf6&0oQOj}9H%?#?`tTh-B&l0pw?&|KDXM9FB2+h|i=AvhnC zUJ{a8o!r{OT;O>s<66}#mN4>D{172sRbrZ?yeXzp=BOBO{V*$J}hvo)mbCmF+6NxTx%l412q*X)V>Q z(Tj?KP!B!U-ZA0RCssetWn$CC&Dj$}h0)&zCfvU>YPMU|6j}&UF70F_W)F=v)!k6M z|1D#?Y2?d}SZj^gJS$G8(NK+twt5b}W7m>hkDQLsFDY&>Xnt9k9n;Lp<(g6z$4(|d zlOH?}bzQttB8s-nUfTit(FGcXX&X1ylCI3PUvBPnK&W?1AO;;F-Q0?;7pi|i-Df^C za<5o#O!(O+`e0$*vweF`Z>_b>3UQ@vQe+?av7GsB_Sd;MCl1&e=T8kME*t@eMja$TYzh7#$lu?Usoz8V{(l8x{2xpuyCUZ+8<7hW7 zWQ#6l*9F{3TYDo$Xw$l-EWkQiR#aozxng99^w5xfnpRRzZDxpA)2Dj>*ydc&iB5;slLiE_+W?l;^RrQ;0` zw@>NHQoDGbACwiEfTWIdicV$5WDL*nGD(cEE?79Z#YfkCsh^4Z+;>Bdueo)i^6Ki% z2CWlGLo!{Lj+Z>&S-ievi~U>wxudL7ZC`;$gHJ%&fiK*rPG6R{3OSZr<2L^~cRf5d zBjd!BtYwc*9lKBquQ1#uoYpvhh*shhQdmyGtJUl3_euf+{A+TGlEWyIE*t5FO!ZDP zC`jJ5nc`D@>Tc8Jwu%SLigFL1bAfS-I`%EJJUnLH_@!6Il*K;@w#`eP5|g;Nw%IDO zYB<-w`qyU3g(9~Mc|}}D`N7sb?qaQ1@9F@?9ac=&3-d~4F$%4DK67+SNb<4zi(dH= z_sQ#N37GZs@$mP<=GDDan`M!{xcBDUz>F^BlQjI8lJ^<{47agDP8rn-=6Vm z)vnpmnEtG+Ywe*!%e4&UZ@y@pd-!~0@GJutuhw&R6Fdy&)z>?{obf$%LgSJ(uPsw@ z&g+N9&KNz}Vsn0zRpjLzi$k)4&pdKJYR4?)xo>)Kz|+_}XsliW@A`>hKV_VK(~$mp zoGi)or|O!t*#_11-itFtPaeV3#QCe?S@rQuY|-SI2eeu4OeoMGA^m1CJ$CoboMfT? z4C}k=IhUeGr)%!mM~S5%x}II*c{3_?k6Z9qf|Zg3^L+_ghIK1L{Y_r2aftwutBZFD z+ebgvBG@w~{lcz$oa(@cB9A9^;~^(}NeoPBKmnZTBgUzE(k9 z$tyQ~aodf(WX0*YhWdK5e08e;#q}Fao$Q43+3HKGf{mt68>MlMkp!)}f1eT3RT6g7 zVz^o6!-?rn-+t5i^eKguBK<|U%*}06)rgqt%+wX(@tfbWwv7z*Uo(?7;)r$NSigli zU2f}^r!&8O8Gdwfz4`Jh9i=y`$`5SK@JiG*9v8Oa + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 0000000000000000000000000000000000000000..ad325d46eb704f0b57cce96812e2280c6e608c4d GIT binary patch literal 10166 zcmd6N2{_bi`#-Xm>`T_MMMuoO+Rb9izD@}fgRu?Mjncwh%ri-kq> zI?dLR;b^u4=N90nL0Om4VEWMkZ59?ST_&C4=0jzG_E0@({@MzYH|rHZGJz%ZCPAfX-{?$4kw z)%}ANzgQqpgWZB?bOtTJAGB_fvL_&fp{)R{^b-U>`d735!JoGY*f21YLI*=NAnTAm z3c9;}m7|9Q`F@<--3?6jrTS6*8Nq-o^s6keOJ-(Y#lLCR&+n^rFoPHhtmregZ%PN- zhSRBFYie*nNRS(q7z)g&_+??i3~TDYw&uT32gJWB)4c*10l{7Yf3OK(zy7)vbR0g2 zN?`;9*#-poe(|#97b_sV4H9HVaijUKTU}q_XL%}t!k}s^tb1G?f>eiKY@sL|430wp zL%{ElPoic(47pPnl&`{YbqG`)inN8naBwsZ0at@S|0NvYPV)%=OHp?>oJT;A9|hQ9 z+Ioh7>HeM{XEQUy8T$t_DE@9#V}iBB9d?*CL1pWF5u#TQ(qY3 zI01$tAYo7p9KRmdAL9#WL<*=vz^O_)V06|7hL8l+eFeHR3P!>d#h%Do{AV3V#C!@^9flqJ9t@1Oqez4~L*3*guHfKlBF%hlKs682o?s z2MLQN{Wb?NBovH*hw2lEBn*}aMSjVo|HuXyP@XV2DD(&M$M3TmL&6g=2m%(1K@t!c z1Nb*^0QDIPu?5O348Vc-QE*`XJwFUE2nYcSB_WV_ECdBd{Q(ZNEfj-8U~y3FcjEZB zGwf3={y)icIMD!tC+X`$@SpPIdvGAJxbM#Me+mZz@jv2#L2wWRZv6uA>Cpc#^ZcK} zL4?5}L^Kuwhkd6%fSU^(0;I?ff&&TMQuN^@JcRfO2NsLK&(B%Of6Yg6)!+(QpUDy2^?8@)Eng3u$)*JAzj1}$+xuOpc zJnKYB@MoIAfa3X;aL`$2eb$*90^!d)SFMj5;7bEEKR$gj0{-*aK1%+EfBd2hkecg{ zU)fY(@Rg6H`U6}-5Wu#cGq@wh!XlV%OwhMwKK^Al58XE8^jh7|DGXegkpUa~0Tv+* zD+x{+SADv+z0>YncHXyo26l(YaCHVg7RqlH8$tFd4azL$|7>CuR{w5Jrham9ZB6~c#UzAs zGJ_^qAWAn&mwzn2I<8i4c791!$=S5_7?Za=yXN$~ZbH5ETlBMvg#*(LdO~TZm>koC zEgKQkGPa6@6rmh>dzCCMB_4H!sN{Lnp0}xOuY~LMB4g(DaGWifN~2~i0m9GVN2Z!> zO`NduZhCAT=F9s=>-(ZCXo~QH+^H@0KNpQGJEWyNO1IaGY%k#1AIyG*rg+)3pLM!} zv6?oY$nD}_8i|`=Ef?Ok(wBee?15{UHEO`Hr#c}g#b92$MYHcx!Xq!fY18~Wp>e&h zTjG0p6S7|k)St7f>gkqC)C7jfL5R+Jo!k9#N~<8zm@^v2x_ve+)rJcZ@0NU(b#meaK zu_+Wx3ao`6=^w*;aYh5f{6g*!%m=7*k^I0e{*GdnY^Q0(Bm<97p>D>6j$>R*`qpcqC3TiZtBQd@$7D5(B+gjbpp`s#U zmB)9e9q50O)8aP&!m42+usy=yx(d0r$Gt+c0+v1VVM*93R}~bsNs+%# z@fYo4$mye@b&X}tRxduhFWNLJp2ilHTD*PiObfbg!duDXtU14NZ!B>&LCmF>HU>eQ zo$q1tx*St-EcF=U!+9M(iY?qHk%tZ1$%-G-A3ZgFb3-B{7c{&vRebCa453_>dC5f0 z6>@iL6zDQqkJq&^M~lwQ=aPM})t|39RXFdmxBX7mH47;ucamIM*-;N+4J7LM)w$3H z!)?W_9z1&+A2Zdoj*B+L?DyKPQEL6t2eqr4QOjxgt9`nGs_a-zl?~r%@f{XwEc2$L z9n(Ln+STXQ%JDV|ypNDxW};8O1#_$RqSolO1Jaq^nz5pmr5vs0^2e?zblUEE(%tts zZbdUxUVyv73lW#+mCk9{U&>a4IgLC&sTcEVlaYl9#%|xHBL1A{1A7jd3mwI3+{q?- zJ=%YFTXf0b5@fTwNmZ!W4TFa+b^F9`XyRNePB!z;ZcUzaI?Owq#29A|rv6j{@p#m| zbFXaMHc*MRs@a2tOtePrLy@x0dEt}H3(;(FQFjl;48-Q&oRc5p-~2vCQ=mx0_a{}?AxAD3JF8fF2&c9NS{DnNy-QY~KNb_{ z^PD)wmnl^*cIef;h5i^ei8UFwDDkWn`beS4K{lAUdz6D*mn@b?HE+9dzH-MXhufv- zf#+5%iSN?`ox`Z!yy-lZD&E6y0@E@#N$#iHbfeNl8x~v^m<8Evv&P+8{Fb6GldfGW zs@rf$T$0kwe`B}vzLgJ&r7YPIW|ApqhC>e}YDEi@>PDe5G5TA?yB^?A96tbgaX;6q z=_gPMCd^4hZ|#U!dIAT5dqDN5+TZJ$lCjMRL6^OJRw4)J-HJ_cd(`RYyo$HkAr3O*`iM zAd7ND8>AtSZ|Tv@;ULi$!mh|Ev>m@0pVa6T-QjJpP|M3eRvYBKe!sVNsz%#=VI{i% zo~RVZbCB(zK)>-6DY@L5&!yLdDf|?DX7?5=vL?U% zeM@^c71eT&N0ch^w)SJKrV;AivC#xQtD51_Gf+t)#N+H3cT9nTv6jQn@|$#{rMVA1 zOCBfDu*frAmB^{@FgSSGOMSyG56+;OV2VmH#mCMzL@P5h7(8Zwh?BHNTn4w? z73PT9-rUT$(M8NB+;OVQw`k1$r;I{XlO`b{e^cLwJB4cv7Y-*{CR}Ky)S1L|F+9#) zt34u;s#xl5@2=FrTA_trl`+7d$#7_J9r4*ljk01*Dl(7jK=@kj;5>b~vFDa8xP@~> z`%2F?RSkkivW;sb+lU7u;|hnzP(UrRP&@jnghp;sQAWe5bmdZ=j##;^{`aS8>KkqB zS>;D|6&sx0bVdPfAv&YO>+ixW3A$PNB{ zV!t}zEtua%=hb>8t0&gAMhF5o8;ZM=MZNiJ75{!XJY`Hr2GVC&OB*VI#uc|($x?yM9ZpYNt zjr#?;HY8-SJ(>wPa_bGb%%fuL{Nsqo^5??k1CJ+X<14nC&xtHl6jmZDbKl)3OAlS; zhl|~5J!YqtdiD%{Xhh8K9aAl)B<$C!+b_{cWLR^)^LEZ|b%m0IPF1)p@37C5?Y4># zy^APX(7zC?+oy7S;cxyjarzDmdI zBdCmf*~X`m3{};KOj5_Ssm5YwRxt3<8qm^)Ebrhai%ghm?k20O$aCm2HjQ7R zUN@(fEHc_rN%WWFovr8pZ785rYHqm_H@z%u`5v&_0SKjc~ zd|15+^%>D(E<03$)AufxXU5(Wv$$R3^8u!{ zHdx=l7wqYjHmshlEfeecJc<~8b8L7R`6kMvdlOG$8PaJKyn({Qh-z7@YG){2!ga!ZbtYUnl zDU){=HkEHU*>*2`O)W!QRDfi8@zGFh-L9&Q5-{@i=MQGG1^E|RBUnufPJno%In3Yb z9_orCQ5I7C7U9c%&-t4?u2&plx-H3SO`-Rv=th=tw4=Cc12=jA7F*A8FYXE@aaUX@x~D5d2^$T6e(ELp$C+^5i4@}5t@2L||^r<^@yQ#}!;P0%(JS>g>)-|BJ;(w91lNV$moaLYpmtY@aGvqoQm@^@sT?9R?3YchbF?im8z%B3ugO(ks^w8$ zz?M0dLa3I}o96{H4$41IdBECqMvv2 z-%(_qdltXKm11-2LR@n3wUcGj?<$!myyNH|%E^U!IeD^t3OZ24cK7nvj&d_7=i}M@)37_H3F zibq%POM+LvHinR%mgTa|U0#r^kja~Aei_0x}Alb zq8>gd%FKGJyEIjoQOQZj8N#qvb=^lEV|z+JA*QIQi@sJ!%TR4;s!kvu6wKWD#A@v& z7SWGBx4kp2us<^&b1zXRC1%htc_e?gcCpjXBINLaygKf@)&3U*eakcF7hDN7CQaKw z`Y+A4HI};-(T5r84+jzZZNX@%D_Yd^`PKY(IWj`z?iXA7fNG~U8mqMUwAW!PN9~6A zcnz+w3DF|okemx`=VIa0xBKq7KD-Z$F*auLL#;5!F32?>8)>N66~N<{XKm-HAlmSD zY@ri2m~T!DS4NOG&wcO&yTn+y?31}tw<7;=`-K97?Kg_AQ~RTA)7jp$^IsKnXmUk0 zJ)b#hGQYKC%Tdp_Q$1%Ub1PT1T2-ve2ID+3#p}ZZRK#p|h(d>V3=(T^2J4F4ZmHNd zHjCro8!b%;M0;)Lb$$CfKSu=k8b*(P>08O+%vCj44#VD#~Ov)9SpH~xC{l1N7&D0^5T0JzW)txt&rg}@( zHk=tyWz%%YDHG~Xf0=pj6qcTIinaWRtJ{ven){`OBAO=4?1HDrWXHf~XUB?i=icis zi%drD1d_n}%;Tv?8+8rut~RSWVZ=KhUJ+V}VAahpi;@jMW$7F?uZY~xn5vP*ogkkk z8*%%5t^12?&7K94|1Bw^Zq4X-8X
lYd(pA~Mtz8_ylrWUTPDa&9hiNbR-9M{kR-P+6ao4X2qU2|mniG{{ zjg>0tu$eIDT3-2i#4=Yqjn{SbO7g{?-X5#42Et+eUC!1d? z&+Y|1YVqnd6zJA#8VDX!3f&hdqJ4I-+v;U!^Gw!qZKtN60u5iX^F#)|@r;`g81!x; zu+en9H2aCf>7rL6q7C}S2ZLVD2%C4z`v^<931(;PdHX>{dc0S`NNxD^`88ozmIv)s VsH4#jqt|~)XG}CFTsClx`9Cz+a25an literal 0 HcmV?d00001 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/dimens.xml b/client/Android/aFreeRDP/res/values/dimens.xml new file mode 100644 index 000000000..dc7f5bb72 --- /dev/null +++ b/client/Android/aFreeRDP/res/values/dimens.xml @@ -0,0 +1,4 @@ + + + 50dip + \ No newline at end of file diff --git a/client/Android/aFreeRDP/res/values/integers.xml b/client/Android/aFreeRDP/res/values/integers.xml new file mode 100644 index 000000000..f6a53db51 --- /dev/null +++ b/client/Android/aFreeRDP/res/values/integers.xml @@ -0,0 +1,72 @@ + + + + 0xF1 + 0xF2 + 0xF3 + + + 0x01 + 0x02 + + + 0x03 + 0x04 + 0x05 + + 0x06 + 0x07 + 0x08 + 0x09 + + + 0x0A + 0x0B + 0x0C + 0x0D + 0x0E + 0x0F + 0x10 + 0x11 + 0x12 + 0x13 + 0x14 + 0x15 + 0x16 + 0x17 + 0x18 + 0x19 + 0x1A + 0x1B + 0x1C + 0x1D + + + 0x1E + 0x1F + 0x20 + 0x21 + 0x22 + 0x23 + 0x24 + 0x25 + 0x26 + 0x27 + 0x28 + 0x29 + 0x2A + 0x2B + 0x2C + 0x2D + 0x2E + 0x2F + 0x30 + 0x31 + + + 0x32 + 0x33 + 0x34 + 0x45 + + diff --git a/client/Android/aFreeRDP/res/values/strings.xml b/client/Android/aFreeRDP/res/values/strings.xml new file mode 100644 index 000000000..780a7aa3e --- /dev/null +++ b/client/Android/aFreeRDP/res/values/strings.xml @@ -0,0 +1,179 @@ + + + aFreeRDP + + + Yes + No + Cancel + Continue + Login + Logout + + Exit + About + Help + New Connection + Settings + + Connection + Connect + Edit + Delete + + Keyboard + Function Keys + Touch Pointer + home + disconnect + + Manual Connections + Active Sessions + + Login + No Servers + Connecting ... + Disconnecting ... + Connection Lost + Wrong Password + Invalid Username + Add Connection + + aFreeRDP + Connect to Computer + Remote Computers + + Host + Label + Host + Port + Credentials + Credentials + Username + Password + Domain + Settings + Screen + Screen Settings + Colors + + High Color (16 Bit) + True Color (24 Bit) + Highest Quality (32 Bit) + + + 16 + 24 + 32 + + Resolution + Automatic + Custom + + Automatic + Custom + 640x480 + 720x480 + 800x600 + 1024x768 + 1280x1024 + 1440x900 + 1920x1080 + 1920x1200 + + + automatic + custom + 640x480 + 720x480 + 800x600 + 1024x768 + 1280x1024 + 1440x900 + 1920x1080 + 1920x1200 + + Width + Height + Performance + Performance Settings + RemoteFX + Desktop Background + Font Smoothing + Desktop Composition + Window contents while dragging + Menu Animation + Visual Styles + Advanced + Advanced Settings + 3G Settings + 3G Screen + 3G Performance + Security + + Automatic + RDP + TLS + NLA + + + 0 + 1 + 2 + 3 + + Remote Program + Working Directory + Console Mode + + ******* + not set + User Interface + Hide Status Bar + Hide Zoom Controls + Swap Mouse Buttons + Invert Scrolling + Touch Pointer Auto Scroll + Show Dialog on Exit + Power Saving + Close idle Connections + Security + Accept all Certificates + Clear Certificate Cache + After %1$d Minutes + Disabled + + Connection Settings + Settings + aFreeRDP - FreeRDP for Android + RDP Connections + Help + About + + Cancel without saving? + Press "Cancel" to abort!\nPress "Continue" to specify the required fields! + Failed to establish a connection to the server! + + The screen settings have changed because the server does not support the settings you specified! + Deleted the certificate cache! + Failed to delete certificate cache! + + Verify Certificate + The identity of the remote computer cannot be verified. Do you want to connect anyway? + Please enter your credentials + Create Shortcut + Shortcut name: + Connecting ... + Logging in ... + About aFreeRDP + Version: %1$s\n\u00A9 2012 Thinstuff Technologies GmbH + Save Connection Settings? + Your connection settings have not been saved! Do you want to save them? + Save Connection? + Do you want to save any changes you made to the connection settings? + Do not ask again + Exit Application? + Are you sure you want to exit the application? + Delete Certificates? + Are you sure you want to delete all your cached Certificates? + diff --git a/client/Android/aFreeRDP/res/values/theme.xml b/client/Android/aFreeRDP/res/values/theme.xml new file mode 100644 index 000000000..ef321c4c0 --- /dev/null +++ b/client/Android/aFreeRDP/res/values/theme.xml @@ -0,0 +1,57 @@ + + + + + + + + + + + diff --git a/client/Android/aFreeRDP/res/xml/searchable.xml b/client/Android/aFreeRDP/res/xml/searchable.xml new file mode 100644 index 000000000..4d0d7ed79 --- /dev/null +++ b/client/Android/aFreeRDP/res/xml/searchable.xml @@ -0,0 +1,26 @@ + + + + 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 { + +} From 84b2966e67502925348cdfceb989a00d85390ca1 Mon Sep 17 00:00:00 2001 From: Bernhard Miklautz Date: Mon, 18 Feb 2013 15:00:55 +0100 Subject: [PATCH 02/29] android: adapted build for library project - use manifestmerger.enabled to merge library manifest - updated intent/activities to be implicit --- CMakeLists.txt | 2 +- client/Android/CMakeLists.txt | 40 ++++++++ .../FreeRDPCore/AndroidManifest.xml.cmake | 84 +++++++++++++++++ client/Android/FreeRDPCore/CMakeLists.txt | 30 +----- client/Android/FreeRDPCore/ant.properties | 16 ++++ client/Android/FreeRDPCore/build.xml | 92 +++++++++++++++++++ .../FreeRDPCore/local.properties.cmake | 2 + .../FreeRDPCore/res/layout/session.xml | 8 +- .../FreeRDPCore/res/xml/advanced_settings.xml | 10 +- .../res/xml/application_settings.xml | 2 +- .../FreeRDPCore/res/xml/bookmark_settings.xml | 18 +--- .../FreeRDPCore/res/xml/screen_settings.xml | 6 +- .../res/xml/screen_settings_3g.xml | 6 +- .../FreeRDPCore/res/xml/searchable.xml | 2 +- .../aFreeRDP/AndroidManifest.xml.cmake | 83 +---------------- client/Android/aFreeRDP/CMakeLists.txt | 23 +---- client/Android/aFreeRDP/project.properties | 1 + client/CMakeLists.txt | 6 +- 18 files changed, 267 insertions(+), 164 deletions(-) create mode 100644 client/Android/CMakeLists.txt create mode 100644 client/Android/FreeRDPCore/AndroidManifest.xml.cmake create mode 100644 client/Android/FreeRDPCore/ant.properties create mode 100644 client/Android/FreeRDPCore/build.xml create mode 100644 client/Android/FreeRDPCore/local.properties.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 98c23176f..d952bd1e0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -199,7 +199,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/CMakeLists.txt b/client/Android/CMakeLists.txt new file mode 100644 index 000000000..9557f7e63 --- /dev/null +++ b/client/Android/CMakeLists.txt @@ -0,0 +1,40 @@ +# FreeRDP: A Remote Desktop Protocol Implementation +# Android Client +# +# 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. + +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) + find_program(ANT_COMMAND ant) + SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER, ONLY) + + if(ANT_COMMAND STREQUAL "ANT_COMMAND-NOTFOUND") + message(FATAL_ERROR "ant not found but required to build android java") + endif() + + if(ANDROID_BUILD_JAVA_DEBUG) + set(ANDROID_BUILD_TYPE "debug") + else() + set(ANDROID_BUILD_TYPE "release") + endif() +endif(ANDROID_BUILD_JAVA) + +add_subdirectory(FreeRDPCore) +add_subdirectory(aFreeRDP) diff --git a/client/Android/FreeRDPCore/AndroidManifest.xml.cmake b/client/Android/FreeRDPCore/AndroidManifest.xml.cmake new file mode 100644 index 000000000..4dd2283aa --- /dev/null +++ b/client/Android/FreeRDPCore/AndroidManifest.xml.cmake @@ -0,0 +1,84 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/client/Android/FreeRDPCore/CMakeLists.txt b/client/Android/FreeRDPCore/CMakeLists.txt index bf543ed2e..005e90d45 100644 --- a/client/Android/FreeRDPCore/CMakeLists.txt +++ b/client/Android/FreeRDPCore/CMakeLists.txt @@ -17,7 +17,7 @@ # limitations under the License. set(ANDROID_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}) -set(ANDROID_PACKAGE_NAME "aFreeRDP") +set(ANDROID_PACKAGE_NAME "aFreeRDPCore") CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/AndroidManifest.xml.cmake ${CMAKE_CURRENT_SOURCE_DIR}/AndroidManifest.xml @ONLY) @@ -29,36 +29,16 @@ 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) - find_program(ANT_COMMAND ant) - SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER, ONLY) - - if(ANT_COMMAND STREQUAL "ANT_COMMAND-NOTFOUND") - message(FATAL_ERROR "ant not found but required to build android java") - endif() - - 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() + set(ANDROIDLIB "${ANDROID_SOURCE_DIR}/bin/classes.jar") # command to create the android package add_custom_command( - OUTPUT "${APK}" + 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-package ALL SOURCES "${APK}") - SET_DIRECTORY_PROPERTIES(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "gen;bin") + 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/FreeRDPCore/local.properties.cmake b/client/Android/FreeRDPCore/local.properties.cmake new file mode 100644 index 000000000..159126370 --- /dev/null +++ b/client/Android/FreeRDPCore/local.properties.cmake @@ -0,0 +1,2 @@ +# This file is automatically generated by cmake. +sdk.dir=@ANDROID_SDK@ diff --git a/client/Android/FreeRDPCore/res/layout/session.xml b/client/Android/FreeRDPCore/res/layout/session.xml index aa4db7296..925e73d95 100644 --- a/client/Android/FreeRDPCore/res/layout/session.xml +++ b/client/Android/FreeRDPCore/res/layout/session.xml @@ -24,7 +24,7 @@ android:visibility="gone" /> - - - + - - - - + diff --git a/client/Android/FreeRDPCore/res/xml/application_settings.xml b/client/Android/FreeRDPCore/res/xml/application_settings.xml index 4211650df..9d7cc0a67 100644 --- a/client/Android/FreeRDPCore/res/xml/application_settings.xml +++ b/client/Android/FreeRDPCore/res/xml/application_settings.xml @@ -21,7 +21,7 @@ - + diff --git a/client/Android/FreeRDPCore/res/xml/bookmark_settings.xml b/client/Android/FreeRDPCore/res/xml/bookmark_settings.xml index dcae89f3b..f13358128 100644 --- a/client/Android/FreeRDPCore/res/xml/bookmark_settings.xml +++ b/client/Android/FreeRDPCore/res/xml/bookmark_settings.xml @@ -14,14 +14,12 @@ - + - @@ -29,23 +27,17 @@ - - - diff --git a/client/Android/FreeRDPCore/res/xml/screen_settings.xml b/client/Android/FreeRDPCore/res/xml/screen_settings.xml index f684d1691..265c1c9e9 100644 --- a/client/Android/FreeRDPCore/res/xml/screen_settings.xml +++ b/client/Android/FreeRDPCore/res/xml/screen_settings.xml @@ -11,9 +11,9 @@ --> - + - - + + diff --git a/client/Android/FreeRDPCore/res/xml/screen_settings_3g.xml b/client/Android/FreeRDPCore/res/xml/screen_settings_3g.xml index d34634e88..0eb0a7925 100644 --- a/client/Android/FreeRDPCore/res/xml/screen_settings_3g.xml +++ b/client/Android/FreeRDPCore/res/xml/screen_settings_3g.xml @@ -11,9 +11,9 @@ --> - + - - + + diff --git a/client/Android/FreeRDPCore/res/xml/searchable.xml b/client/Android/FreeRDPCore/res/xml/searchable.xml index 4d0d7ed79..529bb34b5 100644 --- a/client/Android/FreeRDPCore/res/xml/searchable.xml +++ b/client/Android/FreeRDPCore/res/xml/searchable.xml @@ -16,7 +16,7 @@ android:searchMode="queryRewriteFromText" android:imeOptions="actionGo" - android:searchSuggestAuthority="com.freerdp.afreerdp.services.freerdpsuggestionprovider" + android:searchSuggestAuthority="com.freerdp.freerdpcore.services.freerdpsuggestionprovider" android:searchSuggestIntentAction="android.intent.action.VIEW" android:searchSuggestSelection=" ? " diff --git a/client/Android/aFreeRDP/AndroidManifest.xml.cmake b/client/Android/aFreeRDP/AndroidManifest.xml.cmake index 0fd9e9c1b..2ef28260d 100644 --- a/client/Android/aFreeRDP/AndroidManifest.xml.cmake +++ b/client/Android/aFreeRDP/AndroidManifest.xml.cmake @@ -7,17 +7,14 @@ android:versionName="@FREERDP_VERSION_FULL@" > - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/client/Android/aFreeRDP/CMakeLists.txt b/client/Android/aFreeRDP/CMakeLists.txt index bf543ed2e..9dd3b6179 100644 --- a/client/Android/aFreeRDP/CMakeLists.txt +++ b/client/Android/aFreeRDP/CMakeLists.txt @@ -25,29 +25,10 @@ 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) - find_program(ANT_COMMAND ant) - SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER, ONLY) - - if(ANT_COMMAND STREQUAL "ANT_COMMAND-NOTFOUND") - message(FATAL_ERROR "ant not found but required to build android java") - endif() - - if(ANDROID_BUILD_JAVA_DEBUG) - set(ANDROID_BUILD_TYPE "debug") + if(ANDROID_BUILD_JAVA_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() @@ -57,7 +38,7 @@ if(ANDROID_BUILD_JAVA) COMMAND ${ANT_COMMAND} ${ANDROID_BUILD_TYPE} WORKING_DIRECTORY "${ANDROID_SOURCE_DIR}" MAIN_DEPENDENCY AndroidManifest.xml - DEPENDS freerdp-android local.properties + 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") diff --git a/client/Android/aFreeRDP/project.properties b/client/Android/aFreeRDP/project.properties index 9943db306..857d31de6 100644 --- a/client/Android/aFreeRDP/project.properties +++ b/client/Android/aFreeRDP/project.properties @@ -10,3 +10,4 @@ # Project target. target=android-8 android.library.reference.1=../FreeRDPCore +manifestmerger.enabled=true diff --git a/client/CMakeLists.txt b/client/CMakeLists.txt index a5eb5b315..f632d59c5 100644 --- a/client/CMakeLists.txt +++ b/client/CMakeLists.txt @@ -40,9 +40,7 @@ if(APPLE AND (NOT IOS)) 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() From 152071d38bd0cd0888fc16ed855a8278147f1448 Mon Sep 17 00:00:00 2001 From: Bernhard Miklautz Date: Wed, 20 Feb 2013 01:08:27 +0100 Subject: [PATCH 03/29] build/arm: added build option to specify fp ABI cmake option ARM_FP_ABI allows to specify the floating point ABI to use. If ARM_FP_ABI isn't set explicitly softfp is used. fixes #980 --- cmake/ConfigOptions.cmake | 16 ++++++++++++---- libfreerdp/codec/CMakeLists.txt | 2 +- libfreerdp/primitives/CMakeLists.txt | 2 +- libfreerdp/primitives/test/CMakeLists.txt | 2 +- 4 files changed, 15 insertions(+), 7 deletions(-) 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/libfreerdp/codec/CMakeLists.txt b/libfreerdp/codec/CMakeLists.txt index 3e7717977..f3a64f20d 100644 --- a/libfreerdp/codec/CMakeLists.txt +++ b/libfreerdp/codec/CMakeLists.txt @@ -76,7 +76,7 @@ if(WITH_NEON) ${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/primitives/CMakeLists.txt b/libfreerdp/primitives/CMakeLists.txt index 4cbae2717..01dce882b 100644 --- a/libfreerdp/primitives/CMakeLists.txt +++ b/libfreerdp/primitives/CMakeLists.txt @@ -49,7 +49,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() 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() From f0fb640bb4546e08ed9e17af1f7e55931ccf4e77 Mon Sep 17 00:00:00 2001 From: Martin Fleisz Date: Wed, 20 Feb 2013 02:06:03 -0800 Subject: [PATCH 04/29] Various fixes and reorganisation of files for Android library project --- .../FreeRDPCore/AndroidManifest.xml.cmake | 11 --- .../Android/FreeRDPCore/proguard-project.txt | 20 ----- .../FreeRDPCore/res/xml/searchable.xml | 26 ------- .../aFreeRDP/AndroidManifest.xml.cmake | 23 ++++++ .../assets/about_page/FreeRDP_Logo.png | Bin .../assets/about_page/about.html | 0 .../assets/about_page/about_phone.html | 0 .../assets/about_page/back.jpg | Bin .../about_page/background_transparent.png | Bin .../assets/help_page/back.jpg | Bin .../assets/help_page/gestures.html | 0 .../assets/help_page/gestures.png | Bin .../assets/help_page/gestures_phone.html | 0 .../assets/help_page/gestures_phone.png | Bin .../assets/help_page/nav_gestures.png | Bin .../assets/help_page/nav_toolbar.png | Bin .../assets/help_page/nav_touch_pointer.png | Bin .../assets/help_page/toolbar.html | 0 .../assets/help_page/toolbar.png | Bin .../assets/help_page/toolbar_phone.html | 0 .../assets/help_page/toolbar_phone.png | Bin .../assets/help_page/touch_pointer.html | 0 .../assets/help_page/touch_pointer.png | Bin .../assets/help_page/touch_pointer_phone.html | 0 .../assets/help_page/touch_pointer_phone.png | Bin .../assets/welcome_page/1.png | Bin .../assets/welcome_page/2.png | Bin .../assets/welcome_page/back.jpg | Bin .../assets/welcome_page/new_connection.png | Bin .../assets/welcome_page/welcome.html | 0 .../assets/welcome_page/welcome_phone.html | 0 client/Android/aFreeRDP/lint.xml | 3 - client/Android/aFreeRDP/res/values/dimens.xml | 4 - .../Android/aFreeRDP/res/values/integers.xml | 72 ------------------ client/Android/aFreeRDP/res/values/theme.xml | 57 -------------- 35 files changed, 23 insertions(+), 193 deletions(-) delete mode 100644 client/Android/FreeRDPCore/proguard-project.txt delete mode 100644 client/Android/FreeRDPCore/res/xml/searchable.xml rename client/Android/{FreeRDPCore => aFreeRDP}/assets/about_page/FreeRDP_Logo.png (100%) rename client/Android/{FreeRDPCore => aFreeRDP}/assets/about_page/about.html (100%) rename client/Android/{FreeRDPCore => aFreeRDP}/assets/about_page/about_phone.html (100%) rename client/Android/{FreeRDPCore => aFreeRDP}/assets/about_page/back.jpg (100%) rename client/Android/{FreeRDPCore => aFreeRDP}/assets/about_page/background_transparent.png (100%) rename client/Android/{FreeRDPCore => aFreeRDP}/assets/help_page/back.jpg (100%) rename client/Android/{FreeRDPCore => aFreeRDP}/assets/help_page/gestures.html (100%) rename client/Android/{FreeRDPCore => aFreeRDP}/assets/help_page/gestures.png (100%) rename client/Android/{FreeRDPCore => aFreeRDP}/assets/help_page/gestures_phone.html (100%) rename client/Android/{FreeRDPCore => aFreeRDP}/assets/help_page/gestures_phone.png (100%) rename client/Android/{FreeRDPCore => aFreeRDP}/assets/help_page/nav_gestures.png (100%) rename client/Android/{FreeRDPCore => aFreeRDP}/assets/help_page/nav_toolbar.png (100%) rename client/Android/{FreeRDPCore => aFreeRDP}/assets/help_page/nav_touch_pointer.png (100%) rename client/Android/{FreeRDPCore => aFreeRDP}/assets/help_page/toolbar.html (100%) rename client/Android/{FreeRDPCore => aFreeRDP}/assets/help_page/toolbar.png (100%) rename client/Android/{FreeRDPCore => aFreeRDP}/assets/help_page/toolbar_phone.html (100%) rename client/Android/{FreeRDPCore => aFreeRDP}/assets/help_page/toolbar_phone.png (100%) rename client/Android/{FreeRDPCore => aFreeRDP}/assets/help_page/touch_pointer.html (100%) rename client/Android/{FreeRDPCore => aFreeRDP}/assets/help_page/touch_pointer.png (100%) rename client/Android/{FreeRDPCore => aFreeRDP}/assets/help_page/touch_pointer_phone.html (100%) rename client/Android/{FreeRDPCore => aFreeRDP}/assets/help_page/touch_pointer_phone.png (100%) rename client/Android/{FreeRDPCore => aFreeRDP}/assets/welcome_page/1.png (100%) rename client/Android/{FreeRDPCore => aFreeRDP}/assets/welcome_page/2.png (100%) rename client/Android/{FreeRDPCore => aFreeRDP}/assets/welcome_page/back.jpg (100%) rename client/Android/{FreeRDPCore => aFreeRDP}/assets/welcome_page/new_connection.png (100%) rename client/Android/{FreeRDPCore => aFreeRDP}/assets/welcome_page/welcome.html (100%) rename client/Android/{FreeRDPCore => aFreeRDP}/assets/welcome_page/welcome_phone.html (100%) delete mode 100644 client/Android/aFreeRDP/lint.xml delete mode 100644 client/Android/aFreeRDP/res/values/dimens.xml delete mode 100644 client/Android/aFreeRDP/res/values/integers.xml delete mode 100644 client/Android/aFreeRDP/res/values/theme.xml diff --git a/client/Android/FreeRDPCore/AndroidManifest.xml.cmake b/client/Android/FreeRDPCore/AndroidManifest.xml.cmake index 4dd2283aa..03344d43f 100644 --- a/client/Android/FreeRDPCore/AndroidManifest.xml.cmake +++ b/client/Android/FreeRDPCore/AndroidManifest.xml.cmake @@ -12,17 +12,6 @@ - - - - - - - - - - diff --git a/client/Android/aFreeRDP/AndroidManifest.xml.cmake b/client/Android/aFreeRDP/AndroidManifest.xml.cmake index 2ef28260d..2fcd495d2 100644 --- a/client/Android/aFreeRDP/AndroidManifest.xml.cmake +++ b/client/Android/aFreeRDP/AndroidManifest.xml.cmake @@ -25,6 +25,29 @@ + + + + + + + + + + + + + + + + diff --git a/client/Android/FreeRDPCore/assets/about_page/FreeRDP_Logo.png b/client/Android/aFreeRDP/assets/about_page/FreeRDP_Logo.png similarity index 100% rename from client/Android/FreeRDPCore/assets/about_page/FreeRDP_Logo.png rename to client/Android/aFreeRDP/assets/about_page/FreeRDP_Logo.png diff --git a/client/Android/FreeRDPCore/assets/about_page/about.html b/client/Android/aFreeRDP/assets/about_page/about.html similarity index 100% rename from client/Android/FreeRDPCore/assets/about_page/about.html rename to client/Android/aFreeRDP/assets/about_page/about.html diff --git a/client/Android/FreeRDPCore/assets/about_page/about_phone.html b/client/Android/aFreeRDP/assets/about_page/about_phone.html similarity index 100% rename from client/Android/FreeRDPCore/assets/about_page/about_phone.html rename to client/Android/aFreeRDP/assets/about_page/about_phone.html diff --git a/client/Android/FreeRDPCore/assets/about_page/back.jpg b/client/Android/aFreeRDP/assets/about_page/back.jpg similarity index 100% rename from client/Android/FreeRDPCore/assets/about_page/back.jpg rename to client/Android/aFreeRDP/assets/about_page/back.jpg diff --git a/client/Android/FreeRDPCore/assets/about_page/background_transparent.png b/client/Android/aFreeRDP/assets/about_page/background_transparent.png similarity index 100% rename from client/Android/FreeRDPCore/assets/about_page/background_transparent.png rename to client/Android/aFreeRDP/assets/about_page/background_transparent.png diff --git a/client/Android/FreeRDPCore/assets/help_page/back.jpg b/client/Android/aFreeRDP/assets/help_page/back.jpg similarity index 100% rename from client/Android/FreeRDPCore/assets/help_page/back.jpg rename to client/Android/aFreeRDP/assets/help_page/back.jpg diff --git a/client/Android/FreeRDPCore/assets/help_page/gestures.html b/client/Android/aFreeRDP/assets/help_page/gestures.html similarity index 100% rename from client/Android/FreeRDPCore/assets/help_page/gestures.html rename to client/Android/aFreeRDP/assets/help_page/gestures.html diff --git a/client/Android/FreeRDPCore/assets/help_page/gestures.png b/client/Android/aFreeRDP/assets/help_page/gestures.png similarity index 100% rename from client/Android/FreeRDPCore/assets/help_page/gestures.png rename to client/Android/aFreeRDP/assets/help_page/gestures.png diff --git a/client/Android/FreeRDPCore/assets/help_page/gestures_phone.html b/client/Android/aFreeRDP/assets/help_page/gestures_phone.html similarity index 100% rename from client/Android/FreeRDPCore/assets/help_page/gestures_phone.html rename to client/Android/aFreeRDP/assets/help_page/gestures_phone.html diff --git a/client/Android/FreeRDPCore/assets/help_page/gestures_phone.png b/client/Android/aFreeRDP/assets/help_page/gestures_phone.png similarity index 100% rename from client/Android/FreeRDPCore/assets/help_page/gestures_phone.png rename to client/Android/aFreeRDP/assets/help_page/gestures_phone.png diff --git a/client/Android/FreeRDPCore/assets/help_page/nav_gestures.png b/client/Android/aFreeRDP/assets/help_page/nav_gestures.png similarity index 100% rename from client/Android/FreeRDPCore/assets/help_page/nav_gestures.png rename to client/Android/aFreeRDP/assets/help_page/nav_gestures.png diff --git a/client/Android/FreeRDPCore/assets/help_page/nav_toolbar.png b/client/Android/aFreeRDP/assets/help_page/nav_toolbar.png similarity index 100% rename from client/Android/FreeRDPCore/assets/help_page/nav_toolbar.png rename to client/Android/aFreeRDP/assets/help_page/nav_toolbar.png diff --git a/client/Android/FreeRDPCore/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/FreeRDPCore/assets/help_page/nav_touch_pointer.png rename to client/Android/aFreeRDP/assets/help_page/nav_touch_pointer.png diff --git a/client/Android/FreeRDPCore/assets/help_page/toolbar.html b/client/Android/aFreeRDP/assets/help_page/toolbar.html similarity index 100% rename from client/Android/FreeRDPCore/assets/help_page/toolbar.html rename to client/Android/aFreeRDP/assets/help_page/toolbar.html diff --git a/client/Android/FreeRDPCore/assets/help_page/toolbar.png b/client/Android/aFreeRDP/assets/help_page/toolbar.png similarity index 100% rename from client/Android/FreeRDPCore/assets/help_page/toolbar.png rename to client/Android/aFreeRDP/assets/help_page/toolbar.png diff --git a/client/Android/FreeRDPCore/assets/help_page/toolbar_phone.html b/client/Android/aFreeRDP/assets/help_page/toolbar_phone.html similarity index 100% rename from client/Android/FreeRDPCore/assets/help_page/toolbar_phone.html rename to client/Android/aFreeRDP/assets/help_page/toolbar_phone.html diff --git a/client/Android/FreeRDPCore/assets/help_page/toolbar_phone.png b/client/Android/aFreeRDP/assets/help_page/toolbar_phone.png similarity index 100% rename from client/Android/FreeRDPCore/assets/help_page/toolbar_phone.png rename to client/Android/aFreeRDP/assets/help_page/toolbar_phone.png diff --git a/client/Android/FreeRDPCore/assets/help_page/touch_pointer.html b/client/Android/aFreeRDP/assets/help_page/touch_pointer.html similarity index 100% rename from client/Android/FreeRDPCore/assets/help_page/touch_pointer.html rename to client/Android/aFreeRDP/assets/help_page/touch_pointer.html diff --git a/client/Android/FreeRDPCore/assets/help_page/touch_pointer.png b/client/Android/aFreeRDP/assets/help_page/touch_pointer.png similarity index 100% rename from client/Android/FreeRDPCore/assets/help_page/touch_pointer.png rename to client/Android/aFreeRDP/assets/help_page/touch_pointer.png diff --git a/client/Android/FreeRDPCore/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/FreeRDPCore/assets/help_page/touch_pointer_phone.html rename to client/Android/aFreeRDP/assets/help_page/touch_pointer_phone.html diff --git a/client/Android/FreeRDPCore/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/FreeRDPCore/assets/help_page/touch_pointer_phone.png rename to client/Android/aFreeRDP/assets/help_page/touch_pointer_phone.png diff --git a/client/Android/FreeRDPCore/assets/welcome_page/1.png b/client/Android/aFreeRDP/assets/welcome_page/1.png similarity index 100% rename from client/Android/FreeRDPCore/assets/welcome_page/1.png rename to client/Android/aFreeRDP/assets/welcome_page/1.png diff --git a/client/Android/FreeRDPCore/assets/welcome_page/2.png b/client/Android/aFreeRDP/assets/welcome_page/2.png similarity index 100% rename from client/Android/FreeRDPCore/assets/welcome_page/2.png rename to client/Android/aFreeRDP/assets/welcome_page/2.png diff --git a/client/Android/FreeRDPCore/assets/welcome_page/back.jpg b/client/Android/aFreeRDP/assets/welcome_page/back.jpg similarity index 100% rename from client/Android/FreeRDPCore/assets/welcome_page/back.jpg rename to client/Android/aFreeRDP/assets/welcome_page/back.jpg diff --git a/client/Android/FreeRDPCore/assets/welcome_page/new_connection.png b/client/Android/aFreeRDP/assets/welcome_page/new_connection.png similarity index 100% rename from client/Android/FreeRDPCore/assets/welcome_page/new_connection.png rename to client/Android/aFreeRDP/assets/welcome_page/new_connection.png diff --git a/client/Android/FreeRDPCore/assets/welcome_page/welcome.html b/client/Android/aFreeRDP/assets/welcome_page/welcome.html similarity index 100% rename from client/Android/FreeRDPCore/assets/welcome_page/welcome.html rename to client/Android/aFreeRDP/assets/welcome_page/welcome.html diff --git a/client/Android/FreeRDPCore/assets/welcome_page/welcome_phone.html b/client/Android/aFreeRDP/assets/welcome_page/welcome_phone.html similarity index 100% rename from client/Android/FreeRDPCore/assets/welcome_page/welcome_phone.html rename to client/Android/aFreeRDP/assets/welcome_page/welcome_phone.html diff --git a/client/Android/aFreeRDP/lint.xml b/client/Android/aFreeRDP/lint.xml deleted file mode 100644 index ee0eead5b..000000000 --- a/client/Android/aFreeRDP/lint.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/client/Android/aFreeRDP/res/values/dimens.xml b/client/Android/aFreeRDP/res/values/dimens.xml deleted file mode 100644 index dc7f5bb72..000000000 --- a/client/Android/aFreeRDP/res/values/dimens.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - 50dip - \ No newline at end of file diff --git a/client/Android/aFreeRDP/res/values/integers.xml b/client/Android/aFreeRDP/res/values/integers.xml deleted file mode 100644 index f6a53db51..000000000 --- a/client/Android/aFreeRDP/res/values/integers.xml +++ /dev/null @@ -1,72 +0,0 @@ - - - - 0xF1 - 0xF2 - 0xF3 - - - 0x01 - 0x02 - - - 0x03 - 0x04 - 0x05 - - 0x06 - 0x07 - 0x08 - 0x09 - - - 0x0A - 0x0B - 0x0C - 0x0D - 0x0E - 0x0F - 0x10 - 0x11 - 0x12 - 0x13 - 0x14 - 0x15 - 0x16 - 0x17 - 0x18 - 0x19 - 0x1A - 0x1B - 0x1C - 0x1D - - - 0x1E - 0x1F - 0x20 - 0x21 - 0x22 - 0x23 - 0x24 - 0x25 - 0x26 - 0x27 - 0x28 - 0x29 - 0x2A - 0x2B - 0x2C - 0x2D - 0x2E - 0x2F - 0x30 - 0x31 - - - 0x32 - 0x33 - 0x34 - 0x45 - - diff --git a/client/Android/aFreeRDP/res/values/theme.xml b/client/Android/aFreeRDP/res/values/theme.xml deleted file mode 100644 index ef321c4c0..000000000 --- a/client/Android/aFreeRDP/res/values/theme.xml +++ /dev/null @@ -1,57 +0,0 @@ - - - - - - - - - - - From f88ffee1512016c3076b9a84fe120fd1491c7cdc Mon Sep 17 00:00:00 2001 From: Martin Fleisz Date: Wed, 20 Feb 2013 02:08:02 -0800 Subject: [PATCH 05/29] New optimized NEON yCbCr to RGB conversion --- libfreerdp/primitives/prim_colors.c | 138 ++++++++++++++++++++-------- 1 file changed, 102 insertions(+), 36 deletions(-) diff --git a/libfreerdp/primitives/prim_colors.c b/libfreerdp/primitives/prim_colors.c index e6e7a18bf..19d1711b4 100644 --- a/libfreerdp/primitives/prim_colors.c +++ b/libfreerdp/primitives/prim_colors.c @@ -623,6 +623,59 @@ PRIM_STATIC pstatus_t sse2_RGBToRGB_16s8u_P3AC4R( } #endif /* WITH_SSE2 */ + +void rfx_decode_YCbCr_to_RGB_NEON(INT16 * y_r_buffer, INT16 * cb_g_buffer, INT16 * cr_b_buffer) +{ + 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_r_buf = (int16x8_t*) y_r_buffer; + int16x8_t* cb_g_buf = (int16x8_t*) cb_g_buffer; + int16x8_t* cr_b_buf = (int16x8_t*) cr_b_buffer; + + int i; + for (i = 0; i < 4096 / 8; i++) + { + int16x8_t y = vld1q_s16((INT16*) &y_r_buf[i]); + y = vaddq_s16(y, c4096); + y = vshrq_n_s16(y, 2); + + // cb = cb_g_buf[i]; + int16x8_t cb = vld1q_s16((INT16*)&cb_g_buf[i]); + + // cr = cr_b_buf[i]; + int16x8_t cr = vld1q_s16((INT16*) &cr_b_buf[i]); + + + // r = between((y + cr + (cr >> 2) + (cr >> 3) + (cr >> 5)), 0, 255); + int16x8_t r = vaddq_s16(y, vshrq_n_s16(vqdmulhq_s16(cr, r_cr), 1)); + r = vshrq_n_s16(r, 3); + r = vminq_s16(vmaxq_s16(r, zero), max); + vst1q_s16((INT16*)&y_r_buf[i], r); + + + // g = between(y - (cb >> 2) - (cb >> 4) - (cb >> 5) - (cr >> 1) - (cr >> 3) - (cr >> 4) - (cr >> 5), 0, 255); + 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 = vminq_s16(vmaxq_s16(g, zero), max); + vst1q_s16((INT16*)&cb_g_buf[i], g); + + // b = between((y + cb + (cb >> 1) + (cb >> 2) + (cb >> 6)), 0, 255); + int16x8_t b = vaddq_s16(y, vshrq_n_s16(vqdmulhq_s16(cb, b_cb), 1)); + b = vshrq_n_s16(b, 3); + b = vminq_s16(vmaxq_s16(b, zero), max); + vst1q_s16((INT16*)&cr_b_buf[i], b); + } + +} + /*---------------------------------------------------------------------------*/ #ifdef WITH_NEON PRIM_STATIC pstatus_t neon_yCbCrToRGB_16s16s_P3P3( @@ -632,11 +685,15 @@ PRIM_STATIC pstatus_t neon_yCbCrToRGB_16s16s_P3P3( 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 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]; @@ -655,47 +712,56 @@ PRIM_STATIC pstatus_t neon_yCbCrToRGB_16s16s_P3P3( 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]); - /* r = between((y + cr + (cr >> 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)); + /* (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); + 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)); + /* (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); + 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)); + /* (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); + vst1q_s16((INT16*)&b_buf[i], b); } + y_buf += srcbump; cb_buf += srcbump; cr_buf += srcbump; From b5d6b43700b9dedba5b392b884e42e1be829009b Mon Sep 17 00:00:00 2001 From: Martin Fleisz Date: Wed, 20 Feb 2013 05:33:42 -0800 Subject: [PATCH 06/29] Fixed and improved performance of NEON yCbCr to RGB conversion --- libfreerdp/primitives/prim_colors.c | 82 +++++++++++++++++------------ 1 file changed, 48 insertions(+), 34 deletions(-) diff --git a/libfreerdp/primitives/prim_colors.c b/libfreerdp/primitives/prim_colors.c index e6e7a18bf..865f4767c 100644 --- a/libfreerdp/primitives/prim_colors.c +++ b/libfreerdp/primitives/prim_colors.c @@ -636,7 +636,12 @@ PRIM_STATIC pstatus_t neon_yCbCrToRGB_16s16s_P3P3( int16x8_t zero = vdupq_n_s16(0); int16x8_t max = vdupq_n_s16(255); - int16x8_t y_add = vdupq_n_s16(128); + + 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]; @@ -655,47 +660,56 @@ PRIM_STATIC pstatus_t neon_yCbCrToRGB_16s16s_P3P3( 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]); - /* r = between((y + cr + (cr >> 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)); + /* (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); + 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)); + /* (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); + 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)); + /* (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); + vst1q_s16((INT16*)&b_buf[i], b); } + y_buf += srcbump; cb_buf += srcbump; cr_buf += srcbump; From 3a75dea05b2b49b7bbce4b9a0f98c8678ecfe16d Mon Sep 17 00:00:00 2001 From: Bernhard Miklautz Date: Wed, 20 Feb 2013 15:26:56 +0100 Subject: [PATCH 07/29] server/Sample: fix color depth negotiation --- server/Sample/sfreerdp.c | 1 + 1 file changed, 1 insertion(+) 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; From 343d210a75f65a748f2003bcd8a5bd387bdea120 Mon Sep 17 00:00:00 2001 From: Martin Fleisz Date: Thu, 21 Feb 2013 02:45:10 -0800 Subject: [PATCH 08/29] primitives: separating optimized functions into their own .c files. This way we use certain compiler flags (like -msse3) only on files containing optimized code. This avoids problems that occured when using these flags compiling generic code and running it on platforms that don't support these optimizations (i.e. NEON optimization on ARM platforms). --- libfreerdp/primitives/CMakeLists.txt | 13 +- libfreerdp/primitives/prim_add.c | 34 +- libfreerdp/primitives/prim_add.h | 30 ++ libfreerdp/primitives/prim_add_opt.c | 62 +++ libfreerdp/primitives/prim_alphaComp.c | 195 +------ libfreerdp/primitives/prim_alphaComp.h | 30 ++ libfreerdp/primitives/prim_alphaComp_opt.c | 225 +++++++++ libfreerdp/primitives/prim_andor.c | 40 +- libfreerdp/primitives/prim_andor.h | 31 ++ libfreerdp/primitives/prim_andor_opt.c | 61 +++ libfreerdp/primitives/prim_colors.c | 538 +------------------- libfreerdp/primitives/prim_colors.h | 32 ++ libfreerdp/primitives/prim_colors_opt.c | 561 +++++++++++++++++++++ libfreerdp/primitives/prim_copy.c | 4 +- libfreerdp/primitives/prim_internal.h | 9 - libfreerdp/primitives/prim_set.c | 198 +------- libfreerdp/primitives/prim_set.h | 34 ++ libfreerdp/primitives/prim_set_opt.c | 218 ++++++++ libfreerdp/primitives/prim_shift.c | 66 +-- libfreerdp/primitives/prim_shift.h | 35 ++ libfreerdp/primitives/prim_shift_opt.c | 79 +++ libfreerdp/primitives/prim_sign.c | 126 +---- libfreerdp/primitives/prim_sign.h | 30 ++ libfreerdp/primitives/prim_sign_opt.c | 149 ++++++ libfreerdp/primitives/prim_templates.h | 6 +- 25 files changed, 1640 insertions(+), 1166 deletions(-) create mode 100644 libfreerdp/primitives/prim_add.h create mode 100644 libfreerdp/primitives/prim_add_opt.c create mode 100644 libfreerdp/primitives/prim_alphaComp.h create mode 100644 libfreerdp/primitives/prim_alphaComp_opt.c create mode 100644 libfreerdp/primitives/prim_andor.h create mode 100644 libfreerdp/primitives/prim_andor_opt.c create mode 100644 libfreerdp/primitives/prim_colors.h create mode 100644 libfreerdp/primitives/prim_colors_opt.c create mode 100644 libfreerdp/primitives/prim_set.h create mode 100644 libfreerdp/primitives/prim_set_opt.c create mode 100644 libfreerdp/primitives/prim_shift.h create mode 100644 libfreerdp/primitives/prim_shift_opt.c create mode 100644 libfreerdp/primitives/prim_sign.h create mode 100644 libfreerdp/primitives/prim_sign_opt.c diff --git a/libfreerdp/primitives/CMakeLists.txt b/libfreerdp/primitives/CMakeLists.txt index 01dce882b..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 @@ -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 865f4767c..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,514 +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 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(const primitives_hints_t* hints, primitives_t* prims) { @@ -734,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); } /* ------------------------------------------------------------------------- */ @@ -754,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; \ From 22cc6341a648c73a398e5b09d47561f7707031f8 Mon Sep 17 00:00:00 2001 From: Martin Fleisz Date: Thu, 21 Feb 2013 03:27:10 -0800 Subject: [PATCH 09/29] codec/primitives: NEON now enabled for iOS --- libfreerdp/codec/rfx_neon.c | 5 ++++- libfreerdp/primitives/primitives.c | 4 +++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/libfreerdp/codec/rfx_neon.c b/libfreerdp/codec/rfx_neon.c index 7331ea18b..47ab07840 100644 --- a/libfreerdp/codec/rfx_neon.c +++ b/libfreerdp/codec/rfx_neon.c @@ -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/primitives/primitives.c b/libfreerdp/primitives/primitives.c index ddafe7815..7fd85f40b 100644 --- a/libfreerdp/primitives/primitives.c +++ b/libfreerdp/primitives/primitives.c @@ -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; } From e8192239394ec037b5480fd8c15cee541f300f34 Mon Sep 17 00:00:00 2001 From: Martin Fleisz Date: Thu, 21 Feb 2013 03:31:07 -0800 Subject: [PATCH 10/29] primitives: renamed NEON detection function --- libfreerdp/primitives/primitives.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libfreerdp/primitives/primitives.c b/libfreerdp/primitives/primitives.c index 7fd85f40b..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; @@ -174,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 From 334f1e778233bb51fb0a6494980880a5d0d8af6c Mon Sep 17 00:00:00 2001 From: Martin Fleisz Date: Thu, 21 Feb 2013 04:16:30 -0800 Subject: [PATCH 11/29] Android: renaming of JNI API --- .../jni/generated/android_freerdp_jni.h | 2 +- ...freerdp_freerdpcore_services_LibFreeRDP.h} | 34 +++++++++---------- 2 files changed, 18 insertions(+), 18 deletions(-) rename client/Android/FreeRDPCore/jni/generated/{com_freerdp_afreerdp_services_LibFreeRDP.h => com_freerdp_freerdpcore_services_LibFreeRDP.h} (76%) diff --git a/client/Android/FreeRDPCore/jni/generated/android_freerdp_jni.h b/client/Android/FreeRDPCore/jni/generated/android_freerdp_jni.h index fd5c82c32..fab4c7290 100644 --- a/client/Android/FreeRDPCore/jni/generated/android_freerdp_jni.h +++ b/client/Android/FreeRDPCore/jni/generated/android_freerdp_jni.h @@ -20,7 +20,7 @@ #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/freerdpcore/services/LibFreeRDP" diff --git a/client/Android/FreeRDPCore/jni/generated/com_freerdp_afreerdp_services_LibFreeRDP.h b/client/Android/FreeRDPCore/jni/generated/com_freerdp_freerdpcore_services_LibFreeRDP.h similarity index 76% rename from client/Android/FreeRDPCore/jni/generated/com_freerdp_afreerdp_services_LibFreeRDP.h rename to client/Android/FreeRDPCore/jni/generated/com_freerdp_freerdpcore_services_LibFreeRDP.h index 9d33c08dd..17c62cd99 100644 --- a/client/Android/FreeRDPCore/jni/generated/com_freerdp_afreerdp_services_LibFreeRDP.h +++ b/client/Android/FreeRDPCore/jni/generated/com_freerdp_freerdpcore_services_LibFreeRDP.h @@ -1,14 +1,14 @@ /* DO NOT EDIT THIS FILE - it is machine generated */ #include -/* Header for class com_freerdp_afreerdp_services_LibFreeRDP */ +/* Header for class com_freerdp_freerdpcore_services_LibFreeRDP */ -#ifndef _Included_com_freerdp_afreerdp_services_LibFreeRDP -#define _Included_com_freerdp_afreerdp_services_LibFreeRDP +#ifndef _Included_com_freerdp_freerdpcore_services_LibFreeRDP +#define _Included_com_freerdp_freerdpcore_services_LibFreeRDP #ifdef __cplusplus extern "C" { #endif /* - * Class: com_freerdp_afreerdp_services_LibFreeRDP + * Class: com_freerdp_freerdpcore_services_LibFreeRDP * Method: freerdp_new * Signature: ()I */ @@ -16,7 +16,7 @@ JNIEXPORT jint JNICALL Java_com_freerdp_freerdpcore_services_LibFreeRDP_freerdp_ (JNIEnv *, jclass); /* - * Class: com_freerdp_afreerdp_services_LibFreeRDP + * Class: com_freerdp_freerdpcore_services_LibFreeRDP * Method: freerdp_free * Signature: (I)V */ @@ -24,7 +24,7 @@ JNIEXPORT void JNICALL Java_com_freerdp_freerdpcore_services_LibFreeRDP_freerdp_ (JNIEnv *, jclass, jint); /* - * Class: com_freerdp_afreerdp_services_LibFreeRDP + * Class: com_freerdp_freerdpcore_services_LibFreeRDP * Method: freerdp_connect * Signature: (I)Z */ @@ -32,7 +32,7 @@ JNIEXPORT jboolean JNICALL Java_com_freerdp_freerdpcore_services_LibFreeRDP_free (JNIEnv *, jclass, jint); /* - * Class: com_freerdp_afreerdp_services_LibFreeRDP + * Class: com_freerdp_freerdpcore_services_LibFreeRDP * Method: freerdp_disconnect * Signature: (I)Z */ @@ -40,7 +40,7 @@ JNIEXPORT jboolean JNICALL Java_com_freerdp_freerdpcore_services_LibFreeRDP_free (JNIEnv *, jclass, jint); /* - * Class: com_freerdp_afreerdp_services_LibFreeRDP + * Class: com_freerdp_freerdpcore_services_LibFreeRDP * Method: freerdp_cancel_connection * Signature: (I)V */ @@ -48,7 +48,7 @@ JNIEXPORT void JNICALL Java_com_freerdp_freerdpcore_services_LibFreeRDP_freerdp_ (JNIEnv *, jclass, jint); /* - * Class: com_freerdp_afreerdp_services_LibFreeRDP + * 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 */ @@ -56,7 +56,7 @@ JNIEXPORT void JNICALL Java_com_freerdp_freerdpcore_services_LibFreeRDP_freerdp_ (JNIEnv *, jclass, jint, jstring, jstring, jstring, jstring, jint, jint, jint, jint, jboolean, jint, jstring); /* - * Class: com_freerdp_afreerdp_services_LibFreeRDP + * Class: com_freerdp_freerdpcore_services_LibFreeRDP * Method: freerdp_set_performance_flags * Signature: (IZZZZZZZ)V */ @@ -64,7 +64,7 @@ JNIEXPORT void JNICALL Java_com_freerdp_freerdpcore_services_LibFreeRDP_freerdp_ (JNIEnv *, jclass, jint, jboolean, jboolean, jboolean, jboolean, jboolean, jboolean, jboolean); /* - * Class: com_freerdp_afreerdp_services_LibFreeRDP + * Class: com_freerdp_freerdpcore_services_LibFreeRDP * Method: freerdp_set_advanced_settings * Signature: (ILjava/lang/String;Ljava/lang/String;)V */ @@ -72,7 +72,7 @@ JNIEXPORT void JNICALL Java_com_freerdp_freerdpcore_services_LibFreeRDP_freerdp_ (JNIEnv *, jclass, jint, jstring, jstring); /* - * Class: com_freerdp_afreerdp_services_LibFreeRDP + * Class: com_freerdp_freerdpcore_services_LibFreeRDP * Method: freerdp_set_data_directory * Signature: (ILjava/lang/String;)V */ @@ -80,7 +80,7 @@ JNIEXPORT void JNICALL Java_com_freerdp_freerdpcore_services_LibFreeRDP_freerdp_ (JNIEnv *, jclass, jint, jstring); /* - * Class: com_freerdp_afreerdp_services_LibFreeRDP + * Class: com_freerdp_freerdpcore_services_LibFreeRDP * Method: freerdp_update_graphics * Signature: (ILandroid/graphics/Bitmap;IIII)Z */ @@ -88,7 +88,7 @@ JNIEXPORT jboolean JNICALL Java_com_freerdp_freerdpcore_services_LibFreeRDP_free (JNIEnv *, jclass, jint, jobject, jint, jint, jint, jint); /* - * Class: com_freerdp_afreerdp_services_LibFreeRDP + * Class: com_freerdp_freerdpcore_services_LibFreeRDP * Method: freerdp_send_cursor_event * Signature: (IIII)V */ @@ -96,7 +96,7 @@ JNIEXPORT void JNICALL Java_com_freerdp_freerdpcore_services_LibFreeRDP_freerdp_ (JNIEnv *, jclass, jint, jint, jint, jint); /* - * Class: com_freerdp_afreerdp_services_LibFreeRDP + * Class: com_freerdp_freerdpcore_services_LibFreeRDP * Method: freerdp_send_key_event * Signature: (IIZ)V */ @@ -104,7 +104,7 @@ JNIEXPORT void JNICALL Java_com_freerdp_freerdpcore_services_LibFreeRDP_freerdp_ (JNIEnv *, jclass, jint, jint, jboolean); /* - * Class: com_freerdp_afreerdp_services_LibFreeRDP + * Class: com_freerdp_freerdpcore_services_LibFreeRDP * Method: freerdp_send_unicodekey_event * Signature: (II)V */ @@ -112,7 +112,7 @@ JNIEXPORT void JNICALL Java_com_freerdp_freerdpcore_services_LibFreeRDP_freerdp_ (JNIEnv *, jclass, jint, jint); /* - * Class: com_freerdp_afreerdp_services_LibFreeRDP + * Class: com_freerdp_freerdpcore_services_LibFreeRDP * Method: freerdp_get_version * Signature: ()Ljava/lang/String; */ From 1cfb4a4e7756328018d9b6373246a82d158d7bfa Mon Sep 17 00:00:00 2001 From: Martin Fleisz Date: Thu, 21 Feb 2013 07:08:46 -0800 Subject: [PATCH 12/29] codec: Fixed NEON detection and incorrect RFX decoding --- libfreerdp/codec/rfx.c | 7 ++----- libfreerdp/codec/rfx_neon.c | 26 +++++++++++++------------- libfreerdp/codec/rfx_neon.h | 4 ---- libfreerdp/codec/rfx_sse2.h | 6 ++++-- 4 files changed, 19 insertions(+), 24 deletions(-) diff --git a/libfreerdp/codec/rfx.c b/libfreerdp/codec/rfx.c index e29a095ca..3bd247b60 100644 --- a/libfreerdp/codec/rfx.c +++ b/libfreerdp/codec/rfx.c @@ -45,13 +45,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) @@ -232,6 +227,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 47ab07840..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 */ } 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 */ From 58d49b402bf96a402c9abbf1c9283dfae85b808a Mon Sep 17 00:00:00 2001 From: Martin Fleisz Date: Fri, 22 Feb 2013 02:51:26 -0800 Subject: [PATCH 13/29] Android: Fixed certificate caching --- client/Android/FreeRDPCore/jni/android_freerdp.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/client/Android/FreeRDPCore/jni/android_freerdp.c b/client/Android/FreeRDPCore/jni/android_freerdp.c index 6a31ebc0e..91ad73c3e 100644 --- a/client/Android/FreeRDPCore/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); } From b8fd4b5227b290b70a9417ed19cb67a95f9d4467 Mon Sep 17 00:00:00 2001 From: Martin Fleisz Date: Fri, 22 Feb 2013 03:37:39 -0800 Subject: [PATCH 14/29] codec: Fixed NEON CPU detection compile issue, primitives_get race condition in rfx decoding --- libfreerdp/codec/CMakeLists.txt | 2 +- libfreerdp/codec/rfx.c | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/libfreerdp/codec/CMakeLists.txt b/libfreerdp/codec/CMakeLists.txt index f3a64f20d..5f4e26821 100644 --- a/libfreerdp/codec/CMakeLists.txt +++ b/libfreerdp/codec/CMakeLists.txt @@ -71,7 +71,7 @@ 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() diff --git a/libfreerdp/codec/rfx.c b/libfreerdp/codec/rfx.c index 3bd247b60..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" @@ -204,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); From 559522e346ab2415e978b89ad17bff4b333d1407 Mon Sep 17 00:00:00 2001 From: Christian Hofstaedtler Date: Sun, 24 Feb 2013 15:33:32 +0100 Subject: [PATCH 15/29] Fix out of bounds memory access with /printer:foo Printer redirection command line parser was checking the wrong way if a printer driver name was specified, causing the to segfault if no driver name was given. --- client/common/cmdline.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/common/cmdline.c b/client/common/cmdline.c index 8ea572320..e0784b9bb 100644 --- a/client/common/cmdline.c +++ b/client/common/cmdline.c @@ -290,7 +290,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); From e5fc288a51a432e2738dccfee78fa1ffb53fdf14 Mon Sep 17 00:00:00 2001 From: Martin Fleisz Date: Mon, 25 Feb 2013 02:37:07 -0800 Subject: [PATCH 16/29] Android: Fixed settings sub-screen handling, cleaned up strings.xml --- .../FreeRDPCore/res/values/strings.xml | 8 +- .../FreeRDPCore/res/xml/advanced_settings.xml | 12 +- .../FreeRDPCore/res/xml/bookmark_settings.xml | 28 ++- .../presentation/BookmarkActivity.java | 29 +++ .../Android/aFreeRDP/res/values/strings.xml | 172 ------------------ 5 files changed, 57 insertions(+), 192 deletions(-) diff --git a/client/Android/FreeRDPCore/res/values/strings.xml b/client/Android/FreeRDPCore/res/values/strings.xml index 780a7aa3e..810127219 100644 --- a/client/Android/FreeRDPCore/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/FreeRDPCore/res/xml/advanced_settings.xml b/client/Android/FreeRDPCore/res/xml/advanced_settings.xml index 232953567..9158acf16 100644 --- a/client/Android/FreeRDPCore/res/xml/advanced_settings.xml +++ b/client/Android/FreeRDPCore/res/xml/advanced_settings.xml @@ -15,13 +15,17 @@ - + - + diff --git a/client/Android/FreeRDPCore/res/xml/bookmark_settings.xml b/client/Android/FreeRDPCore/res/xml/bookmark_settings.xml index f13358128..c49d4272a 100644 --- a/client/Android/FreeRDPCore/res/xml/bookmark_settings.xml +++ b/client/Android/FreeRDPCore/res/xml/bookmark_settings.xml @@ -19,26 +19,34 @@ - + - + - - + + - - + + diff --git a/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/presentation/BookmarkActivity.java b/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/presentation/BookmarkActivity.java index ce5a830a2..078852f3b 100644 --- a/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/presentation/BookmarkActivity.java +++ b/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/presentation/BookmarkActivity.java @@ -17,11 +17,13 @@ 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/aFreeRDP/res/values/strings.xml b/client/Android/aFreeRDP/res/values/strings.xml index 780a7aa3e..f0aa7c6af 100644 --- a/client/Android/aFreeRDP/res/values/strings.xml +++ b/client/Android/aFreeRDP/res/values/strings.xml @@ -1,179 +1,7 @@ aFreeRDP - - - Yes - No - Cancel - Continue - Login - Logout - - Exit - About - Help - New Connection - Settings - - Connection - Connect - Edit - Delete - - Keyboard - Function Keys - Touch Pointer - home - disconnect - - Manual Connections - Active Sessions - - Login - No Servers - Connecting ... - Disconnecting ... - Connection Lost - Wrong Password - Invalid Username - Add Connection aFreeRDP - Connect to Computer Remote Computers - - Host - Label - Host - Port - Credentials - Credentials - Username - Password - Domain - Settings - Screen - Screen Settings - Colors - - High Color (16 Bit) - True Color (24 Bit) - Highest Quality (32 Bit) - - - 16 - 24 - 32 - - Resolution - Automatic - Custom - - Automatic - Custom - 640x480 - 720x480 - 800x600 - 1024x768 - 1280x1024 - 1440x900 - 1920x1080 - 1920x1200 - - - automatic - custom - 640x480 - 720x480 - 800x600 - 1024x768 - 1280x1024 - 1440x900 - 1920x1080 - 1920x1200 - - Width - Height - Performance - Performance Settings - RemoteFX - Desktop Background - Font Smoothing - Desktop Composition - Window contents while dragging - Menu Animation - Visual Styles - Advanced - Advanced Settings - 3G Settings - 3G Screen - 3G Performance - Security - - Automatic - RDP - TLS - NLA - - - 0 - 1 - 2 - 3 - - Remote Program - Working Directory - Console Mode - - ******* - not set - User Interface - Hide Status Bar - Hide Zoom Controls - Swap Mouse Buttons - Invert Scrolling - Touch Pointer Auto Scroll - Show Dialog on Exit - Power Saving - Close idle Connections - Security - Accept all Certificates - Clear Certificate Cache - After %1$d Minutes - Disabled - - Connection Settings - Settings - aFreeRDP - FreeRDP for Android - RDP Connections - Help - About - - Cancel without saving? - Press "Cancel" to abort!\nPress "Continue" to specify the required fields! - Failed to establish a connection to the server! - - The screen settings have changed because the server does not support the settings you specified! - Deleted the certificate cache! - Failed to delete certificate cache! - - Verify Certificate - The identity of the remote computer cannot be verified. Do you want to connect anyway? - Please enter your credentials - Create Shortcut - Shortcut name: - Connecting ... - Logging in ... - About aFreeRDP - Version: %1$s\n\u00A9 2012 Thinstuff Technologies GmbH - Save Connection Settings? - Your connection settings have not been saved! Do you want to save them? - Save Connection? - Do you want to save any changes you made to the connection settings? - Do not ask again - Exit Application? - Are you sure you want to exit the application? - Delete Certificates? - Are you sure you want to delete all your cached Certificates? From f417c32c407e9fd73ae94365793796d24fec62eb Mon Sep 17 00:00:00 2001 From: Norbert Schneider Date: Mon, 25 Feb 2013 15:10:39 +0100 Subject: [PATCH 17/29] windows keys for Mac Map apple command keys to win keys --- keymaps/macosx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/keymaps/macosx b/keymaps/macosx index 8363f81cc..6ea8fb0b9 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 <69> VK_LCONTROL <67> VK_LMENU <66> VK_LSHIFT <64> From 69f83eba3ef7871dd37f2f92589a2ec3b0df6d41 Mon Sep 17 00:00:00 2001 From: Norbert Schneider Date: Mon, 25 Feb 2013 15:49:59 +0100 Subject: [PATCH 18/29] VK_RMENU corrected --- keymaps/macosx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keymaps/macosx b/keymaps/macosx index 6ea8fb0b9..5312d4c0e 100644 --- a/keymaps/macosx +++ b/keymaps/macosx @@ -62,7 +62,7 @@ keyboard "macosx" VK_LCONTROL <67> VK_LMENU <66> VK_LSHIFT <64> - VK_RMENU <69> + VK_RMENU <71> VK_RSHIFT <68> VK_F1 <130> VK_F2 <128> From 4722e1a096f027c643dce361b9e8fb853f327fae Mon Sep 17 00:00:00 2001 From: Martin Fleisz Date: Mon, 25 Feb 2013 07:21:51 -0800 Subject: [PATCH 19/29] Android: Added test bookmark --- .../freerdpcore/services/BookmarkDB.java | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/services/BookmarkDB.java b/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/services/BookmarkDB.java index 4f209a299..1ea56d1f9 100644 --- a/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/services/BookmarkDB.java +++ b/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/services/BookmarkDB.java @@ -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,7 @@ public class BookmarkDB extends SQLiteOpenHelper + "width, " + "height) " + "VALUES ( " - + "16, -1, 0, 0);"; - db.execSQL(sqlInsertDefaultScreenEntry); + + "32, 1, 1024, 768);"; db.execSQL(sqlInsertDefaultScreenEntry); String sqlInsertDefaultPerfFlags = @@ -105,8 +103,7 @@ public class BookmarkDB extends SQLiteOpenHelper + "perf_font_smoothing, " + "perf_desktop_composition) " + "VALUES ( " - + "0, 0, 0, 0, 0, 0, 0);"; - db.execSQL(sqlInsertDefaultPerfFlags); + + "1, 0, 0, 0, 0, 0, 0);"; db.execSQL(sqlInsertDefaultPerfFlags); String sqlInsertDefaultSessionEntry = @@ -126,14 +123,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 From be275c8c06699c814e4ade6003f623ef14a59a26 Mon Sep 17 00:00:00 2001 From: Martin Fleisz Date: Mon, 25 Feb 2013 07:40:00 -0800 Subject: [PATCH 20/29] Android: Fixed test bookmark --- .../src/com/freerdp/freerdpcore/services/BookmarkDB.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/services/BookmarkDB.java b/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/services/BookmarkDB.java index 1ea56d1f9..5d10d7048 100644 --- a/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/services/BookmarkDB.java +++ b/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/services/BookmarkDB.java @@ -92,6 +92,7 @@ public class BookmarkDB extends SQLiteOpenHelper + "VALUES ( " + "32, 1, 1024, 768);"; db.execSQL(sqlInsertDefaultScreenEntry); + db.execSQL(sqlInsertDefaultScreenEntry); String sqlInsertDefaultPerfFlags = "INSERT INTO tbl_performance_flags (" @@ -105,6 +106,7 @@ public class BookmarkDB extends SQLiteOpenHelper + "VALUES ( " + "1, 0, 0, 0, 0, 0, 0);"; db.execSQL(sqlInsertDefaultPerfFlags); + db.execSQL(sqlInsertDefaultPerfFlags); String sqlInsertDefaultSessionEntry = "INSERT INTO tbl_manual_bookmarks (" From d9089f27307dd3eb5f0e1ddb233548bf40b78d62 Mon Sep 17 00:00:00 2001 From: Martin Fleisz Date: Mon, 25 Feb 2013 16:48:22 +0100 Subject: [PATCH 21/29] iOS: Added test bookmark --- client/iOS/Controllers/BookmarkListController.m | 4 ++++ client/iOS/Defaults.plist | 6 +++--- client/iOS/Models/GlobalDefaults.h | 1 + client/iOS/Models/GlobalDefaults.m | 13 +++++++++++++ 4 files changed, 21 insertions(+), 3 deletions(-) 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 From f8d0613e69f12298395220b9677af6bd1df1a67a Mon Sep 17 00:00:00 2001 From: Jason Mealins Date: Mon, 25 Feb 2013 12:18:03 -0800 Subject: [PATCH 22/29] Fixing LWIN and RWIN keycode definitions adding in the appropriate scancodes windows keys on mac os x --- libfreerdp/locale/keyboard_x11.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libfreerdp/locale/keyboard_x11.c b/libfreerdp/locale/keyboard_x11.c index d432f31ff..da7f28a5c 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 */ From 6da989258f4acbcaad96815b6a694a3c4b464c23 Mon Sep 17 00:00:00 2001 From: Jason Mealins Date: Mon, 25 Feb 2013 12:25:07 -0800 Subject: [PATCH 23/29] VK_RMENU defines right windows key changing 71 to VK_RMENU --- libfreerdp/locale/keyboard_x11.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libfreerdp/locale/keyboard_x11.c b/libfreerdp/locale/keyboard_x11.c index da7f28a5c..e606af1ac 100644 --- a/libfreerdp/locale/keyboard_x11.c +++ b/libfreerdp/locale/keyboard_x11.c @@ -283,9 +283,9 @@ const UINT32 KEYCODE_TO_VKCODE_MACOSX[256] = VK_LMENU, /* 66 */ VK_LCONTROL, /* 67 */ VK_RSHIFT, /* 68 */ - VK_RMENU, /* 69 */ + 0, /* 69 */ 0, /* 70 */ - VK_RWIN, /* 71 */ + VK_RMENU, /* 71 */ 0, /* 72 */ VK_DECIMAL, /* 73 */ 0, /* 74 */ From f8c4fa493855c01653679f13e43ab3be46c953ae Mon Sep 17 00:00:00 2001 From: Jason Mealins Date: Mon, 25 Feb 2013 17:13:19 -0800 Subject: [PATCH 24/29] Hard Coded and Keymap codes fixed for OS X fixed right menu and both left and right windows keycodes --- keymaps/macosx | 4 ++-- libfreerdp/locale/keyboard_x11.c | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/keymaps/macosx b/keymaps/macosx index 5312d4c0e..4f55dd72e 100644 --- a/keymaps/macosx +++ b/keymaps/macosx @@ -58,11 +58,11 @@ keyboard "macosx" VK_OEM_2 <52> VK_SPACE <57> VK_LWIN <63> - VK_RWIN <69> + VK_RWIN <71> VK_LCONTROL <67> VK_LMENU <66> VK_LSHIFT <64> - VK_RMENU <71> + VK_RMENU <69> VK_RSHIFT <68> VK_F1 <130> VK_F2 <128> diff --git a/libfreerdp/locale/keyboard_x11.c b/libfreerdp/locale/keyboard_x11.c index e606af1ac..da7f28a5c 100644 --- a/libfreerdp/locale/keyboard_x11.c +++ b/libfreerdp/locale/keyboard_x11.c @@ -283,9 +283,9 @@ const UINT32 KEYCODE_TO_VKCODE_MACOSX[256] = VK_LMENU, /* 66 */ VK_LCONTROL, /* 67 */ VK_RSHIFT, /* 68 */ - 0, /* 69 */ + VK_RMENU, /* 69 */ 0, /* 70 */ - VK_RMENU, /* 71 */ + VK_RWIN, /* 71 */ 0, /* 72 */ VK_DECIMAL, /* 73 */ 0, /* 74 */ From 382efe68ed1ceb0ffe567986f61f554f869633da Mon Sep 17 00:00:00 2001 From: Martin Fleisz Date: Tue, 26 Feb 2013 04:04:23 -0800 Subject: [PATCH 25/29] Android: Fixed shortcut launching --- client/Android/aFreeRDP/AndroidManifest.xml.cmake | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/client/Android/aFreeRDP/AndroidManifest.xml.cmake b/client/Android/aFreeRDP/AndroidManifest.xml.cmake index 2fcd495d2..e0d01c824 100644 --- a/client/Android/aFreeRDP/AndroidManifest.xml.cmake +++ b/client/Android/aFreeRDP/AndroidManifest.xml.cmake @@ -32,16 +32,19 @@ android:theme="@android:style/Theme.NoDisplay" android:noHistory="true" android:excludeFromRecents="true"> + + + - + - + Date: Tue, 26 Feb 2013 06:34:24 -0800 Subject: [PATCH 26/29] Android: Fixed incorrect handling of performance flags --- client/Android/FreeRDPCore/jni/android_freerdp.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/Android/FreeRDPCore/jni/android_freerdp.c b/client/Android/FreeRDPCore/jni/android_freerdp.c index 91ad73c3e..7f84dea75 100644 --- a/client/Android/FreeRDPCore/jni/android_freerdp.c +++ b/client/Android/FreeRDPCore/jni/android_freerdp.c @@ -659,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; } @@ -684,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; From ca2ef21933f232a45be7e7205c17e452ad283554 Mon Sep 17 00:00:00 2001 From: Martin Fleisz Date: Tue, 26 Feb 2013 08:10:26 -0800 Subject: [PATCH 27/29] codec: fixed potential crash in NSCodec implementation --- libfreerdp/codec/nsc.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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; From 026e9996d369a34966bd7ec33ebc41de2caf94e7 Mon Sep 17 00:00:00 2001 From: Alexander Gottwald Date: Tue, 26 Feb 2013 21:32:36 +0100 Subject: [PATCH 28/29] Issue #847: protocol deadlock in NLA fix ber_get_content_length and der_get_content_length to work for values around 0x80 and 0x100 Fix nego_token, auth_info and pub_key_auth content length calculation in credssp_send to fix a lockup in NLA protocol. --- libfreerdp/core/nla.c | 22 +++++++++++----------- libfreerdp/crypto/ber.c | 2 +- libfreerdp/crypto/der.c | 4 ++-- 3 files changed, 14 insertions(+), 14 deletions(-) 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..76d129237 100644 --- a/libfreerdp/crypto/ber.c +++ b/libfreerdp/crypto/ber.c @@ -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..d03bb24ad 100644 --- a/libfreerdp/crypto/der.c +++ b/libfreerdp/crypto/der.c @@ -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; From 132d736cd9d7fd61eec5e77728d342ac34d43d44 Mon Sep 17 00:00:00 2001 From: hardening Date: Wed, 27 Feb 2013 00:01:03 +0100 Subject: [PATCH 29/29] Fixed skip_length() methods --- libfreerdp/crypto/ber.c | 2 +- libfreerdp/crypto/der.c | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/libfreerdp/crypto/ber.c b/libfreerdp/crypto/ber.c index 76d129237..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; diff --git a/libfreerdp/crypto/der.c b/libfreerdp/crypto/der.c index d03bb24ad..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;