#pragma once #include "ITrackCallbacks.h" #include #include namespace tsdk { struct IStream : fsdk::IRefCounted { /** @brief Stream statistics */ struct Statistics { //! total pushed frames count (count of frames, that were tried to push via pushFrame) size_t totalFramesCount = 0; //! count of frames, that were successfully added to the processing queue (that frames, for which pushFrame returned true) size_t pushedFramesCount = 0; //! count of frames, that were used only to update frg (w/o tracks processing) size_t onlyFRGUpdateFramesCount = 0; //! count of frames, that were used to process tracks size_t tracksProcessingFramesCount = 0; //! count of frames, that were successfully processed (must be equal to pushedFramesCount after stream has been finished) size_t processedFramesCount = 0; //! fps for last second uint32_t fps = 0; }; /** @brief Pushes a single frame to the buffer. * @note You should pass consequent frames for reasonble results * (thing video frames). * Call face detector and tracker, then triggers the callback for * processed faces. * @param frame input frame image. Supported image formats: R8G8B8 OR R8G8B8X8 for both MemoryCPU/MemoryGPU. For MemoryGPU also YUV_NV12 and YUV_NV21 are supported. * @param frameId unique identifier for frames sequence. * @param data is any additional data that a developer wants to receive in callbacks-realization. * Do not use the delete-operator. The garbage collector is implemented inside TrackEngine for this param. * @return true if frame was appended to the queue for processing, * false otherwise - frame was skipped because of full queue. */ TRACK_ENGINE_API virtual bool pushFrame( const fsdk::Image &frame, uint32_t frameId, tsdk::AdditionalFrameData *data) = 0; /** @brief Pushes a single user defined custom frame to the buffer. * @note see ICustomFrame for details * @param frame custom frame * @param frameId unique identifier for frames sequence. * @param data is any additional data that a developer wants to receive in callbacks-realization. * @note Now the feature is supported only for CPU memory residence! * Do not use the delete-operator. The garbage collector is implemented inside TrackEngine for this param. * @return true if frame was appended to the queue for processing, * false otherwise - frame was skipped because of full queue. */ TRACK_ENGINE_API virtual bool pushCustomFrame( fsdk::Ref frame, uint32_t frameId, tsdk::AdditionalFrameData *data) = 0; /** @brief Pushes a single frame to the buffer with timeout. * @note You should pass consequent frames for reasonble results * (thing video frames). * Call face detector and tracker, then triggers the callback for * processed faces. * This function may block for longer than timeMs due to * scheduling, resource contention delays or changing system clock * @param frame input frame image. Format must be R8G8B8. * @param frameId unique identifier for frames sequence. * @param data is any additional data that a developer wants to receive in callbacks-realization. * @note Now the feature is supported only for CPU memory residence! * Do not use the delete-operator. The garbage collector is implemented inside TrackEngine for this param. * @param timeMs the maximum time in milliseconds to spend waiting for execution. * if timeMs is zero, then function's behavior is equal to pushFrame * @return true if frame was appended to the queue for processing, * false otherwise - frame was skipped because of full queue (after waiting timeMs milliseconds). */ TRACK_ENGINE_API virtual bool pushFrameWaitFor( const fsdk::Image &frame, uint32_t frameId, tsdk::AdditionalFrameData *data, uint32_t timeMs) = 0; /** @brief Pushes a single user defined custom frame to the buffer. * @note @see 'pushCustomFrame', 'pushFrameWaitFor' for details */ TRACK_ENGINE_API virtual bool pushCustomFrameWaitFor( fsdk::Ref frame, uint32_t frameId, tsdk::AdditionalFrameData *data, uint32_t timeMs) = 0; /** @brief Sets a best shot observer for this Stream * @param observer pointer to the observer object, @see IBestShotObserver */ TRACK_ENGINE_API virtual void TSDK_DEPRECATED("This call is deprecated. Consider " "ITrackEngine::setBatchBestShotObserver(tsdk::IBatchBestShotObserver *observer) call\n") setBestShotObserver(tsdk::IBestShotObserver* observer) = 0; /** @brief Sets a visual observer for this Stream * @param observer pointer to the observer object, @see IVisualObserver */ TRACK_ENGINE_API virtual void TSDK_DEPRECATED("This call is deprecated. Consider " "ITrackEngine::setBatchVisualObserver(tsdk::IBatchVisualObserver *observer) call\n") setVisualObserver(tsdk::IVisualObserver* observer) = 0; /** @brief Sets a debug observer for this Stream * @param observer pointer to the observer object, @see IDebugObserver */ TRACK_ENGINE_API virtual void TSDK_DEPRECATED("This call is deprecated. Consider " "ITrackEngine::setBatchDebugObserver(tsdk::IBatchDebugObserver *observer) call\n") setDebugObserver(tsdk::IDebugObserver* observer) = 0; /** @brief Sets a best shot predicate for this Stream * @param predicate best shot predicate, @see IBestShotPredicate */ TRACK_ENGINE_API virtual void setBestShotPredicate( tsdk::IBestShotPredicate* predicate) = 0; /** @brief Sets a visual predicate for this Stream * @param predicate visual predicate, @see IVisualPredicate */ TRACK_ENGINE_API virtual void setVisualPredicate( tsdk::IVisualPredicate *predicate) = 0; /** @brief Enables or disables observer * @param type observer type * @param enabled enable observer if true, disable otherwise */ TRACK_ENGINE_API virtual void setObserverEnabled( tsdk::StreamObserverType type, bool enabled) = 0; /** @brief Blocks current thread until all frames in this Stream will be handled * and all callbacks will be executed. * @note Stream could not be used after join. * @see setBestShotObserver, setVisualObserver, setDebugObserver and * setBestShotPredicate */ TRACK_ENGINE_API virtual void join() = 0; /** @brief Get stream statistics (see above: struct Statistics) * @return stream statistics */ TRACK_ENGINE_API virtual Statistics getStatistics() const = 0; /** @brief Get stream id * @return stream Id */ TRACK_ENGINE_API virtual const StreamId& getId() const = 0; /** @brief Get stream parameters, @see ITrackEngine::createStream and StreamParams for details * @return stream parameters */ TRACK_ENGINE_API virtual StreamParams getParams() const = 0; }; }