From: Pawel Wasowski
Date: Mon, 4 Jan 2021 09:59:39 +0000 (+0100)
Subject: [ML][pipeline] Implement Pipeline::state getter
X-Git-Tag: submit/tizen/20210128.113801~27
X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=d93afde88134848383dd8843a18c29b2535f5995;p=platform%2Fcore%2Fapi%2Fwebapi-plugins.git
[ML][pipeline] Implement Pipeline::state getter
ACR: TWDAPI-274
[Verification] Tested in Chrome DevTools with the snippets below. Works fine
var pipeline = tizen.ml.pipeline.createPipeline('videotestsrc ! tizenwlsink',
function(state) {console.log(state);})
pipeline.state
Change-Id: Iae5e70c63d5c9fd98877defe0949024516c8c41d
Signed-off-by: Pawel Wasowski
---
diff --git a/src/ml/js/ml_pipeline.js b/src/ml/js/ml_pipeline.js
index f50b97ab..3472be1f 100755
--- a/src/ml/js/ml_pipeline.js
+++ b/src/ml/js/ml_pipeline.js
@@ -101,7 +101,7 @@ var Pipeline = function(id) {
);
}
- return result.state;
+ return result.result;
}
},
_id: {
diff --git a/src/ml/ml_instance.cc b/src/ml/ml_instance.cc
index 5d2f242d..0576dac0 100644
--- a/src/ml/ml_instance.cc
+++ b/src/ml/ml_instance.cc
@@ -40,6 +40,7 @@ MlInstance::MlInstance() : pipeline_manager_{this} {
// Pipeline API begin
REGISTER_METHOD(MLPipelineManagerCreatePipeline);
+ REGISTER_METHOD(MLPipelineGetState);
// Pipeline API end
@@ -113,7 +114,26 @@ void MlInstance::MLPipelineManagerCreatePipeline(const picojson::value& args,
// PipelineManager::createPipeline() end
// Pipeline::state begin
+void MlInstance::MLPipelineGetState(const picojson::value& args, picojson::object& out) {
+ ScopeLogger("args: %s", args.serialize().c_str());
+
+ if (!args.get(kId).is()) {
+ LoggerD("id is not a number");
+ ReportError(PlatformResult{ErrorCode::ABORT_ERR, "Invalid pipeline"}, &out);
+ return;
+ }
+ auto id = static_cast(args.get(kId).get());
+ picojson::value state_value{std::string{}};
+ std::string* state_ptr = &state_value.get();
+ auto ret = pipeline_manager_.GetPipelineState(id, state_ptr);
+ if (!ret) {
+ ReportError(ret, &out);
+ return;
+ }
+
+ ReportSuccess(state_value, out);
+}
// Pipeline::state end
// Pipeline::start() begin
diff --git a/src/ml/ml_instance.h b/src/ml/ml_instance.h
index 622bcc8a..7bb28f44 100644
--- a/src/ml/ml_instance.h
+++ b/src/ml/ml_instance.h
@@ -48,7 +48,7 @@ class MlInstance : public common::ParsedInstance {
// PipelineManager::createPipeline() end
// Pipeline::state begin
-
+ void MLPipelineGetState(const picojson::value& args, picojson::object& out);
// Pipeline::state end
// Pipeline::start() begin
diff --git a/src/ml/ml_pipeline.cc b/src/ml/ml_pipeline.cc
index caa63a50..6faec447 100644
--- a/src/ml/ml_pipeline.cc
+++ b/src/ml/ml_pipeline.cc
@@ -133,7 +133,20 @@ void Pipeline::PipelineStateChangeListener(ml_pipeline_state_e state, void* user
}
// Pipeline::state begin
+PlatformResult Pipeline::GetState(std::string* out) {
+ ScopeLogger("id_: [%d]", id_);
+ ml_pipeline_state_e state = ML_PIPELINE_STATE_UNKNOWN;
+ auto ret = ml_pipeline_get_state(pipeline_, &state);
+ if (ML_ERROR_NONE != ret) {
+ LoggerE("ml_pipeline_get_state() failed: [%d] (%s)", ret, get_error_message(ret));
+ return util::ToPlatformResult(ret, "Could not get pipeline state");
+ }
+ LoggerD("ml_pipeline_get_state() succeeded");
+
+ *out = StateToString(state);
+ return PlatformResult{};
+}
// Pipeline::state end
// Pipeline::start() begin
diff --git a/src/ml/ml_pipeline.h b/src/ml/ml_pipeline.h
index b5834f4f..c29f244f 100644
--- a/src/ml/ml_pipeline.h
+++ b/src/ml/ml_pipeline.h
@@ -52,7 +52,7 @@ class Pipeline {
~Pipeline();
// Pipeline::state begin
-
+ PlatformResult GetState(std::string* out);
// Pipeline::state end
// Pipeline::start() begin
diff --git a/src/ml/ml_pipeline_manager.cc b/src/ml/ml_pipeline_manager.cc
index 1a215162..2d4781ce 100644
--- a/src/ml/ml_pipeline_manager.cc
+++ b/src/ml/ml_pipeline_manager.cc
@@ -58,7 +58,19 @@ PlatformResult PipelineManager::CreatePipeline(int id, const std::string& defini
// PipelineManager::createPipeline() end
// Pipeline::state begin
+PlatformResult PipelineManager::GetPipelineState(int id, std::string* out) {
+ ScopeLogger("id: [%d]", id);
+
+ auto pipeline_it = pipelines_.find(id);
+ if (pipelines_.end() == pipeline_it) {
+ LoggerD("Pipeline not found: [%d]", id);
+ *out = "NULL";
+ return PlatformResult{};
+ }
+ auto ret = pipeline_it->second->GetState(out);
+ return ret;
+}
// Pipeline::state end
// Pipeline::start() begin
diff --git a/src/ml/ml_pipeline_manager.h b/src/ml/ml_pipeline_manager.h
index 1ecf79af..f3e0293b 100644
--- a/src/ml/ml_pipeline_manager.h
+++ b/src/ml/ml_pipeline_manager.h
@@ -44,7 +44,7 @@ class PipelineManager {
// PipelineManager::createPipeline() end
// Pipeline::state begin
-
+ PlatformResult GetPipelineState(int id, std::string* out);
// Pipeline::state end
// Pipeline::start() begin