Registering a User Defined Auto Control Plugin

The application is responsible for allocating and deallocating the plugin object. To avoid resource allocation during safety critical operation, the plugin should only allocate required resources during initialization and deallocate during deinitialization.

To register a user-defined (custom) auto control plugin, the user must derive from the ISiplControlAuto interface class and implement its functions.

class ISiplControlAuto {
public:
    virtual SIPLStatus Process(const SiplControlAutoInputParam& inParams, 
      SiplControlAutoOutputParam& outParams) = 0;
    virtual SIPLStatus GetNoiseProfile(
        const SiplControlEmbedInfo& currFrameEmbedInfo,
        const uint32_t maxSupportedNoiseProfiles,
        uint32_t& noiseProfile) {
            noiseProfile = 0;
            return NVSIPL_STATUS_OK;
        }
    virtual ~ISiplControlAuto() = default;
protected:
    ISiplControlAuto() = default;
private:
    ISiplControlAuto(const ISiplControlAuto&) = delete;
    ISiplControlAuto& operator= (const ISiplControlAuto&) = delete;
};