OpenCV
4.4.0
Open Source Computer Vision
|
Represents a computation (graph) compiled for streaming. More...
#include <opencv2/gapi/gstreaming.hpp>
Public Member Functions | |
GStreamingCompiled () | |
const GMetaArgs & | metas () const |
Vector of metadata this graph was compiled for. More... | |
operator bool () const | |
Check if compiled object is valid (non-empty) More... | |
const GMetaArgs & | outMetas () const |
Vector of metadata descriptions of graph outputs. More... | |
bool | pull (cv::GRunArgsP &&outs) |
Get the next processed frame from the pipeline. More... | |
bool | running () const |
Test if the pipeline is running. More... | |
void | setSource (GRunArgs &&ins) |
Specify the input data to GStreamingCompiled for processing, a generic version. More... | |
void | setSource (const gapi::wip::IStreamSource::Ptr &s) |
Specify an input video stream for a single-input computation pipeline. More... | |
void | start () |
Start the pipeline execution. More... | |
void | stop () |
Stop (abort) processing the pipeline. More... | |
bool | try_pull (cv::GRunArgsP &&outs) |
Try to get the next processed frame from the pipeline. More... | |
Represents a computation (graph) compiled for streaming.
This class represents a product of graph compilation (calling cv::GComputation::compileStreaming()). Objects of this class actually do stream processing, and the whole pipeline execution complexity is incapsulated into objects of this class. Execution model has two levels: at the very top, the execution of a heterogeneous graph is aggressively pipelined; at the very bottom the execution of every internal block is determined by its associated backend. Backends are selected based on kernel packages passed via compilation arguments ( see G-API Graph Compilation Arguments, GNetworkPackage, GKernelPackage for details).
GStreamingCompiled objects have a "player" semantics – there are methods like start() and stop(). GStreamingCompiled has a full control over a videostream and so is stateful. You need to specify the input stream data using setSource() and then call start() to actually start processing. After that, use pull() or try_pull() to obtain next processed data frame from the graph in a blocking or non-blocking way, respectively.
Currently a single GStreamingCompiled can process only one video streat at time. Produce multiple GStreamingCompiled objects to run the same graph on multiple video streams.
cv::GStreamingCompiled::GStreamingCompiled | ( | ) |
const GMetaArgs& cv::GStreamingCompiled::metas | ( | ) | const |
Vector of metadata this graph was compiled for.
|
explicit |
Check if compiled object is valid (non-empty)
const GMetaArgs& cv::GStreamingCompiled::outMetas | ( | ) | const |
Vector of metadata descriptions of graph outputs.
bool cv::GStreamingCompiled::pull | ( | cv::GRunArgsP && | outs | ) |
Get the next processed frame from the pipeline.
Use gout() to create an output parameter vector.
Output vectors must have the same number of elements as defined in the cv::GComputation protocol (at the moment of its construction). Shapes of elements also must conform to protocol (e.g. cv::Mat needs to be passed where cv::GMat has been declared as output, and so on). Run-time exception is generated on type mismatch.
This method writes new data into objects passed via output vector. If there is no data ready yet, this method blocks. Use try_pull() if you need a non-blocking version.
outs | vector of output parameters to obtain. |
bool cv::GStreamingCompiled::running | ( | ) | const |
Test if the pipeline is running.
void cv::GStreamingCompiled::setSource | ( | GRunArgs && | ins | ) |
Specify the input data to GStreamingCompiled for processing, a generic version.
Use gin() to create an input parameter vector.
Input vectors must have the same number of elements as defined in the cv::GComputation protocol (at the moment of its construction). Shapes of elements also must conform to protocol (e.g. cv::Mat needs to be passed where cv::GMat has been declared as input, and so on). Run-time exception is generated on type mismatch.
In contrast with regular GCompiled, user can also pass an object of type GVideoCapture for a GMat parameter of the parent GComputation. The compiled pipeline will start fetching data from that GVideoCapture and feeding it into the pipeline. Pipeline stops when a GVideoCapture marks end of the stream (or when stop() is called).
Passing a regular Mat for a GMat parameter makes it "infinite" source – pipeline may run forever feeding with this Mat until stopped explicitly.
Currently only a single GVideoCapture is supported as input. If the parent GComputation is declared with multiple input GMat's, one of those can be specified as GVideoCapture but all others must be regular Mat objects.
Throws if pipeline is already running. Use stop() and then setSource() to run the graph on a new video stream.
ins | vector of inputs to process. |
void cv::GStreamingCompiled::setSource | ( | const gapi::wip::IStreamSource::Ptr & | s | ) |
Specify an input video stream for a single-input computation pipeline.
Throws if pipeline is already running. Use stop() and then setSource() to run the graph on a new video stream.
This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
s | a shared pointer to IStreamSource representing the input video stream. |
void cv::GStreamingCompiled::start | ( | ) |
Start the pipeline execution.
Use pull()/try_pull() to obtain data. Throws an exception if a video source was not specified.
setSource() must be called first, even if the pipeline has been working already and then stopped (explicitly via stop() or due stream completion)
void cv::GStreamingCompiled::stop | ( | ) |
Stop (abort) processing the pipeline.
Note - it is not pause but a complete stop. Calling start() will cause G-API to start processing the stream from the early beginning.
Throws if the pipeline is not running.
bool cv::GStreamingCompiled::try_pull | ( | cv::GRunArgsP && | outs | ) |
Try to get the next processed frame from the pipeline.
Use gout() to create an output parameter vector.
This method writes new data into objects passed via output vector. If there is no data ready yet, the output vector remains unchanged and false is returned.