15
15
16
16
namespace {
17
17
18
- size_t getFileSize (std::istream& stream) {
18
+ std::streampos getFileSize (std::istream& stream) {
19
19
auto log = intel_npu::Logger::global ().clone (" getFileSize" );
20
20
if (!stream) {
21
21
OPENVINO_THROW (" Stream is in bad status! Please check the passed stream status!" );
22
22
}
23
23
24
- const size_t streamStart = stream.tellg ();
24
+ if (stream.rdbuf ()->in_avail () != 0 ) {
25
+ // ov::OwningSharedStreamBuffer scenario
26
+ return stream.rdbuf ()->in_avail () + stream.tellg ();
27
+ }
28
+
29
+ const std::streampos streamStart = stream.tellg ();
25
30
stream.seekg (0 , std::ios_base::end);
26
- const size_t streamEnd = stream.tellg ();
31
+ const std::streampos streamEnd = stream.tellg ();
27
32
stream.seekg (streamStart, std::ios_base::beg);
28
33
29
34
log.debug (" Read blob size: streamStart=%zu, streamEnd=%zu" , streamStart, streamEnd);
@@ -58,25 +63,25 @@ void OpenvinoVersion::write(std::ostream& stream) {
58
63
stream.write (_version.data (), _size);
59
64
}
60
65
61
- Metadata<METADATA_VERSION_1_0>::Metadata(std::optional<std::string_view> ovVersion, size_t ovHeaderOffset, uint64_t blobDataSize)
66
+ Metadata<METADATA_VERSION_1_0>::Metadata(std::optional<std::string_view> ovVersion, uint64_t blobDataSize)
62
67
: _version{METADATA_VERSION_1_0},
63
68
_ovVersion{ovVersion.value_or (ov::get_openvino_version ().buildNumber )},
64
- _ovHeaderOffset{ovHeaderOffset},
65
69
_blobDataSize{blobDataSize} {}
66
70
67
71
void Metadata<METADATA_VERSION_1_0>::read(std::istream& stream) {
68
72
_ovVersion.read (stream);
69
73
}
70
74
71
75
void Metadata<METADATA_VERSION_1_0>::write(std::ostream& stream) {
72
- stream.write (reinterpret_cast <const char *>(&_version), sizeof (_version));
73
76
_ovVersion.write (stream);
77
+ stream.write (reinterpret_cast <const char *>(&_blobDataSize), sizeof (_blobDataSize));
78
+ stream.write (MAGIC_BYTES.data (), MAGIC_BYTES.size ());
74
79
}
75
80
76
- std::unique_ptr<MetadataBase> create_metadata (uint32_t version, size_t ovHeaderOffset, uint64_t blobDataSize) {
81
+ std::unique_ptr<MetadataBase> create_metadata (uint32_t version, uint64_t blobDataSize) {
77
82
switch (version) {
78
83
case METADATA_VERSION_1_0:
79
- return std::make_unique<Metadata<METADATA_VERSION_1_0>>(std::nullopt, ovHeaderOffset, blobDataSize);
84
+ return std::make_unique<Metadata<METADATA_VERSION_1_0>>(std::nullopt, blobDataSize);
80
85
81
86
default :
82
87
return nullptr ;
@@ -113,65 +118,26 @@ std::unique_ptr<MetadataBase> read_metadata_from(std::istream& stream) {
113
118
std::string blobMagicBytes;
114
119
blobMagicBytes.resize (magicBytesSize);
115
120
116
- size_t currentStreamPos = stream.tellg ();
117
- size_t streamSize = getFileSize (stream);
118
- stream.seekg (streamSize - magicBytesSize, std::ios::beg );
121
+ std::streampos currentStreamPos = stream.tellg ();
122
+ std::streampos streamSize = getFileSize (stream);
123
+ stream.seekg (-currentStreamPos + streamSize - magicBytesSize, std::ios::cur );
119
124
stream.read (blobMagicBytes.data (), magicBytesSize);
120
125
if (MAGIC_BYTES != blobMagicBytes) {
121
126
logger.error (" Blob is missing NPU metadata!" );
122
127
return nullptr ;
123
128
}
124
129
125
130
uint64_t blobDataSize;
126
- stream.seekg (streamSize - magicBytesSize - sizeof (blobDataSize), std::ios::beg );
131
+ stream.seekg (- std::streampos ( magicBytesSize) - sizeof (blobDataSize), std::ios::cur );
127
132
stream.read (reinterpret_cast <char *>(&blobDataSize), sizeof (blobDataSize));
128
- stream.seekg (currentStreamPos + blobDataSize, std::ios::beg );
133
+ stream.seekg (-stream. tellg () + currentStreamPos + blobDataSize, std::ios::cur );
129
134
130
135
uint32_t metaVersion;
131
136
stream.read (reinterpret_cast <char *>(&metaVersion), sizeof (metaVersion));
132
137
133
138
std::unique_ptr<MetadataBase> storedMeta;
134
139
try {
135
- storedMeta = create_metadata (metaVersion, currentStreamPos, blobDataSize);
136
- storedMeta->read (metadataStream);
137
- } catch (...) {
138
- logger.warning (" Imported blob metadata version: %d.%d, but the current version is: %d.%d" ,
139
- get_major (metaVersion),
140
- get_minor (metaVersion),
141
- get_major (CURRENT_METADATA_VERSION),
142
- get_minor (CURRENT_METADATA_VERSION));
143
- }
144
- stream.seekg (currentStreamPos, std::ios::beg);
145
- return storedMeta;
146
- }
147
-
148
- std::unique_ptr<MetadataBase> read_metadata_from (std::istream& stream, const std::shared_ptr<ov::AlignedBuffer>& modelBuffer) {
149
- Logger logger (" NPUPlugin" , Logger::global ().level ());
150
- if (modelBuffer == nullptr ) {
151
- return read_metadata_from (stream);
152
- }
153
- size_t magicBytesSize = MAGIC_BYTES.size ();
154
- std::string blobMagicBytes;
155
- blobMagicBytes.resize (magicBytesSize);
156
-
157
- size_t currentStreamPos = stream.tellg ();
158
- size_t streamSize = modelBuffer->size ();
159
-
160
- blobMagicBytes.assign (reinterpret_cast <const char *>(modelBuffer->get_ptr (streamSize - magicBytesSize)), magicBytesSize);
161
- if (MAGIC_BYTES != blobMagicBytes) {
162
- logger.error (" Blob is missing NPU metadata!" );
163
- return nullptr ;
164
- }
165
-
166
- uint64_t blobDataSize;
167
- blobDataSize = *reinterpret_cast <uint64_t *>(modelBuffer->get_ptr (streamSize - magicBytesSize - sizeof (blobDataSize)));
168
-
169
- uint32_t metaVersion;
170
- metaVersion = *reinterpret_cast <uint32_t *>(modelBuffer->get_ptr (currentStreamPos + blobDataSize));
171
-
172
- stream.seekg (blobDataSize + sizeof (metaVersion), std::ios::cur);
173
- try {
174
- auto storedMeta = create_metadata (metaVersion, currentStreamPos, blobDataSize);
140
+ storedMeta = create_metadata (metaVersion, blobDataSize);
175
141
storedMeta->read (stream);
176
142
} catch (...) {
177
143
logger.warning (" Imported blob metadata version: %d.%d, but the current version is: %d.%d" ,
@@ -182,6 +148,7 @@ std::unique_ptr<MetadataBase> read_metadata_from(std::istream& stream, const std
182
148
183
149
OPENVINO_THROW (" NPU metadata mismatch." );
184
150
}
151
+ stream.seekg (-stream.tellg () + currentStreamPos, std::ios::cur);
185
152
return storedMeta;
186
153
}
187
154
@@ -197,8 +164,4 @@ uint64_t Metadata<METADATA_VERSION_1_0>::get_blob_size() const {
197
164
return _blobDataSize;
198
165
}
199
166
200
- size_t Metadata<METADATA_VERSION_1_0>::get_ov_header_offset() const {
201
- return _ovHeaderOffset;
202
- }
203
-
204
167
} // namespace intel_npu
0 commit comments