|
rpm-build |
d2b433 |
/*
|
|
rpm-build |
d2b433 |
* libopenraw - orffile.cpp
|
|
rpm-build |
d2b433 |
*
|
|
rpm-build |
d2b433 |
* Copyright (C) 2006-2017 Hubert Figuière
|
|
rpm-build |
d2b433 |
*
|
|
rpm-build |
d2b433 |
* This library is free software: you can redistribute it and/or
|
|
rpm-build |
d2b433 |
* modify it under the terms of the GNU Lesser General Public License
|
|
rpm-build |
d2b433 |
* as published by the Free Software Foundation, either version 3 of
|
|
rpm-build |
d2b433 |
* the License, or (at your option) any later version.
|
|
rpm-build |
d2b433 |
*
|
|
rpm-build |
d2b433 |
* This library is distributed in the hope that it will be useful,
|
|
rpm-build |
d2b433 |
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
rpm-build |
d2b433 |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
rpm-build |
d2b433 |
* Lesser General Public License for more details.
|
|
rpm-build |
d2b433 |
*
|
|
rpm-build |
d2b433 |
* You should have received a copy of the GNU Lesser General Public
|
|
rpm-build |
d2b433 |
* License along with this library. If not, see
|
|
rpm-build |
d2b433 |
* <http://www.gnu.org/licenses/>.
|
|
rpm-build |
d2b433 |
*/
|
|
rpm-build |
d2b433 |
|
|
rpm-build |
d2b433 |
#include <algorithm>
|
|
rpm-build |
d2b433 |
#include <cstdint>
|
|
rpm-build |
d2b433 |
#include <memory>
|
|
rpm-build |
d2b433 |
|
|
rpm-build |
d2b433 |
#include <libopenraw/debug.h>
|
|
rpm-build |
d2b433 |
#include <libopenraw/cameraids.h>
|
|
rpm-build |
d2b433 |
#include <libopenraw/consts.h>
|
|
rpm-build |
d2b433 |
|
|
rpm-build |
d2b433 |
#include "cfapattern.hpp"
|
|
rpm-build |
d2b433 |
#include "rawdata.hpp"
|
|
rpm-build |
d2b433 |
#include "rawfile.hpp"
|
|
rpm-build |
d2b433 |
|
|
rpm-build |
d2b433 |
#include "ifdfilecontainer.hpp"
|
|
rpm-build |
d2b433 |
#include "makernotedir.hpp"
|
|
rpm-build |
d2b433 |
|
|
rpm-build |
d2b433 |
#include "trace.hpp"
|
|
rpm-build |
d2b433 |
#include "orffile.hpp"
|
|
rpm-build |
d2b433 |
#include "ifd.hpp"
|
|
rpm-build |
d2b433 |
#include "ifddir.hpp"
|
|
rpm-build |
d2b433 |
#include "ifdentry.hpp"
|
|
rpm-build |
d2b433 |
#include "orfcontainer.hpp"
|
|
rpm-build |
d2b433 |
#include "olympusdecompressor.hpp"
|
|
rpm-build |
d2b433 |
#include "rawfile_private.hpp"
|
|
rpm-build |
d2b433 |
#include "io/streamclone.hpp"
|
|
rpm-build |
d2b433 |
#include "jfifcontainer.hpp"
|
|
rpm-build |
d2b433 |
|
|
rpm-build |
d2b433 |
using namespace Debug;
|
|
rpm-build |
d2b433 |
|
|
rpm-build |
d2b433 |
namespace OpenRaw {
|
|
rpm-build |
d2b433 |
namespace Internals {
|
|
rpm-build |
d2b433 |
|
|
rpm-build |
d2b433 |
#define OR_MAKE_OLYMPUS_TYPEID(camid) \
|
|
rpm-build |
d2b433 |
OR_MAKE_FILE_TYPEID(OR_TYPEID_VENDOR_OLYMPUS,camid)
|
|
rpm-build |
d2b433 |
|
|
rpm-build |
d2b433 |
/* taken from dcraw, by default */
|
|
rpm-build |
d2b433 |
static const BuiltinColourMatrix s_matrices[] = {
|
|
rpm-build |
d2b433 |
{ OR_MAKE_OLYMPUS_TYPEID(OR_TYPEID_OLYMPUS_E1),
|
|
rpm-build |
d2b433 |
0,
|
|
rpm-build |
d2b433 |
0,
|
|
rpm-build |
d2b433 |
{ 11846,-4767,-945,-7027,15878,1089,-2699,4122,8311 } },
|
|
rpm-build |
d2b433 |
{ OR_MAKE_OLYMPUS_TYPEID(OR_TYPEID_OLYMPUS_E10),
|
|
rpm-build |
d2b433 |
0,
|
|
rpm-build |
d2b433 |
0xffc,
|
|
rpm-build |
d2b433 |
{ 12745,-4500,-1416,-6062,14542,1580,-1934,2256,6603 } },
|
|
rpm-build |
d2b433 |
{ OR_MAKE_OLYMPUS_TYPEID(OR_TYPEID_OLYMPUS_E3),
|
|
rpm-build |
d2b433 |
0,
|
|
rpm-build |
d2b433 |
0xf99,
|
|
rpm-build |
d2b433 |
{ 9487,-2875,-1115,-7533,15606,2010,-1618,2100,7389 } },
|
|
rpm-build |
d2b433 |
{ OR_MAKE_OLYMPUS_TYPEID(OR_TYPEID_OLYMPUS_E5),
|
|
rpm-build |
d2b433 |
0,
|
|
rpm-build |
d2b433 |
0,
|
|
rpm-build |
d2b433 |
{ 11200,-3783,-1325,-4576,12593,2206,-695,1742,7504 } },
|
|
rpm-build |
d2b433 |
{ OR_MAKE_OLYMPUS_TYPEID(OR_TYPEID_OLYMPUS_E300),
|
|
rpm-build |
d2b433 |
0,
|
|
rpm-build |
d2b433 |
0,
|
|
rpm-build |
d2b433 |
{ 7828,-1761,-348,-5788,14071,1830,-2853,4518,6557 } },
|
|
rpm-build |
d2b433 |
{ OR_MAKE_OLYMPUS_TYPEID(OR_TYPEID_OLYMPUS_E330),
|
|
rpm-build |
d2b433 |
0,
|
|
rpm-build |
d2b433 |
0,
|
|
rpm-build |
d2b433 |
{ 8961,-2473,-1084,-7979,15990,2067,-2319,3035,8249 } },
|
|
rpm-build |
d2b433 |
{ OR_MAKE_OLYMPUS_TYPEID(OR_TYPEID_OLYMPUS_E400),
|
|
rpm-build |
d2b433 |
0,
|
|
rpm-build |
d2b433 |
0,
|
|
rpm-build |
d2b433 |
{ 6169,-1483,-21,-7107,14761,2536,-2904,3580,8568 } },
|
|
rpm-build |
d2b433 |
{ OR_MAKE_OLYMPUS_TYPEID(OR_TYPEID_OLYMPUS_E410),
|
|
rpm-build |
d2b433 |
0,
|
|
rpm-build |
d2b433 |
0xf6a,
|
|
rpm-build |
d2b433 |
{ 8856,-2582,-1026,-7761,15766,2082,-2009,2575,7469 } },
|
|
rpm-build |
d2b433 |
{ OR_MAKE_OLYMPUS_TYPEID(OR_TYPEID_OLYMPUS_E500),
|
|
rpm-build |
d2b433 |
0,
|
|
rpm-build |
d2b433 |
0,
|
|
rpm-build |
d2b433 |
{ 8136,-1968,-299,-5481,13742,1871,-2556,4205,6630 } },
|
|
rpm-build |
d2b433 |
{ OR_MAKE_OLYMPUS_TYPEID(OR_TYPEID_OLYMPUS_E510),
|
|
rpm-build |
d2b433 |
0,
|
|
rpm-build |
d2b433 |
0xf6a,
|
|
rpm-build |
d2b433 |
{ 8785,-2529,-1033,-7639,15624,2112,-1783,2300,7817 } },
|
|
rpm-build |
d2b433 |
{ OR_MAKE_OLYMPUS_TYPEID(OR_TYPEID_OLYMPUS_E620),
|
|
rpm-build |
d2b433 |
0,
|
|
rpm-build |
d2b433 |
0xfaf,
|
|
rpm-build |
d2b433 |
{ 8453,-2198,-1092,-7609,15681,2008,-1725,2337,7824 } },
|
|
rpm-build |
d2b433 |
{ OR_MAKE_OLYMPUS_TYPEID(OR_TYPEID_OLYMPUS_SP350),
|
|
rpm-build |
d2b433 |
0,
|
|
rpm-build |
d2b433 |
0,
|
|
rpm-build |
d2b433 |
{ 12078,-4836,-1069,-6671,14306,2578,-786,939,7418 } },
|
|
rpm-build |
d2b433 |
{ OR_MAKE_OLYMPUS_TYPEID(OR_TYPEID_OLYMPUS_SP500),
|
|
rpm-build |
d2b433 |
0,
|
|
rpm-build |
d2b433 |
0xfff,
|
|
rpm-build |
d2b433 |
{ 9493,-3415,-666,-5211,12334,3260,-1548,2262,6482 } },
|
|
rpm-build |
d2b433 |
{ OR_MAKE_OLYMPUS_TYPEID(OR_TYPEID_OLYMPUS_SP510),
|
|
rpm-build |
d2b433 |
0,
|
|
rpm-build |
d2b433 |
0xffe,
|
|
rpm-build |
d2b433 |
{ 10593,-3607,-1010,-5881,13127,3084,-1200,1805,6721 } },
|
|
rpm-build |
d2b433 |
{ OR_MAKE_OLYMPUS_TYPEID(OR_TYPEID_OLYMPUS_SP550),
|
|
rpm-build |
d2b433 |
0,
|
|
rpm-build |
d2b433 |
0xffe,
|
|
rpm-build |
d2b433 |
{ 11597,-4006,-1049,-5432,12799,2957,-1029,1750,6516 } },
|
|
rpm-build |
d2b433 |
{ OR_MAKE_OLYMPUS_TYPEID(OR_TYPEID_OLYMPUS_EP1),
|
|
rpm-build |
d2b433 |
0,
|
|
rpm-build |
d2b433 |
0xffd,
|
|
rpm-build |
d2b433 |
{ 8343,-2050,-1021,-7715,15705,2103,-1831,2380,8235 } },
|
|
rpm-build |
d2b433 |
{ OR_MAKE_OLYMPUS_TYPEID(OR_TYPEID_OLYMPUS_EP2),
|
|
rpm-build |
d2b433 |
0,
|
|
rpm-build |
d2b433 |
0xffd,
|
|
rpm-build |
d2b433 |
{ 8343,-2050,-1021,-7715,15705,2103,-1831,2380,8235 } },
|
|
rpm-build |
d2b433 |
{ OR_MAKE_OLYMPUS_TYPEID(OR_TYPEID_OLYMPUS_EP3),
|
|
rpm-build |
d2b433 |
0,
|
|
rpm-build |
d2b433 |
0,
|
|
rpm-build |
d2b433 |
{ 7575,-2159,-571,-3722,11341,2725,-1434,2819,6271 } },
|
|
rpm-build |
d2b433 |
{ OR_MAKE_OLYMPUS_TYPEID(OR_TYPEID_OLYMPUS_EPL1),
|
|
rpm-build |
d2b433 |
0,
|
|
rpm-build |
d2b433 |
0,
|
|
rpm-build |
d2b433 |
{ 11408,-4289,-1215,-4286,12385,2118,-387,1467,7787 } },
|
|
rpm-build |
d2b433 |
{ OR_MAKE_OLYMPUS_TYPEID(OR_TYPEID_OLYMPUS_EPL2),
|
|
rpm-build |
d2b433 |
0,
|
|
rpm-build |
d2b433 |
0,
|
|
rpm-build |
d2b433 |
{ 15030,-5552,-1806,-3987,12387,1767,-592,1670,7023 } },
|
|
rpm-build |
d2b433 |
{ OR_MAKE_OLYMPUS_TYPEID(OR_TYPEID_OLYMPUS_EPL3),
|
|
rpm-build |
d2b433 |
0,
|
|
rpm-build |
d2b433 |
0,
|
|
rpm-build |
d2b433 |
{ 7575,-2159,-571,-3722,11341,2725,-1434,2819,6271 } },
|
|
rpm-build |
d2b433 |
{ OR_MAKE_OLYMPUS_TYPEID(OR_TYPEID_OLYMPUS_EPL5),
|
|
rpm-build |
d2b433 |
0,
|
|
rpm-build |
d2b433 |
0xfcb,
|
|
rpm-build |
d2b433 |
{ 8380,-2630,-639,-2887,10725,2496,-627,1427,5438 } },
|
|
rpm-build |
d2b433 |
{ OR_MAKE_OLYMPUS_TYPEID(OR_TYPEID_OLYMPUS_EPL6),
|
|
rpm-build |
d2b433 |
0,
|
|
rpm-build |
d2b433 |
0xfcb,
|
|
rpm-build |
d2b433 |
{ 8380,-2630,-639,-2887,10725,2496,-627,1427,5438 } },
|
|
rpm-build |
d2b433 |
{ OR_MAKE_OLYMPUS_TYPEID(OR_TYPEID_OLYMPUS_EPL7),
|
|
rpm-build |
d2b433 |
0,
|
|
rpm-build |
d2b433 |
0xfcb,
|
|
rpm-build |
d2b433 |
{ 9197,-3190,-659,-2606,10830,2039,-458,1250,5458 } },
|
|
rpm-build |
d2b433 |
{ OR_MAKE_OLYMPUS_TYPEID(OR_TYPEID_OLYMPUS_EPM1),
|
|
rpm-build |
d2b433 |
0,
|
|
rpm-build |
d2b433 |
0,
|
|
rpm-build |
d2b433 |
{ 7575,-2159,-571,-3722,11341,2725,-1434,2819,6271 } },
|
|
rpm-build |
d2b433 |
{ OR_MAKE_OLYMPUS_TYPEID(OR_TYPEID_OLYMPUS_EPM2),
|
|
rpm-build |
d2b433 |
0,
|
|
rpm-build |
d2b433 |
0,
|
|
rpm-build |
d2b433 |
{ 8380,-2630,-639,-2887,10725,2496,-627,1427,5438 } },
|
|
rpm-build |
d2b433 |
{ OR_MAKE_OLYMPUS_TYPEID(OR_TYPEID_OLYMPUS_XZ1),
|
|
rpm-build |
d2b433 |
0,
|
|
rpm-build |
d2b433 |
0,
|
|
rpm-build |
d2b433 |
{ 10901,-4095,-1074,-1141,9208,2293,-62,1417,5158 } },
|
|
rpm-build |
d2b433 |
{ OR_MAKE_OLYMPUS_TYPEID(OR_TYPEID_OLYMPUS_XZ10),
|
|
rpm-build |
d2b433 |
0,
|
|
rpm-build |
d2b433 |
0,
|
|
rpm-build |
d2b433 |
{ 9777, -3483, -925, -2886, 11297, 1800, -602, 1663, 5134 } },
|
|
rpm-build |
d2b433 |
{ OR_MAKE_OLYMPUS_TYPEID(OR_TYPEID_OLYMPUS_XZ2),
|
|
rpm-build |
d2b433 |
0,
|
|
rpm-build |
d2b433 |
0,
|
|
rpm-build |
d2b433 |
{ 9777,-3483,-925,-2886,11297,1800,-602,1663,5134 } },
|
|
rpm-build |
d2b433 |
{ OR_MAKE_OLYMPUS_TYPEID(OR_TYPEID_OLYMPUS_EM5),
|
|
rpm-build |
d2b433 |
0,
|
|
rpm-build |
d2b433 |
0xfe1,
|
|
rpm-build |
d2b433 |
{ 8380, -2630, -639, -2887, 725, 2496, -627, 1427, 5438 } },
|
|
rpm-build |
d2b433 |
{ OR_MAKE_OLYMPUS_TYPEID(OR_TYPEID_OLYMPUS_EM5II),
|
|
rpm-build |
d2b433 |
0,
|
|
rpm-build |
d2b433 |
0,
|
|
rpm-build |
d2b433 |
{ 9422, -3258, -711, -2655, 10898, 2015, -512, 1354, 5512 } },
|
|
rpm-build |
d2b433 |
{ OR_MAKE_OLYMPUS_TYPEID(OR_TYPEID_OLYMPUS_EM1),
|
|
rpm-build |
d2b433 |
0,
|
|
rpm-build |
d2b433 |
0,
|
|
rpm-build |
d2b433 |
{ 7687, -1984, -606, -4327, 11928, 2721, -1381, 2339, 6452 } },
|
|
rpm-build |
d2b433 |
{ OR_MAKE_OLYMPUS_TYPEID(OR_TYPEID_OLYMPUS_EM10),
|
|
rpm-build |
d2b433 |
0,
|
|
rpm-build |
d2b433 |
0,
|
|
rpm-build |
d2b433 |
{ 8380, -2630, -639, -2887, 10725, 2496, -627, 1427, 5438 } },
|
|
rpm-build |
d2b433 |
{ OR_MAKE_OLYMPUS_TYPEID(OR_TYPEID_OLYMPUS_EM10II), // Identical to MarkI
|
|
rpm-build |
d2b433 |
0,
|
|
rpm-build |
d2b433 |
0,
|
|
rpm-build |
d2b433 |
{ 8380, -2630, -639, -2887, 10725, 2496, -627, 1427, 5438 } },
|
|
rpm-build |
d2b433 |
{ OR_MAKE_OLYMPUS_TYPEID(OR_TYPEID_OLYMPUS_STYLUS1),
|
|
rpm-build |
d2b433 |
0,
|
|
rpm-build |
d2b433 |
0,
|
|
rpm-build |
d2b433 |
{ 8360, -2420, -880, -3928, 12353, 1739, -1381, 2416, 5173 } },
|
|
rpm-build |
d2b433 |
{ OR_MAKE_OLYMPUS_TYPEID(OR_TYPEID_OLYMPUS_PEN_F),
|
|
rpm-build |
d2b433 |
0,
|
|
rpm-build |
d2b433 |
0,
|
|
rpm-build |
d2b433 |
{ 9476, -3182, -765, -2613, 10958, 1893, -449, 1315, 5268 } },
|
|
rpm-build |
d2b433 |
{ OR_MAKE_OLYMPUS_TYPEID(OR_TYPEID_OLYMPUS_SH2),
|
|
rpm-build |
d2b433 |
0,
|
|
rpm-build |
d2b433 |
0,
|
|
rpm-build |
d2b433 |
{ 10156, -3425, -1077, -2611, 11177, 1624, -385, 1592, 5080 } },
|
|
rpm-build |
d2b433 |
{ OR_MAKE_OLYMPUS_TYPEID(OR_TYPEID_OLYMPUS_TG4),
|
|
rpm-build |
d2b433 |
0,
|
|
rpm-build |
d2b433 |
0,
|
|
rpm-build |
d2b433 |
{ 11426, -4159, -1126, -2066, 10678, 1593, -120, 1327, 4998 } },
|
|
rpm-build |
d2b433 |
|
|
rpm-build |
d2b433 |
{ 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0 } }
|
|
rpm-build |
d2b433 |
|
|
rpm-build |
d2b433 |
};
|
|
rpm-build |
d2b433 |
|
|
rpm-build |
d2b433 |
const struct IfdFile::camera_ids_t OrfFile::s_def[] = {
|
|
rpm-build |
d2b433 |
{ "E-1 ", OR_MAKE_OLYMPUS_TYPEID(OR_TYPEID_OLYMPUS_E1) },
|
|
rpm-build |
d2b433 |
{ "E-10 " , OR_MAKE_OLYMPUS_TYPEID(OR_TYPEID_OLYMPUS_E10) },
|
|
rpm-build |
d2b433 |
{ "E-3 ", OR_MAKE_OLYMPUS_TYPEID(OR_TYPEID_OLYMPUS_E3) },
|
|
rpm-build |
d2b433 |
{ "E-5 ", OR_MAKE_OLYMPUS_TYPEID(OR_TYPEID_OLYMPUS_E5) },
|
|
rpm-build |
d2b433 |
{ "E-300 ", OR_MAKE_OLYMPUS_TYPEID(OR_TYPEID_OLYMPUS_E300) },
|
|
rpm-build |
d2b433 |
{ "E-330 ", OR_MAKE_OLYMPUS_TYPEID(OR_TYPEID_OLYMPUS_E330) },
|
|
rpm-build |
d2b433 |
{ "E-400 ", OR_MAKE_OLYMPUS_TYPEID(OR_TYPEID_OLYMPUS_E400) },
|
|
rpm-build |
d2b433 |
{ "E-410 ", OR_MAKE_OLYMPUS_TYPEID(OR_TYPEID_OLYMPUS_E410) },
|
|
rpm-build |
d2b433 |
{ "E-500 ", OR_MAKE_OLYMPUS_TYPEID(OR_TYPEID_OLYMPUS_E500) },
|
|
rpm-build |
d2b433 |
{ "E-510 ", OR_MAKE_OLYMPUS_TYPEID(OR_TYPEID_OLYMPUS_E510) },
|
|
rpm-build |
d2b433 |
{ "E-620 ", OR_MAKE_OLYMPUS_TYPEID(OR_TYPEID_OLYMPUS_E620) },
|
|
rpm-build |
d2b433 |
{ "SP350" , OR_MAKE_OLYMPUS_TYPEID(OR_TYPEID_OLYMPUS_SP350) },
|
|
rpm-build |
d2b433 |
{ "SP500UZ" , OR_MAKE_OLYMPUS_TYPEID(OR_TYPEID_OLYMPUS_SP500) },
|
|
rpm-build |
d2b433 |
{ "SP510UZ" , OR_MAKE_OLYMPUS_TYPEID(OR_TYPEID_OLYMPUS_SP510) },
|
|
rpm-build |
d2b433 |
{ "SP550UZ ", OR_MAKE_OLYMPUS_TYPEID(OR_TYPEID_OLYMPUS_SP550) },
|
|
rpm-build |
d2b433 |
{ "E-P1 ", OR_MAKE_OLYMPUS_TYPEID(OR_TYPEID_OLYMPUS_EP1) },
|
|
rpm-build |
d2b433 |
{ "E-P2 ", OR_MAKE_OLYMPUS_TYPEID(OR_TYPEID_OLYMPUS_EP2) },
|
|
rpm-build |
d2b433 |
{ "E-P3 ", OR_MAKE_OLYMPUS_TYPEID(OR_TYPEID_OLYMPUS_EP3) },
|
|
rpm-build |
d2b433 |
{ "E-PL1 ", OR_MAKE_OLYMPUS_TYPEID(OR_TYPEID_OLYMPUS_EPL1) },
|
|
rpm-build |
d2b433 |
{ "E-PL2 ", OR_MAKE_OLYMPUS_TYPEID(OR_TYPEID_OLYMPUS_EPL2) },
|
|
rpm-build |
d2b433 |
{ "E-PL3 ", OR_MAKE_OLYMPUS_TYPEID(OR_TYPEID_OLYMPUS_EPL3) },
|
|
rpm-build |
d2b433 |
{ "E-PL5 ", OR_MAKE_OLYMPUS_TYPEID(OR_TYPEID_OLYMPUS_EPL5) },
|
|
rpm-build |
d2b433 |
{ "E-PL6 ", OR_MAKE_OLYMPUS_TYPEID(OR_TYPEID_OLYMPUS_EPL6) },
|
|
rpm-build |
d2b433 |
{ "E-PL7 ", OR_MAKE_OLYMPUS_TYPEID(OR_TYPEID_OLYMPUS_EPL7) },
|
|
rpm-build |
d2b433 |
{ "E-PL8 ", OR_MAKE_OLYMPUS_TYPEID(OR_TYPEID_OLYMPUS_EPL8) },
|
|
rpm-build |
d2b433 |
{ "E-PM1 ", OR_MAKE_OLYMPUS_TYPEID(OR_TYPEID_OLYMPUS_EPM1) },
|
|
rpm-build |
d2b433 |
{ "E-PM2 ", OR_MAKE_OLYMPUS_TYPEID(OR_TYPEID_OLYMPUS_EPM2) },
|
|
rpm-build |
d2b433 |
{ "XZ-1 ", OR_MAKE_OLYMPUS_TYPEID(OR_TYPEID_OLYMPUS_XZ1) },
|
|
rpm-build |
d2b433 |
{ "XZ-10 ", OR_MAKE_OLYMPUS_TYPEID(OR_TYPEID_OLYMPUS_XZ10) },
|
|
rpm-build |
d2b433 |
{ "XZ-2 ", OR_MAKE_OLYMPUS_TYPEID(OR_TYPEID_OLYMPUS_XZ2) },
|
|
rpm-build |
d2b433 |
{ "E-M5 ", OR_MAKE_OLYMPUS_TYPEID(OR_TYPEID_OLYMPUS_EM5) },
|
|
rpm-build |
d2b433 |
{ "E-M5MarkII ", OR_MAKE_OLYMPUS_TYPEID(OR_TYPEID_OLYMPUS_EM5II) },
|
|
rpm-build |
d2b433 |
{ "E-M1 ", OR_MAKE_OLYMPUS_TYPEID(OR_TYPEID_OLYMPUS_EM1) },
|
|
rpm-build |
d2b433 |
{ "E-M1MarkII ", OR_MAKE_OLYMPUS_TYPEID(OR_TYPEID_OLYMPUS_EM1II) },
|
|
rpm-build |
d2b433 |
{ "E-M10 ", OR_MAKE_OLYMPUS_TYPEID(OR_TYPEID_OLYMPUS_EM10) },
|
|
rpm-build |
d2b433 |
{ "E-M10MarkII ", OR_MAKE_OLYMPUS_TYPEID(OR_TYPEID_OLYMPUS_EM10II) },
|
|
rpm-build |
d2b433 |
{ "STYLUS1 ", OR_MAKE_OLYMPUS_TYPEID(OR_TYPEID_OLYMPUS_STYLUS1) },
|
|
rpm-build |
d2b433 |
{ "PEN-F ", OR_MAKE_OLYMPUS_TYPEID(OR_TYPEID_OLYMPUS_PEN_F) },
|
|
rpm-build |
d2b433 |
{ "SH-2 ", OR_MAKE_OLYMPUS_TYPEID(OR_TYPEID_OLYMPUS_SH2) },
|
|
rpm-build |
d2b433 |
{ "TG-4 ", OR_MAKE_OLYMPUS_TYPEID(OR_TYPEID_OLYMPUS_TG4) },
|
|
rpm-build |
d2b433 |
{ 0, 0 }
|
|
rpm-build |
d2b433 |
};
|
|
rpm-build |
d2b433 |
|
|
rpm-build |
d2b433 |
RawFile *OrfFile::factory(const IO::Stream::Ptr &s)
|
|
rpm-build |
d2b433 |
{
|
|
rpm-build |
d2b433 |
return new OrfFile(s);
|
|
rpm-build |
d2b433 |
}
|
|
rpm-build |
d2b433 |
|
|
rpm-build |
d2b433 |
OrfFile::OrfFile(const IO::Stream::Ptr &s)
|
|
rpm-build |
d2b433 |
: IfdFile(s, OR_RAWFILE_TYPE_ORF, false)
|
|
rpm-build |
d2b433 |
{
|
|
rpm-build |
d2b433 |
_setIdMap(s_def);
|
|
rpm-build |
d2b433 |
_setMatrices(s_matrices);
|
|
rpm-build |
d2b433 |
m_container = new OrfContainer(m_io, 0);
|
|
rpm-build |
d2b433 |
}
|
|
rpm-build |
d2b433 |
|
|
rpm-build |
d2b433 |
OrfFile::~OrfFile()
|
|
rpm-build |
d2b433 |
{
|
|
rpm-build |
d2b433 |
}
|
|
rpm-build |
d2b433 |
|
|
rpm-build |
d2b433 |
IfdDir::Ref OrfFile::_locateCfaIfd()
|
|
rpm-build |
d2b433 |
{
|
|
rpm-build |
d2b433 |
// in ORF the CFA IFD is the main IFD
|
|
rpm-build |
d2b433 |
return mainIfd();
|
|
rpm-build |
d2b433 |
}
|
|
rpm-build |
d2b433 |
|
|
rpm-build |
d2b433 |
|
|
rpm-build |
d2b433 |
IfdDir::Ref OrfFile::_locateMainIfd()
|
|
rpm-build |
d2b433 |
{
|
|
rpm-build |
d2b433 |
return m_container->setDirectory(0);
|
|
rpm-build |
d2b433 |
}
|
|
rpm-build |
d2b433 |
|
|
rpm-build |
d2b433 |
::or_error OrfFile::_enumThumbnailSizes(std::vector<uint32_t> &list)
|
|
rpm-build |
d2b433 |
{
|
|
rpm-build |
d2b433 |
auto err = OR_ERROR_NOT_FOUND;
|
|
rpm-build |
d2b433 |
|
|
rpm-build |
d2b433 |
err = IfdFile::_enumThumbnailSizes(list);
|
|
rpm-build |
d2b433 |
|
|
rpm-build |
d2b433 |
auto exif = exifIfd();
|
|
rpm-build |
d2b433 |
if (!exif) {
|
|
rpm-build |
d2b433 |
return err;
|
|
rpm-build |
d2b433 |
}
|
|
rpm-build |
d2b433 |
|
|
rpm-build |
d2b433 |
auto ifd = exif->getMakerNoteIfd();
|
|
rpm-build |
d2b433 |
if (!ifd) {
|
|
rpm-build |
d2b433 |
return err;
|
|
rpm-build |
d2b433 |
}
|
|
rpm-build |
d2b433 |
auto makerNote = std::dynamic_pointer_cast<MakerNoteDir>(ifd);
|
|
rpm-build |
d2b433 |
if (!makerNote) {
|
|
rpm-build |
d2b433 |
return err;
|
|
rpm-build |
d2b433 |
}
|
|
rpm-build |
d2b433 |
|
|
rpm-build |
d2b433 |
auto e = makerNote->getEntry(0x100);
|
|
rpm-build |
d2b433 |
if (e) {
|
|
rpm-build |
d2b433 |
auto val_offset = e->offset();
|
|
rpm-build |
d2b433 |
|
|
rpm-build |
d2b433 |
val_offset += makerNote->getMnoteOffset();
|
|
rpm-build |
d2b433 |
|
|
rpm-build |
d2b433 |
LOGDBG1("fetching JPEG\n");
|
|
rpm-build |
d2b433 |
IO::Stream::Ptr s(
|
|
rpm-build |
d2b433 |
std::make_shared<IO::StreamClone>(m_io, val_offset));
|
|
rpm-build |
d2b433 |
std::unique_ptr<JfifContainer> jfif(new JfifContainer(s, 0));
|
|
rpm-build |
d2b433 |
|
|
rpm-build |
d2b433 |
uint32_t x, y;
|
|
rpm-build |
d2b433 |
x = y = 0;
|
|
rpm-build |
d2b433 |
jfif->getDimensions(x, y);
|
|
rpm-build |
d2b433 |
LOGDBG1("JPEG dimensions x=%d y=%d\n", x, y);
|
|
rpm-build |
d2b433 |
|
|
rpm-build |
d2b433 |
uint32_t dim = std::max(x, y);
|
|
rpm-build |
d2b433 |
if (dim) {
|
|
rpm-build |
d2b433 |
_addThumbnail(dim, ThumbDesc(x, y, OR_DATA_TYPE_JPEG,
|
|
rpm-build |
d2b433 |
val_offset, e->count()));
|
|
rpm-build |
d2b433 |
list.push_back(dim);
|
|
rpm-build |
d2b433 |
err = OR_ERROR_NONE;
|
|
rpm-build |
d2b433 |
}
|
|
rpm-build |
d2b433 |
}
|
|
rpm-build |
d2b433 |
|
|
rpm-build |
d2b433 |
return err;
|
|
rpm-build |
d2b433 |
}
|
|
rpm-build |
d2b433 |
|
|
rpm-build |
d2b433 |
::or_error OrfFile::_getRawData(RawData & data, uint32_t options)
|
|
rpm-build |
d2b433 |
{
|
|
rpm-build |
d2b433 |
::or_error err;
|
|
rpm-build |
d2b433 |
const IfdDir::Ref & _cfaIfd = cfaIfd();
|
|
rpm-build |
d2b433 |
err = _getRawDataFromDir(data, _cfaIfd);
|
|
rpm-build |
d2b433 |
if(err == OR_ERROR_NONE) {
|
|
rpm-build |
d2b433 |
// ORF files seems to be marked as uncompressed even if they are.
|
|
rpm-build |
d2b433 |
uint32_t x = data.width();
|
|
rpm-build |
d2b433 |
uint32_t y = data.height();
|
|
rpm-build |
d2b433 |
uint32_t compression = 0;
|
|
rpm-build |
d2b433 |
if(data.size() < x * y * 2) {
|
|
rpm-build |
d2b433 |
compression = ORF_COMPRESSION;
|
|
rpm-build |
d2b433 |
data.setCompression(ORF_COMPRESSION);
|
|
rpm-build |
d2b433 |
data.setDataType(OR_DATA_TYPE_COMPRESSED_RAW);
|
|
rpm-build |
d2b433 |
}
|
|
rpm-build |
d2b433 |
else {
|
|
rpm-build |
d2b433 |
compression = data.compression();
|
|
rpm-build |
d2b433 |
}
|
|
rpm-build |
d2b433 |
switch(compression) {
|
|
rpm-build |
d2b433 |
case ORF_COMPRESSION:
|
|
rpm-build |
d2b433 |
if((options & OR_OPTIONS_DONT_DECOMPRESS) == 0) {
|
|
rpm-build |
d2b433 |
OlympusDecompressor decomp((const uint8_t*)data.data(),
|
|
rpm-build |
d2b433 |
data.size(), m_container, x, y);
|
|
rpm-build |
d2b433 |
RawDataPtr dData = decomp.decompress();
|
|
rpm-build |
d2b433 |
if (dData) {
|
|
rpm-build |
d2b433 |
dData->setCfaPatternType(data.cfaPattern()->patternType());
|
|
rpm-build |
d2b433 |
data.swap(*dData);
|
|
rpm-build |
d2b433 |
data.setDataType(OR_DATA_TYPE_RAW);
|
|
rpm-build |
d2b433 |
data.setDimensions(x, y);
|
|
rpm-build |
d2b433 |
}
|
|
rpm-build |
d2b433 |
}
|
|
rpm-build |
d2b433 |
break;
|
|
rpm-build |
d2b433 |
default:
|
|
rpm-build |
d2b433 |
break;
|
|
rpm-build |
d2b433 |
}
|
|
rpm-build |
d2b433 |
}
|
|
rpm-build |
d2b433 |
return err;
|
|
rpm-build |
d2b433 |
}
|
|
rpm-build |
d2b433 |
|
|
rpm-build |
d2b433 |
uint32_t OrfFile::_translateCompressionType(IFD::TiffCompress tiffCompression)
|
|
rpm-build |
d2b433 |
{
|
|
rpm-build |
d2b433 |
if(tiffCompression == IFD::COMPRESS_CUSTOM) {
|
|
rpm-build |
d2b433 |
return ORF_COMPRESSION;
|
|
rpm-build |
d2b433 |
}
|
|
rpm-build |
d2b433 |
return (uint32_t)tiffCompression;
|
|
rpm-build |
d2b433 |
}
|
|
rpm-build |
d2b433 |
|
|
rpm-build |
d2b433 |
}
|
|
rpm-build |
d2b433 |
}
|
|
rpm-build |
d2b433 |
/*
|
|
rpm-build |
d2b433 |
Local Variables:
|
|
rpm-build |
d2b433 |
mode:c++
|
|
rpm-build |
d2b433 |
c-file-style:"stroustrup"
|
|
rpm-build |
d2b433 |
c-file-offsets:((innamespace . 0))
|
|
rpm-build |
d2b433 |
indent-tabs-mode:nil
|
|
rpm-build |
d2b433 |
fill-column:80
|
|
rpm-build |
d2b433 |
End:
|
|
rpm-build |
d2b433 |
*/
|