878
877
if (meta.getExifTagLong("Exif.NikonLd3.LensIDNumber", val)) exif->fLensID.Set_ASCII((QString("%1").arg(val)).toAscii());
879
878
if (meta.getExifTagLong("Exif.NikonLd2.FocusDistance", val)) exif->fSubjectDistance = dng_urational((uint32)pow(10.0, val/40.0), 100);
880
879
if (meta.getExifTagLong("Exif.NikonLd3.FocusDistance", val)) exif->fSubjectDistance = dng_urational((uint32)pow(10.0, val/40.0), 100);
880
str = meta.getExifTagString("NikonLd1.LensIDNumber");
881
if (!str.isEmpty()) exif->fLensName.Set_ASCII(str.toAscii());
882
str = meta.getExifTagString("NikonLd2.LensIDNumber");
883
if (!str.isEmpty()) exif->fLensName.Set_ASCII(str.toAscii());
884
str = meta.getExifTagString("NikonLd3.LensIDNumber");
885
if (!str.isEmpty()) exif->fLensName.Set_ASCII(str.toAscii());
882
887
// Canon Markernotes
884
889
if (meta.getExifTagLong("Exif.Canon.SerialNumber", val)) exif->fCameraSerialNumber.Set_ASCII((QString("%1").arg(val)).toAscii());
885
if (meta.getExifTagLong("Exif.CanonCs.LensType", val)) exif->fLensID.Set_ASCII((QString("%1").arg(val)).toAscii());
886
if (meta.getExifTagLong("Exif.CanonCs.FlashActivity", val)) exif->fFlash = (uint32)val;
890
//if (meta.getExifTagLong("Exif.CanonCs.LensType", val)) exif->fLensID.Set_ASCII((QString("%1").arg(val)).toAscii());
891
//if (meta.getExifTagLong("Exif.CanonCs.FlashActivity", val)) exif->fFlash = (uint32)val;
887
892
//if (meta.getExifTagLong("Exif.CanonFi.FileNumber", val)) exif->fImageNumber = (uint32)val;
888
893
//if (meta.getExifTagLong("Exif.CanonCs.MaxAperture", val)) exif->fMaxApertureValue = dng_urational(val, 100000);
889
894
if (meta.getExifTagLong("Exif.CanonCs.ExposureProgram", val))
935
940
if (meta.getExifTagRational("Exif.CanonCs.Lens", num, den, 0)) exif->fLensInfo[1] = dng_urational(num, canonLensUnits);
936
941
if (meta.getExifTagRational("Exif.CanonCs.Lens", num, den, 1)) exif->fLensInfo[0] = dng_urational(num, canonLensUnits);
937
942
if (meta.getExifTagRational("Exif.Canon.FocalLength", num, den, 1)) exif->fFocalLength = dng_urational(num, canonLensUnits);
943
long canonLensType = 65535;
944
if (meta.getExifTagLong("Exif.CanonCs.LensType", canonLensType)) exif->fLensID.Set_ASCII((QString("%1").arg(canonLensType)).toAscii());
945
str = meta.getExifTagString("Exif.Canon.LensModel");
947
exif->fLensName.Set_ASCII(str.toAscii());
948
else if (canonLensType != 65535)
950
str = meta.getExifTagString("Exif.CanonCs.LensType");
951
if (!str.isEmpty()) exif->fLensName.Set_ASCII(str.toAscii());
953
else if ((exif->fLensInfo[0].n > 0) && (exif->fLensInfo[1].n > 0))
955
double focalLenght = (double)exif->fLensInfo[0].n / (double)exif->fLensInfo[0].d;
956
QString lensName = QString("%1").arg(focalLenght, 0, 'f', 1);
957
if (exif->fLensInfo[0].n != exif->fLensInfo[1].n)
959
focalLenght = (double)exif->fLensInfo[1].n / (double)exif->fLensInfo[1].d;
960
lensName.append(QString("-%1").arg(focalLenght, 0, 'f', 1));
962
lensName.append(" mm");
963
exif->fLensName.Set_ASCII(lensName.toAscii());
939
966
str = meta.getExifTagString("Exif.Canon.OwnerName");
940
967
if (!str.isEmpty()) exif->fOwnerName.Set_ASCII(str.toAscii());
972
999
AutoPtr<dng_memory_block> block(host.Allocate(mkrnts.size()));
973
1000
stream.SetReadPosition(0);
974
1001
stream.Get(block->Buffer(), mkrnts.size());
975
negative->SetMakerNote(block);
976
negative->SetMakerNoteSafety(true);
1003
if (identifyMake.make != "Canon")
1005
negative->SetMakerNote(block);
1006
negative->SetMakerNoteSafety(true);
1010
QString mknByteOrder = meta.getExifTagString("Exif.MakerNote.ByteOrder");
1012
if ((meta.getExifTagLong("Exif.MakerNote.Offset", mknOffset)) && !mknByteOrder.isEmpty())
1014
dng_memory_stream streamPriv(memalloc);
1015
QByteArray identPriv;
1017
identPriv.append(QString("Adobe").toAscii());
1018
identPriv.append((char)0x00);
1019
identPriv.append(QString("MakN").toAscii());
1021
// next four byte are makernote size
1022
int mknSize = mkrnts.size();
1023
int size = mknSize + 6;
1024
identPriv.append((char)((size >> 24) & 0xFF));
1025
identPriv.append((char)((size >> 16) & 0xFF));
1026
identPriv.append((char)((size >> 8 ) & 0xFF));
1027
identPriv.append((char)((size ) & 0xFF));
1029
kDebug() << mknSize << " " << mknOffset << " " << mknByteOrder;
1032
identPriv.append(mknByteOrder.toAscii());
1034
// next four byte are original offset
1035
identPriv.append((char)((mknOffset >> 24) & 0xFF));
1036
identPriv.append((char)((mknOffset >> 16) & 0xFF));
1037
identPriv.append((char)((mknOffset >> 8 ) & 0xFF));
1038
identPriv.append((char)((mknOffset ) & 0xFF));
1041
streamPriv.Put(identPriv, identPriv.size());
1042
streamPriv.Put(mkrnts.data(), mkrnts.size());
1043
AutoPtr<dng_memory_block> blockPriv(host.Allocate(identPriv.size() + mkrnts.size()));
1044
streamPriv.SetReadPosition(0);
1045
streamPriv.Get(blockPriv->Buffer(), identPriv.size() + mkrnts.size());
1046
negative->SetPrivateData(blockPriv);
1192
1263
return dng_error_none;
1195
bool DNGWriter::fujiRotate(QByteArray &rawData, KDcrawIface::DcrawInfoContainer &identify)
1266
bool DNGWriter::fujiRotate(QByteArray& rawData, KDcrawIface::DcrawInfoContainer& identify)
1197
1268
QByteArray tmpData(rawData);
1198
1269
int height = identify.outputSize.height();
1199
1270
int width = identify.outputSize.width();
1201
unsigned short *tmp = (unsigned short *)tmpData.data();
1202
unsigned short *output = (unsigned short *)rawData.data();
1272
unsigned short* tmp = (unsigned short*)tmpData.data();
1273
unsigned short* output = (unsigned short*)rawData.data();
1203
1275
for (int row=0; row < height; row++)
1205
1277
for (int col=0; col < width; col++)