Jetson Inference
DNN Vision Library
|
videoSource and videoOutput APIs for input and output video streams. More...
Classes | |
struct | URI |
Resource URI of a video device, IP stream, or file/directory. More... | |
struct | videoOptions |
The videoOptions struct contains common settings that are used to configure and query videoSource and videoOutput streams. More... | |
class | videoOutput |
The videoOutput API is for rendering and transmitting frames to video input devices such as display windows, broadcasting RTP network streams to remote hosts over UDP/IP, and saving videos/images/directories to disk. More... | |
class | videoSource |
The videoSource API is for capturing frames from video input devices such as MIPI CSI cameras, V4L2 cameras, video/images files from disk, directories containing a sequence of images, and from RTP/RTSP network video streams over UDP/IP. More... | |
Macros | |
#define | LOG_VIDEO "[video] " |
#define | VIDEO_OUTPUT_USAGE_STRING |
Standard command-line options able to be passed to videoOutput::Create() More... | |
#define | VIDEO_SOURCE_USAGE_STRING |
Standard command-line options able to be passed to videoSource::Create() More... | |
videoSource and videoOutput APIs for input and output video streams.
struct URI |
Resource URI of a video device, IP stream, or file/directory.
The URI object is used by videoSource, videoOutput, and videoOptions to identify which resource is being streamed. It will parse a string into protocol, path, and port/extension components.
URI protocols for videoSource input streams include MIPI CSI cameras (csi://
), V4L2 cameras (v4l2://
), RTP/RTSP networking streams (rtp://
and rtsp://
), and disk-based videos/images/directories (file://
)
- `csi://0` for MIPI CSI cameras, where `0` can be replaced with the camera port. It is also assumed that if a number with no protocol is specified (e.g. `"0"`), this means to use the MIPI CSI camera of that number (`"0"` -> `csi://0`) - `v4l2:///dev/video0` for V4L2 cameras, where `/dev/video0` can be replaced with a different video device (e.g. `v4l2:///dev/video1` for V4L2 video device `1`). If no protocol is specified but the string begins with `/dev/video`, then it is assumed that the protocol is V4L2 (`/dev/video0` -> `v4l2:///dev/video0`) - `rtp://@:1234` to recieve an RTP network stream, where `1234` is the port and `@` is shorthand for localhost. `@` can also be substituted for the IP address of a multicast group. Note that it is important to manually specify the codec and width/height when using RTP, as these values cannot be discovered from the RTP stream itself and need to be provided. @see videoOptions for more info about `--input-codec`, `--input-width`, and `--input-height`. - `rtsp://username:password@<remote-host>:1234` to subscribe to an RTSP network stream, where `<remote-host>` should be substituted for the remote host's IP address or hostname, and `1234` is the port. For example, `rtsp://192.168.1.2:5000`. The `username` and `password` are optional, and are only used for RTSP streams that require authentication. - `file:///home/user/my_video.mp4` for disk-based videos, images, and directories of images. You can leave off the `file://` protocol identifier and it will be deduced from the path. It can be a relative or absolute path. If a directory is specified that contains images, those images will be loaded in sequence (sorted alphanumerically). The path can also contain wildcard characters, for example `"images/*.jpg"` - however when using wildcards from the command line, enclose the string in quotes otherwise the OS will pre-expand them. Supported video formats for loading include MKV, MP4, AVI, and FLV. Supported codecs for decoding include H.264, H.265, VP8, VP9, MPEG-2, MPEG-4, and MJPEG. Supported image formats for loading include JPG, PNG, TGA, BMP, GIF, PSD, HDR, PIC, and PNM (PPM/PGM binary).
URI protocols for videoOutput streams include rendering to displays (display://
), broadcasting RTP/RTSP streams (rtp://
, rtsp://
), WebRTC streams (webrtc://
), and saving videos/images to disk (file://
)
- `display://0` for rendering to display using OpenGL, where `0` corresponds to the display number. By default, an OpenGL window will be created, unless the `--headless` command line option is used. - `rtp://<remote-host>:1234` to broadcast a compressed RTP stream to a remote host, where you should substitute `<remote-host>` with the remote host's IP address or hostname, and `1234` is the port. - `rtsp://@:8554/my_stream` to serve a compressed RTSP stream at the specified port and stream path. RTSP clients can connect to the stream at the specified path. Using this will create a RTSP server that can handle multiple videoOutput streams on the same port but with different paths (e.g. `rtsp://<hostname>:8554/my_stream_1`, `rtsp://<hostname>:8554/my_stream_2`, ect) - `webrtc://@:1234/my_stream` to serve a compressed WebRTC stream at the specified port and path that browsers can connect to and view. Users will be able to navigate their browser to `http://<hostname>:1234/my_stream` and view a rudimentary video player that plays the stream. More advanced web front-ends can be created by using standard client-side Javascript WebRTC APIs. - `file:///home/user/my_video.mp4` for saving videos, images, and directories of images to disk. You can leave off the `file://` protocol identifier and it will be deduced from the path. It can be a relative or absolute path. You can output a sequence of images using a path of the form `my_dir/image_%i.jpg` (where `%i` can include printf-style modifiers like `%03i`). The `%i` will be replaced with the image number in the sequence. If just a directory is specified, then by default it will create a sequence of the form `%i.jpg` in that directory. Supported video formats for saving include MKV, MP4, AVI, and FLV. Supported codecs for encoding include H.264, H.265, VP8, VP9, and MJPEG. Supported image formats for saving include JPG, PNG, TGA, and BMP.
The URI strings used should take one of the above forms for input/output streams to be parsed correctly.
Public Member Functions | |
URI () | |
Default constructor. More... | |
URI (const char *uri) | |
Construct a new URI from the given resource string. More... | |
bool | Parse (const char *uri) |
Parse the URI from the given resource string. More... | |
void | Print (const char *prefix="") const |
Log the URI, with an optional prefix label. More... | |
const char * | c_str () const |
Cast to C-style string (const char* ) More... | |
operator const char * () const | |
Cast to C-style string (const char* ) More... | |
operator std::string () const | |
Cast to std::string More... | |
void | operator= (const char *uri) |
Assignment operator (parse URI string) More... | |
void | operator= (const std::string &uri) |
Assignment operator (parse URI string) More... | |
Public Attributes | |
std::string | string |
Full resource URI (what was originally parsed) More... | |
std::string | protocol |
Protocol string (e.g. More... | |
std::string | path |
Path (for a network URI this comes after the port) More... | |
std::string | extension |
File extension (for files only, otherwise empty) More... | |
std::string | location |
Path, IP address, or device name. More... | |
int | port |
IP port, camera port, ect. More... | |
URI::URI | ( | ) |
Default constructor.
URI::URI | ( | const char * | uri | ) |
|
inline |
Cast to C-style string (const char*
)
|
inline |
Cast to C-style string (const char*
)
|
inline |
Cast to std::string
|
inline |
Assignment operator (parse URI string)
|
inline |
Assignment operator (parse URI string)
bool URI::Parse | ( | const char * | uri | ) |
std::string URI::extension |
File extension (for files only, otherwise empty)
std::string URI::location |
Path, IP address, or device name.
std::string URI::path |
Path (for a network URI this comes after the port)
int URI::port |
IP port, camera port, ect.
std::string URI::protocol |
Protocol string (e.g.
file
, csi
, v4l2
, rtp
, ect)
std::string URI::string |
Full resource URI (what was originally parsed)
struct videoOptions |
The videoOptions struct contains common settings that are used to configure and query videoSource and videoOutput streams.
Public Types | |
enum | DeviceType { DEVICE_DEFAULT = 0, DEVICE_V4L2, DEVICE_CSI, DEVICE_IP, DEVICE_FILE, DEVICE_DISPLAY } |
Device interface types. More... | |
enum | IoType { INPUT = 0, OUTPUT } |
Input/Output stream type. More... | |
enum | FlipMethod { FLIP_NONE = 0, FLIP_COUNTERCLOCKWISE, FLIP_ROTATE_180, FLIP_CLOCKWISE, FLIP_HORIZONTAL, FLIP_UPPER_RIGHT_DIAGONAL, FLIP_VERTICAL, FLIP_UPPER_LEFT_DIAGONAL, FLIP_DEFAULT = FLIP_NONE } |
Settings of the flip method used by MIPI CSI cameras and compressed video inputs. More... | |
enum | Codec { CODEC_UNKNOWN = 0, CODEC_RAW, CODEC_H264, CODEC_H265, CODEC_VP8, CODEC_VP9, CODEC_MPEG2, CODEC_MPEG4, CODEC_MJPEG } |
Video codecs. More... | |
enum | CodecType { CODEC_CPU = 0, CODEC_OMX, CODEC_V4L2, CODEC_NVENC, CODEC_NVDEC } |
Video codec engines. More... | |
Public Member Functions | |
videoOptions () | |
Constructor using default options. More... | |
void | Print (const char *prefix=NULL) const |
Log the video settings, with an optional prefix label. More... | |
bool | Parse (const char *URI, const int argc, char **argv, IoType ioType, const char *extraFlag=NULL) |
bool | Parse (const char *URI, const commandLine &cmdLine, IoType ioType) |
bool | Parse (const int argc, char **argv, IoType ioType, int ioPositionArg=-1) |
bool | Parse (const commandLine &cmdLine, IoType ioType, int ioPositionArg=-1) |
Static Public Member Functions | |
static const char * | IoTypeToStr (IoType type) |
Convert an IoType enum to a string. More... | |
static IoType | IoTypeFromStr (const char *str) |
Parse an IoType enum from a string. More... | |
static const char * | DeviceTypeToStr (DeviceType type) |
Convert a DeviceType enum to a string. More... | |
static DeviceType | DeviceTypeFromStr (const char *str) |
Parse a DeviceType enum from a string. More... | |
static const char * | FlipMethodToStr (FlipMethod flip) |
Convert a FlipMethod enum to a string. More... | |
static FlipMethod | FlipMethodFromStr (const char *str) |
Parse a FlipMethod enum from a string. More... | |
static const char * | CodecToStr (Codec codec) |
Convert a Codec enum to a string. More... | |
static Codec | CodecFromStr (const char *str) |
Parse a Codec enum from a string. More... | |
static const char * | CodecTypeToStr (CodecType codecType) |
Convert a CodecType enum to a string. More... | |
static CodecType | CodecTypeFromStr (const char *str) |
Parse a Codec enum from a string. More... | |
Public Attributes | |
URI | resource |
The resource URI of the device, IP stream, or file/directory. More... | |
URI | save |
Optional path to save the compressed stream to a video file on disk, which is to be used in addition to the primary resource URI above. More... | |
uint32_t | width |
The width of the stream (in pixels). More... | |
uint32_t | height |
The height of the stream (in pixels). More... | |
float | frameRate |
The framerate of the stream (the default is 30Hz). More... | |
uint64_t | frameCount |
The number of frames that have been captured or output on this interface. More... | |
uint32_t | bitRate |
The encoding bitrate for compressed streams (only applies to video codecs like H264/H265). More... | |
uint32_t | numBuffers |
The number of ring buffers used for threading. More... | |
bool | zeroCopy |
If true, indicates the buffers are allocated in zeroCopy memory that is mapped to both the CPU and GPU. More... | |
int | loop |
Control the number of loops for videoSource disk-based inputs (for example, the number of times that a video should loop). More... | |
int | latency |
Number of milliseconds of video to buffer for network RTSP or WebRTC streams. More... | |
DeviceType | deviceType |
Indicates the type of device interface used by this stream. More... | |
IoType | ioType |
Indicates if this stream is an input or an output. More... | |
FlipMethod | flipMethod |
The flip method controls if and how an input frame is flipped/rotated in pre-processing from a MIPI CSI camera or compressed video input. More... | |
Codec | codec |
Indicates the codec used by the stream. More... | |
CodecType | codecType |
Indicates the underlying hardware/software engine used by the codec. More... | |
std::string | stunServer |
URL of STUN server used for WebRTC. More... | |
std::string | sslCert |
Path to a file containing a PEM-encoded SSL/TLS certificate. More... | |
std::string | sslKey |
Path to a file containing a PEM-encoded private key. More... | |
enum videoOptions::Codec |
Video codec engines.
Device interface types.
Settings of the flip method used by MIPI CSI cameras and compressed video inputs.
enum videoOptions::IoType |
videoOptions::videoOptions | ( | ) |
Constructor using default options.
|
static |
Parse a Codec enum from a string.
|
static |
Convert a Codec enum to a string.
|
static |
Parse a Codec enum from a string.
|
static |
Convert a CodecType enum to a string.
|
static |
Parse a DeviceType enum from a string.
|
static |
Convert a DeviceType enum to a string.
|
static |
Parse a FlipMethod enum from a string.
|
static |
Convert a FlipMethod enum to a string.
|
static |
Parse an IoType enum from a string.
|
static |
Convert an IoType enum to a string.
bool videoOptions::Parse | ( | const char * | URI, |
const commandLine & | cmdLine, | ||
IoType | ioType | ||
) |
bool videoOptions::Parse | ( | const char * | URI, |
const int | argc, | ||
char ** | argv, | ||
IoType | ioType, | ||
const char * | extraFlag = NULL |
||
) |
bool videoOptions::Parse | ( | const commandLine & | cmdLine, |
IoType | ioType, | ||
int | ioPositionArg = -1 |
||
) |
bool videoOptions::Parse | ( | const int | argc, |
char ** | argv, | ||
IoType | ioType, | ||
int | ioPositionArg = -1 |
||
) |
void videoOptions::Print | ( | const char * | prefix = NULL | ) | const |
Log the video settings, with an optional prefix label.
uint32_t videoOptions::bitRate |
The encoding bitrate for compressed streams (only applies to video codecs like H264/H265).
For videoOutput streams, this option can be set from the command line using --bitrate=N
.
Codec videoOptions::codec |
Indicates the codec used by the stream.
This is only really applicable to compressed streams, otherwise it will be CODEC_RAW
.
videoSource input streams will attempt to discover the codec type (i.e. from video file), however RTP streams need this to be explitly set using the --input-codec=xyz
option (where xyz
is a string like h264
, h265
, vp8
, vp9
, mpeg2
, mpeg4
, or mjpeg
).
A compressed videoOutput stream will default to H.264 encoding, but can be set using the --output-codec=xyz
command line option (same values for xyz
as above).
CodecType videoOptions::codecType |
Indicates the underlying hardware/software engine used by the codec.
For input streams, this can be set with --decode=cpu
or --decode=v4l2
for example. For output streams, this can be set with --encode=cpu
or --encode=v4l2
for example. The default setting is to use hardware-acceleration on Jetson (aarch64) and CPU on x86.
DeviceType videoOptions::deviceType |
Indicates the type of device interface used by this stream.
FlipMethod videoOptions::flipMethod |
The flip method controls if and how an input frame is flipped/rotated in pre-processing from a MIPI CSI camera or compressed video input.
Other types of streams will ignore this.
This option can be set from the command line using --flip-method=xyz
, where xyz
is one of the strings below:
none
(Identity, no rotation)counterclockwise
(Rotate counter-clockwise 90 degrees)rotate-180
(Rotate 180 degrees)clockwise
(Rotate clockwise 90 degrees)horizontal-flip
(Flip horizontally)vertical-flip
(Flip vertically)upper-right-diagonal
(Flip across upper right/lower left diagonal)upper-left-diagonal
(Flip across upper left/lower right diagonal) uint64_t videoOptions::frameCount |
The number of frames that have been captured or output on this interface.
float videoOptions::frameRate |
The framerate of the stream (the default is 30Hz).
This option can be set from the command line using --input-rate=N
or --output-rate=N
for input and output streams, respectively. The --framerate=N
option sets it for both.
uint32_t videoOptions::height |
The height of the stream (in pixels).
This option can be set from the command line using --input-height=N
for videoSource streams, or --output-height=N
for videoOutput streams.
IoType videoOptions::ioType |
Indicates if this stream is an input or an output.
int videoOptions::latency |
Number of milliseconds of video to buffer for network RTSP or WebRTC streams.
The default setting is 10ms (which is lower than GStreamer's default settings). If you have connection/buffering problems, try increasing the latency setting. It can be set from the command line using --input-latency=N
or --output-latency=N
int videoOptions::loop |
Control the number of loops for videoSource disk-based inputs (for example, the number of times that a video should loop).
Other types of streams will ignore it.
The following values are are valid:
-1 = loop forever 0 = don't loop >0 = set number of loops
This option can be set from the command line using --loop=N
.
0
). uint32_t videoOptions::numBuffers |
The number of ring buffers used for threading.
This option can be set from the command line using --num-buffers=N
.
URI videoOptions::resource |
URI videoOptions::save |
Optional path to save the compressed stream to a video file on disk, which is to be used in addition to the primary resource URI above.
This option can be set from the command-line using --input-save
for videoSource streams, or --output-save
for videoOutput streams.
std::string videoOptions::sslCert |
Path to a file containing a PEM-encoded SSL/TLS certificate.
This is used for enabling HTTPS in the WebRTC server. It can be set from the command-line using the --ssl-cert
or --https-cert
options. You can make your own self-signed certificate by running a command like: openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 365
std::string videoOptions::sslKey |
Path to a file containing a PEM-encoded private key.
This is used for enabling HTTPS in the WebRTC server. It can be set from the command-line using the --ssl-key
or --https-key
options. You can make your own self-signed certificate by running a command like: openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 365
std::string videoOptions::stunServer |
URL of STUN server used for WebRTC.
This can be set using the --stun-server
command-line argument. STUN servers are used during ICE/NAT and allow a local device to determine its public IP address. If this is left blank and WebRTC is used, then a default STUN server will be assigned.
uint32_t videoOptions::width |
The width of the stream (in pixels).
This option can be set from the command line using --input-width=N
for videoSource streams, or --output-width=N
for videoOutput streams.
bool videoOptions::zeroCopy |
If true, indicates the buffers are allocated in zeroCopy memory that is mapped to both the CPU and GPU.
Otherwise, the buffers are only accessible from the GPU.
class videoOutput |
The videoOutput API is for rendering and transmitting frames to video input devices such as display windows, broadcasting RTP network streams to remote hosts over UDP/IP, and saving videos/images/directories to disk.
videoOutput interfaces are implemented by glDisplay, gstEncoder, and imageWriter.
The specific implementation is selected at runtime based on the type of resource URI. An instance can have multiple sub-streams, for example simultaneously outputting to a display and encoded video on disk or RTP stream.
videoOutput supports the following protocols and resource URI's:
- `display://0` for rendering to display using OpenGL, where `0` corresponds to the display number. By default, an OpenGL window will be created, unless the `--headless` command line option is used. - `rtp://<remote-host>:1234` to broadcast a compressed RTP stream to a remote host, where you should substitute `<remote-host>` with the remote host's IP address or hostname, and `1234` is the port. - `rtsp://@:8554/my_stream` to serve a compressed RTSP stream at the specified port and stream path. RTSP clients can connect to the stream at the specified path. Using this will create a RTSP server that can handle multiple videoOutput streams on the same port but with different paths (e.g. `rtsp://<hostname>:8554/my_stream_1`, `rtsp://<hostname>:8554/my_stream_2`, ect) - `webrtc://@:1234/my_stream` to serve a compressed WebRTC stream at the specified port and path that browsers can connect to and view. Users will be able to navigate their browser to `http://<hostname>:1234/my_stream` and view a rudimentary video player that plays the stream. More advanced web front-ends can be created by using standard client-side Javascript WebRTC APIs. - `file:///home/user/my_video.mp4` for saving videos, images, and directories of images to disk. You can leave off the `file://` protocol identifier and it will be deduced from the path. It can be a relative or absolute path. You can output a sequence of images using a path of the form `my_dir/image_%i.jpg` (where `%i` can include printf-style modifiers like `%03i`). The `%i` will be replaced with the image number in the sequence. If just a directory is specified, then by default it will create a sequence of the form `%i.jpg` in that directory. Supported video formats for saving include MKV, MP4, AVI, and FLV. Supported codecs for encoding include H.264, H.265, VP8, VP9, and MJPEG. Supported image formats for saving include JPG, PNG, TGA, and BMP.
Public Member Functions | |
virtual | ~videoOutput () |
Destroy interface and release all resources. More... | |
template<typename T > | |
bool | Render (T *image, uint32_t width, uint32_t height) |
Render and output the next frame to the stream. More... | |
virtual bool | Render (void *image, uint32_t width, uint32_t height, imageFormat format) |
Render and output the next frame to the stream. More... | |
virtual bool | Open () |
Begin streaming the device. More... | |
virtual void | Close () |
Stop streaming the device. More... | |
bool | IsStreaming () const |
Check if the device is actively streaming or not. More... | |
uint32_t | GetWidth () const |
Return the width of the stream, in pixels. More... | |
uint32_t | GetHeight () const |
Return the height of the stream, in pixels. More... | |
float | GetFrameRate () const |
Return the framerate, in Hz or FPS. More... | |
uint64_t | GetFrameCount () const |
Return the number of frames output. More... | |
const URI & | GetResource () const |
Return the resource URI of the stream. More... | |
const videoOptions & | GetOptions () const |
Return the videoOptions of the stream. More... | |
void | AddOutput (videoOutput *output) |
Add an output sub-stream. More... | |
uint32_t | GetNumOutputs () const |
Return the number of sub-streams. More... | |
videoOutput * | GetOutput (uint32_t index) const |
Return a sub-stream. More... | |
virtual void | SetStatus (const char *str) |
Set a status string (i.e. More... | |
virtual uint32_t | GetType () const |
Return the interface type of the stream. More... | |
bool | IsType (uint32_t type) const |
Check if this stream is of a particular type. More... | |
template<typename T > | |
bool | IsType () const |
Check if a this stream is of a particular type. More... | |
const char * | TypeToStr () const |
Convert this stream's class type to string. More... | |
Static Public Member Functions | |
static videoOutput * | Create (const videoOptions &options) |
Create videoOutput interface from a videoOptions struct that's already been filled out. More... | |
static videoOutput * | Create (const char *URI, const videoOptions &options=videoOptions()) |
Create videoOutput interface from a resource URI string and optional videoOptions. More... | |
static videoOutput * | Create (const char *URI, const commandLine &cmdLine) |
Create videoOutput interface from a resource URI string and parsing command line arguments. More... | |
static videoOutput * | Create (const char *URI, const int argc, char **argv) |
Create videoOutput interface from a resource URI string and parsing command line arguments. More... | |
static videoOutput * | Create (const int argc, char **argv, int positionArg=-1) |
Create videoOutput interface by parsing command line arguments, including the resource URI. More... | |
static videoOutput * | Create (const commandLine &cmdLine, int positionArg=-1) |
Create videoOutput interface by parsing command line arguments, including the resource URI. More... | |
static videoOutput * | CreateNullOutput () |
Create videoOutput interface that acts as a NULL output and does nothing with incoming frames. More... | |
static const char * | Usage () |
Usage string for command line arguments to Create() More... | |
static const char * | TypeToStr (uint32_t type) |
Convert a class type to a string. More... | |
Protected Member Functions | |
videoOutput (const videoOptions &options) | |
Protected Attributes | |
bool | mStreaming |
videoOptions | mOptions |
std::vector< videoOutput * > | mOutputs |
|
virtual |
Destroy interface and release all resources.
|
protected |
|
inline |
Add an output sub-stream.
When a frame is rendered to this stream, it will be rendered to each sub-stream.
|
virtual |
Stop streaming the device.
Reimplemented in gstEncoder.
|
static |
Create videoOutput interface from a resource URI string and parsing command line arguments.
|
static |
Create videoOutput interface from a resource URI string and parsing command line arguments.
|
static |
Create videoOutput interface from a resource URI string and optional videoOptions.
|
static |
Create videoOutput interface by parsing command line arguments, including the resource URI.
positionArg | indicates the positional argument number in the command line of the resource URI (or -1 if a positional argument isn't used, and should instead be parsed from the --input= option). |
|
static |
Create videoOutput interface by parsing command line arguments, including the resource URI.
positionArg | indicates the positional argument number in the command line of the resource URI (or -1 if a positional argument isn't used, and should instead be parsed from the --input= option). |
|
static |
Create videoOutput interface from a videoOptions struct that's already been filled out.
It's expected that the supplied videoOptions already contain a valid resource URI.
|
static |
Create videoOutput interface that acts as a NULL output and does nothing with incoming frames.
CreateNullOutput() can be used when there are no other outputs created and programs expect one to run.
|
inline |
Return the number of frames output.
|
inline |
Return the framerate, in Hz or FPS.
|
inline |
Return the height of the stream, in pixels.
|
inline |
Return the number of sub-streams.
|
inline |
Return the videoOptions of the stream.
|
inline |
Return a sub-stream.
|
inlinevirtual |
Return the interface type of the stream.
This could be one of the following values:
Reimplemented in glDisplay, gstEncoder, and imageWriter.
|
inline |
Return the width of the stream, in pixels.
|
inline |
Check if the device is actively streaming or not.
true
if the device is streaming (open), or false
if it's closed or has reached EOS (End Of Stream).
|
inline |
Check if a this stream is of a particular type.
Can be used with glDisplay, gstEncoder, and imageWriter. For example:
if( stream->IsType<glDisplay>() ) glDisplay* display = (glDisplay*)stream; // safe to cast
|
inline |
Check if this stream is of a particular type.
|
virtual |
Begin streaming the device.
After Open() is called, frames from the device can begin to be rendered.
Open() is not stricly necessary to call, if you call one of the Render() functions they will first check to make sure that the stream is opened, and if not they will open it automatically for you.
true
on success, false
if an error occurred opening the stream. Reimplemented in gstEncoder, and glDisplay.
|
inline |
Render and output the next frame to the stream.
The image formats supported by this templated version of Render() include the following:
IMAGE_RGB8
)IMAGE_RGBA8
)IMAGE_RGB32F
)IMAGE_RGBA32F
)The image format will automatically be deduced from these types. If other types are used with this overload, a static compile-time error will be asserted.
image | CUDA pointer containing the image to output. |
width | width of the image, in pixels. |
height | height of the image, in pixels. |
true
on success, false
on error.
|
virtual |
Render and output the next frame to the stream.
The image formats supported by Render() are IMAGE_RGB8
(uchar3), IMAGE_RGBA8
(uchar4), IMAGE_RGB32F
(float3), and IMAGE_RGBA32F
(float4).
image | CUDA pointer containing the image to output. |
width | width of the image, in pixels. |
height | height of the image, in pixels. |
format | format of the image ( |
true
on success, false
on error. Reimplemented in glDisplay, gstEncoder, and imageWriter.
|
virtual |
Set a status string (i.e.
status bar text on display window). Other types of interfaces may ignore the status text.
Reimplemented in glDisplay.
|
inline |
Convert this stream's class type to string.
|
static |
Convert a class type to a string.
|
inlinestatic |
Usage string for command line arguments to Create()
|
protected |
|
protected |
|
protected |
class videoSource |
The videoSource API is for capturing frames from video input devices such as MIPI CSI cameras, V4L2 cameras, video/images files from disk, directories containing a sequence of images, and from RTP/RTSP network video streams over UDP/IP.
videoSource interfaces are implemented by gstCamera, gstDecoder, and imageLoader. The specific implementation is selected at runtime based on the type of resource URI.
videoSource supports the following protocols and resource URI's:
- `csi://0` for MIPI CSI cameras, where `0` can be replaced with the camera port. It is also assumed that if a number with no protocol is specified (e.g. `"0"`), this means to use the MIPI CSI camera of that number (`"0"` -> `csi://0`). - `v4l2:///dev/video0` for V4L2 cameras, where `/dev/video0` can be replaced with a different video device (e.g. `v4l2:///dev/video1` for V4L2 video device `1`). If no protocol is specified but the string begins with `/dev/video`, then it is assumed that the protocol is V4L2 (`/dev/video0` -> `v4l2:///dev/video0`) - `rtp://@:1234` to recieve an RTP network stream, where `1234` is the port and `@` is shorthand for localhost. `@` can also be substituted for the IP address of a multicast group. Note that it is important to manually specify the codec of the stream when using RTP, as the codec cannot be discovered from the RTP stream itself and need to be provided. @see videoOptions for more info about the `--input-codec` option. - `rtsp://username:password@<remote-host>:1234` to subscribe to an RTSP network stream, where `<remote-host>` should be substituted for the remote host's IP address or hostname, and `1234` is the port. For example, `rtsp://192.168.1.2:5000`. The `username` and `password` are optional, and are only used for RTSP streams that require authentication. - `file:///home/user/my_video.mp4` for disk-based videos, images, and directories of images. You can leave off the `file://` protocol identifier and it will be deduced from the path. It can be a relative or absolute path. If a directory is specified that contains images, those images will be loaded in sequence (sorted alphanumerically). The path can also contain wildcard characters, for example `"images/*.jpg"` - however when using wildcards from the command line, enclose the string in quotes otherwise the OS will pre-expand them. Supported video formats for loading include MKV, MP4, AVI, and FLV. Supported codecs for decoding include H.264, H.265, VP8, VP9, MPEG-2, MPEG-4, and MJPEG. Supported image formats for loading include JPG, PNG, TGA, BMP, GIF, PSD, HDR, PIC, and PNM (PPM/PGM binary).
Public Types | |
enum | Status { ERROR = -2, EOS = -1, TIMEOUT = 0, OK = 1 } |
Stream status codes that are optionally returned from Capture() More... | |
Public Member Functions | |
virtual | ~videoSource () |
Destroy interface and release all resources. More... | |
template<typename T > | |
bool | Capture (T **image, int *status) |
Capture the next image from the video stream, using the default timeout of 1000ms. More... | |
template<typename T > | |
bool | Capture (T **image, uint64_t timeout=DEFAULT_TIMEOUT, int *status=NULL) |
Capture the next image from the video stream. More... | |
virtual bool | Capture (void **image, imageFormat format, uint64_t timeout=DEFAULT_TIMEOUT, int *status=NULL)=0 |
Capture the next image from the video stream. More... | |
virtual bool | Open () |
Begin streaming the device. More... | |
virtual void | Close () |
Stop streaming the device. More... | |
bool | IsStreaming () const |
Check if the device is actively streaming or not. More... | |
uint32_t | GetWidth () const |
Return the width of the stream, in pixels. More... | |
uint32_t | GetHeight () const |
Return the height of the stream, in pixels. More... | |
uint32_t | GetFrameRate () const |
Return the framerate, in Hz or FPS. More... | |
uint64_t | GetFrameCount () const |
Return the number of frames captured. More... | |
uint64_t | GetLastTimestamp () const |
Get timestamp of the last captured frame, in nanoseconds. More... | |
imageFormat | GetRawFormat () const |
Get raw image format. More... | |
const URI & | GetResource () const |
Return the resource URI of the stream. More... | |
const videoOptions & | GetOptions () const |
Return the videoOptions of the stream. More... | |
virtual uint32_t | GetType () const |
Return the interface type of the stream. More... | |
bool | IsType (uint32_t type) const |
Check if this stream is of a particular type. More... | |
template<typename T > | |
bool | IsType () const |
Check if a this stream is of a particular type. More... | |
const char * | TypeToStr () const |
Convert this stream's class type to string. More... | |
Static Public Member Functions | |
static videoSource * | Create (const videoOptions &options) |
Create videoSource interface from a videoOptions struct that's already been filled out. More... | |
static videoSource * | Create (const char *URI, const videoOptions &options=videoOptions()) |
Create videoSource interface from a resource URI string and optional videoOptions. More... | |
static videoSource * | Create (const char *URI, const commandLine &cmdLine) |
Create videoSource interface from a resource URI string and parsing command line arguments. More... | |
static videoSource * | Create (const char *URI, const int argc, char **argv) |
Create videoSource interface from a resource URI string and parsing command line arguments. More... | |
static videoSource * | Create (const int argc, char **argv, int positionArg=-1) |
Create videoSource interface by parsing command line arguments, including the resource URI. More... | |
static videoSource * | Create (const commandLine &cmdLine, int positionArg=-1) |
Create videoSource interface by parsing command line arguments, including the resource URI. More... | |
static const char * | Usage () |
Usage string for command line arguments to Create() More... | |
static const char * | TypeToStr (uint32_t type) |
Convert a class type to a string. More... | |
Static Public Attributes | |
static const uint64_t | DEFAULT_TIMEOUT =1000 |
The default Capture timeout (1000ms) More... | |
Protected Member Functions | |
videoSource (const videoOptions &options) | |
Protected Attributes | |
bool | mStreaming |
videoOptions | mOptions |
uint64_t | mLastTimestamp |
imageFormat | mRawFormat |
enum videoSource::Status |
Stream status codes that are optionally returned from Capture()
Enumerator | |
---|---|
ERROR | an error occurred |
EOS | end-of-stream (EOS) |
TIMEOUT | a timeout occurred |
OK | frame capture successful |
|
virtual |
Destroy interface and release all resources.
|
protected |
|
inline |
Capture the next image from the video stream, using the default timeout of 1000ms.
The image formats supported by this templated version of Capture() include the following:
IMAGE_RGB8
)IMAGE_RGBA8
)IMAGE_RGB32F
)IMAGE_RGBA32F
)The image format will automatically be deduced from these types. If other types are used with this overload, a static compile-time error will be asserted.
[out] | image | output pointer that will be set to the memory containing the image. If this interface has it's videoOptions::zeroCopy flag set to true, the memory was allocated in mapped CPU/GPU memory and is be accessible from both CPU and CUDA. Otherwise, it's accessible only from CUDA. |
[out] | status | optional status code returned ( |
true
if a frame was captured, false
if there was an error or a timeout occurred.
|
inline |
Capture the next image from the video stream.
The image formats supported by this templated version of Capture() include the following:
IMAGE_RGB8
)IMAGE_RGBA8
)IMAGE_RGB32F
)IMAGE_RGBA32F
)The image format will automatically be deduced from these types. If other types are used with this overload, a static compile-time error will be asserted.
[out] | image | output pointer that will be set to the memory containing the image. If this interface has it's videoOptions::zeroCopy flag set to true, the memory was allocated in mapped CPU/GPU memory and is be accessible from both CPU and CUDA. Otherwise, it's accessible only from CUDA. |
[in] | timeout | timeout in milliseconds to wait to capture the image before returning. The default is 1000ms. A timeout value of UINT64_MAX will wait forever. A timeout of 0 will return instantly if a frame wasn't immediately ready. |
[out] | status | optional status code returned ( |
true
if a frame was captured, false
if there was an error or a timeout occurred.
|
pure virtual |
Capture the next image from the video stream.
The image formats supported by Capture() are IMAGE_RGB8
(uchar3), IMAGE_RGBA8
(uchar4), IMAGE_RGB32F
(float3), and IMAGE_RGBA32F
(float4).
[out] | image | output pointer that will be set to the memory containing the image. If this interface has it's videoOptions::zeroCopy flag set to true, the memory was allocated in mapped CPU/GPU memory and is be accessible from both CPU and CUDA. Otherwise, it's accessible only from CUDA. |
[in] | timeout | timeout in milliseconds to wait to capture the image before returning. The default is 1000ms. A timeout value of UINT64_MAX will wait forever. A timeout of 0 will return instantly if a frame wasn't immediately ready. |
[out] | status | optional status code returned ( |
true
if a frame was captured, false
if there was an error or a timeout occurred. Implemented in gstCamera, gstDecoder, and imageLoader.
|
virtual |
Stop streaming the device.
Reimplemented in gstCamera, gstDecoder, and imageLoader.
|
static |
Create videoSource interface from a resource URI string and parsing command line arguments.
|
static |
Create videoSource interface from a resource URI string and parsing command line arguments.
|
static |
Create videoSource interface from a resource URI string and optional videoOptions.
|
static |
Create videoSource interface by parsing command line arguments, including the resource URI.
positionArg | indicates the positional argument number in the command line of the resource URI (or -1 if a positional argument isn't used, and should instead be parsed from the --input= option). |
|
static |
Create videoSource interface by parsing command line arguments, including the resource URI.
positionArg | indicates the positional argument number in the command line of the resource URI (or -1 if a positional argument isn't used, and should instead be parsed from the --input= option). |
|
static |
Create videoSource interface from a videoOptions struct that's already been filled out.
It's expected that the supplied videoOptions already contain a valid resource URI.
|
inline |
Return the number of frames captured.
|
inline |
Return the framerate, in Hz or FPS.
|
inline |
Return the height of the stream, in pixels.
|
inline |
Get timestamp of the last captured frame, in nanoseconds.
|
inline |
Return the videoOptions of the stream.
|
inline |
Get raw image format.
|
inlinevirtual |
Return the interface type of the stream.
This could be one of the following values:
Reimplemented in gstCamera, gstDecoder, and imageLoader.
|
inline |
Return the width of the stream, in pixels.
|
inline |
Check if the device is actively streaming or not.
true
if the device is streaming (open), or false
if it's closed or has reached EOS (End Of Stream).
|
inline |
Check if a this stream is of a particular type.
Can be used with gstCamera, gstDecoder, and imageLoader. For example:
if( stream->IsType<gstCamera>() ) gstCamera* camera = (gstCamera*)stream; // safe to cast
|
inline |
Check if this stream is of a particular type.
|
virtual |
Begin streaming the device.
After Open() is called, frames from the device will begin to be captured.
Open() is not stricly necessary to call, if you call one of the Capture() functions they will first check to make sure that the stream is opened, and if not they will open it automatically for you.
true
on success, false
if an error occurred opening the stream. Reimplemented in gstCamera, gstDecoder, and imageLoader.
|
inline |
Convert this stream's class type to string.
|
static |
Convert a class type to a string.
|
inlinestatic |
Usage string for command line arguments to Create()
|
static |
The default Capture timeout (1000ms)
|
protected |
|
protected |
|
protected |
|
protected |
#define LOG_VIDEO "[video] " |
#define VIDEO_OUTPUT_USAGE_STRING |
Standard command-line options able to be passed to videoOutput::Create()
#define VIDEO_SOURCE_USAGE_STRING |
Standard command-line options able to be passed to videoSource::Create()