Merge pull request #17020 from dbudniko:dbudniko/serialization_backend
G-API Serialization routines
* Serialization backend in tests, initial version
* S11N/00: A Great Rename
- "Serialization" is too long and too error-prone to type,
so now it is renamed to "s11n" everywhere;
- Same applies to "SRLZ";
- Tests also renamed to start with 'S11N.*' (easier to run);
- Also updated copyright years in new files to 2020.
* S11N/01: Some basic interface segregation
- Moved some details (low-level functions) out of serialization.hpp;
- Introduced I::IStream and I::OStream interfaces;
- Implemented those via the existing [De]SerializationStream classes;
- Moved all operators to use interfaces instead of classes;
- Moved the htonl/ntohl handling out of operators (to the classes).
The implementation didn't change much, it is a subject to the further
refactoring
* S11N/02: Basic operator reorg, basic tests, vector support
- Reorganized operators on atomic types to follow >>/<< model
(put them closer in the code for the respective types);
- Introduce more operators for basic (scalar) types;
- Drop all vector s11n overloads -- replace with a generic
(template-based) one;
- Introduced a new test suite where low-level s11n functionality
is tested (for the basic types).
* S11N/03: Operators reorganization
- Sorted the Opaque types enum by complexity;
- Reorganized the existing operators for basic types, also ordered by
complexity;
- Organized operators in three groups (Basics, OpenCV, G-API);
- Added a generic serialization for variant<>;
- Reimplemented some of the existing operators (for OpenCV and G-API
data structures);
- Introduced new operators for cv::gimpl data types. These operators
(and so, the data structures) are not yet used in the graph
dump/reconstruction routine, it will be done as a next step.
* S11N/04: The Great Clean-up
- Drop the duplicates of GModel data structures from the
serialization, serialize the GModel data structures themselve
instead (hand-written code replaced with operators).
- Also removed usuned code for printing, etc.
* S11N/05: Internal API Clean-up
- Minimize the serialization API to just Streams and Operators;
- Refactor and fix the graph serialization (deconstruction and
reconstruction) routines, fix data addressing problems there;
- Move the serialization.[ch]pp files to the core G-API library
* S11N/06: Top-level API introduction
- !!!This is likely the most invasive commit in the series!!!
- Introduced a top-level API to serialize and deserialize a GComputation
- Extended the compiler to support both forms of a GComputation:
an expession based and a deserialized one. This has led to changes in
the cv::GComputation::Priv and in its dependent components (even the
transformation tests);
- Had to extend the kernel API (GKernel) with extra information on
operations (mainly `outMeta`) which was only available for expression
based graphs. Now the `outMeta` can be taken from kernels too (and for
the deserialized graphs it is the only way);
- Revisited the internal serialization API, had to expose previously
hidden entities (like `GSerialized`);
- Extended the serialized graph info with new details (object counter,
protocol). Added unordered_map generic serialization for that;
- Reworked the very first pipeline test to be "proper"; GREEN now, the rest
is to be reworked in the next iteration.
* S11N/07: Tests reworked
- Moved the sample pipeline tests w/serialization to
test the public API (`cv::gapi::serialize`, then
followed by `cv::gapi::deserialize<>`). All GREEN.
- As a consequence, dropped the "Serialization" test
backend as no longer necessary.
* S11N/08: Final touches
- Exposed the C++ native data types at Streams level;
- Switched the ByteMemoryIn/OutStreams to store data in `char`
internally (2x less memory for sample pipelines);
- Fixed and refactored Mat dumping to the stream;
- Renamed S11N pipeline tests to their new meaning.
* linux build fix
* fix RcDesc and int uint warnings
* more Linux build fix
* white space and virtual android error fix (attempt)
* more warnings to be fixed
* android warnings fix attempt
* one more attempt for android build fix
* android warnings one more fix
* return back override
* avoid size_t
* static deserialize
* and how do you like this, elon? anonymous namespace to fix android warning.
* static inline
* trying to fix standalone build
* mat dims fix
* fix mat r/w for standalone
Co-authored-by: Dmitry Matveev <dmitry.matveev@intel.com>
2020-06-27 03:41:29 +08:00
|
|
|
// This file is part of OpenCV project.
|
|
|
|
// It is subject to the license terms in the LICENSE file found in the top-level directory
|
|
|
|
// of this distribution and at http://opencv.org/license.html.
|
|
|
|
//
|
2021-03-10 23:58:34 +08:00
|
|
|
// Copyright (C) 2020-2021 Intel Corporation
|
Merge pull request #17020 from dbudniko:dbudniko/serialization_backend
G-API Serialization routines
* Serialization backend in tests, initial version
* S11N/00: A Great Rename
- "Serialization" is too long and too error-prone to type,
so now it is renamed to "s11n" everywhere;
- Same applies to "SRLZ";
- Tests also renamed to start with 'S11N.*' (easier to run);
- Also updated copyright years in new files to 2020.
* S11N/01: Some basic interface segregation
- Moved some details (low-level functions) out of serialization.hpp;
- Introduced I::IStream and I::OStream interfaces;
- Implemented those via the existing [De]SerializationStream classes;
- Moved all operators to use interfaces instead of classes;
- Moved the htonl/ntohl handling out of operators (to the classes).
The implementation didn't change much, it is a subject to the further
refactoring
* S11N/02: Basic operator reorg, basic tests, vector support
- Reorganized operators on atomic types to follow >>/<< model
(put them closer in the code for the respective types);
- Introduce more operators for basic (scalar) types;
- Drop all vector s11n overloads -- replace with a generic
(template-based) one;
- Introduced a new test suite where low-level s11n functionality
is tested (for the basic types).
* S11N/03: Operators reorganization
- Sorted the Opaque types enum by complexity;
- Reorganized the existing operators for basic types, also ordered by
complexity;
- Organized operators in three groups (Basics, OpenCV, G-API);
- Added a generic serialization for variant<>;
- Reimplemented some of the existing operators (for OpenCV and G-API
data structures);
- Introduced new operators for cv::gimpl data types. These operators
(and so, the data structures) are not yet used in the graph
dump/reconstruction routine, it will be done as a next step.
* S11N/04: The Great Clean-up
- Drop the duplicates of GModel data structures from the
serialization, serialize the GModel data structures themselve
instead (hand-written code replaced with operators).
- Also removed usuned code for printing, etc.
* S11N/05: Internal API Clean-up
- Minimize the serialization API to just Streams and Operators;
- Refactor and fix the graph serialization (deconstruction and
reconstruction) routines, fix data addressing problems there;
- Move the serialization.[ch]pp files to the core G-API library
* S11N/06: Top-level API introduction
- !!!This is likely the most invasive commit in the series!!!
- Introduced a top-level API to serialize and deserialize a GComputation
- Extended the compiler to support both forms of a GComputation:
an expession based and a deserialized one. This has led to changes in
the cv::GComputation::Priv and in its dependent components (even the
transformation tests);
- Had to extend the kernel API (GKernel) with extra information on
operations (mainly `outMeta`) which was only available for expression
based graphs. Now the `outMeta` can be taken from kernels too (and for
the deserialized graphs it is the only way);
- Revisited the internal serialization API, had to expose previously
hidden entities (like `GSerialized`);
- Extended the serialized graph info with new details (object counter,
protocol). Added unordered_map generic serialization for that;
- Reworked the very first pipeline test to be "proper"; GREEN now, the rest
is to be reworked in the next iteration.
* S11N/07: Tests reworked
- Moved the sample pipeline tests w/serialization to
test the public API (`cv::gapi::serialize`, then
followed by `cv::gapi::deserialize<>`). All GREEN.
- As a consequence, dropped the "Serialization" test
backend as no longer necessary.
* S11N/08: Final touches
- Exposed the C++ native data types at Streams level;
- Switched the ByteMemoryIn/OutStreams to store data in `char`
internally (2x less memory for sample pipelines);
- Fixed and refactored Mat dumping to the stream;
- Renamed S11N pipeline tests to their new meaning.
* linux build fix
* fix RcDesc and int uint warnings
* more Linux build fix
* white space and virtual android error fix (attempt)
* more warnings to be fixed
* android warnings fix attempt
* one more attempt for android build fix
* android warnings one more fix
* return back override
* avoid size_t
* static deserialize
* and how do you like this, elon? anonymous namespace to fix android warning.
* static inline
* trying to fix standalone build
* mat dims fix
* fix mat r/w for standalone
Co-authored-by: Dmitry Matveev <dmitry.matveev@intel.com>
2020-06-27 03:41:29 +08:00
|
|
|
|
|
|
|
#include <opencv2/gapi/s11n.hpp>
|
2020-07-14 03:24:46 +08:00
|
|
|
#include <opencv2/gapi/garg.hpp>
|
Merge pull request #17020 from dbudniko:dbudniko/serialization_backend
G-API Serialization routines
* Serialization backend in tests, initial version
* S11N/00: A Great Rename
- "Serialization" is too long and too error-prone to type,
so now it is renamed to "s11n" everywhere;
- Same applies to "SRLZ";
- Tests also renamed to start with 'S11N.*' (easier to run);
- Also updated copyright years in new files to 2020.
* S11N/01: Some basic interface segregation
- Moved some details (low-level functions) out of serialization.hpp;
- Introduced I::IStream and I::OStream interfaces;
- Implemented those via the existing [De]SerializationStream classes;
- Moved all operators to use interfaces instead of classes;
- Moved the htonl/ntohl handling out of operators (to the classes).
The implementation didn't change much, it is a subject to the further
refactoring
* S11N/02: Basic operator reorg, basic tests, vector support
- Reorganized operators on atomic types to follow >>/<< model
(put them closer in the code for the respective types);
- Introduce more operators for basic (scalar) types;
- Drop all vector s11n overloads -- replace with a generic
(template-based) one;
- Introduced a new test suite where low-level s11n functionality
is tested (for the basic types).
* S11N/03: Operators reorganization
- Sorted the Opaque types enum by complexity;
- Reorganized the existing operators for basic types, also ordered by
complexity;
- Organized operators in three groups (Basics, OpenCV, G-API);
- Added a generic serialization for variant<>;
- Reimplemented some of the existing operators (for OpenCV and G-API
data structures);
- Introduced new operators for cv::gimpl data types. These operators
(and so, the data structures) are not yet used in the graph
dump/reconstruction routine, it will be done as a next step.
* S11N/04: The Great Clean-up
- Drop the duplicates of GModel data structures from the
serialization, serialize the GModel data structures themselve
instead (hand-written code replaced with operators).
- Also removed usuned code for printing, etc.
* S11N/05: Internal API Clean-up
- Minimize the serialization API to just Streams and Operators;
- Refactor and fix the graph serialization (deconstruction and
reconstruction) routines, fix data addressing problems there;
- Move the serialization.[ch]pp files to the core G-API library
* S11N/06: Top-level API introduction
- !!!This is likely the most invasive commit in the series!!!
- Introduced a top-level API to serialize and deserialize a GComputation
- Extended the compiler to support both forms of a GComputation:
an expession based and a deserialized one. This has led to changes in
the cv::GComputation::Priv and in its dependent components (even the
transformation tests);
- Had to extend the kernel API (GKernel) with extra information on
operations (mainly `outMeta`) which was only available for expression
based graphs. Now the `outMeta` can be taken from kernels too (and for
the deserialized graphs it is the only way);
- Revisited the internal serialization API, had to expose previously
hidden entities (like `GSerialized`);
- Extended the serialized graph info with new details (object counter,
protocol). Added unordered_map generic serialization for that;
- Reworked the very first pipeline test to be "proper"; GREEN now, the rest
is to be reworked in the next iteration.
* S11N/07: Tests reworked
- Moved the sample pipeline tests w/serialization to
test the public API (`cv::gapi::serialize`, then
followed by `cv::gapi::deserialize<>`). All GREEN.
- As a consequence, dropped the "Serialization" test
backend as no longer necessary.
* S11N/08: Final touches
- Exposed the C++ native data types at Streams level;
- Switched the ByteMemoryIn/OutStreams to store data in `char`
internally (2x less memory for sample pipelines);
- Fixed and refactored Mat dumping to the stream;
- Renamed S11N pipeline tests to their new meaning.
* linux build fix
* fix RcDesc and int uint warnings
* more Linux build fix
* white space and virtual android error fix (attempt)
* more warnings to be fixed
* android warnings fix attempt
* one more attempt for android build fix
* android warnings one more fix
* return back override
* avoid size_t
* static deserialize
* and how do you like this, elon? anonymous namespace to fix android warning.
* static inline
* trying to fix standalone build
* mat dims fix
* fix mat r/w for standalone
Co-authored-by: Dmitry Matveev <dmitry.matveev@intel.com>
2020-06-27 03:41:29 +08:00
|
|
|
|
|
|
|
#include "backends/common/serialization.hpp"
|
|
|
|
|
|
|
|
std::vector<char> cv::gapi::serialize(const cv::GComputation &c) {
|
2020-10-02 02:11:23 +08:00
|
|
|
cv::gapi::s11n::ByteMemoryOutStream os;
|
Merge pull request #17020 from dbudniko:dbudniko/serialization_backend
G-API Serialization routines
* Serialization backend in tests, initial version
* S11N/00: A Great Rename
- "Serialization" is too long and too error-prone to type,
so now it is renamed to "s11n" everywhere;
- Same applies to "SRLZ";
- Tests also renamed to start with 'S11N.*' (easier to run);
- Also updated copyright years in new files to 2020.
* S11N/01: Some basic interface segregation
- Moved some details (low-level functions) out of serialization.hpp;
- Introduced I::IStream and I::OStream interfaces;
- Implemented those via the existing [De]SerializationStream classes;
- Moved all operators to use interfaces instead of classes;
- Moved the htonl/ntohl handling out of operators (to the classes).
The implementation didn't change much, it is a subject to the further
refactoring
* S11N/02: Basic operator reorg, basic tests, vector support
- Reorganized operators on atomic types to follow >>/<< model
(put them closer in the code for the respective types);
- Introduce more operators for basic (scalar) types;
- Drop all vector s11n overloads -- replace with a generic
(template-based) one;
- Introduced a new test suite where low-level s11n functionality
is tested (for the basic types).
* S11N/03: Operators reorganization
- Sorted the Opaque types enum by complexity;
- Reorganized the existing operators for basic types, also ordered by
complexity;
- Organized operators in three groups (Basics, OpenCV, G-API);
- Added a generic serialization for variant<>;
- Reimplemented some of the existing operators (for OpenCV and G-API
data structures);
- Introduced new operators for cv::gimpl data types. These operators
(and so, the data structures) are not yet used in the graph
dump/reconstruction routine, it will be done as a next step.
* S11N/04: The Great Clean-up
- Drop the duplicates of GModel data structures from the
serialization, serialize the GModel data structures themselve
instead (hand-written code replaced with operators).
- Also removed usuned code for printing, etc.
* S11N/05: Internal API Clean-up
- Minimize the serialization API to just Streams and Operators;
- Refactor and fix the graph serialization (deconstruction and
reconstruction) routines, fix data addressing problems there;
- Move the serialization.[ch]pp files to the core G-API library
* S11N/06: Top-level API introduction
- !!!This is likely the most invasive commit in the series!!!
- Introduced a top-level API to serialize and deserialize a GComputation
- Extended the compiler to support both forms of a GComputation:
an expession based and a deserialized one. This has led to changes in
the cv::GComputation::Priv and in its dependent components (even the
transformation tests);
- Had to extend the kernel API (GKernel) with extra information on
operations (mainly `outMeta`) which was only available for expression
based graphs. Now the `outMeta` can be taken from kernels too (and for
the deserialized graphs it is the only way);
- Revisited the internal serialization API, had to expose previously
hidden entities (like `GSerialized`);
- Extended the serialized graph info with new details (object counter,
protocol). Added unordered_map generic serialization for that;
- Reworked the very first pipeline test to be "proper"; GREEN now, the rest
is to be reworked in the next iteration.
* S11N/07: Tests reworked
- Moved the sample pipeline tests w/serialization to
test the public API (`cv::gapi::serialize`, then
followed by `cv::gapi::deserialize<>`). All GREEN.
- As a consequence, dropped the "Serialization" test
backend as no longer necessary.
* S11N/08: Final touches
- Exposed the C++ native data types at Streams level;
- Switched the ByteMemoryIn/OutStreams to store data in `char`
internally (2x less memory for sample pipelines);
- Fixed and refactored Mat dumping to the stream;
- Renamed S11N pipeline tests to their new meaning.
* linux build fix
* fix RcDesc and int uint warnings
* more Linux build fix
* white space and virtual android error fix (attempt)
* more warnings to be fixed
* android warnings fix attempt
* one more attempt for android build fix
* android warnings one more fix
* return back override
* avoid size_t
* static deserialize
* and how do you like this, elon? anonymous namespace to fix android warning.
* static inline
* trying to fix standalone build
* mat dims fix
* fix mat r/w for standalone
Co-authored-by: Dmitry Matveev <dmitry.matveev@intel.com>
2020-06-27 03:41:29 +08:00
|
|
|
c.serialize(os);
|
|
|
|
return os.data();
|
|
|
|
}
|
|
|
|
|
|
|
|
cv::GComputation cv::gapi::detail::getGraph(const std::vector<char> &p) {
|
2020-10-02 02:11:23 +08:00
|
|
|
cv::gapi::s11n::ByteMemoryInStream is(p);
|
Merge pull request #17020 from dbudniko:dbudniko/serialization_backend
G-API Serialization routines
* Serialization backend in tests, initial version
* S11N/00: A Great Rename
- "Serialization" is too long and too error-prone to type,
so now it is renamed to "s11n" everywhere;
- Same applies to "SRLZ";
- Tests also renamed to start with 'S11N.*' (easier to run);
- Also updated copyright years in new files to 2020.
* S11N/01: Some basic interface segregation
- Moved some details (low-level functions) out of serialization.hpp;
- Introduced I::IStream and I::OStream interfaces;
- Implemented those via the existing [De]SerializationStream classes;
- Moved all operators to use interfaces instead of classes;
- Moved the htonl/ntohl handling out of operators (to the classes).
The implementation didn't change much, it is a subject to the further
refactoring
* S11N/02: Basic operator reorg, basic tests, vector support
- Reorganized operators on atomic types to follow >>/<< model
(put them closer in the code for the respective types);
- Introduce more operators for basic (scalar) types;
- Drop all vector s11n overloads -- replace with a generic
(template-based) one;
- Introduced a new test suite where low-level s11n functionality
is tested (for the basic types).
* S11N/03: Operators reorganization
- Sorted the Opaque types enum by complexity;
- Reorganized the existing operators for basic types, also ordered by
complexity;
- Organized operators in three groups (Basics, OpenCV, G-API);
- Added a generic serialization for variant<>;
- Reimplemented some of the existing operators (for OpenCV and G-API
data structures);
- Introduced new operators for cv::gimpl data types. These operators
(and so, the data structures) are not yet used in the graph
dump/reconstruction routine, it will be done as a next step.
* S11N/04: The Great Clean-up
- Drop the duplicates of GModel data structures from the
serialization, serialize the GModel data structures themselve
instead (hand-written code replaced with operators).
- Also removed usuned code for printing, etc.
* S11N/05: Internal API Clean-up
- Minimize the serialization API to just Streams and Operators;
- Refactor and fix the graph serialization (deconstruction and
reconstruction) routines, fix data addressing problems there;
- Move the serialization.[ch]pp files to the core G-API library
* S11N/06: Top-level API introduction
- !!!This is likely the most invasive commit in the series!!!
- Introduced a top-level API to serialize and deserialize a GComputation
- Extended the compiler to support both forms of a GComputation:
an expession based and a deserialized one. This has led to changes in
the cv::GComputation::Priv and in its dependent components (even the
transformation tests);
- Had to extend the kernel API (GKernel) with extra information on
operations (mainly `outMeta`) which was only available for expression
based graphs. Now the `outMeta` can be taken from kernels too (and for
the deserialized graphs it is the only way);
- Revisited the internal serialization API, had to expose previously
hidden entities (like `GSerialized`);
- Extended the serialized graph info with new details (object counter,
protocol). Added unordered_map generic serialization for that;
- Reworked the very first pipeline test to be "proper"; GREEN now, the rest
is to be reworked in the next iteration.
* S11N/07: Tests reworked
- Moved the sample pipeline tests w/serialization to
test the public API (`cv::gapi::serialize`, then
followed by `cv::gapi::deserialize<>`). All GREEN.
- As a consequence, dropped the "Serialization" test
backend as no longer necessary.
* S11N/08: Final touches
- Exposed the C++ native data types at Streams level;
- Switched the ByteMemoryIn/OutStreams to store data in `char`
internally (2x less memory for sample pipelines);
- Fixed and refactored Mat dumping to the stream;
- Renamed S11N pipeline tests to their new meaning.
* linux build fix
* fix RcDesc and int uint warnings
* more Linux build fix
* white space and virtual android error fix (attempt)
* more warnings to be fixed
* android warnings fix attempt
* one more attempt for android build fix
* android warnings one more fix
* return back override
* avoid size_t
* static deserialize
* and how do you like this, elon? anonymous namespace to fix android warning.
* static inline
* trying to fix standalone build
* mat dims fix
* fix mat r/w for standalone
Co-authored-by: Dmitry Matveev <dmitry.matveev@intel.com>
2020-06-27 03:41:29 +08:00
|
|
|
return cv::GComputation(is);
|
|
|
|
}
|
2020-07-14 03:24:46 +08:00
|
|
|
|
|
|
|
cv::GMetaArgs cv::gapi::detail::getMetaArgs(const std::vector<char> &p) {
|
2020-10-02 02:11:23 +08:00
|
|
|
cv::gapi::s11n::ByteMemoryInStream is(p);
|
2020-07-14 03:24:46 +08:00
|
|
|
return meta_args_deserialize(is);
|
|
|
|
}
|
|
|
|
|
|
|
|
cv::GRunArgs cv::gapi::detail::getRunArgs(const std::vector<char> &p) {
|
2020-10-02 02:11:23 +08:00
|
|
|
cv::gapi::s11n::ByteMemoryInStream is(p);
|
2020-07-14 03:24:46 +08:00
|
|
|
return run_args_deserialize(is);
|
|
|
|
}
|
|
|
|
|
2021-03-10 23:58:34 +08:00
|
|
|
std::vector<std::string> cv::gapi::detail::getVectorOfStrings(const std::vector<char> &p) {
|
|
|
|
cv::gapi::s11n::ByteMemoryInStream is(p);
|
|
|
|
return vector_of_strings_deserialize(is);
|
|
|
|
}
|
|
|
|
|
2020-07-14 03:24:46 +08:00
|
|
|
std::vector<char> cv::gapi::serialize(const cv::GMetaArgs& ma)
|
|
|
|
{
|
2020-10-02 02:11:23 +08:00
|
|
|
cv::gapi::s11n::ByteMemoryOutStream os;
|
2020-07-14 03:24:46 +08:00
|
|
|
serialize(os, ma);
|
|
|
|
return os.data();
|
|
|
|
}
|
|
|
|
|
|
|
|
std::vector<char> cv::gapi::serialize(const cv::GRunArgs& ra)
|
|
|
|
{
|
2020-10-02 02:11:23 +08:00
|
|
|
cv::gapi::s11n::ByteMemoryOutStream os;
|
2020-07-14 03:24:46 +08:00
|
|
|
serialize(os, ra);
|
|
|
|
return os.data();
|
|
|
|
}
|
|
|
|
|
2020-10-08 05:48:49 +08:00
|
|
|
std::vector<char> cv::gapi::serialize(const cv::GCompileArgs& ca)
|
|
|
|
{
|
|
|
|
cv::gapi::s11n::ByteMemoryOutStream os;
|
|
|
|
serialize(os, ca);
|
|
|
|
return os.data();
|
|
|
|
}
|
|
|
|
|
2021-03-10 23:58:34 +08:00
|
|
|
std::vector<char> cv::gapi::serialize(const std::vector<std::string>& vs)
|
|
|
|
{
|
|
|
|
cv::gapi::s11n::ByteMemoryOutStream os;
|
|
|
|
serialize(os, vs);
|
|
|
|
return os.data();
|
|
|
|
}
|
|
|
|
|
2020-09-08 01:10:03 +08:00
|
|
|
// FIXME: This function should move from S11N to GRunArg-related entities.
|
|
|
|
// it has nothing to do with the S11N as it is
|
2021-07-08 03:07:59 +08:00
|
|
|
cv::GRunArgsP cv::gapi::bind(cv::GRunArgs &out_args)
|
2020-07-14 03:24:46 +08:00
|
|
|
{
|
|
|
|
cv::GRunArgsP outputs;
|
2021-07-08 03:07:59 +08:00
|
|
|
outputs.reserve(out_args.size());
|
|
|
|
for (cv::GRunArg &res_obj : out_args)
|
2020-07-14 03:24:46 +08:00
|
|
|
{
|
|
|
|
using T = cv::GRunArg;
|
|
|
|
switch (res_obj.index())
|
|
|
|
{
|
|
|
|
#if !defined(GAPI_STANDALONE)
|
|
|
|
case T::index_of<cv::UMat>() :
|
2021-07-14 03:31:46 +08:00
|
|
|
outputs.emplace_back(&(cv::util::get<cv::UMat>(res_obj)));
|
2020-07-14 03:24:46 +08:00
|
|
|
break;
|
|
|
|
#endif
|
|
|
|
case cv::GRunArg::index_of<cv::Mat>() :
|
2021-07-14 03:31:46 +08:00
|
|
|
outputs.emplace_back(&(cv::util::get<cv::Mat>(res_obj)));
|
2020-07-14 03:24:46 +08:00
|
|
|
break;
|
|
|
|
case cv::GRunArg::index_of<cv::Scalar>() :
|
2021-07-14 03:31:46 +08:00
|
|
|
outputs.emplace_back(&(cv::util::get<cv::Scalar>(res_obj)));
|
2020-07-14 03:24:46 +08:00
|
|
|
break;
|
|
|
|
case T::index_of<cv::detail::VectorRef>() :
|
|
|
|
outputs.emplace_back(cv::util::get<cv::detail::VectorRef>(res_obj));
|
|
|
|
break;
|
|
|
|
case T::index_of<cv::detail::OpaqueRef>() :
|
|
|
|
outputs.emplace_back(cv::util::get<cv::detail::OpaqueRef>(res_obj));
|
|
|
|
break;
|
2020-10-21 04:58:54 +08:00
|
|
|
case cv::GRunArg::index_of<cv::RMat>() :
|
2021-07-14 03:31:46 +08:00
|
|
|
outputs.emplace_back(&(cv::util::get<cv::RMat>(res_obj)));
|
|
|
|
break;
|
|
|
|
case cv::GRunArg::index_of<cv::MediaFrame>() :
|
|
|
|
outputs.emplace_back(&(cv::util::get<cv::MediaFrame>(res_obj)));
|
2020-10-21 04:58:54 +08:00
|
|
|
break;
|
2020-07-14 03:24:46 +08:00
|
|
|
default:
|
2022-12-19 14:05:15 +08:00
|
|
|
GAPI_Error("This value type is not supported!"); // ...maybe because of STANDALONE mode.
|
2020-07-14 03:24:46 +08:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return outputs;
|
|
|
|
}
|
2020-09-08 01:10:03 +08:00
|
|
|
|
|
|
|
// FIXME: move it out of s11n to api/
|
|
|
|
// FIXME: don't we have such function already?
|
|
|
|
cv::GRunArg cv::gapi::bind(cv::GRunArgP &out)
|
|
|
|
{
|
|
|
|
using T = cv::GRunArgP;
|
|
|
|
switch (out.index())
|
|
|
|
{
|
|
|
|
#if !defined(GAPI_STANDALONE)
|
|
|
|
case T::index_of<cv::UMat*>() :
|
2022-12-19 14:05:15 +08:00
|
|
|
GAPI_Error("Please implement this!");
|
2020-09-08 01:10:03 +08:00
|
|
|
break;
|
|
|
|
#endif
|
|
|
|
|
|
|
|
case T::index_of<cv::detail::VectorRef>() :
|
|
|
|
return cv::GRunArg(cv::util::get<cv::detail::VectorRef>(out));
|
|
|
|
|
|
|
|
case T::index_of<cv::detail::OpaqueRef>() :
|
|
|
|
return cv::GRunArg(cv::util::get<cv::detail::OpaqueRef>(out));
|
|
|
|
|
|
|
|
case T::index_of<cv::Mat*>() :
|
|
|
|
return cv::GRunArg(*cv::util::get<cv::Mat*>(out));
|
|
|
|
|
|
|
|
case T::index_of<cv::Scalar*>() :
|
|
|
|
return cv::GRunArg(*cv::util::get<cv::Scalar*>(out));
|
|
|
|
|
2020-10-21 04:58:54 +08:00
|
|
|
case T::index_of<cv::RMat*>() :
|
|
|
|
return cv::GRunArg(*cv::util::get<cv::RMat*>(out));
|
|
|
|
|
2021-07-14 03:31:46 +08:00
|
|
|
case T::index_of<cv::MediaFrame*>() :
|
|
|
|
return cv::GRunArg(*cv::util::get<cv::MediaFrame*>(out));
|
|
|
|
|
2020-09-08 01:10:03 +08:00
|
|
|
default:
|
|
|
|
// ...maybe our types were extended
|
2022-12-19 14:05:15 +08:00
|
|
|
GAPI_Error("This value type is UNKNOWN!");
|
2020-09-08 01:10:03 +08:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
return cv::GRunArg();
|
|
|
|
}
|