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