#include <utility> // forward<>()
#include <opencv2/gapi/gframe.hpp>
+#include <opencv2/gapi/util/any.hpp>
namespace cv {
View access(Access) const;
cv::GFrameDesc desc() const;
+ // FIXME: design a better solution
+ // Should be used only if the actual adapter provides implementation
+ cv::util::any blobParams() const;
+
// Cast underlying MediaFrame adapter to the particular adapter type,
// return nullptr if underlying type is different
template<typename T> T* get() const
virtual ~IAdapter() = 0;
virtual cv::GFrameDesc meta() const = 0;
virtual MediaFrame::View access(MediaFrame::Access) = 0;
+ // FIXME: design a better solution
+ // The default implementation does nothing
+ virtual cv::util::any blobParams() const;
};
} //namespace cv
return m->adapter->access(code);
}
+cv::util::any cv::MediaFrame::blobParams() const
+{
+ return m->adapter->blobParams();
+}
+
cv::MediaFrame::IAdapter* cv::MediaFrame::getAdapter() const {
return m->adapter.get();
}
}
}
+cv::util::any cv::MediaFrame::IAdapter::blobParams() const
+{
+ // Does nothing by default
+ return {};
+}
+
cv::MediaFrame::IAdapter::~IAdapter() {
}
EXPECT_EQ(3, counter);
}
+TEST(MediaFrame, blobParams) {
+ cv::Mat bgr = cv::Mat::eye(240, 320, CV_8UC3);
+ cv::MediaFrame frame = cv::MediaFrame::Create<TestMediaBGR>(bgr);
+
+ EXPECT_NO_THROW(frame.blobParams());
+}
+
} // namespace opencv_test
cv::MediaFrame::View::Strides ss = { m_mat.step, 0u, 0u, 0u };
return cv::MediaFrame::View(std::move(pp), std::move(ss), Cb{m_cb});
}
+ cv::util::any blobParams() const override {
+ return std::make_pair<InferenceEngine::TensorDesc,
+ InferenceEngine::ParamMap>({IE::Precision::U8,
+ {1, 3, 300, 300},
+ IE::Layout::NCHW},
+ {{"HELLO", 42},
+ {"COLOR_FORMAT",
+ InferenceEngine::ColorFormat::NV12}});
+ }
};
class TestMediaNV12 final: public cv::MediaFrame::IAdapter {
validate();
}
+TEST(IEFrameAdapter, blobParams)
+{
+ cv::Mat bgr = cv::Mat::eye(240, 320, CV_8UC3);
+ cv::MediaFrame frame = cv::MediaFrame::Create<TestMediaBGR>(bgr);
+
+ auto expected = std::make_pair(IE::TensorDesc{IE::Precision::U8, {1, 3, 300, 300},
+ IE::Layout::NCHW},
+ IE::ParamMap{{"HELLO", 42}, {"COLOR_FORMAT",
+ IE::ColorFormat::NV12}});
+
+ auto actual = cv::util::any_cast<decltype(expected)>(frame.blobParams());
+
+ EXPECT_EQ(expected, actual);
+}
+
} // namespace opencv_test
#endif // HAVE_INF_ENGINE