fixed, runtime determined settings need OnSettingUpdate callback handlers
authordavilla <davilla@4pi.com>
Tue, 8 Oct 2013 18:01:51 +0000 (14:01 -0400)
committerS. Davilla <davilla@4pi.com>
Tue, 8 Oct 2013 20:19:44 +0000 (16:19 -0400)
system/settings/android.xml
xbmc/Application.cpp
xbmc/settings/Settings.cpp

index ce46a88..4eb5a6c 100644 (file)
@@ -14,6 +14,9 @@
           <requirement>HAVE_AMCODEC</requirement>
           <level>2</level>
           <default>true</default>
+          <updates>
+            <update type="change" />
+          </updates>
         </setting>
       </group>
     </category>
@@ -34,6 +37,9 @@
           <visible>HAS_MEDIACODEC</visible>
           <level>2</level>
           <default>true</default>
+          <updates>
+            <update type="change" />
+          </updates>
         </setting>
       </group>
     </category>
index 080f614..a840870 100644 (file)
 
 #if defined(TARGET_ANDROID)
 #include "android/activity/XBMCApp.h"
+#include "android/activity/AndroidFeatures.h"
 #endif
 
 #ifdef TARGET_WINDOWS
 #include "utils/Environment.h"
 #endif
 
+#if defined(HAS_LIBAMCODEC)
+#include "utils/AMLUtils.h"
+#endif
+
 using namespace std;
 using namespace ADDON;
 using namespace XFILE;
@@ -1687,6 +1692,28 @@ bool CApplication::OnSettingUpdate(CSetting* &setting, const char *oldSettingId,
       return true;
     }
   }
+  else if (settingId == "videoplayer.useamcodec")
+  {
+    // Do not permit amcodec to be used on non-aml platforms.
+    // The setting will be hidden but the default value is true,
+    // so change it to false.
+    if (!aml_present())
+    {
+      CSettingBool *useamcodec = (CSettingBool*)setting;
+      useamcodec->SetValue(false);
+    }
+  }
+  else if (settingId == "videoplayer.usemediacodec")
+  {
+    // Do not permit MediaCodec to be used Android platforms that do not have it.
+    // The setting will be hidden but the default value is true,
+    // so change it to false.
+    if (CAndroidFeatures::GetVersion() < 16)
+    {
+      CSettingBool *usemediacodec = (CSettingBool*)setting;
+      usemediacodec->SetValue(false);
+    }
+  }
 
   return false;
 }
index da10a5d..0cacce6 100644 (file)
@@ -911,6 +911,8 @@ void CSettings::InitializeISettingCallbacks()
   settingSet.insert("screensaver.settings");
   settingSet.insert("videoscreen.guicalibration");
   settingSet.insert("videoscreen.testpattern");
+  settingSet.insert("videoplayer.useamcodec");
+  settingSet.insert("videoplayer.usemediacodec");
   m_settingsManager->RegisterCallback(&g_application, settingSet);
 
   settingSet.clear();