@@ -144,48 +144,70 @@ void RafImage::printStructure(std::ostream& out, PrintStructureOption option, si
144
144
j_off << jpg_img_off;
145
145
j_len << jpg_img_len;
146
146
{
147
- out << Internal::indent (depth) << Internal::stringFormat (format, address, 4L ) << " JPEG Offset : " << j_off.str ()
147
+ out << Internal::indent (depth) << Internal::stringFormat (format, address, 4L ) << " JPEG offset : " << j_off.str ()
148
148
<< std::endl;
149
- out << Internal::indent (depth) << Internal::stringFormat (format, address2, 4L ) << " JPEG Length : " << j_len.str ()
149
+ out << Internal::indent (depth) << Internal::stringFormat (format, address2, 4L ) << " JPEG length : " << j_len.str ()
150
150
<< std::endl;
151
151
}
152
152
153
- address = io_->tell ();
154
- byte cfa_header_offset[4 ];
155
- io_->read (cfa_header_offset, 4 );
156
- byte cfa_header_length[4 ];
157
- address2 = io_->tell ();
158
- io_->read (cfa_header_length, 4 );
159
- long cfa_hdr_off = Exiv2::getULong (cfa_header_offset, bigEndian);
160
- long cfa_hdr_len = Exiv2::getULong (cfa_header_length, bigEndian);
161
- std::stringstream ch_off;
162
- std::stringstream ch_len;
163
- ch_off << cfa_hdr_off;
164
- ch_len << cfa_hdr_len;
165
- {
166
- out << Internal::indent (depth) << Internal::stringFormat (format, address, 4L ) << " CFA Offset : " << ch_off.str ()
167
- << std::endl;
168
- out << Internal::indent (depth) << Internal::stringFormat (format, address2, 4L ) << " CFA Length : " << ch_len.str ()
169
- << std::endl;
170
- }
171
-
172
- byte cfa_offset[4 ];
173
- address = io_->tell ();
174
- io_->read (cfa_offset, 4 );
175
- byte cfa_length[4 ];
176
- address2 = io_->tell ();
177
- io_->read (cfa_length, 4 );
178
- long cfa_off = Exiv2::getULong (cfa_offset, bigEndian);
179
- long cfa_len = Exiv2::getULong (cfa_length, bigEndian);
180
- std::stringstream c_off;
181
- std::stringstream c_len;
182
- c_off << cfa_off;
183
- c_len << cfa_len;
184
- {
185
- out << Internal::indent (depth) << Internal::stringFormat (format, address, 4L ) << " TIFF Offset : " << c_off.str ()
186
- << std::endl;
187
- out << Internal::indent (depth) << Internal::stringFormat (format, address2, 4L ) << " TIFF Length : " << c_len.str ()
188
- << std::endl;
153
+ long meta_off[2 ], meta_len[2 ];
154
+ long cfa_off[2 ], cfa_len[2 ], cfa_skip[2 ], cfa_size[2 ], cfa_stride[2 ];
155
+ for (size_t i = 0 ; i < 2 ; i++) {
156
+ address = io_->tell ();
157
+ byte data[4 ];
158
+ io_->read (data, 4 );
159
+ meta_off[i] = Exiv2::getULong (data, bigEndian);
160
+ address2 = io_->tell ();
161
+ io_->read (data, 4 );
162
+ meta_len[i] = Exiv2::getULong (data, bigEndian);
163
+ {
164
+ std::stringstream c_off;
165
+ std::stringstream c_len;
166
+ c_off << meta_off[i];
167
+ c_len << meta_len[i];
168
+ out << Internal::indent (depth) << Internal::stringFormat (format, address, 4L ) << " meta offset : " << c_off.str ()
169
+ << std::endl;
170
+ out << Internal::indent (depth) << Internal::stringFormat (format, address2, 4L )
171
+ << " meta length : " << c_len.str () << std::endl;
172
+ }
173
+
174
+ address = io_->tell ();
175
+ io_->read (data, 4 );
176
+ cfa_off[i] = Exiv2::getULong (data, bigEndian);
177
+ address2 = io_->tell ();
178
+ io_->read (data, 4 );
179
+ cfa_len[i] = Exiv2::getULong (data, bigEndian);
180
+ size_t address3 = io_->tell ();
181
+ io_->read (data, 4 );
182
+ cfa_skip[i] = Exiv2::getULong (data, bigEndian);
183
+ size_t address4 = io_->tell ();
184
+ io_->read (data, 4 );
185
+ cfa_size[i] = Exiv2::getULong (data, bigEndian);
186
+ size_t address5 = io_->tell ();
187
+ io_->read (data, 4 );
188
+ cfa_stride[i] = Exiv2::getULong (data, bigEndian);
189
+ {
190
+ std::stringstream c_off;
191
+ std::stringstream c_len;
192
+ std::stringstream c_skip;
193
+ std::stringstream c_size;
194
+ std::stringstream c_stride;
195
+ c_off << cfa_off[i];
196
+ c_len << cfa_len[i];
197
+ c_skip << cfa_skip[i];
198
+ c_size << cfa_size[i];
199
+ c_stride << cfa_stride[i];
200
+ out << Internal::indent (depth) << Internal::stringFormat (format, address, 4L ) << " CFA offset : " << c_off.str ()
201
+ << std::endl;
202
+ out << Internal::indent (depth) << Internal::stringFormat (format, address2, 4L )
203
+ << " CFA length : " << c_len.str () << std::endl;
204
+ out << Internal::indent (depth) << Internal::stringFormat (format, address3, 4L )
205
+ << " CFA skip : " << c_skip.str () << std::endl;
206
+ out << Internal::indent (depth) << Internal::stringFormat (format, address4, 4L )
207
+ << " CFA chunk : " << c_size.str () << std::endl;
208
+ out << Internal::indent (depth) << Internal::stringFormat (format, address5, 4L )
209
+ << " CFA stride : " << c_stride.str () << std::endl;
210
+ }
189
211
}
190
212
191
213
io_->seek (jpg_img_off, BasicIo::beg); // rewind
@@ -194,23 +216,43 @@ void RafImage::printStructure(std::ostream& out, PrintStructureOption option, si
194
216
io_->read (payload.data (), payload.size ());
195
217
{
196
218
out << Internal::indent (depth) << Internal::stringFormat (format, address, jpg_img_len) // , jpg_img_off)
197
- << " JPEG : " << Internal::binaryToString (makeSlice (payload, 0 , payload.size ())) << std::endl;
219
+ << " JPEG data : " << Internal::binaryToString (makeSlice (payload, 0 , payload.size ())) << std::endl;
198
220
}
199
221
200
- io_->seek (cfa_hdr_off , BasicIo::beg); // rewind
222
+ io_->seek (meta_off[ 0 ] , BasicIo::beg); // rewind
201
223
address = io_->tell ();
202
224
io_->read (payload.data (), payload.size ());
203
225
{
204
- out << Internal::indent (depth) << Internal::stringFormat (format, address, cfa_hdr_len ) // cfa_hdr_off
205
- << " CFA : " << Internal::binaryToString (makeSlice (payload, 0 , payload.size ())) << std::endl;
226
+ out << Internal::indent (depth) << Internal::stringFormat (format, address, meta_len[ 0 ] ) // cfa_hdr_off
227
+ << " meta data1 : " << Internal::binaryToString (makeSlice (payload, 0 , payload.size ())) << std::endl;
206
228
}
207
229
208
- io_->seek (cfa_off, BasicIo::beg); // rewind
230
+ if (meta_off[1 ] && meta_len[1 ]) {
231
+ io_->seek (meta_off[1 ], BasicIo::beg); // rewind
232
+ address = io_->tell ();
233
+ io_->read (payload.data (), payload.size ());
234
+ {
235
+ out << Internal::indent (depth) << Internal::stringFormat (format, address, meta_len[1 ]) // cfa_hdr_off
236
+ << " meta data2 : " << Internal::binaryToString (makeSlice (payload, 0 , payload.size ())) << std::endl;
237
+ }
238
+ }
239
+
240
+ io_->seek (cfa_off[0 ], BasicIo::beg); // rewind
209
241
address = io_->tell ();
210
242
io_->read (payload.data (), payload.size ());
211
243
{
212
- out << Internal::indent (depth) << Internal::stringFormat (format, address, cfa_len) // cfa_off
213
- << " TIFF : " << Internal::binaryToString (makeSlice (payload, 0 , payload.size ())) << std::endl;
244
+ out << Internal::indent (depth) << Internal::stringFormat (format, address, cfa_len[0 ]) // cfa_off
245
+ << " CFA data1 : " << Internal::binaryToString (makeSlice (payload, 0 , payload.size ())) << std::endl;
246
+ }
247
+
248
+ if (cfa_off[1 ] && cfa_len[1 ]) {
249
+ io_->seek (cfa_off[1 ], BasicIo::beg); // rewind
250
+ address = io_->tell ();
251
+ io_->read (payload.data (), payload.size ());
252
+ {
253
+ out << Internal::indent (depth) << Internal::stringFormat (format, address, cfa_len[1 ]) // cfa_off
254
+ << " CFA data2 : " << Internal::binaryToString (makeSlice (payload, 0 , payload.size ())) << std::endl;
255
+ }
214
256
}
215
257
}
216
258
} // RafImage::printStructure
0 commit comments