Adds accessors for an internal frame count performance metric.
The "internal frame count" is an implementation-dependent metric that may be used to detect performance issues and producer frame drops for libargus implementations that make use of internal captures.
When a device is opened by a CaptureSession, the libargus implementation may begin to immediately capture and process frames from the device in order to initialize the camera subsystem even before a client request has been submitted. Similarly, frames may be captured and processed by the implementation when the client is idle or not ready for output in order to maintain the driver subsystem and/or auto-control state (exposure, white balance, etc). These captures are started and processed entirely within the libargus implementation, with no inputs from or outputs to the client application, and so are referred to as "internal" captures. These internal captures are typically submitted when there are no client requests in the capture queue or no stream buffers available for output within a sensor frame period, and so knowing when an internal capture has been submitted can be used to detect application or performance issues in cases where these conditions are not expected to occur. This extension provides this information in the form of an "internal frame count", which is the total number of captures submitted by the session including both the internal captures as well as client-submitted requests. If an internal frame count gap appears between two client-submitted captures, this means that one or more internal captures have been performed.
When an application is saturating the capture queue to maintain driver efficiency, either manually or by using repeat capture requests, the internal frame count can be used to detect when internal captures are submitted due to a lack of available output stream buffers. This situation leads to sensor frames that are not output to the client's output stream, which is usually an undesirable behavior that is referred to as "producer frame drop". This is generally caused by a high consumer processing time, which starves the stream’s available buffer pool, and can often be resolved by decreasing the consumer processing time (reducing the time a buffer is acquired, decreasing system load, increasing hardware clocks, etc.)
Data Structures | |
class | Argus::Ext::IInternalFrameCount |
Files | |
file | InternalFrameCount.h |