From: Piotr Kosko
Date: Thu, 11 Aug 2016 10:30:50 +0000 (+0200)
Subject: [PlayerUtil] Plugin implementation.
X-Git-Tag: submit/tizen/20160926.105746~1
X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=182f32a4f328f5a60d923f2c3313e00c89f2932e;p=platform%2Fcore%2Fapi%2Fwebapi-plugins.git
[PlayerUtil] Plugin implementation.
[Verification] Code compiles. Plugin is seen.
Getting and setting latency works correctly.
Change-Id: I567860a26327e8da911796c30e1ef8f2478c3dd8
Signed-off-by: Piotr Kosko
---
diff --git a/packaging/webapi-plugins.spec b/packaging/webapi-plugins.spec
index b9615121..f26ed42e 100644
--- a/packaging/webapi-plugins.spec
+++ b/packaging/webapi-plugins.spec
@@ -62,6 +62,7 @@ Source0: %{name}-%{version}.tar.gz
%define tizen_feature_nfc_support 0
%define tizen_feature_notification_support 0
%define tizen_feature_package_support 1
+%define tizen_feature_player_util_support 0
%define tizen_feature_power_support 0
%define tizen_feature_preference_support 0
%define tizen_feature_push_support 0
@@ -137,6 +138,7 @@ Source0: %{name}-%{version}.tar.gz
#%endif
%define tizen_feature_notification_support 1
%define tizen_feature_package_support 1
+%define tizen_feature_player_util_support 1
%define tizen_feature_power_support 1
%define tizen_feature_preference_support 1
%define tizen_feature_push_support 1
@@ -241,6 +243,7 @@ Source0: %{name}-%{version}.tar.gz
%define tizen_feature_nfc_support 1
%define tizen_feature_notification_support 1
%define tizen_feature_package_support 1
+%define tizen_feature_player_util_support 1
%define tizen_feature_power_support 1
%define tizen_feature_preference_support 1
%define tizen_feature_push_support 1
@@ -322,6 +325,7 @@ Source0: %{name}-%{version}.tar.gz
%define tizen_feature_nfc_support 0
%define tizen_feature_notification_support 0
%define tizen_feature_package_support 1
+%define tizen_feature_player_util_support 0
%define tizen_feature_power_support 0
%define tizen_feature_preference_support 0
%define tizen_feature_push_support 0
@@ -430,6 +434,10 @@ BuildRequires: pkgconfig(sensor)
BuildRequires: pkgconfig(iotcon)
%endif
+%if 0%{?tizen_feature_player_util_support}
+BuildRequires: pkgconfig(chromium-efl)
+%endif
+
%if 0%{?tizen_feature_power_support}
BuildRequires: pkgconfig(deviced)
%endif
@@ -576,6 +584,7 @@ GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_nfc_emulation_support=%{?tizen_feature
GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_nfc_support=%{?tizen_feature_nfc_support}"
GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_notification_support=%{?tizen_feature_notification_support}"
GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_package_support=%{?tizen_feature_package_support}"
+GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_player_util_support=%{?tizen_feature_player_util_support}"
GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_power_support=%{?tizen_feature_power_support}"
GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_preference_support=%{?tizen_feature_preference_support}"
GYP_OPTIONS="$GYP_OPTIONS -Dtizen_feature_push_support=%{?tizen_feature_push_support}"
diff --git a/src/playerutil/playerutil.gyp b/src/playerutil/playerutil.gyp
new file mode 100644
index 00000000..e1fe9e81
--- /dev/null
+++ b/src/playerutil/playerutil.gyp
@@ -0,0 +1,37 @@
+{
+ 'includes':[
+ '../common/common.gypi',
+ ],
+ 'targets': [
+ {
+ 'target_name': 'tizen_playerutil',
+ 'type': 'loadable_module',
+ 'dependencies': [
+ '../common/common.gyp:tizen_common',
+ ],
+ 'sources': [
+ 'playerutil_api.js',
+ 'playerutil_extension.cc',
+ 'playerutil_extension.h',
+ 'playerutil_instance.cc',
+ 'playerutil_instance.h',
+ 'playerutil_utils.cc',
+ 'playerutil_utils.h',
+ ],
+ 'includes': [
+ '../common/pkg-config.gypi',
+ ],
+ 'conditions': [
+ ['tizen == 1', {
+ 'variables': {
+ 'packages': [
+ 'chromium-efl',
+ 'eina',
+ 'evas'
+ ]
+ },
+ }],
+ ],
+ },
+ ],
+}
diff --git a/src/playerutil/playerutil_api.js b/src/playerutil/playerutil_api.js
new file mode 100644
index 00000000..41ca4abc
--- /dev/null
+++ b/src/playerutil/playerutil_api.js
@@ -0,0 +1,59 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * 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.
+ */
+
+var native = new xwalk.utils.NativeManager(extension);
+var validator = xwalk.utils.validator;
+var types = validator.Types;
+var T = xwalk.utils.type;
+
+var LatencyMode = {
+ LOW: 'LOW',
+ MID: 'MID',
+ HIGH: 'HIGH',
+};
+
+function PlayerUtil() {
+}
+
+PlayerUtil.prototype.getLatencyMode = function() {
+ var result = native.callSync('PlayerUtil_getLatencyMode', {});
+
+ if (native.isSuccess(result)) {
+ return native.getResultObject(result);
+ } else {
+ throw native.getErrorObject(result);
+ }
+};
+
+PlayerUtil.prototype.setLatencyMode = function() {
+ var args = validator.validateMethod(arguments, [{
+ name: 'latencyMode',
+ type: types.ENUM,
+ values: T.getValues(LatencyMode)
+ }]);
+
+ var callArgs = {};
+ callArgs.latencyMode = args.latencyMode;
+
+ var result = native.callSync('PlayerUtil_setLatencyMode', callArgs);
+
+ if (native.isFailure(result)) {
+ throw native.getErrorObject(result);
+ }
+};
+
+// Exports
+exports = new PlayerUtil();
diff --git a/src/playerutil/playerutil_extension.cc b/src/playerutil/playerutil_extension.cc
new file mode 100644
index 00000000..a358fa48
--- /dev/null
+++ b/src/playerutil/playerutil_extension.cc
@@ -0,0 +1,49 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * 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.
+ */
+
+#include "playerutil/playerutil_extension.h"
+
+#include "playerutil/playerutil_instance.h"
+
+// This will be generated from playerutil_api.js
+extern const char kSource_playerutil_api[];
+
+namespace extension {
+namespace playerutil {
+
+PlayerUtilExtension::PlayerUtilExtension() {
+ SetExtensionName("tizen.playerutil");
+ SetJavaScriptAPI(kSource_playerutil_api);
+
+ const char* entry_points[] = {
+ nullptr
+ };
+ SetExtraJSEntryPoints(entry_points);
+}
+
+PlayerUtilExtension::~PlayerUtilExtension() {
+}
+
+common::Instance* PlayerUtilExtension::CreateInstance() {
+ return new PlayerUtilInstance();
+}
+
+} // namespace playerutil
+} // namespace extension
+
+common::Extension* CreateExtension() {
+ return new extension::playerutil::PlayerUtilExtension();
+}
diff --git a/src/playerutil/playerutil_extension.h b/src/playerutil/playerutil_extension.h
new file mode 100644
index 00000000..37336118
--- /dev/null
+++ b/src/playerutil/playerutil_extension.h
@@ -0,0 +1,38 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * 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.
+ */
+
+#ifndef PLAYERUTIL_EXTENSION_H_
+#define PLAYERUTIL_EXTENSION_H_
+
+#include "common/extension.h"
+
+namespace extension {
+namespace playerutil {
+
+class PlayerUtilExtension : public common::Extension {
+ public:
+ PlayerUtilExtension();
+ virtual ~PlayerUtilExtension();
+
+ private:
+ virtual common::Instance* CreateInstance();
+};
+
+} // namespace playerutil
+} // namespace extension
+
+#endif // PLAYERUTIL_EXTENSION_H_
+
diff --git a/src/playerutil/playerutil_instance.cc b/src/playerutil/playerutil_instance.cc
new file mode 100644
index 00000000..d295a8c1
--- /dev/null
+++ b/src/playerutil/playerutil_instance.cc
@@ -0,0 +1,83 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * 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.
+ */
+
+#include "playerutil/playerutil_instance.h"
+
+#include
+#include
+
+#include "common/logger.h"
+#include "common/scope_exit.h"
+#include "common/tools.h"
+
+#include "playerutil/playerutil_utils.h"
+
+namespace extension {
+namespace playerutil {
+
+PlayerUtilInstance::PlayerUtilInstance() {
+ ScopeLogger();
+
+ using std::placeholders::_1;
+ using std::placeholders::_2;
+
+#define REGISTER_SYNC(c, x) \
+ RegisterSyncHandler(c, std::bind(&PlayerUtilInstance::x, this, _1))
+
+ REGISTER_SYNC("PlayerUtil_getLatencyMode", GetLatencyMode);
+ REGISTER_SYNC("PlayerUtil_setLatencyMode", SetLatencyMode);
+#undef REGISTER_SYNC
+
+}
+
+PlayerUtilInstance::~PlayerUtilInstance() {
+ ScopeLogger();
+}
+
+common::TizenResult PlayerUtilInstance::GetLatencyMode(const picojson::object& args) {
+ ScopeLogger();
+
+ Ewk_Context *context = ewk_context_default_get();
+
+ Ewk_Audio_Latency_Mode latency_mode = ewk_context_audio_latency_mode_get(context);
+
+ if (EWK_AUDIO_LATENCY_MODE_ERROR == latency_mode) {
+ LogAndReturnTizenError(common::AbortError(), ("ewk_context_audio_latency_mode_get() failed"));
+ }
+
+ return common::TizenSuccess{picojson::value{PlayerUtilUtils::FromLatencyMode(latency_mode)}};
+}
+
+common::TizenResult PlayerUtilInstance::SetLatencyMode(const picojson::object& args) {
+ ScopeLogger();
+
+ CHECK_EXIST(args, kLatencyMode);
+ auto latency_it = args.find(kLatencyMode)->second;
+ if (latency_it.is()) {
+ Ewk_Audio_Latency_Mode latency_mode = PlayerUtilUtils::ToLatencyMode(latency_it.get());
+ Ewk_Context *context = ewk_context_default_get();
+
+ auto ret = ewk_context_audio_latency_mode_set(context, latency_mode);
+ if (EINA_TRUE != ret) {
+ LogAndReturnTizenError(common::AbortError(), ("ewk_context_audio_latency_mode_set() failed"));
+ }
+ }
+
+ return common::TizenSuccess();
+}
+
+} // namespace playerutil
+} // namespace extension
diff --git a/src/playerutil/playerutil_instance.h b/src/playerutil/playerutil_instance.h
new file mode 100644
index 00000000..ebdbef3d
--- /dev/null
+++ b/src/playerutil/playerutil_instance.h
@@ -0,0 +1,38 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * 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.
+ */
+
+#ifndef PLAYERUTIL_INSTANCE_H_
+#define PLAYERUTIL_INSTANCE_H_
+
+#include "common/tizen_instance.h"
+
+
+namespace extension {
+namespace playerutil {
+
+class PlayerUtilInstance : public common::TizenInstance {
+ public:
+ PlayerUtilInstance();
+ virtual ~PlayerUtilInstance();
+ private:
+ common::TizenResult GetLatencyMode(const picojson::object& args);
+ common::TizenResult SetLatencyMode(const picojson::object& args);
+};
+
+} // namespace playerutil
+} // namespace extension
+
+#endif // PLAYERUTIL_INSTANCE_H_
diff --git a/src/playerutil/playerutil_utils.cc b/src/playerutil/playerutil_utils.cc
new file mode 100644
index 00000000..7861efd6
--- /dev/null
+++ b/src/playerutil/playerutil_utils.cc
@@ -0,0 +1,66 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * 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.
+ */
+
+#include "playerutil_utils.h"
+
+#include "common/logger.h"
+
+namespace extension {
+namespace playerutil {
+
+namespace {
+#define PLAYER_UTIL_LATENCY_MODE_E \
+ X(EWK_AUDIO_LATENCY_MODE_HIGH, "HIGH") \
+ X(EWK_AUDIO_LATENCY_MODE_MID, "MID") \
+ X(EWK_AUDIO_LATENCY_MODE_LOW, "LOW") \
+ XD(EWK_AUDIO_LATENCY_MODE_LOW, "unknown")
+
+} // namespace
+
+const std::string kLatencyMode = "latencyMode";
+
+#define X(v, s) case v: return s;
+#define XD(v, s) \
+ default: \
+ LoggerE("Unknown value: %d, returning default: %s", e, s); \
+ return s;
+
+std::string PlayerUtilUtils::FromLatencyMode(Ewk_Audio_Latency_Mode e) {
+ ScopeLogger();
+
+ switch (e) {
+ PLAYER_UTIL_LATENCY_MODE_E
+ }
+}
+
+#undef X
+#undef XD
+
+#define X(v, s) if (e == s) return v;
+#define XD(v, s) \
+ LoggerE("Unknown value: %s, returning default: %d", e.c_str(), v); \
+ return v;
+
+Ewk_Audio_Latency_Mode PlayerUtilUtils::ToLatencyMode(const std::string& e) {
+ ScopeLogger();
+
+ PLAYER_UTIL_LATENCY_MODE_E
+}
+#undef X
+#undef XD
+
+} // namespace playerutil
+} // namespace extension
diff --git a/src/playerutil/playerutil_utils.h b/src/playerutil/playerutil_utils.h
new file mode 100644
index 00000000..ad31e3f5
--- /dev/null
+++ b/src/playerutil/playerutil_utils.h
@@ -0,0 +1,46 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * 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.
+ */
+
+#ifndef WEBAPI_PLUGINS_PLAYER_UTIL_UTILS_H__
+#define WEBAPI_PLUGINS_PLAYER_UTIL_UTILS_H__
+
+#include
+
+#include
+
+#include "common/tizen_instance.h"
+#include "common/tizen_result.h"
+
+namespace extension {
+namespace playerutil {
+
+#define CHECK_EXIST(args, name) \
+ if (args.end() == args.find(name)) { \
+ return common::TypeMismatchError(std::string(name) + " is required argument"); \
+ }
+
+extern const std::string kLatencyMode;
+
+class PlayerUtilUtils {
+ public:
+ static std::string FromLatencyMode(Ewk_Audio_Latency_Mode e);
+ static Ewk_Audio_Latency_Mode ToLatencyMode(const std::string& e);
+};
+
+} // namespace playerutil
+} // namespace extension
+
+#endif // WEBAPI_PLUGINS_PLAYER_UTIL_UTILS_H__
diff --git a/src/tizen-wrt.gyp b/src/tizen-wrt.gyp
index 7cc8a104..c53aba3c 100755
--- a/src/tizen-wrt.gyp
+++ b/src/tizen-wrt.gyp
@@ -224,6 +224,13 @@
],
},
],
+ [
+ 'tizen_feature_player_util_support==1', {
+ 'dependencies': [
+ 'playerutil/playerutil.gyp:*',
+ ],
+ },
+ ],
[
'tizen_feature_power_support==1', {
'dependencies': [