Skip to content

Commit 4b40697

Browse files
committed
Add Sony 9M3 ID
1 parent c351c7c commit 4b40697

File tree

2 files changed

+89
-46
lines changed

2 files changed

+89
-46
lines changed

src/rafimage.cpp

+87-45
Original file line numberDiff line numberDiff line change
@@ -144,48 +144,70 @@ void RafImage::printStructure(std::ostream& out, PrintStructureOption option, si
144144
j_off << jpg_img_off;
145145
j_len << jpg_img_len;
146146
{
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()
148148
<< 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()
150150
<< std::endl;
151151
}
152152

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+
}
189211
}
190212

191213
io_->seek(jpg_img_off, BasicIo::beg); // rewind
@@ -194,23 +216,43 @@ void RafImage::printStructure(std::ostream& out, PrintStructureOption option, si
194216
io_->read(payload.data(), payload.size());
195217
{
196218
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;
198220
}
199221

200-
io_->seek(cfa_hdr_off, BasicIo::beg); // rewind
222+
io_->seek(meta_off[0], BasicIo::beg); // rewind
201223
address = io_->tell();
202224
io_->read(payload.data(), payload.size());
203225
{
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;
206228
}
207229

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
209241
address = io_->tell();
210242
io_->read(payload.data(), payload.size());
211243
{
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+
}
214256
}
215257
}
216258
} // RafImage::printStructure

src/sonymn_int.cpp

+2-1
Original file line numberDiff line numberDiff line change
@@ -432,6 +432,7 @@ constexpr TagDetails sonyModelId[] = {{0, N_("Multiple camera models")},
432432
{389, "ZV-1F"},
433433
{390, "ILCE-7RM5"},
434434
{391, "ILME-FX30"},
435+
{392, "ILCE-9M3"},
435436
{393, "ZV-E1"},
436437
{394, "ILCE-6700"},
437438
{395, "ZV-1M2"},
@@ -464,7 +465,7 @@ constexpr StringTagDetails sonyFileFormat[] = {
464465
{"0 0 0 2", "JPEG"}, {"1 0 0 0", "SR2 1.0"}, {"2 0 0 0", "ARW 1.0"}, {"3 0 0 0", "ARW 2.0"},
465466
{"3 1 0 0", "ARW 2.1"}, {"3 2 0 0", "ARW 2.2"}, {"3 3 0 0", "ARW 2.3"}, {"3 3 1 0", "ARW 2.3.1"},
466467
{"3 3 2 0", "ARW 2.3.2"}, {"3 3 3 0", "ARW 2.3.3"}, {"3 3 5 0", "ARW 2.3.5"}, {"4 0 0 0", "ARW 4.0"},
467-
{"4 0 1 0", "ARW 4.0.1"}};
468+
{"4 0 1 0", "ARW 4.0.1"}, {"5 0 0 0", "ARW 5.0.0"}};
468469

469470
//! Lookup table to translate Sony dynamic range optimizer values to readable labels
470471
constexpr TagDetails print0xb025[] = {{0, N_("Off")},

0 commit comments

Comments
 (0)