You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							192 lines
						
					
					
						
							5.4 KiB
						
					
					
				
			
		
		
	
	
							192 lines
						
					
					
						
							5.4 KiB
						
					
					
				| //=============================================================================
 | |
| //
 | |
| //  Copyright (c) 2015,2019 Qualcomm Technologies, Inc.
 | |
| //  All Rights Reserved.
 | |
| //  Confidential and Proprietary - Qualcomm Technologies, Inc.
 | |
| //
 | |
| //=============================================================================
 | |
| 
 | |
| #ifndef ZEROTH_IDNC_CONTAINER_HPP
 | |
| #define ZEROTH_IDNC_CONTAINER_HPP
 | |
| 
 | |
| #include <memory>
 | |
| #include <stdint.h>
 | |
| #include <string>
 | |
| #include <vector>
 | |
| #include <set>
 | |
| #include <stdexcept>
 | |
| 
 | |
| #include "DlSystem/ZdlExportDefine.hpp"
 | |
| #include "DlSystem/String.hpp"
 | |
| 
 | |
| namespace zdl {
 | |
| namespace DlContainer {
 | |
| 
 | |
| /** @addtogroup c_plus_plus_apis C++
 | |
| @{ */
 | |
| 
 | |
| class IDlContainer;
 | |
| class dlc_error;
 | |
| 
 | |
| /**
 | |
|  * The structure of a record in a DL container.
 | |
|  */
 | |
| struct ZDL_EXPORT DlcRecord
 | |
| {
 | |
|    /// Name of the record.
 | |
|    std::string name;
 | |
|    /// Byte blob holding the data for the record.
 | |
|    std::vector<uint8_t> data;
 | |
| 
 | |
|    DlcRecord();
 | |
|    DlcRecord( DlcRecord&& other )
 | |
|       : name(std::move(other.name))
 | |
|       , data(std::move(other.data))
 | |
|    {}
 | |
|    DlcRecord(const std::string& new_name)
 | |
|       : name(new_name)
 | |
|       , data()
 | |
|    {
 | |
|       if(name.empty())
 | |
|       {
 | |
|          name.reserve(1);
 | |
|       }
 | |
|    }
 | |
|    DlcRecord(const DlcRecord&) = delete;
 | |
| };
 | |
| 
 | |
| // The maximum length of any record name.
 | |
| extern const uint32_t RECORD_NAME_MAX_SIZE;
 | |
| // The maximum size of the record payload (bytes).
 | |
| extern const uint32_t RECORD_DATA_MAX_SIZE;
 | |
| // The maximum number of records in an archive at one time.
 | |
| extern const uint32_t ARCHIVE_MAX_RECORDS;
 | |
| 
 | |
| /**
 | |
|  * Represents a container for a neural network model which can
 | |
|  * be used to load the model into the SNPE runtime.
 | |
|  */
 | |
| class ZDL_EXPORT IDlContainer
 | |
| {
 | |
| public:
 | |
|    /**
 | |
|     * Initializes a container from a container archive file.
 | |
|     *
 | |
|     * @param[in] filename Container archive file path.
 | |
|     *
 | |
|     * @return A pointer to the initialized container
 | |
|     */
 | |
|    ZDL_EXPORT static std::unique_ptr<IDlContainer>
 | |
|    open(const std::string &filename) noexcept;
 | |
| 
 | |
|    /**
 | |
|     * Initializes a container from a container archive file.
 | |
|     *
 | |
|     * @param[in] filename Container archive file path.
 | |
|     *
 | |
|     * @return A pointer to the initialized container
 | |
|     */
 | |
|    ZDL_EXPORT static std::unique_ptr<IDlContainer>
 | |
|    open(const zdl::DlSystem::String &filename) noexcept;
 | |
| 
 | |
|    /**
 | |
|     * Initializes a container from a byte buffer.
 | |
|     *
 | |
|     * @param[in] buffer Byte buffer holding the contents of an archive
 | |
|     *                   file.
 | |
|     *
 | |
|     * @return A pointer to the initialized container
 | |
|     */
 | |
|    ZDL_EXPORT static std::unique_ptr<IDlContainer>
 | |
|    open(const std::vector<uint8_t> &buffer) noexcept;
 | |
| 
 | |
|    /**
 | |
|     * Initializes a container from a byte buffer.
 | |
|     *
 | |
|     * @param[in] buffer Byte buffer holding the contents of an archive
 | |
|     *                   file.
 | |
|     *
 | |
|     * @param[in] size Size of the byte buffer.
 | |
|     *
 | |
|     * @return A pointer to the initialized container
 | |
|     */
 | |
|    ZDL_EXPORT static std::unique_ptr<IDlContainer>
 | |
|    open(const uint8_t* buffer, const size_t size) noexcept;
 | |
| 
 | |
| 
 | |
| /** @} */ /* end_addtogroup c_plus_plus_apis C++ */
 | |
| 
 | |
|    /**
 | |
|     * Get the record catalog for a container.
 | |
|     *
 | |
|     * @param[out] catalog Buffer that will hold the record names on
 | |
|     *                    return.
 | |
|     */
 | |
|    virtual void getCatalog(std::set<std::string> &catalog) const = 0;
 | |
| 
 | |
|     /**
 | |
|      * Get the record catalog for a container.
 | |
|      *
 | |
|      * @param[out] catalog Buffer that will hold the record names on
 | |
|      *                    return.
 | |
|      */
 | |
|    virtual void getCatalog(std::set<zdl::DlSystem::String> &catalog) const = 0;
 | |
| 
 | |
|    /**
 | |
|     * Get a record from a container by name.
 | |
|     *
 | |
|     * @param[in] name Name of the record to fetch.
 | |
|     * @param[out] record The passed in record will be populated with the
 | |
|     *                   record data on return. Note that the caller
 | |
|     *                   will own the data in the record and is
 | |
|     *                   responsible for freeing it if needed.
 | |
|     */
 | |
|    virtual void getRecord(const std::string &name, DlcRecord &record) const = 0;
 | |
| 
 | |
|    /**
 | |
|     * Get a record from a container by name.
 | |
|     *
 | |
|     * @param[in] name Name of the record to fetch.
 | |
|     * @param[out] record The passed in record will be populated with the
 | |
|     *                   record data on return. Note that the caller
 | |
|     *                   will own the data in the record and is
 | |
|     *                   responsible for freeing it if needed.
 | |
|     */
 | |
|    virtual void getRecord(const zdl::DlSystem::String &name, DlcRecord &record) const = 0;
 | |
| 
 | |
|    /**
 | |
|     * Save the container to an archive on disk. This function will save the
 | |
|     * container if the filename is different from the file that it was opened
 | |
|     * from, or if at least one record was modified since the container was
 | |
|     * opened.
 | |
|     *
 | |
|     * It will truncate any existing file at the target path.
 | |
|     *
 | |
|     * @param filename Container archive file path.
 | |
|     *
 | |
|     * @return indication of success/failure
 | |
|     */
 | |
|    virtual bool save(const std::string &filename) = 0;
 | |
| 
 | |
|    /**
 | |
|     * Save the container to an archive on disk. This function will save the
 | |
|     * container if the filename is different from the file that it was opened
 | |
|     * from, or if at least one record was modified since the container was
 | |
|     * opened.
 | |
|     *
 | |
|     * It will truncate any existing file at the target path.
 | |
|     *
 | |
|     * @param filename Container archive file path.
 | |
|     *
 | |
|     * @return indication of success/failure
 | |
|     */
 | |
|    virtual bool save (const zdl::DlSystem::String &filename) = 0;
 | |
| 
 | |
|    virtual ~IDlContainer() {}
 | |
| };
 | |
| 
 | |
| } // ns DlContainer
 | |
| } // ns zdl
 | |
| 
 | |
| 
 | |
| #endif
 | |
| 
 |