From klauspost at gmail.com Tue Sep 1 16:57:09 2009 From: klauspost at gmail.com (Klaus Post) Date: Tue, 01 Sep 2009 16:57:09 +0200 Subject: [Rawstudio-commit] rawspeed r132 - / Message-ID: Author: post Date: 2009-09-01 16:57:08 +0200 (Tue, 01 Sep 2009) New Revision: 132 Modified: cameras.xml Log: Added support for Canon EOS 7D. Modified: cameras.xml =================================================================== --- cameras.xml 2009-08-31 17:26:45 UTC (rev 131) +++ cameras.xml 2009-09-01 14:57:08 UTC (rev 132) @@ -123,6 +123,16 @@ + + + GREEN + BLUE + RED + GREEN + + + + RED From klauspost at gmail.com Tue Sep 1 20:00:51 2009 From: klauspost at gmail.com (Klaus Post) Date: Tue, 01 Sep 2009 20:00:51 +0200 Subject: [Rawstudio-commit] r2630 - trunk/plugins/denoise Message-ID: Author: post Date: 2009-09-01 20:00:50 +0200 (Tue, 01 Sep 2009) New Revision: 2630 Modified: trunk/plugins/denoise/floatplanarimage.cpp Log: Denoiser: Fixed negative input in SSE2 converter and over/underflow in C-code equivalent. Modified: trunk/plugins/denoise/floatplanarimage.cpp =================================================================== --- trunk/plugins/denoise/floatplanarimage.cpp 2009-08-28 17:06:23 UTC (rev 2629) +++ trunk/plugins/denoise/floatplanarimage.cpp 2009-09-01 18:00:50 UTC (rev 2630) @@ -159,6 +159,10 @@ void FloatPlanarImage::unpackInterleavedYUV( const ImgConvertJob* j ) { RS_IMAGE16* image = j->rs; + + // We cannot allow red/blue to become negative, since we need to square root it for gamma correction + redCorrection = MAX(0.0f, redCorrection); + blueCorrection = MAX(0.0f, blueCorrection); #if defined (__x86_64__) if (image->pixelsize == 4) @@ -169,8 +173,8 @@ redCorrection = MIN( 4.0f, redCorrection); blueCorrection = MIN( 4.0f, blueCorrection); - gint redc = (gint)(16384 * redCorrection + 0.5); - gint bluec = (gint)(16384 * blueCorrection + 0.5); + gint redc = (gint)(8192 * redCorrection + 0.5); + gint bluec = (gint)(8192 * blueCorrection + 0.5); for (int y = j->start_y; y < j->end_y; y++ ) { const gushort* pix = GET_PIXEL(image,0,y); @@ -178,9 +182,9 @@ gfloat *Cb = p[1]->getAt(ox, y+oy); gfloat *Cr = p[2]->getAt(ox, y+oy); for (int x=0; xw; x++) { - float r = shortToFloat[((*pix)*redc)>>14]; + float r = shortToFloat[((*pix)*redc)>>13]; float g = shortToFloat[(*(pix+1))]; - float b = shortToFloat[((*(pix+2))*bluec)>>14]; + float b = shortToFloat[((*(pix+2))*bluec)>>13]; *Y++ = r * 0.299 + g * 0.587 + b * 0.114 ; *Cb++ = r * -0.169 + g * -0.331 + b * 0.499; *Cr++ = r * 0.499 + g * -0.418 + b * -0.0813; From klauspost at gmail.com Tue Sep 1 20:51:44 2009 From: klauspost at gmail.com (Klaus Post) Date: Tue, 01 Sep 2009 20:51:44 +0200 Subject: [Rawstudio-commit] rawspeed r133 - RawSpeed Message-ID: Author: post Date: 2009-09-01 20:51:43 +0200 (Tue, 01 Sep 2009) New Revision: 133 Modified: RawSpeed/ByteStream.cpp RawSpeed/Rw2Decoder.cpp RawSpeed/Rw2Decoder.h Log: Experimental Panasonic RW2 support. Modified: RawSpeed/ByteStream.cpp =================================================================== --- RawSpeed/ByteStream.cpp 2009-09-01 14:57:08 UTC (rev 132) +++ RawSpeed/ByteStream.cpp 2009-09-01 18:51:43 UTC (rev 133) @@ -42,7 +42,7 @@ void ByteStream::skipBytes( guint nbytes ) { off += nbytes; - if (off>=size) + if (off>size) throw IOException("Skipped out of buffer"); } Modified: RawSpeed/Rw2Decoder.cpp =================================================================== --- RawSpeed/Rw2Decoder.cpp 2009-09-01 14:57:08 UTC (rev 132) +++ RawSpeed/Rw2Decoder.cpp 2009-09-01 18:51:43 UTC (rev 133) @@ -24,18 +24,20 @@ */ Rw2Decoder::Rw2Decoder(TiffIFD *rootIFD, FileMap* file) : -RawDecoder(file), mRootIFD(rootIFD) +RawDecoder(file), mRootIFD(rootIFD), input(0),vbits(0) { } Rw2Decoder::~Rw2Decoder(void) { + if (input) + delete input; + input = 0; } RawImage Rw2Decoder::decodeRaw() { - ThrowRDE("RW2 Decoder: Not supported"); -/* + vector data = mRootIFD->getIFDsWithTag(PANASONIC_STRIPOFFSET); if (data.empty()) @@ -49,24 +51,89 @@ ThrowRDE("RW2 Decoder: Multiple Strips found: %u",offsets->count); } -// guint width = raw->getEntry()->getInt(); - guint height = raw->getEntry((TiffTag)3)->getInt(); - guint bitPerPixel = raw->getEntry(BITSPERSAMPLE)->getInt();*/ - return NULL; + guint height = raw->getEntry((TiffTag)3)->getShort(); + guint width = raw->getEntry((TiffTag)2)->getShort(); + + mRaw->dim = iPoint2D(width, height); + mRaw->bpp = 2; + mRaw->createData(); + + load_flags = 0x2008; + gint off = offsets->getInt(); + + input = new ByteStream(mFile->getData(off),mFile->getSize()-off); + try { + DecodeRw2(); + } catch (IOException e) { + errors.push_back(e.what()); // We attempt to ignore, since truncated files may be ok. + } + + return mRaw; } +void Rw2Decoder::DecodeRw2() +{ + int x, y, i, j, sh=0, pred[2], nonz[2]; + int w = mRaw->dim.x; + int h = mRaw->dim.y; + + pana_bits(0); + for (y=0; y < h; y++) { + gushort* dest = (gushort*)mRaw->getData(0,y); + for (x=0; x < w; x++) { + if ((i = x % 14) == 0) + pred[0] = pred[1] = nonz[0] = nonz[1] = 0; + if (i % 3 == 2) sh = 4 >> (3 - pana_bits(2)); + if (nonz[i & 1]) { + if ((j = pana_bits(8))) { + if ((pred[i & 1] -= 0x80 << sh) < 0 || sh == 4) + pred[i & 1] &= ~(-1 << sh); + pred[i & 1] += j << sh; + } + } else if ((nonz[i & 1] = pana_bits(8)) || i > 11) + pred[i & 1] = nonz[i & 1] << 4 | pana_bits(4); + dest[x] = pred[x&1]; + _ASSERTE(dest < 4098); + } + } +} + +unsigned Rw2Decoder::pana_bits (int nbits) +{ + int byte; + + if (!vbits) { + if (input->getRemainSize() < 0x4000-load_flags) { + memcpy (buf+load_flags, input->getData(), input->getRemainSize()); + input->skipBytes(input->getRemainSize()); + } else { + memcpy (buf+load_flags, input->getData(), 0x4000-load_flags); + input->skipBytes(0x4000-load_flags); + if (input->getRemainSize()getData(), input->getRemainSize()); + input->skipBytes(input->getRemainSize()); + } else { + memcpy (buf, input->getData(), load_flags); + input->skipBytes(load_flags); + } + } + } + vbits = (vbits - nbits) & 0x1ffff; + byte = vbits >> 3 ^ 0x3ff0; + return (buf[byte] | buf[byte+1] << 8) >> (vbits & 7) & ~(-1 << nbits); +} + void Rw2Decoder::checkSupport(CameraMetaData *meta) { - ThrowRDE("RW2 Decoder: Not supported"); -/* vector data = mRootIFD->getIFDsWithTag(MODEL); + vector data = mRootIFD->getIFDsWithTag(MODEL); if (data.empty()) - ThrowRDE("PEF Support check: Model name found"); + ThrowRDE("RW2 Support check: Model name found"); string make = data[0]->getEntry(MAKE)->getString(); string model = data[0]->getEntry(MODEL)->getString(); - this->checkCameraSupported(meta, make, model, "");*/ + this->checkCameraSupported(meta, make, model, ""); } void Rw2Decoder::decodeMetaData( CameraMetaData *meta ) { - + mRaw->cfa.setCFA(CFA_GREEN, CFA_RED, CFA_BLUE, CFA_GREEN2); } \ No newline at end of file Modified: RawSpeed/Rw2Decoder.h =================================================================== --- RawSpeed/Rw2Decoder.h 2009-09-01 14:57:08 UTC (rev 132) +++ RawSpeed/Rw2Decoder.h 2009-09-01 18:51:43 UTC (rev 133) @@ -35,4 +35,12 @@ virtual void decodeMetaData(CameraMetaData *meta); virtual void checkSupport(CameraMetaData *meta); TiffIFD *mRootIFD; +private: + unsigned pana_bits (int nbits); + void DecodeRw2(); + guint load_flags; + ByteStream* input; + guchar buf[0x4000]; + int vbits; + }; From klauspost at gmail.com Tue Sep 1 21:32:15 2009 From: klauspost at gmail.com (Klaus Post) Date: Tue, 01 Sep 2009 21:32:15 +0200 Subject: [Rawstudio-commit] rawspeed r134 - RawSpeed Message-ID: Author: post Date: 2009-09-01 21:32:15 +0200 (Tue, 01 Sep 2009) New Revision: 134 Modified: RawSpeed/Rw2Decoder.cpp RawSpeed/rawstudio-plugin.c Log: Fixed and enabled RW2 support Modified: RawSpeed/Rw2Decoder.cpp =================================================================== --- RawSpeed/Rw2Decoder.cpp 2009-09-01 18:51:43 UTC (rev 133) +++ RawSpeed/Rw2Decoder.cpp 2009-09-01 19:32:15 UTC (rev 134) @@ -1,7 +1,7 @@ #include "StdAfx.h" #include "Rw2Decoder.h" -/* +/* RawSpeed - RAW file decoder. Copyright (C) 2009 Klaus Post @@ -71,58 +71,57 @@ return mRaw; } -void Rw2Decoder::DecodeRw2() -{ - int x, y, i, j, sh=0, pred[2], nonz[2]; - int w = mRaw->dim.x; - int h = mRaw->dim.y; - - pana_bits(0); - for (y=0; y < h; y++) { - gushort* dest = (gushort*)mRaw->getData(0,y); - for (x=0; x < w; x++) { - if ((i = x % 14) == 0) - pred[0] = pred[1] = nonz[0] = nonz[1] = 0; - if (i % 3 == 2) sh = 4 >> (3 - pana_bits(2)); - if (nonz[i & 1]) { - if ((j = pana_bits(8))) { - if ((pred[i & 1] -= 0x80 << sh) < 0 || sh == 4) - pred[i & 1] &= ~(-1 << sh); - pred[i & 1] += j << sh; - } - } else if ((nonz[i & 1] = pana_bits(8)) || i > 11) - pred[i & 1] = nonz[i & 1] << 4 | pana_bits(4); - dest[x] = pred[x&1]; - _ASSERTE(dest < 4098); - } - } -} +void Rw2Decoder::DecodeRw2() +{ + int x, y, i, j, sh=0, pred[2], nonz[2]; + int w = mRaw->dim.x; + int h = mRaw->dim.y; -unsigned Rw2Decoder::pana_bits (int nbits) -{ - int byte; - - if (!vbits) { - if (input->getRemainSize() < 0x4000-load_flags) { - memcpy (buf+load_flags, input->getData(), input->getRemainSize()); - input->skipBytes(input->getRemainSize()); - } else { - memcpy (buf+load_flags, input->getData(), 0x4000-load_flags); - input->skipBytes(0x4000-load_flags); - if (input->getRemainSize()getData(), input->getRemainSize()); - input->skipBytes(input->getRemainSize()); - } else { - memcpy (buf, input->getData(), load_flags); - input->skipBytes(load_flags); - } - } - } - vbits = (vbits - nbits) & 0x1ffff; - byte = vbits >> 3 ^ 0x3ff0; - return (buf[byte] | buf[byte+1] << 8) >> (vbits & 7) & ~(-1 << nbits); -} + for (y=0; y < h; y++) { + gushort* dest = (gushort*)mRaw->getData(0,y); + for (x=0; x < w; x++) { + if ((i = x % 14) == 0) + pred[0] = pred[1] = nonz[0] = nonz[1] = 0; + if (i % 3 == 2) sh = 4 >> (3 - pana_bits(2)); + if (nonz[i & 1]) { + if ((j = pana_bits(8))) { + if ((pred[i & 1] -= 0x80 << sh) < 0 || sh == 4) + pred[i & 1] &= ~(-1 << sh); + pred[i & 1] += j << sh; + } + } else if ((nonz[i & 1] = pana_bits(8)) || i > 11) + pred[i & 1] = nonz[i & 1] << 4 | pana_bits(4); + dest[x] = pred[x&1]; + _ASSERTE(dest[x] < 4098); + } + } +} +unsigned Rw2Decoder::pana_bits (int nbits) +{ + int byte; + + if (!vbits) { + if (input->getRemainSize() < 0x4000-load_flags) { + memcpy (buf+load_flags, input->getData(), input->getRemainSize()); + input->skipBytes(input->getRemainSize()); + } else { + memcpy (buf+load_flags, input->getData(), 0x4000-load_flags); + input->skipBytes(0x4000-load_flags); + if (input->getRemainSize()getData(), input->getRemainSize()); + input->skipBytes(input->getRemainSize()); + } else { + memcpy (buf, input->getData(), load_flags); + input->skipBytes(load_flags); + } + } + } + vbits = (vbits - nbits) & 0x1ffff; + byte = vbits >> 3 ^ 0x3ff0; + return (buf[byte] | buf[byte+1] << 8) >> (vbits & 7) & ~(-1 << nbits); +} + void Rw2Decoder::checkSupport(CameraMetaData *meta) { vector data = mRootIFD->getIFDsWithTag(MODEL); if (data.empty()) @@ -135,5 +134,5 @@ void Rw2Decoder::decodeMetaData( CameraMetaData *meta ) { - mRaw->cfa.setCFA(CFA_GREEN, CFA_RED, CFA_BLUE, CFA_GREEN2); + mRaw->cfa.setCFA(CFA_BLUE, CFA_GREEN, CFA_GREEN2, CFA_RED); } \ No newline at end of file Modified: RawSpeed/rawstudio-plugin.c =================================================================== --- RawSpeed/rawstudio-plugin.c 2009-09-01 18:51:43 UTC (rev 133) +++ RawSpeed/rawstudio-plugin.c 2009-09-01 19:32:15 UTC (rev 134) @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006-2009 Anders Brander and + * Copyright (C) 2006-2009 Anders Brander and * Anders Kvist * * This program is free software; you can redistribute it and/or @@ -29,4 +29,5 @@ rs_filetype_register_loader(".nef", "Nikon NEF", load_rawspeed, 5); rs_filetype_register_loader(".orf", "Olympus", load_rawspeed, 5); rs_filetype_register_loader(".pef", "Pentax raw", load_rawspeed, 5); + rs_filetype_register_loader(".rw2", "Panasonic raw", load_rawspeed, 5); } From klauspost at gmail.com Tue Sep 1 21:42:59 2009 From: klauspost at gmail.com (Klaus Post) Date: Tue, 01 Sep 2009 21:42:59 +0200 Subject: [Rawstudio-commit] rawspeed r135 - / RawSpeed Message-ID: Author: post Date: 2009-09-01 21:42:59 +0200 (Tue, 01 Sep 2009) New Revision: 135 Modified: Doxyfile RawSpeed.kdevelop RawSpeed.kdevelop.filelist RawSpeed/LJpegPlain.cpp RawSpeed/Rw2Decoder.cpp RawSpeed/Rw2Decoder.h Log: Cosmetics, project updates. Modified: Doxyfile =================================================================== --- Doxyfile 2009-09-01 19:32:15 UTC (rev 134) +++ Doxyfile 2009-09-01 19:42:59 UTC (rev 135) @@ -94,7 +94,7 @@ #--------------------------------------------------------------------------- # configuration options related to the input files #--------------------------------------------------------------------------- -INPUT = /home/klaus/dev/rawspeed +INPUT = /home/klaus/dev/rawspeed/RawSpeed/ INPUT_ENCODING = UTF-8 FILE_PATTERNS = *.c \ *.cc \ @@ -153,7 +153,7 @@ *.moc \ *.xpm \ *.dox -RECURSIVE = yes +RECURSIVE = YES EXCLUDE = EXCLUDE_SYMLINKS = NO EXCLUDE_PATTERNS = @@ -171,15 +171,15 @@ SOURCE_BROWSER = NO INLINE_SOURCES = NO STRIP_CODE_COMMENTS = YES -REFERENCED_BY_RELATION = NO -REFERENCES_RELATION = NO +REFERENCED_BY_RELATION = YES +REFERENCES_RELATION = YES REFERENCES_LINK_SOURCE = YES USE_HTAGS = NO VERBATIM_HEADERS = YES #--------------------------------------------------------------------------- # configuration options related to the alphabetical class index #--------------------------------------------------------------------------- -ALPHABETICAL_INDEX = NO +ALPHABETICAL_INDEX = YES COLS_IN_ALPHA_INDEX = 5 IGNORE_PREFIX = #--------------------------------------------------------------------------- @@ -245,7 +245,7 @@ #--------------------------------------------------------------------------- # configuration options related to the XML output #--------------------------------------------------------------------------- -GENERATE_XML = yes +GENERATE_XML = YES XML_OUTPUT = xml XML_SCHEMA = XML_DTD = Modified: RawSpeed/LJpegPlain.cpp =================================================================== --- RawSpeed/LJpegPlain.cpp 2009-09-01 19:32:15 UTC (rev 134) +++ RawSpeed/LJpegPlain.cpp 2009-09-01 19:42:59 UTC (rev 135) @@ -281,9 +281,6 @@ HuffmanTable *dctbl3 = &huff[frame.compInfo[2].dcTblNo]; gushort *predict; // Prediction pointer - /* Fast access to supersampling component settings - * this is the number of components in a given block. - */ mRaw->subsampling.x = 2; mRaw->subsampling.y = 2; @@ -411,9 +408,6 @@ mRaw->subsampling.y = 1; gushort *predict; // Prediction pointer - /* Fast access to supersampling component settings - * this is the number of components in a given block. - */ guchar *draw = mRaw->getData(); @@ -431,7 +425,7 @@ for (guint i = 0 ; i < slicesW.size(); i++) slice_width[i] = slicesW[i]/2; - for (slice = 0; slice< slices; slice++) { + for (slice = 0; slice < slices; slice++) { offset[slice] = ((t_x+offX)*mRaw->bpp+((offY+t_y)*mRaw->pitch)) | (t_s<<28); _ASSERTE((offset[slice]&0x0fffffff)pitch*mRaw->dim.y); t_y ++; @@ -465,7 +459,7 @@ dest[1] = p2 = (1<<(frame.prec-Pt-1)) + HuffDecode(dctbl2); dest[2] = p3 = (1<<(frame.prec-Pt-1)) + HuffDecode(dctbl3); - // Skip next + // Skip to next dest+=COMPS*2; x = 2; @@ -505,7 +499,6 @@ p2 = predict[1]; p3 = predict[2]; predict = dest; - x = 0; } } Modified: RawSpeed/Rw2Decoder.cpp =================================================================== --- RawSpeed/Rw2Decoder.cpp 2009-09-01 19:32:15 UTC (rev 134) +++ RawSpeed/Rw2Decoder.cpp 2009-09-01 19:42:59 UTC (rev 135) @@ -65,7 +65,8 @@ try { DecodeRw2(); } catch (IOException e) { - errors.push_back(e.what()); // We attempt to ignore, since truncated files may be ok. + // We attempt to ignore, since truncated files may be ok. + errors.push_back(e.what()); } return mRaw; @@ -97,7 +98,7 @@ } } -unsigned Rw2Decoder::pana_bits (int nbits) +guint Rw2Decoder::pana_bits (int nbits) { int byte; Modified: RawSpeed/Rw2Decoder.h =================================================================== --- RawSpeed/Rw2Decoder.h 2009-09-01 19:32:15 UTC (rev 134) +++ RawSpeed/Rw2Decoder.h 2009-09-01 19:42:59 UTC (rev 135) @@ -3,7 +3,7 @@ #include "TiffIFD.h" #include "BitPumpPlain.h" #include "TiffParser.h" -/* +/* RawSpeed - RAW file decoder. Copyright (C) 2009 Klaus Post @@ -36,7 +36,7 @@ virtual void checkSupport(CameraMetaData *meta); TiffIFD *mRootIFD; private: - unsigned pana_bits (int nbits); + guint pana_bits (int nbits); void DecodeRw2(); guint load_flags; ByteStream* input; Modified: RawSpeed.kdevelop =================================================================== --- RawSpeed.kdevelop 2009-09-01 19:32:15 UTC (rev 134) +++ RawSpeed.kdevelop 2009-09-01 19:42:59 UTC (rev 135) @@ -10,16 +10,16 @@ RawSpeed . false - - + + kdevsubversion executable /usr/local/bin/rawstudio - - + + /home/klaus/dev/rawspeed/RawSpeed false true @@ -43,6 +43,7 @@ *.cxx Makefile CMakeLists.txt + *.xml include @@ -130,16 +131,346 @@ include/SoftWire/Synthesizer.hpp latex latex/Makefile + xml + xml/ArwDecoder_8cpp.xml + xml/ArwDecoder_8h.xml + xml/Assembler_8cpp.xml + xml/Assembler_8hpp.xml + xml/BitPumpJPEG_8cpp.xml + xml/BitPumpJPEG_8h.xml + xml/BitPumpMSB_8cpp.xml + xml/BitPumpMSB_8h.xml + xml/BitPumpPlain_8cpp.xml + xml/BitPumpPlain_8h.xml + xml/BlackArea_8cpp.xml + xml/BlackArea_8h.xml + xml/ByteStream_8cpp.xml + xml/ByteStream_8h.xml + xml/c14n_8h.xml + xml/Camera_8cpp.xml + xml/Camera_8h.xml + xml/CameraMetaData_8cpp.xml + xml/CameraMetaData_8h.xml + xml/CameraMetadataException_8cpp.xml + xml/CameraMetadataException_8h.xml + xml/catalog_8h.xml + xml/chvalid_8h.xml + xml/classArwDecoder.xml + xml/classBitPumpJPEG.xml + xml/classBitPumpMSB.xml + xml/classBitPumpPlain.xml + xml/classBlackArea.xml + xml/classByteStream.xml + xml/classCameraMetadataException.xml + xml/classCameraMetaData.xml + xml/classCamera.xml + xml/classColorFilterArray.xml + xml/classCr2Decoder.xml + xml/classCr2Slice.xml + xml/classDngDecoderSlices.xml + xml/classDngDecoderThread.xml + xml/classDngDecoder.xml + xml/classDngSliceElement.xml + xml/classDngStrip.xml + xml/classFileIOException.xml + xml/classFileMap.xml + xml/classFileReader.xml + xml/classIdentifier.xml + xml/classIOException.xml + xml/classiPoint2D.xml + xml/classLJpegDecompressor.xml + xml/classLJpegPlain.xml + xml/classNefDecoder.xml + xml/classNefSlice.xml + xml/classNikonDecompressor.xml + xml/classOrfDecoder.xml + xml/classPefDecoder.xml + xml/classPentaxDecompressor.xml + xml/classPlanarPlane.xml + xml/classPlanarRawImage.xml + xml/classRawDecoderException.xml + xml/classRawDecoder.xml + xml/classRawImageData.xml + xml/classRawImage.xml + xml/classRgbImage.xml + xml/classRw2Decoder.xml + xml/classSOFInfo.xml + xml/classSoftWire_1_1Assembler.xml + xml/classSoftWire_1_1CodeGenerator_1_1Byte.xml + xml/classSoftWire_1_1CodeGenerator_1_1Char.xml + xml/classSoftWire_1_1CodeGenerator_1_1Dword2.xml + xml/classSoftWire_1_1CodeGenerator_1_1Dword.xml + xml/classSoftWire_1_1CodeGenerator_1_1Float4.xml + xml/classSoftWire_1_1CodeGenerator_1_1Float.xml + xml/classSoftWire_1_1CodeGenerator_1_1Int.xml + xml/classSoftWire_1_1CodeGenerator_1_1Qword.xml + xml/classSoftWire_1_1CodeGenerator_1_1Short.xml + xml/classSoftWire_1_1CodeGenerator_1_1Variable.xml + xml/classSoftWire_1_1CodeGenerator_1_1Word4.xml + xml/classSoftWire_1_1CodeGenerator_1_1Word.xml + xml/classSoftWire_1_1CodeGenerator_1_1Xword.xml + xml/classSoftWire_1_1CodeGenerator.xml + xml/classSoftWire_1_1Emulator.xml + xml/classSoftWire_1_1Encoding.xml + xml/classSoftWire_1_1Error.xml + xml/classSoftWire_1_1InstructionSet.xml + xml/classSoftWire_1_1Instruction.xml + xml/classSoftWire_1_1Linker.xml + xml/classSoftWire_1_1Link.xml + xml/classSoftWire_1_1Loader.xml + xml/classSoftWire_1_1Optimizer.xml + xml/classSoftWire_1_1RegisterAllocator.xml + xml/classSoftWire_1_1Synthesizer.xml + xml/classTiffEntryBE.xml + xml/classTiffEntry.xml + xml/classTiffIFDBE.xml + xml/classTiffIFD.xml + xml/classTiffParserException.xml + xml/classTiffParserHeaderless.xml + xml/classTiffParserOlympus.xml + xml/classTiffParser.xml + xml/CodeGenerator_8cpp.xml + xml/CodeGenerator_8hpp.xml + xml/ColorFilterArray_8cpp.xml + xml/ColorFilterArray_8h.xml + xml/Common_8cpp.xml + xml/Common_8h.xml + xml/Cr2Decoder_8cpp.xml + xml/Cr2Decoder_8h.xml + xml/debugXML_8h.xml + xml/dict_8h.xml + xml/dir_08916322408a45aa4812eb53038fcb78.xml + xml/dir_1bd0ffffd37c12ed9dfd79a217e42c50.xml + xml/dir_31172815b8a4391b44bcb1fd0e0474c0.xml + xml/dir_92cd05b66e0d15c94d62d07cc60032ec.xml + xml/dir_e37e6fcbfe609470ac76f1f6b9075487.xml + xml/dir_f72ad65de714616c0fc0345b732e3728.xml + xml/DngDecoder_8cpp.xml + xml/DngDecoder_8h.xml + xml/DngDecoderSlices_8cpp.xml + xml/DngDecoderSlices_8h.xml + xml/DOCBparser_8h.xml + xml/Emulator_8cpp.xml + xml/Emulator_8hpp.xml + xml/Encoding_8cpp.xml + xml/Encoding_8hpp.xml + xml/encoding_8h.xml + xml/entities_8h.xml + xml/Error_8cpp.xml + xml/Error_8hpp.xml + xml/FileIOException_8cpp.xml + xml/FileIOException_8h.xml + xml/FileMap_8cpp.xml + xml/FileMap_8h.xml + xml/FileReader_8cpp.xml + xml/FileReader_8h.xml + xml/globals_8h.xml + xml/hash_8h.xml + xml/HTMLparser_8h.xml + xml/HTMLtree_8h.xml + xml/iconv_8h.xml + xml/index.xml + xml/Instruction_8cpp.xml + xml/Instruction_8hpp.xml + xml/InstructionSet_8cpp.xml + xml/InstructionSet_8hpp.xml + xml/Intrinsics_8hpp.xml + xml/Link_8hpp.xml + xml/Linker_8cpp.xml + xml/Linker_8hpp.xml + xml/list_8h.xml + xml/LJpegDecompressor_8cpp.xml + xml/LJpegDecompressor_8h.xml + xml/LJpegPlain_8cpp.xml + xml/LJpegPlain_8h.xml + xml/Loader_8cpp.xml + xml/Loader_8hpp.xml + xml/namespaceSoftWire.xml + xml/namespacestd.xml + xml/nanoftp_8h.xml + xml/nanohttp_8h.xml + xml/NefDecoder_8cpp.xml + xml/NefDecoder_8h.xml + xml/NikonDecompressor_8cpp.xml + xml/NikonDecompressor_8h.xml + xml/Operand_8cpp.xml + xml/Operand_8hpp.xml + xml/Optimizer_8cpp.xml + xml/Optimizer_8hpp.xml + xml/OrfDecoder_8cpp.xml + xml/OrfDecoder_8h.xml + xml/parser_8h.xml + xml/parserInternals_8h.xml + xml/pattern_8h.xml + xml/PefDecoder_8cpp.xml + xml/PefDecoder_8h.xml + xml/PentaxDecompressor_8cpp.xml + xml/PentaxDecompressor_8h.xml + xml/PlanarRawImage_8cpp.xml + xml/PlanarRawImage_8h.xml + xml/Point_8h.xml + xml/pthread_8h.xml + xml/RawDecoder_8cpp.xml + xml/RawDecoder_8h.xml + xml/RawDecoderException_8cpp.xml + xml/RawDecoderException_8h.xml + xml/RawImage_8cpp.xml + xml/RawImage_8h.xml + xml/RawSpeed_8cpp.xml + xml/rawstudio-plugin_8c.xml + xml/rawstudio-plugin-api_8cpp.xml + xml/rawstudio-plugin-api_8h.xml + xml/RegisterAllocator_8cpp.xml + xml/RegisterAllocator_8hpp.xml + xml/relaxng_8h.xml + xml/RgbImage_8cpp.xml + xml/RgbImage_8h.xml + xml/Rw2Decoder_8cpp.xml + xml/Rw2Decoder_8h.xml + xml/SAX2_8h.xml + xml/SAX_8h.xml + xml/sched_8h.xml + xml/schemasInternals_8h.xml + xml/schematron_8h.xml + xml/StdAfx_8cpp.xml + xml/StdAfx_8h.xml + xml/String_8hpp.xml + xml/structHuffmanTable.xml + xml/structJpegComponentInfo.xml + xml/structpthread__once__t__.xml + xml/structptw32__cleanup__t.xml + xml/structptw32__handle__t.xml + xml/structsched__param.xml + xml/structSoftWire_1_1Instruction_1_1Syntax.xml + xml/structSoftWire_1_1InstructionSet_1_1Entry.xml + xml/structSoftWire_1_1Linker_1_1Identifier.xml + xml/structSoftWire_1_1Operand_1_1Register.xml + xml/structSoftWire_1_1OperandAL.xml + xml/structSoftWire_1_1OperandAX.xml + xml/structSoftWire_1_1OperandCL.xml + xml/structSoftWire_1_1OperandCX.xml + xml/structSoftWire_1_1OperandDX.xml + xml/structSoftWire_1_1OperandEAX.xml + xml/structSoftWire_1_1OperandECX.xml + xml/structSoftWire_1_1OperandFPUREG.xml + xml/structSoftWire_1_1OperandIMM.xml + xml/structSoftWire_1_1OperandMEM128.xml + xml/structSoftWire_1_1OperandMEM16.xml + xml/structSoftWire_1_1OperandMEM32.xml + xml/structSoftWire_1_1OperandMEM64.xml + xml/structSoftWire_1_1OperandMEM8.xml + xml/structSoftWire_1_1OperandMEM.xml + xml/structSoftWire_1_1OperandMM64.xml + xml/structSoftWire_1_1OperandMMREG.xml + xml/structSoftWire_1_1OperandRAX.xml + xml/structSoftWire_1_1OperandREF.xml + xml/structSoftWire_1_1OperandREG16.xml + xml/structSoftWire_1_1OperandREG32.xml + xml/structSoftWire_1_1OperandREG64.xml + xml/structSoftWire_1_1OperandREG8.xml + xml/structSoftWire_1_1OperandREG.xml + xml/structSoftWire_1_1OperandREGxX.xml + xml/structSoftWire_1_1OperandR__M128.xml + xml/structSoftWire_1_1OperandR__M16.xml + xml/structSoftWire_1_1OperandR__M32.xml + xml/structSoftWire_1_1OperandR__M64.xml + xml/structSoftWire_1_1OperandR__M8.xml + xml/structSoftWire_1_1OperandST0.xml + xml/structSoftWire_1_1OperandVOID.xml + xml/structSoftWire_1_1Operand.xml + xml/structSoftWire_1_1OperandXMM32.xml + xml/structSoftWire_1_1OperandXMM64.xml + xml/structSoftWire_1_1OperandXMMREG.xml + xml/structSoftWire_1_1RegisterAllocator_1_1AllocationData.xml + xml/structSoftWire_1_1RegisterAllocator_1_1Allocation.xml + xml/structSoftWire_1_1RegisterAllocator_1_1State.xml + xml/structSoftWire_1_1Specifier.xml + xml/structtimespec.xml + xml/struct__xmlAttribute.xml + xml/struct__xmlAttr.xml + xml/struct__xmlBuffer.xml + xml/struct__xmlCharEncodingHandler.xml + xml/struct__xmlChLRange.xml + xml/struct__xmlChRangeGroup.xml + xml/struct__xmlChSRange.xml + xml/struct__xmlDoc.xml + xml/struct__xmlDOMWrapCtxt.xml + xml/struct__xmlDtd.xml + xml/struct__xmlElementContent.xml + xml/struct__xmlElement.xml + xml/struct__xmlEntity.xml + xml/struct__xmlEnumeration.xml + xml/struct__xmlError.xml + xml/struct__xmlGlobalState.xml + xml/struct__xmlID.xml + xml/struct__xmlNode.xml + xml/struct__xmlNotation.xml + xml/struct__xmlNs.xml + xml/struct__xmlParserCtxt.xml + xml/struct__xmlParserInputBuffer.xml + xml/struct__xmlParserInput.xml + xml/struct__xmlParserNodeInfoSeq.xml + xml/struct__xmlParserNodeInfo.xml + xml/struct__xmlRef.xml + xml/struct__xmlSAXHandlerV1.xml + xml/struct__xmlSAXHandler.xml + xml/struct__xmlSAXLocator.xml + xml/struct__xmlURI.xml + xml/struct__xmlValidCtxt.xml + xml/Synthesizer_8cpp.xml + xml/Synthesizer_8hpp.xml + xml/threads_8h.xml + xml/TiffEntry_8cpp.xml + xml/TiffEntry_8h.xml + xml/TiffEntryBE_8cpp.xml + xml/TiffEntryBE_8h.xml + xml/TiffIFD_8cpp.xml + xml/TiffIFD_8h.xml + xml/TiffIFDBE_8cpp.xml + xml/TiffIFDBE_8h.xml + xml/TiffParser_8cpp.xml + xml/TiffParser_8h.xml + xml/TiffParserException_8cpp.xml + xml/TiffParserException_8h.xml + xml/TiffParserHeaderless_8cpp.xml + xml/TiffParserHeaderless_8h.xml + xml/TiffParserOlympus_8cpp.xml + xml/TiffParserOlympus_8h.xml + xml/TiffTag_8h.xml + xml/tree_8h.xml + xml/uri_8h.xml + xml/valid_8h.xml + xml/xinclude_8h.xml + xml/xlink_8h.xml + xml/xmlautomata_8h.xml + xml/xmlerror_8h.xml + xml/xmlexports_8h.xml + xml/xmlIO_8h.xml + xml/xmlmemory_8h.xml + xml/xmlmodule_8h.xml + xml/xmlreader_8h.xml + xml/xmlregexp_8h.xml + xml/xmlsave_8h.xml + xml/xmlschemas_8h.xml + xml/xmlschemastypes_8h.xml + xml/xmlstring_8h.xml + xml/xmlunicode_8h.xml + xml/xmlversion_8h.xml + xml/xmlwin32version_8h.xml + xml/xmlwriter_8h.xml + xml/xpath_8h.xml + xml/xpathInternals_8h.xml + xml/xpointer_8h.xml make - + /home/klaus/dev/rawspeed/RawSpeed 0 - - - + + + default @@ -150,8 +481,8 @@ 4 0 false - - + + -f rawstudio-plugin.makefile default @@ -161,20 +492,20 @@ - - - - - + + + + + true - false + true false false false true - 10 + 16 @@ -257,8 +588,8 @@ std=_GLIBCXX_STD;__gnu_cxx=std true true - false - false + true + true false true true @@ -266,7 +597,7 @@ .; - + set m_,_ theValue @@ -307,7 +638,7 @@ false - *.o,*.lo,CVS + *.o,*.lo,CVS,*.*~ false false Modified: RawSpeed.kdevelop.filelist =================================================================== --- RawSpeed.kdevelop.filelist 2009-09-01 19:32:15 UTC (rev 134) +++ RawSpeed.kdevelop.filelist 2009-09-01 19:42:59 UTC (rev 135) @@ -84,3 +84,4 @@ RawSpeed/rawstudio-plugin-api.cpp RawSpeed/rawstudio-plugin-api.h RawSpeed/rawstudio-plugin.c +cameras.xml From klauspost at gmail.com Tue Sep 1 21:44:06 2009 From: klauspost at gmail.com (Klaus Post) Date: Tue, 01 Sep 2009 21:44:06 +0200 Subject: [Rawstudio-commit] rawspeed r136 - / Message-ID: Author: post Date: 2009-09-01 21:44:06 +0200 (Tue, 01 Sep 2009) New Revision: 136 Modified: / Log: Ignoring documentation folders Property changes on: ___________________________________________________________________ Name: svn:ignore - debug RawSpeed.ncb RawSpeed.suo release testimg dcraw(4).c _cfa-patterns.txt cameras.dtd dcraw(5).c RawSpeed.kdevelop.pcs RawSpeed.kdevses + debug RawSpeed.ncb RawSpeed.suo release testimg dcraw(4).c _cfa-patterns.txt cameras.dtd dcraw(5).c RawSpeed.kdevelop.pcs RawSpeed.kdevses RawSpeed.tag html latex xml From klauspost at gmail.com Tue Sep 1 22:25:48 2009 From: klauspost at gmail.com (Klaus Post) Date: Tue, 01 Sep 2009 22:25:48 +0200 Subject: [Rawstudio-commit] rawspeed r137 - / Message-ID: Author: post Date: 2009-09-01 22:25:48 +0200 (Tue, 01 Sep 2009) New Revision: 137 Modified: cameras.xml Log: Added Panasonic DMC-FX150 and DMC-FZ28. Modified: cameras.xml =================================================================== --- cameras.xml 2009-09-01 19:44:06 UTC (rev 136) +++ cameras.xml 2009-09-01 20:25:48 UTC (rev 137) @@ -683,6 +683,22 @@ + + + BLUEGREEN + GREENRED + + + + + + + BLUEGREEN + GREENRED + + + + RED From klauspost at gmail.com Tue Sep 1 23:14:03 2009 From: klauspost at gmail.com (Klaus Post) Date: Tue, 01 Sep 2009 23:14:03 +0200 Subject: [Rawstudio-commit] rawspeed r138 - / RawSpeed Message-ID: Author: post Date: 2009-09-01 23:14:03 +0200 (Tue, 01 Sep 2009) New Revision: 138 Modified: RawSpeed.kdevelop RawSpeed/Rw2Decoder.cpp cameras.xml Log: Added support for Panasonic FX150, FZ28, FZ38, G1, LX3. Modified: RawSpeed/Rw2Decoder.cpp =================================================================== --- RawSpeed/Rw2Decoder.cpp 2009-09-01 20:25:48 UTC (rev 137) +++ RawSpeed/Rw2Decoder.cpp 2009-09-01 21:14:03 UTC (rev 138) @@ -136,4 +136,18 @@ void Rw2Decoder::decodeMetaData( CameraMetaData *meta ) { mRaw->cfa.setCFA(CFA_BLUE, CFA_GREEN, CFA_GREEN2, CFA_RED); + vector data = mRootIFD->getIFDsWithTag(MODEL); + + if (data.empty()) + ThrowRDE("CR2 Meta Decoder: Model name not found"); + + string make = data[0]->getEntry(MAKE)->getString(); + string model = data[0]->getEntry(MODEL)->getString(); + string mode = ""; + + if (!model.compare("DMC-LX3") && (mRaw->dim.x > 4000)) + mode ="wide"; + + setMetaData(meta, make, model, mode); + } \ No newline at end of file Modified: RawSpeed.kdevelop =================================================================== --- RawSpeed.kdevelop 2009-09-01 20:25:48 UTC (rev 137) +++ RawSpeed.kdevelop 2009-09-01 21:14:03 UTC (rev 138) @@ -10,16 +10,16 @@ RawSpeed . false - - + + kdevsubversion executable /usr/local/bin/rawstudio - - + + /home/klaus/dev/rawspeed/RawSpeed false true @@ -468,9 +468,9 @@ 0 - - - + + + default @@ -481,8 +481,8 @@ 4 0 false - - + + -f rawstudio-plugin.makefile default @@ -492,11 +492,11 @@ - - - - - + + + + + true true false @@ -588,8 +588,8 @@ std=_GLIBCXX_STD;__gnu_cxx=std true true - true - true + false + false false true true @@ -597,7 +597,7 @@ .; - + set m_,_ theValue Modified: cameras.xml =================================================================== --- cameras.xml 2009-09-01 20:25:48 UTC (rev 137) +++ cameras.xml 2009-09-01 21:14:03 UTC (rev 138) @@ -473,7 +473,7 @@ - + GREEN UNKNOWN @@ -698,7 +698,39 @@ - + + + + GREENBLUE + REDGREEN + + + + + + + BLUEGREEN + GREENRED + + + + + + + BLUEGREEN + GREENRED + + + + + + + BLUEGREEN + GREENRED + + + + RED From klauspost at gmail.com Wed Sep 2 09:15:38 2009 From: klauspost at gmail.com (Klaus Post) Date: Wed, 02 Sep 2009 09:15:38 +0200 Subject: [Rawstudio-commit] rawspeed r139 - / Message-ID: Author: post Date: 2009-09-02 09:15:38 +0200 (Wed, 02 Sep 2009) New Revision: 139 Modified: showcameras.xsl Log: - XML shows known camera count in title. Modified: showcameras.xsl =================================================================== --- showcameras.xsl 2009-09-01 21:14:03 UTC (rev 138) +++ showcameras.xsl 2009-09-02 07:15:38 UTC (rev 139) @@ -27,7 +27,7 @@ -

Known RawSpeed Cameras

+

The Known RawSpeed Cameras:

From klauspost at gmail.com Wed Sep 2 16:57:26 2009 From: klauspost at gmail.com (Klaus Post) Date: Wed, 02 Sep 2009 16:57:26 +0200 Subject: [Rawstudio-commit] rawspeed r140 - RawSpeed Message-ID: Author: post Date: 2009-09-02 16:57:26 +0200 (Wed, 02 Sep 2009) New Revision: 140 Modified: RawSpeed/RawDecoder.cpp Log: Allow negative values in crop size to be used as relative crop values. Modified: RawSpeed/RawDecoder.cpp =================================================================== --- RawSpeed/RawDecoder.cpp 2009-09-02 07:15:38 UTC (rev 139) +++ RawSpeed/RawDecoder.cpp 2009-09-02 14:57:26 UTC (rev 140) @@ -107,13 +107,13 @@ } } - void RawDecoder::checkCameraSupported(CameraMetaData *meta, string make, string model, string mode) { +void RawDecoder::checkCameraSupported(CameraMetaData *meta, string make, string model, string mode) { TrimSpaces(make); TrimSpaces(model); Camera* cam = meta->getCamera(make, model, mode); if (!cam) { if (mode.length() == 0) - printf("Unable to find camera in database: %s %s %s\n", make.c_str(), model.c_str(), mode.c_str()); + printf("Unable to find camera in database: %s %s %s\nPlease upload file to ftp.rawstudio.org, thanks!\n", make.c_str(), model.c_str(), mode.c_str()); return; // Assume true. } @@ -131,8 +131,20 @@ printf("Unable to find camera in database: %s %s %s\n", make.c_str(), model.c_str(), mode.c_str()); return; } - mRaw->subFrame(cam->cropPos, cam->cropSize); + + iPoint2D new_size = cam->cropSize; + + // If crop size is negative, use relative cropping + if (new_size.x <= 0) + new_size.x = mRaw->dim.x - cam->cropPos.x + new_size.x; + + if (new_size.y <= 0) + new_size.y = mRaw->dim.y - cam->cropPos.y + new_size.y; + + mRaw->subFrame(cam->cropPos, new_size); mRaw->cfa = cam->cfa; + + // Shift CFA to match crop if (cam->cropPos.x & 1) mRaw->cfa.shiftLeft(); if (cam->cropPos.y & 1) @@ -141,6 +153,7 @@ mRaw->blackLevel = cam->black; mRaw->whitePoint = cam->white; } + void RawDecoder::TrimSpaces( string& str) { // Trim Both leading and trailing spaces From klauspost at gmail.com Wed Sep 2 17:59:33 2009 From: klauspost at gmail.com (Klaus Post) Date: Wed, 02 Sep 2009 17:59:33 +0200 Subject: [Rawstudio-commit] rawspeed r141 - / RawSpeed Message-ID: Author: post Date: 2009-09-02 17:59:33 +0200 (Wed, 02 Sep 2009) New Revision: 141 Modified: RawSpeed/CameraMetaData.cpp RawSpeed/RawImage.h RawSpeed/Rw2Decoder.cpp RawSpeed/Rw2Decoder.h cameras.xml Log: - Added support for different aspect ratios on Panasonic cameras. - Added support for Panasonic GH1. Modified: RawSpeed/CameraMetaData.cpp =================================================================== --- RawSpeed/CameraMetaData.cpp 2009-09-02 14:57:26 UTC (rev 140) +++ RawSpeed/CameraMetaData.cpp 2009-09-02 15:59:33 UTC (rev 141) @@ -58,6 +58,12 @@ } cur = cur->next; } + if (doc) + xmlFreeDoc(doc); + doc = 0; + if (ctxt) + xmlFreeParserCtxt(ctxt); + ctxt = 0; } CameraMetaData::~CameraMetaData(void) { Modified: RawSpeed/RawImage.h =================================================================== --- RawSpeed/RawImage.h 2009-09-02 14:57:26 UTC (rev 140) +++ RawSpeed/RawImage.h 2009-09-02 15:59:33 UTC (rev 141) @@ -48,6 +48,7 @@ int whitePoint; vector blackAreas; iPoint2D subsampling; + gboolean isAllocated() {return !!data;} protected: RawImageData(void); RawImageData(iPoint2D dim, guint bpp, guint cpp=1); Modified: RawSpeed/Rw2Decoder.cpp =================================================================== --- RawSpeed/Rw2Decoder.cpp 2009-09-02 14:57:26 UTC (rev 140) +++ RawSpeed/Rw2Decoder.cpp 2009-09-02 15:59:33 UTC (rev 141) @@ -93,7 +93,6 @@ } else if ((nonz[i & 1] = pana_bits(8)) || i > 11) pred[i & 1] = nonz[i & 1] << 4 | pana_bits(4); dest[x] = pred[x&1]; - _ASSERTE(dest[x] < 4098); } } } @@ -143,11 +142,41 @@ string make = data[0]->getEntry(MAKE)->getString(); string model = data[0]->getEntry(MODEL)->getString(); - string mode = ""; + string mode = getMode(model); - if (!model.compare("DMC-LX3") && (mRaw->dim.x > 4000)) - mode ="wide"; + printf("Mode: %s\n",mode.c_str()); setMetaData(meta, make, model, mode); +} -} \ No newline at end of file +bool Rw2Decoder::almostEqualRelative(float A, float B, float maxRelativeError) +{ + if (A == B) + return true; + + float relativeError = fabs((A - B) / B); + if (relativeError <= maxRelativeError) + return true; + return false; +} + +std::string Rw2Decoder::getMode( const string model ) +{ + float ratio = 3.0f / 2.0f; // Default + if (mRaw->isAllocated()) { + ratio = (float)mRaw->dim.x / (float)mRaw->dim.y; + } + + if (!model.compare("DMC-LX3") || !model.compare("DMC-G1") || !model.compare("DMC-GH1") || !model.compare("DMC-GF1")) { + if (almostEqualRelative(ratio,16.0f/9.0f,0.02f)) + return "16:9"; + if (almostEqualRelative(ratio,3.0f/2.0f,0.02f)) + return "3:2"; + if (almostEqualRelative(ratio,4.0f/3.0f,0.02f)) + return "4:3"; + if (almostEqualRelative(ratio,1.0f,0.02f)) + return "1:1"; + } + + return ""; +} Modified: RawSpeed/Rw2Decoder.h =================================================================== --- RawSpeed/Rw2Decoder.h 2009-09-02 14:57:26 UTC (rev 140) +++ RawSpeed/Rw2Decoder.h 2009-09-02 15:59:33 UTC (rev 141) @@ -37,7 +37,9 @@ TiffIFD *mRootIFD; private: guint pana_bits (int nbits); + string getMode(const string model); void DecodeRw2(); + bool almostEqualRelative(float A, float B, float maxRelativeError); guint load_flags; ByteStream* input; guchar buf[0x4000]; Modified: cameras.xml =================================================================== --- cameras.xml 2009-09-02 14:57:26 UTC (rev 140) +++ cameras.xml 2009-09-02 15:59:33 UTC (rev 141) @@ -699,14 +699,30 @@ - + GREENBLUE REDGREEN - + + + + GREENBLUE + REDGREEN + + + + + + + GREENBLUE + REDGREEN + + + + BLUEGREEN @@ -715,7 +731,7 @@ - + BLUEGREEN GREENRED @@ -723,7 +739,7 @@ - + BLUEGREEN GREENRED From klauspost at gmail.com Sat Sep 5 14:31:57 2009 From: klauspost at gmail.com (Klaus Post) Date: Sat, 05 Sep 2009 14:31:57 +0200 Subject: [Rawstudio-commit] rawspeed r142 - RawSpeed Message-ID: Author: post Date: 2009-09-05 14:31:57 +0200 (Sat, 05 Sep 2009) New Revision: 142 Modified: RawSpeed/RawDecoder.cpp RawSpeed/Rw2Decoder.cpp Log: - RW2 reader optimized (40->55 MP/s) - Print help information when camera with mode cannot be found. Modified: RawSpeed/RawDecoder.cpp =================================================================== --- RawSpeed/RawDecoder.cpp 2009-09-02 15:59:33 UTC (rev 141) +++ RawSpeed/RawDecoder.cpp 2009-09-05 12:31:57 UTC (rev 142) @@ -113,7 +113,7 @@ Camera* cam = meta->getCamera(make, model, mode); if (!cam) { if (mode.length() == 0) - printf("Unable to find camera in database: %s %s %s\nPlease upload file to ftp.rawstudio.org, thanks!\n", make.c_str(), model.c_str(), mode.c_str()); + printf("Unable to find camera in database: %s %s %s\n", make.c_str(), model.c_str(), mode.c_str()); return; // Assume true. } @@ -128,7 +128,7 @@ TrimSpaces(model); Camera *cam = meta->getCamera(make, model, mode); if (!cam) { - printf("Unable to find camera in database: %s %s %s\n", make.c_str(), model.c_str(), mode.c_str()); + printf("Unable to find camera in database: %s %s %s\nPlease upload file to ftp.rawstudio.org, thanks!\n", make.c_str(), model.c_str(), mode.c_str()); return; } Modified: RawSpeed/Rw2Decoder.cpp =================================================================== --- RawSpeed/Rw2Decoder.cpp 2009-09-02 15:59:33 UTC (rev 141) +++ RawSpeed/Rw2Decoder.cpp 2009-09-05 12:31:57 UTC (rev 142) @@ -80,10 +80,12 @@ for (y=0; y < h; y++) { gushort* dest = (gushort*)mRaw->getData(0,y); + i = 0; for (x=0; x < w; x++) { - if ((i = x % 14) == 0) + if (i == 0) pred[0] = pred[1] = nonz[0] = nonz[1] = 0; - if (i % 3 == 2) sh = 4 >> (3 - pana_bits(2)); + else if (i % 3 == 2) + sh = 4 >> (3 - pana_bits(2)); if (nonz[i & 1]) { if ((j = pana_bits(8))) { if ((pred[i & 1] -= 0x80 << sh) < 0 || sh == 4) @@ -93,6 +95,9 @@ } else if ((nonz[i & 1] = pana_bits(8)) || i > 11) pred[i & 1] = nonz[i & 1] << 4 | pana_bits(4); dest[x] = pred[x&1]; + i++; + if (i == 14) + i = 0; } } } From klauspost at gmail.com Sat Sep 5 16:40:23 2009 From: klauspost at gmail.com (Klaus Post) Date: Sat, 05 Sep 2009 16:40:23 +0200 Subject: [Rawstudio-commit] rawspeed r143 - RawSpeed Message-ID: Author: post Date: 2009-09-05 16:40:23 +0200 (Sat, 05 Sep 2009) New Revision: 143 Modified: RawSpeed/Rw2Decoder.cpp Log: Unrolled RW2 decode loop, speed up from 55MP/s to 65MP/s. Removed debug mode print. Modified: RawSpeed/Rw2Decoder.cpp =================================================================== --- RawSpeed/Rw2Decoder.cpp 2009-09-05 12:31:57 UTC (rev 142) +++ RawSpeed/Rw2Decoder.cpp 2009-09-05 14:40:23 UTC (rev 143) @@ -82,20 +82,36 @@ gushort* dest = (gushort*)mRaw->getData(0,y); i = 0; for (x=0; x < w; x++) { + // Even pixels if (i == 0) pred[0] = pred[1] = nonz[0] = nonz[1] = 0; else if (i % 3 == 2) sh = 4 >> (3 - pana_bits(2)); - if (nonz[i & 1]) { + if (nonz[0]) { if ((j = pana_bits(8))) { - if ((pred[i & 1] -= 0x80 << sh) < 0 || sh == 4) - pred[i & 1] &= ~(-1 << sh); - pred[i & 1] += j << sh; + if ((pred[0] -= 0x80 << sh) < 0 || sh == 4) + pred[0] &= ~(-1 << sh); + pred[0] += j << sh; } - } else if ((nonz[i & 1] = pana_bits(8)) || i > 11) - pred[i & 1] = nonz[i & 1] << 4 | pana_bits(4); - dest[x] = pred[x&1]; + } else if ((nonz[0] = pana_bits(8)) || i > 11) + pred[0] = nonz[0] << 4 | pana_bits(4); + dest[x] = pred[0]; + + // Odd pixels i++; + x++; + if (i % 3 == 2) + sh = 4 >> (3 - pana_bits(2)); + if (nonz[1]) { + if ((j = pana_bits(8))) { + if ((pred[1] -= 0x80 << sh) < 0 || sh == 4) + pred[1] &= ~(-1 << sh); + pred[1] += j << sh; + } + } else if ((nonz[1] = pana_bits(8)) || i > 11) + pred[1] = nonz[1] << 4 | pana_bits(4); + dest[x] = pred[1]; + i++; if (i == 14) i = 0; } @@ -149,8 +165,6 @@ string model = data[0]->getEntry(MODEL)->getString(); string mode = getMode(model); - printf("Mode: %s\n",mode.c_str()); - setMetaData(meta, make, model, mode); } From klauspost at gmail.com Sun Sep 6 11:51:42 2009 From: klauspost at gmail.com (Klaus Post) Date: Sun, 06 Sep 2009 11:51:42 +0200 Subject: [Rawstudio-commit] rawspeed r144 - RawSpeed Message-ID: Author: post Date: 2009-09-06 11:51:42 +0200 (Sun, 06 Sep 2009) New Revision: 144 Modified: RawSpeed/Rw2Decoder.cpp Log: RW2Decoder: Made inner loop a proper loop for readability and to avoid compiler warning. Modified: RawSpeed/Rw2Decoder.cpp =================================================================== --- RawSpeed/Rw2Decoder.cpp 2009-09-05 14:40:23 UTC (rev 143) +++ RawSpeed/Rw2Decoder.cpp 2009-09-06 09:51:42 UTC (rev 144) @@ -75,45 +75,41 @@ void Rw2Decoder::DecodeRw2() { int x, y, i, j, sh=0, pred[2], nonz[2]; - int w = mRaw->dim.x; + int w = mRaw->dim.x/14; int h = mRaw->dim.y; for (y=0; y < h; y++) { gushort* dest = (gushort*)mRaw->getData(0,y); - i = 0; for (x=0; x < w; x++) { - // Even pixels - if (i == 0) - pred[0] = pred[1] = nonz[0] = nonz[1] = 0; - else if (i % 3 == 2) - sh = 4 >> (3 - pana_bits(2)); - if (nonz[0]) { - if ((j = pana_bits(8))) { - if ((pred[0] -= 0x80 << sh) < 0 || sh == 4) - pred[0] &= ~(-1 << sh); - pred[0] += j << sh; - } - } else if ((nonz[0] = pana_bits(8)) || i > 11) - pred[0] = nonz[0] << 4 | pana_bits(4); - dest[x] = pred[0]; + pred[0] = pred[1] = nonz[0] = nonz[1] = 0; + for (i = 0; i < 14; i++) { + // Even pixels + if (i % 3 == 2) + sh = 4 >> (3 - pana_bits(2)); + if (nonz[0]) { + if ((j = pana_bits(8))) { + if ((pred[0] -= 0x80 << sh) < 0 || sh == 4) + pred[0] &= ~(-1 << sh); + pred[0] += j << sh; + } + } else if ((nonz[0] = pana_bits(8)) || i > 11) + pred[0] = nonz[0] << 4 | pana_bits(4); + *dest++ = pred[0]; - // Odd pixels - i++; - x++; - if (i % 3 == 2) - sh = 4 >> (3 - pana_bits(2)); - if (nonz[1]) { - if ((j = pana_bits(8))) { - if ((pred[1] -= 0x80 << sh) < 0 || sh == 4) - pred[1] &= ~(-1 << sh); - pred[1] += j << sh; - } - } else if ((nonz[1] = pana_bits(8)) || i > 11) - pred[1] = nonz[1] << 4 | pana_bits(4); - dest[x] = pred[1]; - i++; - if (i == 14) - i = 0; + // Odd pixels + i++; + if (i % 3 == 2) + sh = 4 >> (3 - pana_bits(2)); + if (nonz[1]) { + if ((j = pana_bits(8))) { + if ((pred[1] -= 0x80 << sh) < 0 || sh == 4) + pred[1] &= ~(-1 << sh); + pred[1] += j << sh; + } + } else if ((nonz[1] = pana_bits(8)) || i > 11) + pred[1] = nonz[1] << 4 | pana_bits(4); + *dest++ = pred[1]; + } } } } From klauspost at gmail.com Sun Sep 6 12:45:47 2009 From: klauspost at gmail.com (Klaus Post) Date: Sun, 06 Sep 2009 12:45:47 +0200 Subject: [Rawstudio-commit] rawspeed r145 - RawSpeed Message-ID: Author: post Date: 2009-09-06 12:45:47 +0200 (Sun, 06 Sep 2009) New Revision: 145 Modified: RawSpeed/Rw2Decoder.cpp Log: RW2Decoder: Use default aspect in checksupport to avoid error message. Modified: RawSpeed/Rw2Decoder.cpp =================================================================== --- RawSpeed/Rw2Decoder.cpp 2009-09-06 09:51:42 UTC (rev 144) +++ RawSpeed/Rw2Decoder.cpp 2009-09-06 10:45:47 UTC (rev 145) @@ -119,6 +119,10 @@ int byte; if (!vbits) { + /* On truncated files this routine will just return just for the truncated + * part of the file. Since there is no chance of affecting output buffer + * size we allow the decoder to decode this + */ if (input->getRemainSize() < 0x4000-load_flags) { memcpy (buf+load_flags, input->getData(), input->getRemainSize()); input->skipBytes(input->getRemainSize()); @@ -146,7 +150,7 @@ string make = data[0]->getEntry(MAKE)->getString(); string model = data[0]->getEntry(MODEL)->getString(); - this->checkCameraSupported(meta, make, model, ""); + this->checkCameraSupported(meta, make, model, getMode(model)); } void Rw2Decoder::decodeMetaData( CameraMetaData *meta ) From klauspost at gmail.com Mon Sep 7 13:40:49 2009 From: klauspost at gmail.com (Klaus Post) Date: Mon, 07 Sep 2009 13:40:49 +0200 Subject: [Rawstudio-commit] rawspeed r146 - / Message-ID: Author: post Date: 2009-09-07 13:40:48 +0200 (Mon, 07 Sep 2009) New Revision: 146 Modified: showcameras.xsl Log: Updated xslt file to parse right/bottom crop offsets. Modified: showcameras.xsl =================================================================== --- showcameras.xsl 2009-09-06 10:45:47 UTC (rev 145) +++ showcameras.xsl 2009-09-07 11:40:48 UTC (rev 146) @@ -27,7 +27,7 @@ -

The Known RawSpeed Cameras:

+

The Known RawSpeed Cameras and Modes:

@@ -40,10 +40,15 @@ Supported: No. Supported: Yes.
+ Crop Top,Left: , pixels. +
+ Cropped Image Size: x pixels. + + + Crop Right,Bottom: , pixels. +
- Crop Top-Left: , pixels. -
Sensor Black: , White: .
From klauspost at gmail.com Tue Sep 8 20:30:51 2009 From: klauspost at gmail.com (Klaus Post) Date: Tue, 08 Sep 2009 20:30:51 +0200 Subject: [Rawstudio-commit] rawspeed r147 - RawSpeed Message-ID: Author: post Date: 2009-09-08 20:30:51 +0200 (Tue, 08 Sep 2009) New Revision: 147 Modified: RawSpeed/RawImage.cpp RawSpeed/RawImage.h Log: - Added SSE2 intrinsics on Win32. Modified: RawSpeed/RawImage.cpp =================================================================== --- RawSpeed/RawImage.cpp 2009-09-07 11:40:48 UTC (rev 146) +++ RawSpeed/RawImage.cpp 2009-09-08 18:30:51 UTC (rev 147) @@ -135,8 +135,51 @@ whitePoint = m; printf("Estimated black:%d, Estimated white: %d\n", blackLevel, whitePoint); } - gw = dim.x*cpp; float f = 65535.0f / (float)(whitePoint-blackLevel); + scaleValues(f); +} + +#if _MSC_VER > 1399 + +void RawImageData::scaleValues(float f) { + int info[4]; + __cpuid(info,1); + + // Check SSE2 + if (f >= 0.0f && info[3]&(1<<26)) { + + __m128i ssescale; + guint gw = pitch / 16; + guint i = (int)(65536.0f*f); // 16 bit fraction + i |= i<<16; + ssescale = _mm_set_epi32(i,i,i,i); + + for (int y = 0; y < dim.y; y++) { + __m128i* pixel = (__m128i*)&data[(mOffset.y+y)*pitch]; + for (guint x = 0 ; x < gw; x++) { + __m128i pix = _mm_load_si128(pixel); + pix = _mm_mulhi_epu16(pix, ssescale); + _mm_store_si128(pixel, pix); + pixel++; + } + } + } else { + // Not SSE2 + gint gw = dim.x*cpp; + int scale = (int)(16384.0f*f); // 14 bit fraction + for (int y = 0; y < dim.y; y++) { + gushort *pixel = (gushort*)getData(0,y); + for (int x = 0 ; x < gw; x++) { + pixel[x] = clampbits(((pixel[x]-blackLevel)*scale+8192)>>14,16); + } + } + } +} + +#else + +void RawImageData::scaleValues(float f) { + gint gw = dim.x*cpp; int scale = (int)(16384.0f*f); // 14 bit fraction for (int y = 0; y < dim.y; y++) { gushort *pixel = (gushort*)getData(0,y); @@ -146,7 +189,9 @@ } } +#endif + RawImage::RawImage( RawImageData* p ) : p_(p) { pthread_mutex_lock(&p_->mymutex); Modified: RawSpeed/RawImage.h =================================================================== --- RawSpeed/RawImage.h 2009-09-07 11:40:48 UTC (rev 146) +++ RawSpeed/RawImage.h 2009-09-08 18:30:51 UTC (rev 147) @@ -49,6 +49,7 @@ vector blackAreas; iPoint2D subsampling; gboolean isAllocated() {return !!data;} + void scaleValues(float scale); protected: RawImageData(void); RawImageData(iPoint2D dim, guint bpp, guint cpp=1); From klauspost at gmail.com Wed Sep 9 23:49:09 2009 From: klauspost at gmail.com (Klaus Post) Date: Wed, 09 Sep 2009 23:49:09 +0200 Subject: [Rawstudio-commit] rawspeed r148 - RawSpeed Message-ID: Author: post Date: 2009-09-09 23:49:08 +0200 (Wed, 09 Sep 2009) New Revision: 148 Modified: RawSpeed/RawImage.cpp Log: Add GCC 64-bit SSE2 scaling for black/white. Disabled Win32 assembler since it doesn't work properly. Modified: RawSpeed/RawImage.cpp =================================================================== --- RawSpeed/RawImage.cpp 2009-09-08 18:30:51 UTC (rev 147) +++ RawSpeed/RawImage.cpp 2009-09-09 21:49:08 UTC (rev 148) @@ -1,7 +1,7 @@ #include "StdAfx.h" #include "RawImage.h" #include "RawDecoder.h" // For exceptions -/* +/* RawSpeed - RAW file decoder. Copyright (C) 2009 Klaus Post @@ -23,18 +23,18 @@ http://www.klauspost.com */ -RawImageData::RawImageData(void): -dim(0,0), bpp(0), isCFA(true), -blackLevel(-1), whitePoint(65536), +RawImageData::RawImageData(void): +dim(0,0), bpp(0), isCFA(true), +blackLevel(-1), whitePoint(65536), dataRefCount(0), data(0), cpp(1) { pthread_mutex_init(&mymutex, NULL); subsampling.x = subsampling.y = 1; } -RawImageData::RawImageData(iPoint2D _dim, guint _bpc, guint _cpp) : -dim(_dim), bpp(_bpc), -blackLevel(-1), whitePoint(65536), +RawImageData::RawImageData(iPoint2D _dim, guint _bpc, guint _cpp) : +dim(_dim), bpp(_bpc), +blackLevel(-1), whitePoint(65536), dataRefCount(0),data(0), cpp(cpp) { subsampling.x = subsampling.y = 1; @@ -139,25 +139,30 @@ scaleValues(f); } -#if _MSC_VER > 1399 +#if _MSC_VER > 13990 void RawImageData::scaleValues(float f) { int info[4]; __cpuid(info,1); // Check SSE2 - if (f >= 0.0f && info[3]&(1<<26)) { - + if (f >= 0.0f && info[3]&(1<<26)) { + __m128i ssescale; + __m128i ssesub; guint gw = pitch / 16; guint i = (int)(65536.0f*f); // 16 bit fraction i |= i<<16; + guint b = blackLevel | (blackLevel<<16); + ssescale = _mm_set_epi32(i,i,i,i); + ssesub = _mm_set_epi32(b,b,b,b); for (int y = 0; y < dim.y; y++) { __m128i* pixel = (__m128i*)&data[(mOffset.y+y)*pitch]; for (guint x = 0 ; x < gw; x++) { __m128i pix = _mm_load_si128(pixel); + pix = _mm_subs_epu16(pix, ssesub); pix = _mm_mulhi_epu16(pix, ssescale); _mm_store_si128(pixel, pix); pixel++; @@ -179,14 +184,79 @@ #else void RawImageData::scaleValues(float f) { +#if defined (__x86_64__) + //TODO: Check for SSE2 on 32 bit systems and use it there + guint temp[20]; + + guint i = (int)(1024.0f*f); // 10 bit fraction + i |= i<<16; + guint b = blackLevel | (blackLevel<<16); + + for (int j = 0; j < 4; j++) { + temp[j] = b; + temp[j+4] = i; + temp[j+8] = 512; + temp[j+12] = 32768; + temp[j+16] = 0x80008000; + } + + asm volatile + ( + "movdqu 0(%0), %%xmm7\n" // Subtraction + "movdqu 16(%0), %%xmm6\n" // Multiplication factor + "movdqu 32(%0), %%xmm5\n" // Fraction + "movdqu 48(%0), %%xmm4\n" // Sub 32768 + "movdqu 64(%0), %%xmm3\n" // Sign shift + : // no output registers + : "r" (temp) + : // %0 + ); + + for (int y = 0; y < dim.y; y++) { + guchar* pixel = (guchar*)&data[(mOffset.y+y)*pitch]; + guint gw = pitch >> 4; + for (guint x = 0; x < gw ; x++) { + asm volatile ( + "next_pixel:\n" + "movaps 0(%0), %%xmm0\n" + "psubusw %%xmm7, %%xmm0\n" // Subtract black + "movaps %%xmm0, %%xmm1\n" + "pmullw %%xmm6, %%xmm0\n" + "pmulhuw %%xmm6, %%xmm1\n" + "movaps %%xmm0, %%xmm2\n" + "punpcklwd %%xmm1, %%xmm0\n" // First 4 result + "punpckhwd %%xmm1, %%xmm2\n" // Last 4 result + "paddd %%xmm5, %%xmm0\n" // Add fraction + "paddd %%xmm5, %%xmm2\n" + "psrad $10, %%xmm0\n" + "psrad $10, %%xmm2\n" + "psubd %%xmm4, %%xmm0\n" // Avoid saturation + "psubd %%xmm4, %%xmm2\n" + "packssdw %%xmm2, %%xmm0\n" + "pxor %%xmm3, %%xmm0\n" // Shift sign + "movaps %%xmm0, 0(%0)\n" + + "add $16, %0\n" + : // no output registers + : "r" (pixel) + : // %0 + ); + } + } + +#else + gint gw = dim.x*cpp; - int scale = (int)(16384.0f*f); // 14 bit fraction + int scale = (int)(16384.0f*f); // 14 bit fraction for (int y = 0; y < dim.y; y++) { gushort *pixel = (gushort*)getData(0,y); for (int x = 0 ; x < gw; x++) { - pixel[x] = clampbits(((pixel[x]-blackLevel)*scale+8192)>>14,16); + pixel[x] = clampbits(((pixel[x]-blackLevel)*scale+8192)>>14,16); } } + +#endif + } #endif From klauspost at gmail.com Thu Sep 10 18:26:04 2009 From: klauspost at gmail.com (Klaus Post) Date: Thu, 10 Sep 2009 18:26:04 +0200 Subject: [Rawstudio-commit] rawspeed r149 - RawSpeed Message-ID: Author: post Date: 2009-09-10 18:26:03 +0200 (Thu, 10 Sep 2009) New Revision: 149 Modified: RawSpeed/ByteStream.h RawSpeed/RawImage.cpp Log: Added correct Win32 image value scaler and re-enabled it. Added helper function to bytestream. Modified: RawSpeed/ByteStream.h =================================================================== --- RawSpeed/ByteStream.h 2009-09-09 21:49:08 UTC (rev 148) +++ RawSpeed/ByteStream.h 2009-09-10 16:26:03 UTC (rev 149) @@ -28,6 +28,7 @@ ~ByteStream(void); guint peekByte(); gushort getShort(); + guint getOffset() {return off;} void skipBytes(guint nbytes); guchar getByte(); void setAbsoluteOffset(guint offset); Modified: RawSpeed/RawImage.cpp =================================================================== --- RawSpeed/RawImage.cpp 2009-09-09 21:49:08 UTC (rev 148) +++ RawSpeed/RawImage.cpp 2009-09-10 16:26:03 UTC (rev 149) @@ -139,7 +139,7 @@ scaleValues(f); } -#if _MSC_VER > 13990 +#if _MSC_VER > 1399 void RawImageData::scaleValues(float f) { int info[4]; @@ -150,21 +150,47 @@ __m128i ssescale; __m128i ssesub; + __m128i sseround; + __m128i ssesub2; + __m128i ssesign; guint gw = pitch / 16; - guint i = (int)(65536.0f*f); // 16 bit fraction + guint i = (int)(1024.0f*f); // 10 bit fraction i |= i<<16; guint b = blackLevel | (blackLevel<<16); ssescale = _mm_set_epi32(i,i,i,i); ssesub = _mm_set_epi32(b,b,b,b); + sseround = _mm_set_epi32(512,512,512,512); + ssesub2 = _mm_set_epi32(32768,32768,32768,32768); + ssesign = _mm_set_epi32(0x80008000,0x80008000,0x80008000,0x80008000); for (int y = 0; y < dim.y; y++) { __m128i* pixel = (__m128i*)&data[(mOffset.y+y)*pitch]; for (guint x = 0 ; x < gw; x++) { - __m128i pix = _mm_load_si128(pixel); - pix = _mm_subs_epu16(pix, ssesub); - pix = _mm_mulhi_epu16(pix, ssescale); - _mm_store_si128(pixel, pix); + __m128i pix_high; + __m128i temp; + __m128i pix_low = _mm_load_si128(pixel); + // Subtract black + pix_low = _mm_subs_epu16(pix_low, ssesub); + // Multiply the two unsigned shorts and combine it to 32 bit result + pix_high = _mm_mulhi_epu16(pix_low, ssescale); + temp = _mm_mullo_epi16(pix_low, ssescale); + pix_low = _mm_unpacklo_epi16(temp, pix_high); + pix_high = _mm_unpackhi_epi16(temp, pix_high); + // Add rounder + pix_low = _mm_add_epi32(pix_low, sseround); + pix_high = _mm_add_epi32(pix_high, sseround); + // Shift down + pix_low = _mm_srai_epi32(pix_low, 10); + pix_high = _mm_srai_epi32(pix_high, 10); + // Subtract to avoid clipping + pix_low = _mm_sub_epi32(pix_low, ssesub2); + pix_high = _mm_sub_epi32(pix_high, ssesub2); + // Pack + pix_low = _mm_packs_epi32(pix_low, pix_high); + // Shift sign off + pix_low = _mm_xor_si128(pix_low,ssesign); + _mm_store_si128(pixel, pix_low); pixel++; } } From klauspost at gmail.com Sun Sep 20 13:20:05 2009 From: klauspost at gmail.com (Klaus Post) Date: Sun, 20 Sep 2009 13:20:05 +0200 Subject: [Rawstudio-commit] r2631 - trunk/plugins/resample Message-ID: Author: post Date: 2009-09-20 13:20:04 +0200 (Sun, 20 Sep 2009) New Revision: 2631 Modified: trunk/plugins/resample/resample.c Log: - Added 64 bit float SSE2 vertical resizer. 25% faster on Core2. - Swapped order of vertical and horizontal resizer. - A few EOL whitespaces removed. Modified: trunk/plugins/resample/resample.c =================================================================== --- trunk/plugins/resample/resample.c 2009-09-01 18:00:50 UTC (rev 2630) +++ trunk/plugins/resample/resample.c 2009-09-20 11:20:04 UTC (rev 2631) @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006-2009 Anders Brander and + * Copyright (C) 2006-2009 Anders Brander and * Anders Kvist * * This program is free software; you can redistribute it and/or @@ -21,7 +21,9 @@ #include #include +#include + #define RS_TYPE_RESAMPLE (rs_resample_type) #define RS_RESAMPLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RS_TYPE_RESAMPLE, RSResample)) #define RS_RESAMPLE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RS_TYPE_RESAMPLE, RSResampleClass)) @@ -78,6 +80,7 @@ static gint get_height(RSFilter *filter); static void ResizeH(ResampleInfo *info); static void ResizeV(ResampleInfo *info); +static void ResizeV_SSE2(ResampleInfo *info); static void ResizeH_compatible(ResampleInfo *info); static void ResizeV_compatible(ResampleInfo *info); static void ResizeH_fast(ResampleInfo *info); @@ -242,26 +245,36 @@ return mask; } +/* This function is (probably) only faster on x86-64 */ + +#if defined (__x86_64__) +#define RESAMPLE_V_USE_SSE2 1 +#else +#define RESAMPLE_V_USE_SSE2 0 +#endif + gpointer start_thread_resampler(gpointer _thread_info) { ResampleInfo* t = _thread_info; - if (t->input->w == t->output->w) + if (t->input->w == t->output->w) { if (t->use_fast) - ResizeV_fast(t); - else if (t->use_compatible) + ResizeV_fast(t); + else if (!RESAMPLE_V_USE_SSE2 && t->use_compatible) ResizeV_compatible(t); - else - ResizeV(t); + else if (RESAMPLE_V_USE_SSE2) + ResizeV_SSE2(t); + else + ResizeV(t); } else { if (t->use_fast) ResizeH_fast(t); else if (t->use_compatible) ResizeH_compatible(t); - else - ResizeH(t); + else + ResizeH(t); } g_thread_exit(NULL); @@ -275,7 +288,7 @@ RSResample *resample = RS_RESAMPLE(filter); RSFilterResponse *previous_response; RSFilterResponse *response; - RS_IMAGE16 *afterHorizontal; + RS_IMAGE16 *afterVertical; RS_IMAGE16 *input; RS_IMAGE16 *output = NULL; gint input_width = rs_filter_get_width(filter->previous); @@ -308,7 +321,7 @@ response = rs_filter_response_clone(previous_response); g_object_unref(previous_response); - /* Use compatible (and slow) version if input isn't 3 channels and pixelsize 4 */ + /* Use compatible (and slow) version if input isn't 3 channels and pixelsize 4 */ gboolean use_compatible = ( ! ( input->pixelsize == 4 && input->channels == 3)); if (rs_filter_param_get_quick(param)) @@ -323,36 +336,38 @@ ResampleInfo* v_resample = g_new(ResampleInfo, threads); /* Create intermediate and output images*/ - afterHorizontal = rs_image16_new(resample->new_width, input_height, input->channels, input->pixelsize); + afterVertical = rs_image16_new(input_width, resample->new_height, input->channels, input->pixelsize); - guint input_y_offset = 0; - guint input_y_per_thread = (input_height+threads-1) / threads; - + // Only even count + guint output_x_per_thread = ((input_width + threads + 1) / threads ) & 0xfffe; + guint output_x_offset = 0; + + GTimer *gt = g_timer_new(); + guint i; - for (i = 0; i < threads; i++) + for (i = 0; i < threads; i++) { - /* Set info for Horizontal resampler */ - ResampleInfo *h = &h_resample[i]; - h->input = input; - h->output = afterHorizontal; - h->old_size = input_width; - h->new_size = resample->new_width; - h->dest_offset_other = input_y_offset; - h->dest_end_other = MIN(input_y_offset+input_y_per_thread, input_height); - h->use_compatible = use_compatible; - h->use_fast = use_fast; + /* Set info for Vertical resampler */ + ResampleInfo *v = &v_resample[i]; + v->input = input; + v->output = afterVertical; + v->old_size = input_height; + v->new_size = resample->new_height; + v->dest_offset_other = output_x_offset; + v->dest_end_other = MIN(output_x_offset + output_x_per_thread, input_width); + v->use_compatible = use_compatible; + v->use_fast = use_fast; /* Start it up */ - h->threadid = g_thread_create(start_thread_resampler, h, TRUE, NULL); + v->threadid = g_thread_create(start_thread_resampler, v, TRUE, NULL); /* Update offset */ - input_y_offset = h->dest_end_other; - + output_x_offset = v->dest_end_other; } - /* Wait for horizontal threads to finish */ + /* Wait for vertical threads to finish */ for(i = 0; i < threads; i++) - g_thread_join(h_resample[i].threadid); + g_thread_join(v_resample[i].threadid); /* input no longer needed */ g_object_unref(input); @@ -360,37 +375,40 @@ /* create output */ output = rs_image16_new(resample->new_width, resample->new_height, input->channels, input->pixelsize); - guint output_x_offset = 0; - guint output_x_per_thread = (resample->new_width+threads-1) / threads; + guint input_y_offset = 0; + guint input_y_per_thread = (resample->new_height+threads-1) / threads; - for (i = 0; i < threads; i++) + gt = g_timer_new(); + + for (i = 0; i < threads; i++) { - /* Set info for Vertical resampler */ - ResampleInfo *v = &v_resample[i]; - v->input = afterHorizontal; - v->output = output; - v->old_size = input_height; - v->new_size = resample->new_height; - v->dest_offset_other = output_x_offset; - v->dest_end_other = MIN(output_x_offset + output_x_per_thread, resample->new_width); - v->use_compatible = use_compatible; - v->use_fast = use_fast; + /* Set info for Horizontal resampler */ + ResampleInfo *h = &h_resample[i]; + h->input = afterVertical; + h->output = output; + h->old_size = input_width; + h->new_size = resample->new_width; + h->dest_offset_other = input_y_offset; + h->dest_end_other = MIN(input_y_offset+input_y_per_thread, resample->new_height); + h->use_compatible = use_compatible; + h->use_fast = use_fast; /* Start it up */ - v->threadid = g_thread_create(start_thread_resampler, v, TRUE, NULL); + h->threadid = g_thread_create(start_thread_resampler, h, TRUE, NULL); /* Update offset */ - output_x_offset = v->dest_end_other; + input_y_offset = h->dest_end_other; + } - /* Wait for vertical threads to finish */ + /* Wait for horizontal threads to finish */ for(i = 0; i < threads; i++) - g_thread_join(v_resample[i].threadid); + g_thread_join(h_resample[i].threadid); /* Clean up */ g_free(h_resample); g_free(v_resample); - g_object_unref(afterHorizontal); + g_object_unref(afterVertical); rs_filter_response_set_image(response, output); g_object_unref(output); @@ -617,7 +635,7 @@ guint y,x; gint *wg = weights; - + for (y = 0; y < new_size ; y++) { gushort *in = GET_PIXEL(input, start_x, offsets[y]); @@ -646,7 +664,206 @@ } +/* Special Vertical SSE2 resampler, that has massive paralism, + * but on the other hand has to convert all data to float before + * processing it, because there is no 32 * 32 bit multiply in SSE2. + * This makes it very precise, and faster on a Core2 and later Intel + * processors in 64 bit mode. + */ + +#if defined (__x86_64__) + static void +ResizeV_SSE2(ResampleInfo *info) +{ + const RS_IMAGE16 *input = info->input; + const RS_IMAGE16 *output = info->output; + const guint old_size = info->old_size; + const guint new_size = info->new_size; + const guint start_x = info->dest_offset_other * input->pixelsize; + const guint end_x = info->dest_end_other * input->pixelsize; + + gdouble pos_step = ((gdouble) old_size) / ((gdouble)new_size); + gdouble filter_step = MIN(1.0 / pos_step, 1.0); + gdouble filter_support = (gdouble) lanczos_taps() / filter_step; + gint fir_filter_size = (gint) (ceil(filter_support*2)); + + if (old_size <= fir_filter_size) + return ResizeV_fast(info); + + gfloat *weights = g_new(gfloat, new_size * fir_filter_size); + gint *offsets = g_new(gint, new_size); + + gdouble pos = 0.0; + + gint i,j,k; + + for (i=0; i old_size-1) + end_pos = old_size-1; + + gint start_pos = end_pos - fir_filter_size + 1; + + if (start_pos < 0) + start_pos = 0; + + offsets[i] = start_pos; + + /* The following code ensures that the coefficients add to exactly FPScale */ + gdouble total = 0.0; + + /* Ensure that we have a valid position */ + gdouble ok_pos = MAX(0.0,MIN(old_size-1,pos)); + + for (j=0; j 0.0f); + + gdouble total2 = 0.0; + + for (k=0; kpixelsize, offsets[y]); + gushort *out = GET_PIXEL(output, 0, y); + __m128i zero; + zero = _mm_xor_si128(zero, zero); + for (x = start_x; x <= (end_x_sse-24); x+=24) + { + /* Accumulators, set to 0 */ + __m128 acc1, acc2, acc3, acc1_h, acc2_h, acc3_h; + acc1 = acc2 = acc3 = acc1_h = acc2_h = acc3_h = (__m128)zero; + + for (i = 0; i < fir_filter_size; i++) { + /* Load weight */ + __m128 w = _mm_set_ps(wg[i],wg[i],wg[i],wg[i]); + /* Load source */ + __m128i src1i, src2i, src3i; + __m128i* in_sse = (__m128i*)&in[i*input->rowstride]; + src1i = _mm_load_si128(in_sse); + src2i = _mm_load_si128(in_sse+1); + src3i = _mm_load_si128(in_sse+2); + /* Unpack to dwords */ + __m128i src1i_high, src2i_high, src3i_high; + src1i_high = _mm_unpackhi_epi16(src1i, zero); + src2i_high = _mm_unpackhi_epi16(src2i, zero); + src3i_high = _mm_unpackhi_epi16(src3i, zero); + src1i = _mm_unpacklo_epi16(src1i, zero); + src2i = _mm_unpacklo_epi16(src2i, zero); + src3i = _mm_unpacklo_epi16(src3i, zero); + + /* Convert to float */ + __m128 src1, src2, src3; + __m128 src1_high, src2_high, src3_high; + src1_high = _mm_cvtepi32_ps(src1i_high); + src2_high = _mm_cvtepi32_ps(src2i_high); + src3_high = _mm_cvtepi32_ps(src3i_high); + src1 = _mm_cvtepi32_ps(src1i); + src2 = _mm_cvtepi32_ps(src2i); + src3 = _mm_cvtepi32_ps(src3i); + + /* Multiply by weight */ + src1_high = _mm_mul_ps(src1_high, w); + src2_high = _mm_mul_ps(src2_high, w); + src3_high = _mm_mul_ps(src3_high, w); + src1 = _mm_mul_ps(src1, w); + src2 = _mm_mul_ps(src2, w); + src3 = _mm_mul_ps(src3, w); + + /* Accumulate */ + acc1_h = _mm_add_ps(acc1_h, src1_high); + acc2_h = _mm_add_ps(acc2_h, src2_high); + acc3_h = _mm_add_ps(acc3_h, src3_high); + acc1 = _mm_add_ps(acc1, src1); + acc2 = _mm_add_ps(acc2, src2); + acc3 = _mm_add_ps(acc3, src3); + } + __m128i subtract = _mm_set_epi32(32768, 32768, 32768, 32768); + + /* Convert to integer */ + __m128i acc1i, acc2i, acc3i, acc1_hi, acc2_hi, acc3_hi; + acc1i = _mm_cvtps_epi32(acc1); + acc2i = _mm_cvtps_epi32(acc2); + acc3i = _mm_cvtps_epi32(acc3); + acc1_hi = _mm_cvtps_epi32(acc1_h); + acc2_hi = _mm_cvtps_epi32(acc2_h); + acc3_hi = _mm_cvtps_epi32(acc3_h); + + /* Subtract 32768 to avoid signed saturation */ + acc1i = _mm_sub_epi32(acc1i, subtract); + acc2i = _mm_sub_epi32(acc2i, subtract); + acc3i = _mm_sub_epi32(acc3i, subtract); + acc1_hi = _mm_sub_epi32(acc1_hi, subtract); + acc2_hi = _mm_sub_epi32(acc2_hi, subtract); + acc3_hi = _mm_sub_epi32(acc3_hi, subtract); + + __m128i signxor = _mm_set_epi32(0x80008000, 0x80008000, 0x80008000, 0x80008000); + + /* Pack to signed shorts */ + acc1i = _mm_packs_epi32(acc1i, acc1_hi); + acc2i = _mm_packs_epi32(acc2i, acc2_hi); + acc3i = _mm_packs_epi32(acc3i, acc3_hi); + + /* Shift sign to unsinged shorts */ + acc1i = _mm_xor_si128(acc1i,signxor); + acc2i = _mm_xor_si128(acc2i,signxor); + acc3i = _mm_xor_si128(acc3i,signxor); + + /* Store result */ + __m128i* sse_dst = (__m128i*)&out[x]; + _mm_store_si128(sse_dst, acc1i); + _mm_store_si128(sse_dst+1, acc2i); + _mm_store_si128(sse_dst+2, acc3i); + in+=24; + } + /* Process remaining pixels */ + for (; x < end_x; x++) + { + gfloat acc1 = 0; + for (i = 0; i < fir_filter_size; i++) + { + acc1 += (gfloat)in[i*input->rowstride]* wg[i]; + } + out[x] = (gushort)(acc1); + in++; + } + wg+=fir_filter_size; + } + g_free(weights); + g_free(offsets); +} + +#else // not defined (__x86_64__) + +static void +ResizeV_SSE2(ResampleInfo *info) +{ + g_assert(FALSE); +} + +#endif // not defined (__x86_64__) + +static void ResizeH_compatible(ResampleInfo *info) { const RS_IMAGE16 *input = info->input; @@ -722,7 +939,7 @@ { guint i; gushort *in = &in_line[offsets[x]]; - for (c = 0 ; c < ch; c++) + for (c = 0 ; c < ch; c++) { gint acc = 0; @@ -809,7 +1026,7 @@ guint y,x,c; gint *wg = weights; - + for (y = 0; y < new_size ; y++) { gushort *out = GET_PIXEL(output, 0, y); @@ -853,7 +1070,7 @@ gint delta = (gint)(pos_step * 65536.0); guint y,x,c; - + for (y = 0; y < new_size ; y++) { gushort *out = GET_PIXEL(output, 0, y); @@ -896,7 +1113,7 @@ for (x = 0; x < new_size; x++) { - for (c = 0 ; c < ch; c++) + for (c = 0 ; c < ch; c++) { out[x*pixelsize+c] = in_line[(pos>>16)*pixelsize+c]; } From klauspost at gmail.com Sun Sep 20 13:22:01 2009 From: klauspost at gmail.com (Klaus Post) Date: Sun, 20 Sep 2009 13:22:01 +0200 Subject: [Rawstudio-commit] r2632 - trunk/plugins/meta-tiff Message-ID: Author: post Date: 2009-09-20 13:22:00 +0200 (Sun, 20 Sep 2009) New Revision: 2632 Modified: trunk/plugins/meta-tiff/tiff-meta.c Log: Fixed preview images on Panasonic. Modified: trunk/plugins/meta-tiff/tiff-meta.c =================================================================== --- trunk/plugins/meta-tiff/tiff-meta.c 2009-09-20 11:20:04 UTC (rev 2631) +++ trunk/plugins/meta-tiff/tiff-meta.c 2009-09-20 11:22:00 UTC (rev 2632) @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006-2009 Anders Brander and + * Copyright (C) 2006-2009 Anders Brander and * Anders Kvist * * This program is free software; you can redistribute it and/or @@ -66,6 +66,7 @@ static gboolean exif_reader(RAWFILE *rawfile, guint offset, RSMetadata *meta); static gboolean ifd_reader(RAWFILE *rawfile, guint offset, RSMetadata *meta); static gboolean thumbnail_reader(const gchar *service, RAWFILE *rawfile, guint offset, guint length, RSMetadata *meta); +static GdkPixbuf* raw_thumbnail_reader(const gchar *service, RSMetadata *meta); typedef enum tiff_field_type { @@ -656,7 +657,7 @@ break; case 0x00aa: /* Nikon Saturation */ if (meta->make == MAKE_NIKON) - { + { if (raw_strcmp(rawfile, offset, "ENHANCED", 8)) meta->saturation = 1.5; else if (raw_strcmp(rawfile, offset, "MODERATE", 8)) @@ -1373,30 +1374,7 @@ /* Special case for Panasonic - most have no embedded thumbnail */ else if (meta->make == MAKE_PANASONIC) { - RS_IMAGE16 *input; - if ((input = rs_filetype_load(service))) - { - gint c; - gfloat pre_mul[4]; - RS_IMAGE16 *image; - RSColorTransform *rct = rs_color_transform_new(); - image = rs_image16_transform(input, NULL, - NULL, NULL, NULL, 128, 128, TRUE, -1.0, - 0.0, 0, NULL); - pixbuf = gdk_pixbuf_new(GDK_COLORSPACE_RGB, FALSE, 8, image->w, image->h); - - for(c=0;c<4;c++) - pre_mul[c] = (gfloat) meta->cam_mul[c]; - - rs_color_transform_set_premul(rct, pre_mul); - rs_color_transform_transform(rct, image->w, image->h, image->pixels, - image->rowstride, gdk_pixbuf_get_pixels(pixbuf), - gdk_pixbuf_get_rowstride(pixbuf)); - - g_object_unref(input); - g_object_unref(image); - g_object_unref(rct); - } + pixbuf = raw_thumbnail_reader(service, meta); } if (pixbuf) @@ -1443,6 +1421,79 @@ return ret; } +static GdkPixbuf* +raw_thumbnail_reader(const gchar *service, RSMetadata *meta) +{ + GdkPixbuf* pixbuf = 0; + gint c; + gfloat pre_mul[4]; + + RSFilter *finput = rs_filter_new("RSInputFile", NULL); + RSFilter *fdemosaic = rs_filter_new("RSDemosaic", finput); + RSFilterParam *param = rs_filter_param_new(); + + g_object_set(finput, "filename", service, NULL); + rs_filter_param_set_roi(param, FALSE); + rs_filter_param_set_quick(param, TRUE); + + RSFilterResponse *response = rs_filter_get_image(fdemosaic, param); + + if (rs_filter_response_has_image(response)) + { + RS_IMAGE16 *image_raw; + RS_IMAGE16 *image_raw_scaled; + RS_IMAGE16 *image_transformed; + RSColorTransform *rct = rs_color_transform_new(); + image_raw = rs_filter_response_get_image(response); + + /* Scale down for higher speed */ + g_object_unref(param); + g_object_unref(finput); + g_object_unref(response); + param = rs_filter_param_new(); + finput = rs_filter_new("RSInputImage16", NULL); + RSFilter *fresample = rs_filter_new("RSResample", finput); + + g_object_set(finput, "image", image_raw, "filename", service, NULL); + rs_filter_param_set_roi(param, FALSE); + rs_filter_param_set_quick(param, TRUE); + g_object_set(fresample, "width", image_raw->w/8, + "height", image_raw->h/8, NULL); + + /* Request the scaled image */ + response = rs_filter_get_image(fresample, param); + image_raw_scaled = rs_filter_response_get_image(response); + + /* Transform image */ + image_transformed = rs_image16_transform(image_raw_scaled, NULL, + NULL, NULL, NULL, 128, 128, TRUE, -1.0, 0.0, 0, NULL); + pixbuf = gdk_pixbuf_new(GDK_COLORSPACE_RGB, FALSE, 8, image_transformed->w, + image_transformed->h); + + + for(c=0;c<4;c++) + pre_mul[c] = (gfloat) meta->cam_mul[c]; + + rs_color_transform_set_premul(rct, pre_mul); + rs_color_transform_transform(rct, image_transformed->w, image_transformed->h, + image_transformed->pixels, image_transformed->rowstride, + gdk_pixbuf_get_pixels(pixbuf), gdk_pixbuf_get_rowstride(pixbuf)); + + g_object_unref(image_raw); + g_object_unref(image_transformed); + g_object_unref(image_raw_scaled); + g_object_unref(fresample); + g_object_unref(rct); + } + + g_object_unref(param); + g_object_unref(response); + g_object_unref(finput); + g_object_unref(fdemosaic); + + return pixbuf; +} + static void sony_load_meta(const gchar *service, RAWFILE *rawfile, guint offset, RSMetadata *meta) { From klauspost at gmail.com Sun Sep 20 16:26:21 2009 From: klauspost at gmail.com (Klaus Post) Date: Sun, 20 Sep 2009 16:26:21 +0200 Subject: [Rawstudio-commit] r2633 - trunk/plugins/resample Message-ID: Author: post Date: 2009-09-20 16:26:21 +0200 (Sun, 20 Sep 2009) New Revision: 2633 Modified: trunk/plugins/resample/resample.c Log: Comment that didn't make last commit. Modified: trunk/plugins/resample/resample.c =================================================================== --- trunk/plugins/resample/resample.c 2009-09-20 11:22:00 UTC (rev 2632) +++ trunk/plugins/resample/resample.c 2009-09-20 14:26:21 UTC (rev 2633) @@ -664,11 +664,13 @@ } -/* Special Vertical SSE2 resampler, that has massive paralism, +/* Special Vertical SSE2 resampler, that has massive parallism, * but on the other hand has to convert all data to float before * processing it, because there is no 32 * 32 bit multiply in SSE2. * This makes it very precise, and faster on a Core2 and later Intel * processors in 64 bit mode. + * An important restriction is that "info->dest_offset_other", must result + * in a 16 byte aligned memory pointer. */ #if defined (__x86_64__) From klauspost at gmail.com Sun Sep 20 16:30:04 2009 From: klauspost at gmail.com (Klaus Post) Date: Sun, 20 Sep 2009 16:30:04 +0200 Subject: [Rawstudio-commit] r2634 - trunk/src Message-ID: Author: post Date: 2009-09-20 16:30:04 +0200 (Sun, 20 Sep 2009) New Revision: 2634 Modified: trunk/src/rs-batch.c Log: Added cache to batch export. This will cache demosaic, rotate and crop from the preview image (and lensfun in the future). Modified: trunk/src/rs-batch.c =================================================================== --- trunk/src/rs-batch.c 2009-09-20 14:26:21 UTC (rev 2633) +++ trunk/src/rs-batch.c 2009-09-20 14:30:04 UTC (rev 2634) @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006-2009 Anders Brander and + * Copyright (C) 2006-2009 Anders Brander and * Anders Kvist * * This program is free software; you can redistribute it and/or @@ -327,7 +327,7 @@ gchar *filename_temp; gint setting_id_temp; - + gtk_tree_model_get_iter_first(queue->list, &iter); if (gtk_list_store_iter_is_valid(GTK_LIST_STORE(queue->list), &iter)) @@ -397,7 +397,8 @@ RSFilter *fdemosaic = rs_filter_new("RSDemosaic", finput); RSFilter *frotate = rs_filter_new("RSRotate", fdemosaic); RSFilter *fcrop = rs_filter_new("RSCrop", frotate); - RSFilter *fresample= rs_filter_new("RSResample", fcrop); + RSFilter *fcache = rs_filter_new("RSCache", fcrop); + RSFilter *fresample= rs_filter_new("RSResample", fcache); RSFilter *fdenoise= rs_filter_new("RSDenoise", fresample); RSFilter *fbasic_render = rs_filter_new("RSBasicRender", fdenoise); RSFilter *fend = fbasic_render; @@ -587,7 +588,7 @@ gtk_widget_destroy(window); /* Restore fullscreen state if needed */ - if (fullscreen) + if (fullscreen) gtk_window_fullscreen(rawstudio_window); gtk_widget_show_all(GTK_WIDGET(rawstudio_window)); @@ -597,6 +598,7 @@ g_object_unref(fdemosaic); g_object_unref(frotate); g_object_unref(fcrop); + g_object_unref(fcache); g_object_unref(fresample); g_object_unref(fdenoise); g_object_unref(fbasic_render); @@ -615,7 +617,7 @@ GtkWidget *view; GtkCellRenderer *renderer_text, *renderer_pixbuf; GtkTreeViewColumn *column_filename, *column_setting_id, *column_pixbuf; - + scroller = gtk_scrolled_window_new (NULL, NULL); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scroller), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); @@ -1001,7 +1003,7 @@ queue->output = rs_output_new("RSJpegfile"); rs_conf_set_string(CONF_BATCH_FILETYPE, "RSJpegfile"); } - + /* Export size */ hbox = gtk_hbox_new(FALSE, 1); queue->size_label = gtk_label_new(NULL); From klauspost at gmail.com Sun Sep 20 19:56:12 2009 From: klauspost at gmail.com (Klaus Post) Date: Sun, 20 Sep 2009 19:56:12 +0200 Subject: [Rawstudio-commit] r2635 - trunk/plugins/demosaic Message-ID: Author: post Date: 2009-09-20 19:56:12 +0200 (Sun, 20 Sep 2009) New Revision: 2635 Modified: trunk/plugins/demosaic/demosaic.c Log: Added conservative hotpixel removal. Added better threading for Pixelgrouping demosaic, by threading unpack and border interpolation. Modified: trunk/plugins/demosaic/demosaic.c =================================================================== --- trunk/plugins/demosaic/demosaic.c 2009-09-20 14:30:04 UTC (rev 2634) +++ trunk/plugins/demosaic/demosaic.c 2009-09-20 17:56:12 UTC (rev 2635) @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006-2009 Anders Brander and + * Copyright (C) 2006-2009 Anders Brander and * Anders Kvist * * This program is free software; you can redistribute it and/or @@ -31,7 +31,7 @@ gint start_y; gint end_y; RS_IMAGE16 *image; - RS_IMAGE16 *none_out; /* Used by "none" */ + RS_IMAGE16 *output; guint filters; GThread *threadid; } ThreadInfo; @@ -73,11 +73,14 @@ static void set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec); static RSFilterResponse *get_image(RSFilter *filter, const RSFilterParam *param); static inline int fc_INDI (const unsigned int filters, const int row, const int col); -static void border_interpolate_INDI (RS_IMAGE16 *image, const unsigned int filters, int colors, int border); -static void lin_interpolate_INDI(RS_IMAGE16 *image, const unsigned int filters, const int colors); -static void ppg_interpolate_INDI(RS_IMAGE16 *image, const unsigned int filters, const int colors); +static void border_interpolate_INDI (const ThreadInfo* t, int colors, int border); +static void lin_interpolate_INDI(RS_IMAGE16 *image, RS_IMAGE16 *output, const unsigned int filters, const int colors); +static void ppg_interpolate_INDI(RS_IMAGE16 *image, RS_IMAGE16 *output, const unsigned int filters, const int colors); static void none_interpolate_INDI(RS_IMAGE16 *in, RS_IMAGE16 *out, const unsigned int filters, const int colors); +static void hotpixel_detect(const ThreadInfo* t); +static void expand_cfa_data(const ThreadInfo* t); + static RSFilterClass *rs_demosaic_parent_class = NULL; G_MODULE_EXPORT void @@ -167,10 +170,7 @@ RSFilterResponse *response; RS_IMAGE16 *input; RS_IMAGE16 *output = NULL; - gint row, col; guint filters; - gushort *src; - gushort *dest; RS_DEMOSAIC method; previous_response = rs_filter_get_image(filter->previous, param); @@ -203,42 +203,25 @@ rs_filter_response_set_quick(response); } - /* Magic - Ask Dave ;) */ filters = input->filters; filters &= ~((filters & 0x55555555) << 1); /* Check if pattern is 2x2, otherwise we cannot do "none" demosaic */ - if (method == RS_DEMOSAIC_NONE) + if (method == RS_DEMOSAIC_NONE) if (! ( (filters & 0xff ) == ((filters >> 8) & 0xff) && ((filters >> 16) & 0xff) == ((filters >> 24) & 0xff) && (filters & 0xff) == ((filters >> 24) &0xff))) method = RS_DEMOSAIC_PPG; - /* Populate new image with bayer data */ - if (method != RS_DEMOSAIC_NONE) - { - for(row=0; rowh; row++) - { - src = GET_PIXEL(input, 0, row); - dest = GET_PIXEL(output, 0, row); - for(col=0;colw;col++) - { - dest[fc_INDI(filters, row, col)] = *src; - dest += output->pixelsize; - src++; - } - } - } - switch (method) { case RS_DEMOSAIC_BILINEAR: - lin_interpolate_INDI(output, filters, 3); + lin_interpolate_INDI(input, output, filters, 3); break; case RS_DEMOSAIC_PPG: - ppg_interpolate_INDI(output, filters, 3); + ppg_interpolate_INDI(input,output, filters, 3); break; case RS_DEMOSAIC_NONE: none_interpolate_INDI(input, output, filters, 3); @@ -247,7 +230,7 @@ /* Do nothing */ break; } - + g_object_unref(input); return response; } @@ -292,19 +275,21 @@ static void -border_interpolate_INDI (RS_IMAGE16 *image, const unsigned int filters, int colors, int border) +border_interpolate_INDI (const ThreadInfo* t, int colors, int border) { int row, col, y, x, f, c, sum[8]; + RS_IMAGE16* image = t->output; + guint filters = t->filters; - for (row=0; row < image->h; row++) - for (col=0; col < image->w; col++) + for (row=t->start_y; row < t->end_y; row++) + for (col=0; col < image->w; col++) { if (col==border && row >= border && row < image->h-border) col = image->w-border; memset (sum, 0, sizeof sum); for (y=row-1; y != row+2; y++) for (x=col-1; x != col+2; x++) - if (y >= 0 && y < image->h && x >= 0 && x < image->w) + if (y >= 0 && y < image->h && x >= 0 && x < image->w) { f = FC(y, x); sum[f] += GET_PIXEL(image, x, y)[f]; @@ -318,13 +303,23 @@ } static void -lin_interpolate_INDI(RS_IMAGE16 *image, const unsigned int filters, const int colors) /*UF*/ +lin_interpolate_INDI(RS_IMAGE16 *input, RS_IMAGE16 *output, const unsigned int filters, const int colors) /*UF*/ { + ThreadInfo *t = g_new(ThreadInfo, 1); + t->image = input; + t->output = output; + t->filters = filters; + t->start_y = 0; + t->end_y = input->w; + + expand_cfa_data(t); + RS_IMAGE16* image = output; + int code[16][16][32], *ip, sum[4]; int c, i, x, y, row, col, shift, color; ushort *pix; - border_interpolate_INDI(image, filters, colors, 1); + border_interpolate_INDI(t, colors, 1); for (row=0; row < 16; row++) for (col=0; col < 16; col++) { ip = code[row][col]; @@ -357,6 +352,28 @@ } } +static void +expand_cfa_data(const ThreadInfo* t) { + + RS_IMAGE16* input = t->image; + RS_IMAGE16* output = t->output; + guint filters = t->filters; + guint col, row; + + /* Populate new image with bayer data */ + for(row=t->start_y; rowend_y; row++) + { + gushort* src = GET_PIXEL(input, 0, row); + gushort* dest = GET_PIXEL(output, 0, row); + for(col=0;colw;col++) + { + dest[fc_INDI(filters, row, col)] = *src; + dest += output->pixelsize; + src++; + } + } +} + /* Patterned Pixel Grouping Interpolation by Alain Desbiolles */ @@ -368,7 +385,7 @@ static void interpolate_INDI_part(ThreadInfo *t) { - RS_IMAGE16 *image = t->image; + RS_IMAGE16 *image = t->output; const unsigned int filters = t->filters; const int start_y = t->start_y; const int end_y = t->end_y; @@ -433,7 +450,7 @@ ABS(pix[ d][1] - pix[0][1]); guessB = pix[-d][c] + pix[d][c] + 2*pix[0][1] - pix[-d][1] - pix[d][1]; - + if (diffA > diffB) pix[0][c] = CLIP(guessB >> 1); else @@ -446,7 +463,9 @@ start_interp_thread(gpointer _thread_info) { ThreadInfo* t = _thread_info; - + hotpixel_detect(t); + expand_cfa_data(t); + border_interpolate_INDI (t, 3, 3); interpolate_INDI_part(t); g_thread_exit(NULL); @@ -454,14 +473,12 @@ } static void -ppg_interpolate_INDI(RS_IMAGE16 *image, const unsigned int filters, const int colors) +ppg_interpolate_INDI(RS_IMAGE16 *image, RS_IMAGE16 *output, const unsigned int filters, const int colors) { guint i, y_offset, y_per_thread, threaded_h; const guint threads = rs_get_number_of_processor_cores(); ThreadInfo *t = g_new(ThreadInfo, threads); - border_interpolate_INDI (image, filters, colors, 3); - /* Subtract 3 from top and bottom */ threaded_h = image->h-6; y_per_thread = (threaded_h + threads-1)/threads; @@ -470,6 +487,7 @@ for (i = 0; i < threads; i++) { t[i].image = image; + t[i].output = output; t[i].filters = filters; t[i].start_y = y_offset; y_offset += y_per_thread; @@ -494,28 +512,28 @@ gushort *dest; ThreadInfo* t = _thread_info; - gint ops = t->none_out->pixelsize; - gint ors = t->none_out->rowstride; + gint ops = t->output->pixelsize; + gint ors = t->output->rowstride; guint filters = t->filters; for(row=t->start_y; row < t->end_y; row++) { src = GET_PIXEL(t->image, 0, row); - dest = GET_PIXEL(t->none_out, 0, row); + dest = GET_PIXEL(t->output, 0, row); guint first = FC(row, 0); guint second = FC(row, 1); - gint col_end = t->none_out->w - 2; + gint col_end = t->output->w - 2; if (first == 1) { // Green first for(col=0 ; col < col_end; col += 2) { dest[1] = dest[1+ops]= *src; /* Move to next pixel */ - src++; + src++; dest += ops; - dest[second] = dest[second+ops] = - dest[second+ors] = dest[second+ops+ors] = *src; + dest[second] = dest[second+ops] = + dest[second+ors] = dest[second+ops+ors] = *src; /* Move to next pixel */ dest += ops; @@ -524,8 +542,8 @@ } else { for(col=0 ; col < col_end; col += 2) { - dest[first] = dest[first+ops] = - dest[first+ors] = dest[first+ops+ors] = *src; + dest[first] = dest[first+ops] = + dest[first+ors] = dest[first+ops+ors] = *src; dest += ops; src++; @@ -559,7 +577,7 @@ t[i].image = in; t[i].filters = filters; t[i].start_y = y_offset; - t[i].none_out = out; + t[i].output = out; y_offset += y_per_thread; y_offset = MIN(out->h-1, y_offset); t[i].end_y = y_offset; @@ -573,3 +591,62 @@ g_free(t); } + +static void +hotpixel_detect(const ThreadInfo* t) +{ + + RS_IMAGE16 *image = t->image; + + gint x, y, end_y; + y = MAX( 4, t->start_y); + end_y = MIN(t->end_y, image->h - 4); + + for(; y < end_y; y++) + { + gint col_end = image->w - 4; + gushort* img = GET_PIXEL(image, 0, y); + gint p = image->rowstride * 2; + for (x = 4; x < col_end ; x++) { + /* Calculate minimum difference to surrounding pixels */ + gint left = (int)img[x - 2]; + gint c = (int)img[x]; + gint right = (int)img[x + 2]; + gint up = (int)img[x - p]; + gint down = (int)img[x + p]; + + gint d = ABS(c - left); + d = MIN(d, ABS(c - right)); + d = MIN(d, ABS(c - up)); + d = MIN(d, ABS(c - down)); + + /* Also calculate maximum difference between surrounding pixels themselves */ + gint d2 = ABS(left - right); + d2 = MAX(d2, ABS(up - down)); + + /* If difference larger than surrounding pixels by a factor of 4, + replace with left/right pixel interpolation */ + + if ((d > d2 * 10) && (d > 2000)) { + /* Do extended test! */ + left = (int)img[x - 4]; + right = (int)img[x + 4]; + up = (int)img[x - p * 2]; + down = (int)img[x + p * 2]; + + d = MIN(d, ABS(c - left)); + d = MIN(d, ABS(c - right)); + d = MIN(d, ABS(c - up)); + d = MIN(d, ABS(c - down)); + + d2 = MAX(d2, ABS(left - right)); + d2 = MAX(d2, ABS(up - down)); + + if ((d > d2 * 10) && (d > 2000)) { + img[x] = (gushort)(((gint)img[x-2] + (gint)img[x+2] + 1) >> 1); + } + } + + } + } +} From klauspost at gmail.com Sun Sep 20 23:07:39 2009 From: klauspost at gmail.com (Klaus Post) Date: Sun, 20 Sep 2009 23:07:39 +0200 Subject: [Rawstudio-commit] r2636 - trunk/plugins/resample Message-ID: Author: post Date: 2009-09-20 23:07:39 +0200 (Sun, 20 Sep 2009) New Revision: 2636 Modified: trunk/plugins/resample/resample.c Log: Avoid missing last pixel in vertical resampler. Modified: trunk/plugins/resample/resample.c =================================================================== --- trunk/plugins/resample/resample.c 2009-09-20 17:56:12 UTC (rev 2635) +++ trunk/plugins/resample/resample.c 2009-09-20 21:07:39 UTC (rev 2636) @@ -339,7 +339,7 @@ afterVertical = rs_image16_new(input_width, resample->new_height, input->channels, input->pixelsize); // Only even count - guint output_x_per_thread = ((input_width + threads + 1) / threads ) & 0xfffe; + guint output_x_per_thread = ((input_width + threads * 2 - 1 ) / threads ) & 0xfffe; guint output_x_offset = 0; GTimer *gt = g_timer_new(); From anders at brander.dk Mon Sep 21 13:34:13 2009 From: anders at brander.dk (Anders Brander) Date: Mon, 21 Sep 2009 13:34:13 +0200 Subject: [Rawstudio-commit] r2637 - trunk/plugins/resample Message-ID: Author: abrander Date: 2009-09-21 13:34:13 +0200 (Mon, 21 Sep 2009) New Revision: 2637 Modified: trunk/plugins/resample/resample.c Log: Re-enabled RSResample for non-SSE2 archs. Modified: trunk/plugins/resample/resample.c =================================================================== --- trunk/plugins/resample/resample.c 2009-09-20 21:07:39 UTC (rev 2636) +++ trunk/plugins/resample/resample.c 2009-09-21 11:34:13 UTC (rev 2637) @@ -21,7 +21,9 @@ #include #include +#if defined (__SSE2__) #include +#endif /* __SSE2__ */ #define RS_TYPE_RESAMPLE (rs_resample_type) From klauspost at gmail.com Mon Sep 21 16:01:28 2009 From: klauspost at gmail.com (Klaus Post) Date: Mon, 21 Sep 2009 16:01:28 +0200 Subject: [Rawstudio-commit] r2637 - trunk/plugins/resample In-Reply-To: References: Message-ID: Ah - thanks :) Jeg havde lavet det hele som inline assembler indtil jeg fandt ud af, at 1) Det var enormt b?vlet at overf?re en 32bit int, som skal l?gges til en (64bit) pointer. Jeg fik det til at virke, men kun ved at bruge eksplicitte registernavne (dvs %%rax, %%eax og ikke %1) 2) Der er ikke nogen 16bit unsigned, 16bit signed gangeoperation (og slet ikke 32bit x 32 bit) i SSE2. S? jeg skulle skrive det hele om alligevel, s? kunne jeg lige s? godt pr?ve gcc-intrinsics af. Og den g?r det rent faktisk rigtig godt med registerallokeringen, og alt andet - jeg tror faktisk kun jeg fandt en enkelt un?dvending movaps. Den laver ogs? en ret fin instruction pairing, s? den shuffler rundt p? instruktionerne for at undg? de v?rste stalls - selv om det efterh?nden kun er n?dvendigt p? Atom-processorer. Til geng?ld er det rigtig ?ndsvagt, at den skelner mellem _m128 og _m128i. Regards, Klaus Post http://www.klauspost.com On Mon, Sep 21, 2009 at 1:34 PM, Anders Brander wrote: > Author: abrander > Date: 2009-09-21 13:34:13 +0200 (Mon, 21 Sep 2009) > New Revision: 2637 > > Modified: > ? trunk/plugins/resample/resample.c > Log: > Re-enabled RSResample for non-SSE2 archs. > > Modified: trunk/plugins/resample/resample.c > =================================================================== > --- trunk/plugins/resample/resample.c ? 2009-09-20 21:07:39 UTC (rev 2636) > +++ trunk/plugins/resample/resample.c ? 2009-09-21 11:34:13 UTC (rev 2637) > @@ -21,7 +21,9 @@ > > ?#include > ?#include > +#if defined (__SSE2__) > ?#include > +#endif /* __SSE2__ */ > > > ?#define RS_TYPE_RESAMPLE (rs_resample_type) > > > _______________________________________________ > Rawstudio-commit mailing list > Rawstudio-commit at rawstudio.org > http://rawstudio.org/cgi-bin/mailman/listinfo/rawstudio-commit > From klauspost at gmail.com Mon Sep 21 18:16:10 2009 From: klauspost at gmail.com (Klaus Post) Date: Mon, 21 Sep 2009 18:16:10 +0200 Subject: [Rawstudio-commit] r2638 - trunk/plugins/resample Message-ID: Author: post Date: 2009-09-21 18:16:09 +0200 (Mon, 21 Sep 2009) New Revision: 2638 Modified: trunk/plugins/resample/resample.c Log: Fix underflow in SSE2 resampler (only for remaining pixels for each thread). Modified: trunk/plugins/resample/resample.c =================================================================== --- trunk/plugins/resample/resample.c 2009-09-21 11:34:13 UTC (rev 2637) +++ trunk/plugins/resample/resample.c 2009-09-21 16:16:09 UTC (rev 2638) @@ -848,7 +848,7 @@ { acc1 += (gfloat)in[i*input->rowstride]* wg[i]; } - out[x] = (gushort)(acc1); + out[x] = (gushort)clampbits((int)(acc1), 16); in++; } wg+=fir_filter_size; From klauspost at gmail.com Mon Sep 21 18:17:18 2009 From: klauspost at gmail.com (Klaus Post) Date: Mon, 21 Sep 2009 18:17:18 +0200 Subject: [Rawstudio-commit] r2639 - trunk/plugins/demosaic Message-ID: Author: post Date: 2009-09-21 18:17:18 +0200 (Mon, 21 Sep 2009) New Revision: 2639 Modified: trunk/plugins/demosaic/demosaic.c Log: Fix junk pixels on bottom/left corner in fast demosaic mode. Modified: trunk/plugins/demosaic/demosaic.c =================================================================== --- trunk/plugins/demosaic/demosaic.c 2009-09-21 16:16:09 UTC (rev 2638) +++ trunk/plugins/demosaic/demosaic.c 2009-09-21 16:17:18 UTC (rev 2639) @@ -522,9 +522,11 @@ dest = GET_PIXEL(t->output, 0, row); guint first = FC(row, 0); guint second = FC(row, 1); - gint col_end = t->output->w - 2; + gint col_end = t->output->w & 0xfffe; - if (first == 1) { // Green first + /* Green first or second?*/ + if (first == 1) { + /* Green first, then red or blue */ for(col=0 ; col < col_end; col += 2) { dest[1] = dest[1+ops]= *src; @@ -539,6 +541,12 @@ dest += ops; src++; } + /* If uneven pixel width, copy last pixel */ + if (t->output->w & 1) { + dest[0] = dest[-ops]; + dest[1] = dest[-ops+1]; + dest[2] = dest[-ops+2]; + } } else { for(col=0 ; col < col_end; col += 2) { @@ -553,7 +561,17 @@ dest += ops; src++; } + /* If uneven pixel width, copy last pixel */ + if (t->output->w & 1) { + dest[0] = dest[-ops]; + dest[1] = dest[-ops+1]; + dest[2] = dest[-ops+2]; + } } + /* Duplicate last line */ + if (t->end_y == t->output->h - 1) { + memcpy(GET_PIXEL(t->output, 0, t->end_y), GET_PIXEL(t->output, 0, t->end_y - 1), t->output->rowstride * 2); + } } g_thread_exit(NULL); From klauspost at gmail.com Mon Sep 21 23:37:21 2009 From: klauspost at gmail.com (Klaus Post) Date: Mon, 21 Sep 2009 23:37:21 +0200 Subject: [Rawstudio-commit] r2640 - trunk/plugins/lensfun Message-ID: Author: post Date: 2009-09-21 23:37:21 +0200 (Mon, 21 Sep 2009) New Revision: 2640 Modified: trunk/plugins/lensfun/lensfun.c Log: Fixed last line not being rendered by lensfun. Factored out a few constants. Modified: trunk/plugins/lensfun/lensfun.c =================================================================== --- trunk/plugins/lensfun/lensfun.c 2009-09-21 16:17:18 UTC (rev 2639) +++ trunk/plugins/lensfun/lensfun.c 2009-09-21 21:37:21 UTC (rev 2640) @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006-2009 Anders Brander and + * Copyright (C) 2006-2009 Anders Brander and * Anders Kvist * * This program is free software; you can redistribute it and/or @@ -215,16 +215,20 @@ gint row, col; ThreadInfo* t = _thread_info; gfloat *pos = g_new0(gfloat, t->input->w*6); + const gint pixelsize = t->input->pixelsize; for(row=t->start_y;rowend_y;row++) { gushort *target; lf_modifier_apply_subpixel_geometry_distortion(t->mod, 0.0, (gfloat) row, t->input->w, 1, pos); + target = GET_PIXEL(t->output, 0, row); + gfloat* l_pos = pos; for(col=0;colinput->w;col++) { - target = GET_PIXEL(t->output, col, row); - rs_image16_bilinear_full(t->input, target, &pos[col*6]); + rs_image16_bilinear_full(t->input, target, l_pos); + target += pixelsize; + l_pos += 6; } } @@ -389,7 +393,7 @@ t[i].mod = mod; t[i].start_y = y_offset; y_offset += y_per_thread; - y_offset = MIN(input->h-1, y_offset); + y_offset = MIN(input->h, y_offset); t[i].end_y = y_offset; t[i].threadid = g_thread_create(thread_func, &t[i], TRUE, NULL); @@ -436,14 +440,16 @@ { gint ipos_x, ipos_y ; gint i; + gint m_w = (in->w-1); + gint m_h = (in->h-1); for (i = 0; i < 3; i++) { - ipos_x = CLAMP((gint)(pos[i*2]*256.0f), 0, (in->w-1)<<8); - ipos_y = CLAMP((gint)(pos[i*2+1]*256.0f), 0, (in->h-1)<<8); + ipos_x = CLAMP((gint)(pos[i*2]*256.0f), 0, m_w << 8); + ipos_y = CLAMP((gint)(pos[i*2+1]*256.0f), 0, m_h << 8); /* Calculate next pixel offset */ - const gint nx = MIN((ipos_x>>8) + 1, in->w-1); - const gint ny = MIN((ipos_y>>8) + 1, in->h-1); + const gint nx = MIN((ipos_x>>8) + 1, m_w); + const gint ny = MIN((ipos_y>>8) + 1, m_w); gushort* a = GET_PIXEL(in, ipos_x>>8, ipos_y>>8); gushort* b = GET_PIXEL(in, nx , ipos_y>>8); From klauspost at gmail.com Mon Sep 21 23:44:05 2009 From: klauspost at gmail.com (Klaus Post) Date: Mon, 21 Sep 2009 23:44:05 +0200 Subject: [Rawstudio-commit] r2641 - trunk/plugins/lensfun Message-ID: Author: post Date: 2009-09-21 23:44:05 +0200 (Mon, 21 Sep 2009) New Revision: 2641 Modified: trunk/plugins/lensfun/lensfun.c Log: Pixelsize was output, and not input. Modified: trunk/plugins/lensfun/lensfun.c =================================================================== --- trunk/plugins/lensfun/lensfun.c 2009-09-21 21:37:21 UTC (rev 2640) +++ trunk/plugins/lensfun/lensfun.c 2009-09-21 21:44:05 UTC (rev 2641) @@ -215,7 +215,7 @@ gint row, col; ThreadInfo* t = _thread_info; gfloat *pos = g_new0(gfloat, t->input->w*6); - const gint pixelsize = t->input->pixelsize; + const gint pixelsize = t->output->pixelsize; for(row=t->start_y;rowend_y;row++) { From klauspost at gmail.com Tue Sep 22 08:38:49 2009 From: klauspost at gmail.com (Klaus Post) Date: Tue, 22 Sep 2009 08:38:49 +0200 Subject: [Rawstudio-commit] r2642 - trunk/plugins/lensfun Message-ID: Author: post Date: 2009-09-22 08:38:49 +0200 (Tue, 22 Sep 2009) New Revision: 2642 Modified: trunk/plugins/lensfun/lensfun.c Log: Fixed typo. Modified: trunk/plugins/lensfun/lensfun.c =================================================================== --- trunk/plugins/lensfun/lensfun.c 2009-09-21 21:44:05 UTC (rev 2641) +++ trunk/plugins/lensfun/lensfun.c 2009-09-22 06:38:49 UTC (rev 2642) @@ -449,7 +449,7 @@ /* Calculate next pixel offset */ const gint nx = MIN((ipos_x>>8) + 1, m_w); - const gint ny = MIN((ipos_y>>8) + 1, m_w); + const gint ny = MIN((ipos_y>>8) + 1, m_h); gushort* a = GET_PIXEL(in, ipos_x>>8, ipos_y>>8); gushort* b = GET_PIXEL(in, nx , ipos_y>>8); From klauspost at gmail.com Tue Sep 22 19:46:36 2009 From: klauspost at gmail.com (Klaus Post) Date: Tue, 22 Sep 2009 19:46:36 +0200 Subject: [Rawstudio-commit] r2643 - trunk/src Message-ID: Author: post Date: 2009-09-22 19:46:36 +0200 (Tue, 22 Sep 2009) New Revision: 2643 Modified: trunk/src/gtk-interface.c Log: Display Watch cursor while image is loading. Modified: trunk/src/gtk-interface.c =================================================================== --- trunk/src/gtk-interface.c 2009-09-22 06:38:49 UTC (rev 2642) +++ trunk/src/gtk-interface.c 2009-09-22 17:46:36 UTC (rev 2643) @@ -68,7 +68,7 @@ gui_set_busy(gboolean rawstudio_is_busy) { static guint status = 0; - + if (rawstudio_is_busy) busycount++; else @@ -81,12 +81,16 @@ { if (status==0) status = gui_status_push(_("Background renderer active")); + GdkCursor* cursor = gdk_cursor_new(GDK_WATCH); + gdk_window_set_cursor(GTK_WIDGET(rawstudio_window)->window, cursor); + gdk_cursor_unref(cursor); } else { if (status>0) gui_status_pop(status); status=0; + gdk_window_set_cursor(GTK_WIDGET(rawstudio_window)->window, NULL); } return; } @@ -200,6 +204,7 @@ g_string_free(window_title, TRUE); } } + GTK_CATCHUP(); gui_set_busy(FALSE); } From klauspost at gmail.com Tue Sep 22 20:03:58 2009 From: klauspost at gmail.com (Klaus Post) Date: Tue, 22 Sep 2009 20:03:58 +0200 Subject: [Rawstudio-commit] r2644 - trunk/plugins/demosaic Message-ID: Author: post Date: 2009-09-22 20:03:58 +0200 (Tue, 22 Sep 2009) New Revision: 2644 Modified: trunk/plugins/demosaic/demosaic.c Log: Removed last "fast" demosaic artifacts. Modified: trunk/plugins/demosaic/demosaic.c =================================================================== --- trunk/plugins/demosaic/demosaic.c 2009-09-22 17:46:36 UTC (rev 2643) +++ trunk/plugins/demosaic/demosaic.c 2009-09-22 18:03:58 UTC (rev 2644) @@ -527,6 +527,10 @@ /* Green first or second?*/ if (first == 1) { /* Green first, then red or blue */ + /* Copy non-green to this and pixel below */ + dest[second] = dest[second+ors] = dest[second+ops]; + /* Copy green down */ + dest[1+ors] = *src; for(col=0 ; col < col_end; col += 2) { dest[1] = dest[1+ops]= *src; @@ -568,9 +572,11 @@ dest[2] = dest[-ops+2]; } } - /* Duplicate last line */ - if (t->end_y == t->output->h - 1) { + /* Duplicate first & last line */ + if (t->end_y == t->output->h - 1) + { memcpy(GET_PIXEL(t->output, 0, t->end_y), GET_PIXEL(t->output, 0, t->end_y - 1), t->output->rowstride * 2); + memcpy(GET_PIXEL(t->output, 0, 0), GET_PIXEL(t->output, 0, 1), t->output->rowstride * 2); } } g_thread_exit(NULL); From klauspost at gmail.com Tue Sep 22 21:04:06 2009 From: klauspost at gmail.com (Klaus Post) Date: Tue, 22 Sep 2009 21:04:06 +0200 Subject: [Rawstudio-commit] r2645 - trunk/src Message-ID: Author: post Date: 2009-09-22 21:04:05 +0200 (Tue, 22 Sep 2009) New Revision: 2645 Modified: trunk/src/gtk-interface.c Log: Added busy pointer when opening new directory and when using accellerators (next/previous) Modified: trunk/src/gtk-interface.c =================================================================== --- trunk/src/gtk-interface.c 2009-09-22 18:03:58 UTC (rev 2644) +++ trunk/src/gtk-interface.c 2009-09-22 19:04:05 UTC (rev 2645) @@ -79,8 +79,6 @@ if (busycount) { - if (status==0) - status = gui_status_push(_("Background renderer active")); GdkCursor* cursor = gdk_cursor_new(GDK_WATCH); gdk_window_set_cursor(GTK_WIDGET(rawstudio_window)->window, cursor); gdk_cursor_unref(cursor); @@ -145,6 +143,7 @@ RS_PHOTO *photo; gchar *label; + gui_set_busy(TRUE); rs_preview_widget_set_photo(RS_PREVIEW_WIDGET(rs->preview), NULL); photo = rs_photo_load_from_file(filename); @@ -162,6 +161,8 @@ rs_set_photo(rs, photo); rs_toolbox_set_photo(RS_TOOLBOX(rs->tools), photo); + GTK_CATCHUP(); + gui_set_busy(FALSE); return TRUE; } @@ -934,12 +935,18 @@ { GString *window_title = g_string_new(_("Rawstudio")); rs_store_remove(rs->store, NULL, NULL); + gui_status_push(_("Opening directory...")); + gui_set_busy(TRUE); + GTK_CATCHUP(); if (rs_store_load_directory(rs->store, path) >= 0) rs_conf_set_string(CONF_LWD, path); g_string_append(window_title, " - "); g_string_append(window_title, path); gtk_window_set_title (GTK_WINDOW (rawstudio_window), window_title->str); g_string_free(window_title, TRUE); + GTK_CATCHUP(); + gui_status_push(_("Ready")); + gui_set_busy(FALSE); } static void @@ -1149,6 +1156,10 @@ /* rs_store_load_directory() MUST have the GDK lock! */ gdk_threads_enter(); + gui_set_busy(TRUE); + GTK_CATCHUP(); + gui_status_push(_("Opening directory...")); + if (rs_store_load_directory(rs->store, lwd)) { gint last_priority_page = 0; @@ -1160,6 +1171,9 @@ } else rs_conf_set_integer(CONF_LAST_PRIORITY_PAGE, 0); + GTK_CATCHUP(); + gui_set_busy(FALSE); + gui_status_push(_("Ready")); gdk_threads_leave(); rs_dir_selector_expand_path(RS_DIR_SELECTOR(dir_selector), lwd); g_free(lwd); From klauspost at gmail.com Tue Sep 22 22:20:39 2009 From: klauspost at gmail.com (Klaus Post) Date: Tue, 22 Sep 2009 22:20:39 +0200 Subject: [Rawstudio-commit] r2646 - trunk/src Message-ID: Author: post Date: 2009-09-22 22:20:39 +0200 (Tue, 22 Sep 2009) New Revision: 2646 Modified: trunk/src/gtk-interface.c trunk/src/rs-store.c Log: Move to next image on delete (Bug#305), icon view also selects image on prev/next keyboard shortcut. Modified: trunk/src/gtk-interface.c =================================================================== --- trunk/src/gtk-interface.c 2009-09-22 19:04:05 UTC (rev 2645) +++ trunk/src/gtk-interface.c 2009-09-22 20:20:39 UTC (rev 2646) @@ -235,10 +235,21 @@ GList *selected = NULL; gint i, num_selected; GString *gs; + const gchar* next_name = NULL; selected = rs_store_get_selected_iters(rs->store); num_selected = g_list_length(selected); + /* If we are deleting images, select next */ + if (num_selected && prio == 51) + { + GList *selected_names = rs_store_get_selected_names(rs->store); + if (g_list_length(selected_names)) + next_name = (const gchar*)(g_list_last(selected_names)->data); + else if (rs->photo) + next_name = rs->photo->filename; + } + /* Iterate throuh all selected thumbnails */ for(i=0;istr); + /* Load next image if deleting */ + if (next_name) + rs_store_select_prevnext(rs->store, next_name, 2); + g_string_free(gs, TRUE); } Modified: trunk/src/rs-store.c =================================================================== --- trunk/src/rs-store.c 2009-09-22 19:04:05 UTC (rev 2645) +++ trunk/src/rs-store.c 2009-09-22 20:20:39 UTC (rev 2646) @@ -1577,6 +1577,8 @@ gtk_icon_view_scroll_to_path(iconview, newpath, FALSE, 0.5f, 0.5f); #endif gtk_icon_view_select_path(iconview, newpath); + gtk_icon_view_set_cursor (iconview, newpath, NULL, FALSE); + gtk_widget_grab_focus(GTK_WIDGET(iconview)); /* Free the new path */ gtk_tree_path_free(newpath); } From klauspost at gmail.com Tue Sep 22 22:33:01 2009 From: klauspost at gmail.com (Klaus Post) Date: Tue, 22 Sep 2009 22:33:01 +0200 Subject: [Rawstudio-commit] r2647 - trunk/plugins/demosaic Message-ID: Author: post Date: 2009-09-22 22:33:00 +0200 (Tue, 22 Sep 2009) New Revision: 2647 Modified: trunk/plugins/demosaic/demosaic.c Log: Demosaic: Copy Correct CFA data in border. Modified: trunk/plugins/demosaic/demosaic.c =================================================================== --- trunk/plugins/demosaic/demosaic.c 2009-09-22 20:20:39 UTC (rev 2646) +++ trunk/plugins/demosaic/demosaic.c 2009-09-22 20:33:00 UTC (rev 2647) @@ -528,7 +528,7 @@ if (first == 1) { /* Green first, then red or blue */ /* Copy non-green to this and pixel below */ - dest[second] = dest[second+ors] = dest[second+ops]; + dest[second] = dest[second+ors] = src[1]; /* Copy green down */ dest[1+ors] = *src; for(col=0 ; col < col_end; col += 2) From anders at brander.dk Tue Sep 22 22:59:47 2009 From: anders at brander.dk (Anders Brander) Date: Tue, 22 Sep 2009 22:59:47 +0200 Subject: [Rawstudio-commit] r2648 - trunk/librawstudio Message-ID: Author: abrander Date: 2009-09-22 22:59:47 +0200 (Tue, 22 Sep 2009) New Revision: 2648 Modified: trunk/librawstudio/rs-types.h Log: Added RSTiff, RS_VECTOR3, RS_xy_COORD and RS_XYZ_VECTOR. Modified: trunk/librawstudio/rs-types.h =================================================================== --- trunk/librawstudio/rs-types.h 2009-09-22 20:33:00 UTC (rev 2647) +++ trunk/librawstudio/rs-types.h 2009-09-22 20:59:47 UTC (rev 2648) @@ -37,12 +37,45 @@ /* Defined in rs-color-transform.c */ typedef struct _RSColorTransform RSColorTransform; +typedef struct { + GObject parent; + + gboolean dispose_has_run; + + gchar *filename; + guchar *map; + gsize map_length; + + gushort byte_order; + guchar tiff_version; + guint first_ifd_offset; + guint num_ifd; + GList *ifds; + + GType ifd_type; + GType ifd_entry_type; +} RSTiff; + typedef struct {double coeff[3][3]; } RS_MATRIX3; typedef struct {int coeff[3][3]; } RS_MATRIX3Int; typedef struct {double coeff[4][4]; } RS_MATRIX4; typedef struct {int coeff[4][4]; } RS_MATRIX4Int; typedef struct { + union { gfloat x; gfloat X; gfloat R; gfloat h; gfloat fHueShift; }; + union { gfloat y; gfloat Y; gfloat G; gfloat s; gfloat fSatScale; }; + union { gfloat z; gfloat Z; gfloat B; gfloat v; gfloat fValScale; }; +} RS_VECTOR3; + +typedef struct { + gfloat x; + gfloat y; + gfloat padding_to_match_RS_VECTOR3; +} RS_xy_COORD; + +typedef RS_VECTOR3 RS_XYZ_VECTOR; + +typedef struct { gint x1; gint y1; gint x2; From anders at brander.dk Tue Sep 22 23:00:53 2009 From: anders at brander.dk (Anders Brander) Date: Tue, 22 Sep 2009 23:00:53 +0200 Subject: [Rawstudio-commit] r2649 - trunk/librawstudio Message-ID: Author: abrander Date: 2009-09-22 23:00:53 +0200 (Tue, 22 Sep 2009) New Revision: 2649 Modified: trunk/librawstudio/rs-math.c trunk/librawstudio/rs-math.h Log: Added several functions for RS_VECTOR3 and RS_MATRIX3. Modified: trunk/librawstudio/rs-math.c =================================================================== --- trunk/librawstudio/rs-math.c 2009-09-22 20:59:47 UTC (rev 2648) +++ trunk/librawstudio/rs-math.c 2009-09-22 21:00:53 UTC (rev 2649) @@ -34,6 +34,28 @@ static void matrix4_affine_transform_3dpoint(RS_MATRIX4 *matrix, double x, double y, double z, double *tx, double *ty, double *tz); void +printvec(const char *str, const RS_VECTOR3 *vec) +{ + printf("%s: [ %.05f %.05f %.05f ]\n", str, vec->x, vec->y, vec->z); +} + +void +printmat3(RS_MATRIX3 *mat) +{ + int x, y; + + printf("M: matrix(\n"); + for(y=0; y<3; y++) + { + printf("\t[ %f, ",mat->coeff[y][0]); + printf("%f, ",mat->coeff[y][1]); + printf("%f ",mat->coeff[y][2]); + printf("],\n"); + } + printf(")\n"); +} + +void printmat(RS_MATRIX4 *mat) { int x, y; @@ -41,12 +63,36 @@ for(y=0; y<4; y++) { for(x=0; x<4; x++) - printf("%f ",mat->coeff[x][y]); + printf("%f ",mat->coeff[y][x]); printf("\n"); } printf("\n"); } +float +vector3_max(const RS_VECTOR3 *vec) +{ + float max = 0.0; + + max = MAX(max, vec->x); + max = MAX(max, vec->y); + max = MAX(max, vec->z); + + return max; +} + +RS_MATRIX3 +vector3_as_diagonal(const RS_VECTOR3 *vec) +{ + RS_MATRIX3 result; + matrix3_identity(&result); + result.coeff[0][0] = vec->x; + result.coeff[1][1] = vec->y; + result.coeff[2][2] = vec->z; + + return result; +} + void matrix4_identity (RS_MATRIX4 *matrix) { @@ -376,9 +422,47 @@ *matrix = identity; } -static void -matrix3_multiply(const RS_MATRIX3 *left, RS_MATRIX3 *right, RS_MATRIX3 *result) +RS_MATRIX3 +matrix3_invert(const RS_MATRIX3 *matrix) { + int j,k; + + double a00 = matrix->coeff[0][0]; + double a01 = matrix->coeff[0][1]; + double a02 = matrix->coeff[0][2]; + double a10 = matrix->coeff[1][0]; + double a11 = matrix->coeff[1][1]; + double a12 = matrix->coeff[1][2]; + double a20 = matrix->coeff[2][0]; + double a21 = matrix->coeff[2][1]; + double a22 = matrix->coeff[2][2]; + + double temp[3][3]; + + temp[0][0] = a11 * a22 - a21 * a12; + temp[0][1] = a21 * a02 - a01 * a22; + temp[0][2] = a01 * a12 - a11 * a02; + temp[1][0] = a20 * a12 - a10 * a22; + temp[1][1] = a00 * a22 - a20 * a02; + temp[1][2] = a10 * a02 - a00 * a12; + temp[2][0] = a10 * a21 - a20 * a11; + temp[2][1] = a20 * a01 - a00 * a21; + temp[2][2] = a00 * a11 - a10 * a01; + + double det = (a00 * temp[0][0] + a01 * temp[1][0] + a02 * temp[2][0]); + + RS_MATRIX3 B; + + for (j = 0; j < 3; j++) + for (k = 0; k < 3; k++) + B.coeff[j][k] = temp[j][k] / det; + + return B; +} + +void +matrix3_multiply(const RS_MATRIX3 *left, const RS_MATRIX3 *right, RS_MATRIX3 *result) +{ int i, j; RS_MATRIX3 tmp; double t1, t2, t3; @@ -400,7 +484,52 @@ return; } +RS_VECTOR3 +vector3_multiply_matrix(const RS_VECTOR3 *vec, const RS_MATRIX3 *matrix) +{ + RS_VECTOR3 result; + + result.x = vec->x * matrix->coeff[0][0] + vec->y * matrix->coeff[0][1] + vec->z * matrix->coeff[0][2]; + result.y = vec->x * matrix->coeff[1][0] + vec->y * matrix->coeff[1][1] + vec->z * matrix->coeff[1][2]; + result.z = vec->x * matrix->coeff[2][0] + vec->y * matrix->coeff[2][1] + vec->z * matrix->coeff[2][2]; + + return result; +} + float +matrix3_max(const RS_MATRIX3 *matrix) +{ + gfloat max = 0.0; + int i, j; + for (i = 0; i < 3; i++) + for (j = 0; j < 3; j++) + max = MAX(max, matrix->coeff[i][j]); + + return max; +} + +void +matrix3_scale(RS_MATRIX3 *matrix, const float scale, RS_MATRIX3 *result) +{ + int i, j; + for (i = 0; i < 3; i++) + for (j = 0; j < 3; j++) + result->coeff[i][j] = matrix->coeff[i][j] * scale; +} + +void +matrix3_interpolate(const RS_MATRIX3 *a, const RS_MATRIX3 *b, const float alpha, RS_MATRIX3 *result) +{ +#define LERP(a,b,g) (((b) - (a)) * (g) + (a)) + int i, j; + + for (i = 0; i < 3; i++) + for (j = 0; j < 3; j++) + result->coeff[i][j] = LERP(a->coeff[i][j], b->coeff[i][j], alpha); +#undef LERP +} + +float matrix3_weight(const RS_MATRIX3 *mat) { float weight = Modified: trunk/librawstudio/rs-math.h =================================================================== --- trunk/librawstudio/rs-math.h 2009-09-22 20:59:47 UTC (rev 2648) +++ trunk/librawstudio/rs-math.h 2009-09-22 21:00:53 UTC (rev 2649) @@ -24,7 +24,11 @@ #define MATRIX_RESOLUTION (8) /* defined in bits! */ +extern void printmat3(RS_MATRIX3 *mat); extern void printmat(RS_MATRIX4 *mat); +extern void printvec(const char *str, const RS_VECTOR3 *vec); +extern float vector3_max(const RS_VECTOR3 *vec); +extern RS_MATRIX3 vector3_as_diagonal(const RS_VECTOR3 *vec); extern void matrix4_identity (RS_MATRIX4 *matrix); extern void matrix4_multiply(const RS_MATRIX4 *left, RS_MATRIX4 *right, RS_MATRIX4 *result); void matrix4_color_invert(const RS_MATRIX4 *in, RS_MATRIX4 *out); @@ -35,6 +39,12 @@ extern void matrix4_color_exposure(RS_MATRIX4 *mat, double exp); extern void matrix3_to_matrix3int(RS_MATRIX3 *matrix, RS_MATRIX3Int *matrixi); extern void matrix3_identity (RS_MATRIX3 *matrix); +extern RS_MATRIX3 matrix3_invert(const RS_MATRIX3 *matrix); +extern void matrix3_multiply(const RS_MATRIX3 *left, const RS_MATRIX3 *right, RS_MATRIX3 *result); +extern RS_VECTOR3 vector3_multiply_matrix(const RS_VECTOR3 *vec, const RS_MATRIX3 *matrix); +extern void matrix3_scale(RS_MATRIX3 *matrix, const float scale, RS_MATRIX3 *result); +extern float matrix3_max(const RS_MATRIX3 *matrix); +void matrix3_interpolate(const RS_MATRIX3 *a, const RS_MATRIX3 *b, const float alpha, RS_MATRIX3 *result); extern float matrix3_weight(const RS_MATRIX3 *mat); extern void matrix3_affine_invert(RS_MATRIX3 *mat); extern void matrix3_affine_scale(RS_MATRIX3 *matrix, double xscale, double yscale); From klauspost at gmail.com Wed Sep 23 16:39:02 2009 From: klauspost at gmail.com (Klaus Post) Date: Wed, 23 Sep 2009 16:39:02 +0200 Subject: [Rawstudio-commit] r2650 - trunk/src Message-ID: Author: post Date: 2009-09-23 16:39:02 +0200 (Wed, 23 Sep 2009) New Revision: 2650 Modified: trunk/src/gtk-interface.c Log: If no photo was selected, deleting current didn't advance to next. Modified: trunk/src/gtk-interface.c =================================================================== --- trunk/src/gtk-interface.c 2009-09-22 21:00:53 UTC (rev 2649) +++ trunk/src/gtk-interface.c 2009-09-23 14:39:02 UTC (rev 2650) @@ -241,7 +241,7 @@ num_selected = g_list_length(selected); /* If we are deleting images, select next */ - if (num_selected && prio == 51) + if (prio == 51) { GList *selected_names = rs_store_get_selected_names(rs->store); if (g_list_length(selected_names)) From anders at brander.dk Wed Sep 23 17:10:54 2009 From: anders at brander.dk (Anders Brander) Date: Wed, 23 Sep 2009 17:10:54 +0200 Subject: [Rawstudio-commit] r2651 - trunk/librawstudio Message-ID: Author: abrander Date: 2009-09-23 17:10:54 +0200 (Wed, 23 Sep 2009) New Revision: 2651 Added: trunk/librawstudio/rs-color.c trunk/librawstudio/rs-color.h Modified: trunk/librawstudio/Makefile.am Log: Added various color related function. Modified: trunk/librawstudio/Makefile.am =================================================================== --- trunk/librawstudio/Makefile.am 2009-09-23 14:39:02 UTC (rev 2650) +++ trunk/librawstudio/Makefile.am 2009-09-23 15:10:54 UTC (rev 2651) @@ -27,6 +27,7 @@ rs-job-queue.h \ rs-utils.h \ rs-math.h \ + rs-color.h \ rs-settings.h \ rs-adobe-coeff.h \ rs-color-transform.h \ @@ -55,6 +56,7 @@ rs-job-queue.c rs-job-queue.h \ rs-utils.c rs-utils.h \ rs-math.c rs-math.h \ + rs-color.c rs-color.h \ rs-settings.c rs-settings.h \ rs-adobe-coeff.c rs-adobe-coeff.h \ rs-color-transform.c rs-color-transform.h \ Added: trunk/librawstudio/rs-color.c =================================================================== --- trunk/librawstudio/rs-color.c (rev 0) +++ trunk/librawstudio/rs-color.c 2009-09-23 15:10:54 UTC (rev 2651) @@ -0,0 +1,314 @@ +/* + * Copyright (C) 2006-2009 Anders Brander and + * Anders Kvist + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include +#include +#include "rs-color.h" + +/* We use XYZ with a D50 whitepoint as PCS (as recommended by ICC) */ + +const RS_XYZ_VECTOR XYZ_WP_D50 = {0.964296, 1.0, 0.825105}; /* Computed by DNG SDK */ + +/* Scale factor between distances in uv space to a more user friendly "tint" parameter. */ +static const gdouble tint_scale = -3000.0; + +/* Table from Wyszecki & Stiles, "Color Science", second edition, page 228. */ + +struct ruvt { + gdouble r; + gdouble u; + gdouble v; + gdouble t; +} temp_table[] = { + { 0, 0.18006, 0.26352, -0.24341 }, + { 10, 0.18066, 0.26589, -0.25479 }, + { 20, 0.18133, 0.26846, -0.26876 }, + { 30, 0.18208, 0.27119, -0.28539 }, + { 40, 0.18293, 0.27407, -0.30470 }, + { 50, 0.18388, 0.27709, -0.32675 }, + { 60, 0.18494, 0.28021, -0.35156 }, + { 70, 0.18611, 0.28342, -0.37915 }, + { 80, 0.18740, 0.28668, -0.40955 }, + { 90, 0.18880, 0.28997, -0.44278 }, + { 100, 0.19032, 0.29326, -0.47888 }, + { 125, 0.19462, 0.30141, -0.58204 }, + { 150, 0.19962, 0.30921, -0.70471 }, + { 175, 0.20525, 0.31647, -0.84901 }, + { 200, 0.21142, 0.32312, -1.0182 }, + { 225, 0.21807, 0.32909, -1.2168 }, + { 250, 0.22511, 0.33439, -1.4512 }, + { 275, 0.23247, 0.33904, -1.7298 }, + { 300, 0.24010, 0.34308, -2.0637 }, + { 325, 0.24702, 0.34655, -2.4681 }, + { 350, 0.25591, 0.34951, -2.9641 }, + { 375, 0.26400, 0.35200, -3.5814 }, + { 400, 0.27218, 0.35407, -4.3633 }, + { 425, 0.28039, 0.35577, -5.3762 }, + { 450, 0.28863, 0.35714, -6.7262 }, + { 475, 0.29685, 0.35823, -8.5955 }, + { 500, 0.30505, 0.35907, -11.324 }, + { 525, 0.31320, 0.35968, -15.628 }, + { 550, 0.32129, 0.36011, -23.325 }, + { 575, 0.32931, 0.36038, -40.770 }, + { 600, 0.33724, 0.36051, -116.45 } +}; + +void +rs_color_whitepoint_to_temp(const RS_xy_COORD *xy, gfloat *temp, gfloat *tint) +{ + /* Convert to uv space. */ + gdouble u = 2.0 * xy->x / (1.5 - xy->x + 6.0 * xy->y); + gdouble v = 3.0 * xy->y / (1.5 - xy->x + 6.0 * xy->y); + + /* Search for line pair coordinate is between. */ + gdouble last_dt = 0.0; + + gdouble last_dv = 0.0; + gdouble last_du = 0.0; + + guint index; + for (index = 1; index <= 30; index++) + { + /* Convert slope to delta-u and delta-v, with length 1. */ + gdouble du = 1.0; + gdouble dv = temp_table[index] . t; + + gdouble len = sqrt (1.0 + dv * dv); + + du /= len; + dv /= len; + + /* Find delta from black body point to test coordinate. */ + gdouble uu = u - temp_table[index] . u; + gdouble vv = v - temp_table[index] . v; + + /* Find distance above or below line. */ + + gdouble dt = - uu * dv + vv * du; + + /* If below line, we have found line pair. */ + + if (dt <= 0.0 || index == 30) + { + /* Find fractional weight of two lines. */ + if (dt > 0.0) + dt = 0.0; + + dt = -dt; + + gdouble f; + + if (index == 1) + f = 0.0; + else + f = dt / (last_dt + dt); + + /* Interpolate the temperature. */ + if (temp) + *temp = 1.0E6 / (temp_table[index - 1] . r * f + temp_table[index ] . r * (1.0 - f)); + + /* Find delta from black body point to test coordinate. */ + uu = u - (temp_table[index - 1] . u * f + temp_table[index] . u * (1.0 - f)); + vv = v - (temp_table[index - 1] . v * f + temp_table[index] . v * (1.0 - f)); + + /* Interpolate vectors along slope. */ + du = du * (1.0 - f) + last_du * f; + dv = dv * (1.0 - f) + last_dv * f; + + len = sqrt (du * du + dv * dv); + + du /= len; + dv /= len; + + /* Find distance along slope. */ + if (tint) + *tint = (uu * du + vv * dv) * tint_scale; + + break; + } + + /* Try next line pair. */ + + last_dt = dt; + + last_du = du; + last_dv = dv; + } +} + +RS_xy_COORD +rs_color_temp_to_whitepoint(gfloat temp, gfloat tint) +{ + RS_xy_COORD xy; + + /* Find inverse temperature to use as index. */ + gdouble r = 1.0E6 / temp; + + /* Convert tint to offset is uv space. */ + + gdouble offset = tint * (1.0 / tint_scale); + + /* Search for line pair containing coordinate. */ + + guint index; + for (index = 0; index <= 29; index++) + { + if (r < temp_table[index + 1] . r || index == 29) + { + /* Find relative weight of first line. */ + + gdouble f = (temp_table[index + 1].r - r) / (temp_table[index + 1].r - temp_table[index].r); + + /* Interpolate the black body coordinates. */ + + gdouble u = temp_table[index].u * f + temp_table[index + 1].u * (1.0 - f); + + gdouble v = temp_table[index].v * f + temp_table[index + 1].v * (1.0 - f); + + /* Find vectors along slope for each line. */ + + gdouble uu1 = 1.0; + gdouble vv1 = temp_table[index].t; + + gdouble uu2 = 1.0; + gdouble vv2 = temp_table[index + 1].t; + + gdouble len1 = sqrt (1.0 + vv1 * vv1); + gdouble len2 = sqrt (1.0 + vv2 * vv2); + + uu1 /= len1; + vv1 /= len1; + + uu2 /= len2; + vv2 /= len2; + + // Find vector from black body point. + gdouble uu3 = uu1 * f + uu2 * (1.0 - f); + gdouble vv3 = vv1 * f + vv2 * (1.0 - f); + + gdouble len3 = sqrt (uu3 * uu3 + vv3 * vv3); + + uu3 /= len3; + vv3 /= len3; + + // Adjust coordinate along this vector. + + u += uu3 * offset; + v += vv3 * offset; + + // Convert to xy coordinates. + + xy.x = 1.5 * u / (u - 4.0 * v + 2.0); + xy.y = v / (u - 4.0 * v + 2.0); + + break; + } + } + + return xy; +} + +RS_XYZ_VECTOR +xy_to_XYZ(const RS_xy_COORD *xy) +{ + RS_XYZ_VECTOR XYZ; + + /* Watch out for division by zero and clipping */ + gdouble x = CLAMP(xy->x, 0.000001, 0.999999); + gdouble y = CLAMP(xy->y, 0.000001, 0.999999); + + /* Correct out of range color coordinates */ + if ((x + y) > 0.999999) + { + gdouble scale = 0.999999 / (x + y); + x *= scale; + y *= scale; + } + + XYZ.X = x / y; + XYZ.Y = 1.0; + XYZ.Z = (1.0 - x - y) / y; + + return XYZ; +} + +RS_xy_COORD +XYZ_to_xy(const RS_XYZ_VECTOR *XYZ) +{ + RS_xy_COORD xy; + + gfloat sum = XYZ->X + XYZ->Y + XYZ->Z; + + if (sum > 0.0) + { + xy.x = XYZ->X / sum; + xy.y = XYZ->Y / sum; + } + else + xy = XYZ_to_xy(&XYZ_WP_D50); + + return xy; +} + +/** + * http://www.brucelindbloom.com/index.html?Eqn_ChromAdapt.html + */ +RS_MATRIX3 +rs_calculate_map_white_matrix(const RS_xy_COORD *from_xy, const RS_xy_COORD *to_xy) +{ + RS_MATRIX3 adapt; + + /* Bradford adaption matrix */ + RS_MATRIX3 bradford = {{ + { 0.8951, 0.2664, -0.1614, }, + { -0.7502, 1.7135, 0.0367, }, + { 0.0389, -0.0685, 1.0296 } + }}; + + RS_XYZ_VECTOR from_xyz; + RS_XYZ_VECTOR to_xyz; + RS_VECTOR3 ws, wd; + RS_MATRIX3 tmp; + + from_xyz = xy_to_XYZ(from_xy); + to_xyz = xy_to_XYZ(to_xy); + + ws = vector3_multiply_matrix(&from_xyz, &bradford); + wd = vector3_multiply_matrix(&to_xyz, &bradford); + + ws.x = MAX(ws.x, 0.0); + ws.y = MAX(ws.y, 0.0); + ws.z = MAX(ws.z, 0.0); + + wd.x = MAX(wd.x, 0.0); + wd.y = MAX(wd.y, 0.0); + wd.z = MAX(wd.z, 0.0); + + matrix3_identity(&tmp); + + tmp.coeff[0][0] = CLAMP(0.1, ws.x > 0.0 ? wd.x / ws.x : 10.0, 10.0); + tmp.coeff[1][1] = CLAMP(0.1, ws.y > 0.0 ? wd.y / ws.y : 10.0, 10.0); + tmp.coeff[2][2] = CLAMP(0.1, ws.z > 0.0 ? wd.z / ws.z : 10.0, 10.0); + + adapt = matrix3_invert(&bradford); + matrix3_multiply(&adapt, &tmp, &adapt); + matrix3_multiply(&adapt, &bradford, &adapt); + + return adapt; +} Added: trunk/librawstudio/rs-color.h =================================================================== --- trunk/librawstudio/rs-color.h (rev 0) +++ trunk/librawstudio/rs-color.h 2009-09-23 15:10:54 UTC (rev 2651) @@ -0,0 +1,32 @@ +/* + * Copyright (C) 2006-2009 Anders Brander and + * Anders Kvist + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifndef RS_COLOR_H +#define RS_COLOR_H + +extern const RS_MATRIX3 PCStoProPhoto; +extern const RS_XYZ_VECTOR XYZ_WP_D50; + +extern void rs_color_whitepoint_to_temp(const RS_xy_COORD *xy, gfloat *temp, gfloat *tint); +extern RS_xy_COORD rs_color_temp_to_whitepoint(gfloat temp, gfloat tint); +extern RS_XYZ_VECTOR xy_to_XYZ(const RS_xy_COORD *xy); +extern RS_xy_COORD XYZ_to_xy(const RS_XYZ_VECTOR *XYZ); +extern RS_MATRIX3 rs_calculate_map_white_matrix(const RS_xy_COORD *from_xy, const RS_xy_COORD *to_xy); + +#endif /* RS_COLOR_H */ From anders at brander.dk Wed Sep 23 17:12:09 2009 From: anders at brander.dk (Anders Brander) Date: Wed, 23 Sep 2009 17:12:09 +0200 Subject: [Rawstudio-commit] r2652 - trunk/librawstudio Message-ID: Author: abrander Date: 2009-09-23 17:12:09 +0200 (Wed, 23 Sep 2009) New Revision: 2652 Modified: trunk/librawstudio/rawstudio.h Log: Added rs-math.h and rs-color.h to rawstudio.h. Modified: trunk/librawstudio/rawstudio.h =================================================================== --- trunk/librawstudio/rawstudio.h 2009-09-23 15:10:54 UTC (rev 2651) +++ trunk/librawstudio/rawstudio.h 2009-09-23 15:12:09 UTC (rev 2652) @@ -47,6 +47,8 @@ #include "rs-plugin-manager.h" #include "rs-job-queue.h" #include "rs-utils.h" +#include "rs-math.h" +#include "rs-color.h" #include "rs-settings.h" #include "rs-adobe-coeff.h" #include "rs-color-transform.h" From anders at brander.dk Wed Sep 23 17:14:46 2009 From: anders at brander.dk (Anders Brander) Date: Wed, 23 Sep 2009 17:14:46 +0200 Subject: [Rawstudio-commit] r2653 - trunk/librawstudio Message-ID: Author: abrander Date: 2009-09-23 17:14:46 +0200 (Wed, 23 Sep 2009) New Revision: 2653 Added: trunk/librawstudio/rs-tiff-ifd-entry.c trunk/librawstudio/rs-tiff-ifd-entry.h trunk/librawstudio/rs-tiff-ifd.c trunk/librawstudio/rs-tiff-ifd.h trunk/librawstudio/rs-tiff.c trunk/librawstudio/rs-tiff.h Modified: trunk/librawstudio/Makefile.am trunk/librawstudio/rawstudio.h Log: Added simple generic TIFF parser to librawstudio. Modified: trunk/librawstudio/Makefile.am =================================================================== --- trunk/librawstudio/Makefile.am 2009-09-23 15:12:09 UTC (rev 2652) +++ trunk/librawstudio/Makefile.am 2009-09-23 15:14:46 UTC (rev 2653) @@ -34,6 +34,9 @@ rs-spline.h \ rs-curve.h \ rs-stock.h \ + rs-tiff.h \ + rs-tiff-ifd.h \ + rs-tiff-ifd-entry.h \ x86-cpu.h lib_LTLIBRARIES = librawstudio-1.1.la @@ -62,6 +65,9 @@ rs-color-transform.c rs-color-transform.h \ rs-spline.c rs-spline.h \ rs-curve.c rs-curve.h \ + rs-tiff.c rs-tiff.h \ + rs-tiff-ifd.c rs-tiff-ifd.h \ + rs-tiff-ifd-entry.c rs-tiff-ifd-entry.h \ rs-stock.c rs-stock.h librawstudio_1_1_la_LIBADD = @PACKAGE_LIBS@ @LIBJPEG@ @LIBTIFF@ $(INTLLIBS) Modified: trunk/librawstudio/rawstudio.h =================================================================== --- trunk/librawstudio/rawstudio.h 2009-09-23 15:12:09 UTC (rev 2652) +++ trunk/librawstudio/rawstudio.h 2009-09-23 15:14:46 UTC (rev 2653) @@ -55,6 +55,9 @@ #include "rs-spline.h" #include "rs-curve.h" #include "rs-stock.h" +#include "rs-tiff-ifd-entry.h" +#include "rs-tiff-ifd.h" +#include "rs-tiff.h" #include "x86-cpu.h" Added: trunk/librawstudio/rs-tiff-ifd-entry.c =================================================================== --- trunk/librawstudio/rs-tiff-ifd-entry.c (rev 0) +++ trunk/librawstudio/rs-tiff-ifd-entry.c 2009-09-23 15:14:46 UTC (rev 2653) @@ -0,0 +1,230 @@ +#include "rs-tiff-ifd-entry.h" + +G_DEFINE_TYPE (RSTiffIfdEntry, rs_tiff_ifd_entry, G_TYPE_OBJECT) + +static const struct { + gushort tag; + const char *description; +} tiff_tags[] = { + { 0x00fe, "NewSubfileType" }, + { 0x00ff, "SubfileType" }, + { 0x0100, "ImageWidth" }, + { 0x0101, "ImageLength" }, + { 0x0102, "BitsPerSample" }, + { 0x0103, "Compression" }, + { 0x0106, "PhotometricInterpretation" }, + { 0x0107, "Threshholding" }, + { 0x0108, "CellWidth" }, + { 0x0109, "CellLength" }, + { 0x0100, "ImageWidth" }, + { 0x010a, "FillOrder" }, + { 0x010d, "DocumentName" }, + { 0x010e, "ImageDescription" }, + { 0x010f, "Make" }, + { 0x0110, "Model" }, + { 0x0111, "StripOffsets" }, + { 0x0112, "Orientation" }, + { 0x0115, "SamplesPerPixel" }, + { 0x0116, "RowsPerStrip" }, + { 0x0117, "StripByteCounts" }, + { 0x0118, "MinSampleValue" }, + { 0x0119, "MaxSampleValue" }, + { 0x011a, "XResolution" }, + { 0x011b, "YResolution" }, + { 0x011c, "PlanarConfiguration" }, + { 0x011d, "PageName" }, + { 0x011e, "XPosition" }, + { 0x011f, "YPosition" }, + { 0x0120, "FreeOffsets" }, + { 0x0121, "FreeByteCounts" }, + { 0x0122, "GrayResponseUnit" }, + { 0x0123, "GrayResponseCurve" }, + { 0x0124, "T4Options" }, + { 0x0125, "T6Options" }, + { 0x0128, "ResolutionUnit" }, + { 0x0129, "PageNumber" }, + { 0x012d, "TransferFunction" }, + { 0x0131, "Software" }, + { 0x0132, "DateTime" }, + { 0x013b, "Artist" }, + { 0x013c, "HostComputer" }, + { 0x013d, "Predictor" }, + { 0x013e, "WhitePoint" }, + { 0x013f, "PrimaryChromaticities" }, + { 0x0140, "ColorMap" }, + { 0x0141, "HalftoneHints" }, + { 0x0142, "TileWidth" }, + { 0x0143, "TileLength" }, + { 0x0144, "TileOffsets" }, + { 0x0145, "TileByteCounts" }, + { 0x014c, "InkSet" }, + { 0x014d, "InkNames" }, + { 0x014e, "NumberOfInks" }, + { 0x0200, "JPEGProc" }, + { 0x0201, "JPEGInterchangeFormat" }, + { 0x0202, "JPEGInterchangeFormatLength" }, + { 0x0203, "JPEGRestartInterval" }, + { 0x0205, "JPEGLosslessPredictors" }, + { 0x0206, "JPEGPointTransforms" }, + { 0x0207, "JPEGQTables" }, + { 0x0208, "JPEGDCTables" }, + { 0x0209, "JPEGACTables" }, + { 0x0211, "YCbCrCoefficients" }, + { 0x0212, "YCbCrSubSampling" }, + { 0x0213, "YCbCrPositioning" }, + { 0x0214, "ReferenceBlackWhite" }, + { 0x0150, "DotRange" }, + { 0x0151, "TargetPrinter" }, + { 0x0152, "ExtraSamples" }, + { 0x0153, "SampleFormat" }, + { 0x0154, "SMinSampleValue" }, + { 0x0155, "SMaxSampleValue" }, + { 0x0156, "TransferRange" }, + { 0x8298, "Copyright" }, + /* EXIF specifics */ + { 0x8769, "Exif IFD Pointer" }, + { 0x8825, "GPS Info IFD Pointer" }, + /* DNG tags */ + { 0xc612, "DNGVersion" }, + { 0xc613, "DNGBackwardVersion" }, + { 0xc614, "UniqueCameraModel" }, + { 0xc615, "LocalizedCameraModel" }, + { 0xc616, "CFAPlaneColor" }, + { 0xc617, "CFALayout" }, + { 0xc618, "LinearizationTable" }, + { 0xc619, "BlackLevelRepeatDim" }, + { 0xc61a, "BlackLevel" }, + { 0xc61b, "BlackLevelDeltaH" }, + { 0xc61c, "BlackLevelDeltaV" }, + { 0xc61d, "WhiteLevel" }, + { 0xc61e, "DefaultScale" }, + { 0xc61f, "DefaultCropOrigin" }, + { 0xc620, "DefaultCropSize" }, + { 0xc621, "ColorMatrix1" }, + { 0xc622, "ColorMatrix2" }, + { 0xc623, "CameraCalibration1" }, + { 0xc624, "CameraCalibration2" }, + { 0xc625, "ReductionMatrix1" }, + { 0xc626, "ReductionMatrix2" }, + { 0xc627, "AnalogBalance" }, + { 0xc628, "AsShotNeutral" }, + { 0xc629, "AsShotWhiteXY" }, + { 0xc62a, "BaselineExposure" }, + { 0xc62b, "BaselineNoise" }, + { 0xc62c, "BaselineSharpness" }, + { 0xc62d, "BayerGreenSplit" }, + { 0xc62e, "LinearResponseLimit" }, + { 0xc62f, "CameraSerialNumber" }, + { 0xc630, "LensInfo" }, + { 0xc631, "ChromaBlurRadius" }, + { 0xc632, "AntiAliasStrength" }, + { 0xc633, "ShadowScale" }, + { 0xc634, "DNGPrivateData" }, + { 0xc635, "MakerNoteSafety" }, + { 0xc65a, "CalibrationIlluminant1" }, + { 0xc65b, "CalibrationIlluminant2" }, + { 0xc65c, "BestQualityScale" }, + { 0xc65d, "RawDataUniqueID" }, + { 0xc68b, "OriginalRawFileName" }, + { 0xc68c, "OriginalRawFileData" }, + { 0xc68d, "ActiveArea" }, + { 0xc68e, "MaskedAreas" }, + { 0xc68f, "AsShotICCProfile" }, + { 0xc690, "AsShotPreProfileMatrix" }, + { 0xc691, "CurrentICCProfile" }, + { 0xc692, "CurrentPreProfileMatrix" }, + { 0xc6bf, "ColorimetricReference" }, + { 0xc6f3, "CameraCalibrationSignature" }, + { 0xc6f4, "ProfileCalibrationSignature" }, + { 0xc6f5, "ExtraCameraProfiles" }, + { 0xc6f6, "AsShotProfileName" }, + { 0xc6f7, "NoiseReductionApplied" }, + { 0xc6f8, "ProfileName" }, + { 0xc6f9, "ProfileHueSatMapDims" }, + { 0xc6fa, "ProfileHueSatMapData1" }, + { 0xc6fb, "ProfileHueSatMapData2" }, + { 0xc6fc, "ProfileToneCurve" }, + { 0xc6fd, "ProfileEmbedPolicy" }, + { 0xc6fe, "ProfileCopyright" }, + { 0xc714, "ForwardMatrix1" }, + { 0xc715, "ForwardMatrix2" }, + { 0xc716, "PreviewApplicationName" }, + { 0xc717, "PreviewApplicationVersion" }, + { 0xc718, "PreviewSettingsName" }, + { 0xc719, "PreviewSettingsDigest" }, + { 0xc71a, "PreviewColorSpace" }, + { 0xc71b, "PreviewDateTime" }, + { 0xc71c, "RawImageDigest" }, + { 0xc71d, "OriginalRawFileDigest" }, + { 0xc71e, "SubTileBlockSize" }, + { 0xc71f, "RowInterleaveFactor" }, + { 0xc725, "ProfileLookTableDims" }, + { 0xc726, "ProfileLookTableData" }, + { 0xc740, "OpcodeList1" }, + { 0xc741, "OpcodeList2" }, + { 0xc74e, "OpcodeList3" }, + { 0xc761, "NoiseProfile" }, + { 0x0, NULL } +}; + +static void +rs_tiff_ifd_entry_get_property(GObject *object, guint property_id, GValue *value, GParamSpec *pspec) +{ + switch (property_id) + { + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID(object, property_id, pspec); + } +} + +static void +rs_tiff_ifd_entry_set_property(GObject *object, guint property_id, const GValue *value, GParamSpec *pspec) +{ + switch (property_id) + { + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID(object, property_id, pspec); + } +} + +static void +rs_tiff_ifd_entry_dispose(GObject *object) +{ + G_OBJECT_CLASS(rs_tiff_ifd_entry_parent_class)->dispose (object); +} + +static void +rs_tiff_ifd_entry_finalize(GObject *object) +{ + G_OBJECT_CLASS(rs_tiff_ifd_entry_parent_class)->finalize (object); +} + +static void +rs_tiff_ifd_entry_class_init(RSTiffIfdEntryClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS(klass); + + object_class->get_property = rs_tiff_ifd_entry_get_property; + object_class->set_property = rs_tiff_ifd_entry_set_property; + object_class->dispose = rs_tiff_ifd_entry_dispose; + object_class->finalize = rs_tiff_ifd_entry_finalize; +} + +static void +rs_tiff_ifd_entry_init(RSTiffIfdEntry *self) +{ +} + +RSTiffIfdEntry * +rs_tiff_ifd_entry_new(RSTiff *tiff, guint offset) +{ + gint i; + RSTiffIfdEntry *entry = g_object_new(RS_TYPE_TIFF_IFD_ENTRY, NULL); + + entry->tag = rs_tiff_get_ushort(tiff, offset+0); + entry->type = rs_tiff_get_ushort(tiff, offset+2); + entry->count = rs_tiff_get_uint(tiff, offset+4); + entry->value_offset = rs_tiff_get_uint(tiff, offset+8); + + return entry; +} Added: trunk/librawstudio/rs-tiff-ifd-entry.h =================================================================== --- trunk/librawstudio/rs-tiff-ifd-entry.h (rev 0) +++ trunk/librawstudio/rs-tiff-ifd-entry.h 2009-09-23 15:14:46 UTC (rev 2653) @@ -0,0 +1,36 @@ +#ifndef RS_TIFF_IFD_ENTRY_H +#define RS_TIFF_IFD_ENTRY_H + +#include + +G_BEGIN_DECLS + +#define RS_TYPE_TIFF_IFD_ENTRY rs_tiff_ifd_entry_get_type() +#define RS_TIFF_IFD_ENTRY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RS_TYPE_TIFF_IFD_ENTRY, RSTiffIfdEntry)) +#define RS_TIFF_IFD_ENTRY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RS_TYPE_TIFF_IFD_ENTRY, RSTiffIfdEntryClass)) +#define RS_IS_TIFF_IFD_ENTRY(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RS_TYPE_TIFF_IFD_ENTRY)) +#define RS_IS_TIFF_IFD_ENTRY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RS_TYPE_TIFF_IFD_ENTRY)) +#define RS_TIFF_IFD_ENTRY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RS_TYPE_TIFF_IFD_ENTRY, RSTiffIfdEntryClass)) + +typedef struct { + GObject parent; + + gushort tag; + gushort type; + guint count; + guint value_offset; +} RSTiffIfdEntry; + +typedef struct { + GObjectClass parent_class; +} RSTiffIfdEntryClass; + +#include + +GType rs_tiff_ifd_entry_get_type(void); + +RSTiffIfdEntry *rs_tiff_ifd_entry_new(RSTiff *tiff, guint offset); + +G_END_DECLS + +#endif /* RS_TIFF_IFD_ENTRY_H */ Added: trunk/librawstudio/rs-tiff-ifd.c =================================================================== --- trunk/librawstudio/rs-tiff-ifd.c (rev 0) +++ trunk/librawstudio/rs-tiff-ifd.c 2009-09-23 15:14:46 UTC (rev 2653) @@ -0,0 +1,158 @@ +#include +#include "rs-tiff-ifd.h" + +G_DEFINE_TYPE (RSTiffIfd, rs_tiff_ifd, G_TYPE_OBJECT) + +static void read(RSTiffIfd *ifd); + +enum { + PROP_0, + PROP_TIFF, + PROP_OFFSET, + PROP_NEXT_IFD, +}; + +static void +rs_tiff_ifd_get_property (GObject *object, guint property_id, GValue *value, GParamSpec *pspec) +{ + RSTiffIfd *ifd = RS_TIFF_IFD(object); + + switch (property_id) + { + case PROP_NEXT_IFD: + g_value_set_uint(value, ifd->next_ifd); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + } +} + +static void +rs_tiff_ifd_set_property(GObject *object, guint property_id, const GValue *value, GParamSpec *pspec) +{ + RSTiffIfd *ifd = RS_TIFF_IFD(object); + + switch (property_id) + { + case PROP_TIFF: + ifd->tiff = g_object_ref(g_value_get_object(value)); + if (ifd->tiff && ifd->offset) + RS_TIFF_IFD_GET_CLASS(ifd)->read(ifd); + break; + case PROP_OFFSET: + ifd->offset = g_value_get_uint(value); + if (ifd->tiff && ifd->offset) + RS_TIFF_IFD_GET_CLASS(ifd)->read(ifd); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + } +} + +static void +rs_tiff_ifd_dispose(GObject *object) +{ + RSTiffIfd *ifd = RS_TIFF_IFD(object); + + if (!ifd->dispose_has_run) + { + ifd->dispose_has_run = TRUE; + g_object_unref(ifd->tiff); + } + + G_OBJECT_CLASS(rs_tiff_ifd_parent_class)->dispose (object); +} + +static void +rs_tiff_ifd_finalize(GObject *object) +{ + G_OBJECT_CLASS(rs_tiff_ifd_parent_class)->finalize (object); +} + +static void +rs_tiff_ifd_class_init(RSTiffIfdClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS(klass); + + object_class->get_property = rs_tiff_ifd_get_property; + object_class->set_property = rs_tiff_ifd_set_property; + object_class->dispose = rs_tiff_ifd_dispose; + object_class->finalize = rs_tiff_ifd_finalize; + + g_object_class_install_property(object_class, + PROP_TIFF, g_param_spec_object( + "tiff", "tiff", "The RSTiff associated with the RSTiffIfd", + RS_TYPE_TIFF, G_PARAM_CONSTRUCT_ONLY | G_PARAM_WRITABLE)); + + g_object_class_install_property(object_class, + PROP_OFFSET, g_param_spec_uint( + "offset", "offset", "IFD offset", + 0, G_MAXUINT, 0, G_PARAM_CONSTRUCT_ONLY | G_PARAM_WRITABLE)); + + g_object_class_install_property(object_class, + PROP_NEXT_IFD, g_param_spec_uint( + "next-ifd", "next-ifd", "Offset for next ifd", + 0, G_MAXUINT, 0, G_PARAM_READABLE)); + + klass->read = read; +} + +static void +rs_tiff_ifd_init(RSTiffIfd *self) +{ +} + +RSTiffIfd * +rs_tiff_ifd_new(RSTiff *tiff, guint offset) +{ + g_assert(RS_IS_TIFF(tiff)); + + return g_object_new(RS_TYPE_TIFF_IFD, "tiff", tiff, "offset", offset, NULL); +} + +guint +rs_tiff_ifd_get_next(RSTiffIfd *ifd) +{ + g_assert(RS_IS_TIFF_IFD(ifd)); + + return ifd->next_ifd; +} + +static void +read(RSTiffIfd *ifd) +{ + gint i; + + ifd->num_entries = rs_tiff_get_ushort(ifd->tiff, ifd->offset); + ifd->next_ifd = rs_tiff_get_uint(ifd->tiff, ifd->offset + 2 + ifd->num_entries*12); + + if (ifd->next_ifd == ifd->offset) + ifd->next_ifd = 0; + else if (ifd->next_ifd > (ifd->tiff->map_length-12)) + ifd->next_ifd = 0; + + /* Read all entries */ + for(i=0;inum_entries;i++) + ifd->entries = g_list_append(ifd->entries, rs_tiff_ifd_entry_new(ifd->tiff, ifd->offset + 2 + i * 12)); +} + +static gint +_tag_search(RSTiffIfdEntry *entry, gushort tag) +{ + return entry->tag - tag; +} + +RSTiffIfdEntry * +rs_tiff_ifd_get_entry_by_tag(RSTiffIfd *ifd, gushort tag) +{ + g_assert(RS_IS_TIFF_IFD(ifd)); + GList *found; + RSTiffIfdEntry *ret = NULL; + + found = g_list_find_custom(ifd->entries, GUINT_TO_POINTER(tag), (GCompareFunc) _tag_search); + + if (found) + ret = g_object_ref(found->data); + + return ret; +} Added: trunk/librawstudio/rs-tiff-ifd.h =================================================================== --- trunk/librawstudio/rs-tiff-ifd.h (rev 0) +++ trunk/librawstudio/rs-tiff-ifd.h 2009-09-23 15:14:46 UTC (rev 2653) @@ -0,0 +1,43 @@ +#ifndef RS_TIFF_IFD_H +#define RS_TIFF_IFD_H + +#include +#include "rs-tiff.h" + +G_BEGIN_DECLS + +#define RS_TYPE_TIFF_IFD rs_tiff_ifd_get_type() +#define RS_TIFF_IFD(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RS_TYPE_TIFF_IFD, RSTiffIfd)) +#define RS_TIFF_IFD_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RS_TYPE_TIFF_IFD, RSTiffIfdClass)) +#define RS_IS_TIFF_IFD(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RS_TYPE_TIFF_IFD)) +#define RS_IS_TIFF_IFD_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RS_TYPE_TIFF_IFD)) +#define RS_TIFF_IFD_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RS_TYPE_TIFF_IFD, RSTiffIfdClass)) + +typedef struct { + GObject parent; + + gboolean dispose_has_run; + + RSTiff *tiff; + guint offset; + + gushort num_entries; + GList *entries; + guint next_ifd; +} RSTiffIfd; + +typedef struct { + GObjectClass parent_class; + + void (*read)(RSTiffIfd *ifd); +} RSTiffIfdClass; + +GType rs_tiff_ifd_get_type(void); + +RSTiffIfd *rs_tiff_ifd_new(RSTiff *tiff, guint offset); + +RSTiffIfdEntry *rs_tiff_ifd_get_entry_by_tag(RSTiffIfd *ifd, gushort tag); + +G_END_DECLS + +#endif /* RS_TIFF_IFD_H */ Added: trunk/librawstudio/rs-tiff.c =================================================================== --- trunk/librawstudio/rs-tiff.c (rev 0) +++ trunk/librawstudio/rs-tiff.c 2009-09-23 15:14:46 UTC (rev 2653) @@ -0,0 +1,170 @@ +#include +#include +#include "rs-tiff.h" + +G_DEFINE_TYPE (RSTiff, rs_tiff, G_TYPE_OBJECT) + +static gboolean read_image_file_header(RSTiff *tiff); +static gboolean read_from_file(RSTiff *tiff); + +enum { + PROP_0, + PROP_FILENAME, +}; + +static void +rs_tiff_get_property(GObject *object, guint property_id, GValue *value, GParamSpec *pspec) +{ + RSTiff *tiff = RS_TIFF(object); + + switch (property_id) + { + case PROP_FILENAME: + g_value_set_string(value, tiff->filename); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + } +} + +static void +rs_tiff_set_property(GObject *object, guint property_id, const GValue *value, GParamSpec *pspec) +{ + RSTiff *tiff = RS_TIFF(object); + + switch (property_id) + { + case PROP_FILENAME: + tiff->filename = g_value_dup_string(value); + read_from_file(tiff); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + } +} + +static void +rs_tiff_dispose(GObject *object) +{ + RSTiff *tiff = RS_TIFF(object); + + if (!tiff->dispose_has_run) + { + tiff->dispose_has_run = TRUE; + g_free(tiff->map); + } + + G_OBJECT_CLASS(rs_tiff_parent_class)->dispose(object); +} + +static void +rs_tiff_finalize(GObject *object) +{ + G_OBJECT_CLASS(rs_tiff_parent_class)->finalize(object); +} + +static void +rs_tiff_class_init(RSTiffClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS(klass); + + object_class->get_property = rs_tiff_get_property; + object_class->set_property = rs_tiff_set_property; + object_class->dispose = rs_tiff_dispose; + object_class->finalize = rs_tiff_finalize; + + g_object_class_install_property(object_class, + PROP_FILENAME, g_param_spec_string( + "filename", "Filename", "The filename to load", + NULL, G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE)); + + klass->read_image_file_header = read_image_file_header; +} + +static void +rs_tiff_init(RSTiff *self) +{ +} + +static gboolean +read_image_file_header(RSTiff *tiff) +{ + gboolean ret = TRUE; + guint next_ifd; + + /* Read endianness */ + if ((tiff->map[0] == 'I') && (tiff->map[1] == 'I')) + tiff->byte_order = G_LITTLE_ENDIAN; + else if ((tiff->map[0] == 'M') && (tiff->map[1] == 'M')) + tiff->byte_order = G_BIG_ENDIAN; + else /* Not a TIFF file */ + ret = FALSE; + + /* Read TIFF identifier */ + if (rs_tiff_get_ushort(tiff, 2) != 42) + ret = FALSE; + + tiff->first_ifd_offset = rs_tiff_get_uint(tiff, 4); + + next_ifd = tiff->first_ifd_offset; + while(next_ifd) + { + tiff->num_ifd++; + RSTiffIfd *ifd = rs_tiff_ifd_new(tiff, next_ifd); + if (ifd) + { + tiff->ifds = g_list_append(tiff->ifds, ifd); + next_ifd = rs_tiff_ifd_get_next(ifd); + } + else + break; + } + + return TRUE; +} + +static RSTiff * +rs_tiff_new(void) +{ + return g_object_new(RS_TYPE_TIFF, NULL); +} + +static gboolean +read_from_file(RSTiff *tiff) +{ + gboolean ret = TRUE; + GError *error = NULL; + + g_file_get_contents(tiff->filename, (gchar **)&tiff->map, &tiff->map_length, &error); + + if (error) + { + g_warning("GError: '%s'", error->message); + g_error_free(error); + ret = FALSE; + } + + return RS_TIFF_GET_CLASS(tiff)->read_image_file_header(tiff); +} + +RSTiff * +rs_tiff_new_from_file(const gchar *filename) +{ + return g_object_new(RS_TYPE_TIFF, "filename", filename, NULL); +} + +RSTiffIfdEntry * +rs_tiff_get_ifd_entry(RSTiff *tiff, guint ifd_num, gushort tag) +{ + RSTiffIfd *ifd = NULL; + RSTiffIfdEntry *ret = NULL; + g_assert(RS_IS_TIFF(tiff)); + + if (ifd_num <= tiff->num_ifd) + ifd = g_list_nth_data(tiff->ifds, ifd_num); + + if (ifd) + ret = rs_tiff_ifd_get_entry_by_tag(ifd, tag); + + return ret; +} Added: trunk/librawstudio/rs-tiff.h =================================================================== --- trunk/librawstudio/rs-tiff.h (rev 0) +++ trunk/librawstudio/rs-tiff.h 2009-09-23 15:14:46 UTC (rev 2653) @@ -0,0 +1,61 @@ +#ifndef RS_TIFF_H +#define RS_TIFF_H + +#include + +G_BEGIN_DECLS + +#define RS_TYPE_TIFF rs_tiff_get_type() +#define RS_TIFF(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RS_TYPE_TIFF, RSTiff)) +#define RS_TIFF_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RS_TYPE_TIFF, RSTiffClass)) +#define RS_IS_TIFF(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RS_TYPE_TIFF)) +#define RS_IS_TIFF_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RS_TYPE_TIFF)) +#define RS_TIFF_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RS_TYPE_TIFF, RSTiffClass)) + +/* Macros to read from TIFF files */ +#define __rs_cast(x, type) (*((type*)(&(x)))) + +#define rs_tiff_get_generic(tiff, pos, TYPE, type) ( \ + ((tiff)->map_length >= ((pos)+sizeof(type))) \ + ? \ + ( \ + ((tiff)->byte_order == G_LITTLE_ENDIAN) \ + ? (TYPE##_FROM_LE(__rs_cast((tiff)->map[(pos)], type))) \ + : (TYPE##_FROM_BE(__rs_cast((tiff)->map[(pos)], type))) \ + ) \ + : 0 \ +) + +#define rs_tiff_get_simple(tiff, pos, type) ( \ + ((pos) <= ((tiff)->map_length-sizeof(type))) \ + ? __rs_cast((tiff)->map[(pos)], type) \ + : 0 \ +) + +#define rs_tiff_get_uchar(tiff, pos) rs_tiff_get_simple(tiff, pos, guchar) +#define rs_tiff_get_ushort(tiff, pos) rs_tiff_get_generic(tiff, pos, GUINT16, guint16) +#define rs_tiff_get_uint(tiff, pos) rs_tiff_get_generic(tiff, pos, GUINT32, guint32) +#define rs_tiff_get_urational(tiff, pos) ((gfloat) rs_tiff_get_uint(tiff, pos)) / ((gfloat) rs_tiff_get_uint(tiff, pos+sizeof(guint))) +#define rs_tiff_get_char(tiff, pos) rs_tiff_get_simple(tiff, pos, gchar) +#define rs_tiff_get_short(tiff, pos) rs_tiff_get_generic(tiff, pos, GINT16, gshort) +#define rs_tiff_get_int(tiff, pos) rs_tiff_get_generic(tiff, pos, GINT32, gint) +#define rs_tiff_get_rational(tiff, pos) ((gfloat) rs_tiff_get_int(tiff, pos)) / ((gfloat) ((rs_tiff_get_int(tiff, pos+sizeof(gint)) == 0) ? 1 : rs_tiff_get_int(tiff, pos+sizeof(gint)))) +#define rs_tiff_get_float(tiff, pos) rs_tiff_get_simple(tiff, pos, gfloat) +#define rs_tiff_get_double(tiff, pos) rs_tiff_get_simple(tiff, pos, gdouble) + +typedef struct { + GObjectClass parent_class; + + gboolean (*read_image_file_header)(RSTiff *tiff); +} RSTiffClass; + +GType rs_tiff_get_type(void); + +RSTiff *rs_tiff_new_from_file(const gchar *filename); + +RSTiffIfdEntry * +rs_tiff_get_ifd_entry(RSTiff *tiff, guint ifd_num, gushort tag); + +G_END_DECLS + +#endif /* RS_TIFF_H */ From anders at brander.dk Wed Sep 23 17:18:13 2009 From: anders at brander.dk (Anders Brander) Date: Wed, 23 Sep 2009 17:18:13 +0200 Subject: [Rawstudio-commit] r2654 - in trunk: . plugins plugins/dcp Message-ID: Author: abrander Date: 2009-09-23 17:18:13 +0200 (Wed, 23 Sep 2009) New Revision: 2654 Added: trunk/plugins/dcp/ trunk/plugins/dcp/Makefile.am trunk/plugins/dcp/dcp-huesat-map.c trunk/plugins/dcp/dcp-huesat-map.h trunk/plugins/dcp/dcp.c Modified: trunk/configure.in trunk/plugins/Makefile.am Log: Added a (proof-of-concept) DNG Camera Profile filter. Modified: trunk/configure.in =================================================================== --- trunk/configure.in 2009-09-23 15:14:46 UTC (rev 2653) +++ trunk/configure.in 2009-09-23 15:18:13 UTC (rev 2654) @@ -78,6 +78,7 @@ plugins/basic-render/Makefile plugins/cache/Makefile plugins/crop/Makefile +plugins/dcp/Makefile plugins/demosaic/Makefile plugins/denoise/Makefile plugins/exposure-mask/Makefile Modified: trunk/plugins/Makefile.am =================================================================== --- trunk/plugins/Makefile.am 2009-09-23 15:14:46 UTC (rev 2653) +++ trunk/plugins/Makefile.am 2009-09-23 15:18:13 UTC (rev 2654) @@ -2,6 +2,7 @@ basic-render \ cache \ crop \ + dcp \ demosaic \ denoise \ exposure-mask \ Added: trunk/plugins/dcp/Makefile.am =================================================================== --- trunk/plugins/dcp/Makefile.am (rev 0) +++ trunk/plugins/dcp/Makefile.am 2009-09-23 15:18:13 UTC (rev 2654) @@ -0,0 +1,22 @@ +plugindir = $(libdir)/rawstudio/plugins + +AM_CFLAGS =\ + -Wall \ + -g3 \ + -O4 + +AM_CXXFLAGS = $(AM_CFLAGS) + +INCLUDES = \ + -DPACKAGE_DATA_DIR=\""$(datadir)"\" \ + -DPACKAGE_LOCALE_DIR=\""$(prefix)/$(DATADIRNAME)/locale"\" \ + @PACKAGE_CFLAGS@ \ + -I../../librawstudio/ + +lib_LTLIBRARIES = dcp.la + +libdir = $(datadir)/rawstudio/plugins/ + +dcp_la_LIBADD = @PACKAGE_LIBS@ +dcp_la_LDFLAGS = -module -avoid-version +dcp_la_SOURCES = dcp.c dcp-huesat-map.c dcp-huesat-map.h Added: trunk/plugins/dcp/dcp-huesat-map.c =================================================================== --- trunk/plugins/dcp/dcp-huesat-map.c (rev 0) +++ trunk/plugins/dcp/dcp-huesat-map.c 2009-09-23 15:18:13 UTC (rev 2654) @@ -0,0 +1,190 @@ +#include +#include "dcp-huesat-map.h" + +G_DEFINE_TYPE (RSHuesatMap, rs_huesat_map, G_TYPE_OBJECT) + +static void +rs_huesat_map_finalize(GObject *object) +{ + RSHuesatMap *map = RS_HUESAT_MAP(object); + + if (map->deltas) + g_free(map->deltas); + + G_OBJECT_CLASS (rs_huesat_map_parent_class)->finalize (object); +} + +static void +rs_huesat_map_class_init(RSHuesatMapClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS (klass); + + object_class->finalize = rs_huesat_map_finalize; +} + +static void +rs_huesat_map_init(RSHuesatMap *self) +{ +} + +RSHuesatMap * +rs_huesat_map_new(guint hue_divisions, guint sat_division, guint val_divisions) +{ + RSHuesatMap *map = g_object_new(RS_TYPE_HUESAT_MAP, NULL); + + if (val_divisions == 0) + val_divisions = 1; + + map->hue_divisions = hue_divisions; + map->sat_divisions = sat_division; + map->val_divisions = val_divisions; + + map->hue_step = sat_division; + map->val_step = hue_divisions * map->hue_step; + + map->deltas = g_new0(RS_VECTOR3, rs_huesat_map_get_deltacount(map)); + + return map; +} + +RSHuesatMap * +rs_huesat_map_new_from_dcp(RSTiff *tiff, const guint ifd, const gushort dims_tag, const gushort table_tag) +{ + RSHuesatMap *map = NULL; + RSTiffIfdEntry *entry; + guint hue_count = 0, sat_count = 0, val_count = 0; + + g_assert(RS_IS_TIFF(tiff)); + + entry = rs_tiff_get_ifd_entry(tiff, ifd, dims_tag); + if (entry && (entry->count > 1)) + { + hue_count = rs_tiff_get_uint(tiff, entry->value_offset); + sat_count = rs_tiff_get_uint(tiff, entry->value_offset+4); + + if (entry->count > 2) + val_count = rs_tiff_get_uint(tiff, entry->value_offset+8); + + entry = rs_tiff_get_ifd_entry(tiff, ifd, table_tag); + if (entry && (entry->count == (hue_count * sat_count * val_count * 3))) + { + gboolean skipSat0 = FALSE; /* FIXME */ + gint val, hue, sat; + gint offset = entry->value_offset; + + map = rs_huesat_map_new(hue_count, sat_count, val_count); + for (val = 0; val < val_count; val++) + { + for (hue = 0; hue < hue_count; hue++) + { + for (sat = (skipSat0) ? 1 : 0; sat < sat_count; sat++) + { + RS_VECTOR3 modify; + + modify.h = rs_tiff_get_float(tiff, offset); + modify.s = rs_tiff_get_float(tiff, offset+4); + modify.v = rs_tiff_get_float(tiff, offset+8); + offset += 12; + + rs_huesat_map_set_delta(map, hue, sat, val, &modify); + } + } + } + } + } + + return map; +} + +RSHuesatMap * +rs_huesat_map_new_interpolated(const RSHuesatMap *map1, RSHuesatMap *map2, gfloat weight1) +{ + RSHuesatMap *map = NULL; + + g_assert(RS_IS_HUESAT_MAP(map1)); + g_assert(RS_IS_HUESAT_MAP(map2)); + + if (weight1 >= 1.0) + return RS_HUESAT_MAP(g_object_ref(G_OBJECT(map1))); + else if (weight1 <= 0.0) + return RS_HUESAT_MAP(g_object_ref(G_OBJECT(map2))); + + if ((map1->hue_divisions == map2->hue_divisions) && + (map1->sat_divisions == map2->sat_divisions) && + (map1->val_divisions == map2->val_divisions)) + { + map = rs_huesat_map_new(map1->hue_divisions, map1->sat_divisions, map1->val_divisions); + gfloat weight2 = 1.0 - weight1; + + const RS_VECTOR3 *data1 = map1->deltas; + const RS_VECTOR3 *data2 = map1->deltas; + RS_VECTOR3 *data3 = map1->deltas; + gint count = map1->hue_divisions * map1->sat_divisions * map1->val_divisions; + + gint index; + for (index = 0; index < count; index++) + { + data3->h = weight1 * data1->h + weight2 * data2->h; + data3->s = weight1 * data1->s + weight2 * data2->s; + data3->v = weight1 * data1->v + weight2 * data2->v; + + data1++; + data2++; + data3++; + } + } + + return map; +} + +guint +rs_huesat_map_get_deltacount(RSHuesatMap *map) +{ + return map->val_divisions * map->hue_divisions * map->sat_divisions; +} + +void +rs_huesat_map_get_delta(RSHuesatMap *map, const guint hue_div, const guint sat_div, const guint val_div, RS_VECTOR3 *modify) +{ + g_assert(RS_IS_HUESAT_MAP(map)); + if (hue_div >= map->hue_divisions || sat_div >= map->sat_divisions || val_div >= map->val_divisions) + { + modify->h = 0.0; + modify->s = 1.0; + modify->v = 1.0; + + return; + } + + gint offset = val_div * map->val_step + hue_div * map->hue_step + sat_div; + + *modify = map->deltas[offset]; +} + +void +rs_huesat_map_set_delta(RSHuesatMap *map, const guint hue_div, const guint sat_div, const guint val_div, const RS_VECTOR3 *modify) +{ + g_assert(RS_IS_HUESAT_MAP(map)); + + if (hue_div >= map->hue_divisions || sat_div >= map->sat_divisions || val_div >= map->val_divisions) + return; + + gint offset = val_div * map->val_step + hue_div * map->hue_step + sat_div; + + map->deltas[offset] = *modify; + + if (sat_div == 0) + map->deltas[offset].v = 1.0; + + else if (sat_div == 1) + { + RS_VECTOR3 zero_sat_modify; + rs_huesat_map_get_delta(map, hue_div, 0, val_div, &zero_sat_modify); + if (zero_sat_modify.v != 1.0f) + { + zero_sat_modify = *modify; + zero_sat_modify.v = 1.0; + rs_huesat_map_set_delta(map, hue_div, 0, val_div, &zero_sat_modify); + } + } +} Added: trunk/plugins/dcp/dcp-huesat-map.h =================================================================== --- trunk/plugins/dcp/dcp-huesat-map.h (rev 0) +++ trunk/plugins/dcp/dcp-huesat-map.h 2009-09-23 15:18:13 UTC (rev 2654) @@ -0,0 +1,45 @@ +#ifndef RS_HUESAT_MAP_H +#define RS_HUESAT_MAP_H + +#include + +G_BEGIN_DECLS + +#define RS_TYPE_HUESAT_MAP rs_huesat_map_get_type() +#define RS_HUESAT_MAP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RS_TYPE_HUESAT_MAP, RSHuesatMap)) +#define RS_HUESAT_MAP_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RS_TYPE_HUESAT_MAP, RSHuesatMapClass)) +#define RS_IS_HUESAT_MAP(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RS_TYPE_HUESAT_MAP)) +#define RS_IS_HUESAT_MAP_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RS_TYPE_HUESAT_MAP)) +#define RS_HUESAT_MAP_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RS_TYPE_HUESAT_MAP, RSHuesatMapClass)) + +typedef struct { + GObject parent; + + guint hue_divisions; + guint sat_divisions; + guint val_divisions; + + guint hue_step; + guint val_step; + + RS_VECTOR3 *deltas; +} RSHuesatMap; + +typedef struct { + GObjectClass parent_class; +} RSHuesatMapClass; + +GType rs_huesat_map_get_type(void); + +RSHuesatMap *rs_huesat_map_new(guint hue_divisions, guint sat_division, guint val_divisions); + +RSHuesatMap *rs_huesat_map_new_from_dcp(RSTiff *tiff, const guint ifd, const gushort dims_tag, const gushort table_tag); + +guint rs_huesat_map_get_deltacount(RSHuesatMap *map); + +void rs_huesat_map_get_delta(RSHuesatMap *map, const guint hue_div, const guint sat_div, const guint val_div, RS_VECTOR3 *modify); +void rs_huesat_map_set_delta(RSHuesatMap *map, const guint hue_div, const guint sat_div, const guint val_div, const RS_VECTOR3 *modify); + +G_END_DECLS + +#endif /* RS_HUESAT_MAP_H */ Added: trunk/plugins/dcp/dcp.c =================================================================== --- trunk/plugins/dcp/dcp.c (rev 0) +++ trunk/plugins/dcp/dcp.c 2009-09-23 15:18:13 UTC (rev 2654) @@ -0,0 +1,1142 @@ +/* + * Copyright (C) 2006-2009 Anders Brander and + * Anders Kvist + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +/* Plugin tmpl version 4 */ + +#include +#include /* pow() */ +#include "dcp-huesat-map.h" + +#define RS_TYPE_DCP (rs_dcp_type) +#define RS_DCP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RS_TYPE_DCP, RSDcp)) +#define RS_DCP_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RS_TYPE_DCP, RSDcpClass)) +#define RS_IS_DCP(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RS_TYPE_DCP)) + +typedef struct _RSDcp RSDcp; +typedef struct _RSDcpClass RSDcpClass; + +struct _RSDcp { + RSFilter parent; + + gfloat exposure; + gfloat saturation; + gfloat hue; + + RS_xy_COORD white_xy; + + gint nknots; + gfloat *curve_samples; + + gfloat temp1; + gfloat temp2; + + rs_spline_t *baseline_exposure; + gfloat *baseline_exposure_lut; + + gboolean has_color_matrix1; + gboolean has_color_matrix2; + RS_MATRIX3 color_matrix1; + RS_MATRIX3 color_matrix2; + + gboolean has_reduction_matrix1; + gboolean has_reduction_matrix2; + RS_MATRIX3 reduction_matrix1; + RS_MATRIX3 reduction_matrix2; + RS_MATRIX3 reduction_matrix; + + gboolean has_forward_matrix1; + gboolean has_forward_matrix2; + RS_MATRIX3 forward_matrix1; + RS_MATRIX3 forward_matrix2; + RS_MATRIX3 forward_matrix; + + RSHuesatMap *looktable; + + RSHuesatMap *huesatmap; + RSHuesatMap *huesatmap1; + RSHuesatMap *huesatmap2; + + RS_MATRIX3 camera_to_pcs; + + RS_VECTOR3 camera_white; + RS_MATRIX3 camera_to_prophoto; + + RS_MATRIX3 prophoto_to_srgb; +}; + +struct _RSDcpClass { + RSFilterClass parent_class; +}; + +RS_DEFINE_FILTER(rs_dcp, RSDcp) + +enum { + PROP_0, + PROP_SETTINGS, + PROP_PROFILE +}; + +static void get_property (GObject *object, guint property_id, GValue *value, GParamSpec *pspec); +static void set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec); +static RSFilterResponse *get_image(RSFilter *filter, const RSFilterParam *param); +static void settings_changed(RSSettings *settings, RSSettingsMask mask, RSDcp *dcp); +static RS_xy_COORD neutral_to_xy(RSDcp *dcp, const RS_VECTOR3 *neutral); +static RS_MATRIX3 find_xyz_to_camera(RSDcp *dcp, const RS_xy_COORD *white_xy, RS_MATRIX3 *forward_matrix, RS_MATRIX3 *reduction_matrix, RS_MATRIX3 *camera_calibration); +static void set_white_xy(RSDcp *dcp, const RS_xy_COORD *xy); +static void precalc(RSDcp *dcp); +static void render(RSDcp *dcp, RS_IMAGE16 *image); +static void read_profile(RSDcp *dcp, const gchar *filename); + +G_MODULE_EXPORT void +rs_plugin_load(RSPlugin *plugin) +{ + rs_dcp_get_type(G_TYPE_MODULE(plugin)); +} + +static void +finalize(GObject *object) +{ + RSDcp *dcp = RS_DCP(object); + + g_free(dcp->curve_samples); +} + +static void +rs_dcp_class_init(RSDcpClass *klass) +{ + RSFilterClass *filter_class = RS_FILTER_CLASS (klass); + GObjectClass *object_class = G_OBJECT_CLASS(klass); + + object_class->get_property = get_property; + object_class->set_property = set_property; + object_class->finalize = finalize; + + g_object_class_install_property(object_class, + PROP_SETTINGS, g_param_spec_object( + "settings", "Settings", "Settings to render from", + RS_TYPE_SETTINGS, G_PARAM_READWRITE) + ); + + g_object_class_install_property(object_class, + PROP_PROFILE, g_param_spec_string( + "profile", "profile", "DCP Profile", + NULL, G_PARAM_READWRITE) + ); + + filter_class->name = "Adobe DNG camera profile filter"; + filter_class->get_image = get_image; +} + +static void +settings_changed(RSSettings *settings, RSSettingsMask mask, RSDcp *dcp) +{ + gboolean changed = FALSE; + + if (mask & MASK_EXPOSURE) + { + g_object_get(settings, "exposure", &dcp->exposure, NULL); + changed = TRUE; + } + + if (mask & MASK_SATURATION) + { + g_object_get(settings, "saturation", &dcp->saturation, NULL); + changed = TRUE; + } + + if (mask & MASK_HUE) + { + g_object_get(settings, "hue", &dcp->hue, NULL); + dcp->hue /= 60.0; + changed = TRUE; + } + + if ((mask & MASK_WB) || (mask & MASK_CHANNELMIXER)) + { + const gfloat warmth; + gfloat tint; + const gfloat channelmixer_red; + const gfloat channelmixer_green; + const gfloat channelmixer_blue; + + g_object_get(settings, + "warmth", &warmth, + "tint", &tint, + "channelmixer_red", &channelmixer_red, + "channelmixer_green", &channelmixer_green, + "channelmixer_blue", &channelmixer_blue, + NULL); + + RS_xy_COORD whitepoint; + RS_VECTOR3 pre_mul; + /* This is messy, but we're essentially converting from warmth/tint to cameraneutral */ + pre_mul.x = (1.0+warmth)*(2.0-tint)*(channelmixer_red/100.0); + pre_mul.y = 1.0*(channelmixer_green/100.0); + pre_mul.z = (1.0-warmth)*(2.0-tint)*(channelmixer_blue/100.0); + RS_VECTOR3 neutral; + neutral.x = 1.0 / CLAMP(pre_mul.x, 0.001, 100.00); + neutral.y = 1.0 / CLAMP(pre_mul.y, 0.001, 100.00); + neutral.z = 1.0 / CLAMP(pre_mul.z, 0.001, 100.00); + gfloat max = vector3_max(&neutral); + neutral.x = neutral.x / max; + neutral.y = neutral.y / max; + neutral.z = neutral.z / max; + whitepoint = neutral_to_xy(dcp, &neutral); + + set_white_xy(dcp, &whitepoint); + precalc(dcp); + changed = TRUE; + } + + if (mask & MASK_CURVE) + { + const gint nknots = rs_settings_get_curve_nknots(settings); + + if (nknots > 1) + { + gfloat *knots = rs_settings_get_curve_knots(settings); + if (knots) + { + dcp->nknots = nknots; + rs_spline_t *spline = rs_spline_new(knots, dcp->nknots, NATURAL); + rs_spline_sample(spline, dcp->curve_samples, 65536); + rs_spline_destroy(spline); + g_free(knots); + } + } + else + { + gint i; + for(i=0;i<65536;i++) + dcp->curve_samples[i] = ((gfloat)i)/65536.0; + } + changed = TRUE; + } + + if (changed) + rs_filter_changed(RS_FILTER(dcp), RS_FILTER_CHANGED_PIXELDATA); +} + +static void +rs_dcp_init(RSDcp *dcp) +{ + gint i; + + dcp->curve_samples = g_new(gfloat, 65536); + + for(i=0;i<65536;i++) + dcp->curve_samples[i] = ((gfloat)i)/65536.0; +} + +static void +get_property(GObject *object, guint property_id, GValue *value, GParamSpec *pspec) +{ +// RSDcp *dcp = RS_DCP(object); + + switch (property_id) + { + case PROP_SETTINGS: + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + } +} + +static void +set_property(GObject *object, guint property_id, const GValue *value, GParamSpec *pspec) +{ + RSDcp *dcp = RS_DCP(object); +// RSFilter *filter = RS_FILTER(dcp); + RSSettings *settings; + const gchar *profile_filename; + + switch (property_id) + { + case PROP_SETTINGS: + settings = g_value_get_object(value); + g_signal_connect(settings, "settings-changed", G_CALLBACK(settings_changed), dcp); + settings_changed(settings, MASK_ALL, dcp); + break; + case PROP_PROFILE: + profile_filename = g_value_get_string(value); + read_profile(dcp, profile_filename); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + } +} + +static RSFilterResponse * +get_image(RSFilter *filter, const RSFilterParam *param) +{ + RSDcp *dcp = RS_DCP(filter); + GdkRectangle *roi; + RSFilterResponse *previous_response; + RSFilterResponse *response; + RS_IMAGE16 *input; + RS_IMAGE16 *output; + RS_IMAGE16 *tmp; + + previous_response = rs_filter_get_image(filter->previous, param); + + if (!RS_IS_FILTER(filter->previous)) + return previous_response; + + input = rs_filter_response_get_image(previous_response); + if (!input) return previous_response; + response = rs_filter_response_clone(previous_response); + g_object_unref(previous_response); + + output = rs_image16_copy(input, TRUE); + g_object_unref(input); + + rs_filter_response_set_image(response, output); + g_object_unref(output); + + if ((roi = rs_filter_param_get_roi(param))) + tmp = rs_image16_new_subframe(output, roi); + else + tmp = g_object_ref(output); + + render(dcp, tmp); + + g_object_unref(tmp); + + return response; +} + +/* dng_color_spec::NeutralToXY */ +static RS_xy_COORD +neutral_to_xy(RSDcp *dcp, const RS_VECTOR3 *neutral) +{ + const guint max_passes = 30; + guint pass; + RS_xy_COORD last; + + last = XYZ_to_xy(&XYZ_WP_D50); + + for(pass = 0; pass < max_passes; pass++) + { + RS_MATRIX3 xyz_to_camera = find_xyz_to_camera(dcp, &last, NULL, NULL, NULL); + RS_MATRIX3 camera_to_xyz = matrix3_invert(&xyz_to_camera); + + RS_XYZ_VECTOR tmp = vector3_multiply_matrix(neutral, &camera_to_xyz); + RS_xy_COORD next = XYZ_to_xy(&tmp); + + if (ABS(next.x - last.x) + ABS(next.y - last.y) < 0.0000001) + { + last = next; + break; + } + + // If we reach the limit without converging, we are most likely + // in a two value oscillation. So take the average of the last + // two estimates and give up. + if (pass == max_passes - 1) + { + next.x = (last.x + next.x) * 0.5; + next.y = (last.y + next.y) * 0.5; + } + last = next; + } + + return last; +} + +inline void +RGBtoHSV(gfloat r, gfloat g, gfloat b, gfloat *h, gfloat *s, gfloat *v) +{ + *v = MAX(r, MAX (g, b)); + + gfloat gap = *v - MIN (r, MIN (g, b)); + + if (gap > 0.0f) + { + if (r == *v) + { + *h = (g - b) / gap; + + if (*h < 0.0f) + *h += 6.0f; + } + else if (g == *v) + *h = 2.0f + (b - r) / gap; + else + *h = 4.0f + (r - g) / gap; + + *s = gap / *v; + } + else + { + *h = 0.0f; + *s = 0.0f; + } +} + +inline void +HSVtoRGB(gfloat h, gfloat s, gfloat v, gfloat *r, gfloat *g, gfloat *b) +{ + if (s > 0.0f) + { + + if (h < 0.0f) + h += 6.0f; + + if (h >= 6.0f) + h -= 6.0f; + + gint i = (gint) h; + gfloat f = h - (gint) i; + + gfloat p = v * (1.0f - s); + +#define q (v * (1.0f - s * f)) +#define t (v * (1.0f - s * (1.0f - f))) + + switch (i) + { + case 0: *r = v; *g = t; *b = p; break; + case 1: *r = q; *g = v; *b = p; break; + case 2: *r = p; *g = v; *b = t; break; + case 3: *r = p; *g = q; *b = v; break; + case 4: *r = t; *g = p; *b = v; break; + case 5: *r = v; *g = p; *b = q; break; + } + +#undef q +#undef t + + } + else + { + *r = v; + *g = v; + *b = v; + } +} + +#define _F(x) (x / 65535.0) +#define _S(x) CLAMP(((gint) (x * 65535.0)), 0, 65535) + +static void +huesat_map(RSHuesatMap *map, gfloat *h, gfloat *s, gfloat *v) +{ + g_assert(RS_IS_HUESAT_MAP(map)); + + gfloat hScale = (map->hue_divisions < 2) ? 0.0f : (map->hue_divisions * (1.0f / 6.0f)); + gfloat sScale = (gfloat) (map->sat_divisions - 1); + gfloat vScale = (gfloat) (map->val_divisions - 1); + + gint maxHueIndex0 = map->hue_divisions - 1; + gint maxSatIndex0 = map->sat_divisions - 2; + gint maxValIndex0 = map->val_divisions - 2; + + const RS_VECTOR3 *tableBase = map->deltas; + + gint hueStep = map->sat_divisions; + gint valStep = map->hue_divisions * hueStep; + + gfloat hueShift; + gfloat satScale; + gfloat valScale; + + if (map->val_divisions < 2) + { + gfloat hScaled = *h * hScale; + gfloat sScaled = *s * sScale; + + gint hIndex0 = (gint) hScaled; + gint sIndex0 = (gint) sScaled; + + sIndex0 = MIN(sIndex0, maxSatIndex0); + + gint hIndex1 = hIndex0 + 1; + + if (hIndex0 >= maxHueIndex0) + { + hIndex0 = maxHueIndex0; + hIndex1 = 0; + } + + gfloat hFract1 = hScaled - (gfloat) hIndex0; + gfloat sFract1 = sScaled - (gfloat) sIndex0; + + gfloat hFract0 = 1.0f - hFract1; + gfloat sFract0 = 1.0f - sFract1; + + const RS_VECTOR3 *entry00 = tableBase + hIndex0 * hueStep + sIndex0; + + const RS_VECTOR3 *entry01 = entry00 + (hIndex1 - hIndex0) * hueStep; + gfloat hueShift0 = hFract0 * entry00->fHueShift + + hFract1 * entry01->fHueShift; + + gfloat satScale0 = hFract0 * entry00->fSatScale + + hFract1 * entry01->fSatScale; + + gfloat valScale0 = hFract0 * entry00->fValScale + + hFract1 * entry01->fValScale; + + entry00++; + entry01++; + + gfloat hueShift1 = hFract0 * entry00->fHueShift + + hFract1 * entry01->fHueShift; + + gfloat satScale1 = hFract0 * entry00->fSatScale + + hFract1 * entry01->fSatScale; + + gfloat valScale1 = hFract0 * entry00->fValScale + + hFract1 * entry01->fValScale; + + hueShift = sFract0 * hueShift0 + sFract1 * hueShift1; + satScale = sFract0 * satScale0 + sFract1 * satScale1; + valScale = sFract0 * valScale0 + sFract1 * valScale1; + } + else + { + gfloat hScaled = *h * hScale; + gfloat sScaled = *s * sScale; + gfloat vScaled = *v * vScale; + + gint hIndex0 = (gint) hScaled; + gint sIndex0 = (gint) sScaled; + gint vIndex0 = (gint) vScaled; + + sIndex0 = MIN(sIndex0, maxSatIndex0); + vIndex0 = MIN(vIndex0, maxValIndex0); + + gint hIndex1 = hIndex0 + 1; + + if (hIndex0 >= maxHueIndex0) + { + hIndex0 = maxHueIndex0; + hIndex1 = 0; + } + + gfloat hFract1 = hScaled - (gfloat) hIndex0; + gfloat sFract1 = sScaled - (gfloat) sIndex0; + gfloat vFract1 = vScaled - (gfloat) vIndex0; + + gfloat hFract0 = 1.0f - hFract1; + gfloat sFract0 = 1.0f - sFract1; + gfloat vFract0 = 1.0f - vFract1; + + const RS_VECTOR3 *entry00 = tableBase + vIndex0 * valStep + hIndex0 * hueStep + sIndex0; + const RS_VECTOR3 *entry01 = entry00 + (hIndex1 - hIndex0) * hueStep; + + const RS_VECTOR3 *entry10 = entry00 + valStep; + const RS_VECTOR3 *entry11 = entry01 + valStep; + + gfloat hueShift0 = vFract0 * (hFract0 * entry00->fHueShift + + hFract1 * entry01->fHueShift) + + vFract1 * (hFract0 * entry10->fHueShift + + hFract1 * entry11->fHueShift); + + gfloat satScale0 = vFract0 * (hFract0 * entry00->fSatScale + + hFract1 * entry01->fSatScale) + + vFract1 * (hFract0 * entry10->fSatScale + + hFract1 * entry11->fSatScale); + + gfloat valScale0 = vFract0 * (hFract0 * entry00->fValScale + + hFract1 * entry01->fValScale) + + vFract1 * (hFract0 * entry10->fValScale + + hFract1 * entry11->fValScale); + + entry00++; + entry01++; + entry10++; + entry11++; + + gfloat hueShift1 = vFract0 * (hFract0 * entry00->fHueShift + + hFract1 * entry01->fHueShift) + + vFract1 * (hFract0 * entry10->fHueShift + + hFract1 * entry11->fHueShift); + + gfloat satScale1 = vFract0 * (hFract0 * entry00->fSatScale + + hFract1 * entry01->fSatScale) + + vFract1 * (hFract0 * entry10->fSatScale + + hFract1 * entry11->fSatScale); + + gfloat valScale1 = vFract0 * (hFract0 * entry00->fValScale + + hFract1 * entry01->fValScale) + + vFract1 * (hFract0 * entry10->fValScale + + hFract1 * entry11->fValScale); + + hueShift = sFract0 * hueShift0 + sFract1 * hueShift1; + satScale = sFract0 * satScale0 + sFract1 * satScale1; + valScale = sFract0 * valScale0 + sFract1 * valScale1; + } + + hueShift *= (6.0f / 360.0f); + + *h += hueShift; + *s = MIN(*s * satScale, 1.0); + *v = MIN(*v * valScale, 1.0); +} + +/* RefBaselineRGBTone() */ +void +rgb_tone(gfloat *_r, gfloat *_g, gfloat *_b, const gfloat * const tone_lut) +{ + gfloat r = *_r; + gfloat g = *_g; + gfloat b = *_b; + gfloat rr; + gfloat gg; + gfloat bb; + + #define RGBTone(r, g, b, rr, gg, bb)\ + {\ + \ +/* DNG_ASSERT (r >= g && g >= b && r > b, "Logic Error RGBTone");*/\ + \ + rr = tone_lut[_S(r)];\ + bb = tone_lut[_S(b)];\ + \ + gg = bb + ((rr - bb) * (g - b) / (r - b));\ + \ + } + + if (r >= g) + { + + if (g > b) + { + + // Case 1: r >= g > b + + RGBTone (r, g, b, rr, gg, bb); + + } + + else if (b > r) + { + + // Case 2: b > r >= g + + RGBTone (b, r, g, bb, rr, gg); + + } + + else if (b > g) + { + + // Case 3: r >= b > g + + RGBTone (r, b, g, rr, bb, gg); + + } + + else + { + + // Case 4: r >= g == b + +// DNG_ASSERT (r >= g && g == b, "Logic Error 2"); + + rr = tone_lut[_S(r)]; + gg = tone_lut[_S(b)]; +// rr = table.Interpolate (r); +// gg = table.Interpolate (g); + bb = gg; + + } + + } + + else + { + + if (r >= b) + { + + // Case 5: g > r >= b + + RGBTone (g, r, b, gg, rr, bb); + + } + + else if (b > g) + { + + // Case 6: b > g > r + + RGBTone (b, g, r, bb, gg, rr); + + } + + else + { + + // Case 7: g >= b > r + + RGBTone (g, b, r, gg, bb, rr); + + } + + } + + #undef RGBTone + + *_r = rr; + *_g = gg; + *_b = bb; + +} + +static void +render(RSDcp *dcp, RS_IMAGE16 *image) +{ + gint x, y; + gfloat h, s, v; + gfloat r, g, b; + RS_VECTOR3 pix; + + const gfloat exposure_comp = pow(2.0, dcp->exposure); + + for(y = 0 ; y < image->h; y++) + { + for(x=0; x < image->w; x++) + { + gushort *pixel = GET_PIXEL(image, x, y); + + /* Convert to float */ + r = _F(pixel[R]); + g = _F(pixel[G]); + b = _F(pixel[B]); + + r = MIN(dcp->camera_white.x, r); + g = MIN(dcp->camera_white.y, g); + b = MIN(dcp->camera_white.z, b); + + pix.R = r; + pix.G = g; + pix.B = b; + pix = vector3_multiply_matrix(&pix, &dcp->camera_to_prophoto); + r = pix.R; + g = pix.G; + b = pix.B; + + r = CLAMP(pix.R, 0.0, 1.0); + g = CLAMP(pix.G, 0.0, 1.0); + b = CLAMP(pix.B, 0.0, 1.0); + + /* Does it matter if we're above 1.0 at this point? */ + + /* To HSV */ + RGBtoHSV(r, g, b, &h, &s, &v); + + v = MIN(v * exposure_comp, 1.0); + + if (dcp->huesatmap) + huesat_map(dcp->huesatmap, &h, &s, &v); + + /* Saturation */ + s *= dcp->saturation; + s = MIN(s, 1.0); + + /* Hue */ + h += dcp->hue; + + /* Curve */ + v = dcp->curve_samples[_S(v)]; + + if (dcp->looktable) + huesat_map(dcp->looktable, &h, &s, &v); + + /* Back to RGB */ + HSVtoRGB(h, s, v, &r, &g, &b); + + pix.R = r; + pix.G = g; + pix.B = b; + + pix = vector3_multiply_matrix(&pix, &dcp->prophoto_to_srgb); + + r = pix.R; + g = pix.G; + b = pix.B; + + /* Save as gushort */ + pixel[R] = _S(r); + pixel[G] = _S(g); + pixel[B] = _S(b); + } + } +} + +#undef _F +#undef _S + +static gfloat +temp_from_exif_illuminant(guint illuminant) +{ + enum { + lsUnknown = 0, + + lsDaylight = 1, + lsFluorescent = 2, + lsTungsten = 3, + lsFlash = 4, + lsFineWeather = 9, + lsCloudyWeather = 10, + lsShade = 11, + lsDaylightFluorescent = 12, // D 5700 - 7100K + lsDayWhiteFluorescent = 13, // N 4600 - 5400K + lsCoolWhiteFluorescent = 14, // W 3900 - 4500K + lsWhiteFluorescent = 15, // WW 3200 - 3700K + lsStandardLightA = 17, + lsStandardLightB = 18, + lsStandardLightC = 19, + lsD55 = 20, + lsD65 = 21, + lsD75 = 22, + lsD50 = 23, + lsISOStudioTungsten = 24, + + lsOther = 255 + }; + switch (illuminant) + { + case lsStandardLightA: + case lsTungsten: + return 2850.0; + + case lsISOStudioTungsten: + return 3200.0; + + case lsD50: + return 5000.0; + + case lsD55: + case lsDaylight: + case lsFineWeather: + case lsFlash: + case lsStandardLightB: + return 5500.0; + case lsD65: + case lsStandardLightC: + case lsCloudyWeather: + return 6500.0; + + case lsD75: + case lsShade: + return 7500.0; + + case lsDaylightFluorescent: + return (5700.0 + 7100.0) * 0.5; + + case lsDayWhiteFluorescent: + return (4600.0 + 5400.0) * 0.5; + + case lsCoolWhiteFluorescent: + case lsFluorescent: + return (3900.0 + 4500.0) * 0.5; + + case lsWhiteFluorescent: + return (3200.0 + 3700.0) * 0.5; + + default: + return 0.0; + } +} + +/* dng_color_spec::FindXYZtoCamera */ +static RS_MATRIX3 +find_xyz_to_camera(RSDcp *dcp, const RS_xy_COORD *white_xy, RS_MATRIX3 *forward_matrix, RS_MATRIX3 *reduction_matrix, RS_MATRIX3 *camera_calibration) +{ + gfloat temp = 5000.0; + + rs_color_whitepoint_to_temp(white_xy, &temp, NULL); + + gfloat alpha = 0.0; + + if (temp <= dcp->temp1) + alpha = 1.0; + else if (temp >= dcp->temp2) + alpha = 0.0; + else if ((dcp->temp2 > 0.0) && (dcp->temp1 > 0.0) && (temp > 0.0)) + { + gdouble invT = 1.0 / temp; + alpha = (invT - (1.0 / dcp->temp2)) / ((1.0 / dcp->temp1) - (1.0 / dcp->temp2)); + } + + RS_MATRIX3 color_matrix; + + matrix3_interpolate(&dcp->color_matrix1, &dcp->color_matrix2, alpha, &color_matrix); + + if (forward_matrix) + { + if (dcp->has_forward_matrix1 && dcp->has_forward_matrix2) + matrix3_interpolate(&dcp->forward_matrix1, &dcp->forward_matrix2, 1.0-alpha, forward_matrix); + else if (dcp->has_forward_matrix1) + *forward_matrix = dcp->forward_matrix1; + else if (dcp->has_forward_matrix2) + *forward_matrix = dcp->forward_matrix2; + } + + if (reduction_matrix) + { + if (dcp->has_reduction_matrix1 && dcp->has_reduction_matrix2) + matrix3_interpolate(&dcp->reduction_matrix1, &dcp->reduction_matrix2, alpha, reduction_matrix); + else if (dcp->has_reduction_matrix1) + *reduction_matrix = dcp->reduction_matrix1; + else if (dcp->has_reduction_matrix2) + *reduction_matrix = dcp->reduction_matrix2; + } + + /* We don't have camera_calibration anyway! */ + + return color_matrix; +} + +/* Verified to behave like dng_camera_profile::NormalizeForwardMatrix */ +static void +normalize_forward_matrix(RS_MATRIX3 *matrix) +{ + RS_MATRIX3 tmp; + RS_VECTOR3 camera_one = {{1.0}, {1.0}, {1.0} }; + + RS_MATRIX3 pcs_to_xyz_dia = vector3_as_diagonal(&XYZ_WP_D50); + RS_VECTOR3 xyz = vector3_multiply_matrix(&camera_one, matrix); + RS_MATRIX3 xyz_as_dia = vector3_as_diagonal(&xyz); + RS_MATRIX3 xyz_as_dia_inv = matrix3_invert(&xyz_as_dia); + + matrix3_multiply(&pcs_to_xyz_dia, &xyz_as_dia_inv, &tmp); + matrix3_multiply(&tmp, matrix, matrix); +} + +/* dng_color_spec::SetWhiteXY */ +static void +set_white_xy(RSDcp *dcp, const RS_xy_COORD *xy) +{ + RS_MATRIX3 color_matrix; + RS_MATRIX3 forward_matrix; + RS_MATRIX3 reduction_matrix; + + dcp->white_xy = *xy; + + color_matrix = find_xyz_to_camera(dcp, xy, &forward_matrix, &reduction_matrix, NULL); + + RS_XYZ_VECTOR white = xy_to_XYZ(xy); + + dcp->camera_white = vector3_multiply_matrix(&white, &color_matrix); + + gfloat white_scale = 1.0 / vector3_max(&dcp->camera_white); + + dcp->camera_white.x = CLAMP(0.001, white_scale * dcp->camera_white.x, 1.0); + dcp->camera_white.y = CLAMP(0.001, white_scale * dcp->camera_white.y, 1.0); + dcp->camera_white.z = CLAMP(0.001, white_scale * dcp->camera_white.z, 1.0); + + if (dcp->has_forward_matrix1 || dcp->has_forward_matrix2) + { + /* verified by DNG SDK */ + RS_MATRIX3 refCameraWhite_diagonal = vector3_as_diagonal(&dcp->camera_white); + + RS_MATRIX3 refCameraWhite_diagonal_inv = matrix3_invert(&refCameraWhite_diagonal); /* D */ + matrix3_multiply(&forward_matrix, &refCameraWhite_diagonal_inv, &dcp->camera_to_pcs); + } + else + { + /* FIXME: test this */ + RS_xy_COORD PCStoXY = {0.3457, 0.3585}; + RS_MATRIX3 map = rs_calculate_map_white_matrix(&PCStoXY, xy); /* or &white?! */ + RS_MATRIX3 pcs_to_camera; + matrix3_multiply(&color_matrix, &map, &pcs_to_camera); + RS_VECTOR3 tmp = vector3_multiply_matrix(&XYZ_WP_D50, &pcs_to_camera); + gfloat scale = vector3_max(&tmp); + matrix3_scale(&pcs_to_camera, 1.0 / scale, &pcs_to_camera); + dcp->camera_to_pcs = matrix3_invert(&pcs_to_camera); + } + +} + +static void +precalc(RSDcp *dcp) +{ + const static RS_MATRIX3 xyz_to_prophoto = {{ + { 1.3459433, -0.2556075, -0.0511118 }, + { -0.5445989, 1.5081673, 0.0205351 }, + { 0.0000000, 0.0000000, 1.2118128 } + }}; + const RS_MATRIX3 prophoto_to_xyz = matrix3_invert(&xyz_to_prophoto); + /* This HAS ben adopted for D50 -> D65 white point */ + const static RS_MATRIX3 xyz_to_rgb = {{ + { 3.1338582120812, - 1.6168645994761, - 0.4906125135547 }, + { - 0.978769586326, 1.9161399511888, 0.0334523812116 }, + { 0.0719452014624, - 0.2289912335361, 1.4052430533683 } + }}; + + /* Build Prophoto to sRGB */ + matrix3_multiply(&xyz_to_rgb, &prophoto_to_xyz, &dcp->prophoto_to_srgb); + + /* Camera to ProPhoto */ + matrix3_multiply(&xyz_to_prophoto, &dcp->camera_to_pcs, &dcp->camera_to_prophoto); /* verified by SDK */ +} + +static RS_MATRIX3 +read_matrix(RSTiff *tiff, guint offset) +{ + RS_MATRIX3 matrix; + + matrix.coeff[0][0] = rs_tiff_get_rational(tiff, offset); + matrix.coeff[0][1] = rs_tiff_get_rational(tiff, offset+8); + matrix.coeff[0][2] = rs_tiff_get_rational(tiff, offset+16); + matrix.coeff[1][0] = rs_tiff_get_rational(tiff, offset+24); + matrix.coeff[1][1] = rs_tiff_get_rational(tiff, offset+32); + matrix.coeff[1][2] = rs_tiff_get_rational(tiff, offset+40); + matrix.coeff[2][0] = rs_tiff_get_rational(tiff, offset+48); + matrix.coeff[2][1] = rs_tiff_get_rational(tiff, offset+56); + matrix.coeff[2][2] = rs_tiff_get_rational(tiff, offset+64); + + return matrix; +} + +static void +read_profile(RSDcp *dcp, const gchar *filename) +{ + RSTiff *tiff = rs_tiff_new_from_file(filename); + RSTiffIfdEntry *entry; + + /* FIXME: Reset this properly */ + dcp->has_color_matrix1 = FALSE; + dcp->has_color_matrix2 = FALSE; + dcp->has_reduction_matrix1 = FALSE; + dcp->has_reduction_matrix2 = FALSE; + dcp->has_forward_matrix1 = FALSE; + dcp->has_forward_matrix2 = FALSE; + + /* ColorMatrix1 */ + entry = rs_tiff_get_ifd_entry(tiff, 0, 0xc621); + if (entry) + { + dcp->color_matrix1 = read_matrix(tiff, entry->value_offset); + dcp->has_color_matrix1 = TRUE; + } + else + matrix3_identity(&dcp->color_matrix1); + + /* ColorMatrix2 */ + entry = rs_tiff_get_ifd_entry(tiff, 0, 0xc622); + if (entry) + { + dcp->color_matrix2 = read_matrix(tiff, entry->value_offset); + dcp->has_color_matrix2 = TRUE; + } + else + matrix3_identity(&dcp->color_matrix2); + + /* ReductionMatrix1 */ + entry = rs_tiff_get_ifd_entry(tiff, 0, 0xc725); + if (entry) + { + dcp->reduction_matrix1 = read_matrix(tiff, entry->value_offset); + dcp->has_reduction_matrix1 = TRUE; + } + else + matrix3_identity(&dcp->reduction_matrix1); + + /* ReductionMatrix2 */ + entry = rs_tiff_get_ifd_entry(tiff, 0, 0xc726); + if (entry) + { + dcp->reduction_matrix2 = read_matrix(tiff, entry->value_offset); + dcp->has_reduction_matrix2 = TRUE; + } + else + matrix3_identity(&dcp->reduction_matrix2); + + /* CalibrationIlluminant1 */ + entry = rs_tiff_get_ifd_entry(tiff, 0, 0xc65a); + if (entry) + dcp->temp1 = temp_from_exif_illuminant(entry->value_offset); + else + dcp->temp1 = 5000; + + /* CalibrationIlluminant2 */ + entry = rs_tiff_get_ifd_entry(tiff, 0, 0xc65b); + if (entry) + dcp->temp2 = temp_from_exif_illuminant(entry->value_offset); + else + dcp->temp2 = 5000; + + /* ProfileToneCurve */ + entry = rs_tiff_get_ifd_entry(tiff, 0, 0xc6fc); + if (entry) + { + gint i; + gint num_knots = entry->count / 2; + gfloat *knots = g_new0(gfloat, entry->count); + + for(i = 0; i < entry->count; i++) + knots[i] = rs_tiff_get_float(tiff, (entry->value_offset+(i*4))); + + dcp->baseline_exposure = rs_spline_new(knots, num_knots, NATURAL); + dcp->baseline_exposure_lut = rs_spline_sample(dcp->baseline_exposure, NULL, 65536); + } + /* ForwardMatrix1 */ + entry = rs_tiff_get_ifd_entry(tiff, 0, 0xc714); + if (entry) + { + dcp->forward_matrix1 = read_matrix(tiff, entry->value_offset); + dcp->has_forward_matrix1 = TRUE; + normalize_forward_matrix(&dcp->forward_matrix1); + } + else + matrix3_identity(&dcp->forward_matrix1); + + /* ForwardMatrix2 */ + entry = rs_tiff_get_ifd_entry(tiff, 0, 0xc715); + if (entry) + { + dcp->forward_matrix2 = read_matrix(tiff, entry->value_offset); + dcp->has_forward_matrix2 = TRUE; + } + else + matrix3_identity(&dcp->forward_matrix2); + + dcp->looktable = rs_huesat_map_new_from_dcp(tiff, 0, 0xc725, 0xc726); + dcp->huesatmap1 = rs_huesat_map_new_from_dcp(tiff, 0, 0xc6f9, 0xc6fa); + dcp->huesatmap2 = rs_huesat_map_new_from_dcp(tiff, 0, 0xc6f9, 0xc6fb); + dcp->huesatmap = dcp->huesatmap1; + g_object_unref(tiff); + + precalc(dcp); +} + +/* ++ 0xc621 ColorMatrix1 (9 * SRATIONAL) ++ 0xc622 ColorMatrix2 (9 * SRATIONAL) ++ 0xc725 ReductionMatrix1 (9 * SRATIONAL) ++ 0xc726 ReductionMatrix2 (9 * SRATIONAL) ++ 0xc65a CalibrationIlluminant1 (1 * SHORT) ++ 0xc65b CalibrationIlluminant2 (1 * SHORT) +? 0xc6f4 ProfileCalibrationSignature (ASCII or BYTE) +? 0xc6f8 ProfileName (ASCII or BYTE) +? 0xc6f9 ProfileHueSatMapDims (3 * LONG) +? 0xc6fa ProfileHueSatMapData1 (FLOAT) +? 0xc6fb ProfileHueSatMapData2 (FLOAT) +? 0xc6fc ProfileToneCurve (FLOAT) +? 0xc6fd ProfileEmbedPolicy (LONG) +? 0xc6fe ProfileCopyright (ASCII or BYTE) ++ 0xc714 ForwardMatrix1 (SRATIONAL) ++ 0xc715 ForwardMatrix2 (SRATIONAL) +? 0xc725 ProfileLookTableDims (3 * LONG) +? 0xc726 ProfileLookTableData +*/ From klauspost at gmail.com Wed Sep 23 22:10:35 2009 From: klauspost at gmail.com (Klaus Post) Date: Wed, 23 Sep 2009 22:10:35 +0200 Subject: [Rawstudio-commit] r2655 - trunk/plugins/demosaic Message-ID: Author: post Date: 2009-09-23 22:10:34 +0200 (Wed, 23 Sep 2009) New Revision: 2655 Modified: trunk/plugins/demosaic/demosaic.c Log: Fix border issue on full quality demosaic. Modified: trunk/plugins/demosaic/demosaic.c =================================================================== --- trunk/plugins/demosaic/demosaic.c 2009-09-23 15:18:13 UTC (rev 2654) +++ trunk/plugins/demosaic/demosaic.c 2009-09-23 20:10:34 UTC (rev 2655) @@ -387,8 +387,10 @@ { RS_IMAGE16 *image = t->output; const unsigned int filters = t->filters; - const int start_y = t->start_y; - const int end_y = t->end_y; + + /* Subtract 3 from top and bottom */ + const int start_y = MAX(3, t->start_y); + const int end_y = MIN(image->h-3, t->end_y); int row, col, c, d; int diffA, diffB, guessA, guessB; int p = image->pitch; @@ -479,10 +481,9 @@ const guint threads = rs_get_number_of_processor_cores(); ThreadInfo *t = g_new(ThreadInfo, threads); - /* Subtract 3 from top and bottom */ - threaded_h = image->h-6; + threaded_h = image->h; y_per_thread = (threaded_h + threads-1)/threads; - y_offset = 3; + y_offset = 0; for (i = 0; i < threads; i++) { @@ -491,7 +492,7 @@ t[i].filters = filters; t[i].start_y = y_offset; y_offset += y_per_thread; - y_offset = MIN(image->h-3, y_offset); + y_offset = MIN(image->h, y_offset); t[i].end_y = y_offset; t[i].threadid = g_thread_create(start_interp_thread, &t[i], TRUE, NULL); From klauspost at gmail.com Wed Sep 23 22:11:37 2009 From: klauspost at gmail.com (Klaus Post) Date: Wed, 23 Sep 2009 22:11:37 +0200 Subject: [Rawstudio-commit] r2656 - trunk/src Message-ID: Author: post Date: 2009-09-23 22:11:37 +0200 (Wed, 23 Sep 2009) New Revision: 2656 Modified: trunk/src/rs-dir-selector.c Log: Set busy cursor on dir expansion. Modified: trunk/src/rs-dir-selector.c =================================================================== --- trunk/src/rs-dir-selector.c 2009-09-23 20:10:34 UTC (rev 2655) +++ trunk/src/rs-dir-selector.c 2009-09-23 20:11:37 UTC (rev 2656) @@ -195,6 +195,13 @@ gchar *file; GDir *dir; GString *gs = NULL; + + /* Set busy cursor */ + GdkCursor* cursor = gdk_cursor_new(GDK_WATCH); + gdk_window_set_cursor(gtk_widget_get_toplevel(GTK_WIDGET(view))->window, cursor); + gdk_cursor_unref(cursor); + gdk_flush(); + model = gtk_tree_view_get_model(view); gtk_tree_model_iter_children(GTK_TREE_MODEL(model), &empty, iter); @@ -227,7 +234,7 @@ g_dir_close(dir); g_free(filepath); } - + gdk_window_set_cursor(gtk_widget_get_toplevel(GTK_WIDGET(view))->window, NULL); gtk_tree_store_remove(GTK_TREE_STORE(model), &empty); } @@ -321,7 +328,7 @@ GTK_SORT_ASCENDING); gtk_tree_view_set_model(GTK_TREE_VIEW(selector->view), model); - + g_object_unref(model); /* destroy model automatically with view */ } From klauspost at gmail.com Thu Sep 24 23:11:13 2009 From: klauspost at gmail.com (Klaus Post) Date: Thu, 24 Sep 2009 23:11:13 +0200 Subject: [Rawstudio-commit] r2657 - trunk/plugins/denoise Message-ID: Author: post Date: 2009-09-24 23:11:12 +0200 (Thu, 24 Sep 2009) New Revision: 2657 Modified: trunk/plugins/denoise/fftwindow.cpp Log: Denoiser: SSE check value not initialized on non x86 systems. Modified: trunk/plugins/denoise/fftwindow.cpp =================================================================== --- trunk/plugins/denoise/fftwindow.cpp 2009-09-23 20:11:37 UTC (rev 2656) +++ trunk/plugins/denoise/fftwindow.cpp 2009-09-24 21:11:12 UTC (rev 2657) @@ -36,9 +36,7 @@ synthesisIsFlat = true; analysis.allocateImage(); synthesis.allocateImage(); -#if defined (__i386__) || defined (__x86_64__) SSEAvailable == !!(rs_detect_cpu_features() & RS_CPU_FLAG_SSE); -#endif } From anders at brander.dk Fri Sep 25 15:28:23 2009 From: anders at brander.dk (Anders Brander) Date: Fri, 25 Sep 2009 15:28:23 +0200 Subject: [Rawstudio-commit] rawspeed r150 - RawSpeed Message-ID: Author: abrander Date: 2009-09-25 15:28:22 +0200 (Fri, 25 Sep 2009) New Revision: 150 Modified: RawSpeed/rawstudio-plugin.makefile Log: Removed unneeded clutter from INSTALLPATH expander. Modified: RawSpeed/rawstudio-plugin.makefile =================================================================== --- RawSpeed/rawstudio-plugin.makefile 2009-09-10 16:26:03 UTC (rev 149) +++ RawSpeed/rawstudio-plugin.makefile 2009-09-25 13:28:22 UTC (rev 150) @@ -1,7 +1,7 @@ CC=g++ CFLAGS=-fPIC -Wall -O4 -g `pkg-config --cflags rawstudio-1.1 libxml-2.0` LDFLAGS=`pkg-config --libs rawstudio-1.1 libxml-2.0` -INSTALLPATH=`pkg-config --variable=plugindir rawstudio-1.1 libxml-2.0` +INSTALLPATH=`pkg-config --variable=plugindir rawstudio-1.1` CPP_SOURCES= rawstudio-plugin-api.cpp \ ArwDecoder.cpp \ From anders at brander.dk Sat Sep 26 22:29:22 2009 From: anders at brander.dk (Anders Brander) Date: Sat, 26 Sep 2009 22:29:22 +0200 Subject: [Rawstudio-commit] r2658 - trunk/librawstudio Message-ID: Author: abrander Date: 2009-09-26 22:29:22 +0200 (Sat, 26 Sep 2009) New Revision: 2658 Modified: trunk/librawstudio/rs-tiff.c trunk/librawstudio/rs-tiff.h Log: Renamed read_image_file_header to read_file_header. Modified: trunk/librawstudio/rs-tiff.c =================================================================== --- trunk/librawstudio/rs-tiff.c 2009-09-24 21:11:12 UTC (rev 2657) +++ trunk/librawstudio/rs-tiff.c 2009-09-26 20:29:22 UTC (rev 2658) @@ -4,7 +4,7 @@ G_DEFINE_TYPE (RSTiff, rs_tiff, G_TYPE_OBJECT) -static gboolean read_image_file_header(RSTiff *tiff); +static gboolean read_file_header(RSTiff *tiff); static gboolean read_from_file(RSTiff *tiff); enum { @@ -78,7 +78,7 @@ "filename", "Filename", "The filename to load", NULL, G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE)); - klass->read_image_file_header = read_image_file_header; + klass->read_file_header = read_file_header; } static void @@ -87,7 +87,7 @@ } static gboolean -read_image_file_header(RSTiff *tiff) +read_file_header(RSTiff *tiff) { gboolean ret = TRUE; guint next_ifd; @@ -144,7 +144,7 @@ ret = FALSE; } - return RS_TIFF_GET_CLASS(tiff)->read_image_file_header(tiff); + return RS_TIFF_GET_CLASS(tiff)->read_file_header(tiff); } RSTiff * Modified: trunk/librawstudio/rs-tiff.h =================================================================== --- trunk/librawstudio/rs-tiff.h 2009-09-24 21:11:12 UTC (rev 2657) +++ trunk/librawstudio/rs-tiff.h 2009-09-26 20:29:22 UTC (rev 2658) @@ -46,7 +46,7 @@ typedef struct { GObjectClass parent_class; - gboolean (*read_image_file_header)(RSTiff *tiff); + gboolean (*read_file_header)(RSTiff *tiff); } RSTiffClass; GType rs_tiff_get_type(void); From anders at brander.dk Sun Sep 27 21:09:09 2009 From: anders at brander.dk (Anders Brander) Date: Sun, 27 Sep 2009 21:09:09 +0200 Subject: [Rawstudio-commit] r2659 - in trunk: librawstudio plugins/basic-render plugins/dcp Message-ID: Author: abrander Date: 2009-09-27 21:09:08 +0200 (Sun, 27 Sep 2009) New Revision: 2659 Modified: trunk/librawstudio/rs-color-transform.c trunk/librawstudio/rs-curve.c trunk/librawstudio/rs-spline.c trunk/librawstudio/rs-spline.h trunk/plugins/basic-render/basic-render.c trunk/plugins/dcp/dcp.c Log: Converted rs_spline_t to a GObject'ified RSSpline. Modified: trunk/librawstudio/rs-color-transform.c =================================================================== --- trunk/librawstudio/rs-color-transform.c 2009-09-26 20:29:22 UTC (rev 2658) +++ trunk/librawstudio/rs-color-transform.c 2009-09-27 19:09:08 UTC (rev 2659) @@ -267,9 +267,9 @@ if (knots) { rct->nknots = nknots; - rs_spline_t *spline = rs_spline_new(knots, rct->nknots, NATURAL); + RSSpline *spline = rs_spline_new(knots, rct->nknots, NATURAL); rs_spline_sample(spline, rct->curve_samples, 65536); - rs_spline_destroy(spline); + g_object_unref(spline); g_free(knots); update_tables = TRUE; } Modified: trunk/librawstudio/rs-curve.c =================================================================== --- trunk/librawstudio/rs-curve.c 2009-09-26 20:29:22 UTC (rev 2658) +++ trunk/librawstudio/rs-curve.c 2009-09-27 19:09:08 UTC (rev 2659) @@ -27,7 +27,7 @@ struct _RSCurveWidget { GtkDrawingArea parent; - rs_spline_t *spline; + RSSpline *spline; gint active_knot; gfloat *array; guint array_length; @@ -220,7 +220,7 @@ curve = RS_CURVE_WIDGET(object); if (curve->spline != NULL) { - rs_spline_destroy(curve->spline); + g_object_unref(curve->spline); } } @@ -313,7 +313,8 @@ g_assert(RS_IS_CURVE_WIDGET(curve)); /* Free thew current spline */ - rs_spline_destroy(curve->spline); + if (curve->spline) + g_object_unref(curve->spline); /* Allocate new spline */ curve->spline = rs_spline_new(NULL, 0, NATURAL); @@ -352,7 +353,8 @@ g_return_if_fail (RS_IS_CURVE_WIDGET(curve)); /* Free thew current spline */ - rs_spline_destroy(curve->spline); + if (curve->spline) + g_object_unref(curve->spline); /* Allocate new spline */ curve->spline = rs_spline_new(NULL, 0, NATURAL); Modified: trunk/librawstudio/rs-spline.c =================================================================== --- trunk/librawstudio/rs-spline.c 2009-09-26 20:29:22 UTC (rev 2658) +++ trunk/librawstudio/rs-spline.c 2009-09-27 19:09:08 UTC (rev 2659) @@ -25,8 +25,10 @@ #include /** Spline curve - Real definition */ -struct rs_spline_t -{ +struct _RSSpline { + GObject parent; + gboolean dispose_has_run; + /** Number of knots */ guint n; @@ -51,6 +53,41 @@ GSList *added; }; +G_DEFINE_TYPE(RSSpline, rs_spline, G_TYPE_OBJECT) + +static void knot_free(gpointer knot, gpointer userdata); + +static void +rs_spline_dispose(GObject *object) +{ + RSSpline *spline = RS_SPLINE(object); + + if (!spline->dispose_has_run) + { + spline->dispose_has_run = TRUE; + g_free(spline->knots); + + g_free(spline->cubics); + + g_slist_foreach(spline->added, (GFunc)knot_free, NULL); + g_slist_free(spline->added); + } + G_OBJECT_CLASS(rs_spline_parent_class)->dispose(object); +} + +static void +rs_spline_class_init(RSSplineClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS (klass); + + object_class->dispose = rs_spline_dispose; +} + +static void +rs_spline_init(RSSpline *spline) +{ +} + #define MERGE_KNOTS (1<<0) #define SORT_KNOTS (1<<1) #define COMPUTE_CUBICS (1<<2) @@ -180,7 +217,7 @@ d[i] -= g[i]*d[i+1]; } -#ifdef RS_SPLINE_TEST +#ifdef RSSplineEST #define EPSILON (0.01f) g[0] = b[0]*d[0] + c[0]*d[1]; for (i=1; iknots[2*spline->n] = knot[0]; @@ -339,7 +376,7 @@ * @param spline Spline */ static void -knots_prepare(struct rs_spline_t *spline) +knots_prepare(RSSpline *spline) { if (ISDIRTY(spline->dirty, MERGE_KNOTS)) { guint nbadded = g_slist_length(spline->added); @@ -370,7 +407,7 @@ * @return 0 if failed */ static gint -spline_compute_cubics(struct rs_spline_t *spline) +spline_compute_cubics(RSSpline *spline) { /* Sub diagonal */ gfloat *a = NULL; @@ -509,7 +546,7 @@ * @return Number of knots */ guint -rs_spline_length(struct rs_spline_t *spline) +rs_spline_length(RSSpline *spline) { return spline->n + g_slist_length(spline->added); } @@ -521,7 +558,7 @@ * @param y Y coordinate */ void -rs_spline_add(struct rs_spline_t *spline, gfloat x, gfloat y) +rs_spline_add(RSSpline *spline, gfloat x, gfloat y) { gfloat *knot = g_malloc(sizeof(gfloat)*2); knot[0] = x; @@ -538,7 +575,7 @@ * @param y Y coordinate */ void -rs_spline_move(struct rs_spline_t *spline, gint n, gfloat x, gfloat y) +rs_spline_move(RSSpline *spline, gint n, gfloat x, gfloat y) { spline->knots[n*2+0] = x; spline->knots[n*2+1] = y; @@ -553,7 +590,7 @@ * @param n Which knot to delete */ extern void -rs_spline_delete(struct rs_spline_t *spline, gint n) +rs_spline_delete(RSSpline *spline, gint n) { gfloat *old_knots = spline->knots; gint i, target = 0; @@ -588,7 +625,7 @@ * @return 0 if failed, can happen when the spline is to be calculated again. */ gint -rs_spline_interpolate(struct rs_spline_t *spline, gfloat x, gfloat *y) +rs_spline_interpolate(RSSpline *spline, gfloat x, gfloat *y) { /* Iterator */ gint j; @@ -622,7 +659,7 @@ * @param n Output number of knots (out) */ void -rs_spline_get_knots(struct rs_spline_t *spline, gfloat **knots, guint *n) +rs_spline_get_knots(RSSpline *spline, gfloat **knots, guint *n) { knots_prepare(spline); *n = rs_spline_length(spline); @@ -638,7 +675,7 @@ * @return Sampled curve or NULL if failed */ gfloat * -rs_spline_sample(struct rs_spline_t *spline, gfloat *samples, guint nbsamples) +rs_spline_sample(RSSpline *spline, gfloat *samples, guint nbsamples) { /* Iterator */ guint i; @@ -691,7 +728,7 @@ * @param runout_type Type of the runout * @return Spline */ -struct rs_spline_t * +RSSpline * rs_spline_new( const gfloat *const knots, const gint n, @@ -700,9 +737,6 @@ /* Ordered knots */ gfloat *k = NULL; - /* Result from this constructor */ - rs_spline_t *new = NULL; - /* Copy the knots */ if (knots != NULL) { k = g_malloc(sizeof(gfloat)*2*n); @@ -710,7 +744,7 @@ } /* Prepare the result */ - new = g_malloc(sizeof(struct rs_spline_t)); + RSSpline *new = g_object_new(RS_TYPE_SPLINE, NULL); new->knots = k; new->cubics = NULL; new->n = (k!=NULL) ? n: 0; @@ -728,7 +762,7 @@ * @param spline Spline curve */ void -rs_spline_print(rs_spline_t *spline) +rs_spline_print(RSSpline *spline) { /* Iterator */ guint i; @@ -755,24 +789,7 @@ #undef _x #undef _y -/** - * Cubic spline destructor. - * @param spline Spline structure to be destroyed - */ -void -rs_spline_destroy(rs_spline_t *spline) -{ - g_free(spline->knots); - spline->knots = NULL; - g_free(spline->cubics); - spline->cubics = NULL; - g_slist_foreach(spline->added, (GFunc)knot_free, NULL); - g_slist_free(spline->added); - spline->added = NULL; - g_free(spline); -} - -#ifdef RS_SPLINE_TEST +#ifdef RSSplineTEST typedef struct test_t { gint size; @@ -825,7 +842,7 @@ }; /* Spline result */ - rs_spline_t *spline; + RSSpline *spline; /* Iterators */ gint i; @@ -853,9 +870,9 @@ rs_spline_print(spline); /* Destory it */ - rs_spline_destroy(spline); + g_object_unref(spline); } } return 0; } -#endif /* RS_SPLINE_TEST */ +#endif /* RSSplineTEST */ Modified: trunk/librawstudio/rs-spline.h =================================================================== --- trunk/librawstudio/rs-spline.h 2009-09-26 20:29:22 UTC (rev 2658) +++ trunk/librawstudio/rs-spline.h 2009-09-27 19:09:08 UTC (rev 2659) @@ -22,7 +22,25 @@ #define RS_SPLINE_H #include +#include +G_BEGIN_DECLS + +#define RS_TYPE_SPLINE rs_spline_get_type() +#define RS_SPLINE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RS_TYPE_SPLINE, RSSpline)) +#define RS_SPLINE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RS_TYPE_SPLINE, RSSplineClass)) +#define RS_IS_SPLINE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RS_TYPE_SPLINE)) +#define RS_IS_SPLINE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RS_TYPE_SPLINE)) +#define RS_SPLINE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RS_TYPE_SPLINE, RSSplineClass)) + +typedef struct _RSSpline RSSpline; + +typedef struct { + GObjectClass parent_class; +} RSSplineClass; + +GType rs_spline_get_type (void); + /** Spline curve runout type */ typedef enum rs_spline_runout_type_t { @@ -31,9 +49,6 @@ CUBIC, } rs_spline_runout_type_t; -/** Spline curve - Opaque declaration */ -typedef struct rs_spline_t rs_spline_t; - /** * Cubic spline constructor. * @param knots Array of knots, can be NULL if no knots yet @@ -41,7 +56,7 @@ * @param runout_type Type of the runout * @return Spline */ -extern rs_spline_t * +extern RSSpline * rs_spline_new( const gfloat *const knots, const gint n, @@ -52,7 +67,7 @@ * @return Number of knots */ extern guint -rs_spline_length(rs_spline_t *spline); +rs_spline_length(RSSpline *spline); /** * Adds a knot to the curve @@ -61,7 +76,7 @@ * @param y Y coordinate */ extern void -rs_spline_add(rs_spline_t *spline, gfloat x, gfloat y); +rs_spline_add(RSSpline *spline, gfloat x, gfloat y); /** * Moves a knot in the curve @@ -71,7 +86,7 @@ * @param y Y coordinate */ extern void -rs_spline_move(struct rs_spline_t *spline, gint n, gfloat x, gfloat y); +rs_spline_move(RSSpline *spline, gint n, gfloat x, gfloat y); /** * Deletes a knot in the curve @@ -79,7 +94,7 @@ * @param n Which knot to delete */ extern void -rs_spline_delete(struct rs_spline_t *spline, gint n); +rs_spline_delete(RSSpline *spline, gint n); /** * Computes value of the spline at the x abissa @@ -89,7 +104,7 @@ * @return 0 if failed, can happen when the spline is to be calculated again. */ extern gint -rs_spline_interpolate(rs_spline_t *spline, gfloat x, gfloat *y); +rs_spline_interpolate(RSSpline *spline, gfloat x, gfloat *y); /** * Gets a copy of the internal sorted knot array (gfloat[2]) @@ -98,7 +113,7 @@ * @param n Output number of knots (out) */ extern void -rs_spline_get_knots(rs_spline_t *spline, gfloat **knots, guint *n); +rs_spline_get_knots(RSSpline *spline, gfloat **knots, guint *n); /** * Sample the curve @@ -108,20 +123,15 @@ * @return Sampled curve or NULL if failed */ gfloat * -rs_spline_sample(struct rs_spline_t *spline, gfloat *samples, guint nbsamples); +rs_spline_sample(RSSpline *spline, gfloat *samples, guint nbsamples); /** - * Cubic spline destructor. - * @param spline Spline structure to be destroyed - */ -extern void -rs_spline_destroy(rs_spline_t *spline); - -/** * Print a spline on the stdout * @param spline Spline curve */ extern void -rs_spline_print(rs_spline_t *spline); +rs_spline_print(RSSpline *spline); +G_END_DECLS + #endif /* RS_SPLINE_H */ Modified: trunk/plugins/basic-render/basic-render.c =================================================================== --- trunk/plugins/basic-render/basic-render.c 2009-09-26 20:29:22 UTC (rev 2658) +++ trunk/plugins/basic-render/basic-render.c 2009-09-27 19:09:08 UTC (rev 2659) @@ -388,9 +388,9 @@ if (knots) { basic_render->nknots = nknots; - rs_spline_t *spline = rs_spline_new(knots, basic_render->nknots, NATURAL); + RSSpline *spline = rs_spline_new(knots, basic_render->nknots, NATURAL); rs_spline_sample(spline, basic_render->curve_samples, 65536); - rs_spline_destroy(spline); + g_object_unref(spline); g_free(knots); basic_render->dirty_tables = TRUE; } Modified: trunk/plugins/dcp/dcp.c =================================================================== --- trunk/plugins/dcp/dcp.c 2009-09-26 20:29:22 UTC (rev 2658) +++ trunk/plugins/dcp/dcp.c 2009-09-27 19:09:08 UTC (rev 2659) @@ -46,7 +46,7 @@ gfloat temp1; gfloat temp2; - rs_spline_t *baseline_exposure; + RSSpline *baseline_exposure; gfloat *baseline_exposure_lut; gboolean has_color_matrix1; @@ -214,9 +214,9 @@ if (knots) { dcp->nknots = nknots; - rs_spline_t *spline = rs_spline_new(knots, dcp->nknots, NATURAL); + RSSpline *spline = rs_spline_new(knots, dcp->nknots, NATURAL); rs_spline_sample(spline, dcp->curve_samples, 65536); - rs_spline_destroy(spline); + g_object_unref(spline); g_free(knots); } } From anders at kvistmail.dk Sun Sep 27 21:11:46 2009 From: anders at kvistmail.dk (Anders Kvist) Date: Sun, 27 Sep 2009 21:11:46 +0200 Subject: [Rawstudio-commit] r2660 - trunk/plugins/output-flickr Message-ID: Author: akv Date: 2009-09-27 21:11:46 +0200 (Sun, 27 Sep 2009) New Revision: 2660 Modified: trunk/plugins/output-flickr/output-flickr.c Log: Gettexted and changed strings. Modified: trunk/plugins/output-flickr/output-flickr.c =================================================================== --- trunk/plugins/output-flickr/output-flickr.c 2009-09-27 19:09:08 UTC (rev 2659) +++ trunk/plugins/output-flickr/output-flickr.c 2009-09-27 19:11:46 UTC (rev 2660) @@ -109,7 +109,7 @@ g_object_class_install_property (object_class, PROP_TITLE, g_param_spec_string ("title", "title", - "Title", + _("Title"), NULL, G_PARAM_READWRITE)); @@ -124,32 +124,32 @@ PROP_DESCRIPTION, g_param_spec_string ("description", "description", - "Description", NULL, + _("Description"), NULL, G_PARAM_READWRITE)); g_object_class_install_property (object_class, PROP_TAGS, g_param_spec_string ("tags", "tags", - "Tags", + _("Tags"), NULL, G_PARAM_READWRITE)); g_object_class_install_property (object_class, PROP_IS_PUBLIC, g_param_spec_boolean ("public", "public", - "Public", FALSE, + _("Public (everyone can see this)"), FALSE, G_PARAM_READWRITE)); g_object_class_install_property (object_class, PROP_IS_FRIEND, g_param_spec_boolean ("friend", "friend", - "Friend", FALSE, + _("Visible to Friends"), FALSE, G_PARAM_READWRITE)); g_object_class_install_property (object_class, PROP_IS_PUBLIC, g_param_spec_boolean ("family", "family", - "Family", FALSE, + _("Visible to Family"), FALSE, G_PARAM_READWRITE)); output_class->execute = execute; @@ -302,19 +302,19 @@ /* Catch errors and show our own and more userfriendly errors */ if (g_ascii_strcasecmp(temp,"Method flickr.auth.getToken failed with error 108 - Invalid frob") == 0) - message = g_strdup("We recieved an error during authentication. You didn't authorize Rawstudio, did you?"); + message = g_strdup(_("We recieved an error during authentication. Please try again.")); else if (g_ascii_strcasecmp(temp, "Call failed with error 98 - Invalid auth token") == 0) - message = g_strdup("Rawstudio were not able to upload the photo cause the authentication has been revoked. Please re-authenticate Rawstudio to upload to Flickr."); + message = g_strdup(_("Rawstudio were not able to upload the photo cause the authentication has been revoked. Please re-authenticate Rawstudio to upload to Flickr.")); else if (g_ascii_strcasecmp(temp,"Method flickr.test.login failed with error 98 - Invalid auth token")) - message = g_strdup("It seems like rawstudio lost it's authentication to upload to your account, please re-authenticate."); + message = g_strdup(_("It seems like rawstudio lost it's authentication to upload to your account, please re-authenticate.")); /* Everything else will be shown along with a note */ else - message = g_strdup_printf("%s\n\nNote: This error isn't catched by Rawstudio. Please let us know that you found it and how to reproduce it so we can make a more useful errormessage. Thanks!", (gchar *) temp); + message = g_strdup_printf(_("%s\n\nNote: This error isn't catched by Rawstudio. Please let us know that you found it and how to reproduce it so we can make a more useful errormessage. Thanks!"), (gchar *) temp); - GtkWidget *dialog = gui_dialog_make_from_text (GTK_STOCK_DIALOG_ERROR, g_strdup ("Flickr error"), message); + GtkWidget *dialog = gui_dialog_make_from_text (GTK_STOCK_DIALOG_ERROR, g_strdup (_("Flickr error")), message); gtk_dialog_add_button (GTK_DIALOG (dialog), GTK_STOCK_OK, GTK_RESPONSE_OK); gdk_threads_enter (); gtk_widget_show_all (dialog); @@ -373,17 +373,17 @@ GtkWidget *vbox = GTK_DIALOG (flickr_auth_dialog)->vbox; - GtkWidget *textlabel = gtk_label_new("Rawstudio needs to be authenticated before it will be able to upload photos to your Flickr account."); + GtkWidget *textlabel = gtk_label_new(_("Rawstudio needs to be authenticated before it will be able to upload photos to your Flickr account.")); gtk_label_set_line_wrap (GTK_LABEL (textlabel), TRUE); gtk_box_pack_start (GTK_BOX (vbox), textlabel, TRUE, TRUE, 4); GtkWidget *table = gtk_table_new (2, 2, FALSE); - GtkWidget *step1label = gtk_label_new ("Step 1:"); - GtkWidget *step2label = gtk_label_new ("Step 2:"); + GtkWidget *step1label = gtk_label_new (_("Step 1:")); + GtkWidget *step2label = gtk_label_new (_("Step 2:")); - GtkWidget *link = gtk_link_button_new_with_label (auth_url, "Authenticate Rawstudio"); + GtkWidget *link = gtk_link_button_new_with_label (auth_url, _("Authenticate Rawstudio")); GtkWidget *hbox = gtk_hbox_new (FALSE, 4); From klauspost at gmail.com Sun Sep 27 21:12:41 2009 From: klauspost at gmail.com (Klaus Post) Date: Sun, 27 Sep 2009 21:12:41 +0200 Subject: [Rawstudio-commit] rawspeed r151 - / Message-ID: Author: post Date: 2009-09-27 21:12:41 +0200 (Sun, 27 Sep 2009) New Revision: 151 Modified: cameras.xml Log: - Added Panasonic DMC GF1 (4:3 mode) - Fixed a few border issues, where strange duplicated pixels where present. Modified: cameras.xml =================================================================== --- cameras.xml 2009-09-25 13:28:22 UTC (rev 150) +++ cameras.xml 2009-09-27 19:12:41 UTC (rev 151) @@ -704,7 +704,7 @@ GREENBLUE REDGREEN - + @@ -712,9 +712,17 @@ GREENBLUE REDGREEN - + + + + GREENBLUE + REDGREEN + + + + GREENBLUE @@ -728,7 +736,7 @@ BLUEGREEN GREENRED - + From anders at kvistmail.dk Sun Sep 27 21:22:13 2009 From: anders at kvistmail.dk (Anders Kvist) Date: Sun, 27 Sep 2009 21:22:13 +0200 Subject: [Rawstudio-commit] r2661 - trunk/plugins/output-flickr Message-ID: Author: akv Date: 2009-09-27 21:22:13 +0200 (Sun, 27 Sep 2009) New Revision: 2661 Modified: trunk/plugins/output-flickr/output-flickr.c Log: Fixed typo. Modified: trunk/plugins/output-flickr/output-flickr.c =================================================================== --- trunk/plugins/output-flickr/output-flickr.c 2009-09-27 19:11:46 UTC (rev 2660) +++ trunk/plugins/output-flickr/output-flickr.c 2009-09-27 19:22:13 UTC (rev 2661) @@ -308,7 +308,7 @@ message = g_strdup(_("Rawstudio were not able to upload the photo cause the authentication has been revoked. Please re-authenticate Rawstudio to upload to Flickr.")); else if (g_ascii_strcasecmp(temp,"Method flickr.test.login failed with error 98 - Invalid auth token")) - message = g_strdup(_("It seems like rawstudio lost it's authentication to upload to your account, please re-authenticate.")); + message = g_strdup(_("It seems like rawstudio lost its authentication to upload to your account, please re-authenticate.")); /* Everything else will be shown along with a note */ else From anders at brander.dk Sun Sep 27 21:26:29 2009 From: anders at brander.dk (Anders Brander) Date: Sun, 27 Sep 2009 21:26:29 +0200 Subject: [Rawstudio-commit] r2662 - in trunk: librawstudio plugins/dcp Message-ID: Author: abrander Date: 2009-09-27 21:26:29 +0200 (Sun, 27 Sep 2009) New Revision: 2662 Added: trunk/librawstudio/rs-huesat-map.c trunk/librawstudio/rs-huesat-map.h Removed: trunk/plugins/dcp/dcp-huesat-map.c trunk/plugins/dcp/dcp-huesat-map.h Modified: trunk/librawstudio/Makefile.am trunk/librawstudio/rawstudio.h trunk/plugins/dcp/Makefile.am trunk/plugins/dcp/dcp.c Log: Moved RSHuesatMap to librawstudio. Modified: trunk/librawstudio/Makefile.am =================================================================== --- trunk/librawstudio/Makefile.am 2009-09-27 19:22:13 UTC (rev 2661) +++ trunk/librawstudio/Makefile.am 2009-09-27 19:26:29 UTC (rev 2662) @@ -37,6 +37,7 @@ rs-tiff.h \ rs-tiff-ifd.h \ rs-tiff-ifd-entry.h \ + rs-huesat-map.h \ x86-cpu.h lib_LTLIBRARIES = librawstudio-1.1.la @@ -68,6 +69,7 @@ rs-tiff.c rs-tiff.h \ rs-tiff-ifd.c rs-tiff-ifd.h \ rs-tiff-ifd-entry.c rs-tiff-ifd-entry.h \ + rs-huesat-map.c rs-huesat-map.h \ rs-stock.c rs-stock.h librawstudio_1_1_la_LIBADD = @PACKAGE_LIBS@ @LIBJPEG@ @LIBTIFF@ $(INTLLIBS) Modified: trunk/librawstudio/rawstudio.h =================================================================== --- trunk/librawstudio/rawstudio.h 2009-09-27 19:22:13 UTC (rev 2661) +++ trunk/librawstudio/rawstudio.h 2009-09-27 19:26:29 UTC (rev 2662) @@ -58,6 +58,7 @@ #include "rs-tiff-ifd-entry.h" #include "rs-tiff-ifd.h" #include "rs-tiff.h" +#include "rs-huesat-map.h" #include "x86-cpu.h" Copied: trunk/librawstudio/rs-huesat-map.c (from rev 2658, trunk/plugins/dcp/dcp-huesat-map.c) =================================================================== --- trunk/librawstudio/rs-huesat-map.c (rev 0) +++ trunk/librawstudio/rs-huesat-map.c 2009-09-27 19:26:29 UTC (rev 2662) @@ -0,0 +1,189 @@ +#include + +G_DEFINE_TYPE (RSHuesatMap, rs_huesat_map, G_TYPE_OBJECT) + +static void +rs_huesat_map_finalize(GObject *object) +{ + RSHuesatMap *map = RS_HUESAT_MAP(object); + + if (map->deltas) + g_free(map->deltas); + + G_OBJECT_CLASS (rs_huesat_map_parent_class)->finalize (object); +} + +static void +rs_huesat_map_class_init(RSHuesatMapClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS (klass); + + object_class->finalize = rs_huesat_map_finalize; +} + +static void +rs_huesat_map_init(RSHuesatMap *self) +{ +} + +RSHuesatMap * +rs_huesat_map_new(guint hue_divisions, guint sat_division, guint val_divisions) +{ + RSHuesatMap *map = g_object_new(RS_TYPE_HUESAT_MAP, NULL); + + if (val_divisions == 0) + val_divisions = 1; + + map->hue_divisions = hue_divisions; + map->sat_divisions = sat_division; + map->val_divisions = val_divisions; + + map->hue_step = sat_division; + map->val_step = hue_divisions * map->hue_step; + + map->deltas = g_new0(RS_VECTOR3, rs_huesat_map_get_deltacount(map)); + + return map; +} + +RSHuesatMap * +rs_huesat_map_new_from_dcp(RSTiff *tiff, const guint ifd, const gushort dims_tag, const gushort table_tag) +{ + RSHuesatMap *map = NULL; + RSTiffIfdEntry *entry; + guint hue_count = 0, sat_count = 0, val_count = 0; + + g_assert(RS_IS_TIFF(tiff)); + + entry = rs_tiff_get_ifd_entry(tiff, ifd, dims_tag); + if (entry && (entry->count > 1)) + { + hue_count = rs_tiff_get_uint(tiff, entry->value_offset); + sat_count = rs_tiff_get_uint(tiff, entry->value_offset+4); + + if (entry->count > 2) + val_count = rs_tiff_get_uint(tiff, entry->value_offset+8); + + entry = rs_tiff_get_ifd_entry(tiff, ifd, table_tag); + if (entry && (entry->count == (hue_count * sat_count * val_count * 3))) + { + gboolean skipSat0 = FALSE; /* FIXME */ + gint val, hue, sat; + gint offset = entry->value_offset; + + map = rs_huesat_map_new(hue_count, sat_count, val_count); + for (val = 0; val < val_count; val++) + { + for (hue = 0; hue < hue_count; hue++) + { + for (sat = (skipSat0) ? 1 : 0; sat < sat_count; sat++) + { + RS_VECTOR3 modify; + + modify.h = rs_tiff_get_float(tiff, offset); + modify.s = rs_tiff_get_float(tiff, offset+4); + modify.v = rs_tiff_get_float(tiff, offset+8); + offset += 12; + + rs_huesat_map_set_delta(map, hue, sat, val, &modify); + } + } + } + } + } + + return map; +} + +RSHuesatMap * +rs_huesat_map_new_interpolated(const RSHuesatMap *map1, RSHuesatMap *map2, gfloat weight1) +{ + RSHuesatMap *map = NULL; + + g_assert(RS_IS_HUESAT_MAP(map1)); + g_assert(RS_IS_HUESAT_MAP(map2)); + + if (weight1 >= 1.0) + return RS_HUESAT_MAP(g_object_ref(G_OBJECT(map1))); + else if (weight1 <= 0.0) + return RS_HUESAT_MAP(g_object_ref(G_OBJECT(map2))); + + if ((map1->hue_divisions == map2->hue_divisions) && + (map1->sat_divisions == map2->sat_divisions) && + (map1->val_divisions == map2->val_divisions)) + { + map = rs_huesat_map_new(map1->hue_divisions, map1->sat_divisions, map1->val_divisions); + gfloat weight2 = 1.0 - weight1; + + const RS_VECTOR3 *data1 = map1->deltas; + const RS_VECTOR3 *data2 = map1->deltas; + RS_VECTOR3 *data3 = map1->deltas; + gint count = map1->hue_divisions * map1->sat_divisions * map1->val_divisions; + + gint index; + for (index = 0; index < count; index++) + { + data3->h = weight1 * data1->h + weight2 * data2->h; + data3->s = weight1 * data1->s + weight2 * data2->s; + data3->v = weight1 * data1->v + weight2 * data2->v; + + data1++; + data2++; + data3++; + } + } + + return map; +} + +guint +rs_huesat_map_get_deltacount(RSHuesatMap *map) +{ + return map->val_divisions * map->hue_divisions * map->sat_divisions; +} + +void +rs_huesat_map_get_delta(RSHuesatMap *map, const guint hue_div, const guint sat_div, const guint val_div, RS_VECTOR3 *modify) +{ + g_assert(RS_IS_HUESAT_MAP(map)); + if (hue_div >= map->hue_divisions || sat_div >= map->sat_divisions || val_div >= map->val_divisions) + { + modify->h = 0.0; + modify->s = 1.0; + modify->v = 1.0; + + return; + } + + gint offset = val_div * map->val_step + hue_div * map->hue_step + sat_div; + + *modify = map->deltas[offset]; +} + +void +rs_huesat_map_set_delta(RSHuesatMap *map, const guint hue_div, const guint sat_div, const guint val_div, const RS_VECTOR3 *modify) +{ + g_assert(RS_IS_HUESAT_MAP(map)); + + if (hue_div >= map->hue_divisions || sat_div >= map->sat_divisions || val_div >= map->val_divisions) + return; + + gint offset = val_div * map->val_step + hue_div * map->hue_step + sat_div; + + map->deltas[offset] = *modify; + + if (sat_div == 0) + map->deltas[offset].v = 1.0; + + else if (sat_div == 1) + { + RS_VECTOR3 zero_sat_modify; + rs_huesat_map_get_delta(map, hue_div, 0, val_div, &zero_sat_modify); + if (zero_sat_modify.v != 1.0f) + { + zero_sat_modify = *modify; + zero_sat_modify.v = 1.0; + rs_huesat_map_set_delta(map, hue_div, 0, val_div, &zero_sat_modify); + } + } +} Property changes on: trunk/librawstudio/rs-huesat-map.c ___________________________________________________________________ Name: svn:mergeinfo + Copied: trunk/librawstudio/rs-huesat-map.h (from rev 2658, trunk/plugins/dcp/dcp-huesat-map.h) =================================================================== --- trunk/librawstudio/rs-huesat-map.h (rev 0) +++ trunk/librawstudio/rs-huesat-map.h 2009-09-27 19:26:29 UTC (rev 2662) @@ -0,0 +1,45 @@ +#ifndef RS_HUESAT_MAP_H +#define RS_HUESAT_MAP_H + +#include + +G_BEGIN_DECLS + +#define RS_TYPE_HUESAT_MAP rs_huesat_map_get_type() +#define RS_HUESAT_MAP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RS_TYPE_HUESAT_MAP, RSHuesatMap)) +#define RS_HUESAT_MAP_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RS_TYPE_HUESAT_MAP, RSHuesatMapClass)) +#define RS_IS_HUESAT_MAP(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RS_TYPE_HUESAT_MAP)) +#define RS_IS_HUESAT_MAP_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RS_TYPE_HUESAT_MAP)) +#define RS_HUESAT_MAP_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RS_TYPE_HUESAT_MAP, RSHuesatMapClass)) + +typedef struct { + GObject parent; + + guint hue_divisions; + guint sat_divisions; + guint val_divisions; + + guint hue_step; + guint val_step; + + RS_VECTOR3 *deltas; +} RSHuesatMap; + +typedef struct { + GObjectClass parent_class; +} RSHuesatMapClass; + +GType rs_huesat_map_get_type(void); + +RSHuesatMap *rs_huesat_map_new(guint hue_divisions, guint sat_division, guint val_divisions); + +RSHuesatMap *rs_huesat_map_new_from_dcp(RSTiff *tiff, const guint ifd, const gushort dims_tag, const gushort table_tag); + +guint rs_huesat_map_get_deltacount(RSHuesatMap *map); + +void rs_huesat_map_get_delta(RSHuesatMap *map, const guint hue_div, const guint sat_div, const guint val_div, RS_VECTOR3 *modify); +void rs_huesat_map_set_delta(RSHuesatMap *map, const guint hue_div, const guint sat_div, const guint val_div, const RS_VECTOR3 *modify); + +G_END_DECLS + +#endif /* RS_HUESAT_MAP_H */ Property changes on: trunk/librawstudio/rs-huesat-map.h ___________________________________________________________________ Name: svn:mergeinfo + Modified: trunk/plugins/dcp/Makefile.am =================================================================== --- trunk/plugins/dcp/Makefile.am 2009-09-27 19:22:13 UTC (rev 2661) +++ trunk/plugins/dcp/Makefile.am 2009-09-27 19:26:29 UTC (rev 2662) @@ -19,4 +19,4 @@ dcp_la_LIBADD = @PACKAGE_LIBS@ dcp_la_LDFLAGS = -module -avoid-version -dcp_la_SOURCES = dcp.c dcp-huesat-map.c dcp-huesat-map.h +dcp_la_SOURCES = dcp.c Deleted: trunk/plugins/dcp/dcp-huesat-map.c =================================================================== --- trunk/plugins/dcp/dcp-huesat-map.c 2009-09-27 19:22:13 UTC (rev 2661) +++ trunk/plugins/dcp/dcp-huesat-map.c 2009-09-27 19:26:29 UTC (rev 2662) @@ -1,190 +0,0 @@ -#include -#include "dcp-huesat-map.h" - -G_DEFINE_TYPE (RSHuesatMap, rs_huesat_map, G_TYPE_OBJECT) - -static void -rs_huesat_map_finalize(GObject *object) -{ - RSHuesatMap *map = RS_HUESAT_MAP(object); - - if (map->deltas) - g_free(map->deltas); - - G_OBJECT_CLASS (rs_huesat_map_parent_class)->finalize (object); -} - -static void -rs_huesat_map_class_init(RSHuesatMapClass *klass) -{ - GObjectClass *object_class = G_OBJECT_CLASS (klass); - - object_class->finalize = rs_huesat_map_finalize; -} - -static void -rs_huesat_map_init(RSHuesatMap *self) -{ -} - -RSHuesatMap * -rs_huesat_map_new(guint hue_divisions, guint sat_division, guint val_divisions) -{ - RSHuesatMap *map = g_object_new(RS_TYPE_HUESAT_MAP, NULL); - - if (val_divisions == 0) - val_divisions = 1; - - map->hue_divisions = hue_divisions; - map->sat_divisions = sat_division; - map->val_divisions = val_divisions; - - map->hue_step = sat_division; - map->val_step = hue_divisions * map->hue_step; - - map->deltas = g_new0(RS_VECTOR3, rs_huesat_map_get_deltacount(map)); - - return map; -} - -RSHuesatMap * -rs_huesat_map_new_from_dcp(RSTiff *tiff, const guint ifd, const gushort dims_tag, const gushort table_tag) -{ - RSHuesatMap *map = NULL; - RSTiffIfdEntry *entry; - guint hue_count = 0, sat_count = 0, val_count = 0; - - g_assert(RS_IS_TIFF(tiff)); - - entry = rs_tiff_get_ifd_entry(tiff, ifd, dims_tag); - if (entry && (entry->count > 1)) - { - hue_count = rs_tiff_get_uint(tiff, entry->value_offset); - sat_count = rs_tiff_get_uint(tiff, entry->value_offset+4); - - if (entry->count > 2) - val_count = rs_tiff_get_uint(tiff, entry->value_offset+8); - - entry = rs_tiff_get_ifd_entry(tiff, ifd, table_tag); - if (entry && (entry->count == (hue_count * sat_count * val_count * 3))) - { - gboolean skipSat0 = FALSE; /* FIXME */ - gint val, hue, sat; - gint offset = entry->value_offset; - - map = rs_huesat_map_new(hue_count, sat_count, val_count); - for (val = 0; val < val_count; val++) - { - for (hue = 0; hue < hue_count; hue++) - { - for (sat = (skipSat0) ? 1 : 0; sat < sat_count; sat++) - { - RS_VECTOR3 modify; - - modify.h = rs_tiff_get_float(tiff, offset); - modify.s = rs_tiff_get_float(tiff, offset+4); - modify.v = rs_tiff_get_float(tiff, offset+8); - offset += 12; - - rs_huesat_map_set_delta(map, hue, sat, val, &modify); - } - } - } - } - } - - return map; -} - -RSHuesatMap * -rs_huesat_map_new_interpolated(const RSHuesatMap *map1, RSHuesatMap *map2, gfloat weight1) -{ - RSHuesatMap *map = NULL; - - g_assert(RS_IS_HUESAT_MAP(map1)); - g_assert(RS_IS_HUESAT_MAP(map2)); - - if (weight1 >= 1.0) - return RS_HUESAT_MAP(g_object_ref(G_OBJECT(map1))); - else if (weight1 <= 0.0) - return RS_HUESAT_MAP(g_object_ref(G_OBJECT(map2))); - - if ((map1->hue_divisions == map2->hue_divisions) && - (map1->sat_divisions == map2->sat_divisions) && - (map1->val_divisions == map2->val_divisions)) - { - map = rs_huesat_map_new(map1->hue_divisions, map1->sat_divisions, map1->val_divisions); - gfloat weight2 = 1.0 - weight1; - - const RS_VECTOR3 *data1 = map1->deltas; - const RS_VECTOR3 *data2 = map1->deltas; - RS_VECTOR3 *data3 = map1->deltas; - gint count = map1->hue_divisions * map1->sat_divisions * map1->val_divisions; - - gint index; - for (index = 0; index < count; index++) - { - data3->h = weight1 * data1->h + weight2 * data2->h; - data3->s = weight1 * data1->s + weight2 * data2->s; - data3->v = weight1 * data1->v + weight2 * data2->v; - - data1++; - data2++; - data3++; - } - } - - return map; -} - -guint -rs_huesat_map_get_deltacount(RSHuesatMap *map) -{ - return map->val_divisions * map->hue_divisions * map->sat_divisions; -} - -void -rs_huesat_map_get_delta(RSHuesatMap *map, const guint hue_div, const guint sat_div, const guint val_div, RS_VECTOR3 *modify) -{ - g_assert(RS_IS_HUESAT_MAP(map)); - if (hue_div >= map->hue_divisions || sat_div >= map->sat_divisions || val_div >= map->val_divisions) - { - modify->h = 0.0; - modify->s = 1.0; - modify->v = 1.0; - - return; - } - - gint offset = val_div * map->val_step + hue_div * map->hue_step + sat_div; - - *modify = map->deltas[offset]; -} - -void -rs_huesat_map_set_delta(RSHuesatMap *map, const guint hue_div, const guint sat_div, const guint val_div, const RS_VECTOR3 *modify) -{ - g_assert(RS_IS_HUESAT_MAP(map)); - - if (hue_div >= map->hue_divisions || sat_div >= map->sat_divisions || val_div >= map->val_divisions) - return; - - gint offset = val_div * map->val_step + hue_div * map->hue_step + sat_div; - - map->deltas[offset] = *modify; - - if (sat_div == 0) - map->deltas[offset].v = 1.0; - - else if (sat_div == 1) - { - RS_VECTOR3 zero_sat_modify; - rs_huesat_map_get_delta(map, hue_div, 0, val_div, &zero_sat_modify); - if (zero_sat_modify.v != 1.0f) - { - zero_sat_modify = *modify; - zero_sat_modify.v = 1.0; - rs_huesat_map_set_delta(map, hue_div, 0, val_div, &zero_sat_modify); - } - } -} Deleted: trunk/plugins/dcp/dcp-huesat-map.h =================================================================== --- trunk/plugins/dcp/dcp-huesat-map.h 2009-09-27 19:22:13 UTC (rev 2661) +++ trunk/plugins/dcp/dcp-huesat-map.h 2009-09-27 19:26:29 UTC (rev 2662) @@ -1,45 +0,0 @@ -#ifndef RS_HUESAT_MAP_H -#define RS_HUESAT_MAP_H - -#include - -G_BEGIN_DECLS - -#define RS_TYPE_HUESAT_MAP rs_huesat_map_get_type() -#define RS_HUESAT_MAP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RS_TYPE_HUESAT_MAP, RSHuesatMap)) -#define RS_HUESAT_MAP_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RS_TYPE_HUESAT_MAP, RSHuesatMapClass)) -#define RS_IS_HUESAT_MAP(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RS_TYPE_HUESAT_MAP)) -#define RS_IS_HUESAT_MAP_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RS_TYPE_HUESAT_MAP)) -#define RS_HUESAT_MAP_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RS_TYPE_HUESAT_MAP, RSHuesatMapClass)) - -typedef struct { - GObject parent; - - guint hue_divisions; - guint sat_divisions; - guint val_divisions; - - guint hue_step; - guint val_step; - - RS_VECTOR3 *deltas; -} RSHuesatMap; - -typedef struct { - GObjectClass parent_class; -} RSHuesatMapClass; - -GType rs_huesat_map_get_type(void); - -RSHuesatMap *rs_huesat_map_new(guint hue_divisions, guint sat_division, guint val_divisions); - -RSHuesatMap *rs_huesat_map_new_from_dcp(RSTiff *tiff, const guint ifd, const gushort dims_tag, const gushort table_tag); - -guint rs_huesat_map_get_deltacount(RSHuesatMap *map); - -void rs_huesat_map_get_delta(RSHuesatMap *map, const guint hue_div, const guint sat_div, const guint val_div, RS_VECTOR3 *modify); -void rs_huesat_map_set_delta(RSHuesatMap *map, const guint hue_div, const guint sat_div, const guint val_div, const RS_VECTOR3 *modify); - -G_END_DECLS - -#endif /* RS_HUESAT_MAP_H */ Modified: trunk/plugins/dcp/dcp.c =================================================================== --- trunk/plugins/dcp/dcp.c 2009-09-27 19:22:13 UTC (rev 2661) +++ trunk/plugins/dcp/dcp.c 2009-09-27 19:26:29 UTC (rev 2662) @@ -21,7 +21,6 @@ #include #include /* pow() */ -#include "dcp-huesat-map.h" #define RS_TYPE_DCP (rs_dcp_type) #define RS_DCP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RS_TYPE_DCP, RSDcp)) From anders at kvistmail.dk Sun Sep 27 21:29:42 2009 From: anders at kvistmail.dk (Anders Kvist) Date: Sun, 27 Sep 2009 21:29:42 +0200 Subject: [Rawstudio-commit] r2663 - in trunk: . plugins Message-ID: Author: akv Date: 2009-09-27 21:29:42 +0200 (Sun, 27 Sep 2009) New Revision: 2663 Modified: trunk/configure.in trunk/plugins/Makefile.am Log: Enabled flickr uploader plugin - Rawstudio is now dependent on libflickcurl. Modified: trunk/configure.in =================================================================== --- trunk/configure.in 2009-09-27 19:26:29 UTC (rev 2662) +++ trunk/configure.in 2009-09-27 19:29:42 UTC (rev 2663) @@ -56,7 +56,7 @@ fi AC_SUBST(LIBTIFF) -pkg_modules="gtk+-2.0 >= 2.8.0 libxml-2.0 >= 2.4 gconf-2.0 >= 2.0 lcms dbus-1 exiv2 fftw3f lensfun" +pkg_modules="gtk+-2.0 >= 2.8.0 libxml-2.0 >= 2.4 gconf-2.0 >= 2.0 lcms dbus-1 exiv2 fftw3f lensfun flickcurl" PKG_CHECK_MODULES(PACKAGE, [$pkg_modules]) AC_SUBST(PACKAGE_CFLAGS) AC_SUBST(PACKAGE_LIBS) @@ -94,6 +94,7 @@ plugins/meta-x3f/Makefile plugins/output-jpegfile/Makefile plugins/output-pngfile/Makefile +plugins/output-flickr/Makefile plugins/output-tifffile/Makefile plugins/resample/Makefile plugins/rotate/Makefile Modified: trunk/plugins/Makefile.am =================================================================== --- trunk/plugins/Makefile.am 2009-09-27 19:26:29 UTC (rev 2662) +++ trunk/plugins/Makefile.am 2009-09-27 19:29:42 UTC (rev 2663) @@ -17,6 +17,7 @@ meta-tiff \ meta-x3f \ output-jpegfile \ + output-flickr \ output-pngfile \ output-tifffile \ resample \ From anders at kvistmail.dk Sun Sep 27 22:17:27 2009 From: anders at kvistmail.dk (Anders Kvist) Date: Sun, 27 Sep 2009 22:17:27 +0200 Subject: [Rawstudio-commit] r2664 - in trunk: . src Message-ID: Author: akv Date: 2009-09-27 22:17:27 +0200 (Sun, 27 Sep 2009) New Revision: 2664 Added: trunk/src/rs-library.c trunk/src/rs-library.h Modified: trunk/configure.in trunk/src/Makefile.am trunk/src/application.c trunk/src/application.h Log: Adding rs_library.c|h and initializing rs->library. Modified: trunk/configure.in =================================================================== --- trunk/configure.in 2009-09-27 19:29:42 UTC (rev 2663) +++ trunk/configure.in 2009-09-27 20:17:27 UTC (rev 2664) @@ -56,7 +56,7 @@ fi AC_SUBST(LIBTIFF) -pkg_modules="gtk+-2.0 >= 2.8.0 libxml-2.0 >= 2.4 gconf-2.0 >= 2.0 lcms dbus-1 exiv2 fftw3f lensfun flickcurl" +pkg_modules="gtk+-2.0 >= 2.8.0 libxml-2.0 >= 2.4 gconf-2.0 >= 2.0 lcms dbus-1 exiv2 fftw3f lensfun flickcurl sqlite3" PKG_CHECK_MODULES(PACKAGE, [$pkg_modules]) AC_SUBST(PACKAGE_CFLAGS) AC_SUBST(PACKAGE_LIBS) Modified: trunk/src/Makefile.am =================================================================== --- trunk/src/Makefile.am 2009-09-27 19:29:42 UTC (rev 2663) +++ trunk/src/Makefile.am 2009-09-27 20:17:27 UTC (rev 2664) @@ -52,7 +52,8 @@ eog-pixbuf-cell-renderer.c eog-pixbuf-cell-renderer.h \ rs-pixbuf.c rs-pixbuf.h \ rs-external-editor.c rs-external-editor.h \ - rs-dir-selector.c rs-dir-selector.h + rs-dir-selector.c rs-dir-selector.h \ + rs-library.c rs-library.h rawstudio_LDADD = ../librawstudio/librawstudio- at VERSION@.la @PACKAGE_LIBS@ @LIBJPEG@ @LIBTIFF@ $(INTLLIBS) Modified: trunk/src/application.c =================================================================== --- trunk/src/application.c 2009-09-27 19:29:42 UTC (rev 2663) +++ trunk/src/application.c 2009-09-27 20:17:27 UTC (rev 2664) @@ -42,6 +42,7 @@ #include "rs-photo.h" #include "rs-exif.h" #include "rs-preload.h" +#include "rs-library.h" static void photo_spatial_changed(RS_PHOTO *photo, RS_BLOB *rs); @@ -205,6 +206,9 @@ rs->queue = rs_batch_new_queue(); rs->current_setting = 0; + /* Create library */ + rs->library = rs_library_new(); + /* Build basic filter chain */ rs->filter_input = rs_filter_new("RSInputImage16", NULL); rs->filter_demosaic = rs_filter_new("RSDemosaic", rs->filter_input); @@ -524,6 +528,8 @@ rs_stock_init(); + rs_library_init(rs->library); + #if GTK_CHECK_VERSION(2,10,0) gtk_link_button_set_uri_hook(runuri,NULL,NULL); #endif Modified: trunk/src/application.h =================================================================== --- trunk/src/application.h 2009-09-27 19:29:42 UTC (rev 2663) +++ trunk/src/application.h 2009-09-27 20:17:27 UTC (rev 2664) @@ -26,6 +26,7 @@ #include #include "rs-arch.h" #include "rs-cms.h" +#include "rs-library.h" /* Check for thread support */ #if (!defined(G_THREADS_ENABLED) || defined(G_THREADS_IMPL_NONE)) @@ -60,6 +61,7 @@ RS_QUEUE *queue; RS_CMS *cms; RSStore *store; + RS_LIBRARY *library; /* These should be moved to a future RS_WINDOW */ GtkWidget *window; Added: trunk/src/rs-library.c =================================================================== --- trunk/src/rs-library.c (rev 0) +++ trunk/src/rs-library.c 2009-09-27 20:17:27 UTC (rev 2664) @@ -0,0 +1,402 @@ +/* + * Copyright (C) 2006-2009 Anders Brander and + * Anders Kvist + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +/* Documentation: + * http://www.sqlite.org/capi3ref.html + */ + +/* Database layout: + * + * library + * id + * filename + * + * tags + * id + * tagname + * + * phototags + * photo + * tag + */ + +#include +#include +#include +#include +#include +#include "rawstudio.h" +#include "rs-library.h" + +void library_sqlite_error(sqlite3 *db, gint result); +gint library_create_tables(sqlite3 *db); +gint library_find_tag_id(RS_LIBRARY *library, gchar *tagname); +gint library_find_photo_id(RS_LIBRARY *library, gchar *photo); +void library_photo_add_tag(RS_LIBRARY *library, gint photo_id, gint tag_id); +gboolean library_is_photo_tagged(RS_LIBRARY *library, gint photo_id, gint tag_id); +void library_add_photo(RS_LIBRARY *library, gchar *filename); +void library_add_tag(RS_LIBRARY *library, gchar *tagname); +void library_delete_photo(RS_LIBRARY *library, gint photo_id); +void library_delete_tag(RS_LIBRARY *library, gint tag_id); +void library_photo_delete_tags(RS_LIBRARY *library, gint photo_id); +void library_tag_delete_photos(RS_LIBRARY *library, gint tag_id); +gboolean library_tag_is_used(RS_LIBRARY *library, gint tag_id); + +//GList* rs_library_search(GList *tags); +//void rs_library_add_directory(gchar *directory, gboolean recursive); + + +/* BEGIN PRIVATE FUNCTIONS */ + +void +library_sqlite_error(sqlite3 *db, gint result) +{ + if (result != SQLITE_OK) + { + g_warning("sqlite3 warning: %s\n", sqlite3_errmsg(db)); + } +} + +gint +library_create_tables(sqlite3 *db) +{ + sqlite3_stmt *stmt; + gint rc; + + /* Create table (library) to hold all known photos */ + sqlite3_prepare_v2(db, "create table library (id integer primary key, filename varchar(1024))", -1, &stmt, NULL); + rc = sqlite3_step(stmt); + sqlite3_finalize(stmt); + + /* Create table (tags) with all known tags */ + sqlite3_prepare_v2(db, "create table tags (id integer primary key, tagname varchar(128))", -1, &stmt, NULL); + rc = sqlite3_step(stmt); + sqlite3_finalize(stmt); + + /* Create table (phototags) to bind tags and photos together */ + sqlite3_prepare_v2(db, "create table phototags (photo integer, tag integer)", -1, &stmt, NULL); + rc = sqlite3_step(stmt); + sqlite3_finalize(stmt); + + return SQLITE_OK; +} + + +gint +library_find_tag_id(RS_LIBRARY *library, gchar *tagname) +{ + sqlite3 *db = library->db; + sqlite3_stmt *stmt; + gint rc, tag_id = -1; + + rc = sqlite3_prepare_v2(db, "SELECT id FROM tags WHERE tagname = ?1;", -1, &stmt, NULL); + rc = sqlite3_bind_text(stmt, 1, tagname, strlen(tagname), SQLITE_TRANSIENT); + rc = sqlite3_step(stmt); + if (rc == SQLITE_ROW) + tag_id = sqlite3_column_int(stmt, 0); + rc = sqlite3_finalize(stmt); + return tag_id; +} + +gint +library_find_photo_id(RS_LIBRARY *library, gchar *photo) +{ + sqlite3 *db = library->db; + sqlite3_stmt *stmt; + gint rc, photo_id = -1; + + rc = sqlite3_prepare_v2(db, "SELECT id FROM library WHERE filename = ?1;", -1, &stmt, NULL); + rc = sqlite3_bind_text(stmt, 1, photo, strlen(photo), SQLITE_TRANSIENT); + library_sqlite_error(db, rc); + rc = sqlite3_step(stmt); + if (rc == SQLITE_ROW) + photo_id = sqlite3_column_int(stmt, 0); + rc = sqlite3_finalize(stmt); + return photo_id; +} + +void +library_photo_add_tag(RS_LIBRARY *library, gint photo_id, gint tag_id) +{ + sqlite3 *db = library->db; + gint rc; + sqlite3_stmt *stmt; + + rc = sqlite3_prepare_v2(db, "INSERT INTO phototags (photo, tag) VALUES (?1, ?2);", -1, &stmt, NULL); + rc = sqlite3_bind_int (stmt, 1, photo_id); + rc = sqlite3_bind_int (stmt, 2, tag_id); + rc = sqlite3_step(stmt); + if (rc != SQLITE_DONE) + library_sqlite_error(db, rc); + sqlite3_finalize(stmt); +} + +gboolean +library_is_photo_tagged(RS_LIBRARY *library, gint photo_id, gint tag_id) +{ + sqlite3 *db = library->db; + gint rc; + sqlite3_stmt *stmt; + + rc = sqlite3_prepare_v2(db, "SELECT * FROM phototags WHERE photo = ?1 AND tag = ?2;", -1, &stmt, NULL); + rc = sqlite3_bind_int (stmt, 1, photo_id); + rc = sqlite3_bind_int (stmt, 2, tag_id); + rc = sqlite3_step(stmt); + sqlite3_finalize(stmt); + + if (rc == SQLITE_ROW) + return TRUE; + else + return FALSE; +} + +void +library_add_photo(RS_LIBRARY *library, gchar *filename) +{ + sqlite3 *db = library->db; + gint rc; + sqlite3_stmt *stmt; + + sqlite3_prepare_v2(db, "INSERT INTO library (filename) VALUES (?1);", -1, &stmt, NULL); + rc = sqlite3_bind_text(stmt, 1, filename, strlen(filename), SQLITE_TRANSIENT); + rc = sqlite3_step(stmt); + if (rc != SQLITE_DONE) + library_sqlite_error(db, rc); + sqlite3_finalize(stmt); +} + +void +library_add_tag(RS_LIBRARY *library, gchar *tagname) +{ + sqlite3 *db = library->db; + gint rc; + sqlite3_stmt *stmt; + + sqlite3_prepare_v2(db, "INSERT INTO tags (tagname) VALUES (?1);", -1, &stmt, NULL); + rc = sqlite3_bind_text(stmt, 1, tagname, strlen(tagname), SQLITE_TRANSIENT); + rc = sqlite3_step(stmt); + if (rc != SQLITE_DONE) + library_sqlite_error(db, rc); + sqlite3_finalize(stmt); +} + +void +library_delete_photo(RS_LIBRARY *library, gint photo_id) +{ + sqlite3 *db = library->db; + sqlite3_stmt *stmt; + gint rc; + + rc = sqlite3_prepare_v2(db, "DELETE FROM library WHERE id = ?1;", -1, &stmt, NULL); + rc = sqlite3_bind_int(stmt, 1, photo_id); + library_sqlite_error(db, rc); + rc = sqlite3_step(stmt); + if (rc != SQLITE_DONE) + library_sqlite_error(db, rc); + rc = sqlite3_finalize(stmt); +} + +void +library_delete_tag(RS_LIBRARY *library, gint tag_id) +{ + sqlite3 *db = library->db; + sqlite3_stmt *stmt; + gint rc; + + rc = sqlite3_prepare_v2(db, "DELETE FROM library WHERE filename = ?1;", -1, &stmt, NULL); + rc = sqlite3_bind_int(stmt, 1, tag_id); + library_sqlite_error(db, rc); + rc = sqlite3_step(stmt); + if (rc != SQLITE_DONE) + library_sqlite_error(db, rc); + rc = sqlite3_finalize(stmt); +} + +void +library_photo_delete_tags(RS_LIBRARY *library, gint photo_id) +{ + sqlite3 *db = library->db; + sqlite3_stmt *stmt; + gint rc; + + rc = sqlite3_prepare_v2(db, "DELETE FROM phototags WHERE photo = ?1;", -1, &stmt, NULL); + rc = sqlite3_bind_int(stmt, 1, photo_id); + library_sqlite_error(db, rc); + rc = sqlite3_step(stmt); + if (rc != SQLITE_DONE) + library_sqlite_error(db, rc); + rc = sqlite3_finalize(stmt); +} + +void +library_tag_delete_photos(RS_LIBRARY *library, gint tag_id) +{ + sqlite3 *db = library->db; + sqlite3_stmt *stmt; + gint rc; + + rc = sqlite3_prepare_v2(db, "DELETE FROM phototags WHERE tag = ?1;", -1, &stmt, NULL); + rc = sqlite3_bind_int(stmt, 1, tag_id); + library_sqlite_error(db, rc); + rc = sqlite3_step(stmt); + if (rc != SQLITE_DONE) + library_sqlite_error(db, rc); + rc = sqlite3_finalize(stmt); +} + +gboolean +library_tag_is_used(RS_LIBRARY *library, gint tag_id) +{ + sqlite3 *db = library->db; + gint rc; + sqlite3_stmt *stmt; + + rc = sqlite3_prepare_v2(db, "SELECT * FROM phototags WHERE tag = ?1;", -1, &stmt, NULL); + rc = sqlite3_bind_int (stmt, 1, tag_id); + rc = sqlite3_step(stmt); + sqlite3_finalize(stmt); + + if (rc == SQLITE_ROW) + return TRUE; + else + return FALSE; +} + +/* END PRIVATE FUNCTIONS */ + + +/* BEGIN PUBLIC FUNCTIONS */ + +RS_LIBRARY * +rs_library_new() +{ + return g_malloc(sizeof(RS_LIBRARY)); +} + +void +rs_library_init(RS_LIBRARY *library) +{ + int rc; + + gchar *database = g_strdup_printf("%s/.rawstudio/library.db", g_get_home_dir()); + + /* If unable to create database we exit */ + if(sqlite3_open(database, &(library->db))) + { + g_debug("sqlite3 debug: could not open database %s\n", database); + sqlite3_close(library->db); + exit(1); + } + g_free(database); + + rc = library_create_tables(library->db); + library_sqlite_error(library->db, rc); +} + +void +rs_library_add_photo(RS_LIBRARY *library, gchar *filename) +{ + if (library_find_photo_id(library, filename) == -1) + { + g_debug("Adding photo to library: %s",filename); + library_add_photo(library, filename); + } +} + +void +rs_library_add_tag(RS_LIBRARY *library, gchar *tagname) +{ + if (library_find_tag_id(library, tagname) == -1) + { + g_debug("Adding tag to tags: %s",tagname); + library_add_tag(library, tagname); + } + +} + +void +rs_library_photo_add_tag(RS_LIBRARY *library, gchar *filename, gchar *tagname) +{ + gint photo_id = 0, tag_id; + + photo_id = library_find_photo_id(library, filename); + if (photo_id == -1) + { + g_warning("Photo not known..."); + return; + } + + tag_id = library_find_tag_id(library, tagname); + if (tag_id == -1) + { + g_warning("Tag not known..."); + return; + } + + if (!library_is_photo_tagged(library, photo_id, tag_id)) + library_photo_add_tag(library, photo_id, tag_id); + + return; +} + +void +rs_library_delete_photo(RS_LIBRARY *library, gchar *photo) +{ + gint photo_id = -1; + + photo_id = library_find_photo_id(library, photo); + if (photo_id == -1) + { + g_warning("Photo not known..."); + return; + } + + library_photo_delete_tags(library, photo_id); + library_delete_photo(library, photo_id); +} + +gboolean +rs_library_delete_tag(RS_LIBRARY *library, gchar *tag, gboolean force) +{ + gint tag_id = -1; + + tag_id = library_find_tag_id(library, tag); + if (tag_id == -1) + { + g_warning("Tag not known..."); + return FALSE; + } + + if (library_tag_is_used(library, tag_id)) + if (force) + { + library_tag_delete_photos(library, tag_id); + library_delete_tag(library, tag_id); + } + else + { + g_warning("Tag is in use..."); + return FALSE; + } + else + library_delete_tag(library, tag_id); + return TRUE; +} + +/* END PUBLIC FUNCTIONS */ Added: trunk/src/rs-library.h =================================================================== --- trunk/src/rs-library.h (rev 0) +++ trunk/src/rs-library.h 2009-09-27 20:17:27 UTC (rev 2664) @@ -0,0 +1,44 @@ +/* + * Copyright (C) 2006-2009 Anders Brander and + * Anders Kvist + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifndef RS_LIBRARY_H +#define RS_LIBRARY_H + +#include +#include +#include "sqlite3.h" + +typedef struct +{ + sqlite3 *db; +} RS_LIBRARY; + +RS_LIBRARY * rs_library_new(); +void rs_library_init(RS_LIBRARY *library); +void rs_library_add_photo(RS_LIBRARY *library, gchar *filename); +void rs_library_add_tag(RS_LIBRARY *library, gchar *tagname); +void rs_library_photo_add_tag(RS_LIBRARY *library, gchar *filename, gchar *tagname); +void rs_library_delete_photo(RS_LIBRARY *library, gchar *photo); +gboolean rs_library_delete_tag(RS_LIBRARY *library, gchar *tag, gboolean force); + +//void rs_library_delete_tag(gchar *filename, gchar *tag); +//void rs_library_find_tags(gchar *filename); +//void rs_library_find_photos(gchar *tag); + +#endif /* RS_LIBRARY_H */ From anders at kvistmail.dk Sun Sep 27 22:33:35 2009 From: anders at kvistmail.dk (Anders Kvist) Date: Sun, 27 Sep 2009 22:33:35 +0200 Subject: [Rawstudio-commit] r2665 - trunk Message-ID: Author: akv Date: 2009-09-27 22:33:34 +0200 (Sun, 27 Sep 2009) New Revision: 2665 Modified: trunk/configure.in Log: Added dependency on libcurl Modified: trunk/configure.in =================================================================== --- trunk/configure.in 2009-09-27 20:17:27 UTC (rev 2664) +++ trunk/configure.in 2009-09-27 20:33:34 UTC (rev 2665) @@ -56,7 +56,7 @@ fi AC_SUBST(LIBTIFF) -pkg_modules="gtk+-2.0 >= 2.8.0 libxml-2.0 >= 2.4 gconf-2.0 >= 2.0 lcms dbus-1 exiv2 fftw3f lensfun flickcurl sqlite3" +pkg_modules="gtk+-2.0 >= 2.8.0 libxml-2.0 >= 2.4 gconf-2.0 >= 2.0 lcms dbus-1 exiv2 fftw3f lensfun libcurl flickcurl sqlite3" PKG_CHECK_MODULES(PACKAGE, [$pkg_modules]) AC_SUBST(PACKAGE_CFLAGS) AC_SUBST(PACKAGE_LIBS) From anders at kvistmail.dk Sun Sep 27 22:47:10 2009 From: anders at kvistmail.dk (Anders Kvist) Date: Sun, 27 Sep 2009 22:47:10 +0200 Subject: [Rawstudio-commit] r2666 - trunk/src Message-ID: Author: akv Date: 2009-09-27 22:47:10 +0200 (Sun, 27 Sep 2009) New Revision: 2666 Modified: trunk/src/gtk-interface.c trunk/src/rs-actions.c trunk/src/rs-store.c trunk/src/rs-store.h Log: Enabling library - adding photos to library when loading a directory. Modified: trunk/src/gtk-interface.c =================================================================== --- trunk/src/gtk-interface.c 2009-09-27 20:33:34 UTC (rev 2665) +++ trunk/src/gtk-interface.c 2009-09-27 20:47:10 UTC (rev 2666) @@ -914,7 +914,7 @@ if (g_file_test(abspath, G_FILE_TEST_IS_DIR)) { rs_store_remove(rs->store, NULL, NULL); - if (rs_store_load_directory(rs->store, abspath) >= 0) + if (rs_store_load_directory(rs->store, abspath, rs->library) >= 0) rs_conf_set_string(CONF_LWD, abspath); } else if (g_file_test(abspath, G_FILE_TEST_IS_REGULAR)) @@ -922,13 +922,13 @@ lwd = g_path_get_dirname(abspath); filename = g_path_get_basename(abspath); rs_store_remove(rs->store, NULL, NULL); - if (rs_store_load_directory(rs->store, lwd) >= 0) + if (rs_store_load_directory(rs->store, lwd, rs->library) >= 0) rs_conf_set_string(CONF_LWD, lwd); rs_store_set_selected_name(rs->store, abspath); g_free(lwd); } else - rs_store_load_directory(rs->store, NULL); + rs_store_load_directory(rs->store, NULL, rs->library); g_free(abspath); } } @@ -953,7 +953,7 @@ gui_status_push(_("Opening directory...")); gui_set_busy(TRUE); GTK_CATCHUP(); - if (rs_store_load_directory(rs->store, path) >= 0) + if (rs_store_load_directory(rs->store, path, rs->library) >= 0) rs_conf_set_string(CONF_LWD, path); g_string_append(window_title, " - "); g_string_append(window_title, path); @@ -1175,7 +1175,7 @@ GTK_CATCHUP(); gui_status_push(_("Opening directory...")); - if (rs_store_load_directory(rs->store, lwd)) + if (rs_store_load_directory(rs->store, lwd, rs->library)) { gint last_priority_page = 0; rs_conf_get_integer(CONF_LAST_PRIORITY_PAGE, &last_priority_page); Modified: trunk/src/rs-actions.c =================================================================== --- trunk/src/rs-actions.c 2009-09-27 20:33:34 UTC (rev 2665) +++ trunk/src/rs-actions.c 2009-09-27 20:47:10 UTC (rev 2666) @@ -153,7 +153,7 @@ filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (fc)); gtk_widget_destroy (fc); rs_store_remove(rs->store, NULL, NULL); - if (rs_store_load_directory(rs->store, filename) >= 0) + if (rs_store_load_directory(rs->store, filename, rs->library) >= 0) rs_conf_set_string(CONF_LWD, filename); g_free (filename); } else @@ -240,7 +240,7 @@ ACTION(reload) { rs_store_remove(rs->store, NULL, NULL); - rs_store_load_directory(rs->store, NULL); + rs_store_load_directory(rs->store, NULL, rs->library); } ACTION(delete_flagged) Modified: trunk/src/rs-store.c =================================================================== --- trunk/src/rs-store.c 2009-09-27 20:33:34 UTC (rev 2665) +++ trunk/src/rs-store.c 2009-09-27 20:47:10 UTC (rev 2666) @@ -998,7 +998,7 @@ } static gint -load_directory(RSStore *store, const gchar *path, const gboolean load_8bit, const gboolean load_recursive) +load_directory(RSStore *store, const gchar *path, RS_LIBRARY *library, const gboolean load_8bit, const gboolean load_recursive) { const gchar *name; gchar *fullname; @@ -1055,10 +1055,13 @@ job->path = gtk_tree_model_get_path(GTK_TREE_MODEL(store->store), &iter); g_async_queue_push(loader_queue, job); + /* Add photo to library */ + rs_library_add_photo(library, fullname); + count++; } else if (load_recursive && g_file_test(fullname, G_FILE_TEST_IS_DIR)) - count += load_directory(store, fullname, load_8bit, load_recursive); + count += load_directory(store, fullname, library, load_8bit, load_recursive); g_free(fullname); } @@ -1133,7 +1136,7 @@ * @return The number of files loaded or -1 */ gint -rs_store_load_directory(RSStore *store, const gchar *path) +rs_store_load_directory(RSStore *store, const gchar *path, RS_LIBRARY *library) { static gboolean running = FALSE; GStaticMutex lock = G_STATIC_MUTEX_INIT; @@ -1172,7 +1175,7 @@ /* Block the priority count */ g_signal_handler_block(store->store, store->counthandler); - items = load_directory(store, path, load_8bit, load_recursive); + items = load_directory(store, path, library, load_8bit, load_recursive); /* unset model and make sure we have enough columns */ for (n=0;n Author: akv Date: 2009-09-27 23:15:30 +0200 (Sun, 27 Sep 2009) New Revision: 2667 Modified: trunk/src/gtk-interface.c trunk/src/rs-actions.c trunk/src/rs-library.c trunk/src/rs-library.h trunk/src/rs-store.c trunk/src/ui.xml Log: Merged rawstudio-library branch into rawstudio. Modified: trunk/src/gtk-interface.c =================================================================== --- trunk/src/gtk-interface.c 2009-09-27 20:47:10 UTC (rev 2666) +++ trunk/src/gtk-interface.c 2009-09-27 21:15:30 UTC (rev 2667) @@ -160,6 +160,8 @@ g_free(label); rs_set_photo(rs, photo); + /* Add all photos we open to the library and tag them with default values */ + rs_library_photo_default_tags(rs->library, (gchar *) filename, photo->metadata); rs_toolbox_set_photo(RS_TOOLBOX(rs->tools), photo); GTK_CATCHUP(); gui_set_busy(FALSE); Modified: trunk/src/rs-actions.c =================================================================== --- trunk/src/rs-actions.c 2009-09-27 20:47:10 UTC (rev 2666) +++ trunk/src/rs-actions.c 2009-09-27 21:15:30 UTC (rev 2667) @@ -94,6 +94,7 @@ rs_core_action_group_set_sensivity("Uncrop", (RS_IS_PHOTO(rs->photo) && rs->photo->crop)); rs_core_action_group_set_sensivity("Straighten", RS_IS_PHOTO(rs->photo)); rs_core_action_group_set_sensivity("Unstraighten", (RS_IS_PHOTO(rs->photo) && (rs->photo->angle != 0.0))); + rs_core_action_group_set_sensivity("TagPhoto", RS_IS_PHOTO(rs->photo)); rs_core_action_group_set_sensivity("Group", (num_selected > 1)); rs_core_action_group_set_sensivity("Ungroup", (selected_groups > 0)); rs_core_action_group_set_sensivity("RotateClockwise", RS_IS_PHOTO(rs->photo)); @@ -566,6 +567,59 @@ rs_store_auto_group(rs->store); } +static void tag_photo_input_changed(GtkEntry *entry, gpointer user_data) +{ + RS_BLOB *rs = user_data; + + if (!rs->photo) + return; + + gchar *tag = g_strdup(gtk_entry_get_text(entry)); + + rs_library_add_tag(rs->library, tag); + rs_library_photo_add_tag(rs->library, rs->photo->filename, tag); + + GdkWindow *window = gtk_widget_get_parent_window(GTK_WIDGET(entry)); + gdk_window_destroy(window); + + g_free(tag); + + return; +} + +ACTION(tag_photo) +{ + GtkWidget *popup = gtk_window_new(GTK_WINDOW_TOPLEVEL); + GtkWidget *label = gtk_label_new("Tag:"); + GtkWidget *input = gtk_entry_new(); + GtkWidget *box = gtk_hbox_new(FALSE, 2); + + gtk_box_pack_start(GTK_BOX(box), label, FALSE, TRUE, 0); + gtk_box_pack_start(GTK_BOX(box), input, FALSE, TRUE, 0); + gtk_container_add(GTK_CONTAINER(popup), box); + gtk_widget_show_all(popup); + + GList *tags = rs_library_find_tag(rs->library, ""); + GtkEntryCompletion *completion = gtk_entry_completion_new(); + GtkListStore *store = gtk_list_store_new(1, G_TYPE_STRING); + GtkTreeIter iter; + + gint n; + for (n = 0; n < g_list_length(tags); n++) + { + gtk_list_store_append(store, &iter); + gtk_list_store_set(store, &iter, 0, (gchar *) g_list_nth_data(tags, n), -1); + } + gtk_entry_completion_set_model(completion, GTK_TREE_MODEL(store)); + gtk_entry_completion_set_text_column(completion, 0); + gtk_entry_set_completion (GTK_ENTRY(input), completion); + + g_list_free(tags); + + g_signal_connect ((gpointer) input, "activate", + G_CALLBACK(tag_photo_input_changed), rs); +} + ACTION(previous_photo) { gchar *current_filename = NULL; @@ -861,6 +915,7 @@ { "Group", NULL, _("_Group"), NULL, NULL, ACTION_CB(group_photos) }, { "Ungroup", NULL, _("_Ungroup"), NULL, NULL, ACTION_CB(ungroup_photos) }, { "AutoGroup", NULL, _("_Auto group"), NULL, NULL, ACTION_CB(auto_group_photos) }, + { "TagPhoto", NULL, _("_Tag Photo..."), "T", NULL, ACTION_CB(tag_photo) }, { "RotateClockwise", RS_STOCK_ROTATE_CLOCKWISE, _("Rotate Clockwise"), NULL, NULL, ACTION_CB(rotate_clockwise) }, { "RotateCounterClockwise", RS_STOCK_ROTATE_COUNTER_CLOCKWISE, _("Rotate Counter Clockwise"), NULL, NULL, ACTION_CB(rotate_counter_clockwise) }, { "Flip", RS_STOCK_FLIP, _("Flip"), NULL, NULL, ACTION_CB(flip) }, Modified: trunk/src/rs-library.c =================================================================== --- trunk/src/rs-library.c 2009-09-27 20:47:10 UTC (rev 2666) +++ trunk/src/rs-library.c 2009-09-27 21:15:30 UTC (rev 2667) @@ -42,6 +42,7 @@ #include #include #include "rawstudio.h" +#include "rs-metadata.h" #include "rs-library.h" void library_sqlite_error(sqlite3 *db, gint result); @@ -310,6 +311,12 @@ } void +rs_library_destroy(RS_LIBRARY *library) +{ + sqlite3_close(library->db); +} + +void rs_library_add_photo(RS_LIBRARY *library, gchar *filename) { if (library_find_photo_id(library, filename) == -1) @@ -399,4 +406,186 @@ return TRUE; } +GList * +rs_library_search(RS_LIBRARY *library, GList *tags) +{ + sqlite3_stmt *stmt; + gint rc; + sqlite3 *db = library->db; + gchar *tag; + gint n, num_tags = g_list_length(tags); + GList *photos = NULL; + GTimer *gt = g_timer_new(); + + sqlite3_prepare_v2(db, "create temp table filter (photo integer)", -1, &stmt, NULL); + rc = sqlite3_step(stmt); + sqlite3_finalize(stmt); + + for (n = 0; n < num_tags; n++) + { + tag = (gchar *) g_list_nth_data(tags, n); + + sqlite3_prepare_v2(db, "insert into filter select phototags.photo from phototags, tags where phototags.tag = tags.id and tags.tagname = ?1;", -1, &stmt, NULL); + rc = sqlite3_bind_text(stmt, 1, tag, strlen(tag), SQLITE_TRANSIENT); + rc = sqlite3_step(stmt); + sqlite3_finalize(stmt); + } + + sqlite3_prepare_v2(db, "create temp table result (photo integer, count integer)", -1, &stmt, NULL); + rc = sqlite3_step(stmt); + sqlite3_finalize(stmt); + + sqlite3_prepare_v2(db, "insert into result select photo, count(photo) from filter group by photo;", -1, &stmt, NULL); + rc = sqlite3_step(stmt); + sqlite3_finalize(stmt); + + sqlite3_prepare_v2(db, "select library.filename from library,result where library.id = result.photo and result.count = ?1 order by library.filename;", -1, &stmt, NULL); + rc = sqlite3_bind_int(stmt, 1, num_tags); + while (sqlite3_step(stmt) == SQLITE_ROW) + photos = g_list_append(photos, g_strdup((gchar *) sqlite3_column_text(stmt, 0))); + sqlite3_finalize(stmt); + + g_debug("Search in library took %.03f seconds", g_timer_elapsed(gt, NULL)); + g_timer_destroy(gt); + + return photos; +} + +void +rs_library_photo_default_tags(RS_LIBRARY *library, gchar *photo, RSMetadata *metadata) +{ + rs_library_add_photo(library, photo); + if (metadata->make_ascii) + { + rs_library_add_tag(library, metadata->make_ascii); + rs_library_photo_add_tag(library, photo, metadata->make_ascii); + } + if (metadata->model_ascii) + { + rs_library_add_tag(library, metadata->model_ascii); + rs_library_photo_add_tag(library, photo, metadata->model_ascii); + } + if (metadata->lens_min_focal != -1 && metadata->lens_max_focal != -1) + { + gchar *lens = NULL; + if (metadata->lens_min_focal == metadata->lens_max_focal) + lens = g_strdup_printf("%dmm",(gint) metadata->lens_min_focal); + else + lens = g_strdup_printf("%d-%dmm",(gint) metadata->lens_min_focal, (gint) metadata->lens_max_focal); + rs_library_add_tag(library, lens); + rs_library_photo_add_tag(library, photo, lens); + g_free(lens); + + } + if (metadata->focallength != -1) + { + gchar *text = NULL; + if (metadata->focallength < 50) + text = g_strdup("wideangle"); + else + text = g_strdup("telephoto"); + rs_library_add_tag(library, text); + rs_library_photo_add_tag(library, photo, text); + g_free(text); + } + if (metadata->timestamp != -1) + { + gchar *year = NULL; + gchar *month = NULL; + GDate *date = g_date_new(); + g_date_set_time_t(date, metadata->timestamp); + year = g_strdup_printf("%d", g_date_get_year(date)); + gint m = g_date_get_month(date); + + switch (m) + { + case 1: + month = g_strdup("January"); + break; + case 2: + month = g_strdup("February"); + break; + case 3: + month = g_strdup("March"); + break; + case 4: + month = g_strdup("April"); + break; + case 5: + month = g_strdup("May"); + break; + case 6: + month = g_strdup("June"); + break; + case 7: + month = g_strdup("July"); + break; + case 8: + month = g_strdup("August"); + break; + case 9: + month = g_strdup("September"); + break; + case 10: + month = g_strdup("Ocotober"); + break; + case 11: + month = g_strdup("November"); + break; + case 12: + month = g_strdup("December"); + break; + } + + rs_library_add_tag(library, year); + rs_library_photo_add_tag(library, photo, year); + rs_library_add_tag(library, month); + rs_library_photo_add_tag(library, photo, month); + + g_date_free(date); + g_free(year); + g_free(month); + } + +} + +GList * +rs_library_photo_tags(RS_LIBRARY *library, gchar *photo) +{ + sqlite3_stmt *stmt; + gint rc; + sqlite3 *db = library->db; + GList *tags = NULL; + + sqlite3_prepare_v2(db, "select tags.tagname from library,phototags,tags WHERE library.id=phototags.photo and phototags.tag=tags.id and library.filename = ?1;", -1, &stmt, NULL); + rc = sqlite3_bind_text(stmt, 1, photo, strlen(photo), NULL); + while (sqlite3_step(stmt) == SQLITE_ROW) + tags = g_list_append(tags, g_strdup((gchar *) sqlite3_column_text(stmt, 0))); + sqlite3_finalize(stmt); + + return tags; +} + +GList * +rs_library_find_tag(RS_LIBRARY *library, gchar *tag) +{ + sqlite3_stmt *stmt; + gint rc; + sqlite3 *db = library->db; + GList *tags = NULL; + + rc = sqlite3_prepare_v2(db, "select tags.tagname from tags WHERE tags.tagname like ?1 order by tags.tagname;", -1, &stmt, NULL); + gchar *like = g_strdup_printf("%%%s%%", tag); + rc = sqlite3_bind_text(stmt, 1, like, strlen(like), NULL); + library_sqlite_error(db, rc); + + while (sqlite3_step(stmt) == SQLITE_ROW) + tags = g_list_append(tags, g_strdup((gchar *) sqlite3_column_text(stmt, 0))); + sqlite3_finalize(stmt); + + g_free(like); + + return tags; +} + /* END PUBLIC FUNCTIONS */ Modified: trunk/src/rs-library.h =================================================================== --- trunk/src/rs-library.h 2009-09-27 20:47:10 UTC (rev 2666) +++ trunk/src/rs-library.h 2009-09-27 21:15:30 UTC (rev 2667) @@ -31,11 +31,16 @@ RS_LIBRARY * rs_library_new(); void rs_library_init(RS_LIBRARY *library); +void rs_library_destroy(RS_LIBRARY *library); void rs_library_add_photo(RS_LIBRARY *library, gchar *filename); void rs_library_add_tag(RS_LIBRARY *library, gchar *tagname); void rs_library_photo_add_tag(RS_LIBRARY *library, gchar *filename, gchar *tagname); void rs_library_delete_photo(RS_LIBRARY *library, gchar *photo); gboolean rs_library_delete_tag(RS_LIBRARY *library, gchar *tag, gboolean force); +GList * rs_library_search(RS_LIBRARY *library, GList *tags); +void rs_library_photo_default_tags(RS_LIBRARY *library, gchar *photo, RSMetadata *metadata); +GList * rs_library_photo_tags(RS_LIBRARY *library, gchar *photo); +GList * rs_library_find_tag(RS_LIBRARY *library, gchar *tag); //void rs_library_delete_tag(gchar *filename, gchar *tag); //void rs_library_find_tags(gchar *filename); Modified: trunk/src/rs-store.c =================================================================== --- trunk/src/rs-store.c 2009-09-27 20:47:10 UTC (rev 2666) +++ trunk/src/rs-store.c 2009-09-27 21:15:30 UTC (rev 2667) @@ -502,13 +502,22 @@ RSMetadata *metadata; gint type; gchar *name; + gchar *filename; gtk_tree_model_get (model, &iter, TYPE_COLUMN, &type, TEXT_COLUMN, &name, + FULLNAME_COLUMN, &filename, METADATA_COLUMN, &metadata, -1); + GTimer *gt = g_timer_new(); + RS_LIBRARY *library = g_malloc(sizeof(RS_LIBRARY *)); + rs_library_init(library); + GList *tags = rs_library_photo_tags(library, filename); + rs_library_destroy(library); + printf("time: %f\n",g_timer_elapsed(gt, NULL)); + if (metadata) switch(type) { case RS_STORE_TYPE_GROUP: @@ -534,8 +543,26 @@ if (metadata->time_ascii != NULL) g_string_append_printf(store->tooltip_text, _("Time: %s"), metadata->time_ascii); + + if (g_list_length(tags) > 0) + { + gint num = g_list_length(tags); + gint n; + + g_string_append_printf(store->tooltip_text, "\nTags:"); + + for(n = 0; n < num; n++) + { + g_string_append_printf(store->tooltip_text, "\n - %s", (gchar *) g_list_nth_data(tags, n)); + } + + g_string_append_printf(store->tooltip_text, ""); + g_list_free(tags); + } + g_object_unref(metadata); g_free(name); + g_free(filename); break; } } Modified: trunk/src/ui.xml =================================================================== --- trunk/src/ui.xml 2009-09-27 20:47:10 UTC (rev 2666) +++ trunk/src/ui.xml 2009-09-27 21:15:30 UTC (rev 2667) @@ -36,6 +36,7 @@ + From anders at kvistmail.dk Sun Sep 27 23:31:59 2009 From: anders at kvistmail.dk (Anders Kvist) Date: Sun, 27 Sep 2009 23:31:59 +0200 Subject: [Rawstudio-commit] r2668 - trunk/src Message-ID: Author: akv Date: 2009-09-27 23:31:59 +0200 (Sun, 27 Sep 2009) New Revision: 2668 Modified: trunk/src/rs-actions.c trunk/src/rs-library.c trunk/src/rs-library.h Log: Marking autotagging in database - will allow to filter these later. Modified: trunk/src/rs-actions.c =================================================================== --- trunk/src/rs-actions.c 2009-09-27 21:15:30 UTC (rev 2667) +++ trunk/src/rs-actions.c 2009-09-27 21:31:59 UTC (rev 2668) @@ -577,7 +577,7 @@ gchar *tag = g_strdup(gtk_entry_get_text(entry)); rs_library_add_tag(rs->library, tag); - rs_library_photo_add_tag(rs->library, rs->photo->filename, tag); + rs_library_photo_add_tag(rs->library, rs->photo->filename, tag, FALSE); GdkWindow *window = gtk_widget_get_parent_window(GTK_WIDGET(entry)); gdk_window_destroy(window); Modified: trunk/src/rs-library.c =================================================================== --- trunk/src/rs-library.c 2009-09-27 21:15:30 UTC (rev 2667) +++ trunk/src/rs-library.c 2009-09-27 21:31:59 UTC (rev 2668) @@ -49,7 +49,7 @@ gint library_create_tables(sqlite3 *db); gint library_find_tag_id(RS_LIBRARY *library, gchar *tagname); gint library_find_photo_id(RS_LIBRARY *library, gchar *photo); -void library_photo_add_tag(RS_LIBRARY *library, gint photo_id, gint tag_id); +void library_photo_add_tag(RS_LIBRARY *library, gint photo_id, gint tag_id, gboolean autotag); gboolean library_is_photo_tagged(RS_LIBRARY *library, gint photo_id, gint tag_id); void library_add_photo(RS_LIBRARY *library, gchar *filename); void library_add_tag(RS_LIBRARY *library, gchar *tagname); @@ -91,7 +91,7 @@ sqlite3_finalize(stmt); /* Create table (phototags) to bind tags and photos together */ - sqlite3_prepare_v2(db, "create table phototags (photo integer, tag integer)", -1, &stmt, NULL); + sqlite3_prepare_v2(db, "create table phototags (photo integer, tag integer, autotag integer)", -1, &stmt, NULL); rc = sqlite3_step(stmt); sqlite3_finalize(stmt); @@ -133,15 +133,20 @@ } void -library_photo_add_tag(RS_LIBRARY *library, gint photo_id, gint tag_id) +library_photo_add_tag(RS_LIBRARY *library, gint photo_id, gint tag_id, gboolean autotag) { sqlite3 *db = library->db; gint rc; sqlite3_stmt *stmt; - rc = sqlite3_prepare_v2(db, "INSERT INTO phototags (photo, tag) VALUES (?1, ?2);", -1, &stmt, NULL); + gint autotag_tag = 0; + if (autotag) + autotag_tag = 1; + + rc = sqlite3_prepare_v2(db, "INSERT INTO phototags (photo, tag, autotag) VALUES (?1, ?2, ?3);", -1, &stmt, NULL); rc = sqlite3_bind_int (stmt, 1, photo_id); rc = sqlite3_bind_int (stmt, 2, tag_id); + rc = sqlite3_bind_int (stmt, 3, autotag_tag); rc = sqlite3_step(stmt); if (rc != SQLITE_DONE) library_sqlite_error(db, rc); @@ -338,7 +343,7 @@ } void -rs_library_photo_add_tag(RS_LIBRARY *library, gchar *filename, gchar *tagname) +rs_library_photo_add_tag(RS_LIBRARY *library, gchar *filename, gchar *tagname, gboolean autotag) { gint photo_id = 0, tag_id; @@ -357,7 +362,7 @@ } if (!library_is_photo_tagged(library, photo_id, tag_id)) - library_photo_add_tag(library, photo_id, tag_id); + library_photo_add_tag(library, photo_id, tag_id, autotag); return; } @@ -458,12 +463,12 @@ if (metadata->make_ascii) { rs_library_add_tag(library, metadata->make_ascii); - rs_library_photo_add_tag(library, photo, metadata->make_ascii); + rs_library_photo_add_tag(library, photo, metadata->make_ascii, TRUE); } if (metadata->model_ascii) { rs_library_add_tag(library, metadata->model_ascii); - rs_library_photo_add_tag(library, photo, metadata->model_ascii); + rs_library_photo_add_tag(library, photo, metadata->model_ascii, TRUE); } if (metadata->lens_min_focal != -1 && metadata->lens_max_focal != -1) { @@ -473,7 +478,7 @@ else lens = g_strdup_printf("%d-%dmm",(gint) metadata->lens_min_focal, (gint) metadata->lens_max_focal); rs_library_add_tag(library, lens); - rs_library_photo_add_tag(library, photo, lens); + rs_library_photo_add_tag(library, photo, lens, TRUE); g_free(lens); } @@ -485,7 +490,7 @@ else text = g_strdup("telephoto"); rs_library_add_tag(library, text); - rs_library_photo_add_tag(library, photo, text); + rs_library_photo_add_tag(library, photo, text, TRUE); g_free(text); } if (metadata->timestamp != -1) @@ -538,9 +543,9 @@ } rs_library_add_tag(library, year); - rs_library_photo_add_tag(library, photo, year); + rs_library_photo_add_tag(library, photo, year, TRUE); rs_library_add_tag(library, month); - rs_library_photo_add_tag(library, photo, month); + rs_library_photo_add_tag(library, photo, month, TRUE); g_date_free(date); g_free(year); Modified: trunk/src/rs-library.h =================================================================== --- trunk/src/rs-library.h 2009-09-27 21:15:30 UTC (rev 2667) +++ trunk/src/rs-library.h 2009-09-27 21:31:59 UTC (rev 2668) @@ -34,7 +34,7 @@ void rs_library_destroy(RS_LIBRARY *library); void rs_library_add_photo(RS_LIBRARY *library, gchar *filename); void rs_library_add_tag(RS_LIBRARY *library, gchar *tagname); -void rs_library_photo_add_tag(RS_LIBRARY *library, gchar *filename, gchar *tagname); +void rs_library_photo_add_tag(RS_LIBRARY *library, gchar *filename, gchar *tagname, gboolean autotag); void rs_library_delete_photo(RS_LIBRARY *library, gchar *photo); gboolean rs_library_delete_tag(RS_LIBRARY *library, gchar *tag, gboolean force); GList * rs_library_search(RS_LIBRARY *library, GList *tags); From anders at kvistmail.dk Sun Sep 27 23:44:12 2009 From: anders at kvistmail.dk (Anders Kvist) Date: Sun, 27 Sep 2009 23:44:12 +0200 Subject: [Rawstudio-commit] r2669 - trunk/src Message-ID: Author: akv Date: 2009-09-27 23:44:12 +0200 (Sun, 27 Sep 2009) New Revision: 2669 Modified: trunk/src/rs-actions.c Log: Handle tagging of multiple photos at once. Modified: trunk/src/rs-actions.c =================================================================== --- trunk/src/rs-actions.c 2009-09-27 21:31:59 UTC (rev 2668) +++ trunk/src/rs-actions.c 2009-09-27 21:44:12 UTC (rev 2669) @@ -571,14 +571,19 @@ { RS_BLOB *rs = user_data; - if (!rs->photo) + GList * selected = rs_store_get_selected_names(rs->store); + gint num_selected = g_list_length(selected); + gint cur; + + if (num_selected == 0) return; gchar *tag = g_strdup(gtk_entry_get_text(entry)); - rs_library_add_tag(rs->library, tag); - rs_library_photo_add_tag(rs->library, rs->photo->filename, tag, FALSE); + for(cur=0;curlibrary, g_list_nth_data(selected, cur), tag, FALSE); + GdkWindow *window = gtk_widget_get_parent_window(GTK_WIDGET(entry)); gdk_window_destroy(window); From anders at kvistmail.dk Sun Sep 27 23:47:00 2009 From: anders at kvistmail.dk (Anders Kvist) Date: Sun, 27 Sep 2009 23:47:00 +0200 Subject: [Rawstudio-commit] r2670 - trunk/src Message-ID: Author: akv Date: 2009-09-27 23:47:00 +0200 (Sun, 27 Sep 2009) New Revision: 2670 Modified: trunk/src/rs-actions.c Log: Handle tagging of multiple photos at once. Modified: trunk/src/rs-actions.c =================================================================== --- trunk/src/rs-actions.c 2009-09-27 21:44:12 UTC (rev 2669) +++ trunk/src/rs-actions.c 2009-09-27 21:47:00 UTC (rev 2670) @@ -588,6 +588,7 @@ gdk_window_destroy(window); g_free(tag); + g_list_free(selected); return; } From anders at kvistmail.dk Mon Sep 28 00:10:12 2009 From: anders at kvistmail.dk (Anders Kvist) Date: Mon, 28 Sep 2009 00:10:12 +0200 Subject: [Rawstudio-commit] r2671 - trunk/po Message-ID: Author: akv Date: 2009-09-28 00:10:12 +0200 (Mon, 28 Sep 2009) New Revision: 2671 Modified: trunk/po/ca.po trunk/po/cs.po trunk/po/da.po trunk/po/de.po trunk/po/en.po trunk/po/es.po trunk/po/fi.po trunk/po/fr.po trunk/po/it.po trunk/po/nb.po trunk/po/nl.po trunk/po/pl.po trunk/po/pt_BR.po trunk/po/ru.po trunk/po/sv.po Log: Updated all .po-files Modified: trunk/po/ca.po =================================================================== --- trunk/po/ca.po 2009-09-27 21:47:00 UTC (rev 2670) +++ trunk/po/ca.po 2009-09-27 22:10:12 UTC (rev 2671) @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: Rawstudio 1.1.1\n" "Report-Msgid-Bugs-To: rawstudio-dev at rawstudio.org\n" -"POT-Creation-Date: 2009-01-11 04:26+0100\n" +"POT-Creation-Date: 2009-09-28 00:09+0200\n" "PO-Revision-Date: 2008-08-19 09:35+0100\n" "Last-Translator: Anders Kvist \n" "Language-Team: Rawstudio development \n" @@ -18,30 +18,47 @@ "X-Poedit-Country: ANDORRA\n" "X-Poedit-SourceCharset: utf-8\n" +#: src/filename.c:280 #, c-format msgid "%f - Original filename" msgstr "%f - Nom del fitxer original" +#: src/filename.c:281 #, c-format msgid "%2c - Incremental counter" msgstr "%2c - Comptador" +#: src/filename.c:282 #, c-format msgid "%s - Setting id (A, B or C)" msgstr "%s - Identificador del par?metres (A, B o C)" +#: src/filename.c:283 +#, c-format +msgid "%d - Date from EXIF (YYYY-MM-DD)" +msgstr "" + +#: src/filename.c:284 +msgid "%t - Time from EXIF (HH:MM:SS)" +msgstr "" + +#: src/gtk-helper.c:420 msgid "Select color profile" msgstr "Seleccioneu el perfil de color" +#: src/gtk-helper.c:450 msgid "All files" msgstr "Tots els fitxers" +#: src/gtk-helper.c:451 msgid "Color profiles (icc and icm)" msgstr "Perfils de color (icc i icm)" +#: src/gtk-helper.c:465 msgid "Not a valid color profile." msgstr "El nom del perfil de color no ?s v?lid." +#: src/gtk-helper.c:466 msgid "" "The file you selected does not appear to be a valid color profile for this " "version of Rawstudio." @@ -49,254 +66,305 @@ "El fitxer que heu triat sembla que no disposa d'un perfil de color v?lid per " "aquesta versi? de Rawstudio." +#: src/gtk-helper.c:568 msgid "Enable color management (experimental)" msgstr "Habilita la gesti? del color (experimental)" +#: src/gtk-helper.c:576 msgid "Input profile" msgstr "Perfil d'entrada" +#: src/gtk-helper.c:579 msgid "BuiltInRGBProfile" msgstr "BuiltInRGBProfile" +#: src/gtk-helper.c:629 msgid "Display profile" msgstr "Mostra el perfil" +#: src/gtk-helper.c:632 src/gtk-helper.c:685 msgid "sRGB" msgstr "sRGB" +#: src/gtk-helper.c:682 msgid "Export profile" msgstr "Exporta el perfil" +#: src/gtk-helper.c:734 msgid "Intent" msgstr "Intenta" +#: src/gtk-helper.c:737 msgid "Perceptual" msgstr "Perceptual" +#: src/gtk-helper.c:738 msgid "Relative colormetric" msgstr "Colorimetria relativa" +#: src/gtk-helper.c:739 src/rs-actions.c:347 msgid "Saturation" msgstr "Saturaci?" +#: src/gtk-helper.c:740 msgid "Absolute colormetric" msgstr "Colorimetria absoluta" -msgid "Background renderer active" -msgstr "La visualitzaci? del fons est? habilitada" - +#: src/gtk-interface.c:182 msgid "Opening photo ..." msgstr "S'est? obrint la foto ..." +#: src/gtk-interface.c:197 msgid "Couldn't open photo" msgstr "No s'ha pogut obrir la fotografia" +#: src/gtk-interface.c:202 msgid "Image opened" msgstr "S'ha obert la imatge" +#: src/gtk-interface.c:203 src/gtk-interface.c:830 src/gtk-interface.c:953 +#: src/gtk-interface.c:995 msgid "Rawstudio" msgstr "Rawstudio" +#: src/gtk-interface.c:273 #, c-format msgid "Changed photo priority (*)" msgstr "S'ha modificat la prioritat de la foto (*)" +#: src/gtk-interface.c:275 #, c-format msgid "Changed photo priority (D)" msgstr "S'ha modificat la prioritat de la foto (D)" +#: src/gtk-interface.c:277 #, c-format msgid "Changed photo priority (%d)" msgstr "S'ha modificat la prioritat de la foto (%d)" +#: src/gtk-interface.c:492 +msgid "Directory:" +msgstr "Directori:" + +#: src/gtk-interface.c:494 src/rs-batch.c:980 +msgid "Choose output directory" +msgstr "Trieu el directori de sortida" + +#: src/gtk-interface.c:510 src/rs-batch.c:991 +msgid "Filename template:" +msgstr "Plantilla del nom de l'arxiu:" + +#: src/gtk-interface.c:523 +msgid "Filename example:" +msgstr "Exemple del nom del fitxer:" + +#: src/gtk-interface.c:534 +msgid "File type:" +msgstr "Tipus de fitxer:" + +#: src/gtk-interface.c:595 msgid "Preferences" msgstr "Prefer?ncies" +#: src/gtk-interface.c:610 msgid "Preview background color:" msgstr "Imatge pr?via de color de fons:" +#: src/gtk-interface.c:625 msgid "Histogram height:" msgstr "Al?ada de l'histograma:" +#: src/gtk-interface.c:635 msgid "Show filenames in iconview" msgstr "Mostra els noms de fitxers a la barra de miniatures" +#: src/gtk-interface.c:640 msgid "Use system theme" msgstr "F?s servir els colors del tema del sistema" +#: src/gtk-interface.c:647 msgid "Place cache in home directory" msgstr "Posa la cach? al directori inicial" +#: src/gtk-interface.c:650 msgid "Load 8 bit photos (jpeg, png, etc)" msgstr "Carrega les fotos de 8 bits (jpeg, png, etc)" -msgid "Preload photos" -msgstr "Torna a carregar les fotografies" - -msgid "Directory:" -msgstr "Directori:" - -msgid "Filename:" -msgstr "Nom del fitxer:" - -msgid "File type:" -msgstr "Tipus de fitxer:" - -#. set default -msgid "Filename example:" -msgstr "Exemple del nom del fitxer:" - -msgid "Save uncompressed TIFF" -msgstr "Desa com a TIFF sense comprimir" - +#: src/gtk-interface.c:718 msgid "General" msgstr "General" #. gtk_notebook_append_page(GTK_NOTEBOOK(notebook), batch_page, gtk_label_new(_("Batch"))); +#: src/gtk-interface.c:720 msgid "Quick export" msgstr "Exportaci? r?pida" +#: src/gtk-interface.c:721 msgid "Colors" msgstr "Colors" +#: src/gtk-interface.c:955 src/gtk-interface.c:1178 +msgid "Opening directory..." +msgstr "S'est? obrint el directori..." + +#: src/gtk-interface.c:965 src/gtk-interface.c:1123 src/gtk-interface.c:1193 +msgid "Ready" +msgstr "Preparat" + +#: src/gtk-interface.c:1050 msgid "Open recursive" msgstr "Obre les subcarpetes" +#: src/gtk-interface.c:1059 msgid "Tools" msgstr "Eines" +#: src/gtk-interface.c:1060 msgid "Batch" msgstr "Lot" +#: src/gtk-interface.c:1061 msgid "Open" msgstr "Obre" -msgid "Ready" -msgstr "Preparat" - +#: src/gtk-progress.c:63 src/gtk-progress.c:99 src/gtk-progress.c:122 msgid "Progress" msgstr "Progr?s" -msgid "JPEG Quality:" -msgstr "Qualitat JPEG:" +#. FIXME: Calculate some sensible size - maybe even remember user resizes +#: src/rs-save-dialog.c:93 src/rs-toolbox.c:371 +msgid "Export File" +msgstr "Exporta" +#: src/rs-save-dialog.c:244 +#, fuzzy, c-format +msgid "Exporting to %s" +msgstr "S'est? exportant el fitxer ..." + +#: src/rs-save-dialog.c:360 msgid "Keep aspect" msgstr "Conserva la relaci? d'aspecte" +#: src/rs-save-dialog.c:378 msgid "Width:" msgstr "Amplada:" +#: src/rs-save-dialog.c:380 msgid "Height:" msgstr "Al?ada:" +#: src/rs-save-dialog.c:382 msgid "Percent:" msgstr "Percentatge:" -msgid "Export File" -msgstr "Exporta" - -msgid "Exporting file ..." -msgstr "S'est? exportant el fitxer ..." - -msgid "File exported" -msgstr "S'ha exportat el fitxer" - -msgid "File export canceled" -msgstr "S'ha cancel?lat la exportaci? del fitxer" - -msgid "JPEG (Joint Photographic Experts Group)" -msgstr "JPEG (Joint Photographic Experts Group)" - -msgid "PNG (Portable Network Graphics)" -msgstr "PNG (Portable Network Graphics)" - -msgid "8-bit TIFF (Tagged Image File Format)" -msgstr "TIFF (Tagged Image File Format) de 8 bits" - -msgid "16-bit TIFF (Tagged Image File Format)" -msgstr "TIFF (Tagged Image File Format) de 16 bits" - +#: src/rs-batch.c:206 src/rs-actions.c:737 msgid "A" msgstr "A" +#: src/rs-batch.c:209 src/rs-actions.c:738 msgid "B" msgstr "B" +#: src/rs-batch.c:212 src/rs-actions.c:739 msgid "C" msgstr "C" +#: src/rs-batch.c:437 msgid "Processing photos" msgstr "S'estant processant les fotografies" +#: src/rs-batch.c:441 msgid "Cancel" msgstr "Cancel?la" +#: src/rs-batch.c:446 msgid "Last image:" msgstr "Darrera imatge:" +#: src/rs-batch.c:479 #, c-format msgid "Time left: %dh %dm %ds" msgstr "Temps restant: %dh %dm %ds" +#: src/rs-batch.c:483 msgid "Time left: ..." msgstr "Temps restant: ..." +#: src/rs-batch.c:495 #, c-format msgid "Loading %s ..." msgstr "S'est? carregant %s ..." +#: src/rs-batch.c:536 #, c-format msgid "Saving %s ..." msgstr "S'est? desant %s ..." +#: src/rs-batch.c:634 msgid "Icon" msgstr "Icona" +#: src/rs-batch.c:641 msgid "Filename" msgstr "Nom de fitxer" +#: src/rs-batch.c:648 msgid "Setting" msgstr "Configuraci?" +#: src/rs-batch.c:738 msgid "Start" msgstr "Comen?a" +#: src/rs-batch.c:741 msgid "Remove" msgstr "Elimina" +#: src/rs-batch.c:744 msgid "Remove all" msgstr "Elimina-ho tot" +#: src/rs-batch.c:869 msgid "Photo size" msgstr "Mida de la foto" +#: src/rs-batch.c:877 msgid "Constant scale" msgstr "Escala constant" +#: src/rs-batch.c:878 msgid "Constant width" msgstr "Amplada constant" +#: src/rs-batch.c:879 msgid "Constant height" msgstr "Al?ada constant" +#: src/rs-batch.c:880 msgid "Maximum size" msgstr "Mida m?xima" +#: src/rs-batch.c:892 msgid "Photo width:" msgstr "Amplada de la foto:" +#: src/rs-batch.c:894 src/rs-batch.c:903 msgid "pixels" msgstr "p?xels" +#: src/rs-batch.c:901 msgid "Photo height:" msgstr "Al?ada de la imatge:" +#: src/rs-batch.c:910 msgid "Photo scale:" msgstr "Escala de la imatge" +#: src/rs-batch.c:912 msgid "%" msgstr "%" +#: src/rs-batch.c:948 #, c-format msgid "" "Constant width:\n" @@ -305,6 +373,7 @@ "Amplada constant:\n" "%d" +#: src/rs-batch.c:951 #, c-format msgid "" "Constant height:\n" @@ -313,6 +382,7 @@ "Al?ada constant:\n" "%d" +#: src/rs-batch.c:954 #, c-format msgid "" "Constant Scale:\n" @@ -321,6 +391,7 @@ "Escala constant:\n" "%d" +#: src/rs-batch.c:958 #, c-format msgid "" "Maximum size:\n" @@ -329,66 +400,75 @@ "Mida m?xima:constant:\n" "%d x %d" -msgid "Choose output directory" -msgstr "Trieu el directori de sortida" - +#: src/rs-batch.c:987 msgid "Output directory:" msgstr "Directori de sortida:" -msgid "Filename template:" -msgstr "Plantilla del nom de l'arxiu:" - +#: src/rs-batch.c:1012 msgid "Change" msgstr "Canvia" +#: src/rs-batch.c:1017 msgid "Export dimensions" msgstr "Exporta la mida" #. All +#: src/rs-store.c:275 src/rs-store.c:834 #, c-format msgid "* (%d)" msgstr "* (%d)" +#: src/rs-store.c:276 msgid "All photos (excluding deleted)" msgstr "Totes les fotos (excepte les suprimides)" #. 1 +#: src/rs-store.c:279 src/rs-store.c:835 #, c-format msgid "1 (%d)" msgstr "1 (%d)" +#: src/rs-store.c:280 msgid "Priority 1 photos" msgstr "Fotografies amb prioritat 1" #. 2 +#: src/rs-store.c:283 src/rs-store.c:836 #, c-format msgid "2 (%d)" msgstr "2 (%d)" +#: src/rs-store.c:284 msgid "Priority 2 photos" msgstr "Fotografies amb prioritat 2" #. 3 +#: src/rs-store.c:287 src/rs-store.c:837 #, c-format msgid "3 (%d)" msgstr "3 (%d)" +#: src/rs-store.c:288 msgid "Priority 3 photos" msgstr "Fotos amb prioritat 3" #. Unsorted +#: src/rs-store.c:291 src/rs-store.c:838 #, c-format msgid "U (%d)" msgstr "U (%d)" +#: src/rs-store.c:292 msgid "Unprioritized photos" msgstr "Fotografies sense prioritat" #. Deleted +#: src/rs-store.c:295 src/rs-store.c:839 #, c-format msgid "D (%d)" msgstr "D (%d)" +#: src/rs-store.c:296 msgid "Deleted photos" msgstr "Fotografies suprimides" @@ -397,233 +477,336 @@ #. understanding of our interface. I was thinking about adding a button instead #. that said "ROCK ON!" to instantly play "AC/DC - Highway to Hell", but I #. believe this will be better for the end user +#: src/rs-store.c:331 msgid "Priorities" msgstr "Prioritats" +#: src/rs-store.c:527 #, c-format msgid "" "%s\n" "\n" msgstr "" +#: src/rs-store.c:530 #, c-format msgid "Focal length: %dmm\n" msgstr "" +#: src/rs-store.c:533 #, c-format msgid "Shutter speed: %.1fs\n" msgstr "" +#: src/rs-store.c:535 #, c-format msgid "Shutter speed: 1/%.0fs\n" msgstr "" +#: src/rs-store.c:538 #, c-format msgid "Aperture: F/%.01f\n" msgstr "" +#: src/rs-store.c:541 #, c-format msgid "ISO: %u\n" msgstr "" +#: src/rs-store.c:544 #, c-format msgid "Time: %s" msgstr "" +#: src/rs-preview-widget.c:505 +msgid "Display Navigation" +msgstr "" + +#: src/rs-preview-widget.c:756 +msgid "Light out mode not available" +msgstr "" + +#: src/rs-preview-widget.c:757 +msgid "" +"Your setup doesn't seem to support RGBA visuals and/or compositing. Consult " +"your operating system manual for enabling RGBA visuals and compositing." +msgstr "" + +#: src/rs-preview-widget.c:987 msgid "Size" msgstr "Mida" +#: src/rs-preview-widget.c:995 msgid "-" msgstr "-" +#: src/rs-preview-widget.c:1001 msgid "Grid" msgstr "Graella" +#: src/rs-preview-widget.c:1006 msgid "None" msgstr "Cap" +#: src/rs-preview-widget.c:1007 msgid "Golden sections" msgstr "Seccions ?uries" +#: src/rs-preview-widget.c:1008 msgid "Rule of thirds" msgstr "Regla dels ter?os" +#: src/rs-preview-widget.c:1009 msgid "Golden triangles #1" msgstr "Rectangles daurats #1" +#: src/rs-preview-widget.c:1010 msgid "Golden triangles #2" msgstr "Rectangles daurats #2" +#: src/rs-preview-widget.c:1011 msgid "Harmonious triangles #1" msgstr "Triangles harm?nics #1" +#: src/rs-preview-widget.c:1012 msgid "Harmonious triangles #2" msgstr "Triangles harm?nics #2" +#: src/rs-preview-widget.c:1021 msgid "Aspect" msgstr "Aspecte" +#: src/rs-preview-widget.c:1026 msgid "Freeform" msgstr "Corba de forma lliure" +#: src/rs-preview-widget.c:1027 msgid "ISO paper (A4)" msgstr "Paper ISO (A4)" +#: src/rs-preview-widget.c:1028 msgid "3:2 (35mm)" msgstr "3:2 (35mm)" +#: src/rs-preview-widget.c:1029 msgid "4:3" msgstr "4:3" +#: src/rs-preview-widget.c:1030 msgid "10:8 (SXGA)" msgstr "10:8 (SXGA)" +#: src/rs-preview-widget.c:1031 msgid "16:10 (Wide XGA)" msgstr "16:10 (XGA ample)" +#: src/rs-preview-widget.c:1032 msgid "8:3 (Dualhead XGA)" msgstr "8:3 (Dualhead XGA)" +#: src/rs-preview-widget.c:1033 msgid "1:1" msgstr "1:1" +#: src/rs-preview-widget.c:1034 msgid "Golden rectangle" msgstr "Rectangle daurat" +#: src/rs-preview-widget.c:1042 src/rs-preview-widget.c:1053 msgid "Crop" msgstr "Escap?a" +#: src/rs-preview-widget.c:1044 msgid "Don't crop" msgstr "No ho escapcis" -msgid "Flip the photo over the x-axis" -msgstr "Gira la foto sobre l'eix X" +#. Snapshot labels +#: src/rs-toolbox.c:157 src/rs-actions.c:972 +msgid " A " +msgstr " A " -msgid "Mirror the photo over the y-axis" -msgstr "Gira la foto sobre l'eix Y" +#: src/rs-toolbox.c:158 src/rs-actions.c:973 +msgid " B " +msgstr " B " -msgid "Rotate the photo 90 degrees clockwise" -msgstr "Gira la imatge 90 graus en sentit horari" +#: src/rs-toolbox.c:159 src/rs-actions.c:974 +msgid " C " +msgstr " C " -msgid "Rotate the photo 180 degrees" -msgstr "Gira la imatge 180 graus" +#. FIXME: Get height from gconf +#: src/rs-toolbox.c:184 +msgid "Histogram" +msgstr "Histograma" -msgid "Rotate the photo 90 degrees counter clockwise" -msgstr "Gira la imatge 90 graus en sentit horari" +#: src/rs-toolbox.c:297 +#, fuzzy +msgid "Reset" +msgstr "Reinicia la corba" -msgid "Transforms" -msgstr "Transforma" - -msgid "Reset this setting" -msgstr "Reinicia aquest par?metre" - +#: src/rs-toolbox.c:415 src/rs-toolbox.c:540 msgid "Open curve ..." msgstr "Obre la corba ..." +#: src/rs-toolbox.c:546 msgid "Save curve as ..." msgstr "Anomena i desa la corba ..." +#: src/rs-toolbox.c:552 msgid "Reset curve" msgstr "Reinicia la corba" +#: src/rs-toolbox.c:557 msgid "Auto adjust curve ends" msgstr "Ajusta autom?ticament els finals de les corbes" -msgid " A " -msgstr " A " +#. Pack everything nice +#: src/rs-toolbox.c:637 +#, fuzzy +msgid "Basic" +msgstr "Lot" -msgid " B " -msgstr " B " +#: src/rs-toolbox.c:638 +msgid "Channel Mixer" +msgstr "" -msgid " C " -msgstr " C " +#: src/rs-toolbox.c:639 src/rs-actions.c:353 +msgid "Curve" +msgstr "Corba" -#. Build GUI -msgid "Exposure" -msgstr "Exposici?" +#: src/rs-toolbox.c:683 +msgid "Flip the photo over the x-axis" +msgstr "Gira la foto sobre l'eix X" -msgid "Hue" -msgstr "Mat?s" +#: src/rs-toolbox.c:684 +msgid "Mirror the photo over the y-axis" +msgstr "Gira la foto sobre l'eix Y" -msgid "Contrast" -msgstr "Contrast" +#: src/rs-toolbox.c:685 +msgid "Rotate the photo 90 degrees clockwise" +msgstr "Gira la imatge 90 graus en sentit horari" -#. Box it! -msgid "Warmth/tint" -msgstr "Mat?s/color" +#: src/rs-toolbox.c:686 +msgid "Rotate the photo 90 degrees counter clockwise" +msgstr "Gira la imatge 90 graus en sentit horari" -msgid "Sharpen" -msgstr "Augmenta la nitidesa" +#: src/rs-toolbox.c:698 +msgid "Transforms" +msgstr "Transforma" -msgid "Curve" -msgstr "Corba" - -msgid "Histogram" -msgstr "Histograma" - +#: src/rs-actions.c:141 msgid "Open directory" msgstr "Obre un directori" +#: src/rs-actions.c:198 +msgid "File exported" +msgstr "S'ha exportat el fitxer" + +#: src/rs-actions.c:203 src/rs-actions.c:222 +#, fuzzy +msgid "Export failed" +msgstr "Exporta" + +#: src/rs-actions.c:232 msgid "Error exporting" msgstr "S'ha produ?t un error mentre s'estava exportant" +#: src/rs-actions.c:233 msgid "Error exporting photo to gimp." msgstr "S'ha produ?t un error en exportar a gimp." +#: src/rs-actions.c:256 src/rs-actions.c:274 msgid "Deleting photos" msgstr "S'estant suprimint les fotografies" +#: src/rs-actions.c:257 msgid "Your files will be permanently deleted!" msgstr "Els vostres fitxers seran esborrats de forma permanentment!" +#: src/rs-actions.c:259 msgid "Delete photos" msgstr "Suprimeix les fotografies" +#: src/rs-actions.c:333 msgid "Copied settings" msgstr "Par?metres copiats" +#. Build GUI +#: src/rs-actions.c:346 +msgid "Exposure" +msgstr "Exposici?" + +#: src/rs-actions.c:348 +msgid "Hue" +msgstr "Mat?s" + +#: src/rs-actions.c:349 +msgid "Contrast" +msgstr "Contrast" + +#: src/rs-actions.c:350 msgid "White balance" msgstr "Equilibri de blanc" +#: src/rs-actions.c:351 +msgid "Sharpen" +msgstr "Augmenta la nitidesa" + +#: src/rs-actions.c:352 +msgid "Channel mixer" +msgstr "" + +#: src/rs-actions.c:385 msgid "Select settings to paste" msgstr "Seleccioneu els par?metres que voleu enganxar" +#: src/rs-actions.c:443 msgid "Pasted settings" msgstr "Par?metres enganxats" +#: src/rs-actions.c:446 msgid "Nothing to paste" msgstr "No hi ha res per enganxar" +#: src/rs-actions.c:449 msgid "Buffer empty" msgstr "El buffer est? buit" +#: src/rs-actions.c:492 msgid "Adjusting to auto white balance" msgstr "S'est? ajustant l'equilibri de blanc" +#: src/rs-actions.c:502 msgid "No white balance to set from" msgstr "No hi ha cap patr? per l'equilibre del blanc" +#: src/rs-actions.c:505 msgid "Adjusting to camera white balance" msgstr "S'est? ajustant amb l'equilibri de blanc de la c?mera" +#: src/rs-actions.c:683 msgid "Showing exposure mask" msgstr "S'est? mostrant la m?scara d'exposici?" +#: src/rs-actions.c:685 msgid "Hiding exposure mask" msgstr "S'est? amagant la m?scara d'exposici?" +#: src/rs-actions.c:715 #, c-format msgid " %s added to batch queue" msgstr "S'ha afegit %s a la cua del lot" +#: src/rs-actions.c:717 #, c-format msgid "%s already added to batch queue" msgstr "%s ja ?s a la cua del lot" +#: src/rs-actions.c:724 src/rs-actions.c:796 #, c-format msgid "%d photos added to batch queue" msgstr "S'han afegit %d fotos a la cua del lot" +#: src/rs-actions.c:761 msgid "" "Select which settings to\n" "add to batch queue" @@ -631,187 +814,309 @@ "Trieu els par?meters que\n" "voleu afegir a la cua del lot" +#: src/rs-actions.c:814 msgid "Removed from batch queue" msgstr "S'ha suprimit de la cua del lot" +#: src/rs-actions.c:816 msgid "Not in batch queue" msgstr "No ?s a la cua de lots" +#: src/rs-actions.c:850 msgid "A raw image converter for GTK+/GNOME" msgstr "Un convertidor de imatges raw per a GTK+/GNOME" +#: src/rs-actions.c:881 msgid "_File" msgstr "_Fitxer" +#: src/rs-actions.c:882 msgid "_Edit" msgstr "_Edita" +#: src/rs-actions.c:883 msgid "_Photo" msgstr "F_oto" +#: src/rs-actions.c:884 msgid "_Set Priority" msgstr "Estableix la _prioritat" +#: src/rs-actions.c:885 msgid "_White Balance" msgstr "Equilibri de _blanc" +#: src/rs-actions.c:886 msgid "_View" msgstr "_Visualitza" +#: src/rs-actions.c:887 msgid "_Sort by" msgstr "" +#: src/rs-actions.c:888 msgid "_Batch" msgstr "_Lot" +#: src/rs-actions.c:889 msgid "_Help" msgstr "_Ajuda" #. File menu +#: src/rs-actions.c:894 msgid "_Open Directory" msgstr "_Obre un directori" +#: src/rs-actions.c:895 msgid "_Quick Export" msgstr "_Exportaci? r?pida" +#: src/rs-actions.c:896 msgid "_Export As" msgstr "Exporta _com a" +#: src/rs-actions.c:897 msgid "_Export to Gimp" msgstr "Exporta a _Gimp" +#: src/rs-actions.c:898 msgid "_Reload directory" msgstr "_Torna a carregar el directori" +#: src/rs-actions.c:899 msgid "_Delete flagged photos" msgstr "S_uprimeix les fotografies senyalades" +#: src/rs-actions.c:900 msgid "_Quit" msgstr "_Surt" #. Edit menu +#: src/rs-actions.c:903 msgid "_Revert settings" msgstr "_Torna als par?metres inicials" +#: src/rs-actions.c:904 msgid "_Copy settings" msgstr "_Copia els par?metres" +#: src/rs-actions.c:905 msgid "_Paste settings" msgstr "_Enganxa els par?metres" +#: src/rs-actions.c:906 msgid "_Reset settings" msgstr "_Reinicia els par?metres" +#: src/rs-actions.c:907 msgid "_Preferences" msgstr "_Prefer?ncies" #. Photo menu +#: src/rs-actions.c:910 msgid "_Flag photo for deletion" msgstr "_Senyala la foto per suprimir-la" +#: src/rs-actions.c:911 msgid "_1" msgstr "_1" +#: src/rs-actions.c:912 msgid "_2" msgstr "_2" +#: src/rs-actions.c:913 msgid "_3" msgstr "_3" +#: src/rs-actions.c:914 msgid "_Remove priority" msgstr "_Suprimeix la prioritat" +#: src/rs-actions.c:915 msgid "_Auto" msgstr "_Autom?tic" +#: src/rs-actions.c:916 msgid "_Camera" msgstr "_C?mera" +#: src/rs-actions.c:917 msgid "_Crop" msgstr "_Escap?a" +#: src/rs-actions.c:918 msgid "_Uncrop" msgstr "_Desf?s el que s'ha Escap?at" +#: src/rs-actions.c:919 msgid "_Straighten" msgstr "_Redre?a" +#: src/rs-actions.c:920 msgid "_Unstraighten" msgstr "Des_f?s el que s'ha redre?at" +#: src/rs-actions.c:921 msgid "_Group" msgstr "_Agrupa" +#: src/rs-actions.c:922 msgid "_Ungroup" msgstr "_Desagrupa" +#: src/rs-actions.c:923 msgid "_Auto group" msgstr "Agrupa _autom?ticament" +#: src/rs-actions.c:924 +#, fuzzy +msgid "_Tag Photo..." +msgstr "F_oto" + +#: src/rs-actions.c:925 +msgid "Rotate Clockwise" +msgstr "" + +#: src/rs-actions.c:926 +#, fuzzy +msgid "Rotate Counter Clockwise" +msgstr "Gira la imatge 90 graus en sentit horari" + +#: src/rs-actions.c:927 +msgid "Flip" +msgstr "" + +#: src/rs-actions.c:928 +msgid "Mirror" +msgstr "" + #. View menu +#: src/rs-actions.c:931 msgid "_Previous photo" msgstr "Foto _Anterior" +#: src/rs-actions.c:932 msgid "_Next Photo" msgstr "Foto _Seg?ent" -msgid "_Zoom to fit" -msgstr "Ajusta a la _finestra" - -msgid "_Zoom to 100%" -msgstr "Amplia al _100%" - #. Batch menu +#: src/rs-actions.c:935 msgid "_Add to batch queue" msgstr "Afegeix a la cua del _lot" +#: src/rs-actions.c:936 msgid "_Add current view to queue" msgstr "Afegeix la _vista actual a la cua" +#: src/rs-actions.c:937 msgid "_Remove from batch queue" msgstr "_Suprimeix de la cua del lot" +#: src/rs-actions.c:938 msgid "_Start" msgstr "_Comen?a" #. help menu +#: src/rs-actions.c:941 msgid "_About" msgstr "_Quant a" +#: src/rs-actions.c:949 +msgid "_Zoom to fit" +msgstr "Ajusta a la _finestra" + +#: src/rs-actions.c:950 msgid "_Iconbox" msgstr "_Barra de miniatures" +#: src/rs-actions.c:951 msgid "_Toolbox" msgstr "_Caixa d'eines" +#: src/rs-actions.c:952 msgid "_Fullscreen" msgstr "_Pantalla sencera" +#: src/rs-actions.c:953 msgid "_Exposure mask" msgstr "_M?scara d'exposici?" +#: src/rs-actions.c:954 msgid "_Split" msgstr "_Divideix" +#: src/rs-actions.c:956 +msgid "_Lights out" +msgstr "" + +#: src/rs-actions.c:962 msgid "Name" msgstr "" +#: src/rs-actions.c:963 msgid "Timestamp" msgstr "" +#: src/rs-actions.c:964 #, fuzzy msgid "ISO" msgstr "ISO%d" +#: src/rs-actions.c:965 msgid "Aperture" msgstr "" +#: src/rs-actions.c:966 msgid "Focallength" msgstr "" +#: src/rs-actions.c:967 msgid "Shutterspeed" msgstr "" +#~ msgid "Background renderer active" +#~ msgstr "La visualitzaci? del fons est? habilitada" + +#~ msgid "Preload photos" +#~ msgstr "Torna a carregar les fotografies" + +#~ msgid "Filename:" +#~ msgstr "Nom del fitxer:" + +#~ msgid "Save uncompressed TIFF" +#~ msgstr "Desa com a TIFF sense comprimir" + +#~ msgid "JPEG Quality:" +#~ msgstr "Qualitat JPEG:" + +#~ msgid "File export canceled" +#~ msgstr "S'ha cancel?lat la exportaci? del fitxer" + +#~ msgid "JPEG (Joint Photographic Experts Group)" +#~ msgstr "JPEG (Joint Photographic Experts Group)" + +#~ msgid "PNG (Portable Network Graphics)" +#~ msgstr "PNG (Portable Network Graphics)" + +#~ msgid "8-bit TIFF (Tagged Image File Format)" +#~ msgstr "TIFF (Tagged Image File Format) de 8 bits" + +#~ msgid "16-bit TIFF (Tagged Image File Format)" +#~ msgstr "TIFF (Tagged Image File Format) de 16 bits" + +#~ msgid "Rotate the photo 180 degrees" +#~ msgstr "Gira la imatge 180 graus" + +#~ msgid "Reset this setting" +#~ msgstr "Reinicia aquest par?metre" + +#~ msgid "Warmth/tint" +#~ msgstr "Mat?s/color" + +#~ msgid "_Zoom to 100%" +#~ msgstr "Amplia al _100%" + #~ msgid "Canon CR2" #~ msgstr "CR2 de Canon" @@ -862,6 +1167,3 @@ #~ msgid "F/%.1f " #~ msgstr "F/%.1f " - -#~ msgid "Opening directory..." -#~ msgstr "S'est? obrint el directori..." Modified: trunk/po/cs.po =================================================================== --- trunk/po/cs.po 2009-09-27 21:47:00 UTC (rev 2670) +++ trunk/po/cs.po 2009-09-27 22:10:12 UTC (rev 2671) @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: Rawstudio 1.1.1\n" "Report-Msgid-Bugs-To: rawstudio-dev at rawstudio.org\n" -"POT-Creation-Date: 2009-01-11 04:26+0100\n" +"POT-Creation-Date: 2009-09-28 00:09+0200\n" "PO-Revision-Date: 2008-04-17 22:04+0100\n" "Last-Translator: Anders Kvist \n" "Language-Team: Rawstudio development \n" @@ -20,378 +20,457 @@ "X-Poedit-Language: Czech\n" "X-Poedit-Country: CZECH REPUBLIC\n" +#: src/filename.c:280 #, c-format msgid "%f - Original filename" msgstr "%f - P?vodn? jm?no souboru" +#: src/filename.c:281 #, c-format msgid "%2c - Incremental counter" msgstr "%2c - vzestupn? po??tadlo" +#: src/filename.c:282 #, c-format msgid "%s - Setting id (A, B or C)" msgstr "" +#: src/filename.c:283 +#, c-format +msgid "%d - Date from EXIF (YYYY-MM-DD)" +msgstr "" + +#: src/filename.c:284 +msgid "%t - Time from EXIF (HH:MM:SS)" +msgstr "" + +#: src/gtk-helper.c:420 msgid "Select color profile" msgstr "Vyberte barevn? profil" +#: src/gtk-helper.c:450 msgid "All files" msgstr "V?echny soubory" +#: src/gtk-helper.c:451 msgid "Color profiles (icc and icm)" msgstr "Barevn? profily (icc a icm)" +#: src/gtk-helper.c:465 msgid "Not a valid color profile." msgstr "Nen? platn? barevn? profil." +#: src/gtk-helper.c:466 #, fuzzy msgid "" "The file you selected does not appear to be a valid color profile for this " "version of Rawstudio." msgstr "Zvolen? soubor z?ejm? nen? platn?m barevn?m profilem." +#: src/gtk-helper.c:568 msgid "Enable color management (experimental)" msgstr "Povolit spr?vu barev (experiment?ln?)" +#: src/gtk-helper.c:576 msgid "Input profile" msgstr "Vstupn? profil" +#: src/gtk-helper.c:579 msgid "BuiltInRGBProfile" msgstr "Vestav?n? RGB profil" +#: src/gtk-helper.c:629 msgid "Display profile" msgstr "Profil obrazovky" +#: src/gtk-helper.c:632 src/gtk-helper.c:685 msgid "sRGB" msgstr "sRGB" +#: src/gtk-helper.c:682 msgid "Export profile" msgstr "Exportn? profil" +#: src/gtk-helper.c:734 msgid "Intent" msgstr "Z?m?r" +#: src/gtk-helper.c:737 msgid "Perceptual" msgstr "Perceptu?ln?" +#: src/gtk-helper.c:738 msgid "Relative colormetric" msgstr "Relativn? kolorimetrick?" +#: src/gtk-helper.c:739 src/rs-actions.c:347 msgid "Saturation" msgstr "Sytost" +#: src/gtk-helper.c:740 msgid "Absolute colormetric" msgstr "Absolutn? kolorimetrick?" -msgid "Background renderer active" -msgstr "Vykreslov?n? pozad? aktivn?" - +#: src/gtk-interface.c:182 msgid "Opening photo ..." msgstr "Otev?r? se fotografie..." +#: src/gtk-interface.c:197 msgid "Couldn't open photo" msgstr "Nelze otev??t fotografii" +#: src/gtk-interface.c:202 msgid "Image opened" msgstr "Obr?zek otev?en" +#: src/gtk-interface.c:203 src/gtk-interface.c:830 src/gtk-interface.c:953 +#: src/gtk-interface.c:995 msgid "Rawstudio" msgstr "Rawstudio" +#: src/gtk-interface.c:273 #, c-format msgid "Changed photo priority (*)" msgstr "Zm?n?na priorita fotografie (*)" +#: src/gtk-interface.c:275 #, c-format msgid "Changed photo priority (D)" msgstr "Zm?n?na priorita fotografie (D)" +#: src/gtk-interface.c:277 #, c-format msgid "Changed photo priority (%d)" msgstr "Zm?n?na priorita fotografie (%d)" +#: src/gtk-interface.c:492 +#, fuzzy +msgid "Directory:" +msgstr "Adres?? otev?en" + +#: src/gtk-interface.c:494 src/rs-batch.c:980 +msgid "Choose output directory" +msgstr "Zvolte v?stupn? adres??" + +#: src/gtk-interface.c:510 src/rs-batch.c:991 +msgid "Filename template:" +msgstr "?ablona jm?na souboru:" + +#: src/gtk-interface.c:523 +msgid "Filename example:" +msgstr "P??klad jm?na souboru:" + +#: src/gtk-interface.c:534 +#, fuzzy +msgid "File type:" +msgstr "?ablona jm?na souboru:" + +#: src/gtk-interface.c:595 msgid "Preferences" msgstr "P?edvolby" +#: src/gtk-interface.c:610 msgid "Preview background color:" msgstr "N?hled barvy pozad?:" +#: src/gtk-interface.c:625 msgid "Histogram height:" msgstr "V??ka histogramu:" +#: src/gtk-interface.c:635 msgid "Show filenames in iconview" msgstr "Zobrazit jm?na soubor? v pohledu na ikony" +#: src/gtk-interface.c:640 msgid "Use system theme" msgstr "Pou??t syst?mov? t?ma" +#: src/gtk-interface.c:647 msgid "Place cache in home directory" msgstr "Um?stit vyrovn?vac? pam?? do domovsk?ho adres??e" +#: src/gtk-interface.c:650 msgid "Load 8 bit photos (jpeg, png, etc)" msgstr "Na??st 8bitov? fotografie (JPEG, PNG, apod.)" -#, fuzzy -msgid "Preload photos" -msgstr "Smazan? fotografie" - -#, fuzzy -msgid "Directory:" -msgstr "Adres?? otev?en" - -#, fuzzy -msgid "Filename:" -msgstr "Jm?no souboru" - -#, fuzzy -msgid "File type:" -msgstr "?ablona jm?na souboru:" - -#. set default -msgid "Filename example:" -msgstr "P??klad jm?na souboru:" - -msgid "Save uncompressed TIFF" -msgstr "Ulo?it nekomprimovan? TIFF" - +#: src/gtk-interface.c:718 msgid "General" msgstr "Obecn?" #. gtk_notebook_append_page(GTK_NOTEBOOK(notebook), batch_page, gtk_label_new(_("Batch"))); +#: src/gtk-interface.c:720 #, fuzzy msgid "Quick export" msgstr "Soubor exportov?n" +#: src/gtk-interface.c:721 msgid "Colors" msgstr "Barvy" +#: src/gtk-interface.c:955 src/gtk-interface.c:1178 #, fuzzy +msgid "Opening directory..." +msgstr "Otev?r? se adres??..." + +#: src/gtk-interface.c:965 src/gtk-interface.c:1123 src/gtk-interface.c:1193 +msgid "Ready" +msgstr "P?ipraveno" + +#: src/gtk-interface.c:1050 +#, fuzzy msgid "Open recursive" msgstr "Otev??t k?ivku..." +#: src/gtk-interface.c:1059 msgid "Tools" msgstr "N?stroje" +#: src/gtk-interface.c:1060 msgid "Batch" msgstr "D?vka" +#: src/gtk-interface.c:1061 msgid "Open" msgstr "Otev??t" -msgid "Ready" -msgstr "P?ipraveno" - +#: src/gtk-progress.c:63 src/gtk-progress.c:99 src/gtk-progress.c:122 msgid "Progress" msgstr "Pr?b?h" -msgid "JPEG Quality:" -msgstr "Kvalita JPEG:" +#. FIXME: Calculate some sensible size - maybe even remember user resizes +#: src/rs-save-dialog.c:93 src/rs-toolbox.c:371 +msgid "Export File" +msgstr "Exportovat soubor" +#: src/rs-save-dialog.c:244 +#, fuzzy, c-format +msgid "Exporting to %s" +msgstr "Exportuje se soubor..." + +#: src/rs-save-dialog.c:360 msgid "Keep aspect" msgstr "Zachovat pom?r stran" +#: src/rs-save-dialog.c:378 msgid "Width:" msgstr "???ka:" +#: src/rs-save-dialog.c:380 msgid "Height:" msgstr "V??ka:" +#: src/rs-save-dialog.c:382 msgid "Percent:" msgstr "Procento:" -msgid "Export File" -msgstr "Exportovat soubor" - -msgid "Exporting file ..." -msgstr "Exportuje se soubor..." - -msgid "File exported" -msgstr "Soubor exportov?n" - -msgid "File export canceled" -msgstr "Export souboru zru?en" - -msgid "JPEG (Joint Photographic Experts Group)" -msgstr "JPEG (Joint Photographic Experts Group)" - -msgid "PNG (Portable Network Graphics)" -msgstr "PNG (Portable Network Graphics)" - -msgid "8-bit TIFF (Tagged Image File Format)" -msgstr "8-bit TIFF (Tagged Image File Format)" - -msgid "16-bit TIFF (Tagged Image File Format)" -msgstr "16-bit TIFF (Tagged Image File Format)" - +#: src/rs-batch.c:206 src/rs-actions.c:737 msgid "A" msgstr "A" +#: src/rs-batch.c:209 src/rs-actions.c:738 msgid "B" msgstr "B" +#: src/rs-batch.c:212 src/rs-actions.c:739 msgid "C" msgstr "C" +#: src/rs-batch.c:437 msgid "Processing photos" msgstr "Zpracov?vaj? se fotografie" +#: src/rs-batch.c:441 msgid "Cancel" msgstr "Zru?it" +#: src/rs-batch.c:446 msgid "Last image:" msgstr "Posledn? obr?zek:" +#: src/rs-batch.c:479 #, c-format msgid "Time left: %dh %dm %ds" msgstr "" +#: src/rs-batch.c:483 msgid "Time left: ..." msgstr "" +#: src/rs-batch.c:495 #, c-format msgid "Loading %s ..." msgstr "Na??t? se %s..." +#: src/rs-batch.c:536 #, c-format msgid "Saving %s ..." msgstr "Ukl?d? se %s..." +#: src/rs-batch.c:634 msgid "Icon" msgstr "Ikona" +#: src/rs-batch.c:641 msgid "Filename" msgstr "Jm?no souboru" +#: src/rs-batch.c:648 msgid "Setting" msgstr "Nastaven?" +#: src/rs-batch.c:738 msgid "Start" msgstr "Spustit" +#: src/rs-batch.c:741 msgid "Remove" msgstr "Odstranit" +#: src/rs-batch.c:744 msgid "Remove all" msgstr "Odstranit v?e" +#: src/rs-batch.c:869 msgid "Photo size" msgstr "Velikost fotografie" +#: src/rs-batch.c:877 msgid "Constant scale" msgstr "Konstatn? pom?r" +#: src/rs-batch.c:878 msgid "Constant width" msgstr "Konstantn? ???ka" +#: src/rs-batch.c:879 #, fuzzy msgid "Constant height" msgstr "V??ka histogramu:" +#: src/rs-batch.c:880 msgid "Maximum size" msgstr "Maxim?ln? velikost" +#: src/rs-batch.c:892 msgid "Photo width:" msgstr "???ka fotografie" +#: src/rs-batch.c:894 src/rs-batch.c:903 msgid "pixels" msgstr "" +#: src/rs-batch.c:901 #, fuzzy msgid "Photo height:" msgstr "V??ka histogramu:" +#: src/rs-batch.c:910 msgid "Photo scale:" msgstr "" +#: src/rs-batch.c:912 msgid "%" msgstr "%" +#: src/rs-batch.c:948 #, c-format msgid "" "Constant width:\n" "%d" msgstr "" +#: src/rs-batch.c:951 #, fuzzy, c-format msgid "" "Constant height:\n" "%d" msgstr "V??ka histogramu:" +#: src/rs-batch.c:954 #, c-format msgid "" "Constant Scale:\n" "%d" msgstr "" +#: src/rs-batch.c:958 #, c-format msgid "" "Maximum size:\n" "%d x %d" msgstr "" -msgid "Choose output directory" -msgstr "Zvolte v?stupn? adres??" - +#: src/rs-batch.c:987 msgid "Output directory:" msgstr "V?stupn? adres??:" -msgid "Filename template:" -msgstr "?ablona jm?na souboru:" - +#: src/rs-batch.c:1012 #, fuzzy msgid "Change" msgstr "Zru?it" +#: src/rs-batch.c:1017 #, fuzzy msgid "Export dimensions" msgstr "Adres?? pro export:" #. All +#: src/rs-store.c:275 src/rs-store.c:834 #, c-format msgid "* (%d)" msgstr "* (%d)" +#: src/rs-store.c:276 msgid "All photos (excluding deleted)" msgstr "V?echny fotografie (krom? smazan?ch)" #. 1 +#: src/rs-store.c:279 src/rs-store.c:835 #, c-format msgid "1 (%d)" msgstr "1 (%d)" +#: src/rs-store.c:280 msgid "Priority 1 photos" msgstr "Fotografie s prioritou 1" #. 2 +#: src/rs-store.c:283 src/rs-store.c:836 #, c-format msgid "2 (%d)" msgstr "2 (%d)" +#: src/rs-store.c:284 msgid "Priority 2 photos" msgstr "Fotografie s prioritou 2" #. 3 +#: src/rs-store.c:287 src/rs-store.c:837 #, c-format msgid "3 (%d)" msgstr "3 (%d)" +#: src/rs-store.c:288 msgid "Priority 3 photos" msgstr "Fotografie s prioritou 3" #. Unsorted +#: src/rs-store.c:291 src/rs-store.c:838 #, c-format msgid "U (%d)" msgstr "U (%d)" +#: src/rs-store.c:292 msgid "Unprioritized photos" msgstr "Fotografie bez priority" #. Deleted +#: src/rs-store.c:295 src/rs-store.c:839 #, c-format msgid "D (%d)" msgstr "D (%d)" +#: src/rs-store.c:296 msgid "Deleted photos" msgstr "Smazan? fotografie" @@ -400,235 +479,338 @@ #. understanding of our interface. I was thinking about adding a button instead #. that said "ROCK ON!" to instantly play "AC/DC - Highway to Hell", but I #. believe this will be better for the end user +#: src/rs-store.c:331 #, fuzzy msgid "Priorities" msgstr "Pr?b?h" +#: src/rs-store.c:527 #, c-format msgid "" "%s\n" "\n" msgstr "" +#: src/rs-store.c:530 #, c-format msgid "Focal length: %dmm\n" msgstr "" +#: src/rs-store.c:533 #, c-format msgid "Shutter speed: %.1fs\n" msgstr "" +#: src/rs-store.c:535 #, c-format msgid "Shutter speed: 1/%.0fs\n" msgstr "" +#: src/rs-store.c:538 #, c-format msgid "Aperture: F/%.01f\n" msgstr "" +#: src/rs-store.c:541 #, c-format msgid "ISO: %u\n" msgstr "" +#: src/rs-store.c:544 #, c-format msgid "Time: %s" msgstr "" +#: src/rs-preview-widget.c:505 +msgid "Display Navigation" +msgstr "" + +#: src/rs-preview-widget.c:756 +msgid "Light out mode not available" +msgstr "" + +#: src/rs-preview-widget.c:757 +msgid "" +"Your setup doesn't seem to support RGBA visuals and/or compositing. Consult " +"your operating system manual for enabling RGBA visuals and compositing." +msgstr "" + +#: src/rs-preview-widget.c:987 msgid "Size" msgstr "Velikost" +#: src/rs-preview-widget.c:995 msgid "-" msgstr "" +#: src/rs-preview-widget.c:1001 msgid "Grid" msgstr "M???ka" +#: src/rs-preview-widget.c:1006 msgid "None" msgstr "??dn?" +#: src/rs-preview-widget.c:1007 msgid "Golden sections" msgstr "Zlat? ?ezy" +#: src/rs-preview-widget.c:1008 msgid "Rule of thirds" msgstr "Pravidlo t?etin" +#: src/rs-preview-widget.c:1009 msgid "Golden triangles #1" msgstr "Zlat? troj?heln?ky #1" +#: src/rs-preview-widget.c:1010 msgid "Golden triangles #2" msgstr "Zlat? troj?heln?ky #2" +#: src/rs-preview-widget.c:1011 msgid "Harmonious triangles #1" msgstr "Harmonick? troj?heln?ky #1" +#: src/rs-preview-widget.c:1012 msgid "Harmonious triangles #2" msgstr "Harmonick? troj?heln?ky #2" +#: src/rs-preview-widget.c:1021 msgid "Aspect" msgstr "Pom?r stran" +#: src/rs-preview-widget.c:1026 msgid "Freeform" msgstr "Voln?" +#: src/rs-preview-widget.c:1027 msgid "ISO paper (A4)" msgstr "Form?t A4" +#: src/rs-preview-widget.c:1028 msgid "3:2 (35mm)" msgstr "3:2 (35mm)" +#: src/rs-preview-widget.c:1029 msgid "4:3" msgstr "4:3" +#: src/rs-preview-widget.c:1030 msgid "10:8 (SXGA)" msgstr "10:8 (SXGA)" +#: src/rs-preview-widget.c:1031 msgid "16:10 (Wide XGA)" msgstr "16:10 (Wide XGA)" +#: src/rs-preview-widget.c:1032 msgid "8:3 (Dualhead XGA)" msgstr "8:3 (Dualhead XGA)" +#: src/rs-preview-widget.c:1033 msgid "1:1" msgstr "1:1" +#: src/rs-preview-widget.c:1034 msgid "Golden rectangle" msgstr "Zlat? obd?ln?k" +#: src/rs-preview-widget.c:1042 src/rs-preview-widget.c:1053 msgid "Crop" msgstr "O??znout" +#: src/rs-preview-widget.c:1044 #, fuzzy msgid "Don't crop" msgstr "Zru?it o??znut?" -msgid "Flip the photo over the x-axis" -msgstr "P?evr?tit fotografii podle osy x" +#. Snapshot labels +#: src/rs-toolbox.c:157 src/rs-actions.c:972 +msgid " A " +msgstr " A " -msgid "Mirror the photo over the y-axis" -msgstr "Zrcadlit fotografii podle osy y" +#: src/rs-toolbox.c:158 src/rs-actions.c:973 +msgid " B " +msgstr " B " -msgid "Rotate the photo 90 degrees clockwise" -msgstr "Oto?it fotografii o 90 stup?? ve sm?ru hodinov?ch ru?i?ek" +#: src/rs-toolbox.c:159 src/rs-actions.c:974 +msgid " C " +msgstr " C " -msgid "Rotate the photo 180 degrees" -msgstr "Oto?it fotografii o 180 stup??" +#. FIXME: Get height from gconf +#: src/rs-toolbox.c:184 +msgid "Histogram" +msgstr "Histogram" -msgid "Rotate the photo 90 degrees counter clockwise" -msgstr "Oto?it fotografii o 90 stup?? proti sm?ru hodinov?ch ru?i?ek" +#: src/rs-toolbox.c:297 +#, fuzzy +msgid "Reset" +msgstr "Resetovat k?ivku" -msgid "Transforms" -msgstr "Transformace" - -msgid "Reset this setting" -msgstr "Resetovat toto nastaven?" - +#: src/rs-toolbox.c:415 src/rs-toolbox.c:540 msgid "Open curve ..." msgstr "Otev??t k?ivku..." +#: src/rs-toolbox.c:546 msgid "Save curve as ..." msgstr "Ulo?it k?ivku jako..." +#: src/rs-toolbox.c:552 msgid "Reset curve" msgstr "Resetovat k?ivku" +#: src/rs-toolbox.c:557 msgid "Auto adjust curve ends" msgstr "" -msgid " A " -msgstr " A " +#. Pack everything nice +#: src/rs-toolbox.c:637 +#, fuzzy +msgid "Basic" +msgstr "D?vka" -msgid " B " -msgstr " B " +#: src/rs-toolbox.c:638 +msgid "Channel Mixer" +msgstr "" -msgid " C " -msgstr " C " +#: src/rs-toolbox.c:639 src/rs-actions.c:353 +msgid "Curve" +msgstr "K?ivka" -#. Build GUI -msgid "Exposure" -msgstr "Expozice" +#: src/rs-toolbox.c:683 +msgid "Flip the photo over the x-axis" +msgstr "P?evr?tit fotografii podle osy x" -msgid "Hue" -msgstr "Odst?n" +#: src/rs-toolbox.c:684 +msgid "Mirror the photo over the y-axis" +msgstr "Zrcadlit fotografii podle osy y" -msgid "Contrast" -msgstr "Kontrast" +#: src/rs-toolbox.c:685 +msgid "Rotate the photo 90 degrees clockwise" +msgstr "Oto?it fotografii o 90 stup?? ve sm?ru hodinov?ch ru?i?ek" -#. Box it! -msgid "Warmth/tint" -msgstr "Teplota/t?nov?n?" +#: src/rs-toolbox.c:686 +msgid "Rotate the photo 90 degrees counter clockwise" +msgstr "Oto?it fotografii o 90 stup?? proti sm?ru hodinov?ch ru?i?ek" -msgid "Sharpen" -msgstr "Doost?en?" +#: src/rs-toolbox.c:698 +msgid "Transforms" +msgstr "Transformace" -msgid "Curve" -msgstr "K?ivka" - -msgid "Histogram" -msgstr "Histogram" - +#: src/rs-actions.c:141 msgid "Open directory" msgstr "Otev??t adres??" +#: src/rs-actions.c:198 +msgid "File exported" +msgstr "Soubor exportov?n" + +#: src/rs-actions.c:203 src/rs-actions.c:222 +#, fuzzy +msgid "Export failed" +msgstr "Exportovat soubor" + +#: src/rs-actions.c:232 msgid "Error exporting" msgstr "Chyba exportu" +#: src/rs-actions.c:233 msgid "Error exporting photo to gimp." msgstr "Chyba exportu do gimpu." +#: src/rs-actions.c:256 src/rs-actions.c:274 msgid "Deleting photos" msgstr "Maz?n? fotografi?" +#: src/rs-actions.c:257 msgid "Your files will be permanently deleted!" msgstr "Va?e soubory budou trvale smaz?ny!" +#: src/rs-actions.c:259 msgid "Delete photos" msgstr "Smazat fotografie" +#: src/rs-actions.c:333 msgid "Copied settings" msgstr "Zkop?rovan? nastaven?" +#. Build GUI +#: src/rs-actions.c:346 +msgid "Exposure" +msgstr "Expozice" + +#: src/rs-actions.c:348 +msgid "Hue" +msgstr "Odst?n" + +#: src/rs-actions.c:349 +msgid "Contrast" +msgstr "Kontrast" + +#: src/rs-actions.c:350 msgid "White balance" msgstr "Vyv??en? b?l?" +#: src/rs-actions.c:351 +msgid "Sharpen" +msgstr "Doost?en?" + +#: src/rs-actions.c:352 +msgid "Channel mixer" +msgstr "" + +#: src/rs-actions.c:385 msgid "Select settings to paste" msgstr "Vyberte nastaven? pro vlo?en?" +#: src/rs-actions.c:443 msgid "Pasted settings" msgstr "Vlo?en? nastaven?" +#: src/rs-actions.c:446 msgid "Nothing to paste" msgstr "Nic ke vlo?en?" +#: src/rs-actions.c:449 msgid "Buffer empty" msgstr "Pr?zdn? buffer" +#: src/rs-actions.c:492 msgid "Adjusting to auto white balance" msgstr "Automatick? ?prava vyv??en? b?l?" +#: src/rs-actions.c:502 msgid "No white balance to set from" msgstr "Neexistuje vyv??en? b?l? k nastaven?" +#: src/rs-actions.c:505 msgid "Adjusting to camera white balance" msgstr "Vyv??en? b?l? podle fotoapar?tu" +#: src/rs-actions.c:683 msgid "Showing exposure mask" msgstr "Zobrazen? expozi?n? masky" +#: src/rs-actions.c:685 msgid "Hiding exposure mask" msgstr "Skryt? expozi?n? masky" +#: src/rs-actions.c:715 #, fuzzy, c-format msgid " %s added to batch queue" msgstr "P?id?no do fronty" +#: src/rs-actions.c:717 #, fuzzy, c-format msgid "%s already added to batch queue" msgstr "Je ji? ve front?" +#: src/rs-actions.c:724 src/rs-actions.c:796 #, fuzzy, c-format msgid "%d photos added to batch queue" msgstr "P?id?no do fronty" +#: src/rs-actions.c:761 msgid "" "Select which settings to\n" "add to batch queue" @@ -636,210 +818,334 @@ "Zvolte, kter? nastaven?\n" "p?idat do fronty" +#: src/rs-actions.c:814 msgid "Removed from batch queue" msgstr "Odstran?no z fronty" +#: src/rs-actions.c:816 msgid "Not in batch queue" msgstr "Nen? ve front?" +#: src/rs-actions.c:850 msgid "A raw image converter for GTK+/GNOME" msgstr "Konvertor obrazov?ho form?tu raw pro GTK+/GNOME" +#: src/rs-actions.c:881 msgid "_File" msgstr "_Soubor" +#: src/rs-actions.c:882 msgid "_Edit" msgstr "_?pravy" +#: src/rs-actions.c:883 msgid "_Photo" msgstr "_Fotografie" +#: src/rs-actions.c:884 msgid "_Set Priority" msgstr "_Nastavit prioritu" +#: src/rs-actions.c:885 #, fuzzy msgid "_White Balance" msgstr "Vyv??en? b?l?" +#: src/rs-actions.c:886 msgid "_View" msgstr "_Zobrazen?" +#: src/rs-actions.c:887 msgid "_Sort by" msgstr "" +#: src/rs-actions.c:888 msgid "_Batch" msgstr "_D?vka" +#: src/rs-actions.c:889 msgid "_Help" msgstr "_N?pov?da" #. File menu +#: src/rs-actions.c:894 #, fuzzy msgid "_Open Directory" msgstr "Otev??t adres??" +#: src/rs-actions.c:895 #, fuzzy msgid "_Quick Export" msgstr "Soubor exportov?n" +#: src/rs-actions.c:896 #, fuzzy msgid "_Export As" msgstr "Export" +#: src/rs-actions.c:897 #, fuzzy msgid "_Export to Gimp" msgstr "Exportn? profil" +#: src/rs-actions.c:898 #, fuzzy msgid "_Reload directory" msgstr "Otev??t adres??" +#: src/rs-actions.c:899 msgid "_Delete flagged photos" msgstr "_Smazat ozna?en? fotografie" +#: src/rs-actions.c:900 msgid "_Quit" msgstr "_Ukon?it" #. Edit menu +#: src/rs-actions.c:903 msgid "_Revert settings" msgstr "_Obnovit nastaven?" +#: src/rs-actions.c:904 #, fuzzy msgid "_Copy settings" msgstr "Zkop?rovan? nastaven?" +#: src/rs-actions.c:905 #, fuzzy msgid "_Paste settings" msgstr "Vlo?en? nastaven?" +#: src/rs-actions.c:906 #, fuzzy msgid "_Reset settings" msgstr "Resetovat toto nastaven?" +#: src/rs-actions.c:907 #, fuzzy msgid "_Preferences" msgstr "P?edvolby" #. Photo menu +#: src/rs-actions.c:910 msgid "_Flag photo for deletion" msgstr "" +#: src/rs-actions.c:911 msgid "_1" msgstr "" +#: src/rs-actions.c:912 msgid "_2" msgstr "" +#: src/rs-actions.c:913 msgid "_3" msgstr "" +#: src/rs-actions.c:914 msgid "_Remove priority" msgstr "" +#: src/rs-actions.c:915 msgid "_Auto" msgstr "" +#: src/rs-actions.c:916 msgid "_Camera" msgstr "" +#: src/rs-actions.c:917 #, fuzzy msgid "_Crop" msgstr "O??znout" +#: src/rs-actions.c:918 #, fuzzy msgid "_Uncrop" msgstr "Zru?it o??znut?" +#: src/rs-actions.c:919 #, fuzzy msgid "_Straighten" msgstr "Narovnat" +#: src/rs-actions.c:920 #, fuzzy msgid "_Unstraighten" msgstr "Zru?it narovn?n?" +#: src/rs-actions.c:921 #, fuzzy msgid "_Group" msgstr "O??znout" +#: src/rs-actions.c:922 #, fuzzy msgid "_Ungroup" msgstr "Zru?it o??znut?" +#: src/rs-actions.c:923 #, fuzzy msgid "_Auto group" msgstr "Zru?it o??znut?" +#: src/rs-actions.c:924 +#, fuzzy +msgid "_Tag Photo..." +msgstr "_Fotografie" + +#: src/rs-actions.c:925 +msgid "Rotate Clockwise" +msgstr "" + +#: src/rs-actions.c:926 +#, fuzzy +msgid "Rotate Counter Clockwise" +msgstr "Oto?it fotografii o 90 stup?? ve sm?ru hodinov?ch ru?i?ek" + +#: src/rs-actions.c:927 +msgid "Flip" +msgstr "P?evr?tit" + +#: src/rs-actions.c:928 +msgid "Mirror" +msgstr "Zrcadlit" + #. View menu +#: src/rs-actions.c:931 msgid "_Previous photo" msgstr "_P?edchoz? fotografie" +#: src/rs-actions.c:932 msgid "_Next Photo" msgstr "_Dal?? fotografie" -msgid "_Zoom to fit" -msgstr "_P?ibl??it podle okna" - -msgid "_Zoom to 100%" -msgstr "_P?ibl??it 100%" - #. Batch menu +#: src/rs-actions.c:935 #, fuzzy msgid "_Add to batch queue" msgstr "P?idat do fronty" +#: src/rs-actions.c:936 msgid "_Add current view to queue" msgstr "_P?idat aktu?ln? pohled do fronty" +#: src/rs-actions.c:937 #, fuzzy msgid "_Remove from batch queue" msgstr "Odstran?no z fronty" +#: src/rs-actions.c:938 #, fuzzy msgid "_Start" msgstr "Spustit" #. help menu +#: src/rs-actions.c:941 msgid "_About" msgstr "O aplikaci" +#: src/rs-actions.c:949 +msgid "_Zoom to fit" +msgstr "_P?ibl??it podle okna" + +#: src/rs-actions.c:950 #, fuzzy msgid "_Iconbox" msgstr "Ikona" +#: src/rs-actions.c:951 #, fuzzy msgid "_Toolbox" msgstr "N?stroje" +#: src/rs-actions.c:952 msgid "_Fullscreen" msgstr "_Cel? obrazovka" +#: src/rs-actions.c:953 #, fuzzy msgid "_Exposure mask" msgstr "Expozice" +#: src/rs-actions.c:954 msgid "_Split" msgstr "" +#: src/rs-actions.c:956 +msgid "_Lights out" +msgstr "" + +#: src/rs-actions.c:962 msgid "Name" msgstr "" +#: src/rs-actions.c:963 msgid "Timestamp" msgstr "?asov? raz?tko" +#: src/rs-actions.c:964 #, fuzzy msgid "ISO" msgstr "ISO%d" +#: src/rs-actions.c:965 msgid "Aperture" msgstr "Clona" +#: src/rs-actions.c:966 msgid "Focallength" msgstr "Ohnisko" +#: src/rs-actions.c:967 msgid "Shutterspeed" msgstr "Expozice" +#~ msgid "Background renderer active" +#~ msgstr "Vykreslov?n? pozad? aktivn?" + +#, fuzzy +#~ msgid "Preload photos" +#~ msgstr "Smazan? fotografie" + +#, fuzzy +#~ msgid "Filename:" +#~ msgstr "Jm?no souboru" + +#~ msgid "Save uncompressed TIFF" +#~ msgstr "Ulo?it nekomprimovan? TIFF" + +#~ msgid "JPEG Quality:" +#~ msgstr "Kvalita JPEG:" + +#~ msgid "File export canceled" +#~ msgstr "Export souboru zru?en" + +#~ msgid "JPEG (Joint Photographic Experts Group)" +#~ msgstr "JPEG (Joint Photographic Experts Group)" + +#~ msgid "PNG (Portable Network Graphics)" +#~ msgstr "PNG (Portable Network Graphics)" + +#~ msgid "8-bit TIFF (Tagged Image File Format)" +#~ msgstr "8-bit TIFF (Tagged Image File Format)" + +#~ msgid "16-bit TIFF (Tagged Image File Format)" +#~ msgstr "16-bit TIFF (Tagged Image File Format)" + +#~ msgid "Rotate the photo 180 degrees" +#~ msgstr "Oto?it fotografii o 180 stup??" + +#~ msgid "Reset this setting" +#~ msgstr "Resetovat toto nastaven?" + +#~ msgid "Warmth/tint" +#~ msgstr "Teplota/t?nov?n?" + +#~ msgid "_Zoom to 100%" +#~ msgstr "_P?ibl??it 100%" + #~ msgid "%dmm " #~ msgstr "%dmm " @@ -888,10 +1194,6 @@ #~ msgstr "Pentax raw" #, fuzzy -#~ msgid "Opening directory..." -#~ msgstr "Otev?r? se adres??..." - -#, fuzzy #~ msgid "Added view to batch queue" #~ msgstr "Pohled(y) p?id?ny do fronty" @@ -1039,12 +1341,6 @@ #~ msgid "Angle: %.02f" #~ msgstr "?hel: %.02f" -#~ msgid "Flip" -#~ msgstr "P?evr?tit" - -#~ msgid "Mirror" -#~ msgstr "Zrcadlit" - #~ msgid "CW" #~ msgstr "Ve sm?ru hodinov?ch ru?i?ek" Modified: trunk/po/da.po =================================================================== --- trunk/po/da.po 2009-09-27 21:47:00 UTC (rev 2670) +++ trunk/po/da.po 2009-09-27 22:10:12 UTC (rev 2671) @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: Rawstudio 1.1.1\n" "Report-Msgid-Bugs-To: rawstudio-dev at rawstudio.org\n" -"POT-Creation-Date: 2009-01-11 04:26+0100\n" +"POT-Creation-Date: 2009-09-28 00:09+0200\n" "PO-Revision-Date: 2009-01-11 04:25+0100\n" "Last-Translator: Anders Kvist \n" "Language-Team: Rawstudio development \n" @@ -17,30 +17,47 @@ "X-Poedit-Language: Danish\n" "X-Poedit-Country: DENMARK\n" +#: src/filename.c:280 #, c-format msgid "%f - Original filename" msgstr "%f - Originalt filnavn" +#: src/filename.c:281 #, c-format msgid "%2c - Incremental counter" msgstr "%2c - Stigende t?ller" +#: src/filename.c:282 #, c-format msgid "%s - Setting id (A, B or C)" msgstr "%s - Indstillings id (A, B eller C)" +#: src/filename.c:283 +#, c-format +msgid "%d - Date from EXIF (YYYY-MM-DD)" +msgstr "" + +#: src/filename.c:284 +msgid "%t - Time from EXIF (HH:MM:SS)" +msgstr "" + +#: src/gtk-helper.c:420 msgid "Select color profile" msgstr "V?lg farveprofil" +#: src/gtk-helper.c:450 msgid "All files" msgstr "Alle filer" +#: src/gtk-helper.c:451 msgid "Color profiles (icc and icm)" msgstr "Farveprofiler (icc og icm)" +#: src/gtk-helper.c:465 msgid "Not a valid color profile." msgstr "Ikke en valid farveprofil" +#: src/gtk-helper.c:466 msgid "" "The file you selected does not appear to be a valid color profile for this " "version of Rawstudio." @@ -48,254 +65,305 @@ "Den valgte fil er ikke en godkendt farveprofil til denne version af " "Rawstudio." +#: src/gtk-helper.c:568 msgid "Enable color management (experimental)" msgstr "Aktiver farvestyring (eksperimentelt)" +#: src/gtk-helper.c:576 msgid "Input profile" msgstr "Input profil" +#: src/gtk-helper.c:579 msgid "BuiltInRGBProfile" msgstr "Indbygget RGB profil" +#: src/gtk-helper.c:629 msgid "Display profile" msgstr "Sk?rm profil" +#: src/gtk-helper.c:632 src/gtk-helper.c:685 msgid "sRGB" msgstr "sRGB" +#: src/gtk-helper.c:682 msgid "Export profile" msgstr "Output profil" +#: src/gtk-helper.c:734 msgid "Intent" msgstr "Form?l" +#: src/gtk-helper.c:737 msgid "Perceptual" msgstr "Opfattelse" +#: src/gtk-helper.c:738 msgid "Relative colormetric" msgstr "Relativt farvemetrisk" +#: src/gtk-helper.c:739 src/rs-actions.c:347 msgid "Saturation" msgstr "Farvem?tning" +#: src/gtk-helper.c:740 msgid "Absolute colormetric" msgstr "Absolut farvemetrisk" -msgid "Background renderer active" -msgstr "Beregner i baggrunden" - +#: src/gtk-interface.c:182 msgid "Opening photo ..." msgstr "?bner foto ..." +#: src/gtk-interface.c:197 msgid "Couldn't open photo" msgstr "Kunne ikke ?bne foto" +#: src/gtk-interface.c:202 msgid "Image opened" msgstr "Foto ?bnet" +#: src/gtk-interface.c:203 src/gtk-interface.c:830 src/gtk-interface.c:953 +#: src/gtk-interface.c:995 msgid "Rawstudio" msgstr "Rawstudio" +#: src/gtk-interface.c:273 #, c-format msgid "Changed photo priority (*)" msgstr "Fotoprioritet ?ndret (*)" +#: src/gtk-interface.c:275 #, c-format msgid "Changed photo priority (D)" msgstr "Fotoprioritet ?ndret (D)" +#: src/gtk-interface.c:277 #, c-format msgid "Changed photo priority (%d)" msgstr "Fotoprioritet ?ndret (%d)" +#: src/gtk-interface.c:492 +msgid "Directory:" +msgstr "Bibliotek:" + +#: src/gtk-interface.c:494 src/rs-batch.c:980 +msgid "Choose output directory" +msgstr "V?lg output bibliotek" + +#: src/gtk-interface.c:510 src/rs-batch.c:991 +msgid "Filename template:" +msgstr "Filnavns skabelon:" + +#: src/gtk-interface.c:523 +msgid "Filename example:" +msgstr "Eksempel p? filnavn:" + +#: src/gtk-interface.c:534 +msgid "File type:" +msgstr "Fil type:" + +#: src/gtk-interface.c:595 msgid "Preferences" msgstr "Egenskaber" +#: src/gtk-interface.c:610 msgid "Preview background color:" msgstr "Baggrundsfarve" +#: src/gtk-interface.c:625 msgid "Histogram height:" msgstr "Histogram h?jde:" +#: src/gtk-interface.c:635 msgid "Show filenames in iconview" msgstr "Vis filnavne" +#: src/gtk-interface.c:640 msgid "Use system theme" msgstr "Brug system tema" +#: src/gtk-interface.c:647 msgid "Place cache in home directory" msgstr "Placer cache i hjemme bibliotek" +#: src/gtk-interface.c:650 msgid "Load 8 bit photos (jpeg, png, etc)" msgstr "?ben 8 bit fotos (jpeg, png, osv.)" -msgid "Preload photos" -msgstr "Forh?nds?bning af fotos" - -msgid "Directory:" -msgstr "Bibliotek:" - -msgid "Filename:" -msgstr "Filnavn:" - -msgid "File type:" -msgstr "Fil type:" - -#. set default -msgid "Filename example:" -msgstr "Eksempel p? filnavn:" - -msgid "Save uncompressed TIFF" -msgstr "Gem TIFF ukomprimeret" - +#: src/gtk-interface.c:718 msgid "General" msgstr "Generel" #. gtk_notebook_append_page(GTK_NOTEBOOK(notebook), batch_page, gtk_label_new(_("Batch"))); +#: src/gtk-interface.c:720 msgid "Quick export" msgstr "Hurtig eksportering" +#: src/gtk-interface.c:721 msgid "Colors" msgstr "Farver" +#: src/gtk-interface.c:955 src/gtk-interface.c:1178 +msgid "Opening directory..." +msgstr "?ben bibliotek" + +#: src/gtk-interface.c:965 src/gtk-interface.c:1123 src/gtk-interface.c:1193 +msgid "Ready" +msgstr "Klar" + +#: src/gtk-interface.c:1050 msgid "Open recursive" msgstr "?ben rekursivt" +#: src/gtk-interface.c:1059 msgid "Tools" msgstr "V?rkt?jer" +#: src/gtk-interface.c:1060 msgid "Batch" msgstr "Batch" +#: src/gtk-interface.c:1061 msgid "Open" msgstr "?ben" -msgid "Ready" -msgstr "Klar" - +#: src/gtk-progress.c:63 src/gtk-progress.c:99 src/gtk-progress.c:122 msgid "Progress" msgstr "Fremskridt" -msgid "JPEG Quality:" -msgstr "JPEG kvalitet:" +#. FIXME: Calculate some sensible size - maybe even remember user resizes +#: src/rs-save-dialog.c:93 src/rs-toolbox.c:371 +msgid "Export File" +msgstr "Eksporter fil" +#: src/rs-save-dialog.c:244 +#, fuzzy, c-format +msgid "Exporting to %s" +msgstr "Eksporterer fil ..." + +#: src/rs-save-dialog.c:360 msgid "Keep aspect" msgstr "Bevar aspekt" +#: src/rs-save-dialog.c:378 msgid "Width:" msgstr "Bredde:" +#: src/rs-save-dialog.c:380 msgid "Height:" msgstr "H?jde:" +#: src/rs-save-dialog.c:382 msgid "Percent:" msgstr "Procent:" -msgid "Export File" -msgstr "Eksporter fil" - -msgid "Exporting file ..." -msgstr "Eksporterer fil ..." - -msgid "File exported" -msgstr "Fil eksporteret" - -msgid "File export canceled" -msgstr "Eksportering af fil afbrudt" - -msgid "JPEG (Joint Photographic Experts Group)" -msgstr "JPEG (Joint Photographic Experts Group)" - -msgid "PNG (Portable Network Graphics)" -msgstr "PNG (Portable Network Graphics)" - -msgid "8-bit TIFF (Tagged Image File Format)" -msgstr "8-bit TIFF (Tagged Image File Format)" - -msgid "16-bit TIFF (Tagged Image File Format)" -msgstr "16-bit TIFF (Tagged Image File Format)" - +#: src/rs-batch.c:206 src/rs-actions.c:737 msgid "A" msgstr "A" +#: src/rs-batch.c:209 src/rs-actions.c:738 msgid "B" msgstr "B" +#: src/rs-batch.c:212 src/rs-actions.c:739 msgid "C" msgstr "C" +#: src/rs-batch.c:437 msgid "Processing photos" msgstr "Behandler fotos" +#: src/rs-batch.c:441 msgid "Cancel" msgstr "Afbryd" +#: src/rs-batch.c:446 msgid "Last image:" msgstr "Sidste foto:" +#: src/rs-batch.c:479 #, c-format msgid "Time left: %dh %dm %ds" msgstr "Tid tilbage: %dt %dm %ds" +#: src/rs-batch.c:483 msgid "Time left: ..." msgstr "Tid tilbage: ..." +#: src/rs-batch.c:495 #, c-format msgid "Loading %s ..." msgstr "?bner %s ..." +#: src/rs-batch.c:536 #, c-format msgid "Saving %s ..." msgstr "Gemmer %s ..." +#: src/rs-batch.c:634 msgid "Icon" msgstr "Ikon" +#: src/rs-batch.c:641 msgid "Filename" msgstr "Filnavn" +#: src/rs-batch.c:648 msgid "Setting" msgstr "Indstilling" +#: src/rs-batch.c:738 msgid "Start" msgstr "Start" +#: src/rs-batch.c:741 msgid "Remove" msgstr "Fjern" +#: src/rs-batch.c:744 msgid "Remove all" msgstr "Fjern alle" +#: src/rs-batch.c:869 msgid "Photo size" msgstr "Foto st?rrelse" +#: src/rs-batch.c:877 msgid "Constant scale" msgstr "Konstant m?lestok" +#: src/rs-batch.c:878 msgid "Constant width" msgstr "Konstant bredde" +#: src/rs-batch.c:879 msgid "Constant height" msgstr "Konstant h?jde" +#: src/rs-batch.c:880 msgid "Maximum size" msgstr "Maximal st?rrelse" +#: src/rs-batch.c:892 msgid "Photo width:" msgstr "Foto bredde:" +#: src/rs-batch.c:894 src/rs-batch.c:903 msgid "pixels" msgstr "pixels" +#: src/rs-batch.c:901 msgid "Photo height:" msgstr "Foto h?jde:" +#: src/rs-batch.c:910 msgid "Photo scale:" msgstr "Foto m?lestok:" +#: src/rs-batch.c:912 msgid "%" msgstr "%" +#: src/rs-batch.c:948 #, c-format msgid "" "Constant width:\n" @@ -304,6 +372,7 @@ "Konstant bredde:\n" "%d" +#: src/rs-batch.c:951 #, c-format msgid "" "Constant height:\n" @@ -312,6 +381,7 @@ "Konstant h?jde:\n" "%d" +#: src/rs-batch.c:954 #, c-format msgid "" "Constant Scale:\n" @@ -320,6 +390,7 @@ "Konstant m?lestok:\n" "%d" +#: src/rs-batch.c:958 #, c-format msgid "" "Maximum size:\n" @@ -328,66 +399,75 @@ "Maksimal st?rrelse:\n" "%d x %d" -msgid "Choose output directory" -msgstr "V?lg output bibliotek" - +#: src/rs-batch.c:987 msgid "Output directory:" msgstr "Output bibliotek:" -msgid "Filename template:" -msgstr "Filnavns skabelon:" - +#: src/rs-batch.c:1012 msgid "Change" msgstr "Skift" +#: src/rs-batch.c:1017 msgid "Export dimensions" msgstr "Eksponerings dimensioner" #. All +#: src/rs-store.c:275 src/rs-store.c:834 #, c-format msgid "* (%d)" msgstr "* (%d)" +#: src/rs-store.c:276 msgid "All photos (excluding deleted)" msgstr "Alle fotos (undtaget slettede)" #. 1 +#: src/rs-store.c:279 src/rs-store.c:835 #, c-format msgid "1 (%d)" msgstr "1 (%d)" +#: src/rs-store.c:280 msgid "Priority 1 photos" msgstr "Prioritet 1 fotos" #. 2 +#: src/rs-store.c:283 src/rs-store.c:836 #, c-format msgid "2 (%d)" msgstr "2 (%d)" +#: src/rs-store.c:284 msgid "Priority 2 photos" msgstr "Prioritet 2 fotos" #. 3 +#: src/rs-store.c:287 src/rs-store.c:837 #, c-format msgid "3 (%d)" msgstr "3 (%d)" +#: src/rs-store.c:288 msgid "Priority 3 photos" msgstr "Prioritet 3 fotos" #. Unsorted +#: src/rs-store.c:291 src/rs-store.c:838 #, c-format msgid "U (%d)" msgstr "U (%d)" +#: src/rs-store.c:292 msgid "Unprioritized photos" msgstr "Uprioriterede fotos" #. Deleted +#: src/rs-store.c:295 src/rs-store.c:839 #, c-format msgid "D (%d)" msgstr "D (%d)" +#: src/rs-store.c:296 msgid "Deleted photos" msgstr "Slettede fotos" @@ -396,9 +476,11 @@ #. understanding of our interface. I was thinking about adding a button instead #. that said "ROCK ON!" to instantly play "AC/DC - Highway to Hell", but I #. believe this will be better for the end user +#: src/rs-store.c:331 msgid "Priorities" msgstr "Prioriteter" +#: src/rs-store.c:527 #, c-format msgid "" "%s\n" @@ -407,224 +489,325 @@ "%s\n" "\n" +#: src/rs-store.c:530 #, c-format msgid "Focal length: %dmm\n" msgstr "Fokus l?ngde: %dmm\n" +#: src/rs-store.c:533 #, c-format msgid "Shutter speed: %.1fs\n" msgstr "Lukker hastighed: %.1fs\n" +#: src/rs-store.c:535 #, c-format msgid "Shutter speed: 1/%.0fs\n" msgstr "Lukker hastighed: 1/%.0fs\n" +#: src/rs-store.c:538 #, c-format msgid "Aperture: F/%.01f\n" msgstr "Bl?nde: F/%.01f\n" +#: src/rs-store.c:541 #, c-format msgid "ISO: %u\n" msgstr "ISO: %u\n" +#: src/rs-store.c:544 #, c-format msgid "Time: %s" msgstr "Tid: %s" +#: src/rs-preview-widget.c:505 +msgid "Display Navigation" +msgstr "" + +#: src/rs-preview-widget.c:756 +msgid "Light out mode not available" +msgstr "" + +#: src/rs-preview-widget.c:757 +msgid "" +"Your setup doesn't seem to support RGBA visuals and/or compositing. Consult " +"your operating system manual for enabling RGBA visuals and compositing." +msgstr "" + +#: src/rs-preview-widget.c:987 msgid "Size" msgstr "St?rrelse:" +#: src/rs-preview-widget.c:995 msgid "-" msgstr "-" +#: src/rs-preview-widget.c:1001 msgid "Grid" msgstr "Gitter" +#: src/rs-preview-widget.c:1006 msgid "None" msgstr "Ingen" +#: src/rs-preview-widget.c:1007 msgid "Golden sections" msgstr "Gyldne sektioner" +#: src/rs-preview-widget.c:1008 msgid "Rule of thirds" msgstr "Trediedels reglen" +#: src/rs-preview-widget.c:1009 msgid "Golden triangles #1" msgstr "Gyldne trekanter #1" +#: src/rs-preview-widget.c:1010 msgid "Golden triangles #2" msgstr "Gyldne trekanter #2" +#: src/rs-preview-widget.c:1011 msgid "Harmonious triangles #1" msgstr "Harmoniske trekanter #1" +#: src/rs-preview-widget.c:1012 msgid "Harmonious triangles #2" msgstr "Harmoniske trekanter #2" +#: src/rs-preview-widget.c:1021 msgid "Aspect" msgstr "Forhold" +#: src/rs-preview-widget.c:1026 msgid "Freeform" msgstr "Fri" +#: src/rs-preview-widget.c:1027 msgid "ISO paper (A4)" msgstr "ISO papir (A4)" +#: src/rs-preview-widget.c:1028 msgid "3:2 (35mm)" msgstr "3:2 (35mm)" +#: src/rs-preview-widget.c:1029 msgid "4:3" msgstr "4:3" +#: src/rs-preview-widget.c:1030 msgid "10:8 (SXGA)" msgstr "10:8 (SXGA)" +#: src/rs-preview-widget.c:1031 msgid "16:10 (Wide XGA)" msgstr "16:10 (Wide XGA)" +#: src/rs-preview-widget.c:1032 msgid "8:3 (Dualhead XGA)" msgstr "8:3 (Dualhead XGA)" +#: src/rs-preview-widget.c:1033 msgid "1:1" msgstr "1:1" +#: src/rs-preview-widget.c:1034 msgid "Golden rectangle" msgstr "Gylden rektangel" +#: src/rs-preview-widget.c:1042 src/rs-preview-widget.c:1053 msgid "Crop" msgstr "Besk?r" +#: src/rs-preview-widget.c:1044 msgid "Don't crop" msgstr "Afbryd crop" -msgid "Flip the photo over the x-axis" -msgstr "Vend foto over x-aksen" +#. Snapshot labels +#: src/rs-toolbox.c:157 src/rs-actions.c:972 +msgid " A " +msgstr " A" -msgid "Mirror the photo over the y-axis" -msgstr "Vend foto over y-aksen" +#: src/rs-toolbox.c:158 src/rs-actions.c:973 +msgid " B " +msgstr " B " -msgid "Rotate the photo 90 degrees clockwise" -msgstr "Roter fotoet 90 grader med uret" +#: src/rs-toolbox.c:159 src/rs-actions.c:974 +msgid " C " +msgstr " C " -msgid "Rotate the photo 180 degrees" -msgstr "Roter fotoet 180 grader" +#. FIXME: Get height from gconf +#: src/rs-toolbox.c:184 +msgid "Histogram" +msgstr "Histogram" -msgid "Rotate the photo 90 degrees counter clockwise" -msgstr "Roter fotoet 90 grader mod uret" +#: src/rs-toolbox.c:297 +#, fuzzy +msgid "Reset" +msgstr "Nulstil kurve" -msgid "Transforms" -msgstr "Transformere" - -msgid "Reset this setting" -msgstr "Nulstil denne indstilling" - +#: src/rs-toolbox.c:415 src/rs-toolbox.c:540 msgid "Open curve ..." msgstr "?ben kurve ..." +#: src/rs-toolbox.c:546 msgid "Save curve as ..." msgstr "Gem kurve som ..." +#: src/rs-toolbox.c:552 msgid "Reset curve" msgstr "Nulstil kurve" +#: src/rs-toolbox.c:557 msgid "Auto adjust curve ends" msgstr "Auto indstil kurve ender" -msgid " A " -msgstr " A" +#. Pack everything nice +#: src/rs-toolbox.c:637 +#, fuzzy +msgid "Basic" +msgstr "Batch" -msgid " B " -msgstr " B " +#: src/rs-toolbox.c:638 +msgid "Channel Mixer" +msgstr "" -msgid " C " -msgstr " C " +#: src/rs-toolbox.c:639 src/rs-actions.c:353 +msgid "Curve" +msgstr "Kurve" -#. Build GUI -msgid "Exposure" -msgstr "Eksponering" +#: src/rs-toolbox.c:683 +msgid "Flip the photo over the x-axis" +msgstr "Vend foto over x-aksen" -msgid "Hue" -msgstr "Farvetone" +#: src/rs-toolbox.c:684 +msgid "Mirror the photo over the y-axis" +msgstr "Vend foto over y-aksen" -msgid "Contrast" -msgstr "Kontrast" +#: src/rs-toolbox.c:685 +msgid "Rotate the photo 90 degrees clockwise" +msgstr "Roter fotoet 90 grader med uret" -#. Box it! -msgid "Warmth/tint" -msgstr "Varme/Nuance" +#: src/rs-toolbox.c:686 +msgid "Rotate the photo 90 degrees counter clockwise" +msgstr "Roter fotoet 90 grader mod uret" -msgid "Sharpen" -msgstr "Skarphed" +#: src/rs-toolbox.c:698 +msgid "Transforms" +msgstr "Transformere" -msgid "Curve" -msgstr "Kurve" - -msgid "Histogram" -msgstr "Histogram" - +#: src/rs-actions.c:141 msgid "Open directory" msgstr "?ben bibliotek" +#: src/rs-actions.c:198 +msgid "File exported" +msgstr "Fil eksporteret" + +#: src/rs-actions.c:203 src/rs-actions.c:222 +#, fuzzy +msgid "Export failed" +msgstr "Eksporter fil" + +#: src/rs-actions.c:232 msgid "Error exporting" msgstr "Fejl ved eksportering" +#: src/rs-actions.c:233 msgid "Error exporting photo to gimp." msgstr "Fejl ved eksportering til Gimp" +#: src/rs-actions.c:256 src/rs-actions.c:274 msgid "Deleting photos" msgstr "Sletter fotos" +#: src/rs-actions.c:257 msgid "Your files will be permanently deleted!" msgstr "Dine filer vil blive slettet permanent!" +#: src/rs-actions.c:259 msgid "Delete photos" msgstr "Slet fotos" +#: src/rs-actions.c:333 msgid "Copied settings" msgstr "Indstillinger kopieret" +#. Build GUI +#: src/rs-actions.c:346 +msgid "Exposure" +msgstr "Eksponering" + +#: src/rs-actions.c:348 +msgid "Hue" +msgstr "Farvetone" + +#: src/rs-actions.c:349 +msgid "Contrast" +msgstr "Kontrast" + +#: src/rs-actions.c:350 msgid "White balance" msgstr "Hvidbalance" +#: src/rs-actions.c:351 +msgid "Sharpen" +msgstr "Skarphed" + +#: src/rs-actions.c:352 +msgid "Channel mixer" +msgstr "" + +#: src/rs-actions.c:385 msgid "Select settings to paste" msgstr "V?lg indstillinger der skal inds?ttes" +#: src/rs-actions.c:443 msgid "Pasted settings" msgstr "Indstillinger indsat" +#: src/rs-actions.c:446 msgid "Nothing to paste" msgstr "Intet at inds?tte" +#: src/rs-actions.c:449 msgid "Buffer empty" msgstr "Bufferen er tom" +#: src/rs-actions.c:492 msgid "Adjusting to auto white balance" msgstr "Justerer efter auto hvidbalance" +#: src/rs-actions.c:502 msgid "No white balance to set from" msgstr "Ingen hvidbalance at justere fra" +#: src/rs-actions.c:505 msgid "Adjusting to camera white balance" msgstr "Justerer efter kameraets hvidbalance" +#: src/rs-actions.c:683 msgid "Showing exposure mask" msgstr "Viser eksponerings maskering" +#: src/rs-actions.c:685 msgid "Hiding exposure mask" msgstr "Skjuler eksponerings maskering" +#: src/rs-actions.c:715 #, c-format msgid " %s added to batch queue" msgstr "%s er tilf?jet til batch k?en" +#: src/rs-actions.c:717 #, c-format msgid "%s already added to batch queue" msgstr "%s er allerede tilf?jet til batch k?en" +#: src/rs-actions.c:724 src/rs-actions.c:796 #, c-format msgid "%d photos added to batch queue" msgstr "%d fotos tilf?jet til batch k?en" +#: src/rs-actions.c:761 msgid "" "Select which settings to\n" "add to batch queue" @@ -632,186 +815,308 @@ "V?lg hvilke indstillinger der\n" "skal tilf?jes til batch k?en" +#: src/rs-actions.c:814 msgid "Removed from batch queue" msgstr "Fjernet fra batch k?" +#: src/rs-actions.c:816 msgid "Not in batch queue" msgstr "Findes ikke i batch k?" +#: src/rs-actions.c:850 msgid "A raw image converter for GTK+/GNOME" msgstr "En raw foto konverter til GTK+/GNOME" +#: src/rs-actions.c:881 msgid "_File" msgstr "_Filer" +#: src/rs-actions.c:882 msgid "_Edit" msgstr "_Editer" +#: src/rs-actions.c:883 msgid "_Photo" msgstr "_Foto" +#: src/rs-actions.c:884 msgid "_Set Priority" msgstr "_S?t_prioritet" +#: src/rs-actions.c:885 msgid "_White Balance" msgstr "_Hvidbalance" +#: src/rs-actions.c:886 msgid "_View" msgstr "_Vis" +#: src/rs-actions.c:887 msgid "_Sort by" msgstr "_Sorter efter" +#: src/rs-actions.c:888 msgid "_Batch" msgstr "_Batch" +#: src/rs-actions.c:889 msgid "_Help" msgstr "_Hj?lp" #. File menu +#: src/rs-actions.c:894 msgid "_Open Directory" msgstr "_?ben bibliotek" +#: src/rs-actions.c:895 msgid "_Quick Export" msgstr "_Hurtig eksportering" +#: src/rs-actions.c:896 msgid "_Export As" msgstr "_Eksporter som..." +#: src/rs-actions.c:897 msgid "_Export to Gimp" msgstr "_Eksporter til Gimp " +#: src/rs-actions.c:898 msgid "_Reload directory" msgstr "_Genindl?s bibliotek" +#: src/rs-actions.c:899 msgid "_Delete flagged photos" msgstr "_Slet markerede fotos" +#: src/rs-actions.c:900 msgid "_Quit" msgstr "_Afslut" #. Edit menu +#: src/rs-actions.c:903 msgid "_Revert settings" msgstr "_Nulstil ?ndringer" +#: src/rs-actions.c:904 msgid "_Copy settings" msgstr "_Kopier indstillinger" +#: src/rs-actions.c:905 msgid "_Paste settings" msgstr "_Inds?t indstillinger" +#: src/rs-actions.c:906 msgid "_Reset settings" msgstr "_Nulstil denne indstilling" +#: src/rs-actions.c:907 msgid "_Preferences" msgstr "_Egenskaber" #. Photo menu +#: src/rs-actions.c:910 msgid "_Flag photo for deletion" msgstr "_Marker foto til sletning" +#: src/rs-actions.c:911 msgid "_1" msgstr "_1" +#: src/rs-actions.c:912 msgid "_2" msgstr "_2" +#: src/rs-actions.c:913 msgid "_3" msgstr "_3" +#: src/rs-actions.c:914 msgid "_Remove priority" msgstr "_Fjern prioritet" +#: src/rs-actions.c:915 msgid "_Auto" msgstr "_Auto" +#: src/rs-actions.c:916 msgid "_Camera" msgstr "_Kamera" +#: src/rs-actions.c:917 msgid "_Crop" msgstr "_Besk?r" +#: src/rs-actions.c:918 msgid "_Uncrop" msgstr "_Annuller besk?ring" +#: src/rs-actions.c:919 msgid "_Straighten" msgstr "_Ret foto op" +#: src/rs-actions.c:920 msgid "_Unstraighten" msgstr "_Fjern fotoopretning" +#: src/rs-actions.c:921 msgid "_Group" msgstr "_Grupper" +#: src/rs-actions.c:922 msgid "_Ungroup" msgstr "_Fjern gruppering" +#: src/rs-actions.c:923 msgid "_Auto group" msgstr "_Auto gruppering" +#: src/rs-actions.c:924 +#, fuzzy +msgid "_Tag Photo..." +msgstr "_Foto" + +#: src/rs-actions.c:925 +msgid "Rotate Clockwise" +msgstr "" + +#: src/rs-actions.c:926 +#, fuzzy +msgid "Rotate Counter Clockwise" +msgstr "Roter fotoet 90 grader med uret" + +#: src/rs-actions.c:927 +msgid "Flip" +msgstr "" + +#: src/rs-actions.c:928 +msgid "Mirror" +msgstr "" + #. View menu +#: src/rs-actions.c:931 msgid "_Previous photo" msgstr "_Foreg?ende foto" +#: src/rs-actions.c:932 msgid "_Next Photo" msgstr "_N?ste foto" -msgid "_Zoom to fit" -msgstr "_Zoom tilpasning" - -msgid "_Zoom to 100%" -msgstr "_Zoom til 100%" - #. Batch menu +#: src/rs-actions.c:935 msgid "_Add to batch queue" msgstr "_Tilf?j til batch k?en" +#: src/rs-actions.c:936 msgid "_Add current view to queue" msgstr "_Tilf?j nuv?rende visning til batch k?en" +#: src/rs-actions.c:937 msgid "_Remove from batch queue" msgstr "_Fjern fra batch k?en" +#: src/rs-actions.c:938 msgid "_Start" msgstr "_Start" #. help menu +#: src/rs-actions.c:941 msgid "_About" msgstr "_Om" +#: src/rs-actions.c:949 +msgid "_Zoom to fit" +msgstr "_Zoom tilpasning" + +#: src/rs-actions.c:950 msgid "_Iconbox" msgstr "_Ikoner" +#: src/rs-actions.c:951 msgid "_Toolbox" msgstr "_V?rkt?jer" +#: src/rs-actions.c:952 msgid "_Fullscreen" msgstr "_Fuld sk?rm" +#: src/rs-actions.c:953 msgid "_Exposure mask" msgstr "_Eksponerings maskering" +#: src/rs-actions.c:954 msgid "_Split" msgstr "_Delt visning" +#: src/rs-actions.c:956 +msgid "_Lights out" +msgstr "" + +#: src/rs-actions.c:962 msgid "Name" msgstr "Navn" +#: src/rs-actions.c:963 msgid "Timestamp" msgstr "Tidspunkt" +#: src/rs-actions.c:964 msgid "ISO" msgstr "ISO" +#: src/rs-actions.c:965 msgid "Aperture" msgstr "Bl?nde" +#: src/rs-actions.c:966 msgid "Focallength" msgstr "Fokusl?ngde" +#: src/rs-actions.c:967 msgid "Shutterspeed" msgstr "Lukker hastighed" +#~ msgid "Background renderer active" +#~ msgstr "Beregner i baggrunden" + +#~ msgid "Preload photos" +#~ msgstr "Forh?nds?bning af fotos" + +#~ msgid "Filename:" +#~ msgstr "Filnavn:" + +#~ msgid "Save uncompressed TIFF" +#~ msgstr "Gem TIFF ukomprimeret" + +#~ msgid "JPEG Quality:" +#~ msgstr "JPEG kvalitet:" + +#~ msgid "File export canceled" +#~ msgstr "Eksportering af fil afbrudt" + +#~ msgid "JPEG (Joint Photographic Experts Group)" +#~ msgstr "JPEG (Joint Photographic Experts Group)" + +#~ msgid "PNG (Portable Network Graphics)" +#~ msgstr "PNG (Portable Network Graphics)" + +#~ msgid "8-bit TIFF (Tagged Image File Format)" +#~ msgstr "8-bit TIFF (Tagged Image File Format)" + +#~ msgid "16-bit TIFF (Tagged Image File Format)" +#~ msgstr "16-bit TIFF (Tagged Image File Format)" + +#~ msgid "Rotate the photo 180 degrees" +#~ msgstr "Roter fotoet 180 grader" + +#~ msgid "Reset this setting" +#~ msgstr "Nulstil denne indstilling" + +#~ msgid "Warmth/tint" +#~ msgstr "Varme/Nuance" + +#~ msgid "_Zoom to 100%" +#~ msgstr "_Zoom til 100%" + #~ msgid "%dmm " #~ msgstr "%dmm " @@ -866,9 +1171,6 @@ #~ msgid "Hasselblad" #~ msgstr "Hasselblad" -#~ msgid "Opening directory..." -#~ msgstr "?ben bibliotek" - #~ msgid "Split" #~ msgstr "Delt visning" Modified: trunk/po/de.po =================================================================== --- trunk/po/de.po 2009-09-27 21:47:00 UTC (rev 2670) +++ trunk/po/de.po 2009-09-27 22:10:12 UTC (rev 2671) @@ -1,14 +1,14 @@ # Deutsche ?bersetzung f?r RAWStudio # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Carsten Mathaes , 2007. # Martin Egger , 2008. msgid "" msgstr "" "Project-Id-Version: Rawstudio 1.1.1\n" "Report-Msgid-Bugs-To: rawstudio-dev at rawstudio.org\n" -"POT-Creation-Date: 2009-01-11 04:26+0100\n" +"POT-Creation-Date: 2009-09-28 00:09+0200\n" "PO-Revision-Date: 2009-04-03 11:22+0100\n" "Last-Translator: Marcus Dapp \n" "Language-Team: Rawstudio development \n" @@ -20,281 +20,354 @@ "X-Poedit-Language: German\n" "X-Poedit-Country: GERMANY\n" +#: src/filename.c:280 #, c-format msgid "%f - Original filename" msgstr "%f - Uspr?nglicher Dateiname" +#: src/filename.c:281 #, c-format msgid "%2c - Incremental counter" msgstr "%2c - Laufnummer" +#: src/filename.c:282 #, c-format msgid "%s - Setting id (A, B or C)" msgstr "%s - Einstellungen (A, B oder C)" +#: src/filename.c:283 +#, c-format +msgid "%d - Date from EXIF (YYYY-MM-DD)" +msgstr "" + +#: src/filename.c:284 +msgid "%t - Time from EXIF (HH:MM:SS)" +msgstr "" + +#: src/gtk-helper.c:420 msgid "Select color profile" msgstr "Auswahl des Farbprofiles" +#: src/gtk-helper.c:450 msgid "All files" msgstr "Alle Dateien" +#: src/gtk-helper.c:451 msgid "Color profiles (icc and icm)" msgstr "Farbprofile (ICC und ICM)" +#: src/gtk-helper.c:465 msgid "Not a valid color profile." msgstr "Dies ist kein g?ltiges Farbpropfil" -msgid "The file you selected does not appear to be a valid color profile for this version of Rawstudio." -msgstr "Die ausgew?hlte Datei ist f?r diese Version von Rawstudio kein g?ltiges Farbprofil" +#: src/gtk-helper.c:466 +msgid "" +"The file you selected does not appear to be a valid color profile for this " +"version of Rawstudio." +msgstr "" +"Die ausgew?hlte Datei ist f?r diese Version von Rawstudio kein g?ltiges " +"Farbprofil" +#: src/gtk-helper.c:568 msgid "Enable color management (experimental)" msgstr "Farbmanagement einschalten (experimentell)" +#: src/gtk-helper.c:576 msgid "Input profile" msgstr "Eingabe Farbprofil" +#: src/gtk-helper.c:579 msgid "BuiltInRGBProfile" msgstr "BuiltInRGBProfile" +#: src/gtk-helper.c:629 msgid "Display profile" msgstr "Arbeitsfarbraum" +#: src/gtk-helper.c:632 src/gtk-helper.c:685 msgid "sRGB" msgstr "sRGB" +#: src/gtk-helper.c:682 msgid "Export profile" msgstr "Ausgabe Farbprofil" +#: src/gtk-helper.c:734 msgid "Intent" msgstr "Farbraumtransformation" +#: src/gtk-helper.c:737 msgid "Perceptual" msgstr "Wahrnehmungsabh?ngig" +#: src/gtk-helper.c:738 msgid "Relative colormetric" msgstr "Relativ farbmetrisch" +#: src/gtk-helper.c:739 src/rs-actions.c:347 msgid "Saturation" msgstr "S?ttigung" +#: src/gtk-helper.c:740 msgid "Absolute colormetric" msgstr "Absolut farbmetrisch" -msgid "Background renderer active" -msgstr "Verarbeitung im Hintergrund aktiv" - +#: src/gtk-interface.c:182 msgid "Opening photo ..." msgstr "?ffne Bild ..." +#: src/gtk-interface.c:197 msgid "Couldn't open photo" msgstr "Konnte Bild nicht ?ffnen" +#: src/gtk-interface.c:202 msgid "Image opened" msgstr "Bild ge?ffnet" +#: src/gtk-interface.c:203 src/gtk-interface.c:830 src/gtk-interface.c:953 +#: src/gtk-interface.c:995 msgid "Rawstudio" msgstr "Rawstudio" +#: src/gtk-interface.c:273 #, c-format msgid "Changed photo priority (*)" msgstr "Priorit?t des Bildes ge?ndert (*)" +#: src/gtk-interface.c:275 #, c-format msgid "Changed photo priority (D)" msgstr "Priorit?t des Bildes ge?ndert (D)" +#: src/gtk-interface.c:277 #, c-format msgid "Changed photo priority (%d)" msgstr "Priorit?t des Bildes ge?ndert (%d)" +#: src/gtk-interface.c:492 +msgid "Directory:" +msgstr "Verzeichnis:" + +#: src/gtk-interface.c:494 src/rs-batch.c:980 +msgid "Choose output directory" +msgstr "W?hle Ausgabeverzeichnis" + +#: src/gtk-interface.c:510 src/rs-batch.c:991 +msgid "Filename template:" +msgstr "Vorgabe f?r Dateiname:" + +#: src/gtk-interface.c:523 +msgid "Filename example:" +msgstr "Beispiel f?r Dateiname:" + +#: src/gtk-interface.c:534 +msgid "File type:" +msgstr "Dateityp:" + +#: src/gtk-interface.c:595 msgid "Preferences" msgstr "Einstellungen" +#: src/gtk-interface.c:610 msgid "Preview background color:" msgstr "Hintergrundfarbe:" +#: src/gtk-interface.c:625 msgid "Histogram height:" msgstr "H?he des Histogramms:" +#: src/gtk-interface.c:635 msgid "Show filenames in iconview" msgstr "Anzeige der Dateinamen in der Vorschau" +#: src/gtk-interface.c:640 msgid "Use system theme" msgstr "Verwende Standard Bildschirmdarstellung" +#: src/gtk-interface.c:647 msgid "Place cache in home directory" msgstr "Speichere tempor?re Daten im Benutzerverzeichnis" +#: src/gtk-interface.c:650 msgid "Load 8 bit photos (jpeg, png, etc)" msgstr "Lade 8-Bit Bilder (JPEG, PNG etc.)" -msgid "Preload photos" -msgstr "Bilder vorausladen" - -msgid "Directory:" -msgstr "Verzeichnis:" - -msgid "Filename:" -msgstr "Dateiname:" - -msgid "File type:" -msgstr "Dateityp:" - -#. set default -msgid "Filename example:" -msgstr "Beispiel f?r Dateiname:" - -msgid "Save uncompressed TIFF" -msgstr "Speichere umkomprimiertes TIFF" - +#: src/gtk-interface.c:718 msgid "General" msgstr "Allgemein" #. gtk_notebook_append_page(GTK_NOTEBOOK(notebook), batch_page, gtk_label_new(_("Batch"))); +#: src/gtk-interface.c:720 msgid "Quick export" msgstr "Schnellausgabe" +#: src/gtk-interface.c:721 msgid "Colors" msgstr "Farben" +#: src/gtk-interface.c:955 src/gtk-interface.c:1178 +#, fuzzy +msgid "Opening directory..." +msgstr "?ffne Verzeichnis" + +#: src/gtk-interface.c:965 src/gtk-interface.c:1123 src/gtk-interface.c:1193 +msgid "Ready" +msgstr "Fertig" + +#: src/gtk-interface.c:1050 msgid "Open recursive" msgstr "?ffne rekursiv" +#: src/gtk-interface.c:1059 msgid "Tools" msgstr "Werkzeuge" +#: src/gtk-interface.c:1060 msgid "Batch" msgstr "Stapelverarbeitung" +#: src/gtk-interface.c:1061 msgid "Open" msgstr "?ffnen" -msgid "Ready" -msgstr "Fertig" - +#: src/gtk-progress.c:63 src/gtk-progress.c:99 src/gtk-progress.c:122 msgid "Progress" msgstr "Fortschritt" -msgid "JPEG Quality:" -msgstr "JPEG Qualit?t" +#. FIXME: Calculate some sensible size - maybe even remember user resizes +#: src/rs-save-dialog.c:93 src/rs-toolbox.c:371 +msgid "Export File" +msgstr "Datei eportieren" +#: src/rs-save-dialog.c:244 +#, fuzzy, c-format +msgid "Exporting to %s" +msgstr "Exportiere Datei ..." + +#: src/rs-save-dialog.c:360 msgid "Keep aspect" msgstr "Verh?ltnis beibehalten" +#: src/rs-save-dialog.c:378 msgid "Width:" msgstr "Breite:" +#: src/rs-save-dialog.c:380 msgid "Height:" msgstr "H?he:" +#: src/rs-save-dialog.c:382 msgid "Percent:" msgstr "prozent:" -msgid "Export File" -msgstr "Datei eportieren" - -msgid "Exporting file ..." -msgstr "Exportiere Datei ..." - -msgid "File exported" -msgstr "Datei gesprichert" - -msgid "File export canceled" -msgstr "Datei Export abgebrochen" - -msgid "JPEG (Joint Photographic Experts Group)" -msgstr "JPEG (Joint Photographic Experts Group)" - -msgid "PNG (Portable Network Graphics)" -msgstr "PNG (Portable Network Graphics)" - -msgid "8-bit TIFF (Tagged Image File Format)" -msgstr "8-bit TIFF (Tagged Image File Format)" - -msgid "16-bit TIFF (Tagged Image File Format)" -msgstr "16-bit TIFF (Tagged Image File Format)" - +#: src/rs-batch.c:206 src/rs-actions.c:737 msgid "A" msgstr "A" +#: src/rs-batch.c:209 src/rs-actions.c:738 msgid "B" msgstr "B" +#: src/rs-batch.c:212 src/rs-actions.c:739 msgid "C" msgstr "C" +#: src/rs-batch.c:437 msgid "Processing photos" msgstr "Verarbeite Bilder" +#: src/rs-batch.c:441 msgid "Cancel" msgstr "Abbruch" +#: src/rs-batch.c:446 msgid "Last image:" msgstr "Letztes Bild:" +#: src/rs-batch.c:479 #, c-format msgid "Time left: %dh %dm %ds" msgstr "Verbleibende Zeit: %dh %dm %ds" +#: src/rs-batch.c:483 msgid "Time left: ..." msgstr "Verbleibende Zeit: ..." +#: src/rs-batch.c:495 #, c-format msgid "Loading %s ..." msgstr "Lade %s ..." +#: src/rs-batch.c:536 #, c-format msgid "Saving %s ..." msgstr "Speichere %s ..." +#: src/rs-batch.c:634 msgid "Icon" msgstr "Symbol" +#: src/rs-batch.c:641 msgid "Filename" msgstr "Dateiname" +#: src/rs-batch.c:648 msgid "Setting" msgstr "Einstellung" +#: src/rs-batch.c:738 msgid "Start" msgstr "Beginn" +#: src/rs-batch.c:741 msgid "Remove" msgstr "Entfernen" +#: src/rs-batch.c:744 msgid "Remove all" msgstr "Alle entfernen" +#: src/rs-batch.c:869 msgid "Photo size" msgstr "Bildgr?sse" +#: src/rs-batch.c:877 msgid "Constant scale" msgstr "Fixe Gr?sse" +#: src/rs-batch.c:878 msgid "Constant width" msgstr "Fixe Breite" +#: src/rs-batch.c:879 msgid "Constant height" msgstr "Fixe H?he" +#: src/rs-batch.c:880 msgid "Maximum size" msgstr "Maximale Gr?sse" +#: src/rs-batch.c:892 msgid "Photo width:" msgstr "Bildbreite:" +#: src/rs-batch.c:894 src/rs-batch.c:903 msgid "pixels" msgstr "Bildpunkte" +#: src/rs-batch.c:901 msgid "Photo height:" msgstr "Bildh?he:" +#: src/rs-batch.c:910 msgid "Photo scale:" msgstr "Skalierungsfaktor:" +#: src/rs-batch.c:912 msgid "%" msgstr "%" +#: src/rs-batch.c:948 #, c-format msgid "" "Constant width:\n" @@ -303,6 +376,7 @@ "Fixe Breite:\n" "%d" +#: src/rs-batch.c:951 #, c-format msgid "" "Constant height:\n" @@ -311,6 +385,7 @@ "Fixe H?he:\n" "%d" +#: src/rs-batch.c:954 #, c-format msgid "" "Constant Scale:\n" @@ -319,6 +394,7 @@ "Fixer Faktor:\n" "%d" +#: src/rs-batch.c:958 #, c-format msgid "" "Maximum size:\n" @@ -327,66 +403,75 @@ "Maximale Gr?sse:\n" "%d x %d" -msgid "Choose output directory" -msgstr "W?hle Ausgabeverzeichnis" - +#: src/rs-batch.c:987 msgid "Output directory:" msgstr "Ausgabeverzeichnis:" -msgid "Filename template:" -msgstr "Vorgabe f?r Dateiname:" - +#: src/rs-batch.c:1012 msgid "Change" msgstr "?ndern" +#: src/rs-batch.c:1017 msgid "Export dimensions" msgstr "Bildgr?sse exportieren" #. All +#: src/rs-store.c:275 src/rs-store.c:834 #, c-format msgid "* (%d)" msgstr "* (%d)" +#: src/rs-store.c:276 msgid "All photos (excluding deleted)" msgstr "Alle Bilder (ohne gel?schte)" #. 1 +#: src/rs-store.c:279 src/rs-store.c:835 #, c-format msgid "1 (%d)" msgstr "1 (%d)" +#: src/rs-store.c:280 msgid "Priority 1 photos" msgstr "Bilder der Priorit?t 1" #. 2 +#: src/rs-store.c:283 src/rs-store.c:836 #, c-format msgid "2 (%d)" msgstr "2 (%d)" +#: src/rs-store.c:284 msgid "Priority 2 photos" msgstr "Bilder der Priorit?t 2" #. 3 +#: src/rs-store.c:287 src/rs-store.c:837 #, c-format msgid "3 (%d)" msgstr "3 (%d)" +#: src/rs-store.c:288 msgid "Priority 3 photos" msgstr "Bilder der Priorit?t 3" #. Unsorted +#: src/rs-store.c:291 src/rs-store.c:838 #, c-format msgid "U (%d)" msgstr "U (%d)" +#: src/rs-store.c:292 msgid "Unprioritized photos" msgstr "Bilder ohne Priorit?t" #. Deleted +#: src/rs-store.c:295 src/rs-store.c:839 #, c-format msgid "D (%d)" msgstr "D (%d)" +#: src/rs-store.c:296 msgid "Deleted photos" msgstr "Gel?schte Bilder" @@ -395,9 +480,11 @@ #. understanding of our interface. I was thinking about adding a button instead #. that said "ROCK ON!" to instantly play "AC/DC - Highway to Hell", but I #. believe this will be better for the end user +#: src/rs-store.c:331 msgid "Priorities" msgstr "Priorit?ten" +#: src/rs-store.c:527 #, c-format msgid "" "%s\n" @@ -406,224 +493,325 @@ "%s\n" "\n" +#: src/rs-store.c:530 #, c-format msgid "Focal length: %dmm\n" msgstr "Brennweite: %dmm\n" +#: src/rs-store.c:533 #, c-format msgid "Shutter speed: %.1fs\n" msgstr "Verschlusszeit: %.1fs\n" +#: src/rs-store.c:535 #, c-format msgid "Shutter speed: 1/%.0fs\n" msgstr "Verschlusszeit: 1/%.0fs\n" +#: src/rs-store.c:538 #, c-format msgid "Aperture: F/%.01f\n" msgstr "Blende: F/%.01f\n" +#: src/rs-store.c:541 #, c-format msgid "ISO: %u\n" msgstr "ISO: %u\n" +#: src/rs-store.c:544 #, c-format msgid "Time: %s" msgstr "Uhrzeit: %s" +#: src/rs-preview-widget.c:505 +msgid "Display Navigation" +msgstr "" + +#: src/rs-preview-widget.c:756 +msgid "Light out mode not available" +msgstr "" + +#: src/rs-preview-widget.c:757 +msgid "" +"Your setup doesn't seem to support RGBA visuals and/or compositing. Consult " +"your operating system manual for enabling RGBA visuals and compositing." +msgstr "" + +#: src/rs-preview-widget.c:987 msgid "Size" msgstr "Gr?sse" +#: src/rs-preview-widget.c:995 msgid "-" msgstr "-" +#: src/rs-preview-widget.c:1001 msgid "Grid" msgstr "Gitter" +#: src/rs-preview-widget.c:1006 msgid "None" msgstr "Keines" +#: src/rs-preview-widget.c:1007 msgid "Golden sections" msgstr "Goldener Schnitt" +#: src/rs-preview-widget.c:1008 msgid "Rule of thirds" msgstr "Drittelsregel" +#: src/rs-preview-widget.c:1009 msgid "Golden triangles #1" msgstr "Goldene Dreiecke #1" +#: src/rs-preview-widget.c:1010 msgid "Golden triangles #2" msgstr "Goldene Dreiecke #2" +#: src/rs-preview-widget.c:1011 msgid "Harmonious triangles #1" msgstr "Harmonische Dreiecke #1" +#: src/rs-preview-widget.c:1012 msgid "Harmonious triangles #2" msgstr "Harmonische Dreiecke #2" +#: src/rs-preview-widget.c:1021 msgid "Aspect" msgstr "Verh?ltnis" +#: src/rs-preview-widget.c:1026 msgid "Freeform" msgstr "Freie Auswahl" +#: src/rs-preview-widget.c:1027 msgid "ISO paper (A4)" msgstr "DIN/ISO (A4)" +#: src/rs-preview-widget.c:1028 msgid "3:2 (35mm)" msgstr "3:2 (35mm)" +#: src/rs-preview-widget.c:1029 msgid "4:3" msgstr "4:3" +#: src/rs-preview-widget.c:1030 msgid "10:8 (SXGA)" msgstr "10:8 (SXGA)" +#: src/rs-preview-widget.c:1031 msgid "16:10 (Wide XGA)" msgstr "16:10 (Wide XGA)" +#: src/rs-preview-widget.c:1032 msgid "8:3 (Dualhead XGA)" msgstr "8:3 (Dualhead XGA)" +#: src/rs-preview-widget.c:1033 msgid "1:1" msgstr "1:1" +#: src/rs-preview-widget.c:1034 msgid "Golden rectangle" msgstr "Goldenes Rechteck" +#: src/rs-preview-widget.c:1042 src/rs-preview-widget.c:1053 msgid "Crop" msgstr "Beschneiden" +#: src/rs-preview-widget.c:1044 msgid "Don't crop" msgstr "Beschneidung aufheben" -msgid "Flip the photo over the x-axis" -msgstr "Spiegeln des Bildes ?ber die X-Achse" +#. Snapshot labels +#: src/rs-toolbox.c:157 src/rs-actions.c:972 +msgid " A " +msgstr " A " -msgid "Mirror the photo over the y-axis" -msgstr "Spiegeln des Bildes ?ber die Y-Achse" +#: src/rs-toolbox.c:158 src/rs-actions.c:973 +msgid " B " +msgstr " B " -msgid "Rotate the photo 90 degrees clockwise" -msgstr "Rotieren des Bildes um 90 Grad im Uhrzeigersinn" +#: src/rs-toolbox.c:159 src/rs-actions.c:974 +msgid " C " +msgstr " C " -msgid "Rotate the photo 180 degrees" -msgstr "Rotieren des Bildes um 180 Grad" +#. FIXME: Get height from gconf +#: src/rs-toolbox.c:184 +msgid "Histogram" +msgstr "Histogramm" -msgid "Rotate the photo 90 degrees counter clockwise" -msgstr "Rotieren des Bildes um 90 Grad gegen den Uhrzeigersinn" +#: src/rs-toolbox.c:297 +#, fuzzy +msgid "Reset" +msgstr "Belichtungskurve zur?cksetzen" -msgid "Transforms" -msgstr "Anpassungen" - -msgid "Reset this setting" -msgstr "Einstellungen zur?cksetzen" - +#: src/rs-toolbox.c:415 src/rs-toolbox.c:540 msgid "Open curve ..." msgstr "?ffne Belichtungskurve ..." +#: src/rs-toolbox.c:546 msgid "Save curve as ..." msgstr "Speichere Belichtungskurve unter ..." +#: src/rs-toolbox.c:552 msgid "Reset curve" msgstr "Belichtungskurve zur?cksetzen" +#: src/rs-toolbox.c:557 msgid "Auto adjust curve ends" msgstr "Automatische Anpassungen der Kurvenenden" -msgid " A " -msgstr " A " +#. Pack everything nice +#: src/rs-toolbox.c:637 +#, fuzzy +msgid "Basic" +msgstr "Stapelverarbeitung" -msgid " B " -msgstr " B " +#: src/rs-toolbox.c:638 +msgid "Channel Mixer" +msgstr "" -msgid " C " -msgstr " C " +#: src/rs-toolbox.c:639 src/rs-actions.c:353 +msgid "Curve" +msgstr "Kurve" -#. Build GUI -msgid "Exposure" -msgstr "Belichtung" +#: src/rs-toolbox.c:683 +msgid "Flip the photo over the x-axis" +msgstr "Spiegeln des Bildes ?ber die X-Achse" -msgid "Hue" -msgstr "Farbton" +#: src/rs-toolbox.c:684 +msgid "Mirror the photo over the y-axis" +msgstr "Spiegeln des Bildes ?ber die Y-Achse" -msgid "Contrast" -msgstr "Kontrast" +#: src/rs-toolbox.c:685 +msgid "Rotate the photo 90 degrees clockwise" +msgstr "Rotieren des Bildes um 90 Grad im Uhrzeigersinn" -#. Box it! -msgid "Warmth/tint" -msgstr "Farbtemperatur/Farbton" +#: src/rs-toolbox.c:686 +msgid "Rotate the photo 90 degrees counter clockwise" +msgstr "Rotieren des Bildes um 90 Grad gegen den Uhrzeigersinn" -msgid "Sharpen" -msgstr "Sch?rfen" +#: src/rs-toolbox.c:698 +msgid "Transforms" +msgstr "Anpassungen" -msgid "Curve" -msgstr "Kurve" - -msgid "Histogram" -msgstr "Histogramm" - +#: src/rs-actions.c:141 msgid "Open directory" msgstr "?ffne Verzeichnis" +#: src/rs-actions.c:198 +msgid "File exported" +msgstr "Datei gesprichert" + +#: src/rs-actions.c:203 src/rs-actions.c:222 +#, fuzzy +msgid "Export failed" +msgstr "Datei eportieren" + +#: src/rs-actions.c:232 msgid "Error exporting" msgstr "Fehler beim Exportieren" +#: src/rs-actions.c:233 msgid "Error exporting photo to gimp." msgstr "Fehler beim Exportieren zu GIMP" +#: src/rs-actions.c:256 src/rs-actions.c:274 msgid "Deleting photos" msgstr "L?sche Bilder" +#: src/rs-actions.c:257 msgid "Your files will be permanently deleted!" msgstr "Die Dateien werden unwiderruflich gel?scht!" +#: src/rs-actions.c:259 msgid "Delete photos" msgstr "Bilder l?schen" +#: src/rs-actions.c:333 msgid "Copied settings" msgstr "Einstellungen kopiert" +#. Build GUI +#: src/rs-actions.c:346 +msgid "Exposure" +msgstr "Belichtung" + +#: src/rs-actions.c:348 +msgid "Hue" +msgstr "Farbton" + +#: src/rs-actions.c:349 +msgid "Contrast" +msgstr "Kontrast" + +#: src/rs-actions.c:350 msgid "White balance" msgstr "Weissabgleich" +#: src/rs-actions.c:351 +msgid "Sharpen" +msgstr "Sch?rfen" + +#: src/rs-actions.c:352 +msgid "Channel mixer" +msgstr "" + +#: src/rs-actions.c:385 msgid "Select settings to paste" msgstr "Auswahl der einzuf?genden Einstellungen" +#: src/rs-actions.c:443 msgid "Pasted settings" msgstr "Einstellungen eingef?gt" +#: src/rs-actions.c:446 msgid "Nothing to paste" msgstr "Nichts einzuf?gen" +#: src/rs-actions.c:449 msgid "Buffer empty" msgstr "Puffer ist leer" +#: src/rs-actions.c:492 msgid "Adjusting to auto white balance" msgstr "Automatischer Weissabgleich durchgef?hrt" +#: src/rs-actions.c:502 msgid "No white balance to set from" msgstr "Kein Daten f?r Weissabgleich vorhanden" +#: src/rs-actions.c:505 msgid "Adjusting to camera white balance" msgstr "Verwendung des Kamera Weissabgleichs" +#: src/rs-actions.c:683 msgid "Showing exposure mask" msgstr "Anzeige der Belichtungswarnung" +#: src/rs-actions.c:685 msgid "Hiding exposure mask" msgstr "Keine Anzeige der Belichtungswarnung" +#: src/rs-actions.c:715 #, c-format msgid " %s added to batch queue" msgstr " %s zur Stapelverarbeitung hinzugef?gt" +#: src/rs-actions.c:717 #, c-format msgid "%s already added to batch queue" msgstr "%s wurde bereits zur Stapelverarbeitung hinzugef?gt" +#: src/rs-actions.c:724 src/rs-actions.c:796 #, c-format msgid "%d photos added to batch queue" msgstr "%d Bilder zur Stapelverarbeitung hinzugef?gt" +#: src/rs-actions.c:761 msgid "" "Select which settings to\n" "add to batch queue" @@ -631,306 +819,481 @@ "Welche Einstellungen zur\n" "Stapelverarbeitung hinzugen" +#: src/rs-actions.c:814 msgid "Removed from batch queue" msgstr "Von der Stapelverarbeitung gel?scht" +#: src/rs-actions.c:816 msgid "Not in batch queue" msgstr "Nicht in der Stapelverarbeitung vorhanden" +#: src/rs-actions.c:850 msgid "A raw image converter for GTK+/GNOME" msgstr "Ein RAW Konverter f?r GTK+/GNOME" +#: src/rs-actions.c:881 msgid "_File" msgstr "_Datei" +#: src/rs-actions.c:882 msgid "_Edit" msgstr "_Editieren" +#: src/rs-actions.c:883 msgid "_Photo" msgstr "_Bild" +#: src/rs-actions.c:884 msgid "_Set Priority" msgstr "_Setze Priorit?t" +#: src/rs-actions.c:885 msgid "_White Balance" msgstr "_Weissabgleich" +#: src/rs-actions.c:886 msgid "_View" msgstr "_Ansicht" +#: src/rs-actions.c:887 msgid "_Sort by" msgstr "_Sortieren nach" +#: src/rs-actions.c:888 msgid "_Batch" msgstr "_Stapelverarbeitung" +#: src/rs-actions.c:889 msgid "_Help" msgstr "_Hilfe" #. File menu +#: src/rs-actions.c:894 msgid "_Open Directory" msgstr "_Verzeichnis ?ffnen" +#: src/rs-actions.c:895 msgid "_Quick Export" msgstr "_Schnellexport" +#: src/rs-actions.c:896 msgid "_Export As" msgstr "_Datei eportieren als" +#: src/rs-actions.c:897 msgid "_Export to Gimp" msgstr "_Exportieren zu GIMP" +#: src/rs-actions.c:898 msgid "_Reload directory" msgstr "_Verzeichnis neu laden" +#: src/rs-actions.c:899 msgid "_Delete flagged photos" msgstr "_Markierte Bilder l?schen" +#: src/rs-actions.c:900 msgid "_Quit" msgstr "_Beenden" #. Edit menu +#: src/rs-actions.c:903 msgid "_Revert settings" msgstr "_Einstellungen r?ckg?ngig machen" +#: src/rs-actions.c:904 msgid "_Copy settings" msgstr "_Einstellungen kopieren" +#: src/rs-actions.c:905 msgid "_Paste settings" msgstr "_Einstellungen einf?gen" +#: src/rs-actions.c:906 msgid "_Reset settings" msgstr "_Einstellungen zur?cksetzen" +#: src/rs-actions.c:907 msgid "_Preferences" msgstr "_Voreinstellungen" #. Photo menu +#: src/rs-actions.c:910 msgid "_Flag photo for deletion" msgstr "_Bild zum l?schen markieren" +#: src/rs-actions.c:911 msgid "_1" msgstr "_1" +#: src/rs-actions.c:912 msgid "_2" msgstr "_2" +#: src/rs-actions.c:913 msgid "_3" msgstr "_3" +#: src/rs-actions.c:914 msgid "_Remove priority" msgstr "_L?sche Priorit?t" +#: src/rs-actions.c:915 msgid "_Auto" msgstr "_Automatisch" +#: src/rs-actions.c:916 msgid "_Camera" msgstr "_Kamera" +#: src/rs-actions.c:917 msgid "_Crop" msgstr "_Beschneiden" +#: src/rs-actions.c:918 msgid "_Uncrop" msgstr "_Beschneidung aufheben" +#: src/rs-actions.c:919 msgid "_Straighten" msgstr "_Begradigen" +#: src/rs-actions.c:920 msgid "_Unstraighten" msgstr "_Begradigung aufheben" +#: src/rs-actions.c:921 msgid "_Group" msgstr "_Gruppieren" +#: src/rs-actions.c:922 msgid "_Ungroup" msgstr "_Gruppierung aufheben" +#: src/rs-actions.c:923 msgid "_Auto group" msgstr "_Automatisch gruppieren" +#: src/rs-actions.c:924 +#, fuzzy +msgid "_Tag Photo..." +msgstr "_Bild" + +#: src/rs-actions.c:925 +msgid "Rotate Clockwise" +msgstr "" + +#: src/rs-actions.c:926 +#, fuzzy +msgid "Rotate Counter Clockwise" +msgstr "Rotieren des Bildes um 90 Grad im Uhrzeigersinn" + +#: src/rs-actions.c:927 +msgid "Flip" +msgstr "" + +#: src/rs-actions.c:928 +msgid "Mirror" +msgstr "" + #. View menu +#: src/rs-actions.c:931 msgid "_Previous photo" msgstr "_Vorhergehendes Bild" +#: src/rs-actions.c:932 msgid "_Next Photo" msgstr "_N?chstes Bild" -msgid "_Zoom to fit" -msgstr "_Auf Bildschirmgr?sse zoomen" - -msgid "_Zoom to 100%" -msgstr "_Auf 100% zoomen" - #. Batch menu +#: src/rs-actions.c:935 msgid "_Add to batch queue" msgstr "_Zur Stapelverarbeitung hinzugef?gen" +#: src/rs-actions.c:936 msgid "_Add current view to queue" msgstr "_Aktuelle Ansicht zur Stapelverarbeitung hinzuf?gen" +#: src/rs-actions.c:937 msgid "_Remove from batch queue" msgstr "_Von der Stapelverarbeitung entfernen" +#: src/rs-actions.c:938 msgid "_Start" msgstr "_Beginn" #. help menu +#: src/rs-actions.c:941 msgid "_About" msgstr "_?ber Rawstudio" +#: src/rs-actions.c:949 +msgid "_Zoom to fit" +msgstr "_Auf Bildschirmgr?sse zoomen" + +#: src/rs-actions.c:950 msgid "_Iconbox" msgstr "_Bildleiste" +#: src/rs-actions.c:951 msgid "_Toolbox" msgstr "_Werkzeuge" +#: src/rs-actions.c:952 msgid "_Fullscreen" msgstr "_Vollbildansicht" +#: src/rs-actions.c:953 msgid "_Exposure mask" msgstr "_Belichtungsmaske" +#: src/rs-actions.c:954 msgid "_Split" msgstr "_Teilen" +#: src/rs-actions.c:956 +msgid "_Lights out" +msgstr "" + +#: src/rs-actions.c:962 msgid "Name" msgstr "Name" +#: src/rs-actions.c:963 msgid "Timestamp" msgstr "Zeitstempel" +#: src/rs-actions.c:964 msgid "ISO" msgstr "ISO%d" +#: src/rs-actions.c:965 msgid "Aperture" msgstr "Blende" +#: src/rs-actions.c:966 msgid "Focallength" msgstr "Brennweite" +#: src/rs-actions.c:967 msgid "Shutterspeed" msgstr "Verschlusszeit" +#~ msgid "Background renderer active" +#~ msgstr "Verarbeitung im Hintergrund aktiv" + +#~ msgid "Preload photos" +#~ msgstr "Bilder vorausladen" + +#~ msgid "Filename:" +#~ msgstr "Dateiname:" + +#~ msgid "Save uncompressed TIFF" +#~ msgstr "Speichere umkomprimiertes TIFF" + +#~ msgid "JPEG Quality:" +#~ msgstr "JPEG Qualit?t" + +#~ msgid "File export canceled" +#~ msgstr "Datei Export abgebrochen" + +#~ msgid "JPEG (Joint Photographic Experts Group)" +#~ msgstr "JPEG (Joint Photographic Experts Group)" + +#~ msgid "PNG (Portable Network Graphics)" +#~ msgstr "PNG (Portable Network Graphics)" + +#~ msgid "8-bit TIFF (Tagged Image File Format)" +#~ msgstr "8-bit TIFF (Tagged Image File Format)" + +#~ msgid "16-bit TIFF (Tagged Image File Format)" +#~ msgstr "16-bit TIFF (Tagged Image File Format)" + +#~ msgid "Rotate the photo 180 degrees" +#~ msgstr "Rotieren des Bildes um 180 Grad" + +#~ msgid "Reset this setting" +#~ msgstr "Einstellungen zur?cksetzen" + +#~ msgid "Warmth/tint" +#~ msgstr "Farbtemperatur/Farbton" + +#~ msgid "_Zoom to 100%" +#~ msgstr "_Auf 100% zoomen" + #~ msgid "%dmm " #~ msgstr "%dmm " + #~ msgid "%.1fs " #~ msgstr "%.1fs " + #~ msgid "1/%.0fs " #~ msgstr "1/%.0fs " + #~ msgid "F/%.1f " #~ msgstr "F/%.1f " + #~ msgid "No metadata" #~ msgstr "Keine Metadaten vorhanden" + #~ msgid "Canon CR2" #~ msgstr "Canon CR2" + #~ msgid "Canon CIFF" #~ msgstr "Canon CIFF" + #~ msgid "Nikon NEF" #~ msgstr "Nikon NEF" + #~ msgid "Minolta raw" #~ msgstr "Minolta raw" + #~ msgid "Canon TIFF" #~ msgstr "Canon TIFF" + #~ msgid "Sony" #~ msgstr "Sony" + #~ msgid "Kodak" #~ msgstr "Kodak" + #~ msgid "Sigma" #~ msgstr "Sigma" + #~ msgid "Panasonic raw" #~ msgstr "Panasonic raw" + #~ msgid "Pentax raw" #~ msgstr "Pentax raw" + #~ msgid "Adobe Digital negative" #~ msgstr "Adobe Digital negative" + #~ msgid "Mamiya" #~ msgstr "Mamiya" + #~ msgid "Hasselblad" #~ msgstr "Hasselblad" -#, fuzzy -#~ msgid "Opening directory..." -#~ msgstr "?ffne Verzeichnis" #~ msgid "Added view to batch queue" #~ msgstr "Ansicht zur Stapelverarbeitung hinzugef?gt" + #~ msgid "/File/_Open directory..." #~ msgstr "/Datei/_Verzeichnis ?ffnen..." + #~ msgid "/File/_Quick export" #~ msgstr "/Datei/_Schnellausgabe" + #~ msgid "/File/_Export as..." #~ msgstr "/Datei/_Speichern als..." + #~ msgid "/File/_Reload" #~ msgstr "/Datei/_Erneut laden" + #~ msgid "/_Edit/_Copy settings" #~ msgstr "/_Editieren/_Einstellungen kopieren" + #~ msgid "/_Edit/_Paste settings" #~ msgstr "/_Editieren/_Einstellungen einf?gen" + #~ msgid "/_Edit/_Reset current settings" #~ msgstr "/_Editieren/_Auf Standardwerte zur?cksetzen" + #~ msgid "/_Edit/sep1" #~ msgstr "/_Editieren/sep1" + #~ msgid "/_Edit/_Preferences" #~ msgstr "/_Editieren/_Einstellungen" + #~ msgid "/_Photo/_Set priority/_2" #~ msgstr "/_Bild/_Setze Priorit?t/_2" + #~ msgid "/_Photo/_Set priority/_3" #~ msgstr "/_Bild/_Setze Priorit?t/_3" + #~ msgid "/_Photo/_Set priority/_Remove priority" #~ msgstr "/_Bild/_Setze Priorit?t/_Priorit?t entfernen" + #~ msgid "/_Photo/_White balance/_Auto" #~ msgstr "/_Bild/_Weissabgleich/_Automatisch" + #~ msgid "/_Photo/_White balance/_Camera" #~ msgstr "/_Bild/_Weissabgleich/_Kamera" + #~ msgid "/_Photo/_Uncrop" #~ msgstr "/_Bild/_Beschneidung aufheben" + #~ msgid "/_Photo/_Straighten" #~ msgstr "/_Bild/_Begradigen" + #~ msgid "/_Photo/_Unstraighten" #~ msgstr "/_Bild/_Begradigung aufheben" + #~ msgid "/_Photo/_Group photos" #~ msgstr "/_Bild/_Bilder gruppieren" + #~ msgid "/_Photo/_Ungroup photos" #~ msgstr "/_Bild/_Gruppierung aufheben" + #~ msgid "/_View/sep1" #~ msgstr "/_Ansicht/sep1" + #~ msgid "/_View/_Zoom in" #~ msgstr "/_Ansicht/_Vergr?ssern" + #~ msgid "/_View/_Zoom out" #~ msgstr "/_Ansicht/_Verkleinern" + #~ msgid "/_View/_Zoom to fit" #~ msgstr "/_Ansicht/_Gr?sse anpassen" + #~ msgid "/_View/_Zoom to 100%" #~ msgstr "/_Ansicht/_100% Ansicht" + #~ msgid "/_View/sep2" #~ msgstr "/_Ansicht/_sep2" + #~ msgid "/_View/_Icon Box" #~ msgstr "/_Ansicht/_Bilderleiste" + #~ msgid "/_View/_Tool Box" #~ msgstr "/_Ansicht/_Werkzeugleiste" + #~ msgid "/_View/sep3" #~ msgstr "/_Ansicht/_sep3" + #~ msgid "/_View/_Show exposure mask" #~ msgstr "/_Ansicht/_Anzeige der ?ber- und Unterbelichtung" + #~ msgid "/_Batch/_Add to batch queue" #~ msgstr "/_Stapelverarbeitung/_Bild hinzuf?gen" + #~ msgid "/_Batch/_Remove from batch queue" #~ msgstr "/_Stapelverarbeitung/_Eintrag l?schen" + #~ msgid "/_Batch/_Start" #~ msgstr "/_Stapelverarbeitung/_Beginnen" + #~ msgid "Exp. mask" #~ msgstr "Bel. Warnung" + #~ msgid "Toggle exposure mask" #~ msgstr "Belichtungswarnung umschalten" + #~ msgid "Set zoom" #~ msgstr "Vergr?sserung einstellen" + #~ msgid "Zoom out" #~ msgstr "Vergr?ssern" + #~ msgid "Zoom in" #~ msgstr "Verkleinern" + #~ msgid "Zoom:" #~ msgstr "Vergr?ssern:" + #~ msgid "Apply" #~ msgstr "Anwenden" + #~ msgid "Split continuous" #~ msgstr "Aufteilen" - Modified: trunk/po/en.po =================================================================== --- trunk/po/en.po 2009-09-27 21:47:00 UTC (rev 2670) +++ trunk/po/en.po 2009-09-27 22:10:12 UTC (rev 2671) @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: Rawstudio 1.1.1\n" "Report-Msgid-Bugs-To: rawstudio-dev at rawstudio.org\n" -"POT-Creation-Date: 2009-01-11 04:26+0100\n" +"POT-Creation-Date: 2009-09-28 00:09+0200\n" "PO-Revision-Date: 2008-04-17 21:42+0100\n" "Last-Translator: Anders Kvist \n" "Language-Team: Rawstudio development \n" @@ -16,30 +16,47 @@ "Content-Transfer-Encoding: 8bit\n" "X-Poedit-Language: English\n" +#: src/filename.c:280 #, c-format msgid "%f - Original filename" msgstr "%f - Original filename" +#: src/filename.c:281 #, c-format msgid "%2c - Incremental counter" msgstr "%2c - Incremental counter" +#: src/filename.c:282 #, c-format msgid "%s - Setting id (A, B or C)" msgstr "%s - Setting id (A, B or C)" +#: src/filename.c:283 +#, c-format +msgid "%d - Date from EXIF (YYYY-MM-DD)" +msgstr "" + +#: src/filename.c:284 +msgid "%t - Time from EXIF (HH:MM:SS)" +msgstr "" + +#: src/gtk-helper.c:420 msgid "Select color profile" msgstr "Select color profile" +#: src/gtk-helper.c:450 msgid "All files" msgstr "All files" +#: src/gtk-helper.c:451 msgid "Color profiles (icc and icm)" msgstr "Color profiles (icc and icm)" +#: src/gtk-helper.c:465 msgid "Not a valid color profile." msgstr "Not a valid color profile." +#: src/gtk-helper.c:466 msgid "" "The file you selected does not appear to be a valid color profile for this " "version of Rawstudio." @@ -47,254 +64,305 @@ "The file you selected does not appear to be a valid color profile for this " "version of Rawstudio." +#: src/gtk-helper.c:568 msgid "Enable color management (experimental)" msgstr "Enable color management (experimental)" +#: src/gtk-helper.c:576 msgid "Input profile" msgstr "Input profile" +#: src/gtk-helper.c:579 msgid "BuiltInRGBProfile" msgstr "BuiltInRGBProfile" +#: src/gtk-helper.c:629 msgid "Display profile" msgstr "Display profile" +#: src/gtk-helper.c:632 src/gtk-helper.c:685 msgid "sRGB" msgstr "sRGB" +#: src/gtk-helper.c:682 msgid "Export profile" msgstr "Export profile" +#: src/gtk-helper.c:734 msgid "Intent" msgstr "Intent" +#: src/gtk-helper.c:737 msgid "Perceptual" msgstr "Perceptual" +#: src/gtk-helper.c:738 msgid "Relative colormetric" msgstr "Relative colormetric" +#: src/gtk-helper.c:739 src/rs-actions.c:347 msgid "Saturation" msgstr "Saturation" +#: src/gtk-helper.c:740 msgid "Absolute colormetric" msgstr "Absolute colormetric" -msgid "Background renderer active" -msgstr "Background renderer active" - +#: src/gtk-interface.c:182 msgid "Opening photo ..." msgstr "Opening photo ..." +#: src/gtk-interface.c:197 msgid "Couldn't open photo" msgstr "Couldn't open photo" +#: src/gtk-interface.c:202 msgid "Image opened" msgstr "Image opened" +#: src/gtk-interface.c:203 src/gtk-interface.c:830 src/gtk-interface.c:953 +#: src/gtk-interface.c:995 msgid "Rawstudio" msgstr "Rawstudio" +#: src/gtk-interface.c:273 #, c-format msgid "Changed photo priority (*)" msgstr "Changed photo priority (*)" +#: src/gtk-interface.c:275 #, c-format msgid "Changed photo priority (D)" msgstr "Changed photo priority (D)" +#: src/gtk-interface.c:277 #, c-format msgid "Changed photo priority (%d)" msgstr "Changed photo priority (%d)" +#: src/gtk-interface.c:492 +msgid "Directory:" +msgstr "Directory:" + +#: src/gtk-interface.c:494 src/rs-batch.c:980 +msgid "Choose output directory" +msgstr "Choose output directory" + +#: src/gtk-interface.c:510 src/rs-batch.c:991 +msgid "Filename template:" +msgstr "Filename template:" + +#: src/gtk-interface.c:523 +msgid "Filename example:" +msgstr "Filename example:" + +#: src/gtk-interface.c:534 +msgid "File type:" +msgstr "File type:" + +#: src/gtk-interface.c:595 msgid "Preferences" msgstr "Preferences" +#: src/gtk-interface.c:610 msgid "Preview background color:" msgstr "Preview background color:" +#: src/gtk-interface.c:625 msgid "Histogram height:" msgstr "Histogram height:" +#: src/gtk-interface.c:635 msgid "Show filenames in iconview" msgstr "Show filenames in iconview" +#: src/gtk-interface.c:640 msgid "Use system theme" msgstr "Use system theme" +#: src/gtk-interface.c:647 msgid "Place cache in home directory" msgstr "Place cache in home directory" +#: src/gtk-interface.c:650 msgid "Load 8 bit photos (jpeg, png, etc)" msgstr "Load 8 bit photos (jpeg, png, etc)" -msgid "Preload photos" -msgstr "Preload photos" - -msgid "Directory:" -msgstr "Directory:" - -msgid "Filename:" -msgstr "Filename:" - -msgid "File type:" -msgstr "File type:" - -#. set default -msgid "Filename example:" -msgstr "Filename example:" - -msgid "Save uncompressed TIFF" -msgstr "Save uncompressed TIFF" - +#: src/gtk-interface.c:718 msgid "General" msgstr "General" #. gtk_notebook_append_page(GTK_NOTEBOOK(notebook), batch_page, gtk_label_new(_("Batch"))); +#: src/gtk-interface.c:720 msgid "Quick export" msgstr "Quick export" +#: src/gtk-interface.c:721 msgid "Colors" msgstr "Colors" +#: src/gtk-interface.c:955 src/gtk-interface.c:1178 +msgid "Opening directory..." +msgstr "Opening directory..." + +#: src/gtk-interface.c:965 src/gtk-interface.c:1123 src/gtk-interface.c:1193 +msgid "Ready" +msgstr "Ready" + +#: src/gtk-interface.c:1050 msgid "Open recursive" msgstr "Open recursive" +#: src/gtk-interface.c:1059 msgid "Tools" msgstr "Tools" +#: src/gtk-interface.c:1060 msgid "Batch" msgstr "Batch" +#: src/gtk-interface.c:1061 msgid "Open" msgstr "Open" -msgid "Ready" -msgstr "Ready" - +#: src/gtk-progress.c:63 src/gtk-progress.c:99 src/gtk-progress.c:122 msgid "Progress" msgstr "Progress" -msgid "JPEG Quality:" -msgstr "JPEG Quality:" +#. FIXME: Calculate some sensible size - maybe even remember user resizes +#: src/rs-save-dialog.c:93 src/rs-toolbox.c:371 +msgid "Export File" +msgstr "Export File" +#: src/rs-save-dialog.c:244 +#, fuzzy, c-format +msgid "Exporting to %s" +msgstr "Exporting file ..." + +#: src/rs-save-dialog.c:360 msgid "Keep aspect" msgstr "Keep aspect" +#: src/rs-save-dialog.c:378 msgid "Width:" msgstr "Width:" +#: src/rs-save-dialog.c:380 msgid "Height:" msgstr "Height:" +#: src/rs-save-dialog.c:382 msgid "Percent:" msgstr "Percent:" -msgid "Export File" -msgstr "Export File" - -msgid "Exporting file ..." -msgstr "Exporting file ..." - -msgid "File exported" -msgstr "File exported" - -msgid "File export canceled" -msgstr "File export canceled" - -msgid "JPEG (Joint Photographic Experts Group)" -msgstr "JPEG (Joint Photographic Experts Group)" - -msgid "PNG (Portable Network Graphics)" -msgstr "PNG (Portable Network Graphics)" - -msgid "8-bit TIFF (Tagged Image File Format)" -msgstr "8-bit TIFF (Tagged Image File Format)" - -msgid "16-bit TIFF (Tagged Image File Format)" -msgstr "16-bit TIFF (Tagged Image File Format)" - +#: src/rs-batch.c:206 src/rs-actions.c:737 msgid "A" msgstr "A" +#: src/rs-batch.c:209 src/rs-actions.c:738 msgid "B" msgstr "B" +#: src/rs-batch.c:212 src/rs-actions.c:739 msgid "C" msgstr "C" +#: src/rs-batch.c:437 msgid "Processing photos" msgstr "Processing photos" +#: src/rs-batch.c:441 msgid "Cancel" msgstr "Cancel" +#: src/rs-batch.c:446 msgid "Last image:" msgstr "Last image:" +#: src/rs-batch.c:479 #, c-format msgid "Time left: %dh %dm %ds" msgstr "Time left: %dh %dm %ds" +#: src/rs-batch.c:483 msgid "Time left: ..." msgstr "Time left: ..." +#: src/rs-batch.c:495 #, c-format msgid "Loading %s ..." msgstr "Loading %s ..." +#: src/rs-batch.c:536 #, c-format msgid "Saving %s ..." msgstr "Saving %s ..." +#: src/rs-batch.c:634 msgid "Icon" msgstr "Icon" +#: src/rs-batch.c:641 msgid "Filename" msgstr "Filename" +#: src/rs-batch.c:648 msgid "Setting" msgstr "Setting" +#: src/rs-batch.c:738 msgid "Start" msgstr "Start" +#: src/rs-batch.c:741 msgid "Remove" msgstr "Remove" +#: src/rs-batch.c:744 msgid "Remove all" msgstr "Remove all" +#: src/rs-batch.c:869 msgid "Photo size" msgstr "Photo size" +#: src/rs-batch.c:877 msgid "Constant scale" msgstr "Constant scale" +#: src/rs-batch.c:878 msgid "Constant width" msgstr "Constant width" +#: src/rs-batch.c:879 msgid "Constant height" msgstr "Constant height" +#: src/rs-batch.c:880 msgid "Maximum size" msgstr "Maximum size" +#: src/rs-batch.c:892 msgid "Photo width:" msgstr "Photo width:" +#: src/rs-batch.c:894 src/rs-batch.c:903 msgid "pixels" msgstr "pixels" +#: src/rs-batch.c:901 msgid "Photo height:" msgstr "Photo height:" +#: src/rs-batch.c:910 msgid "Photo scale:" msgstr "Photo scale:" +#: src/rs-batch.c:912 msgid "%" msgstr "%" +#: src/rs-batch.c:948 #, c-format msgid "" "Constant width:\n" @@ -303,6 +371,7 @@ "Constant width:\n" "%d" +#: src/rs-batch.c:951 #, c-format msgid "" "Constant height:\n" @@ -311,6 +380,7 @@ "Constant height:\n" "%d" +#: src/rs-batch.c:954 #, c-format msgid "" "Constant Scale:\n" @@ -319,6 +389,7 @@ "Constant Scale:\n" "%d" +#: src/rs-batch.c:958 #, c-format msgid "" "Maximum size:\n" @@ -327,66 +398,75 @@ "Maximum size:\n" "%d x %d" -msgid "Choose output directory" -msgstr "Choose output directory" - +#: src/rs-batch.c:987 msgid "Output directory:" msgstr "Output directory:" -msgid "Filename template:" -msgstr "Filename template:" - +#: src/rs-batch.c:1012 msgid "Change" msgstr "Change" +#: src/rs-batch.c:1017 msgid "Export dimensions" msgstr "Export dimensions" #. All +#: src/rs-store.c:275 src/rs-store.c:834 #, c-format msgid "* (%d)" msgstr "* (%d)" +#: src/rs-store.c:276 msgid "All photos (excluding deleted)" msgstr "All photos (excluding deleted)" #. 1 +#: src/rs-store.c:279 src/rs-store.c:835 #, c-format msgid "1 (%d)" msgstr "1 (%d)" +#: src/rs-store.c:280 msgid "Priority 1 photos" msgstr "Priority 1 photos" #. 2 +#: src/rs-store.c:283 src/rs-store.c:836 #, c-format msgid "2 (%d)" msgstr "2 (%d)" +#: src/rs-store.c:284 msgid "Priority 2 photos" msgstr "Priority 2 photos" #. 3 +#: src/rs-store.c:287 src/rs-store.c:837 #, c-format msgid "3 (%d)" msgstr "3 (%d)" +#: src/rs-store.c:288 msgid "Priority 3 photos" msgstr "Priority 3 photos" #. Unsorted +#: src/rs-store.c:291 src/rs-store.c:838 #, c-format msgid "U (%d)" msgstr "U (%d)" +#: src/rs-store.c:292 msgid "Unprioritized photos" msgstr "Unprioritized photos" #. Deleted +#: src/rs-store.c:295 src/rs-store.c:839 #, c-format msgid "D (%d)" msgstr "D (%d)" +#: src/rs-store.c:296 msgid "Deleted photos" msgstr "Deleted photos" @@ -395,233 +475,336 @@ #. understanding of our interface. I was thinking about adding a button instead #. that said "ROCK ON!" to instantly play "AC/DC - Highway to Hell", but I #. believe this will be better for the end user +#: src/rs-store.c:331 msgid "Priorities" msgstr "Priorities" +#: src/rs-store.c:527 #, c-format msgid "" "%s\n" "\n" msgstr "" +#: src/rs-store.c:530 #, c-format msgid "Focal length: %dmm\n" msgstr "" +#: src/rs-store.c:533 #, c-format msgid "Shutter speed: %.1fs\n" msgstr "" +#: src/rs-store.c:535 #, c-format msgid "Shutter speed: 1/%.0fs\n" msgstr "" +#: src/rs-store.c:538 #, c-format msgid "Aperture: F/%.01f\n" msgstr "" +#: src/rs-store.c:541 #, c-format msgid "ISO: %u\n" msgstr "" +#: src/rs-store.c:544 #, c-format msgid "Time: %s" msgstr "" +#: src/rs-preview-widget.c:505 +msgid "Display Navigation" +msgstr "" + +#: src/rs-preview-widget.c:756 +msgid "Light out mode not available" +msgstr "" + +#: src/rs-preview-widget.c:757 +msgid "" +"Your setup doesn't seem to support RGBA visuals and/or compositing. Consult " +"your operating system manual for enabling RGBA visuals and compositing." +msgstr "" + +#: src/rs-preview-widget.c:987 msgid "Size" msgstr "Size" +#: src/rs-preview-widget.c:995 msgid "-" msgstr "-" +#: src/rs-preview-widget.c:1001 msgid "Grid" msgstr "Grid" +#: src/rs-preview-widget.c:1006 msgid "None" msgstr "None" +#: src/rs-preview-widget.c:1007 msgid "Golden sections" msgstr "Golden sections" +#: src/rs-preview-widget.c:1008 msgid "Rule of thirds" msgstr "Rule of thirds" +#: src/rs-preview-widget.c:1009 msgid "Golden triangles #1" msgstr "Golden triangles #1" +#: src/rs-preview-widget.c:1010 msgid "Golden triangles #2" msgstr "Golden triangles #2" +#: src/rs-preview-widget.c:1011 msgid "Harmonious triangles #1" msgstr "Harmonious triangles #1" +#: src/rs-preview-widget.c:1012 msgid "Harmonious triangles #2" msgstr "Harmonious triangles #2" +#: src/rs-preview-widget.c:1021 msgid "Aspect" msgstr "Aspect" +#: src/rs-preview-widget.c:1026 msgid "Freeform" msgstr "Freeform" +#: src/rs-preview-widget.c:1027 msgid "ISO paper (A4)" msgstr "ISO paper (A4)" +#: src/rs-preview-widget.c:1028 msgid "3:2 (35mm)" msgstr "3:2 (35mm)" +#: src/rs-preview-widget.c:1029 msgid "4:3" msgstr "4:3" +#: src/rs-preview-widget.c:1030 msgid "10:8 (SXGA)" msgstr "10:8 (SXGA)" +#: src/rs-preview-widget.c:1031 msgid "16:10 (Wide XGA)" msgstr "16:10 (Wide XGA)" +#: src/rs-preview-widget.c:1032 msgid "8:3 (Dualhead XGA)" msgstr "8:3 (Dualhead XGA)" +#: src/rs-preview-widget.c:1033 msgid "1:1" msgstr "1:1" +#: src/rs-preview-widget.c:1034 msgid "Golden rectangle" msgstr "Golden rectangle" +#: src/rs-preview-widget.c:1042 src/rs-preview-widget.c:1053 msgid "Crop" msgstr "Crop" +#: src/rs-preview-widget.c:1044 msgid "Don't crop" msgstr "Don't crop" -msgid "Flip the photo over the x-axis" -msgstr "Flip the photo over the x-axis" +#. Snapshot labels +#: src/rs-toolbox.c:157 src/rs-actions.c:972 +msgid " A " +msgstr " A " -msgid "Mirror the photo over the y-axis" -msgstr "Mirror the photo over the y-axis" +#: src/rs-toolbox.c:158 src/rs-actions.c:973 +msgid " B " +msgstr " B " -msgid "Rotate the photo 90 degrees clockwise" -msgstr "Rotate the photo 90 degrees clockwise" +#: src/rs-toolbox.c:159 src/rs-actions.c:974 +msgid " C " +msgstr " C " -msgid "Rotate the photo 180 degrees" -msgstr "Rotate the photo 180 degrees" +#. FIXME: Get height from gconf +#: src/rs-toolbox.c:184 +msgid "Histogram" +msgstr "Histogram" -msgid "Rotate the photo 90 degrees counter clockwise" -msgstr "Rotate the photo 90 degrees counter clockwise" +#: src/rs-toolbox.c:297 +#, fuzzy +msgid "Reset" +msgstr "Reset curve" -msgid "Transforms" -msgstr "Transforms" - -msgid "Reset this setting" -msgstr "Reset this setting" - +#: src/rs-toolbox.c:415 src/rs-toolbox.c:540 msgid "Open curve ..." msgstr "Open curve ..." +#: src/rs-toolbox.c:546 msgid "Save curve as ..." msgstr "Save curve as ..." +#: src/rs-toolbox.c:552 msgid "Reset curve" msgstr "Reset curve" +#: src/rs-toolbox.c:557 msgid "Auto adjust curve ends" msgstr "Auto adjust curve ends" -msgid " A " -msgstr " A " +#. Pack everything nice +#: src/rs-toolbox.c:637 +#, fuzzy +msgid "Basic" +msgstr "Batch" -msgid " B " -msgstr " B " +#: src/rs-toolbox.c:638 +msgid "Channel Mixer" +msgstr "" -msgid " C " -msgstr " C " +#: src/rs-toolbox.c:639 src/rs-actions.c:353 +msgid "Curve" +msgstr "Curve" -#. Build GUI -msgid "Exposure" -msgstr "Exposure" +#: src/rs-toolbox.c:683 +msgid "Flip the photo over the x-axis" +msgstr "Flip the photo over the x-axis" -msgid "Hue" -msgstr "Hue" +#: src/rs-toolbox.c:684 +msgid "Mirror the photo over the y-axis" +msgstr "Mirror the photo over the y-axis" -msgid "Contrast" -msgstr "Contrast" +#: src/rs-toolbox.c:685 +msgid "Rotate the photo 90 degrees clockwise" +msgstr "Rotate the photo 90 degrees clockwise" -#. Box it! -msgid "Warmth/tint" -msgstr "Warmth/tint" +#: src/rs-toolbox.c:686 +msgid "Rotate the photo 90 degrees counter clockwise" +msgstr "Rotate the photo 90 degrees counter clockwise" -msgid "Sharpen" -msgstr "Sharpen" +#: src/rs-toolbox.c:698 +msgid "Transforms" +msgstr "Transforms" -msgid "Curve" -msgstr "Curve" - -msgid "Histogram" -msgstr "Histogram" - +#: src/rs-actions.c:141 msgid "Open directory" msgstr "Open directory" +#: src/rs-actions.c:198 +msgid "File exported" +msgstr "File exported" + +#: src/rs-actions.c:203 src/rs-actions.c:222 +#, fuzzy +msgid "Export failed" +msgstr "Export File" + +#: src/rs-actions.c:232 msgid "Error exporting" msgstr "Error exporting" +#: src/rs-actions.c:233 msgid "Error exporting photo to gimp." msgstr "Error exporting photo to gimp." +#: src/rs-actions.c:256 src/rs-actions.c:274 msgid "Deleting photos" msgstr "Deleting photos" +#: src/rs-actions.c:257 msgid "Your files will be permanently deleted!" msgstr "Your files will be permanently deleted!" +#: src/rs-actions.c:259 msgid "Delete photos" msgstr "Delete photos" +#: src/rs-actions.c:333 msgid "Copied settings" msgstr "Copied settings" +#. Build GUI +#: src/rs-actions.c:346 +msgid "Exposure" +msgstr "Exposure" + +#: src/rs-actions.c:348 +msgid "Hue" +msgstr "Hue" + +#: src/rs-actions.c:349 +msgid "Contrast" +msgstr "Contrast" + +#: src/rs-actions.c:350 msgid "White balance" msgstr "White balance" +#: src/rs-actions.c:351 +msgid "Sharpen" +msgstr "Sharpen" + +#: src/rs-actions.c:352 +msgid "Channel mixer" +msgstr "" + +#: src/rs-actions.c:385 msgid "Select settings to paste" msgstr "Select settings to paste" +#: src/rs-actions.c:443 msgid "Pasted settings" msgstr "Pasted settings" +#: src/rs-actions.c:446 msgid "Nothing to paste" msgstr "Nothing to paste" +#: src/rs-actions.c:449 msgid "Buffer empty" msgstr "Buffer empty" +#: src/rs-actions.c:492 msgid "Adjusting to auto white balance" msgstr "Adjusting to auto white balance" +#: src/rs-actions.c:502 msgid "No white balance to set from" msgstr "No white balance to set from" +#: src/rs-actions.c:505 msgid "Adjusting to camera white balance" msgstr "Adjusting to camera white balance" +#: src/rs-actions.c:683 msgid "Showing exposure mask" msgstr "Showing exposure mask" +#: src/rs-actions.c:685 msgid "Hiding exposure mask" msgstr "Hiding exposure mask" +#: src/rs-actions.c:715 #, c-format msgid " %s added to batch queue" msgstr " %s added to batch queue" +#: src/rs-actions.c:717 #, c-format msgid "%s already added to batch queue" msgstr "%s already added to batch queue" +#: src/rs-actions.c:724 src/rs-actions.c:796 #, c-format msgid "%d photos added to batch queue" msgstr "%d photos added to batch queue" +#: src/rs-actions.c:761 msgid "" "Select which settings to\n" "add to batch queue" @@ -629,188 +812,310 @@ "Select which settings to\n" "add to batch queue" +#: src/rs-actions.c:814 msgid "Removed from batch queue" msgstr "Removed from batch queue" +#: src/rs-actions.c:816 msgid "Not in batch queue" msgstr "Not in batch queue" +#: src/rs-actions.c:850 msgid "A raw image converter for GTK+/GNOME" msgstr "A raw image converter for GTK+/GNOME" +#: src/rs-actions.c:881 msgid "_File" msgstr "_File" +#: src/rs-actions.c:882 msgid "_Edit" msgstr "_Edit" +#: src/rs-actions.c:883 msgid "_Photo" msgstr "_Photo" +#: src/rs-actions.c:884 msgid "_Set Priority" msgstr "_Set Priority" +#: src/rs-actions.c:885 msgid "_White Balance" msgstr "_White Balance" +#: src/rs-actions.c:886 msgid "_View" msgstr "_View" +#: src/rs-actions.c:887 msgid "_Sort by" msgstr "" +#: src/rs-actions.c:888 msgid "_Batch" msgstr "_Batch" +#: src/rs-actions.c:889 msgid "_Help" msgstr "_Help" #. File menu +#: src/rs-actions.c:894 msgid "_Open Directory" msgstr "_Open Directory" +#: src/rs-actions.c:895 msgid "_Quick Export" msgstr "_Quick Export" +#: src/rs-actions.c:896 msgid "_Export As" msgstr "_Export As" +#: src/rs-actions.c:897 msgid "_Export to Gimp" msgstr "_Export to Gimp" +#: src/rs-actions.c:898 msgid "_Reload directory" msgstr "_Reload directory" +#: src/rs-actions.c:899 msgid "_Delete flagged photos" msgstr "_Delete flagged photos" +#: src/rs-actions.c:900 msgid "_Quit" msgstr "_Quit" #. Edit menu +#: src/rs-actions.c:903 msgid "_Revert settings" msgstr "_Revert settings" +#: src/rs-actions.c:904 msgid "_Copy settings" msgstr "_Copy settings" +#: src/rs-actions.c:905 msgid "_Paste settings" msgstr "_Paste settings" +#: src/rs-actions.c:906 msgid "_Reset settings" msgstr "_Reset settings" +#: src/rs-actions.c:907 msgid "_Preferences" msgstr "_Preferences" #. Photo menu +#: src/rs-actions.c:910 msgid "_Flag photo for deletion" msgstr "_Flag photo for deletion" +#: src/rs-actions.c:911 msgid "_1" msgstr "_1" +#: src/rs-actions.c:912 msgid "_2" msgstr "_2" +#: src/rs-actions.c:913 msgid "_3" msgstr "_3" +#: src/rs-actions.c:914 msgid "_Remove priority" msgstr "_Remove priority" +#: src/rs-actions.c:915 msgid "_Auto" msgstr "_Auto" +#: src/rs-actions.c:916 msgid "_Camera" msgstr "_Camera" +#: src/rs-actions.c:917 msgid "_Crop" msgstr "_Crop" +#: src/rs-actions.c:918 msgid "_Uncrop" msgstr "_Uncrop" +#: src/rs-actions.c:919 msgid "_Straighten" msgstr "_Straighten" +#: src/rs-actions.c:920 msgid "_Unstraighten" msgstr "_Unstraighten" +#: src/rs-actions.c:921 msgid "_Group" msgstr "_Group" +#: src/rs-actions.c:922 msgid "_Ungroup" msgstr "_Ungroup" +#: src/rs-actions.c:923 #, fuzzy msgid "_Auto group" msgstr "_Ungroup" +#: src/rs-actions.c:924 +#, fuzzy +msgid "_Tag Photo..." +msgstr "_Photo" + +#: src/rs-actions.c:925 +msgid "Rotate Clockwise" +msgstr "" + +#: src/rs-actions.c:926 +#, fuzzy +msgid "Rotate Counter Clockwise" +msgstr "Rotate the photo 90 degrees clockwise" + +#: src/rs-actions.c:927 +msgid "Flip" +msgstr "" + +#: src/rs-actions.c:928 +msgid "Mirror" +msgstr "" + #. View menu +#: src/rs-actions.c:931 msgid "_Previous photo" msgstr "_Previous photo" +#: src/rs-actions.c:932 msgid "_Next Photo" msgstr "_Next Photo" -msgid "_Zoom to fit" -msgstr "_Zoom to fit" - -msgid "_Zoom to 100%" -msgstr "_Zoom to 100%" - #. Batch menu +#: src/rs-actions.c:935 msgid "_Add to batch queue" msgstr "_Add to batch queue" +#: src/rs-actions.c:936 msgid "_Add current view to queue" msgstr "_Add current view to queue" +#: src/rs-actions.c:937 msgid "_Remove from batch queue" msgstr "_Remove from batch queue" +#: src/rs-actions.c:938 msgid "_Start" msgstr "_Start" #. help menu +#: src/rs-actions.c:941 msgid "_About" msgstr "_About" +#: src/rs-actions.c:949 +msgid "_Zoom to fit" +msgstr "_Zoom to fit" + +#: src/rs-actions.c:950 msgid "_Iconbox" msgstr "_Iconbox" +#: src/rs-actions.c:951 msgid "_Toolbox" msgstr "_Toolbox" +#: src/rs-actions.c:952 msgid "_Fullscreen" msgstr "_Fullscreen" +#: src/rs-actions.c:953 msgid "_Exposure mask" msgstr "_Exposure mask" +#: src/rs-actions.c:954 msgid "_Split" msgstr "_Split" +#: src/rs-actions.c:956 +msgid "_Lights out" +msgstr "" + +#: src/rs-actions.c:962 msgid "Name" msgstr "" +#: src/rs-actions.c:963 msgid "Timestamp" msgstr "" +#: src/rs-actions.c:964 #, fuzzy msgid "ISO" msgstr "ISO%d" +#: src/rs-actions.c:965 msgid "Aperture" msgstr "" +#: src/rs-actions.c:966 msgid "Focallength" msgstr "" +#: src/rs-actions.c:967 msgid "Shutterspeed" msgstr "" +#~ msgid "Background renderer active" +#~ msgstr "Background renderer active" + +#~ msgid "Preload photos" +#~ msgstr "Preload photos" + +#~ msgid "Filename:" +#~ msgstr "Filename:" + +#~ msgid "Save uncompressed TIFF" +#~ msgstr "Save uncompressed TIFF" + +#~ msgid "JPEG Quality:" +#~ msgstr "JPEG Quality:" + +#~ msgid "File export canceled" +#~ msgstr "File export canceled" + +#~ msgid "JPEG (Joint Photographic Experts Group)" +#~ msgstr "JPEG (Joint Photographic Experts Group)" + +#~ msgid "PNG (Portable Network Graphics)" +#~ msgstr "PNG (Portable Network Graphics)" + +#~ msgid "8-bit TIFF (Tagged Image File Format)" +#~ msgstr "8-bit TIFF (Tagged Image File Format)" + +#~ msgid "16-bit TIFF (Tagged Image File Format)" +#~ msgstr "16-bit TIFF (Tagged Image File Format)" + +#~ msgid "Rotate the photo 180 degrees" +#~ msgstr "Rotate the photo 180 degrees" + +#~ msgid "Reset this setting" +#~ msgstr "Reset this setting" + +#~ msgid "Warmth/tint" +#~ msgstr "Warmth/tint" + +#~ msgid "_Zoom to 100%" +#~ msgstr "_Zoom to 100%" + #~ msgid "%dmm " #~ msgstr "%dmm " @@ -864,6 +1169,3 @@ #~ msgid "Hasselblad" #~ msgstr "Hasselblad" - -#~ msgid "Opening directory..." -#~ msgstr "Opening directory..." Modified: trunk/po/es.po =================================================================== --- trunk/po/es.po 2009-09-27 21:47:00 UTC (rev 2670) +++ trunk/po/es.po 2009-09-27 22:10:12 UTC (rev 2671) @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: Rawstudio 1.1.1\n" "Report-Msgid-Bugs-To: rawstudio-dev at rawstudio.org\n" -"POT-Creation-Date: 2009-01-11 04:26+0100\n" +"POT-Creation-Date: 2009-09-28 00:09+0200\n" "PO-Revision-Date: 2008-05-02 00:47+0100\n" "Last-Translator: Patrik Jarl \n" "Language-Team: Rawstudio development \n" @@ -19,30 +19,47 @@ "X-Poedit-Language: Spanish\n" "X-Poedit-Country: SPAIN\n" +#: src/filename.c:280 #, c-format msgid "%f - Original filename" msgstr "%f - Nombre de archivo original" +#: src/filename.c:281 #, c-format msgid "%2c - Incremental counter" msgstr "%2c - Contador incremental" +#: src/filename.c:282 #, c-format msgid "%s - Setting id (A, B or C)" msgstr "%s - Ajuste id (A, B o C)" +#: src/filename.c:283 +#, c-format +msgid "%d - Date from EXIF (YYYY-MM-DD)" +msgstr "" + +#: src/filename.c:284 +msgid "%t - Time from EXIF (HH:MM:SS)" +msgstr "" + +#: src/gtk-helper.c:420 msgid "Select color profile" msgstr "Seleccionar perfil de color" +#: src/gtk-helper.c:450 msgid "All files" msgstr "Todos los archivos" +#: src/gtk-helper.c:451 msgid "Color profiles (icc and icm)" msgstr "Perfiles de color (icc e icm)" +#: src/gtk-helper.c:465 msgid "Not a valid color profile." msgstr "No es un perfil de color v?lido." +#: src/gtk-helper.c:466 msgid "" "The file you selected does not appear to be a valid color profile for this " "version of Rawstudio." @@ -50,254 +67,305 @@ "El archivo que ha seleccionado parece que no es un perfil de color v?lido " "para esta versi?n de Rawstudio." +#: src/gtk-helper.c:568 msgid "Enable color management (experimental)" msgstr "Activar administraci?n de color (experimental)" +#: src/gtk-helper.c:576 msgid "Input profile" msgstr "Perfil de entrada" +#: src/gtk-helper.c:579 msgid "BuiltInRGBProfile" msgstr "PerfilRGBIncrustado" +#: src/gtk-helper.c:629 msgid "Display profile" msgstr "Perfil de visualizaci?n" +#: src/gtk-helper.c:632 src/gtk-helper.c:685 msgid "sRGB" msgstr "sRGB" +#: src/gtk-helper.c:682 msgid "Export profile" msgstr "Perfil de exportaci?n" +#: src/gtk-helper.c:734 msgid "Intent" msgstr "Prop?sito" +#: src/gtk-helper.c:737 msgid "Perceptual" msgstr "Perceptual" +#: src/gtk-helper.c:738 msgid "Relative colormetric" msgstr "Colorim?trico relativo" +#: src/gtk-helper.c:739 src/rs-actions.c:347 msgid "Saturation" msgstr "Saturaci?n" +#: src/gtk-helper.c:740 msgid "Absolute colormetric" msgstr "Colorim?trico absoluto" -msgid "Background renderer active" -msgstr "Renderizador en segundo plano activo" - +#: src/gtk-interface.c:182 msgid "Opening photo ..." msgstr "Abriendo foto..." +#: src/gtk-interface.c:197 msgid "Couldn't open photo" msgstr "No se pudo abrir la foto" +#: src/gtk-interface.c:202 msgid "Image opened" msgstr "Imagen abierta" +#: src/gtk-interface.c:203 src/gtk-interface.c:830 src/gtk-interface.c:953 +#: src/gtk-interface.c:995 msgid "Rawstudio" msgstr "Rawstudio" +#: src/gtk-interface.c:273 #, c-format msgid "Changed photo priority (*)" msgstr "Prioridad de foto cambiada (*)" +#: src/gtk-interface.c:275 #, c-format msgid "Changed photo priority (D)" msgstr "Prioridad de foto cambiada (D)" +#: src/gtk-interface.c:277 #, c-format msgid "Changed photo priority (%d)" msgstr "Prioridad de foto cambiada (%d)" +#: src/gtk-interface.c:492 +msgid "Directory:" +msgstr "Directorio:" + +#: src/gtk-interface.c:494 src/rs-batch.c:980 +msgid "Choose output directory" +msgstr "Seleccionar directorio de salida" + +#: src/gtk-interface.c:510 src/rs-batch.c:991 +msgid "Filename template:" +msgstr "Plantilla de nombres de archivo:" + +#: src/gtk-interface.c:523 +msgid "Filename example:" +msgstr "Ejemplo de nombre de archivo:" + +#: src/gtk-interface.c:534 +msgid "File type:" +msgstr "Tipo de archivo:" + +#: src/gtk-interface.c:595 msgid "Preferences" msgstr "Configuraci?n" +#: src/gtk-interface.c:610 msgid "Preview background color:" msgstr "Color de fondo de previsualizaci?n:" +#: src/gtk-interface.c:625 msgid "Histogram height:" msgstr "Altura del histograma:" +#: src/gtk-interface.c:635 msgid "Show filenames in iconview" msgstr "Mostrar nombres de archivo en la vista de iconos" +#: src/gtk-interface.c:640 msgid "Use system theme" msgstr "Usar tema del sistema" +#: src/gtk-interface.c:647 msgid "Place cache in home directory" msgstr "Situar cach? en el directorio personal" +#: src/gtk-interface.c:650 msgid "Load 8 bit photos (jpeg, png, etc)" msgstr "Cargar fotos de 8 bits (jpeg, png, etc.)" -msgid "Preload photos" -msgstr "Precargar fotos" - -msgid "Directory:" -msgstr "Directorio:" - -msgid "Filename:" -msgstr "Nombre de archivo:" - -msgid "File type:" -msgstr "Tipo de archivo:" - -#. set default -msgid "Filename example:" -msgstr "Ejemplo de nombre de archivo:" - -msgid "Save uncompressed TIFF" -msgstr "Guardar TIFF sin compresi?n" - +#: src/gtk-interface.c:718 msgid "General" msgstr "General" #. gtk_notebook_append_page(GTK_NOTEBOOK(notebook), batch_page, gtk_label_new(_("Batch"))); +#: src/gtk-interface.c:720 msgid "Quick export" msgstr "Exportaci?n r?pida" +#: src/gtk-interface.c:721 msgid "Colors" msgstr "Colores" +#: src/gtk-interface.c:955 src/gtk-interface.c:1178 +msgid "Opening directory..." +msgstr "Abriendo directorio..." + +#: src/gtk-interface.c:965 src/gtk-interface.c:1123 src/gtk-interface.c:1193 +msgid "Ready" +msgstr "Listo" + +#: src/gtk-interface.c:1050 msgid "Open recursive" msgstr "Apertura recursiva" +#: src/gtk-interface.c:1059 msgid "Tools" msgstr "Herramientas" +#: src/gtk-interface.c:1060 msgid "Batch" msgstr "Lotes" +#: src/gtk-interface.c:1061 msgid "Open" msgstr "Abrir" -msgid "Ready" -msgstr "Listo" - +#: src/gtk-progress.c:63 src/gtk-progress.c:99 src/gtk-progress.c:122 msgid "Progress" msgstr "Progreso" -msgid "JPEG Quality:" -msgstr "Calidad JPEG:" +#. FIXME: Calculate some sensible size - maybe even remember user resizes +#: src/rs-save-dialog.c:93 src/rs-toolbox.c:371 +msgid "Export File" +msgstr "Exportar archivo" +#: src/rs-save-dialog.c:244 +#, fuzzy, c-format +msgid "Exporting to %s" +msgstr "Exportando archivo..." + +#: src/rs-save-dialog.c:360 msgid "Keep aspect" msgstr "Mantener orientaci?n" +#: src/rs-save-dialog.c:378 msgid "Width:" msgstr "Anchura:" +#: src/rs-save-dialog.c:380 msgid "Height:" msgstr "Altura:" +#: src/rs-save-dialog.c:382 msgid "Percent:" msgstr "Porcentaje:" -msgid "Export File" -msgstr "Exportar archivo" - -msgid "Exporting file ..." -msgstr "Exportando archivo..." - -msgid "File exported" -msgstr "Archivo exportado" - -msgid "File export canceled" -msgstr "Cancelada la exportaci?n de archivo" - -msgid "JPEG (Joint Photographic Experts Group)" -msgstr "JPEG (Joint Photographic Experts Group)" - -msgid "PNG (Portable Network Graphics)" -msgstr "PNG (Portable Network Graphics)" - -msgid "8-bit TIFF (Tagged Image File Format)" -msgstr "8-bit TIFF (Tagged Image File Format)" - -msgid "16-bit TIFF (Tagged Image File Format)" -msgstr "16-bit TIFF (Tagged Image File Format)" - +#: src/rs-batch.c:206 src/rs-actions.c:737 msgid "A" msgstr "A" +#: src/rs-batch.c:209 src/rs-actions.c:738 msgid "B" msgstr "B" +#: src/rs-batch.c:212 src/rs-actions.c:739 msgid "C" msgstr "C" +#: src/rs-batch.c:437 msgid "Processing photos" msgstr "Procesando fotos" +#: src/rs-batch.c:441 msgid "Cancel" msgstr "Cancelar" +#: src/rs-batch.c:446 msgid "Last image:" msgstr "?ltima imagen:" +#: src/rs-batch.c:479 #, c-format msgid "Time left: %dh %dm %ds" msgstr "Tiempo restante: %dh %dm %ds" +#: src/rs-batch.c:483 msgid "Time left: ..." msgstr "Tiempo restante: ..." +#: src/rs-batch.c:495 #, c-format msgid "Loading %s ..." msgstr "Cargando %s..." +#: src/rs-batch.c:536 #, c-format msgid "Saving %s ..." msgstr "Guardando %s..." +#: src/rs-batch.c:634 msgid "Icon" msgstr "Icono" +#: src/rs-batch.c:641 msgid "Filename" msgstr "Nombre de archivo" +#: src/rs-batch.c:648 msgid "Setting" msgstr "Ajuste" +#: src/rs-batch.c:738 msgid "Start" msgstr "Inicio" +#: src/rs-batch.c:741 msgid "Remove" msgstr "Eliminar" +#: src/rs-batch.c:744 msgid "Remove all" msgstr "Eliminar todo" +#: src/rs-batch.c:869 msgid "Photo size" msgstr "Tama?o de foto" +#: src/rs-batch.c:877 msgid "Constant scale" msgstr "Escala constante" +#: src/rs-batch.c:878 msgid "Constant width" msgstr "Anchura constante" +#: src/rs-batch.c:879 msgid "Constant height" msgstr "Altura constante" +#: src/rs-batch.c:880 msgid "Maximum size" msgstr "Tama?o m?ximo" +#: src/rs-batch.c:892 msgid "Photo width:" msgstr "Anchura de foto:" +#: src/rs-batch.c:894 src/rs-batch.c:903 msgid "pixels" msgstr "p?xeles" +#: src/rs-batch.c:901 msgid "Photo height:" msgstr "Altura de foto:" +#: src/rs-batch.c:910 msgid "Photo scale:" msgstr "Escala de foto:" +#: src/rs-batch.c:912 msgid "%" msgstr "%" +#: src/rs-batch.c:948 #, c-format msgid "" "Constant width:\n" @@ -306,6 +374,7 @@ "Anchura constante:\n" "%d" +#: src/rs-batch.c:951 #, c-format msgid "" "Constant height:\n" @@ -314,6 +383,7 @@ "Altura constante:\n" "%d" +#: src/rs-batch.c:954 #, c-format msgid "" "Constant Scale:\n" @@ -322,6 +392,7 @@ "Escala constante:\n" "%d" +#: src/rs-batch.c:958 #, c-format msgid "" "Maximum size:\n" @@ -330,66 +401,75 @@ "Tama?o m?ximo:\n" "%d x %d" -msgid "Choose output directory" -msgstr "Seleccionar directorio de salida" - +#: src/rs-batch.c:987 msgid "Output directory:" msgstr "Directorio de salida:" -msgid "Filename template:" -msgstr "Plantilla de nombres de archivo:" - +#: src/rs-batch.c:1012 msgid "Change" msgstr "Cambiar" +#: src/rs-batch.c:1017 msgid "Export dimensions" msgstr "Exportar dimensiones" #. All +#: src/rs-store.c:275 src/rs-store.c:834 #, c-format msgid "* (%d)" msgstr "* (%d)" +#: src/rs-store.c:276 msgid "All photos (excluding deleted)" msgstr "Todas las fotos (excluidas las borradas)" #. 1 +#: src/rs-store.c:279 src/rs-store.c:835 #, c-format msgid "1 (%d)" msgstr "1 (%d)" +#: src/rs-store.c:280 msgid "Priority 1 photos" msgstr "Fotos de prioridad 1" #. 2 +#: src/rs-store.c:283 src/rs-store.c:836 #, c-format msgid "2 (%d)" msgstr "2 (%d)" +#: src/rs-store.c:284 msgid "Priority 2 photos" msgstr "Fotos de prioridad 2" #. 3 +#: src/rs-store.c:287 src/rs-store.c:837 #, c-format msgid "3 (%d)" msgstr "3 (%d)" +#: src/rs-store.c:288 msgid "Priority 3 photos" msgstr "Fotos de prioridad 3" #. Unsorted +#: src/rs-store.c:291 src/rs-store.c:838 #, c-format msgid "U (%d)" msgstr "U (%d)" +#: src/rs-store.c:292 msgid "Unprioritized photos" msgstr "Fotos sin priorizar" #. Deleted +#: src/rs-store.c:295 src/rs-store.c:839 #, c-format msgid "D (%d)" msgstr "D (%d)" +#: src/rs-store.c:296 msgid "Deleted photos" msgstr "Fotos borradas" @@ -398,233 +478,336 @@ #. understanding of our interface. I was thinking about adding a button instead #. that said "ROCK ON!" to instantly play "AC/DC - Highway to Hell", but I #. believe this will be better for the end user +#: src/rs-store.c:331 msgid "Priorities" msgstr "Prioridades" +#: src/rs-store.c:527 #, c-format msgid "" "%s\n" "\n" msgstr "" +#: src/rs-store.c:530 #, c-format msgid "Focal length: %dmm\n" msgstr "" +#: src/rs-store.c:533 #, c-format msgid "Shutter speed: %.1fs\n" msgstr "" +#: src/rs-store.c:535 #, c-format msgid "Shutter speed: 1/%.0fs\n" msgstr "" +#: src/rs-store.c:538 #, c-format msgid "Aperture: F/%.01f\n" msgstr "" +#: src/rs-store.c:541 #, c-format msgid "ISO: %u\n" msgstr "" +#: src/rs-store.c:544 #, c-format msgid "Time: %s" msgstr "" +#: src/rs-preview-widget.c:505 +msgid "Display Navigation" +msgstr "" + +#: src/rs-preview-widget.c:756 +msgid "Light out mode not available" +msgstr "" + +#: src/rs-preview-widget.c:757 +msgid "" +"Your setup doesn't seem to support RGBA visuals and/or compositing. Consult " +"your operating system manual for enabling RGBA visuals and compositing." +msgstr "" + +#: src/rs-preview-widget.c:987 msgid "Size" msgstr "Tama?o" +#: src/rs-preview-widget.c:995 msgid "-" msgstr "-" +#: src/rs-preview-widget.c:1001 msgid "Grid" msgstr "Cuadr?cula" +#: src/rs-preview-widget.c:1006 msgid "None" msgstr "Ninguna" +#: src/rs-preview-widget.c:1007 msgid "Golden sections" msgstr "La secci?n ?urea" +#: src/rs-preview-widget.c:1008 msgid "Rule of thirds" msgstr "La regla de tercero" +#: src/rs-preview-widget.c:1009 msgid "Golden triangles #1" msgstr "Triangulo de oro #1" +#: src/rs-preview-widget.c:1010 msgid "Golden triangles #2" msgstr "Triangulo de oro #2" +#: src/rs-preview-widget.c:1011 msgid "Harmonious triangles #1" msgstr "Tri?ngulos armoniosos #1" +#: src/rs-preview-widget.c:1012 msgid "Harmonious triangles #2" msgstr "Tri?ngulos armoniosos #2" +#: src/rs-preview-widget.c:1021 msgid "Aspect" msgstr "Orientaci?n" +#: src/rs-preview-widget.c:1026 msgid "Freeform" msgstr "Forma libre" +#: src/rs-preview-widget.c:1027 msgid "ISO paper (A4)" msgstr "Papel ISO (A4)" +#: src/rs-preview-widget.c:1028 msgid "3:2 (35mm)" msgstr "3:2 (35mm)" +#: src/rs-preview-widget.c:1029 msgid "4:3" msgstr "4:3" +#: src/rs-preview-widget.c:1030 msgid "10:8 (SXGA)" msgstr "10:8 (SXGA)" +#: src/rs-preview-widget.c:1031 msgid "16:10 (Wide XGA)" msgstr "16:10 (Wide XGA)" +#: src/rs-preview-widget.c:1032 msgid "8:3 (Dualhead XGA)" msgstr "8:3 (Dualhead XGA)" +#: src/rs-preview-widget.c:1033 msgid "1:1" msgstr "1:1" +#: src/rs-preview-widget.c:1034 msgid "Golden rectangle" msgstr "El rect?ngulo ?ureo" +#: src/rs-preview-widget.c:1042 src/rs-preview-widget.c:1053 msgid "Crop" msgstr "Recortar" +#: src/rs-preview-widget.c:1044 msgid "Don't crop" msgstr "No recortar" -msgid "Flip the photo over the x-axis" -msgstr "Reflejar la foto sobre el eje X" +#. Snapshot labels +#: src/rs-toolbox.c:157 src/rs-actions.c:972 +msgid " A " +msgstr " A " -msgid "Mirror the photo over the y-axis" -msgstr "Reflejar la foto sobre el eje X" +#: src/rs-toolbox.c:158 src/rs-actions.c:973 +msgid " B " +msgstr " B " -msgid "Rotate the photo 90 degrees clockwise" -msgstr "Girar la foto 90 grados en el sentido de las agujas del reloj" +#: src/rs-toolbox.c:159 src/rs-actions.c:974 +msgid " C " +msgstr " C " -msgid "Rotate the photo 180 degrees" -msgstr "Girar la foto 180 grados" +#. FIXME: Get height from gconf +#: src/rs-toolbox.c:184 +msgid "Histogram" +msgstr "Histograma" -msgid "Rotate the photo 90 degrees counter clockwise" -msgstr "Girar la foto 90 grados en sentido contrario a las agujas del reloj" +#: src/rs-toolbox.c:297 +#, fuzzy +msgid "Reset" +msgstr "Restablecer curva" -msgid "Transforms" -msgstr "Transformaciones" - -msgid "Reset this setting" -msgstr "Restaurar este ajuste" - +#: src/rs-toolbox.c:415 src/rs-toolbox.c:540 msgid "Open curve ..." msgstr "Abrir curva..." +#: src/rs-toolbox.c:546 msgid "Save curve as ..." msgstr "Guardar curva como..." +#: src/rs-toolbox.c:552 msgid "Reset curve" msgstr "Restablecer curva" +#: src/rs-toolbox.c:557 msgid "Auto adjust curve ends" msgstr "Auto ajustar finales de curva" -msgid " A " -msgstr " A " +#. Pack everything nice +#: src/rs-toolbox.c:637 +#, fuzzy +msgid "Basic" +msgstr "Lotes" -msgid " B " -msgstr " B " +#: src/rs-toolbox.c:638 +msgid "Channel Mixer" +msgstr "" -msgid " C " -msgstr " C " +#: src/rs-toolbox.c:639 src/rs-actions.c:353 +msgid "Curve" +msgstr "Curva" -#. Build GUI -msgid "Exposure" -msgstr "Exposici?n" +#: src/rs-toolbox.c:683 +msgid "Flip the photo over the x-axis" +msgstr "Reflejar la foto sobre el eje X" -msgid "Hue" -msgstr "Tono" +#: src/rs-toolbox.c:684 +msgid "Mirror the photo over the y-axis" +msgstr "Reflejar la foto sobre el eje X" -msgid "Contrast" -msgstr "Contraste" +#: src/rs-toolbox.c:685 +msgid "Rotate the photo 90 degrees clockwise" +msgstr "Girar la foto 90 grados en el sentido de las agujas del reloj" -#. Box it! -msgid "Warmth/tint" -msgstr "Temperatura/matiz" +#: src/rs-toolbox.c:686 +msgid "Rotate the photo 90 degrees counter clockwise" +msgstr "Girar la foto 90 grados en sentido contrario a las agujas del reloj" -msgid "Sharpen" -msgstr "Enfoque" +#: src/rs-toolbox.c:698 +msgid "Transforms" +msgstr "Transformaciones" -msgid "Curve" -msgstr "Curva" - -msgid "Histogram" -msgstr "Histograma" - +#: src/rs-actions.c:141 msgid "Open directory" msgstr "Abrir directorio" +#: src/rs-actions.c:198 +msgid "File exported" +msgstr "Archivo exportado" + +#: src/rs-actions.c:203 src/rs-actions.c:222 +#, fuzzy +msgid "Export failed" +msgstr "Exportar archivo" + +#: src/rs-actions.c:232 msgid "Error exporting" msgstr "Error al exportar" +#: src/rs-actions.c:233 msgid "Error exporting photo to gimp." msgstr "Error al exportar la foto a gimp." +#: src/rs-actions.c:256 src/rs-actions.c:274 msgid "Deleting photos" msgstr "Borrando fotos" +#: src/rs-actions.c:257 msgid "Your files will be permanently deleted!" msgstr "?Sus archivos se borrar?n permanentemente!" +#: src/rs-actions.c:259 msgid "Delete photos" msgstr "Borrar fotos" +#: src/rs-actions.c:333 msgid "Copied settings" msgstr "Ajustes copiados" +#. Build GUI +#: src/rs-actions.c:346 +msgid "Exposure" +msgstr "Exposici?n" + +#: src/rs-actions.c:348 +msgid "Hue" +msgstr "Tono" + +#: src/rs-actions.c:349 +msgid "Contrast" +msgstr "Contraste" + +#: src/rs-actions.c:350 msgid "White balance" msgstr "Balance de blancos" +#: src/rs-actions.c:351 +msgid "Sharpen" +msgstr "Enfoque" + +#: src/rs-actions.c:352 +msgid "Channel mixer" +msgstr "" + +#: src/rs-actions.c:385 msgid "Select settings to paste" msgstr "Seleccionar ajustes a pegar" +#: src/rs-actions.c:443 msgid "Pasted settings" msgstr "Ajustes pegados" +#: src/rs-actions.c:446 msgid "Nothing to paste" msgstr "Nada que pegar" +#: src/rs-actions.c:449 msgid "Buffer empty" msgstr "Memoria intermedia vac?a" +#: src/rs-actions.c:492 msgid "Adjusting to auto white balance" msgstr "Ajustando a balance de blancos autom?tico" +#: src/rs-actions.c:502 msgid "No white balance to set from" msgstr "Balance de blanco falta de" +#: src/rs-actions.c:505 msgid "Adjusting to camera white balance" msgstr "Ajustando al balance de blancos de la c?mara" +#: src/rs-actions.c:683 msgid "Showing exposure mask" msgstr "Mostrando m?scara de exposici?n" +#: src/rs-actions.c:685 msgid "Hiding exposure mask" msgstr "Ocultando m?scara de exposici?n" +#: src/rs-actions.c:715 #, c-format msgid " %s added to batch queue" msgstr " %s a?adido a la cola de lotes" +#: src/rs-actions.c:717 #, c-format msgid "%s already added to batch queue" msgstr "%s ya est? en la cola de lotes" +#: src/rs-actions.c:724 src/rs-actions.c:796 #, c-format msgid "%d photos added to batch queue" msgstr "%d fotos a?adidas a la cola de lotes" +#: src/rs-actions.c:761 msgid "" "Select which settings to\n" "add to batch queue" @@ -632,188 +815,310 @@ "Seleccionar qu? ajustes\n" "a?adir a la cola de lotes" +#: src/rs-actions.c:814 msgid "Removed from batch queue" msgstr "Eliminado de la cola de lotes" +#: src/rs-actions.c:816 msgid "Not in batch queue" msgstr "No est? en la cola de lotes" +#: src/rs-actions.c:850 msgid "A raw image converter for GTK+/GNOME" msgstr "Un convertidor de im?genes raw para GTK+/GNOME" +#: src/rs-actions.c:881 msgid "_File" msgstr "_Archivo" +#: src/rs-actions.c:882 msgid "_Edit" msgstr "_Editar" +#: src/rs-actions.c:883 msgid "_Photo" msgstr "_Foto" +#: src/rs-actions.c:884 msgid "_Set Priority" msgstr "_Establecer prioridad" +#: src/rs-actions.c:885 msgid "_White Balance" msgstr "_Balance de blancos" +#: src/rs-actions.c:886 msgid "_View" msgstr "_Ver" +#: src/rs-actions.c:887 msgid "_Sort by" msgstr "" +#: src/rs-actions.c:888 msgid "_Batch" msgstr "_Lotes" +#: src/rs-actions.c:889 msgid "_Help" msgstr "_Ayuda" #. File menu +#: src/rs-actions.c:894 msgid "_Open Directory" msgstr "_Abrir directorio" +#: src/rs-actions.c:895 msgid "_Quick Export" msgstr "_Exportaci?n r?pida" +#: src/rs-actions.c:896 msgid "_Export As" msgstr "_Exportar como" +#: src/rs-actions.c:897 msgid "_Export to Gimp" msgstr "_Exportar a Gimp" +#: src/rs-actions.c:898 msgid "_Reload directory" msgstr "_Recargar directorio" +#: src/rs-actions.c:899 msgid "_Delete flagged photos" msgstr "_Borrar fotos marcadas" +#: src/rs-actions.c:900 msgid "_Quit" msgstr "_Salir" #. Edit menu +#: src/rs-actions.c:903 msgid "_Revert settings" msgstr "_Deshacer ajustes" +#: src/rs-actions.c:904 msgid "_Copy settings" msgstr "_Copiar ajustes" +#: src/rs-actions.c:905 msgid "_Paste settings" msgstr "_Pegar ajustes" +#: src/rs-actions.c:906 msgid "_Reset settings" msgstr "_Restablecer ajustes" +#: src/rs-actions.c:907 msgid "_Preferences" msgstr "_Configuraci?n" #. Photo menu +#: src/rs-actions.c:910 msgid "_Flag photo for deletion" msgstr "_Marcar foto para borrar" +#: src/rs-actions.c:911 msgid "_1" msgstr "_1" +#: src/rs-actions.c:912 msgid "_2" msgstr "_2" +#: src/rs-actions.c:913 msgid "_3" msgstr "_3" +#: src/rs-actions.c:914 msgid "_Remove priority" msgstr "_Eliminar prioridad" +#: src/rs-actions.c:915 msgid "_Auto" msgstr "_Auto" +#: src/rs-actions.c:916 msgid "_Camera" msgstr "_C?mara" +#: src/rs-actions.c:917 msgid "_Crop" msgstr "_Recorte" +#: src/rs-actions.c:918 msgid "_Uncrop" msgstr "_Deshacer recorte" +#: src/rs-actions.c:919 msgid "_Straighten" msgstr "_Enderezar" +#: src/rs-actions.c:920 msgid "_Unstraighten" msgstr "_Desenderezar" +#: src/rs-actions.c:921 msgid "_Group" msgstr "_Agrupar" +#: src/rs-actions.c:922 msgid "_Ungroup" msgstr "_Desagrupar" +#: src/rs-actions.c:923 #, fuzzy msgid "_Auto group" msgstr "_Desagrupar" +#: src/rs-actions.c:924 +#, fuzzy +msgid "_Tag Photo..." +msgstr "_Foto" + +#: src/rs-actions.c:925 +msgid "Rotate Clockwise" +msgstr "" + +#: src/rs-actions.c:926 +#, fuzzy +msgid "Rotate Counter Clockwise" +msgstr "Girar la foto 90 grados en el sentido de las agujas del reloj" + +#: src/rs-actions.c:927 +msgid "Flip" +msgstr "" + +#: src/rs-actions.c:928 +msgid "Mirror" +msgstr "" + #. View menu +#: src/rs-actions.c:931 msgid "_Previous photo" msgstr "_Foto anterior" +#: src/rs-actions.c:932 msgid "_Next Photo" msgstr "_Siguiente foto" -msgid "_Zoom to fit" -msgstr "_Zoom para ajustar" - -msgid "_Zoom to 100%" -msgstr "_Zoom al 100 %" - #. Batch menu +#: src/rs-actions.c:935 msgid "_Add to batch queue" msgstr "_A?adir a la cola de lotes" +#: src/rs-actions.c:936 msgid "_Add current view to queue" msgstr "_A?adir vista actual a la cola de lotes" +#: src/rs-actions.c:937 msgid "_Remove from batch queue" msgstr "_Eliminar de la cola de lotes" +#: src/rs-actions.c:938 msgid "_Start" msgstr "_Iniciar" #. help menu +#: src/rs-actions.c:941 msgid "_About" msgstr "_Acerca de" +#: src/rs-actions.c:949 +msgid "_Zoom to fit" +msgstr "_Zoom para ajustar" + +#: src/rs-actions.c:950 msgid "_Iconbox" msgstr "_Caja de iconos" +#: src/rs-actions.c:951 msgid "_Toolbox" msgstr "_Caja de herramientas" +#: src/rs-actions.c:952 msgid "_Fullscreen" msgstr "_Pantalla completa" +#: src/rs-actions.c:953 msgid "_Exposure mask" msgstr "_M?scara de exposici?n" +#: src/rs-actions.c:954 msgid "_Split" msgstr "_Dividir" +#: src/rs-actions.c:956 +msgid "_Lights out" +msgstr "" + +#: src/rs-actions.c:962 msgid "Name" msgstr "" +#: src/rs-actions.c:963 msgid "Timestamp" msgstr "" +#: src/rs-actions.c:964 #, fuzzy msgid "ISO" msgstr "ISO%d" +#: src/rs-actions.c:965 msgid "Aperture" msgstr "" +#: src/rs-actions.c:966 msgid "Focallength" msgstr "" +#: src/rs-actions.c:967 msgid "Shutterspeed" msgstr "" +#~ msgid "Background renderer active" +#~ msgstr "Renderizador en segundo plano activo" + +#~ msgid "Preload photos" +#~ msgstr "Precargar fotos" + +#~ msgid "Filename:" +#~ msgstr "Nombre de archivo:" + +#~ msgid "Save uncompressed TIFF" +#~ msgstr "Guardar TIFF sin compresi?n" + +#~ msgid "JPEG Quality:" +#~ msgstr "Calidad JPEG:" + +#~ msgid "File export canceled" +#~ msgstr "Cancelada la exportaci?n de archivo" + +#~ msgid "JPEG (Joint Photographic Experts Group)" +#~ msgstr "JPEG (Joint Photographic Experts Group)" + +#~ msgid "PNG (Portable Network Graphics)" +#~ msgstr "PNG (Portable Network Graphics)" + +#~ msgid "8-bit TIFF (Tagged Image File Format)" +#~ msgstr "8-bit TIFF (Tagged Image File Format)" + +#~ msgid "16-bit TIFF (Tagged Image File Format)" +#~ msgstr "16-bit TIFF (Tagged Image File Format)" + +#~ msgid "Rotate the photo 180 degrees" +#~ msgstr "Girar la foto 180 grados" + +#~ msgid "Reset this setting" +#~ msgstr "Restaurar este ajuste" + +#~ msgid "Warmth/tint" +#~ msgstr "Temperatura/matiz" + +#~ msgid "_Zoom to 100%" +#~ msgstr "_Zoom al 100 %" + #~ msgid "%dmm " #~ msgstr "%dmm " @@ -867,6 +1172,3 @@ #~ msgid "Hasselblad" #~ msgstr "Hasselblad" - -#~ msgid "Opening directory..." -#~ msgstr "Abriendo directorio..." Modified: trunk/po/fi.po =================================================================== --- trunk/po/fi.po 2009-09-27 21:47:00 UTC (rev 2670) +++ trunk/po/fi.po 2009-09-27 22:10:12 UTC (rev 2671) @@ -17,7 +17,7 @@ msgstr "" "Project-Id-Version: Rawstudio 1.1.1\n" "Report-Msgid-Bugs-To: rawstudio-dev at rawstudio.org\n" -"POT-Creation-Date: 2009-01-11 04:26+0100\n" +"POT-Creation-Date: 2009-09-28 00:09+0200\n" "PO-Revision-Date: 2008-04-18 07:45+0200\n" "Last-Translator: Olli H.\n" "Language-Team: Rawstudio development \n" @@ -27,284 +27,352 @@ "X-Poedit-Language: Finnish\n" "X-Poedit-Country: FINLAND\n" +#: src/filename.c:280 #, c-format msgid "%f - Original filename" msgstr "%f - Alkuper?inen tiedostonimi" +#: src/filename.c:281 #, c-format msgid "%2c - Incremental counter" msgstr "%2c - Kasvava laskuri" +#: src/filename.c:282 #, c-format msgid "%s - Setting id (A, B or C)" msgstr "%s - T?rkeysmerkint? (A, B tai C)" +#: src/filename.c:283 +#, c-format +msgid "%d - Date from EXIF (YYYY-MM-DD)" +msgstr "" + +#: src/filename.c:284 +msgid "%t - Time from EXIF (HH:MM:SS)" +msgstr "" + +#: src/gtk-helper.c:420 msgid "Select color profile" msgstr "Valitse v?riprofiili" +#: src/gtk-helper.c:450 msgid "All files" msgstr "Kaikki tiedostot" +#: src/gtk-helper.c:451 msgid "Color profiles (icc and icm)" msgstr "V?riprofiilit (icc ja icm)" +#: src/gtk-helper.c:465 msgid "Not a valid color profile." msgstr "Ep?kelpo v?riprofiili." +#: src/gtk-helper.c:466 msgid "" "The file you selected does not appear to be a valid color profile for this " "version of Rawstudio." msgstr "" "Valitsemasi tiedosto ei kelpaa v?riprofiiliksi Rawstudion t?lle versiolle" +#: src/gtk-helper.c:568 msgid "Enable color management (experimental)" msgstr "Ota v?rien hallinta k?ytt??n (kokeellinen toiminto)" +#: src/gtk-helper.c:576 msgid "Input profile" msgstr "Tuontiprofiili" +#: src/gtk-helper.c:579 msgid "BuiltInRGBProfile" msgstr "Sis??nrakennettu RGB-profiili" +#: src/gtk-helper.c:629 msgid "Display profile" msgstr "N?yt?n profiili" +#: src/gtk-helper.c:632 src/gtk-helper.c:685 msgid "sRGB" msgstr "sRGB" +#: src/gtk-helper.c:682 msgid "Export profile" msgstr "Vientiprofiili" +#: src/gtk-helper.c:734 msgid "Intent" msgstr "Rasterointiaie" +#: src/gtk-helper.c:737 msgid "Perceptual" msgstr "Havainnollinen" +#: src/gtk-helper.c:738 msgid "Relative colormetric" msgstr "Suhteellinen kolorimetrinen" +#: src/gtk-helper.c:739 src/rs-actions.c:347 msgid "Saturation" msgstr "V?rikyll?isyys" +#: src/gtk-helper.c:740 msgid "Absolute colormetric" msgstr "Absoluuttinen kolorimetrinen" -msgid "Background renderer active" -msgstr "Taustan render?ij? on aktiivinen" - +#: src/gtk-interface.c:182 msgid "Opening photo ..." msgstr "Avataan kuvaa ..." +#: src/gtk-interface.c:197 msgid "Couldn't open photo" msgstr "Kuvaa ei voitu avata" +#: src/gtk-interface.c:202 msgid "Image opened" msgstr "Kuva on avattu" +#: src/gtk-interface.c:203 src/gtk-interface.c:830 src/gtk-interface.c:953 +#: src/gtk-interface.c:995 msgid "Rawstudio" msgstr "Rawstudio" +#: src/gtk-interface.c:273 #, c-format msgid "Changed photo priority (*)" msgstr "Kuvan t?rkeys muutettu (*)" +#: src/gtk-interface.c:275 #, c-format msgid "Changed photo priority (D)" msgstr "Kuva merkitty poistettavaksi (D)" +#: src/gtk-interface.c:277 #, c-format msgid "Changed photo priority (%d)" msgstr "Kuvan t?rkeys muutettu (%d)" +#: src/gtk-interface.c:492 +msgid "Directory:" +msgstr "Kansio:" + +#: src/gtk-interface.c:494 src/rs-batch.c:980 +msgid "Choose output directory" +msgstr "Valitse kansio mihin vied??n" + +#: src/gtk-interface.c:510 src/rs-batch.c:991 +msgid "Filename template:" +msgstr "Tiedostonimen malli:" + +#: src/gtk-interface.c:523 +msgid "Filename example:" +msgstr "Tiedostonimen esimerkki:" + +#: src/gtk-interface.c:534 +msgid "File type:" +msgstr "Tiedoston tyyppi:" + +#: src/gtk-interface.c:595 msgid "Preferences" msgstr "Asetukset" +#: src/gtk-interface.c:610 msgid "Preview background color:" msgstr "Esikatselun taustan v?ri:" +#: src/gtk-interface.c:625 msgid "Histogram height:" msgstr "Histogrammin korkeus:" +#: src/gtk-interface.c:635 msgid "Show filenames in iconview" msgstr "N?yt? kuvien nimet pikkukuvien yhteydess?" +#: src/gtk-interface.c:640 msgid "Use system theme" msgstr "K?yt? j?rjestelm?n teemaa" +#: src/gtk-interface.c:647 msgid "Place cache in home directory" msgstr "Sijoita asetukset sis?lt?v?t tiedostot kotihakemistoon" +#: src/gtk-interface.c:650 msgid "Load 8 bit photos (jpeg, png, etc)" msgstr "Lataa 8-bittiset kuvat (jpeg, png, jne.)" -msgid "Preload photos" -msgstr "Esilataa kuvat" - -msgid "Directory:" -msgstr "Kansio:" - -msgid "Filename:" -msgstr "Tiedoston nimi:" - -msgid "File type:" -msgstr "Tiedoston tyyppi:" - -#. set default -msgid "Filename example:" -msgstr "Tiedostonimen esimerkki:" - -msgid "Save uncompressed TIFF" -msgstr "Tallenna pakkaamaton TIFF" - +#: src/gtk-interface.c:718 msgid "General" msgstr "Yleist?" #. gtk_notebook_append_page(GTK_NOTEBOOK(notebook), batch_page, gtk_label_new(_("Batch"))); +#: src/gtk-interface.c:720 msgid "Quick export" msgstr "Pikavienti" +#: src/gtk-interface.c:721 msgid "Colors" msgstr "V?rit" +#: src/gtk-interface.c:955 src/gtk-interface.c:1178 +msgid "Opening directory..." +msgstr "Avaa kansio" + +#: src/gtk-interface.c:965 src/gtk-interface.c:1123 src/gtk-interface.c:1193 +msgid "Ready" +msgstr "Valmis" + +#: src/gtk-interface.c:1050 msgid "Open recursive" msgstr "Avaa alihakemistot rekursiivisesti" +#: src/gtk-interface.c:1059 msgid "Tools" msgstr "Ty?kalut" +#: src/gtk-interface.c:1060 msgid "Batch" msgstr "Ty?jono" +#: src/gtk-interface.c:1061 msgid "Open" msgstr "Avaa" -msgid "Ready" -msgstr "Valmis" - +#: src/gtk-progress.c:63 src/gtk-progress.c:99 src/gtk-progress.c:122 msgid "Progress" msgstr "Edistyminen" -msgid "JPEG Quality:" -msgstr "JPEG-laatu" +#. FIXME: Calculate some sensible size - maybe even remember user resizes +#: src/rs-save-dialog.c:93 src/rs-toolbox.c:371 +msgid "Export File" +msgstr "Vie tiedosto" +#: src/rs-save-dialog.c:244 +#, fuzzy, c-format +msgid "Exporting to %s" +msgstr "Vied??n tiedostoa ..." + +#: src/rs-save-dialog.c:360 msgid "Keep aspect" msgstr "S?ilyt? sivusuhteet" +#: src/rs-save-dialog.c:378 msgid "Width:" msgstr "Leveys:" +#: src/rs-save-dialog.c:380 msgid "Height:" msgstr "Korkeus:" +#: src/rs-save-dialog.c:382 msgid "Percent:" msgstr "Prosenttia:" -msgid "Export File" -msgstr "Vie tiedosto" - -msgid "Exporting file ..." -msgstr "Vied??n tiedostoa ..." - -msgid "File exported" -msgstr "Tiedosto on viety" - -msgid "File export canceled" -msgstr "Tiedoston vienti keskeytettiin" - -msgid "JPEG (Joint Photographic Experts Group)" -msgstr "JPEG (Joint Photographic Experts Group)" - -msgid "PNG (Portable Network Graphics)" -msgstr "PNG (Portable Network Graphics)" - -msgid "8-bit TIFF (Tagged Image File Format)" -msgstr "8-bittinen TIFF (Tagged Image File Format)" - -msgid "16-bit TIFF (Tagged Image File Format)" -msgstr "16-bit TIFF (Tagged Image File Format)" - +#: src/rs-batch.c:206 src/rs-actions.c:737 msgid "A" msgstr "A" +#: src/rs-batch.c:209 src/rs-actions.c:738 msgid "B" msgstr "B" +#: src/rs-batch.c:212 src/rs-actions.c:739 msgid "C" msgstr "C" +#: src/rs-batch.c:437 msgid "Processing photos" msgstr "Ty?stet??n kuvia" +#: src/rs-batch.c:441 msgid "Cancel" msgstr "Peruuta" +#: src/rs-batch.c:446 msgid "Last image:" msgstr "Viimeinen kuva:" +#: src/rs-batch.c:479 #, c-format msgid "Time left: %dh %dm %ds" msgstr "Aikaa j?ljell?: %dh %dm %ds" +#: src/rs-batch.c:483 msgid "Time left: ..." msgstr "Aikaa j?ljell?: ..." +#: src/rs-batch.c:495 #, c-format msgid "Loading %s ..." msgstr "Ladataan %s ..." +#: src/rs-batch.c:536 #, c-format msgid "Saving %s ..." msgstr "Tallennetaan %s ..." +#: src/rs-batch.c:634 msgid "Icon" msgstr "Pikkukuva" +#: src/rs-batch.c:641 msgid "Filename" msgstr "Tiedostonimi" +#: src/rs-batch.c:648 msgid "Setting" msgstr "Asetus" +#: src/rs-batch.c:738 msgid "Start" msgstr "Aloita" +#: src/rs-batch.c:741 msgid "Remove" msgstr "Poista" +#: src/rs-batch.c:744 msgid "Remove all" msgstr "Poista kaikki" +#: src/rs-batch.c:869 msgid "Photo size" msgstr "Kuvan koko" +#: src/rs-batch.c:877 msgid "Constant scale" msgstr "Vakiomittasuhteet" +#: src/rs-batch.c:878 msgid "Constant width" msgstr "Vakioleveys" +#: src/rs-batch.c:879 msgid "Constant height" msgstr "Vakiokorkeus" +#: src/rs-batch.c:880 msgid "Maximum size" msgstr "Suurin koko" +#: src/rs-batch.c:892 msgid "Photo width:" msgstr "Kuvan leveys:" +#: src/rs-batch.c:894 src/rs-batch.c:903 msgid "pixels" msgstr "kuvapistett?" +#: src/rs-batch.c:901 msgid "Photo height:" msgstr "Kuvan korkeus:" +#: src/rs-batch.c:910 msgid "Photo scale:" msgstr "Kuvan mittakaava:" +#: src/rs-batch.c:912 msgid "%" msgstr "%" +#: src/rs-batch.c:948 #, c-format msgid "" "Constant width:\n" @@ -313,6 +381,7 @@ "Vakioleveys:\n" "%d" +#: src/rs-batch.c:951 #, c-format msgid "" "Constant height:\n" @@ -321,6 +390,7 @@ "Vakiokorkeus:\n" "%d" +#: src/rs-batch.c:954 #, c-format msgid "" "Constant Scale:\n" @@ -329,6 +399,7 @@ "Vakiomittasuhteet:\n" "%d" +#: src/rs-batch.c:958 #, c-format msgid "" "Maximum size:\n" @@ -337,66 +408,75 @@ "Suurin koko:\n" "%d x %d" -msgid "Choose output directory" -msgstr "Valitse kansio mihin vied??n" - +#: src/rs-batch.c:987 msgid "Output directory:" msgstr "Kansio mihin vied??n:" -msgid "Filename template:" -msgstr "Tiedostonimen malli:" - +#: src/rs-batch.c:1012 msgid "Change" msgstr "Muuta" +#: src/rs-batch.c:1017 msgid "Export dimensions" msgstr "Viedyn kuvan mitat" #. All +#: src/rs-store.c:275 src/rs-store.c:834 #, c-format msgid "* (%d)" msgstr "* (%d)" +#: src/rs-store.c:276 msgid "All photos (excluding deleted)" msgstr "Kaikki kuvat (paitsi poistettavaksi merkityt)" #. 1 +#: src/rs-store.c:279 src/rs-store.c:835 #, c-format msgid "1 (%d)" msgstr "1 (%d)" +#: src/rs-store.c:280 msgid "Priority 1 photos" msgstr "T?rkeysmerkinn?n 1 kuvat" #. 2 +#: src/rs-store.c:283 src/rs-store.c:836 #, c-format msgid "2 (%d)" msgstr "2 (%d)" +#: src/rs-store.c:284 msgid "Priority 2 photos" msgstr "T?rkeysmerkinn?n 2 kuvat" #. 3 +#: src/rs-store.c:287 src/rs-store.c:837 #, c-format msgid "3 (%d)" msgstr "3 (%d)" +#: src/rs-store.c:288 msgid "Priority 3 photos" msgstr "T?rkeysmerkinn?n 1 kuvat" #. Unsorted +#: src/rs-store.c:291 src/rs-store.c:838 #, c-format msgid "U (%d)" msgstr "U (%d)" +#: src/rs-store.c:292 msgid "Unprioritized photos" msgstr "T?rkeysmerkitsem?tt?m?t kuvat" #. Deleted +#: src/rs-store.c:295 src/rs-store.c:839 #, c-format msgid "D (%d)" msgstr "D (%d)" +#: src/rs-store.c:296 msgid "Deleted photos" msgstr "Poistettavaksi merkityt kuvat" @@ -405,233 +485,336 @@ #. understanding of our interface. I was thinking about adding a button instead #. that said "ROCK ON!" to instantly play "AC/DC - Highway to Hell", but I #. believe this will be better for the end user +#: src/rs-store.c:331 msgid "Priorities" msgstr "T?rkeysmerkinn?t" +#: src/rs-store.c:527 #, c-format msgid "" "%s\n" "\n" msgstr "" +#: src/rs-store.c:530 #, c-format msgid "Focal length: %dmm\n" msgstr "" +#: src/rs-store.c:533 #, c-format msgid "Shutter speed: %.1fs\n" msgstr "" +#: src/rs-store.c:535 #, c-format msgid "Shutter speed: 1/%.0fs\n" msgstr "" +#: src/rs-store.c:538 #, c-format msgid "Aperture: F/%.01f\n" msgstr "" +#: src/rs-store.c:541 #, c-format msgid "ISO: %u\n" msgstr "" +#: src/rs-store.c:544 #, c-format msgid "Time: %s" msgstr "" +#: src/rs-preview-widget.c:505 +msgid "Display Navigation" +msgstr "" + +#: src/rs-preview-widget.c:756 +msgid "Light out mode not available" +msgstr "" + +#: src/rs-preview-widget.c:757 +msgid "" +"Your setup doesn't seem to support RGBA visuals and/or compositing. Consult " +"your operating system manual for enabling RGBA visuals and compositing." +msgstr "" + +#: src/rs-preview-widget.c:987 msgid "Size" msgstr "Koko" +#: src/rs-preview-widget.c:995 msgid "-" msgstr "-" +#: src/rs-preview-widget.c:1001 msgid "Grid" msgstr "Verkko" +#: src/rs-preview-widget.c:1006 msgid "None" msgstr "Ei mit??n" +#: src/rs-preview-widget.c:1007 msgid "Golden sections" msgstr "Kultaiset leikkaukset" +#: src/rs-preview-widget.c:1008 msgid "Rule of thirds" msgstr "Kolmanneksien s??nt?" +#: src/rs-preview-widget.c:1009 msgid "Golden triangles #1" msgstr "Kultaiset kolmiot #1" +#: src/rs-preview-widget.c:1010 msgid "Golden triangles #2" msgstr "Kultaiset kolmiot #2" +#: src/rs-preview-widget.c:1011 msgid "Harmonious triangles #1" msgstr "Harmoniset kolmiot #1" +#: src/rs-preview-widget.c:1012 msgid "Harmonious triangles #2" msgstr "Harmoniset kolmiot #2" +#: src/rs-preview-widget.c:1021 msgid "Aspect" msgstr "Sivusuhde" +#: src/rs-preview-widget.c:1026 msgid "Freeform" msgstr "Vapaamuoto" +#: src/rs-preview-widget.c:1027 msgid "ISO paper (A4)" msgstr "A4 (ISO-standardin mukainen)" +#: src/rs-preview-widget.c:1028 msgid "3:2 (35mm)" msgstr "3:2 (35mm)" +#: src/rs-preview-widget.c:1029 msgid "4:3" msgstr "4:3" +#: src/rs-preview-widget.c:1030 msgid "10:8 (SXGA)" msgstr "10:8 (SXGA)" +#: src/rs-preview-widget.c:1031 msgid "16:10 (Wide XGA)" msgstr "16:10 (Wide XGA)" +#: src/rs-preview-widget.c:1032 msgid "8:3 (Dualhead XGA)" msgstr "8:3 (Dualhead XGA)" +#: src/rs-preview-widget.c:1033 msgid "1:1" msgstr "1:1" +#: src/rs-preview-widget.c:1034 msgid "Golden rectangle" msgstr "Kultainen neli?" +#: src/rs-preview-widget.c:1042 src/rs-preview-widget.c:1053 msgid "Crop" msgstr "Rajaa" +#: src/rs-preview-widget.c:1044 msgid "Don't crop" msgstr "" -msgid "Flip the photo over the x-axis" -msgstr "K??nn? kuva x-akselin suhteen" +#. Snapshot labels +#: src/rs-toolbox.c:157 src/rs-actions.c:972 +msgid " A " +msgstr " A " -msgid "Mirror the photo over the y-axis" -msgstr "Peilaa kuva y-akselin suhteen" +#: src/rs-toolbox.c:158 src/rs-actions.c:973 +msgid " B " +msgstr " B " -msgid "Rotate the photo 90 degrees clockwise" -msgstr "K??nn? kuvaa 90 astetta my?t?p?iv??n" +#: src/rs-toolbox.c:159 src/rs-actions.c:974 +msgid " C " +msgstr " C " -msgid "Rotate the photo 180 degrees" -msgstr "K??nn? kuvaa 180 astetta" +#. FIXME: Get height from gconf +#: src/rs-toolbox.c:184 +msgid "Histogram" +msgstr "Histrogrammi" -msgid "Rotate the photo 90 degrees counter clockwise" -msgstr "K??nn? kuvaa 90 astetta vastap?iv??n" +#: src/rs-toolbox.c:297 +#, fuzzy +msgid "Reset" +msgstr "Palauta k?yr?n oletusmuoto" -msgid "Transforms" -msgstr "Muotoilut" - -msgid "Reset this setting" -msgstr "Palauta oletusarvo" - +#: src/rs-toolbox.c:415 src/rs-toolbox.c:540 msgid "Open curve ..." msgstr "Avaa k?yr? ..." +#: src/rs-toolbox.c:546 msgid "Save curve as ..." msgstr "Tallenna k?yr? nimell? ..." +#: src/rs-toolbox.c:552 msgid "Reset curve" msgstr "Palauta k?yr?n oletusmuoto" +#: src/rs-toolbox.c:557 msgid "Auto adjust curve ends" msgstr "S??d? k?yr?n ??rip??t automaattisesti" -msgid " A " -msgstr " A " +#. Pack everything nice +#: src/rs-toolbox.c:637 +#, fuzzy +msgid "Basic" +msgstr "Ty?jono" -msgid " B " -msgstr " B " +#: src/rs-toolbox.c:638 +msgid "Channel Mixer" +msgstr "" -msgid " C " -msgstr " C " +#: src/rs-toolbox.c:639 src/rs-actions.c:353 +msgid "Curve" +msgstr "K?yr?" -#. Build GUI -msgid "Exposure" -msgstr "Valotus" +#: src/rs-toolbox.c:683 +msgid "Flip the photo over the x-axis" +msgstr "K??nn? kuva x-akselin suhteen" -msgid "Hue" -msgstr "S?vy" +#: src/rs-toolbox.c:684 +msgid "Mirror the photo over the y-axis" +msgstr "Peilaa kuva y-akselin suhteen" -msgid "Contrast" -msgstr "Kontrasti" +#: src/rs-toolbox.c:685 +msgid "Rotate the photo 90 degrees clockwise" +msgstr "K??nn? kuvaa 90 astetta my?t?p?iv??n" -#. Box it! -msgid "Warmth/tint" -msgstr "V?ril?mp?tila/v?ri" +#: src/rs-toolbox.c:686 +msgid "Rotate the photo 90 degrees counter clockwise" +msgstr "K??nn? kuvaa 90 astetta vastap?iv??n" -msgid "Sharpen" -msgstr "Ter?v?itys" +#: src/rs-toolbox.c:698 +msgid "Transforms" +msgstr "Muotoilut" -msgid "Curve" -msgstr "K?yr?" - -msgid "Histogram" -msgstr "Histrogrammi" - +#: src/rs-actions.c:141 msgid "Open directory" msgstr "Avaa kansio" +#: src/rs-actions.c:198 +msgid "File exported" +msgstr "Tiedosto on viety" + +#: src/rs-actions.c:203 src/rs-actions.c:222 +#, fuzzy +msgid "Export failed" +msgstr "Vie tiedosto" + +#: src/rs-actions.c:232 msgid "Error exporting" msgstr "Virhe viet?ess?" +#: src/rs-actions.c:233 msgid "Error exporting photo to gimp." msgstr "Virhe viet?ess? kuvaa gimp-kuvienk?sittelyohjelmaan." +#: src/rs-actions.c:256 src/rs-actions.c:274 msgid "Deleting photos" msgstr "Poistetaan kuvia" +#: src/rs-actions.c:257 msgid "Your files will be permanently deleted!" msgstr "Tiedostosi poistetaan pysyv?sti!" +#: src/rs-actions.c:259 msgid "Delete photos" msgstr "Poista kuvat" +#: src/rs-actions.c:333 msgid "Copied settings" msgstr "Arvot kopioitu" +#. Build GUI +#: src/rs-actions.c:346 +msgid "Exposure" +msgstr "Valotus" + +#: src/rs-actions.c:348 +msgid "Hue" +msgstr "S?vy" + +#: src/rs-actions.c:349 +msgid "Contrast" +msgstr "Kontrasti" + +#: src/rs-actions.c:350 msgid "White balance" msgstr "Valkotasapaino" +#: src/rs-actions.c:351 +msgid "Sharpen" +msgstr "Ter?v?itys" + +#: src/rs-actions.c:352 +msgid "Channel mixer" +msgstr "" + +#: src/rs-actions.c:385 msgid "Select settings to paste" msgstr "Valitse liitett?v?t arvot" +#: src/rs-actions.c:443 msgid "Pasted settings" msgstr "Liitetyt arvot" +#: src/rs-actions.c:446 msgid "Nothing to paste" msgstr "Liitett?vi? asetuksia ei ole" +#: src/rs-actions.c:449 msgid "Buffer empty" msgstr "V?limuisti tyhj?" +#: src/rs-actions.c:492 msgid "Adjusting to auto white balance" msgstr "S??det??n valkotasapaino automaattisesti" +#: src/rs-actions.c:502 msgid "No white balance to set from" msgstr "Ei valkotasapainoarvoa josta asettaa" +#: src/rs-actions.c:505 msgid "Adjusting to camera white balance" msgstr "Asetetaan kameran valkotasapainoarvoon" +#: src/rs-actions.c:683 msgid "Showing exposure mask" msgstr "N?ytet??n valotusmaski" +#: src/rs-actions.c:685 msgid "Hiding exposure mask" msgstr "Piilotetaan valotusmaski" +#: src/rs-actions.c:715 #, c-format msgid " %s added to batch queue" msgstr " %s lis?ttiin ty?jonoon" +#: src/rs-actions.c:717 #, c-format msgid "%s already added to batch queue" msgstr "%s on jo lis?tty ty?jonoon" +#: src/rs-actions.c:724 src/rs-actions.c:796 #, c-format msgid "%d photos added to batch queue" msgstr "%d kuvaa lis?tty ty?jonoon" +#: src/rs-actions.c:761 msgid "" "Select which settings to\n" "add to batch queue" @@ -639,188 +822,310 @@ "Valitse mitk? asetukset\n" "lis?t??n ty?jonoon" +#: src/rs-actions.c:814 msgid "Removed from batch queue" msgstr "Poistettu ty?jonosta" +#: src/rs-actions.c:816 msgid "Not in batch queue" msgstr "Ei ty?jonossa" +#: src/rs-actions.c:850 msgid "A raw image converter for GTK+/GNOME" msgstr "RAW-kuvien muunnin GTK+/GNOME -ty?p?yt?ymp?rist??n" +#: src/rs-actions.c:881 msgid "_File" msgstr "_Tiedosto" +#: src/rs-actions.c:882 msgid "_Edit" msgstr "_Muokkaa" +#: src/rs-actions.c:883 msgid "_Photo" msgstr "_Kuva" +#: src/rs-actions.c:884 msgid "_Set Priority" msgstr "_Aseta t?rkeys" +#: src/rs-actions.c:885 msgid "_White Balance" msgstr "_Valkotasapaino" +#: src/rs-actions.c:886 msgid "_View" msgstr "_N?yt?" +#: src/rs-actions.c:887 msgid "_Sort by" msgstr "" +#: src/rs-actions.c:888 msgid "_Batch" msgstr "_Ty?jono" +#: src/rs-actions.c:889 msgid "_Help" msgstr "_Ohje" #. File menu +#: src/rs-actions.c:894 msgid "_Open Directory" msgstr "_Avaa kansio" +#: src/rs-actions.c:895 msgid "_Quick Export" msgstr "_Pikavienti" +#: src/rs-actions.c:896 msgid "_Export As" msgstr "_Vie nimell?" +#: src/rs-actions.c:897 msgid "_Export to Gimp" msgstr "_Vie Gimp-kuvank?sittelyohjelmaan" +#: src/rs-actions.c:898 msgid "_Reload directory" msgstr "_Lataa kansio uudestaan" +#: src/rs-actions.c:899 msgid "_Delete flagged photos" msgstr "_Poista poistettavaksi merkityt kuvat" +#: src/rs-actions.c:900 msgid "_Quit" msgstr "_Poistu" #. Edit menu +#: src/rs-actions.c:903 msgid "_Revert settings" msgstr "_Palauta arvot" +#: src/rs-actions.c:904 msgid "_Copy settings" msgstr "_Kopioi arvot" +#: src/rs-actions.c:905 msgid "_Paste settings" msgstr "_Liit? arvot" +#: src/rs-actions.c:906 msgid "_Reset settings" msgstr "_Palauta oletusarvot" +#: src/rs-actions.c:907 msgid "_Preferences" msgstr "_Asetukset" #. Photo menu +#: src/rs-actions.c:910 msgid "_Flag photo for deletion" msgstr "_Merkitse kuva poistoa varten" +#: src/rs-actions.c:911 msgid "_1" msgstr "_1" +#: src/rs-actions.c:912 msgid "_2" msgstr "_2" +#: src/rs-actions.c:913 msgid "_3" msgstr "_3" +#: src/rs-actions.c:914 msgid "_Remove priority" msgstr "_Poista t?rkeysmerkint?" +#: src/rs-actions.c:915 msgid "_Auto" msgstr "_Automaattinen" +#: src/rs-actions.c:916 msgid "_Camera" msgstr "_Kamera" +#: src/rs-actions.c:917 msgid "_Crop" msgstr "_Rajaa" +#: src/rs-actions.c:918 msgid "_Uncrop" msgstr "_Poista rajaus" +#: src/rs-actions.c:919 msgid "_Straighten" msgstr "_Suorista" +#: src/rs-actions.c:920 msgid "_Unstraighten" msgstr "_Poista suoristus" +#: src/rs-actions.c:921 msgid "_Group" msgstr "_Ryhmit?" +#: src/rs-actions.c:922 msgid "_Ungroup" msgstr "_Poista ryhmitys" +#: src/rs-actions.c:923 #, fuzzy msgid "_Auto group" msgstr "_Poista ryhmitys" +#: src/rs-actions.c:924 +#, fuzzy +msgid "_Tag Photo..." +msgstr "_Kuva" + +#: src/rs-actions.c:925 +msgid "Rotate Clockwise" +msgstr "" + +#: src/rs-actions.c:926 +#, fuzzy +msgid "Rotate Counter Clockwise" +msgstr "K??nn? kuvaa 90 astetta my?t?p?iv??n" + +#: src/rs-actions.c:927 +msgid "Flip" +msgstr "" + +#: src/rs-actions.c:928 +msgid "Mirror" +msgstr "" + #. View menu +#: src/rs-actions.c:931 msgid "_Previous photo" msgstr "_Edellinen kuva" +#: src/rs-actions.c:932 msgid "_Next Photo" msgstr "_Seuraava kuva" -msgid "_Zoom to fit" -msgstr "_Zoomaa sopimaan" - -msgid "_Zoom to 100%" -msgstr "_Zoomaa 100%" - #. Batch menu +#: src/rs-actions.c:935 msgid "_Add to batch queue" msgstr "_Lis?? ty?jonoon" +#: src/rs-actions.c:936 msgid "_Add current view to queue" msgstr "_Lis?? kaikki pikkukuvat ty?jonoon" +#: src/rs-actions.c:937 msgid "_Remove from batch queue" msgstr "_Poista ty?jonosta" +#: src/rs-actions.c:938 msgid "_Start" msgstr "_Aloita" #. help menu +#: src/rs-actions.c:941 msgid "_About" msgstr "_Tietoja" +#: src/rs-actions.c:949 +msgid "_Zoom to fit" +msgstr "_Zoomaa sopimaan" + +#: src/rs-actions.c:950 msgid "_Iconbox" msgstr "_Pikkukuvat" +#: src/rs-actions.c:951 msgid "_Toolbox" msgstr "_Ty?kalut" +#: src/rs-actions.c:952 msgid "_Fullscreen" msgstr "_Kokoruutu" +#: src/rs-actions.c:953 msgid "_Exposure mask" msgstr "_Valotusmaski" +#: src/rs-actions.c:954 msgid "_Split" msgstr "_Jaa" +#: src/rs-actions.c:956 +msgid "_Lights out" +msgstr "" + +#: src/rs-actions.c:962 msgid "Name" msgstr "" +#: src/rs-actions.c:963 msgid "Timestamp" msgstr "" +#: src/rs-actions.c:964 #, fuzzy msgid "ISO" msgstr "ISO%d" +#: src/rs-actions.c:965 msgid "Aperture" msgstr "" +#: src/rs-actions.c:966 msgid "Focallength" msgstr "" +#: src/rs-actions.c:967 msgid "Shutterspeed" msgstr "" +#~ msgid "Background renderer active" +#~ msgstr "Taustan render?ij? on aktiivinen" + +#~ msgid "Preload photos" +#~ msgstr "Esilataa kuvat" + +#~ msgid "Filename:" +#~ msgstr "Tiedoston nimi:" + +#~ msgid "Save uncompressed TIFF" +#~ msgstr "Tallenna pakkaamaton TIFF" + +#~ msgid "JPEG Quality:" +#~ msgstr "JPEG-laatu" + +#~ msgid "File export canceled" +#~ msgstr "Tiedoston vienti keskeytettiin" + +#~ msgid "JPEG (Joint Photographic Experts Group)" +#~ msgstr "JPEG (Joint Photographic Experts Group)" + +#~ msgid "PNG (Portable Network Graphics)" +#~ msgstr "PNG (Portable Network Graphics)" + +#~ msgid "8-bit TIFF (Tagged Image File Format)" +#~ msgstr "8-bittinen TIFF (Tagged Image File Format)" + +#~ msgid "16-bit TIFF (Tagged Image File Format)" +#~ msgstr "16-bit TIFF (Tagged Image File Format)" + +#~ msgid "Rotate the photo 180 degrees" +#~ msgstr "K??nn? kuvaa 180 astetta" + +#~ msgid "Reset this setting" +#~ msgstr "Palauta oletusarvo" + +#~ msgid "Warmth/tint" +#~ msgstr "V?ril?mp?tila/v?ri" + +#~ msgid "_Zoom to 100%" +#~ msgstr "_Zoomaa 100%" + #~ msgid "%dmm " #~ msgstr "%dmm " @@ -875,9 +1180,6 @@ #~ msgid "Hasselblad" #~ msgstr "Hasselblad" -#~ msgid "Opening directory..." -#~ msgstr "Avaa kansio" - #~ msgid "Use dark theme" #~ msgstr "K?yt? tummaa teemaa" Modified: trunk/po/fr.po =================================================================== --- trunk/po/fr.po 2009-09-27 21:47:00 UTC (rev 2670) +++ trunk/po/fr.po 2009-09-27 22:10:12 UTC (rev 2671) @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: Rawstudio 1.1.1\n" "Report-Msgid-Bugs-To: rawstudio-dev at rawstudio.org\n" -"POT-Creation-Date: 2009-01-11 04:26+0100\n" +"POT-Creation-Date: 2009-09-28 00:09+0200\n" "PO-Revision-Date: 2008-04-17 23:01+0100\n" "Last-Translator: Edouard Gomez \n" "Language-Team: Rawstudio development \n" @@ -17,30 +17,47 @@ "X-Poedit-Language: French\n" "X-Poedit-Country: FRANCE\n" +#: src/filename.c:280 #, c-format msgid "%f - Original filename" msgstr "%f - Nom de fichier original" +#: src/filename.c:281 #, c-format msgid "%2c - Incremental counter" msgstr "%2c - Compteur incr?mental" +#: src/filename.c:282 #, c-format msgid "%s - Setting id (A, B or C)" msgstr "%s - Id de param?tres (A, B ou C)" +#: src/filename.c:283 +#, c-format +msgid "%d - Date from EXIF (YYYY-MM-DD)" +msgstr "" + +#: src/filename.c:284 +msgid "%t - Time from EXIF (HH:MM:SS)" +msgstr "" + +#: src/gtk-helper.c:420 msgid "Select color profile" msgstr "S?lectionner un profil colorim?trique" +#: src/gtk-helper.c:450 msgid "All files" msgstr "Tous les fichiers" +#: src/gtk-helper.c:451 msgid "Color profiles (icc and icm)" msgstr "Profils colorim?triques (ICC et ICM)" +#: src/gtk-helper.c:465 msgid "Not a valid color profile." msgstr "Profil colorim?trique invalide." +#: src/gtk-helper.c:466 msgid "" "The file you selected does not appear to be a valid color profile for this " "version of Rawstudio." @@ -48,254 +65,305 @@ "Le fichier s?lectionn? n'est pas un profil colorim?trique valide pour cette " "version de Rawstudio." +#: src/gtk-helper.c:568 msgid "Enable color management (experimental)" msgstr "Activer la gestion colorim?trique (exp?rimental)" +#: src/gtk-helper.c:576 msgid "Input profile" msgstr "Profil d'entr?e" +#: src/gtk-helper.c:579 msgid "BuiltInRGBProfile" msgstr "Profil RGB inclus" +#: src/gtk-helper.c:629 msgid "Display profile" msgstr "Profil d'affichage" +#: src/gtk-helper.c:632 src/gtk-helper.c:685 msgid "sRGB" msgstr "sRGB" +#: src/gtk-helper.c:682 msgid "Export profile" msgstr "Profil d'export" +#: src/gtk-helper.c:734 msgid "Intent" msgstr "Intention" +#: src/gtk-helper.c:737 msgid "Perceptual" msgstr "Perceptuel" +#: src/gtk-helper.c:738 msgid "Relative colormetric" msgstr "Colorim?trie relative" +#: src/gtk-helper.c:739 src/rs-actions.c:347 msgid "Saturation" msgstr "Saturation" +#: src/gtk-helper.c:740 msgid "Absolute colormetric" msgstr "Colorim?trie absolue" -msgid "Background renderer active" -msgstr "Rendu actif en t?che de fond" - +#: src/gtk-interface.c:182 msgid "Opening photo ..." msgstr "Ouverture de photo" +#: src/gtk-interface.c:197 msgid "Couldn't open photo" msgstr "N'a pas pu ouvrir la photo" +#: src/gtk-interface.c:202 msgid "Image opened" msgstr "Image ouverte" +#: src/gtk-interface.c:203 src/gtk-interface.c:830 src/gtk-interface.c:953 +#: src/gtk-interface.c:995 msgid "Rawstudio" msgstr "Rawstudio" +#: src/gtk-interface.c:273 #, c-format msgid "Changed photo priority (*)" msgstr "Priorit? de photo chang?e (*)" +#: src/gtk-interface.c:275 #, c-format msgid "Changed photo priority (D)" msgstr "Priorit? de photo chang?e (D)" +#: src/gtk-interface.c:277 #, c-format msgid "Changed photo priority (%d)" msgstr "Priorit? de photo chang?e (%d)" +#: src/gtk-interface.c:492 +msgid "Directory:" +msgstr "R?pertoire :" + +#: src/gtk-interface.c:494 src/rs-batch.c:980 +msgid "Choose output directory" +msgstr "Choisir le r?pertoire d'enregistrement" + +#: src/gtk-interface.c:510 src/rs-batch.c:991 +msgid "Filename template:" +msgstr "Motif de nom de fichier :" + +#: src/gtk-interface.c:523 +msgid "Filename example:" +msgstr "Exemple de nom de fichier :" + +#: src/gtk-interface.c:534 +msgid "File type:" +msgstr "Type de fichier :" + +#: src/gtk-interface.c:595 msgid "Preferences" msgstr "Pr?f?rences" +#: src/gtk-interface.c:610 msgid "Preview background color:" msgstr "Couleur d'arri?re plan de la pr?visualisation :" +#: src/gtk-interface.c:625 msgid "Histogram height:" msgstr "Hauteur de l'histogramme :" +#: src/gtk-interface.c:635 msgid "Show filenames in iconview" msgstr "Montrer le nom de fichier dans la vue par ic?nes" +#: src/gtk-interface.c:640 msgid "Use system theme" msgstr "Utiliser le th?me syst?me" +#: src/gtk-interface.c:647 msgid "Place cache in home directory" msgstr "Placer le cache dans le r?pertoire de l'utilisateur" +#: src/gtk-interface.c:650 msgid "Load 8 bit photos (jpeg, png, etc)" msgstr "Charger les photos 8 bit (JPEG, PNG, etc...)" -msgid "Preload photos" -msgstr "Pr?charger les photos" - -msgid "Directory:" -msgstr "R?pertoire :" - -msgid "Filename:" -msgstr "Nom de fichier :" - -msgid "File type:" -msgstr "Type de fichier :" - -#. set default -msgid "Filename example:" -msgstr "Exemple de nom de fichier :" - -msgid "Save uncompressed TIFF" -msgstr "Sauvegarder en TIFF non compress?" - +#: src/gtk-interface.c:718 msgid "General" msgstr "G?n?ral" #. gtk_notebook_append_page(GTK_NOTEBOOK(notebook), batch_page, gtk_label_new(_("Batch"))); +#: src/gtk-interface.c:720 msgid "Quick export" msgstr "Exportation rapide" +#: src/gtk-interface.c:721 msgid "Colors" msgstr "Couleurs" +#: src/gtk-interface.c:955 src/gtk-interface.c:1178 +msgid "Opening directory..." +msgstr "Ouverture du r?pertoire..." + +#: src/gtk-interface.c:965 src/gtk-interface.c:1123 src/gtk-interface.c:1193 +msgid "Ready" +msgstr "Pr?t" + +#: src/gtk-interface.c:1050 msgid "Open recursive" msgstr "Ouvrir r?cursivement" +#: src/gtk-interface.c:1059 msgid "Tools" msgstr "Outils" +#: src/gtk-interface.c:1060 msgid "Batch" msgstr "Lot" +#: src/gtk-interface.c:1061 msgid "Open" msgstr "Ouvrir" -msgid "Ready" -msgstr "Pr?t" - +#: src/gtk-progress.c:63 src/gtk-progress.c:99 src/gtk-progress.c:122 msgid "Progress" msgstr "Progr?s" -msgid "JPEG Quality:" -msgstr "Qualit? JPEG" +#. FIXME: Calculate some sensible size - maybe even remember user resizes +#: src/rs-save-dialog.c:93 src/rs-toolbox.c:371 +msgid "Export File" +msgstr "Exporter le fichier" +#: src/rs-save-dialog.c:244 +#, fuzzy, c-format +msgid "Exporting to %s" +msgstr "Exportation du fichier en court..." + +#: src/rs-save-dialog.c:360 msgid "Keep aspect" msgstr "Garder l'aspect" +#: src/rs-save-dialog.c:378 msgid "Width:" msgstr "Largeur :" +#: src/rs-save-dialog.c:380 msgid "Height:" msgstr "Hauteur :" +#: src/rs-save-dialog.c:382 msgid "Percent:" msgstr "Pourcentage :" -msgid "Export File" -msgstr "Exporter le fichier" - -msgid "Exporting file ..." -msgstr "Exportation du fichier en court..." - -msgid "File exported" -msgstr "Fichier export?" - -msgid "File export canceled" -msgstr "Exportation du fichier annul?" - -msgid "JPEG (Joint Photographic Experts Group)" -msgstr "JPEG (Joint Photographic Experts Group)" - -msgid "PNG (Portable Network Graphics)" -msgstr "PNG (Portable Network Graphics)" - -msgid "8-bit TIFF (Tagged Image File Format)" -msgstr "8-bit TIFF (Tagged Image File Format)" - -msgid "16-bit TIFF (Tagged Image File Format)" -msgstr "16-bit TIFF (Tagged Image File Format)" - +#: src/rs-batch.c:206 src/rs-actions.c:737 msgid "A" msgstr "A" +#: src/rs-batch.c:209 src/rs-actions.c:738 msgid "B" msgstr "B" +#: src/rs-batch.c:212 src/rs-actions.c:739 msgid "C" msgstr "C" +#: src/rs-batch.c:437 msgid "Processing photos" msgstr "Photos en cours de traitement" +#: src/rs-batch.c:441 msgid "Cancel" msgstr "Annuler" +#: src/rs-batch.c:446 msgid "Last image:" msgstr "Derni?re image" +#: src/rs-batch.c:479 #, c-format msgid "Time left: %dh %dm %ds" msgstr "Temps restant: %dh %dm %ds" +#: src/rs-batch.c:483 msgid "Time left: ..." msgstr "Temps restant: ..." +#: src/rs-batch.c:495 #, c-format msgid "Loading %s ..." msgstr "Chargement de %s ..." +#: src/rs-batch.c:536 #, c-format msgid "Saving %s ..." msgstr "Sauvegarde de %s ..." +#: src/rs-batch.c:634 msgid "Icon" msgstr "Ic?ne" +#: src/rs-batch.c:641 msgid "Filename" msgstr "Nom de fichier" +#: src/rs-batch.c:648 msgid "Setting" msgstr "Param?tre" +#: src/rs-batch.c:738 msgid "Start" msgstr "D?marrer" +#: src/rs-batch.c:741 msgid "Remove" msgstr "Supprimer" +#: src/rs-batch.c:744 msgid "Remove all" msgstr "Supprimer tout" +#: src/rs-batch.c:869 msgid "Photo size" msgstr "Taille de la photo" +#: src/rs-batch.c:877 msgid "Constant scale" msgstr "Rapport constant" +#: src/rs-batch.c:878 msgid "Constant width" msgstr "Largeur constante" +#: src/rs-batch.c:879 msgid "Constant height" msgstr "Hauteur constante" +#: src/rs-batch.c:880 msgid "Maximum size" msgstr "Taille maximum" +#: src/rs-batch.c:892 msgid "Photo width:" msgstr "Largeur de la photo :" +#: src/rs-batch.c:894 src/rs-batch.c:903 msgid "pixels" msgstr "pixels" +#: src/rs-batch.c:901 msgid "Photo height:" msgstr "Hauteur de la photo :" +#: src/rs-batch.c:910 msgid "Photo scale:" msgstr "Rapport de la photo :" +#: src/rs-batch.c:912 msgid "%" msgstr "%" +#: src/rs-batch.c:948 #, c-format msgid "" "Constant width:\n" @@ -304,6 +372,7 @@ "Largeur constante:\n" "%d" +#: src/rs-batch.c:951 #, c-format msgid "" "Constant height:\n" @@ -312,6 +381,7 @@ "Hauteur constante :\n" "%d" +#: src/rs-batch.c:954 #, c-format msgid "" "Constant Scale:\n" @@ -320,6 +390,7 @@ "Rapport constant :\n" "%d" +#: src/rs-batch.c:958 #, c-format msgid "" "Maximum size:\n" @@ -328,66 +399,75 @@ "Taille maximum :\n" "%d x %d" -msgid "Choose output directory" -msgstr "Choisir le r?pertoire d'enregistrement" - +#: src/rs-batch.c:987 msgid "Output directory:" msgstr "R?pertoire d'enregistrement" -msgid "Filename template:" -msgstr "Motif de nom de fichier :" - +#: src/rs-batch.c:1012 msgid "Change" msgstr "Changer" +#: src/rs-batch.c:1017 msgid "Export dimensions" msgstr "Exporter les dimensions" #. All +#: src/rs-store.c:275 src/rs-store.c:834 #, c-format msgid "* (%d)" msgstr "* (%d)" +#: src/rs-store.c:276 msgid "All photos (excluding deleted)" msgstr "Toutes les photos (y compris celles supprim?es)" #. 1 +#: src/rs-store.c:279 src/rs-store.c:835 #, c-format msgid "1 (%d)" msgstr "1 (%d)" +#: src/rs-store.c:280 msgid "Priority 1 photos" msgstr "Photos de priorit? 1" #. 2 +#: src/rs-store.c:283 src/rs-store.c:836 #, c-format msgid "2 (%d)" msgstr "2 (%d)" +#: src/rs-store.c:284 msgid "Priority 2 photos" msgstr "Photos de priorit? 2" #. 3 +#: src/rs-store.c:287 src/rs-store.c:837 #, c-format msgid "3 (%d)" msgstr "3 (%d)" +#: src/rs-store.c:288 msgid "Priority 3 photos" msgstr "Photos de priorit? 3" #. Unsorted +#: src/rs-store.c:291 src/rs-store.c:838 #, c-format msgid "U (%d)" msgstr "U (%d)" +#: src/rs-store.c:292 msgid "Unprioritized photos" msgstr "Photos sans priorit?" #. Deleted +#: src/rs-store.c:295 src/rs-store.c:839 #, c-format msgid "D (%d)" msgstr "D (%d)" +#: src/rs-store.c:296 msgid "Deleted photos" msgstr "Photos supprim?es" @@ -396,233 +476,336 @@ #. understanding of our interface. I was thinking about adding a button instead #. that said "ROCK ON!" to instantly play "AC/DC - Highway to Hell", but I #. believe this will be better for the end user +#: src/rs-store.c:331 msgid "Priorities" msgstr "Priorit?s" +#: src/rs-store.c:527 #, c-format msgid "" "%s\n" "\n" msgstr "" +#: src/rs-store.c:530 #, c-format msgid "Focal length: %dmm\n" msgstr "" +#: src/rs-store.c:533 #, c-format msgid "Shutter speed: %.1fs\n" msgstr "" +#: src/rs-store.c:535 #, c-format msgid "Shutter speed: 1/%.0fs\n" msgstr "" +#: src/rs-store.c:538 #, c-format msgid "Aperture: F/%.01f\n" msgstr "" +#: src/rs-store.c:541 #, c-format msgid "ISO: %u\n" msgstr "" +#: src/rs-store.c:544 #, c-format msgid "Time: %s" msgstr "" +#: src/rs-preview-widget.c:505 +msgid "Display Navigation" +msgstr "" + +#: src/rs-preview-widget.c:756 +msgid "Light out mode not available" +msgstr "" + +#: src/rs-preview-widget.c:757 +msgid "" +"Your setup doesn't seem to support RGBA visuals and/or compositing. Consult " +"your operating system manual for enabling RGBA visuals and compositing." +msgstr "" + +#: src/rs-preview-widget.c:987 msgid "Size" msgstr "Taille" +#: src/rs-preview-widget.c:995 msgid "-" msgstr "-" +#: src/rs-preview-widget.c:1001 msgid "Grid" msgstr "Grille" +#: src/rs-preview-widget.c:1006 msgid "None" msgstr "Aucune" +#: src/rs-preview-widget.c:1007 msgid "Golden sections" msgstr "Sections d'or" +#: src/rs-preview-widget.c:1008 msgid "Rule of thirds" msgstr "R?gle des tiers" +#: src/rs-preview-widget.c:1009 msgid "Golden triangles #1" msgstr "Triangles d'or #1" +#: src/rs-preview-widget.c:1010 msgid "Golden triangles #2" msgstr "Triangles d'or #2" +#: src/rs-preview-widget.c:1011 msgid "Harmonious triangles #1" msgstr "Triangles harmonieux #1" +#: src/rs-preview-widget.c:1012 msgid "Harmonious triangles #2" msgstr "Triangles harmonieux #2" +#: src/rs-preview-widget.c:1021 msgid "Aspect" msgstr "Aspect" +#: src/rs-preview-widget.c:1026 msgid "Freeform" msgstr "Libre" +#: src/rs-preview-widget.c:1027 msgid "ISO paper (A4)" msgstr "A4" +#: src/rs-preview-widget.c:1028 msgid "3:2 (35mm)" msgstr "3:2 (35mm)" +#: src/rs-preview-widget.c:1029 msgid "4:3" msgstr "4:3" +#: src/rs-preview-widget.c:1030 msgid "10:8 (SXGA)" msgstr "10:8 (SXGA)" +#: src/rs-preview-widget.c:1031 msgid "16:10 (Wide XGA)" msgstr "16:10 (Wide XGA)" +#: src/rs-preview-widget.c:1032 msgid "8:3 (Dualhead XGA)" msgstr "8:3 (Dualhead XGA)" +#: src/rs-preview-widget.c:1033 msgid "1:1" msgstr "1:1" +#: src/rs-preview-widget.c:1034 msgid "Golden rectangle" msgstr "Rectangle d'or" +#: src/rs-preview-widget.c:1042 src/rs-preview-widget.c:1053 msgid "Crop" msgstr "Recadrer" +#: src/rs-preview-widget.c:1044 msgid "Don't crop" msgstr "Annuler le recadrage" -msgid "Flip the photo over the x-axis" -msgstr "Retourne la photo selon l'axe horizontal" +#. Snapshot labels +#: src/rs-toolbox.c:157 src/rs-actions.c:972 +msgid " A " +msgstr " A " -msgid "Mirror the photo over the y-axis" -msgstr "Retourne la photo selon l'axe vertical" +#: src/rs-toolbox.c:158 src/rs-actions.c:973 +msgid " B " +msgstr " B " -msgid "Rotate the photo 90 degrees clockwise" -msgstr "Tourne la photo de 90?" +#: src/rs-toolbox.c:159 src/rs-actions.c:974 +msgid " C " +msgstr " C " -msgid "Rotate the photo 180 degrees" -msgstr "Tourne la photo de 180?" +#. FIXME: Get height from gconf +#: src/rs-toolbox.c:184 +msgid "Histogram" +msgstr "Histogramme" -msgid "Rotate the photo 90 degrees counter clockwise" -msgstr "Tourne la photo de 270?" +#: src/rs-toolbox.c:297 +#, fuzzy +msgid "Reset" +msgstr "R?initialiser la courbe" -msgid "Transforms" -msgstr "Transformations" - -msgid "Reset this setting" -msgstr "R?initialiser ce param?tre" - +#: src/rs-toolbox.c:415 src/rs-toolbox.c:540 msgid "Open curve ..." msgstr "Ouvrir la courbe ..." +#: src/rs-toolbox.c:546 msgid "Save curve as ..." msgstr "Sauvegarder la courbe sous ..." +#: src/rs-toolbox.c:552 msgid "Reset curve" msgstr "R?initialiser la courbe" +#: src/rs-toolbox.c:557 msgid "Auto adjust curve ends" msgstr "Ajustement automatique des extr?mit?s de courbe" -msgid " A " -msgstr " A " +#. Pack everything nice +#: src/rs-toolbox.c:637 +#, fuzzy +msgid "Basic" +msgstr "Lot" -msgid " B " -msgstr " B " +#: src/rs-toolbox.c:638 +msgid "Channel Mixer" +msgstr "" -msgid " C " -msgstr " C " +#: src/rs-toolbox.c:639 src/rs-actions.c:353 +msgid "Curve" +msgstr "Courbe" -#. Build GUI -msgid "Exposure" -msgstr "Exposition" +#: src/rs-toolbox.c:683 +msgid "Flip the photo over the x-axis" +msgstr "Retourne la photo selon l'axe horizontal" -msgid "Hue" -msgstr "Teinte" +#: src/rs-toolbox.c:684 +msgid "Mirror the photo over the y-axis" +msgstr "Retourne la photo selon l'axe vertical" -msgid "Contrast" -msgstr "Contraste" +#: src/rs-toolbox.c:685 +msgid "Rotate the photo 90 degrees clockwise" +msgstr "Tourne la photo de 90?" -#. Box it! -msgid "Warmth/tint" -msgstr "Temp?rature/Teinte" +#: src/rs-toolbox.c:686 +msgid "Rotate the photo 90 degrees counter clockwise" +msgstr "Tourne la photo de 270?" -msgid "Sharpen" -msgstr "Nettet?" +#: src/rs-toolbox.c:698 +msgid "Transforms" +msgstr "Transformations" -msgid "Curve" -msgstr "Courbe" - -msgid "Histogram" -msgstr "Histogramme" - +#: src/rs-actions.c:141 msgid "Open directory" msgstr "Ouvrir un r?pertoire" +#: src/rs-actions.c:198 +msgid "File exported" +msgstr "Fichier export?" + +#: src/rs-actions.c:203 src/rs-actions.c:222 +#, fuzzy +msgid "Export failed" +msgstr "Exporter le fichier" + +#: src/rs-actions.c:232 msgid "Error exporting" msgstr "Erreur lors de l'export" +#: src/rs-actions.c:233 msgid "Error exporting photo to gimp." msgstr "Erreur lors de l'export vers GIMP" +#: src/rs-actions.c:256 src/rs-actions.c:274 msgid "Deleting photos" msgstr "Supression de photos" +#: src/rs-actions.c:257 msgid "Your files will be permanently deleted!" msgstr "Vos fichiers seront effac?s d?finitivement." +#: src/rs-actions.c:259 msgid "Delete photos" msgstr "Supprimer les photos" +#: src/rs-actions.c:333 msgid "Copied settings" msgstr "Param?tres copi?s" +#. Build GUI +#: src/rs-actions.c:346 +msgid "Exposure" +msgstr "Exposition" + +#: src/rs-actions.c:348 +msgid "Hue" +msgstr "Teinte" + +#: src/rs-actions.c:349 +msgid "Contrast" +msgstr "Contraste" + +#: src/rs-actions.c:350 msgid "White balance" msgstr "Balance des blancs" +#: src/rs-actions.c:351 +msgid "Sharpen" +msgstr "Nettet?" + +#: src/rs-actions.c:352 +msgid "Channel mixer" +msgstr "" + +#: src/rs-actions.c:385 msgid "Select settings to paste" msgstr "S?lectionner les param?tres ? copier" +#: src/rs-actions.c:443 msgid "Pasted settings" msgstr "Param?tres coll?s" +#: src/rs-actions.c:446 msgid "Nothing to paste" msgstr "Rien ? coller" +#: src/rs-actions.c:449 msgid "Buffer empty" msgstr "Buffer vide" +#: src/rs-actions.c:492 msgid "Adjusting to auto white balance" msgstr "Balance des blancs automatique" +#: src/rs-actions.c:502 msgid "No white balance to set from" msgstr "Aucune balance des blancs disponible" +#: src/rs-actions.c:505 msgid "Adjusting to camera white balance" msgstr "Balance des blancs de l'appareil photo" +#: src/rs-actions.c:683 msgid "Showing exposure mask" msgstr "Affichage du masque d'exposition" +#: src/rs-actions.c:685 msgid "Hiding exposure mask" msgstr "Masquage du masque d'exposition" +#: src/rs-actions.c:715 #, c-format msgid " %s added to batch queue" msgstr "%s ajout? au traitement par lot" +#: src/rs-actions.c:717 #, c-format msgid "%s already added to batch queue" msgstr "%s d?j? ajout? au traitement par lot" +#: src/rs-actions.c:724 src/rs-actions.c:796 #, c-format msgid "%d photos added to batch queue" msgstr "%d photos ajout?es au traitement par lot" +#: src/rs-actions.c:761 msgid "" "Select which settings to\n" "add to batch queue" @@ -630,188 +813,310 @@ "S?lectionner les param?tres\n" "? ajouter au traitement par lot" +#: src/rs-actions.c:814 msgid "Removed from batch queue" msgstr "Supprim? du traitement par lot" +#: src/rs-actions.c:816 msgid "Not in batch queue" msgstr "Pas dans le traitement par lot" +#: src/rs-actions.c:850 msgid "A raw image converter for GTK+/GNOME" msgstr "Un convertisseur de fichier RAW pour GTK+/GNOME" +#: src/rs-actions.c:881 msgid "_File" msgstr "_Fichier" +#: src/rs-actions.c:882 msgid "_Edit" msgstr "_?dition" +#: src/rs-actions.c:883 msgid "_Photo" msgstr "_Photo" +#: src/rs-actions.c:884 msgid "_Set Priority" msgstr "Choisir la _priorit?" +#: src/rs-actions.c:885 msgid "_White Balance" msgstr "_Balance des blancs" +#: src/rs-actions.c:886 msgid "_View" msgstr "_Vue" +#: src/rs-actions.c:887 msgid "_Sort by" msgstr "" +#: src/rs-actions.c:888 msgid "_Batch" msgstr "_Traitement par lot" +#: src/rs-actions.c:889 msgid "_Help" msgstr "_Aide" #. File menu +#: src/rs-actions.c:894 msgid "_Open Directory" msgstr "Ouvrir un r?pertoire" +#: src/rs-actions.c:895 msgid "_Quick Export" msgstr "_Export rapide" +#: src/rs-actions.c:896 msgid "_Export As" msgstr "Exporter _sous" +#: src/rs-actions.c:897 msgid "_Export to Gimp" msgstr "Exporter vers _GIMP" +#: src/rs-actions.c:898 msgid "_Reload directory" msgstr "_Recharger le r?pertoire" +#: src/rs-actions.c:899 msgid "_Delete flagged photos" msgstr "_Supprimer les photos marqu?es" +#: src/rs-actions.c:900 msgid "_Quit" msgstr "_Quitter" #. Edit menu +#: src/rs-actions.c:903 msgid "_Revert settings" msgstr "Revenir aux _anciens param?tres" +#: src/rs-actions.c:904 msgid "_Copy settings" msgstr "Copier les param?tres" +#: src/rs-actions.c:905 msgid "_Paste settings" msgstr "Coller les param?tres" +#: src/rs-actions.c:906 msgid "_Reset settings" msgstr "R?initialiser les param?tres" +#: src/rs-actions.c:907 msgid "_Preferences" msgstr "_Pr?f?rences" #. Photo menu +#: src/rs-actions.c:910 msgid "_Flag photo for deletion" msgstr "Marquer la photo pour _suppression" +#: src/rs-actions.c:911 msgid "_1" msgstr "_1" +#: src/rs-actions.c:912 msgid "_2" msgstr "_2" +#: src/rs-actions.c:913 msgid "_3" msgstr "_3" +#: src/rs-actions.c:914 msgid "_Remove priority" msgstr "_Supprimer la priorit?" +#: src/rs-actions.c:915 msgid "_Auto" msgstr "_Auto" +#: src/rs-actions.c:916 msgid "_Camera" msgstr "_Appareil" +#: src/rs-actions.c:917 msgid "_Crop" msgstr "_Cadrer" +#: src/rs-actions.c:918 msgid "_Uncrop" msgstr "Annuler le _cadrage" +#: src/rs-actions.c:919 msgid "_Straighten" msgstr "_Redresser" +#: src/rs-actions.c:920 msgid "_Unstraighten" msgstr "Annuler le _redressement" +#: src/rs-actions.c:921 msgid "_Group" msgstr "_Grouper" +#: src/rs-actions.c:922 msgid "_Ungroup" msgstr "_D?grouper" +#: src/rs-actions.c:923 #, fuzzy msgid "_Auto group" msgstr "_D?grouper" +#: src/rs-actions.c:924 +#, fuzzy +msgid "_Tag Photo..." +msgstr "_Photo" + +#: src/rs-actions.c:925 +msgid "Rotate Clockwise" +msgstr "" + +#: src/rs-actions.c:926 +#, fuzzy +msgid "Rotate Counter Clockwise" +msgstr "Tourne la photo de 90?" + +#: src/rs-actions.c:927 +msgid "Flip" +msgstr "" + +#: src/rs-actions.c:928 +msgid "Mirror" +msgstr "" + #. View menu +#: src/rs-actions.c:931 msgid "_Previous photo" msgstr "Photo _pr?c?dente" +#: src/rs-actions.c:932 msgid "_Next Photo" msgstr "Photo _suivante" -msgid "_Zoom to fit" -msgstr "Zoom ? la taille de la _fen?tre" - -msgid "_Zoom to 100%" -msgstr "_Zoom 100%" - #. Batch menu +#: src/rs-actions.c:935 msgid "_Add to batch queue" msgstr "Ajouter au traitement par lot" +#: src/rs-actions.c:936 msgid "_Add current view to queue" msgstr "Ajouter la _vue courante au traitement par lot" +#: src/rs-actions.c:937 msgid "_Remove from batch queue" msgstr "Supprimer du traitement par lot" +#: src/rs-actions.c:938 msgid "_Start" msgstr "_D?marrer" #. help menu +#: src/rs-actions.c:941 msgid "_About" msgstr "? _propos" +#: src/rs-actions.c:949 +msgid "_Zoom to fit" +msgstr "Zoom ? la taille de la _fen?tre" + +#: src/rs-actions.c:950 msgid "_Iconbox" msgstr "_Ic?nes" +#: src/rs-actions.c:951 msgid "_Toolbox" msgstr "_Outils" +#: src/rs-actions.c:952 msgid "_Fullscreen" msgstr "Plein _?cran" +#: src/rs-actions.c:953 msgid "_Exposure mask" msgstr "_Masque d'exposition" +#: src/rs-actions.c:954 msgid "_Split" msgstr "_S?parer" +#: src/rs-actions.c:956 +msgid "_Lights out" +msgstr "" + +#: src/rs-actions.c:962 msgid "Name" msgstr "" +#: src/rs-actions.c:963 msgid "Timestamp" msgstr "" +#: src/rs-actions.c:964 #, fuzzy msgid "ISO" msgstr "ISO%d" +#: src/rs-actions.c:965 msgid "Aperture" msgstr "" +#: src/rs-actions.c:966 msgid "Focallength" msgstr "" +#: src/rs-actions.c:967 msgid "Shutterspeed" msgstr "" +#~ msgid "Background renderer active" +#~ msgstr "Rendu actif en t?che de fond" + +#~ msgid "Preload photos" +#~ msgstr "Pr?charger les photos" + +#~ msgid "Filename:" +#~ msgstr "Nom de fichier :" + +#~ msgid "Save uncompressed TIFF" +#~ msgstr "Sauvegarder en TIFF non compress?" + +#~ msgid "JPEG Quality:" +#~ msgstr "Qualit? JPEG" + +#~ msgid "File export canceled" +#~ msgstr "Exportation du fichier annul?" + +#~ msgid "JPEG (Joint Photographic Experts Group)" +#~ msgstr "JPEG (Joint Photographic Experts Group)" + +#~ msgid "PNG (Portable Network Graphics)" +#~ msgstr "PNG (Portable Network Graphics)" + +#~ msgid "8-bit TIFF (Tagged Image File Format)" +#~ msgstr "8-bit TIFF (Tagged Image File Format)" + +#~ msgid "16-bit TIFF (Tagged Image File Format)" +#~ msgstr "16-bit TIFF (Tagged Image File Format)" + +#~ msgid "Rotate the photo 180 degrees" +#~ msgstr "Tourne la photo de 180?" + +#~ msgid "Reset this setting" +#~ msgstr "R?initialiser ce param?tre" + +#~ msgid "Warmth/tint" +#~ msgstr "Temp?rature/Teinte" + +#~ msgid "_Zoom to 100%" +#~ msgstr "_Zoom 100%" + #~ msgid "%dmm " #~ msgstr "%dmm " @@ -865,6 +1170,3 @@ #~ msgid "Hasselblad" #~ msgstr "Hasselblad" - -#~ msgid "Opening directory..." -#~ msgstr "Ouverture du r?pertoire..." Modified: trunk/po/it.po =================================================================== --- trunk/po/it.po 2009-09-27 21:47:00 UTC (rev 2670) +++ trunk/po/it.po 2009-09-27 22:10:12 UTC (rev 2671) @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: Rawstudio 1.1.1\n" "Report-Msgid-Bugs-To: rawstudio-dev at rawstudio.org\n" -"POT-Creation-Date: 2009-01-11 04:26+0100\n" +"POT-Creation-Date: 2009-09-28 00:09+0200\n" "PO-Revision-Date: 2008-04-19 19:26+0100\n" "Last-Translator: Simone Contini \n" "Language-Team: Rawstudio development \n" @@ -17,30 +17,47 @@ "X-Poedit-Language: Italian\n" "X-Poedit-Country: ITALY\n" +#: src/filename.c:280 #, c-format msgid "%f - Original filename" msgstr "%f - Nome file originale" +#: src/filename.c:281 #, c-format msgid "%2c - Incremental counter" msgstr "%2c - Contatore incrementale" +#: src/filename.c:282 #, c-format msgid "%s - Setting id (A, B or C)" msgstr "%s - ID impostazione (A, B o C)" +#: src/filename.c:283 +#, c-format +msgid "%d - Date from EXIF (YYYY-MM-DD)" +msgstr "" + +#: src/filename.c:284 +msgid "%t - Time from EXIF (HH:MM:SS)" +msgstr "" + +#: src/gtk-helper.c:420 msgid "Select color profile" msgstr "Selezione del profilo di colore" +#: src/gtk-helper.c:450 msgid "All files" msgstr "Tutti i file" +#: src/gtk-helper.c:451 msgid "Color profiles (icc and icm)" msgstr "Profili di colore (icc e icm)" +#: src/gtk-helper.c:465 msgid "Not a valid color profile." msgstr "Profilo colore non valido." +#: src/gtk-helper.c:466 msgid "" "The file you selected does not appear to be a valid color profile for this " "version of Rawstudio." @@ -48,254 +65,305 @@ "Il file selezionato non ? un profilo di colore valido per la versione di " "Rawstudio in uso." +#: src/gtk-helper.c:568 msgid "Enable color management (experimental)" msgstr "Abilita gestione del colore (sperimentale)" +#: src/gtk-helper.c:576 msgid "Input profile" msgstr "Profilo d'ingresso" +#: src/gtk-helper.c:579 msgid "BuiltInRGBProfile" msgstr "Profilo RGB incorporato" +#: src/gtk-helper.c:629 msgid "Display profile" msgstr "Profilo di visualizzazione" +#: src/gtk-helper.c:632 src/gtk-helper.c:685 msgid "sRGB" msgstr "sRGB" +#: src/gtk-helper.c:682 msgid "Export profile" msgstr "Profilo di esportazione" +#: src/gtk-helper.c:734 msgid "Intent" msgstr "Intento" +#: src/gtk-helper.c:737 msgid "Perceptual" msgstr "Percettivo" +#: src/gtk-helper.c:738 msgid "Relative colormetric" msgstr "Colorimetrico relativo" +#: src/gtk-helper.c:739 src/rs-actions.c:347 msgid "Saturation" msgstr "Saturazione" +#: src/gtk-helper.c:740 msgid "Absolute colormetric" msgstr "Colorimetrico assoluto" -msgid "Background renderer active" -msgstr "Visualizzazione in sottofondo attiva" - +#: src/gtk-interface.c:182 msgid "Opening photo ..." msgstr "Apertura foto in corso..." +#: src/gtk-interface.c:197 msgid "Couldn't open photo" msgstr "Impossibile aprire la foto" +#: src/gtk-interface.c:202 msgid "Image opened" msgstr "Immagine caricata" +#: src/gtk-interface.c:203 src/gtk-interface.c:830 src/gtk-interface.c:953 +#: src/gtk-interface.c:995 msgid "Rawstudio" msgstr "Rawstudio" +#: src/gtk-interface.c:273 #, c-format msgid "Changed photo priority (*)" msgstr "Cambiata la priorit? della foto (*)" +#: src/gtk-interface.c:275 #, c-format msgid "Changed photo priority (D)" msgstr "Cambiata la priorit? della foto (D)" +#: src/gtk-interface.c:277 #, c-format msgid "Changed photo priority (%d)" msgstr "Cambiata la priorit? della foto (%d)" +#: src/gtk-interface.c:492 +msgid "Directory:" +msgstr "Cartella:" + +#: src/gtk-interface.c:494 src/rs-batch.c:980 +msgid "Choose output directory" +msgstr "Scegliere la cartella di destinazione" + +#: src/gtk-interface.c:510 src/rs-batch.c:991 +msgid "Filename template:" +msgstr "Modello nome file:" + +#: src/gtk-interface.c:523 +msgid "Filename example:" +msgstr "Esempio nome file:" + +#: src/gtk-interface.c:534 +msgid "File type:" +msgstr "Tipo file:" + +#: src/gtk-interface.c:595 msgid "Preferences" msgstr "Preferenze" +#: src/gtk-interface.c:610 msgid "Preview background color:" msgstr "Colore di sfondo nell'anteprima:" +#: src/gtk-interface.c:625 msgid "Histogram height:" msgstr "Altezza dell'istogramma:" +#: src/gtk-interface.c:635 msgid "Show filenames in iconview" msgstr "Mostra il nome dei file sotto le anteprime" +#: src/gtk-interface.c:640 msgid "Use system theme" msgstr "Usa l'aspetto di sistema" +#: src/gtk-interface.c:647 msgid "Place cache in home directory" msgstr "Memorizza le informazioni nella cartella utente" +#: src/gtk-interface.c:650 msgid "Load 8 bit photos (jpeg, png, etc)" msgstr "Carica foto ad 8 bit (jpeg, png, ecc...)" -msgid "Preload photos" -msgstr "Precarica le foto" - -msgid "Directory:" -msgstr "Cartella:" - -msgid "Filename:" -msgstr "Nome file:" - -msgid "File type:" -msgstr "Tipo file:" - -#. set default -msgid "Filename example:" -msgstr "Esempio nome file:" - -msgid "Save uncompressed TIFF" -msgstr "Salva TIFF non compresso" - +#: src/gtk-interface.c:718 msgid "General" msgstr "Generale" #. gtk_notebook_append_page(GTK_NOTEBOOK(notebook), batch_page, gtk_label_new(_("Batch"))); +#: src/gtk-interface.c:720 msgid "Quick export" msgstr "Esportazione rapida" +#: src/gtk-interface.c:721 msgid "Colors" msgstr "Colore" +#: src/gtk-interface.c:955 src/gtk-interface.c:1178 +msgid "Opening directory..." +msgstr "Apri cartella..." + +#: src/gtk-interface.c:965 src/gtk-interface.c:1123 src/gtk-interface.c:1193 +msgid "Ready" +msgstr "Pronto" + +#: src/gtk-interface.c:1050 msgid "Open recursive" msgstr "Apri ricorsivamente" +#: src/gtk-interface.c:1059 msgid "Tools" msgstr "Strumenti" +#: src/gtk-interface.c:1060 msgid "Batch" msgstr "Esecuzione" +#: src/gtk-interface.c:1061 msgid "Open" msgstr "Apri" -msgid "Ready" -msgstr "Pronto" - +#: src/gtk-progress.c:63 src/gtk-progress.c:99 src/gtk-progress.c:122 msgid "Progress" msgstr "Avanzamento" -msgid "JPEG Quality:" -msgstr "Qualit? JPEG:" +#. FIXME: Calculate some sensible size - maybe even remember user resizes +#: src/rs-save-dialog.c:93 src/rs-toolbox.c:371 +msgid "Export File" +msgstr "Esporta file" +#: src/rs-save-dialog.c:244 +#, fuzzy, c-format +msgid "Exporting to %s" +msgstr "Esportazione file..." + +#: src/rs-save-dialog.c:360 msgid "Keep aspect" msgstr "Mantieni proporzioni" +#: src/rs-save-dialog.c:378 msgid "Width:" msgstr "Larghezza:" +#: src/rs-save-dialog.c:380 msgid "Height:" msgstr "Altezza:" +#: src/rs-save-dialog.c:382 msgid "Percent:" msgstr "Ingrandimento:" -msgid "Export File" -msgstr "Esporta file" - -msgid "Exporting file ..." -msgstr "Esportazione file..." - -msgid "File exported" -msgstr "File esportato" - -msgid "File export canceled" -msgstr "Esportazione file cancellata" - -msgid "JPEG (Joint Photographic Experts Group)" -msgstr "JPEG (Joint Photographic Experts Group)" - -msgid "PNG (Portable Network Graphics)" -msgstr "PNG (Portable Network Graphics)" - -msgid "8-bit TIFF (Tagged Image File Format)" -msgstr "8-bit TIFF (Tagged Image File Format)" - -msgid "16-bit TIFF (Tagged Image File Format)" -msgstr "16-bit TIFF (Tagged Image File Format)" - +#: src/rs-batch.c:206 src/rs-actions.c:737 msgid "A" msgstr "A" +#: src/rs-batch.c:209 src/rs-actions.c:738 msgid "B" msgstr "B" +#: src/rs-batch.c:212 src/rs-actions.c:739 msgid "C" msgstr "C" +#: src/rs-batch.c:437 msgid "Processing photos" msgstr "Elaborazione foto" +#: src/rs-batch.c:441 msgid "Cancel" msgstr "Annulla" +#: src/rs-batch.c:446 msgid "Last image:" msgstr "Ultima immagine:" +#: src/rs-batch.c:479 #, c-format msgid "Time left: %dh %dm %ds" msgstr "Tempo rimanente: %dh %dm %ds" +#: src/rs-batch.c:483 msgid "Time left: ..." msgstr "Tempo rimanente: ..." +#: src/rs-batch.c:495 #, c-format msgid "Loading %s ..." msgstr "Caricamento di %s..." +#: src/rs-batch.c:536 #, c-format msgid "Saving %s ..." msgstr "Salvataggio di %s..." +#: src/rs-batch.c:634 msgid "Icon" msgstr "Icona" +#: src/rs-batch.c:641 msgid "Filename" msgstr "Nome file" +#: src/rs-batch.c:648 msgid "Setting" msgstr "Impostazione" +#: src/rs-batch.c:738 msgid "Start" msgstr "Avvia" +#: src/rs-batch.c:741 msgid "Remove" msgstr "Rimuovi" +#: src/rs-batch.c:744 msgid "Remove all" msgstr "Rimuovi tutte" +#: src/rs-batch.c:869 msgid "Photo size" msgstr "Dimensione foto" +#: src/rs-batch.c:877 msgid "Constant scale" msgstr "Scalatura fissa" +#: src/rs-batch.c:878 msgid "Constant width" msgstr "Larghezza fissa" +#: src/rs-batch.c:879 msgid "Constant height" msgstr "Altezza fissa" +#: src/rs-batch.c:880 msgid "Maximum size" msgstr "Dimensione massima" +#: src/rs-batch.c:892 msgid "Photo width:" msgstr "Larghezza foto:" +#: src/rs-batch.c:894 src/rs-batch.c:903 msgid "pixels" msgstr "pixel" +#: src/rs-batch.c:901 msgid "Photo height:" msgstr "Altezza foto:" +#: src/rs-batch.c:910 msgid "Photo scale:" msgstr "Scalatura foto:" +#: src/rs-batch.c:912 msgid "%" msgstr "%" +#: src/rs-batch.c:948 #, c-format msgid "" "Constant width:\n" @@ -304,6 +372,7 @@ "Larghezza fissa:\n" "%d" +#: src/rs-batch.c:951 #, c-format msgid "" "Constant height:\n" @@ -312,6 +381,7 @@ "Altezza fissa:\n" "%d" +#: src/rs-batch.c:954 #, c-format msgid "" "Constant Scale:\n" @@ -320,6 +390,7 @@ "Scalatura fissa:\n" "%d" +#: src/rs-batch.c:958 #, c-format msgid "" "Maximum size:\n" @@ -328,66 +399,75 @@ "Dimensione massima:\n" "%d x %d" -msgid "Choose output directory" -msgstr "Scegliere la cartella di destinazione" - +#: src/rs-batch.c:987 msgid "Output directory:" msgstr "Cartella di destinazione:" -msgid "Filename template:" -msgstr "Modello nome file:" - +#: src/rs-batch.c:1012 msgid "Change" msgstr "Modifica" +#: src/rs-batch.c:1017 msgid "Export dimensions" msgstr "Dimensione di esportazione" #. All +#: src/rs-store.c:275 src/rs-store.c:834 #, c-format msgid "* (%d)" msgstr "* (%d)" +#: src/rs-store.c:276 msgid "All photos (excluding deleted)" msgstr "Tutte le foto (escluse quelle cancellate)" #. 1 +#: src/rs-store.c:279 src/rs-store.c:835 #, c-format msgid "1 (%d)" msgstr "1 (%d)" +#: src/rs-store.c:280 msgid "Priority 1 photos" msgstr "Foto con contrassegno 1" #. 2 +#: src/rs-store.c:283 src/rs-store.c:836 #, c-format msgid "2 (%d)" msgstr "2 (%d)" +#: src/rs-store.c:284 msgid "Priority 2 photos" msgstr "Foto con contrassegno 2" #. 3 +#: src/rs-store.c:287 src/rs-store.c:837 #, c-format msgid "3 (%d)" msgstr "3 (%d)" +#: src/rs-store.c:288 msgid "Priority 3 photos" msgstr "Foto con contrassegno 3" #. Unsorted +#: src/rs-store.c:291 src/rs-store.c:838 #, c-format msgid "U (%d)" msgstr "U (%d)" +#: src/rs-store.c:292 msgid "Unprioritized photos" msgstr "Foto senza contrassegno" #. Deleted +#: src/rs-store.c:295 src/rs-store.c:839 #, c-format msgid "D (%d)" msgstr "D (%d)" +#: src/rs-store.c:296 msgid "Deleted photos" msgstr "Foto Cancellate" @@ -396,233 +476,336 @@ #. understanding of our interface. I was thinking about adding a button instead #. that said "ROCK ON!" to instantly play "AC/DC - Highway to Hell", but I #. believe this will be better for the end user +#: src/rs-store.c:331 msgid "Priorities" msgstr "Contrassegni" +#: src/rs-store.c:527 #, c-format msgid "" "%s\n" "\n" msgstr "" +#: src/rs-store.c:530 #, c-format msgid "Focal length: %dmm\n" msgstr "" +#: src/rs-store.c:533 #, c-format msgid "Shutter speed: %.1fs\n" msgstr "" +#: src/rs-store.c:535 #, c-format msgid "Shutter speed: 1/%.0fs\n" msgstr "" +#: src/rs-store.c:538 #, c-format msgid "Aperture: F/%.01f\n" msgstr "" +#: src/rs-store.c:541 #, c-format msgid "ISO: %u\n" msgstr "" +#: src/rs-store.c:544 #, c-format msgid "Time: %s" msgstr "" +#: src/rs-preview-widget.c:505 +msgid "Display Navigation" +msgstr "" + +#: src/rs-preview-widget.c:756 +msgid "Light out mode not available" +msgstr "" + +#: src/rs-preview-widget.c:757 +msgid "" +"Your setup doesn't seem to support RGBA visuals and/or compositing. Consult " +"your operating system manual for enabling RGBA visuals and compositing." +msgstr "" + +#: src/rs-preview-widget.c:987 msgid "Size" msgstr "Dimensione" +#: src/rs-preview-widget.c:995 msgid "-" msgstr "-" +#: src/rs-preview-widget.c:1001 msgid "Grid" msgstr "Griglia" +#: src/rs-preview-widget.c:1006 msgid "None" msgstr "Nessuna" +#: src/rs-preview-widget.c:1007 msgid "Golden sections" msgstr "Sezione aurea" +#: src/rs-preview-widget.c:1008 msgid "Rule of thirds" msgstr "Regola dei terzi" +#: src/rs-preview-widget.c:1009 msgid "Golden triangles #1" msgstr "Triangoli aurei #1" +#: src/rs-preview-widget.c:1010 msgid "Golden triangles #2" msgstr "Triangoli aurei #2" +#: src/rs-preview-widget.c:1011 msgid "Harmonious triangles #1" msgstr "Triangoli armoniosi #1" +#: src/rs-preview-widget.c:1012 msgid "Harmonious triangles #2" msgstr "Triangoli armoniosi #2" +#: src/rs-preview-widget.c:1021 msgid "Aspect" msgstr "Formato" +#: src/rs-preview-widget.c:1026 msgid "Freeform" msgstr "libero" +#: src/rs-preview-widget.c:1027 msgid "ISO paper (A4)" msgstr "Carta ISO (A4)" +#: src/rs-preview-widget.c:1028 msgid "3:2 (35mm)" msgstr "3:2 (35mm)" +#: src/rs-preview-widget.c:1029 msgid "4:3" msgstr "4:3" +#: src/rs-preview-widget.c:1030 msgid "10:8 (SXGA)" msgstr "10:8 (SXGA)" +#: src/rs-preview-widget.c:1031 msgid "16:10 (Wide XGA)" msgstr "16:10 (Wide XGA)" +#: src/rs-preview-widget.c:1032 msgid "8:3 (Dualhead XGA)" msgstr "8:3 (Doppio schermo XGA)" +#: src/rs-preview-widget.c:1033 msgid "1:1" msgstr "1:1" +#: src/rs-preview-widget.c:1034 msgid "Golden rectangle" msgstr "Rettangolo aureo" +#: src/rs-preview-widget.c:1042 src/rs-preview-widget.c:1053 msgid "Crop" msgstr "Ritaglia" +#: src/rs-preview-widget.c:1044 msgid "Don't crop" msgstr "Annulla ritaglio" -msgid "Flip the photo over the x-axis" -msgstr "Specchia la foto rispetto all'asse x" +#. Snapshot labels +#: src/rs-toolbox.c:157 src/rs-actions.c:972 +msgid " A " +msgstr " A " -msgid "Mirror the photo over the y-axis" -msgstr "Specchia la foto rispetto all'asse y" +#: src/rs-toolbox.c:158 src/rs-actions.c:973 +msgid " B " +msgstr " B " -msgid "Rotate the photo 90 degrees clockwise" -msgstr "Ruota la foto di 90 gradi in senso orario" +#: src/rs-toolbox.c:159 src/rs-actions.c:974 +msgid " C " +msgstr " C " -msgid "Rotate the photo 180 degrees" -msgstr "Ruota la foto di 180 gradi" +#. FIXME: Get height from gconf +#: src/rs-toolbox.c:184 +msgid "Histogram" +msgstr "Istogramma" -msgid "Rotate the photo 90 degrees counter clockwise" -msgstr "Ruota la foto di 90 gradi in senso antiorario" +#: src/rs-toolbox.c:297 +#, fuzzy +msgid "Reset" +msgstr "Reimposta curva" -msgid "Transforms" -msgstr "Trasforma" - -msgid "Reset this setting" -msgstr "Ripristina questo settaggio" - +#: src/rs-toolbox.c:415 src/rs-toolbox.c:540 msgid "Open curve ..." msgstr "Apri curva..." +#: src/rs-toolbox.c:546 msgid "Save curve as ..." msgstr "Salva come..." +#: src/rs-toolbox.c:552 msgid "Reset curve" msgstr "Reimposta curva" +#: src/rs-toolbox.c:557 msgid "Auto adjust curve ends" msgstr "Corregge automaticamente la fine della curva" -msgid " A " -msgstr " A " +#. Pack everything nice +#: src/rs-toolbox.c:637 +#, fuzzy +msgid "Basic" +msgstr "Esecuzione" -msgid " B " -msgstr " B " +#: src/rs-toolbox.c:638 +msgid "Channel Mixer" +msgstr "" -msgid " C " -msgstr " C " +#: src/rs-toolbox.c:639 src/rs-actions.c:353 +msgid "Curve" +msgstr "Curva" -#. Build GUI -msgid "Exposure" -msgstr "Esposizione" +#: src/rs-toolbox.c:683 +msgid "Flip the photo over the x-axis" +msgstr "Specchia la foto rispetto all'asse x" -msgid "Hue" -msgstr "Tinta" +#: src/rs-toolbox.c:684 +msgid "Mirror the photo over the y-axis" +msgstr "Specchia la foto rispetto all'asse y" -msgid "Contrast" -msgstr "Contrasto" +#: src/rs-toolbox.c:685 +msgid "Rotate the photo 90 degrees clockwise" +msgstr "Ruota la foto di 90 gradi in senso orario" -#. Box it! -msgid "Warmth/tint" -msgstr "Temperatura di colore/Tinta" +#: src/rs-toolbox.c:686 +msgid "Rotate the photo 90 degrees counter clockwise" +msgstr "Ruota la foto di 90 gradi in senso antiorario" -msgid "Sharpen" -msgstr "Nitidezza" +#: src/rs-toolbox.c:698 +msgid "Transforms" +msgstr "Trasforma" -msgid "Curve" -msgstr "Curva" - -msgid "Histogram" -msgstr "Istogramma" - +#: src/rs-actions.c:141 msgid "Open directory" msgstr "Apri cartella" +#: src/rs-actions.c:198 +msgid "File exported" +msgstr "File esportato" + +#: src/rs-actions.c:203 src/rs-actions.c:222 +#, fuzzy +msgid "Export failed" +msgstr "Esporta file" + +#: src/rs-actions.c:232 msgid "Error exporting" msgstr "Errore nell'esportazione" +#: src/rs-actions.c:233 msgid "Error exporting photo to gimp." msgstr "Errore nell'esportazione foto in GIMP." +#: src/rs-actions.c:256 src/rs-actions.c:274 msgid "Deleting photos" msgstr "Cancellazione foto in corso" +#: src/rs-actions.c:257 msgid "Your files will be permanently deleted!" msgstr "I file saranno permanentemente cancellati!" +#: src/rs-actions.c:259 msgid "Delete photos" msgstr "Cancella foto" +#: src/rs-actions.c:333 msgid "Copied settings" msgstr "Impostazioni copiate" +#. Build GUI +#: src/rs-actions.c:346 +msgid "Exposure" +msgstr "Esposizione" + +#: src/rs-actions.c:348 +msgid "Hue" +msgstr "Tinta" + +#: src/rs-actions.c:349 +msgid "Contrast" +msgstr "Contrasto" + +#: src/rs-actions.c:350 msgid "White balance" msgstr "Bilanciamento del bianco" +#: src/rs-actions.c:351 +msgid "Sharpen" +msgstr "Nitidezza" + +#: src/rs-actions.c:352 +msgid "Channel mixer" +msgstr "" + +#: src/rs-actions.c:385 msgid "Select settings to paste" msgstr "Scelta delle impostazioni da trasferire" +#: src/rs-actions.c:443 msgid "Pasted settings" msgstr "Impostazioni trasferite" +#: src/rs-actions.c:446 msgid "Nothing to paste" msgstr "Nessuna impostazione da trasferire" +#: src/rs-actions.c:449 msgid "Buffer empty" msgstr "Buffer vuoto" +#: src/rs-actions.c:492 msgid "Adjusting to auto white balance" msgstr "Correzione del bilanciamento del bianco automatica" +#: src/rs-actions.c:502 msgid "No white balance to set from" msgstr "Nessun bilanciamento del bianco da applicare" +#: src/rs-actions.c:505 msgid "Adjusting to camera white balance" msgstr "Correzione del bilanciamento del bianco con l'impostazione di scatto" +#: src/rs-actions.c:683 msgid "Showing exposure mask" msgstr "Maschera di esposizione visualizzata" +#: src/rs-actions.c:685 msgid "Hiding exposure mask" msgstr "Maschera di esposizione nascosta" +#: src/rs-actions.c:715 #, c-format msgid " %s added to batch queue" msgstr "%s aggiunto alla coda di elaborazione" +#: src/rs-actions.c:717 #, c-format msgid "%s already added to batch queue" msgstr "%s gi? presente nella coda di elaborazione" +#: src/rs-actions.c:724 src/rs-actions.c:796 #, c-format msgid "%d photos added to batch queue" msgstr "%d foto aggiunte alla coda di elaborazione" +#: src/rs-actions.c:761 msgid "" "Select which settings to\n" "add to batch queue" @@ -630,188 +813,310 @@ "Selezionare i settaggi da\n" "aggiungere alla coda di elaborazione" +#: src/rs-actions.c:814 msgid "Removed from batch queue" msgstr "Rimosso dalla coda di elaborazione" +#: src/rs-actions.c:816 msgid "Not in batch queue" msgstr "Non presente nella coda di elaborazione" +#: src/rs-actions.c:850 msgid "A raw image converter for GTK+/GNOME" msgstr "Un convertitore di immagini raw per GTK+/GNOME" +#: src/rs-actions.c:881 msgid "_File" msgstr "_File" +#: src/rs-actions.c:882 msgid "_Edit" msgstr "_Modifica" +#: src/rs-actions.c:883 msgid "_Photo" msgstr "_Foto" +#: src/rs-actions.c:884 msgid "_Set Priority" msgstr "_Imposta Contrassegno" +#: src/rs-actions.c:885 msgid "_White Balance" msgstr "_Bilanciamento del Bianco" +#: src/rs-actions.c:886 msgid "_View" msgstr "_Visualizza" +#: src/rs-actions.c:887 msgid "_Sort by" msgstr "" +#: src/rs-actions.c:888 msgid "_Batch" msgstr "_Esecuzione" +#: src/rs-actions.c:889 msgid "_Help" msgstr "_Aiuto" #. File menu +#: src/rs-actions.c:894 msgid "_Open Directory" msgstr "_Apri Cartella" +#: src/rs-actions.c:895 msgid "_Quick Export" msgstr "Esportazione _Rapida" +#: src/rs-actions.c:896 msgid "_Export As" msgstr "Esporta _Come" +#: src/rs-actions.c:897 msgid "_Export to Gimp" msgstr "Esporta in _GIMP" +#: src/rs-actions.c:898 msgid "_Reload directory" msgstr "_Riapri Cartella" +#: src/rs-actions.c:899 msgid "_Delete flagged photos" msgstr "_Cancella foto contrassegnate" +#: src/rs-actions.c:900 msgid "_Quit" msgstr "_Chiudi" #. Edit menu +#: src/rs-actions.c:903 msgid "_Revert settings" msgstr "_Annulla impostazioni" +#: src/rs-actions.c:904 msgid "_Copy settings" msgstr "_Copia settaggio" +#: src/rs-actions.c:905 msgid "_Paste settings" msgstr "_Incolla settaggio" +#: src/rs-actions.c:906 msgid "_Reset settings" msgstr "_Ripristina settaggio" +#: src/rs-actions.c:907 msgid "_Preferences" msgstr "_Preferenze" #. Photo menu +#: src/rs-actions.c:910 msgid "_Flag photo for deletion" msgstr "_Contrassegna per cancellazione" +#: src/rs-actions.c:911 msgid "_1" msgstr "_1" +#: src/rs-actions.c:912 msgid "_2" msgstr "_2" +#: src/rs-actions.c:913 msgid "_3" msgstr "_3" +#: src/rs-actions.c:914 msgid "_Remove priority" msgstr "_Rimuovi contrassegno" +#: src/rs-actions.c:915 msgid "_Auto" msgstr "_Auto" +#: src/rs-actions.c:916 msgid "_Camera" msgstr "_Macchina" +#: src/rs-actions.c:917 msgid "_Crop" msgstr "_Ritaglia" +#: src/rs-actions.c:918 msgid "_Uncrop" msgstr "Annulla _ritaglio" +#: src/rs-actions.c:919 msgid "_Straighten" msgstr "_Raddrizza" +#: src/rs-actions.c:920 msgid "_Unstraighten" msgstr "Annulla _raddrizza" +#: src/rs-actions.c:921 msgid "_Group" msgstr "_Raggruppa" +#: src/rs-actions.c:922 msgid "_Ungroup" msgstr "_Suddividi" +#: src/rs-actions.c:923 #, fuzzy msgid "_Auto group" msgstr "_Suddividi" +#: src/rs-actions.c:924 +#, fuzzy +msgid "_Tag Photo..." +msgstr "_Foto" + +#: src/rs-actions.c:925 +msgid "Rotate Clockwise" +msgstr "" + +#: src/rs-actions.c:926 +#, fuzzy +msgid "Rotate Counter Clockwise" +msgstr "Ruota la foto di 90 gradi in senso orario" + +#: src/rs-actions.c:927 +msgid "Flip" +msgstr "" + +#: src/rs-actions.c:928 +msgid "Mirror" +msgstr "" + #. View menu +#: src/rs-actions.c:931 msgid "_Previous photo" msgstr "Foto _Precedente" +#: src/rs-actions.c:932 msgid "_Next Photo" msgstr "Foto _Successiva" -msgid "_Zoom to fit" -msgstr "Adatta _zoom" - -msgid "_Zoom to 100%" -msgstr "_Zoom 100%" - #. Batch menu +#: src/rs-actions.c:935 msgid "_Add to batch queue" msgstr "_Aggiungi alla coda di elaborazione" +#: src/rs-actions.c:936 msgid "_Add current view to queue" msgstr "_Aggiungi la vista corrente alla coda" +#: src/rs-actions.c:937 msgid "_Remove from batch queue" msgstr "_Rimuovi dalla coda di elaborazione" +#: src/rs-actions.c:938 msgid "_Start" msgstr "_Avvia" #. help menu +#: src/rs-actions.c:941 msgid "_About" msgstr "_Informazioni su..." +#: src/rs-actions.c:949 +msgid "_Zoom to fit" +msgstr "Adatta _zoom" + +#: src/rs-actions.c:950 msgid "_Iconbox" msgstr "_Anteprime" +#: src/rs-actions.c:951 msgid "_Toolbox" msgstr "_Strumenti" +#: src/rs-actions.c:952 msgid "_Fullscreen" msgstr "_Schermo intero" +#: src/rs-actions.c:953 msgid "_Exposure mask" msgstr "_Maschera di esposizione" +#: src/rs-actions.c:954 msgid "_Split" msgstr "_Vista affiancata" +#: src/rs-actions.c:956 +msgid "_Lights out" +msgstr "" + +#: src/rs-actions.c:962 msgid "Name" msgstr "" +#: src/rs-actions.c:963 msgid "Timestamp" msgstr "" +#: src/rs-actions.c:964 #, fuzzy msgid "ISO" msgstr "ISO%d" +#: src/rs-actions.c:965 msgid "Aperture" msgstr "" +#: src/rs-actions.c:966 msgid "Focallength" msgstr "" +#: src/rs-actions.c:967 msgid "Shutterspeed" msgstr "" +#~ msgid "Background renderer active" +#~ msgstr "Visualizzazione in sottofondo attiva" + +#~ msgid "Preload photos" +#~ msgstr "Precarica le foto" + +#~ msgid "Filename:" +#~ msgstr "Nome file:" + +#~ msgid "Save uncompressed TIFF" +#~ msgstr "Salva TIFF non compresso" + +#~ msgid "JPEG Quality:" +#~ msgstr "Qualit? JPEG:" + +#~ msgid "File export canceled" +#~ msgstr "Esportazione file cancellata" + +#~ msgid "JPEG (Joint Photographic Experts Group)" +#~ msgstr "JPEG (Joint Photographic Experts Group)" + +#~ msgid "PNG (Portable Network Graphics)" +#~ msgstr "PNG (Portable Network Graphics)" + +#~ msgid "8-bit TIFF (Tagged Image File Format)" +#~ msgstr "8-bit TIFF (Tagged Image File Format)" + +#~ msgid "16-bit TIFF (Tagged Image File Format)" +#~ msgstr "16-bit TIFF (Tagged Image File Format)" + +#~ msgid "Rotate the photo 180 degrees" +#~ msgstr "Ruota la foto di 180 gradi" + +#~ msgid "Reset this setting" +#~ msgstr "Ripristina questo settaggio" + +#~ msgid "Warmth/tint" +#~ msgstr "Temperatura di colore/Tinta" + +#~ msgid "_Zoom to 100%" +#~ msgstr "_Zoom 100%" + #~ msgid "%dmm " #~ msgstr "%dmm " @@ -866,9 +1171,6 @@ #~ msgid "Hasselblad" #~ msgstr "Hasselblad" -#~ msgid "Opening directory..." -#~ msgstr "Apri cartella..." - #~ msgid "Added view to batch queue" #~ msgstr "Vista aggiunta alla coda di elaborazione" Modified: trunk/po/nb.po =================================================================== --- trunk/po/nb.po 2009-09-27 21:47:00 UTC (rev 2670) +++ trunk/po/nb.po 2009-09-27 22:10:12 UTC (rev 2671) @@ -6,7 +6,7 @@ msgstr "" "Project-Id-Version: Rawstudio 1.1.1\n" "Report-Msgid-Bugs-To: rawstudio-dev at rawstudio.org\n" -"POT-Creation-Date: 2009-01-11 04:26+0100\n" +"POT-Creation-Date: 2009-09-28 00:09+0200\n" "PO-Revision-Date: 2008-04-17 21:48+0100\n" "Last-Translator: Anders Kvist \n" "Language-Team: Rawstudio development \n" @@ -16,30 +16,47 @@ "X-Poedit-Language: Norwegian Bokmal\n" "X-Poedit-Country: NORWAY\n" +#: src/filename.c:280 #, c-format msgid "%f - Original filename" msgstr "%f - Opprinnelig filnavn" +#: src/filename.c:281 #, c-format msgid "%2c - Incremental counter" msgstr "%2c - ?kende teller" +#: src/filename.c:282 #, c-format msgid "%s - Setting id (A, B or C)" msgstr "%s - Innstilling (A, B eller C)" +#: src/filename.c:283 +#, c-format +msgid "%d - Date from EXIF (YYYY-MM-DD)" +msgstr "" + +#: src/filename.c:284 +msgid "%t - Time from EXIF (HH:MM:SS)" +msgstr "" + +#: src/gtk-helper.c:420 msgid "Select color profile" msgstr "Velg fargeprofil" +#: src/gtk-helper.c:450 msgid "All files" msgstr "Alle filer" +#: src/gtk-helper.c:451 msgid "Color profiles (icc and icm)" msgstr "Fargeprofiler (icc og icm)" +#: src/gtk-helper.c:465 msgid "Not a valid color profile." msgstr "Ikke en gyldig fargeprofil." +#: src/gtk-helper.c:466 msgid "" "The file you selected does not appear to be a valid color profile for this " "version of Rawstudio." @@ -47,254 +64,305 @@ "Filen du har valgt er ikke en gyldig fargeprofil for denne versjonen av " "Rawstudio." +#: src/gtk-helper.c:568 msgid "Enable color management (experimental)" msgstr "Aktiver fargestyring (eksperimentelt)" +#: src/gtk-helper.c:576 msgid "Input profile" msgstr "Inndataprofil" +#: src/gtk-helper.c:579 msgid "BuiltInRGBProfile" msgstr "Innebygget RGB-profil" +#: src/gtk-helper.c:629 msgid "Display profile" msgstr "Skjermprofil" +#: src/gtk-helper.c:632 src/gtk-helper.c:685 msgid "sRGB" msgstr "sRGB" +#: src/gtk-helper.c:682 msgid "Export profile" msgstr "Eksportprofil" +#: src/gtk-helper.c:734 msgid "Intent" msgstr "Form?l" +#: src/gtk-helper.c:737 msgid "Perceptual" msgstr "Oppfattelse" +#: src/gtk-helper.c:738 msgid "Relative colormetric" msgstr "Relativ fargemetrikk" +#: src/gtk-helper.c:739 src/rs-actions.c:347 msgid "Saturation" msgstr "Metning" +#: src/gtk-helper.c:740 msgid "Absolute colormetric" msgstr "Absolutt fargemetrikk" -msgid "Background renderer active" -msgstr "Ferdigstiller i bakgrunnen" - +#: src/gtk-interface.c:182 msgid "Opening photo ..." msgstr "?pner bilde..." +#: src/gtk-interface.c:197 msgid "Couldn't open photo" msgstr "Klarte ikke ? ?pne bilde" +#: src/gtk-interface.c:202 msgid "Image opened" msgstr "Bilde ?pnet" +#: src/gtk-interface.c:203 src/gtk-interface.c:830 src/gtk-interface.c:953 +#: src/gtk-interface.c:995 msgid "Rawstudio" msgstr "Rawstudio" +#: src/gtk-interface.c:273 #, c-format msgid "Changed photo priority (*)" msgstr "Bildeprioritet endret (*)" +#: src/gtk-interface.c:275 #, c-format msgid "Changed photo priority (D)" msgstr "Bildeprioritet endret (S)" +#: src/gtk-interface.c:277 #, c-format msgid "Changed photo priority (%d)" msgstr "Bildeprioritet endret (%d)" +#: src/gtk-interface.c:492 +msgid "Directory:" +msgstr "Mappe:" + +#: src/gtk-interface.c:494 src/rs-batch.c:980 +msgid "Choose output directory" +msgstr "Velg katalog til utdata" + +#: src/gtk-interface.c:510 src/rs-batch.c:991 +msgid "Filename template:" +msgstr "Mal for filnavn:" + +#: src/gtk-interface.c:523 +msgid "Filename example:" +msgstr "Eksempel p? filnavn:" + +#: src/gtk-interface.c:534 +msgid "File type:" +msgstr "Filtype:" + +#: src/gtk-interface.c:595 msgid "Preferences" msgstr "Egenskaper" +#: src/gtk-interface.c:610 msgid "Preview background color:" msgstr "Bakgrunnsfarge for forh?ndsvisning:" +#: src/gtk-interface.c:625 msgid "Histogram height:" msgstr "H?yde p? histogram:" +#: src/gtk-interface.c:635 msgid "Show filenames in iconview" msgstr "Vis filnavn ved ikoner" +#: src/gtk-interface.c:640 msgid "Use system theme" msgstr "Bruk systeminnstillinger" +#: src/gtk-interface.c:647 msgid "Place cache in home directory" msgstr "Mellomlagre i hjemmekatalogen" +#: src/gtk-interface.c:650 msgid "Load 8 bit photos (jpeg, png, etc)" msgstr "?pne 8-bits bildefiler (jpeg, png, osv.)" -msgid "Preload photos" -msgstr "Forh?ndslast bilder" - -msgid "Directory:" -msgstr "Mappe:" - -msgid "Filename:" -msgstr "Filnavn:" - -msgid "File type:" -msgstr "Filtype:" - -#. set default -msgid "Filename example:" -msgstr "Eksempel p? filnavn:" - -msgid "Save uncompressed TIFF" -msgstr "Lagre TIFF ukomprimert" - +#: src/gtk-interface.c:718 msgid "General" msgstr "Generelt" #. gtk_notebook_append_page(GTK_NOTEBOOK(notebook), batch_page, gtk_label_new(_("Batch"))); +#: src/gtk-interface.c:720 msgid "Quick export" msgstr "Hurtigeksportering" +#: src/gtk-interface.c:721 msgid "Colors" msgstr "Fargestyring" +#: src/gtk-interface.c:955 src/gtk-interface.c:1178 +msgid "Opening directory..." +msgstr "?pner mappe" + +#: src/gtk-interface.c:965 src/gtk-interface.c:1123 src/gtk-interface.c:1193 +msgid "Ready" +msgstr "Klar" + +#: src/gtk-interface.c:1050 msgid "Open recursive" msgstr "?pne rekursivt" +#: src/gtk-interface.c:1059 msgid "Tools" msgstr "Verkt?y" +#: src/gtk-interface.c:1060 msgid "Batch" msgstr "Prosesseringsk?" +#: src/gtk-interface.c:1061 msgid "Open" msgstr "?pne" -msgid "Ready" -msgstr "Klar" - +#: src/gtk-progress.c:63 src/gtk-progress.c:99 src/gtk-progress.c:122 msgid "Progress" msgstr "Fremgang" -msgid "JPEG Quality:" -msgstr "JPEG-kvalitet:" +#. FIXME: Calculate some sensible size - maybe even remember user resizes +#: src/rs-save-dialog.c:93 src/rs-toolbox.c:371 +msgid "Export File" +msgstr "Eksporter fil" +#: src/rs-save-dialog.c:244 +#, fuzzy, c-format +msgid "Exporting to %s" +msgstr "Eksporterer fil..." + +#: src/rs-save-dialog.c:360 msgid "Keep aspect" msgstr "Behold h?yde/bredde-forhold" +#: src/rs-save-dialog.c:378 msgid "Width:" msgstr "Bredde:" +#: src/rs-save-dialog.c:380 msgid "Height:" msgstr "H?yde:" +#: src/rs-save-dialog.c:382 msgid "Percent:" msgstr "Prosent:" -msgid "Export File" -msgstr "Eksporter fil" - -msgid "Exporting file ..." -msgstr "Eksporterer fil..." - -msgid "File exported" -msgstr "Fil eksportert" - -msgid "File export canceled" -msgstr "Eksportering avbrutt" - -msgid "JPEG (Joint Photographic Experts Group)" -msgstr "JPEG" - -msgid "PNG (Portable Network Graphics)" -msgstr "PNG" - -msgid "8-bit TIFF (Tagged Image File Format)" -msgstr "8-bits TIFF" - -msgid "16-bit TIFF (Tagged Image File Format)" -msgstr "16-bits TIFF" - +#: src/rs-batch.c:206 src/rs-actions.c:737 msgid "A" msgstr "A" +#: src/rs-batch.c:209 src/rs-actions.c:738 msgid "B" msgstr "B" +#: src/rs-batch.c:212 src/rs-actions.c:739 msgid "C" msgstr "C" +#: src/rs-batch.c:437 msgid "Processing photos" msgstr "Prosesserer bilder" +#: src/rs-batch.c:441 msgid "Cancel" msgstr "Avbryt" +#: src/rs-batch.c:446 msgid "Last image:" msgstr "Siste bilde:" +#: src/rs-batch.c:479 #, c-format msgid "Time left: %dh %dm %ds" msgstr "Gjenst?ende tid: %dh %dm %ds" +#: src/rs-batch.c:483 msgid "Time left: ..." msgstr "Gjenst?ende tid: ..." +#: src/rs-batch.c:495 #, c-format msgid "Loading %s ..." msgstr "Leser %s..." +#: src/rs-batch.c:536 #, c-format msgid "Saving %s ..." msgstr "Lagrer %s..." +#: src/rs-batch.c:634 msgid "Icon" msgstr "Ikon" +#: src/rs-batch.c:641 msgid "Filename" msgstr "Filnavn" +#: src/rs-batch.c:648 msgid "Setting" msgstr "Innstilling" +#: src/rs-batch.c:738 msgid "Start" msgstr "Start" +#: src/rs-batch.c:741 msgid "Remove" msgstr "Fjern" +#: src/rs-batch.c:744 msgid "Remove all" msgstr "Fjern alle" +#: src/rs-batch.c:869 msgid "Photo size" msgstr "Bildest?rrelse" +#: src/rs-batch.c:877 msgid "Constant scale" msgstr "Konstant m?lestokk" +#: src/rs-batch.c:878 msgid "Constant width" msgstr "Konstant bredde" +#: src/rs-batch.c:879 msgid "Constant height" msgstr "Konstant h?yde" +#: src/rs-batch.c:880 msgid "Maximum size" msgstr "Maksimal st?rrelse" +#: src/rs-batch.c:892 msgid "Photo width:" msgstr "Bildebredde: " +#: src/rs-batch.c:894 src/rs-batch.c:903 msgid "pixels" msgstr " piksler" +#: src/rs-batch.c:901 msgid "Photo height:" msgstr "Bildeh?yde: " +#: src/rs-batch.c:910 msgid "Photo scale:" msgstr "M?lestokk: " +#: src/rs-batch.c:912 msgid "%" msgstr " %" +#: src/rs-batch.c:948 #, c-format msgid "" "Constant width:\n" @@ -303,6 +371,7 @@ "Konstant bredde:\n" "%d" +#: src/rs-batch.c:951 #, c-format msgid "" "Constant height:\n" @@ -311,6 +380,7 @@ "Konstant h?yde:\n" "%d" +#: src/rs-batch.c:954 #, c-format msgid "" "Constant Scale:\n" @@ -319,6 +389,7 @@ "Konstant m?lestokk:\n" "%d" +#: src/rs-batch.c:958 #, c-format msgid "" "Maximum size:\n" @@ -327,66 +398,75 @@ "Maksimal st?rrelse:\n" "%d x %d" -msgid "Choose output directory" -msgstr "Velg katalog til utdata" - +#: src/rs-batch.c:987 msgid "Output directory:" msgstr "Resultatmappe:" -msgid "Filename template:" -msgstr "Mal for filnavn:" - +#: src/rs-batch.c:1012 msgid "Change" msgstr "Endre" +#: src/rs-batch.c:1017 msgid "Export dimensions" msgstr "Eksporteringsdimensjoner" #. All +#: src/rs-store.c:275 src/rs-store.c:834 #, c-format msgid "* (%d)" msgstr "* (%d)" +#: src/rs-store.c:276 msgid "All photos (excluding deleted)" msgstr "Alle bilder (unntatt slettede)" #. 1 +#: src/rs-store.c:279 src/rs-store.c:835 #, c-format msgid "1 (%d)" msgstr "1 (%d)" +#: src/rs-store.c:280 msgid "Priority 1 photos" msgstr "Prioritet 1" #. 2 +#: src/rs-store.c:283 src/rs-store.c:836 #, c-format msgid "2 (%d)" msgstr "2 (%d)" +#: src/rs-store.c:284 msgid "Priority 2 photos" msgstr "Prioritet 2" #. 3 +#: src/rs-store.c:287 src/rs-store.c:837 #, c-format msgid "3 (%d)" msgstr "3 (%d)" +#: src/rs-store.c:288 msgid "Priority 3 photos" msgstr "Prioritet 3" #. Unsorted +#: src/rs-store.c:291 src/rs-store.c:838 #, c-format msgid "U (%d)" msgstr "U (%d)" +#: src/rs-store.c:292 msgid "Unprioritized photos" msgstr "Uprioriterte bilder" #. Deleted +#: src/rs-store.c:295 src/rs-store.c:839 #, c-format msgid "D (%d)" msgstr "S (%d)" +#: src/rs-store.c:296 msgid "Deleted photos" msgstr "Slettede bilder" @@ -395,233 +475,336 @@ #. understanding of our interface. I was thinking about adding a button instead #. that said "ROCK ON!" to instantly play "AC/DC - Highway to Hell", but I #. believe this will be better for the end user +#: src/rs-store.c:331 msgid "Priorities" msgstr "Prioritet" +#: src/rs-store.c:527 #, c-format msgid "" "%s\n" "\n" msgstr "" +#: src/rs-store.c:530 #, c-format msgid "Focal length: %dmm\n" msgstr "" +#: src/rs-store.c:533 #, c-format msgid "Shutter speed: %.1fs\n" msgstr "" +#: src/rs-store.c:535 #, c-format msgid "Shutter speed: 1/%.0fs\n" msgstr "" +#: src/rs-store.c:538 #, c-format msgid "Aperture: F/%.01f\n" msgstr "" +#: src/rs-store.c:541 #, c-format msgid "ISO: %u\n" msgstr "" +#: src/rs-store.c:544 #, c-format msgid "Time: %s" msgstr "" +#: src/rs-preview-widget.c:505 +msgid "Display Navigation" +msgstr "" + +#: src/rs-preview-widget.c:756 +msgid "Light out mode not available" +msgstr "" + +#: src/rs-preview-widget.c:757 +msgid "" +"Your setup doesn't seem to support RGBA visuals and/or compositing. Consult " +"your operating system manual for enabling RGBA visuals and compositing." +msgstr "" + +#: src/rs-preview-widget.c:987 msgid "Size" msgstr "St?rrelse" +#: src/rs-preview-widget.c:995 msgid "-" msgstr "-" +#: src/rs-preview-widget.c:1001 msgid "Grid" msgstr "Rutenett" +#: src/rs-preview-widget.c:1006 msgid "None" msgstr "Ingen" +#: src/rs-preview-widget.c:1007 msgid "Golden sections" msgstr "Gylne snitt" +#: src/rs-preview-widget.c:1008 msgid "Rule of thirds" msgstr "Tredjedelsregelen" +#: src/rs-preview-widget.c:1009 msgid "Golden triangles #1" msgstr "Gylne triangler #1" +#: src/rs-preview-widget.c:1010 msgid "Golden triangles #2" msgstr "Gylne triangler #2" +#: src/rs-preview-widget.c:1011 msgid "Harmonious triangles #1" msgstr "Harmoniske triangler #1" +#: src/rs-preview-widget.c:1012 msgid "Harmonious triangles #2" msgstr "Harmoniske triangler #2" +#: src/rs-preview-widget.c:1021 msgid "Aspect" msgstr "Forhold" +#: src/rs-preview-widget.c:1026 msgid "Freeform" msgstr "Fri" +#: src/rs-preview-widget.c:1027 msgid "ISO paper (A4)" msgstr "ISO-papir (A4)" +#: src/rs-preview-widget.c:1028 msgid "3:2 (35mm)" msgstr "3:2 (35mm)" +#: src/rs-preview-widget.c:1029 msgid "4:3" msgstr "4:3" +#: src/rs-preview-widget.c:1030 msgid "10:8 (SXGA)" msgstr "10:8 (SXGA)" +#: src/rs-preview-widget.c:1031 msgid "16:10 (Wide XGA)" msgstr "16:10 (Wide XGA)" +#: src/rs-preview-widget.c:1032 msgid "8:3 (Dualhead XGA)" msgstr "8:3 (Dualhead XGA)" +#: src/rs-preview-widget.c:1033 msgid "1:1" msgstr "1:1" +#: src/rs-preview-widget.c:1034 msgid "Golden rectangle" msgstr "Gyllent rektangel" +#: src/rs-preview-widget.c:1042 src/rs-preview-widget.c:1053 msgid "Crop" msgstr "Beskj?r" +#: src/rs-preview-widget.c:1044 msgid "Don't crop" msgstr "Ikke beskj?r" -msgid "Flip the photo over the x-axis" -msgstr "Speil bildet om x-aksen" +#. Snapshot labels +#: src/rs-toolbox.c:157 src/rs-actions.c:972 +msgid " A " +msgstr " A " -msgid "Mirror the photo over the y-axis" -msgstr "Speil bildet om y-aksen" +#: src/rs-toolbox.c:158 src/rs-actions.c:973 +msgid " B " +msgstr " B " -msgid "Rotate the photo 90 degrees clockwise" -msgstr "Rot?r bildet 90? mot h?yre" +#: src/rs-toolbox.c:159 src/rs-actions.c:974 +msgid " C " +msgstr " C " -msgid "Rotate the photo 180 degrees" -msgstr "Rot?r bildet 180?" +#. FIXME: Get height from gconf +#: src/rs-toolbox.c:184 +msgid "Histogram" +msgstr "Histogram" -msgid "Rotate the photo 90 degrees counter clockwise" -msgstr "Rot?r bildet 90? mot venstre" +#: src/rs-toolbox.c:297 +#, fuzzy +msgid "Reset" +msgstr "Nullstill kurve" -msgid "Transforms" -msgstr "Transformer" - -msgid "Reset this setting" -msgstr "Nullstill" - +#: src/rs-toolbox.c:415 src/rs-toolbox.c:540 msgid "Open curve ..." msgstr "?pne kurve..." +#: src/rs-toolbox.c:546 msgid "Save curve as ..." msgstr "Lagre kurve som..." +#: src/rs-toolbox.c:552 msgid "Reset curve" msgstr "Nullstill kurve" +#: src/rs-toolbox.c:557 msgid "Auto adjust curve ends" msgstr "Autojust?r endepunkter" -msgid " A " -msgstr " A " +#. Pack everything nice +#: src/rs-toolbox.c:637 +#, fuzzy +msgid "Basic" +msgstr "Prosesseringsk?" -msgid " B " -msgstr " B " +#: src/rs-toolbox.c:638 +msgid "Channel Mixer" +msgstr "" -msgid " C " -msgstr " C " +#: src/rs-toolbox.c:639 src/rs-actions.c:353 +msgid "Curve" +msgstr "Kurve" -#. Build GUI -msgid "Exposure" -msgstr "Eksponering" +#: src/rs-toolbox.c:683 +msgid "Flip the photo over the x-axis" +msgstr "Speil bildet om x-aksen" -msgid "Hue" -msgstr "Fargetone" +#: src/rs-toolbox.c:684 +msgid "Mirror the photo over the y-axis" +msgstr "Speil bildet om y-aksen" -msgid "Contrast" -msgstr "Kontrast" +#: src/rs-toolbox.c:685 +msgid "Rotate the photo 90 degrees clockwise" +msgstr "Rot?r bildet 90? mot h?yre" -#. Box it! -msgid "Warmth/tint" -msgstr "Varme/nyanse" +#: src/rs-toolbox.c:686 +msgid "Rotate the photo 90 degrees counter clockwise" +msgstr "Rot?r bildet 90? mot venstre" -msgid "Sharpen" -msgstr "Gj?r skarpere" +#: src/rs-toolbox.c:698 +msgid "Transforms" +msgstr "Transformer" -msgid "Curve" -msgstr "Kurve" - -msgid "Histogram" -msgstr "Histogram" - +#: src/rs-actions.c:141 msgid "Open directory" msgstr "?pne mappe" +#: src/rs-actions.c:198 +msgid "File exported" +msgstr "Fil eksportert" + +#: src/rs-actions.c:203 src/rs-actions.c:222 +#, fuzzy +msgid "Export failed" +msgstr "Eksporter fil" + +#: src/rs-actions.c:232 msgid "Error exporting" msgstr "Eksporteringen mislyktes" +#: src/rs-actions.c:233 msgid "Error exporting photo to gimp." msgstr "Klarte ikke ? eksportere bildet til gimp." +#: src/rs-actions.c:256 src/rs-actions.c:274 msgid "Deleting photos" msgstr "Sletter bilder" +#: src/rs-actions.c:257 msgid "Your files will be permanently deleted!" msgstr "Filene vil bli slettet for godt!" +#: src/rs-actions.c:259 msgid "Delete photos" msgstr "Slett bilder" +#: src/rs-actions.c:333 msgid "Copied settings" msgstr "Innstillinger kopiert" +#. Build GUI +#: src/rs-actions.c:346 +msgid "Exposure" +msgstr "Eksponering" + +#: src/rs-actions.c:348 +msgid "Hue" +msgstr "Fargetone" + +#: src/rs-actions.c:349 +msgid "Contrast" +msgstr "Kontrast" + +#: src/rs-actions.c:350 msgid "White balance" msgstr "Hvitbalanse" +#: src/rs-actions.c:351 +msgid "Sharpen" +msgstr "Gj?r skarpere" + +#: src/rs-actions.c:352 +msgid "Channel mixer" +msgstr "" + +#: src/rs-actions.c:385 msgid "Select settings to paste" msgstr "Lim inn f?lgende innstillinger:" +#: src/rs-actions.c:443 msgid "Pasted settings" msgstr "Innlimte innstillinger" +#: src/rs-actions.c:446 msgid "Nothing to paste" msgstr "Ikke noe ? lime inn" +#: src/rs-actions.c:449 msgid "Buffer empty" msgstr "Bufferet er tomt" +#: src/rs-actions.c:492 msgid "Adjusting to auto white balance" msgstr "Justerer til automatisk hvitbalanse" +#: src/rs-actions.c:502 msgid "No white balance to set from" msgstr "Ingen hvitbalanse ? justere etter" +#: src/rs-actions.c:505 msgid "Adjusting to camera white balance" msgstr "Justerer etter kameraets hvitbalanse" +#: src/rs-actions.c:683 msgid "Showing exposure mask" msgstr "Viser eksponeringsmaske" +#: src/rs-actions.c:685 msgid "Hiding exposure mask" msgstr "Skjuler eksponeringsmaske" +#: src/rs-actions.c:715 #, c-format msgid " %s added to batch queue" msgstr "%s lagt til i prosesseringsk?" +#: src/rs-actions.c:717 #, c-format msgid "%s already added to batch queue" msgstr "%s finnes allerede i prosesseringsk?en" +#: src/rs-actions.c:724 src/rs-actions.c:796 #, c-format msgid "%d photos added to batch queue" msgstr "%d bilder lagt til i prosesseringsk?" +#: src/rs-actions.c:761 msgid "" "Select which settings to\n" "add to batch queue" @@ -629,188 +812,310 @@ "Velg hvilke innstillinger som skal\n" "gjelde for satsvis prosessering." +#: src/rs-actions.c:814 msgid "Removed from batch queue" msgstr "Fjernet fra prosesseringsk?en" +#: src/rs-actions.c:816 msgid "Not in batch queue" msgstr "Ikke i prosesseringsk?en" +#: src/rs-actions.c:850 msgid "A raw image converter for GTK+/GNOME" msgstr "En r?filkonverterer for GTK+/GNOME" +#: src/rs-actions.c:881 msgid "_File" msgstr "_Fil" +#: src/rs-actions.c:882 msgid "_Edit" msgstr "_Rediger" +#: src/rs-actions.c:883 msgid "_Photo" msgstr "Bilde" +#: src/rs-actions.c:884 msgid "_Set Priority" msgstr "Sett prioritet" +#: src/rs-actions.c:885 msgid "_White Balance" msgstr "Hvitbalanse" +#: src/rs-actions.c:886 msgid "_View" msgstr "_Vis" +#: src/rs-actions.c:887 msgid "_Sort by" msgstr "" +#: src/rs-actions.c:888 msgid "_Batch" msgstr "_Prosesseringsk?" +#: src/rs-actions.c:889 msgid "_Help" msgstr "_Hjelp" #. File menu +#: src/rs-actions.c:894 msgid "_Open Directory" msgstr "?pne mappe" +#: src/rs-actions.c:895 msgid "_Quick Export" msgstr "Hurtigeksportering" +#: src/rs-actions.c:896 msgid "_Export As" msgstr "Eksporter som..." +#: src/rs-actions.c:897 msgid "_Export to Gimp" msgstr "E_ksporter til gimp" +#: src/rs-actions.c:898 msgid "_Reload directory" msgstr "Les mappen p? ny" +#: src/rs-actions.c:899 msgid "_Delete flagged photos" msgstr "Slett _merkede bilder" +#: src/rs-actions.c:900 msgid "_Quit" msgstr "_Avslutt" #. Edit menu +#: src/rs-actions.c:903 msgid "_Revert settings" msgstr "_Nullstill endringer" +#: src/rs-actions.c:904 msgid "_Copy settings" msgstr "Kopier innstillinger" +#: src/rs-actions.c:905 msgid "_Paste settings" msgstr "Lim inn innstillinger" +#: src/rs-actions.c:906 msgid "_Reset settings" msgstr "Nullstill" +#: src/rs-actions.c:907 msgid "_Preferences" msgstr "Egenskaper" #. Photo menu +#: src/rs-actions.c:910 msgid "_Flag photo for deletion" msgstr "_Merk bilde for sletting" +#: src/rs-actions.c:911 msgid "_1" msgstr "_1" +#: src/rs-actions.c:912 msgid "_2" msgstr "_2" +#: src/rs-actions.c:913 msgid "_3" msgstr "_3" +#: src/rs-actions.c:914 msgid "_Remove priority" msgstr "Fjern prioritet" +#: src/rs-actions.c:915 msgid "_Auto" msgstr "_Automatisk" +#: src/rs-actions.c:916 msgid "_Camera" msgstr "_Fra kamera" +#: src/rs-actions.c:917 msgid "_Crop" msgstr "_Beskj?r" +#: src/rs-actions.c:918 msgid "_Uncrop" msgstr "_Fjern beskj?ring" +#: src/rs-actions.c:919 msgid "_Straighten" msgstr "_Rett opp" +#: src/rs-actions.c:920 msgid "_Unstraighten" msgstr "_Fjern oppretting" +#: src/rs-actions.c:921 msgid "_Group" msgstr "_Grupp?r" +#: src/rs-actions.c:922 msgid "_Ungroup" msgstr "_L?s opp gruppe" +#: src/rs-actions.c:923 #, fuzzy msgid "_Auto group" msgstr "_L?s opp gruppe" +#: src/rs-actions.c:924 +#, fuzzy +msgid "_Tag Photo..." +msgstr "Bilde" + +#: src/rs-actions.c:925 +msgid "Rotate Clockwise" +msgstr "" + +#: src/rs-actions.c:926 +#, fuzzy +msgid "Rotate Counter Clockwise" +msgstr "Rot?r bildet 90? mot h?yre" + +#: src/rs-actions.c:927 +msgid "Flip" +msgstr "" + +#: src/rs-actions.c:928 +msgid "Mirror" +msgstr "" + #. View menu +#: src/rs-actions.c:931 msgid "_Previous photo" msgstr "_Forrige bilde" +#: src/rs-actions.c:932 msgid "_Next Photo" msgstr "_Neste bilde" -msgid "_Zoom to fit" -msgstr "_Beste tilpasning" - -msgid "_Zoom to 100%" -msgstr "_Piksel for piksel (100%)" - #. Batch menu +#: src/rs-actions.c:935 msgid "_Add to batch queue" msgstr "_Legg til i prosesseringsk?" +#: src/rs-actions.c:936 msgid "_Add current view to queue" msgstr "Legg aktiv _visning i k?en" +#: src/rs-actions.c:937 msgid "_Remove from batch queue" msgstr "_Fjern fra prosesseringsk?en" +#: src/rs-actions.c:938 msgid "_Start" msgstr "_Start" #. help menu +#: src/rs-actions.c:941 msgid "_About" msgstr "_Om" +#: src/rs-actions.c:949 +msgid "_Zoom to fit" +msgstr "_Beste tilpasning" + +#: src/rs-actions.c:950 msgid "_Iconbox" msgstr "_Ikoner" +#: src/rs-actions.c:951 msgid "_Toolbox" msgstr "_Verkt?y" +#: src/rs-actions.c:952 msgid "_Fullscreen" msgstr "_Fullskjerm" +#: src/rs-actions.c:953 msgid "_Exposure mask" msgstr "_Eksponeringsmaske" +#: src/rs-actions.c:954 msgid "_Split" msgstr "_Splitt" +#: src/rs-actions.c:956 +msgid "_Lights out" +msgstr "" + +#: src/rs-actions.c:962 msgid "Name" msgstr "" +#: src/rs-actions.c:963 msgid "Timestamp" msgstr "" +#: src/rs-actions.c:964 #, fuzzy msgid "ISO" msgstr "ISO%d" +#: src/rs-actions.c:965 msgid "Aperture" msgstr "" +#: src/rs-actions.c:966 msgid "Focallength" msgstr "" +#: src/rs-actions.c:967 msgid "Shutterspeed" msgstr "" +#~ msgid "Background renderer active" +#~ msgstr "Ferdigstiller i bakgrunnen" + +#~ msgid "Preload photos" +#~ msgstr "Forh?ndslast bilder" + +#~ msgid "Filename:" +#~ msgstr "Filnavn:" + +#~ msgid "Save uncompressed TIFF" +#~ msgstr "Lagre TIFF ukomprimert" + +#~ msgid "JPEG Quality:" +#~ msgstr "JPEG-kvalitet:" + +#~ msgid "File export canceled" +#~ msgstr "Eksportering avbrutt" + +#~ msgid "JPEG (Joint Photographic Experts Group)" +#~ msgstr "JPEG" + +#~ msgid "PNG (Portable Network Graphics)" +#~ msgstr "PNG" + +#~ msgid "8-bit TIFF (Tagged Image File Format)" +#~ msgstr "8-bits TIFF" + +#~ msgid "16-bit TIFF (Tagged Image File Format)" +#~ msgstr "16-bits TIFF" + +#~ msgid "Rotate the photo 180 degrees" +#~ msgstr "Rot?r bildet 180?" + +#~ msgid "Reset this setting" +#~ msgstr "Nullstill" + +#~ msgid "Warmth/tint" +#~ msgstr "Varme/nyanse" + +#~ msgid "_Zoom to 100%" +#~ msgstr "_Piksel for piksel (100%)" + #~ msgid "%dmm " #~ msgstr "%dmm" @@ -865,9 +1170,6 @@ #~ msgid "Hasselblad" #~ msgstr "Hasselblad" -#~ msgid "Opening directory..." -#~ msgstr "?pner mappe" - #~ msgid "Added view to batch queue" #~ msgstr "La til visningen i prosesseringsk?en." Modified: trunk/po/nl.po =================================================================== --- trunk/po/nl.po 2009-09-27 21:47:00 UTC (rev 2670) +++ trunk/po/nl.po 2009-09-27 22:10:12 UTC (rev 2671) @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: Rawstudio 1.1.1\n" "Report-Msgid-Bugs-To: rawstudio-dev at rawstudio.org\n" -"POT-Creation-Date: 2009-01-11 04:26+0100\n" +"POT-Creation-Date: 2009-09-28 00:09+0200\n" "PO-Revision-Date: 2008-05-05 00:22+0100\n" "Last-Translator: O. Lavell \n" "Language-Team: Rawstudio development \n" @@ -15,30 +15,47 @@ "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +#: src/filename.c:280 #, c-format msgid "%f - Original filename" msgstr "%f - Originele bestandsnaam" +#: src/filename.c:281 #, c-format msgid "%2c - Incremental counter" msgstr "%2c - Oplopende teller" +#: src/filename.c:282 #, c-format msgid "%s - Setting id (A, B or C)" msgstr "" +#: src/filename.c:283 +#, c-format +msgid "%d - Date from EXIF (YYYY-MM-DD)" +msgstr "" + +#: src/filename.c:284 +msgid "%t - Time from EXIF (HH:MM:SS)" +msgstr "" + +#: src/gtk-helper.c:420 msgid "Select color profile" msgstr "Selecteer kleurprofiel" +#: src/gtk-helper.c:450 msgid "All files" msgstr "Alle bestanden" +#: src/gtk-helper.c:451 msgid "Color profiles (icc and icm)" msgstr "Kleurprofielen (ICC en ICM)" +#: src/gtk-helper.c:465 msgid "Not a valid color profile." msgstr "Geen geldig kleurprofiel." +#: src/gtk-helper.c:466 msgid "" "The file you selected does not appear to be a valid color profile for this " "version of Rawstudio." @@ -46,338 +63,401 @@ "Het geselecteerde bestand lijkt geen geldig kleurprofielte bevatten voor " "deze versie van Rawstudio." +#: src/gtk-helper.c:568 msgid "Enable color management (experimental)" msgstr "Schakel kleurbeheer in (experimenteel)" +#: src/gtk-helper.c:576 msgid "Input profile" msgstr "Invoerprofiel" +#: src/gtk-helper.c:579 msgid "BuiltInRGBProfile" msgstr "BuiltInRGBProfile" +#: src/gtk-helper.c:629 msgid "Display profile" msgstr "Weergaveprofiel" +#: src/gtk-helper.c:632 src/gtk-helper.c:685 msgid "sRGB" msgstr "sRGB" +#: src/gtk-helper.c:682 msgid "Export profile" msgstr "Exportprofiel" +#: src/gtk-helper.c:734 msgid "Intent" msgstr "Intent" +#: src/gtk-helper.c:737 msgid "Perceptual" msgstr "Perceptual" +#: src/gtk-helper.c:738 msgid "Relative colormetric" msgstr "Relative colormetric" +#: src/gtk-helper.c:739 src/rs-actions.c:347 msgid "Saturation" msgstr "Verzadiging" +#: src/gtk-helper.c:740 msgid "Absolute colormetric" msgstr "Absolute colormetric" -msgid "Background renderer active" -msgstr "Renderer op achtergrond actief" - +#: src/gtk-interface.c:182 msgid "Opening photo ..." msgstr "Foto openen..." +#: src/gtk-interface.c:197 msgid "Couldn't open photo" msgstr "Kan foto niet openen" +#: src/gtk-interface.c:202 msgid "Image opened" msgstr "Afbeelding geopend" +#: src/gtk-interface.c:203 src/gtk-interface.c:830 src/gtk-interface.c:953 +#: src/gtk-interface.c:995 msgid "Rawstudio" msgstr "Rawstudio" +#: src/gtk-interface.c:273 #, c-format msgid "Changed photo priority (*)" msgstr "" +#: src/gtk-interface.c:275 #, c-format msgid "Changed photo priority (D)" msgstr "" +#: src/gtk-interface.c:277 #, c-format msgid "Changed photo priority (%d)" msgstr "" +#: src/gtk-interface.c:492 +msgid "Directory:" +msgstr "Map:" + +#: src/gtk-interface.c:494 src/rs-batch.c:980 +msgid "Choose output directory" +msgstr "" + +#: src/gtk-interface.c:510 src/rs-batch.c:991 +msgid "Filename template:" +msgstr "" + +#: src/gtk-interface.c:523 +msgid "Filename example:" +msgstr "Bestandsnaam voorbeeld:" + +#: src/gtk-interface.c:534 +msgid "File type:" +msgstr "Bestandstype:" + +#: src/gtk-interface.c:595 msgid "Preferences" msgstr "Voorkeuren" +#: src/gtk-interface.c:610 msgid "Preview background color:" msgstr "Voorbeeld achtergrondkleur:" +#: src/gtk-interface.c:625 msgid "Histogram height:" msgstr "Hoogte histogram:" +#: src/gtk-interface.c:635 msgid "Show filenames in iconview" msgstr "Bestandsnamen in pictogramweergave tonen" +#: src/gtk-interface.c:640 msgid "Use system theme" msgstr "Gebruik systeemthema" +#: src/gtk-interface.c:647 msgid "Place cache in home directory" msgstr "Cache in persoonlijke map plaatsen" +#: src/gtk-interface.c:650 msgid "Load 8 bit photos (jpeg, png, etc)" msgstr "8-bit foto's laden (JPEG, PNG e.d.)" -msgid "Preload photos" -msgstr "Foto's vooruitladen" - -msgid "Directory:" -msgstr "Map:" - -msgid "Filename:" -msgstr "Bestandsnaam:" - -msgid "File type:" -msgstr "Bestandstype:" - -#. set default -msgid "Filename example:" -msgstr "Bestandsnaam voorbeeld:" - -msgid "Save uncompressed TIFF" -msgstr "Ongecomprimeerde TIFF opslaan" - +#: src/gtk-interface.c:718 msgid "General" msgstr "Algemeen" #. gtk_notebook_append_page(GTK_NOTEBOOK(notebook), batch_page, gtk_label_new(_("Batch"))); +#: src/gtk-interface.c:720 msgid "Quick export" msgstr "Snelle export" +#: src/gtk-interface.c:721 msgid "Colors" msgstr "Kleuren" +#: src/gtk-interface.c:955 src/gtk-interface.c:1178 +msgid "Opening directory..." +msgstr "Map openen..." + +#: src/gtk-interface.c:965 src/gtk-interface.c:1123 src/gtk-interface.c:1193 +msgid "Ready" +msgstr "Klaar" + +#: src/gtk-interface.c:1050 msgid "Open recursive" msgstr "Recursief openen" +#: src/gtk-interface.c:1059 msgid "Tools" msgstr "Gereedschappen" +#: src/gtk-interface.c:1060 msgid "Batch" msgstr "Batch" +#: src/gtk-interface.c:1061 msgid "Open" msgstr "Openen" -msgid "Ready" -msgstr "Klaar" - +#: src/gtk-progress.c:63 src/gtk-progress.c:99 src/gtk-progress.c:122 msgid "Progress" msgstr "Voortgang" -msgid "JPEG Quality:" -msgstr "JPEG-kwaliteit:" +#. FIXME: Calculate some sensible size - maybe even remember user resizes +#: src/rs-save-dialog.c:93 src/rs-toolbox.c:371 +msgid "Export File" +msgstr "Bestand exporteren" +#: src/rs-save-dialog.c:244 +#, fuzzy, c-format +msgid "Exporting to %s" +msgstr "Bestand exporteren..." + +#: src/rs-save-dialog.c:360 msgid "Keep aspect" msgstr "Verhoudingen behouden" +#: src/rs-save-dialog.c:378 msgid "Width:" msgstr "Breedte:" +#: src/rs-save-dialog.c:380 msgid "Height:" msgstr "Hoogte:" +#: src/rs-save-dialog.c:382 msgid "Percent:" msgstr "Percentage:" -msgid "Export File" -msgstr "Bestand exporteren" - -msgid "Exporting file ..." -msgstr "Bestand exporteren..." - -msgid "File exported" -msgstr "Bestand ge?xporteerd" - -msgid "File export canceled" -msgstr "Bestandsexport geannuleerd" - -msgid "JPEG (Joint Photographic Experts Group)" -msgstr "JPEG (Joint Photographic Experts Group)" - -msgid "PNG (Portable Network Graphics)" -msgstr "PNG (Portable Network Graphics)" - -msgid "8-bit TIFF (Tagged Image File Format)" -msgstr "8-bit TIFF (Tagged Image File Format)" - -msgid "16-bit TIFF (Tagged Image File Format)" -msgstr "16-bit TIFF (Tagged Image File Format)" - +#: src/rs-batch.c:206 src/rs-actions.c:737 msgid "A" msgstr "A" +#: src/rs-batch.c:209 src/rs-actions.c:738 msgid "B" msgstr "B" +#: src/rs-batch.c:212 src/rs-actions.c:739 msgid "C" msgstr "C" +#: src/rs-batch.c:437 msgid "Processing photos" msgstr "Foto's verwerken" +#: src/rs-batch.c:441 msgid "Cancel" msgstr "Annuleren" +#: src/rs-batch.c:446 msgid "Last image:" msgstr "Laatste afbeelding:" +#: src/rs-batch.c:479 #, c-format msgid "Time left: %dh %dm %ds" msgstr "Tijd over: %dh %dm %ds" +#: src/rs-batch.c:483 msgid "Time left: ..." msgstr "Tijd over: ..." +#: src/rs-batch.c:495 #, c-format msgid "Loading %s ..." msgstr "Laden %s ..." +#: src/rs-batch.c:536 #, c-format msgid "Saving %s ..." msgstr "Bewaren %s ..." +#: src/rs-batch.c:634 msgid "Icon" msgstr "Pictogram" +#: src/rs-batch.c:641 msgid "Filename" msgstr "Bestandsnaam" +#: src/rs-batch.c:648 msgid "Setting" msgstr "Instelling" +#: src/rs-batch.c:738 msgid "Start" msgstr "Start" +#: src/rs-batch.c:741 msgid "Remove" msgstr "Verwijderen" +#: src/rs-batch.c:744 msgid "Remove all" msgstr "Alles verwijderen" +#: src/rs-batch.c:869 msgid "Photo size" msgstr "Afbeeldingsgrootte" +#: src/rs-batch.c:877 msgid "Constant scale" msgstr "" +#: src/rs-batch.c:878 msgid "Constant width" msgstr "" +#: src/rs-batch.c:879 msgid "Constant height" msgstr "" +#: src/rs-batch.c:880 msgid "Maximum size" msgstr "" +#: src/rs-batch.c:892 msgid "Photo width:" msgstr "" +#: src/rs-batch.c:894 src/rs-batch.c:903 msgid "pixels" msgstr "pixels" +#: src/rs-batch.c:901 msgid "Photo height:" msgstr "" +#: src/rs-batch.c:910 msgid "Photo scale:" msgstr "" +#: src/rs-batch.c:912 msgid "%" msgstr "%" +#: src/rs-batch.c:948 #, c-format msgid "" "Constant width:\n" "%d" msgstr "" +#: src/rs-batch.c:951 #, c-format msgid "" "Constant height:\n" "%d" msgstr "" +#: src/rs-batch.c:954 #, c-format msgid "" "Constant Scale:\n" "%d" msgstr "" +#: src/rs-batch.c:958 #, c-format msgid "" "Maximum size:\n" "%d x %d" msgstr "" -msgid "Choose output directory" -msgstr "" - +#: src/rs-batch.c:987 msgid "Output directory:" msgstr "" -msgid "Filename template:" -msgstr "" - +#: src/rs-batch.c:1012 msgid "Change" msgstr "" +#: src/rs-batch.c:1017 msgid "Export dimensions" msgstr "" #. All +#: src/rs-store.c:275 src/rs-store.c:834 #, c-format msgid "* (%d)" msgstr "* (%d)" +#: src/rs-store.c:276 msgid "All photos (excluding deleted)" msgstr "" #. 1 +#: src/rs-store.c:279 src/rs-store.c:835 #, c-format msgid "1 (%d)" msgstr "1 (%d)" +#: src/rs-store.c:280 msgid "Priority 1 photos" msgstr "" #. 2 +#: src/rs-store.c:283 src/rs-store.c:836 #, c-format msgid "2 (%d)" msgstr "2 (%d)" +#: src/rs-store.c:284 msgid "Priority 2 photos" msgstr "" #. 3 +#: src/rs-store.c:287 src/rs-store.c:837 #, c-format msgid "3 (%d)" msgstr "3 (%d)" +#: src/rs-store.c:288 msgid "Priority 3 photos" msgstr "" #. Unsorted +#: src/rs-store.c:291 src/rs-store.c:838 #, c-format msgid "U (%d)" msgstr "U (%d)" +#: src/rs-store.c:292 msgid "Unprioritized photos" msgstr "" #. Deleted +#: src/rs-store.c:295 src/rs-store.c:839 #, c-format msgid "D (%d)" msgstr "D (%d)" +#: src/rs-store.c:296 msgid "Deleted photos" msgstr "Verwijderde foto's" @@ -386,420 +466,641 @@ #. understanding of our interface. I was thinking about adding a button instead #. that said "ROCK ON!" to instantly play "AC/DC - Highway to Hell", but I #. believe this will be better for the end user +#: src/rs-store.c:331 msgid "Priorities" msgstr "Prioriteiten" +#: src/rs-store.c:527 #, c-format msgid "" "%s\n" "\n" msgstr "" +#: src/rs-store.c:530 #, c-format msgid "Focal length: %dmm\n" msgstr "" +#: src/rs-store.c:533 #, c-format msgid "Shutter speed: %.1fs\n" msgstr "" +#: src/rs-store.c:535 #, c-format msgid "Shutter speed: 1/%.0fs\n" msgstr "" +#: src/rs-store.c:538 #, c-format msgid "Aperture: F/%.01f\n" msgstr "" +#: src/rs-store.c:541 #, c-format msgid "ISO: %u\n" msgstr "" +#: src/rs-store.c:544 #, c-format msgid "Time: %s" msgstr "" +#: src/rs-preview-widget.c:505 +msgid "Display Navigation" +msgstr "" + +#: src/rs-preview-widget.c:756 +msgid "Light out mode not available" +msgstr "" + +#: src/rs-preview-widget.c:757 +msgid "" +"Your setup doesn't seem to support RGBA visuals and/or compositing. Consult " +"your operating system manual for enabling RGBA visuals and compositing." +msgstr "" + +#: src/rs-preview-widget.c:987 msgid "Size" msgstr "Grootte" +#: src/rs-preview-widget.c:995 msgid "-" msgstr "-" +#: src/rs-preview-widget.c:1001 msgid "Grid" msgstr "Raster" +#: src/rs-preview-widget.c:1006 msgid "None" msgstr "Geen" +#: src/rs-preview-widget.c:1007 msgid "Golden sections" msgstr "" +#: src/rs-preview-widget.c:1008 msgid "Rule of thirds" msgstr "" +#: src/rs-preview-widget.c:1009 msgid "Golden triangles #1" msgstr "" +#: src/rs-preview-widget.c:1010 msgid "Golden triangles #2" msgstr "" +#: src/rs-preview-widget.c:1011 msgid "Harmonious triangles #1" msgstr "" +#: src/rs-preview-widget.c:1012 msgid "Harmonious triangles #2" msgstr "" +#: src/rs-preview-widget.c:1021 msgid "Aspect" msgstr "" +#: src/rs-preview-widget.c:1026 msgid "Freeform" msgstr "" +#: src/rs-preview-widget.c:1027 msgid "ISO paper (A4)" msgstr "" +#: src/rs-preview-widget.c:1028 msgid "3:2 (35mm)" msgstr "3:2 (35mm)" +#: src/rs-preview-widget.c:1029 msgid "4:3" msgstr "4:3" +#: src/rs-preview-widget.c:1030 msgid "10:8 (SXGA)" msgstr "10:8 (SXGA)" +#: src/rs-preview-widget.c:1031 msgid "16:10 (Wide XGA)" msgstr "16:10 (Wide XGA)" +#: src/rs-preview-widget.c:1032 msgid "8:3 (Dualhead XGA)" msgstr "8:3 (Dualhead XGA)" +#: src/rs-preview-widget.c:1033 msgid "1:1" msgstr "1:1" +#: src/rs-preview-widget.c:1034 msgid "Golden rectangle" msgstr "" +#: src/rs-preview-widget.c:1042 src/rs-preview-widget.c:1053 msgid "Crop" msgstr "" +#: src/rs-preview-widget.c:1044 msgid "Don't crop" msgstr "" -msgid "Flip the photo over the x-axis" -msgstr "Spiegelen om X-as" +#. Snapshot labels +#: src/rs-toolbox.c:157 src/rs-actions.c:972 +msgid " A " +msgstr " A " -msgid "Mirror the photo over the y-axis" -msgstr "Spiegelen om Y-as" +#: src/rs-toolbox.c:158 src/rs-actions.c:973 +msgid " B " +msgstr " B " -msgid "Rotate the photo 90 degrees clockwise" -msgstr "90 graden roteren" +#: src/rs-toolbox.c:159 src/rs-actions.c:974 +msgid " C " +msgstr " C " -msgid "Rotate the photo 180 degrees" -msgstr "180 graden roteren" +#. FIXME: Get height from gconf +#: src/rs-toolbox.c:184 +msgid "Histogram" +msgstr "Histogram" -msgid "Rotate the photo 90 degrees counter clockwise" -msgstr "270 graden roteren (90 graden tegen de klok)" - -msgid "Transforms" -msgstr "Transformaties" - -msgid "Reset this setting" +#: src/rs-toolbox.c:297 +msgid "Reset" msgstr "" +#: src/rs-toolbox.c:415 src/rs-toolbox.c:540 msgid "Open curve ..." msgstr "Curve openen..." +#: src/rs-toolbox.c:546 msgid "Save curve as ..." msgstr "Curve bewaren als..." +#: src/rs-toolbox.c:552 msgid "Reset curve" msgstr "" +#: src/rs-toolbox.c:557 msgid "Auto adjust curve ends" msgstr "" -msgid " A " -msgstr " A " +#. Pack everything nice +#: src/rs-toolbox.c:637 +#, fuzzy +msgid "Basic" +msgstr "Batch" -msgid " B " -msgstr " B " +#: src/rs-toolbox.c:638 +msgid "Channel Mixer" +msgstr "" -msgid " C " -msgstr " C " +#: src/rs-toolbox.c:639 src/rs-actions.c:353 +msgid "Curve" +msgstr "Curve" -#. Build GUI -msgid "Exposure" -msgstr "Belichting" +#: src/rs-toolbox.c:683 +msgid "Flip the photo over the x-axis" +msgstr "Spiegelen om X-as" -msgid "Hue" -msgstr "Tint" +#: src/rs-toolbox.c:684 +msgid "Mirror the photo over the y-axis" +msgstr "Spiegelen om Y-as" -msgid "Contrast" -msgstr "Contrast" +#: src/rs-toolbox.c:685 +msgid "Rotate the photo 90 degrees clockwise" +msgstr "90 graden roteren" -#. Box it! -msgid "Warmth/tint" -msgstr "Temperatuur" +#: src/rs-toolbox.c:686 +msgid "Rotate the photo 90 degrees counter clockwise" +msgstr "270 graden roteren (90 graden tegen de klok)" -msgid "Sharpen" -msgstr "Verscherpen" +#: src/rs-toolbox.c:698 +msgid "Transforms" +msgstr "Transformaties" -msgid "Curve" -msgstr "Curve" - -msgid "Histogram" -msgstr "Histogram" - +#: src/rs-actions.c:141 msgid "Open directory" msgstr "" +#: src/rs-actions.c:198 +msgid "File exported" +msgstr "Bestand ge?xporteerd" + +#: src/rs-actions.c:203 src/rs-actions.c:222 +#, fuzzy +msgid "Export failed" +msgstr "Bestand exporteren" + +#: src/rs-actions.c:232 msgid "Error exporting" msgstr "" +#: src/rs-actions.c:233 msgid "Error exporting photo to gimp." msgstr "" +#: src/rs-actions.c:256 src/rs-actions.c:274 msgid "Deleting photos" msgstr "Foto's verwijderen" +#: src/rs-actions.c:257 msgid "Your files will be permanently deleted!" msgstr "Bestanden zullen definitief verwijderd worden!" +#: src/rs-actions.c:259 msgid "Delete photos" msgstr "Foto's verwijderen" +#: src/rs-actions.c:333 msgid "Copied settings" msgstr "Gekopieerde instellingen" +#. Build GUI +#: src/rs-actions.c:346 +msgid "Exposure" +msgstr "Belichting" + +#: src/rs-actions.c:348 +msgid "Hue" +msgstr "Tint" + +#: src/rs-actions.c:349 +msgid "Contrast" +msgstr "Contrast" + +#: src/rs-actions.c:350 msgid "White balance" msgstr "Witbalans" +#: src/rs-actions.c:351 +msgid "Sharpen" +msgstr "Verscherpen" + +#: src/rs-actions.c:352 +msgid "Channel mixer" +msgstr "" + +#: src/rs-actions.c:385 msgid "Select settings to paste" msgstr "Selecteer instellingen om te plakken" +#: src/rs-actions.c:443 msgid "Pasted settings" msgstr "" +#: src/rs-actions.c:446 msgid "Nothing to paste" msgstr "Niets te plakken" +#: src/rs-actions.c:449 msgid "Buffer empty" msgstr "" +#: src/rs-actions.c:492 msgid "Adjusting to auto white balance" msgstr "Aanpassen naar automatische witbalans" +#: src/rs-actions.c:502 msgid "No white balance to set from" msgstr "" +#: src/rs-actions.c:505 msgid "Adjusting to camera white balance" msgstr "Aanpassen naar camera witbalans" +#: src/rs-actions.c:683 msgid "Showing exposure mask" msgstr "" +#: src/rs-actions.c:685 msgid "Hiding exposure mask" msgstr "" +#: src/rs-actions.c:715 #, c-format msgid " %s added to batch queue" msgstr "" +#: src/rs-actions.c:717 #, c-format msgid "%s already added to batch queue" msgstr "" +#: src/rs-actions.c:724 src/rs-actions.c:796 #, c-format msgid "%d photos added to batch queue" msgstr "" +#: src/rs-actions.c:761 msgid "" "Select which settings to\n" "add to batch queue" msgstr "" +#: src/rs-actions.c:814 msgid "Removed from batch queue" msgstr "" +#: src/rs-actions.c:816 msgid "Not in batch queue" msgstr "" +#: src/rs-actions.c:850 msgid "A raw image converter for GTK+/GNOME" msgstr "" +#: src/rs-actions.c:881 msgid "_File" msgstr "_Bestand" +#: src/rs-actions.c:882 msgid "_Edit" msgstr "Be_werken" +#: src/rs-actions.c:883 msgid "_Photo" msgstr "_Foto" +#: src/rs-actions.c:884 msgid "_Set Priority" msgstr "_Prioriteit instellen" +#: src/rs-actions.c:885 msgid "_White Balance" msgstr "_Witbalans" +#: src/rs-actions.c:886 msgid "_View" msgstr "_Weergave" +#: src/rs-actions.c:887 msgid "_Sort by" msgstr "" +#: src/rs-actions.c:888 msgid "_Batch" msgstr "_Batch" +#: src/rs-actions.c:889 msgid "_Help" msgstr "_Help" #. File menu +#: src/rs-actions.c:894 msgid "_Open Directory" msgstr "Map _openen" +#: src/rs-actions.c:895 msgid "_Quick Export" msgstr "_Vlugge export" +#: src/rs-actions.c:896 msgid "_Export As" msgstr "_Exporteer als..." +#: src/rs-actions.c:897 msgid "_Export to Gimp" msgstr "_Exporteer naar Gimp" +#: src/rs-actions.c:898 msgid "_Reload directory" msgstr "Map _herladen" +#: src/rs-actions.c:899 msgid "_Delete flagged photos" msgstr "_Verwijder gemarkeerde foto's" +#: src/rs-actions.c:900 msgid "_Quit" msgstr "_Afsluiten" #. Edit menu +#: src/rs-actions.c:903 msgid "_Revert settings" msgstr "Instellingen _herstellen" +#: src/rs-actions.c:904 msgid "_Copy settings" msgstr "Instellingen _kopi?ren" +#: src/rs-actions.c:905 msgid "_Paste settings" msgstr "Instellingen _plakken" +#: src/rs-actions.c:906 msgid "_Reset settings" msgstr "Instellingen _ongedaan maken" +#: src/rs-actions.c:907 msgid "_Preferences" msgstr "_Voorkeuren" #. Photo menu +#: src/rs-actions.c:910 msgid "_Flag photo for deletion" msgstr "_Markeer voor verwijderen" +#: src/rs-actions.c:911 msgid "_1" msgstr "_1" +#: src/rs-actions.c:912 msgid "_2" msgstr "_2" +#: src/rs-actions.c:913 msgid "_3" msgstr "_3" +#: src/rs-actions.c:914 msgid "_Remove priority" msgstr "_Verwijder prioriteit" +#: src/rs-actions.c:915 msgid "_Auto" msgstr "_Auto" +#: src/rs-actions.c:916 msgid "_Camera" msgstr "_Camera" +#: src/rs-actions.c:917 msgid "_Crop" msgstr "_Snijden" +#: src/rs-actions.c:918 msgid "_Uncrop" msgstr "Snijden ongedaan maken" +#: src/rs-actions.c:919 msgid "_Straighten" msgstr "_Rechtzetten" +#: src/rs-actions.c:920 msgid "_Unstraighten" msgstr "Rechtzetten ongedaan maken" +#: src/rs-actions.c:921 msgid "_Group" msgstr "_Groeperen" +#: src/rs-actions.c:922 msgid "_Ungroup" msgstr "Groeperen ongedaan maken" +#: src/rs-actions.c:923 #, fuzzy msgid "_Auto group" msgstr "Groeperen ongedaan maken" +#: src/rs-actions.c:924 +#, fuzzy +msgid "_Tag Photo..." +msgstr "_Foto" + +#: src/rs-actions.c:925 +msgid "Rotate Clockwise" +msgstr "" + +#: src/rs-actions.c:926 +#, fuzzy +msgid "Rotate Counter Clockwise" +msgstr "90 graden roteren" + +#: src/rs-actions.c:927 +msgid "Flip" +msgstr "" + +#: src/rs-actions.c:928 +msgid "Mirror" +msgstr "" + #. View menu +#: src/rs-actions.c:931 msgid "_Previous photo" msgstr "_Vorige foto" +#: src/rs-actions.c:932 msgid "_Next Photo" msgstr "V_olgende foto" -msgid "_Zoom to fit" -msgstr "_Inpassen" - -msgid "_Zoom to 100%" -msgstr "_Zoom naar 100%" - #. Batch menu +#: src/rs-actions.c:935 msgid "_Add to batch queue" msgstr "_Toevoegen aan batch-rij" +#: src/rs-actions.c:936 msgid "_Add current view to queue" msgstr "" +#: src/rs-actions.c:937 msgid "_Remove from batch queue" msgstr "" +#: src/rs-actions.c:938 msgid "_Start" msgstr "_Start" #. help menu +#: src/rs-actions.c:941 msgid "_About" msgstr "_Info..." +#: src/rs-actions.c:949 +msgid "_Zoom to fit" +msgstr "_Inpassen" + +#: src/rs-actions.c:950 msgid "_Iconbox" msgstr "_Miniaturen" +#: src/rs-actions.c:951 msgid "_Toolbox" msgstr "_Gereedschappen" +#: src/rs-actions.c:952 msgid "_Fullscreen" msgstr "_Volledig scherm" +#: src/rs-actions.c:953 msgid "_Exposure mask" msgstr "" +#: src/rs-actions.c:954 msgid "_Split" msgstr "_Splitsen" +#: src/rs-actions.c:956 +msgid "_Lights out" +msgstr "" + +#: src/rs-actions.c:962 msgid "Name" msgstr "" +#: src/rs-actions.c:963 msgid "Timestamp" msgstr "" +#: src/rs-actions.c:964 #, fuzzy msgid "ISO" msgstr "ISO%d" +#: src/rs-actions.c:965 msgid "Aperture" msgstr "" +#: src/rs-actions.c:966 msgid "Focallength" msgstr "" +#: src/rs-actions.c:967 msgid "Shutterspeed" msgstr "" +#~ msgid "Background renderer active" +#~ msgstr "Renderer op achtergrond actief" + +#~ msgid "Preload photos" +#~ msgstr "Foto's vooruitladen" + +#~ msgid "Filename:" +#~ msgstr "Bestandsnaam:" + +#~ msgid "Save uncompressed TIFF" +#~ msgstr "Ongecomprimeerde TIFF opslaan" + +#~ msgid "JPEG Quality:" +#~ msgstr "JPEG-kwaliteit:" + +#~ msgid "File export canceled" +#~ msgstr "Bestandsexport geannuleerd" + +#~ msgid "JPEG (Joint Photographic Experts Group)" +#~ msgstr "JPEG (Joint Photographic Experts Group)" + +#~ msgid "PNG (Portable Network Graphics)" +#~ msgstr "PNG (Portable Network Graphics)" + +#~ msgid "8-bit TIFF (Tagged Image File Format)" +#~ msgstr "8-bit TIFF (Tagged Image File Format)" + +#~ msgid "16-bit TIFF (Tagged Image File Format)" +#~ msgstr "16-bit TIFF (Tagged Image File Format)" + +#~ msgid "Rotate the photo 180 degrees" +#~ msgstr "180 graden roteren" + +#~ msgid "Warmth/tint" +#~ msgstr "Temperatuur" + +#~ msgid "_Zoom to 100%" +#~ msgstr "_Zoom naar 100%" + #~ msgid "%dmm " #~ msgstr "%dmm " @@ -853,6 +1154,3 @@ #~ msgid "Hasselblad" #~ msgstr "Hasselblad" - -#~ msgid "Opening directory..." -#~ msgstr "Map openen..." Modified: trunk/po/pl.po =================================================================== --- trunk/po/pl.po 2009-09-27 21:47:00 UTC (rev 2670) +++ trunk/po/pl.po 2009-09-27 22:10:12 UTC (rev 2671) @@ -11,7 +11,7 @@ msgstr "" "Project-Id-Version: Rawstudio 1.1.1\n" "Report-Msgid-Bugs-To: rawstudio-dev at rawstudio.org\n" -"POT-Creation-Date: 2009-01-11 04:26+0100\n" +"POT-Creation-Date: 2009-09-28 00:09+0200\n" "PO-Revision-Date: 2008-09-24 01:00+0100\n" "Last-Translator: ?ukasz Romanowicz \n" "Language-Team: Rawstudio development \n" @@ -39,30 +39,47 @@ # # Wszystkie komunikaty pojawiaj?ce si? na pasku stanu programu zosta?y # przet?umaczone na form? bezosobow? lub stron? biern?. +#: src/filename.c:280 #, c-format msgid "%f - Original filename" msgstr "%f - Oryginalna nazwa pliku" +#: src/filename.c:281 #, c-format msgid "%2c - Incremental counter" msgstr "%2c - Numer zdj?cia w kolejce" +#: src/filename.c:282 #, c-format msgid "%s - Setting id (A, B or C)" msgstr "%s - Zestaw parametr?w (A, B lub C)" +#: src/filename.c:283 +#, c-format +msgid "%d - Date from EXIF (YYYY-MM-DD)" +msgstr "" + +#: src/filename.c:284 +msgid "%t - Time from EXIF (HH:MM:SS)" +msgstr "" + +#: src/gtk-helper.c:420 msgid "Select color profile" msgstr "Wybierz profil kolor?w" +#: src/gtk-helper.c:450 msgid "All files" msgstr "Wszystkie pliki" +#: src/gtk-helper.c:451 msgid "Color profiles (icc and icm)" msgstr "Profile kolor?w (icc oraz icm)" +#: src/gtk-helper.c:465 msgid "Not a valid color profile." msgstr "To nie jest prawid?owy profil kolor?w." +#: src/gtk-helper.c:466 msgid "" "The file you selected does not appear to be a valid color profile for this " "version of Rawstudio." @@ -70,256 +87,307 @@ "Wybrany plik wydaje si? nie by? prawid?owym profilem kolor?w dla tej wersji " "Rawstudio." +#: src/gtk-helper.c:568 msgid "Enable color management (experimental)" msgstr "W??cz zarz?dzanie kolorami (eksperymentalne)" # I'm not really sure is it the camera profile or some other? +#: src/gtk-helper.c:576 msgid "Input profile" msgstr "Profil wej?ciowy" +#: src/gtk-helper.c:579 msgid "BuiltInRGBProfile" msgstr "Wbudowany profil RGB" +#: src/gtk-helper.c:629 msgid "Display profile" msgstr "Profil monitora" +#: src/gtk-helper.c:632 src/gtk-helper.c:685 msgid "sRGB" msgstr "sRGB" +#: src/gtk-helper.c:682 msgid "Export profile" msgstr "Profil wyj?ciowy" +#: src/gtk-helper.c:734 msgid "Intent" msgstr "Tryb odwzorowania" +#: src/gtk-helper.c:737 msgid "Perceptual" msgstr "Percepcyjny" +#: src/gtk-helper.c:738 msgid "Relative colormetric" msgstr "Kolorymetryczny wzgl?dny" # should be a different string for color rendering intent +#: src/gtk-helper.c:739 src/rs-actions.c:347 msgid "Saturation" msgstr "Nasycenie" +#: src/gtk-helper.c:740 msgid "Absolute colormetric" msgstr "Kolorymetryczny bezwzgl?dny" -msgid "Background renderer active" -msgstr "Przygotowywanie obrazu" - +#: src/gtk-interface.c:182 msgid "Opening photo ..." msgstr "Otwieranie zdj?cia ..." +#: src/gtk-interface.c:197 msgid "Couldn't open photo" msgstr "Otworzenie zdj?cia nie powiod?o si?" +#: src/gtk-interface.c:202 msgid "Image opened" msgstr "Zdj?cie otworzone" +#: src/gtk-interface.c:203 src/gtk-interface.c:830 src/gtk-interface.c:953 +#: src/gtk-interface.c:995 msgid "Rawstudio" msgstr "Rawstudio" +#: src/gtk-interface.c:273 #, c-format msgid "Changed photo priority (*)" msgstr "Zmieniono priorytet zdj?cia (*)" +#: src/gtk-interface.c:275 #, c-format msgid "Changed photo priority (D)" msgstr "Zaznaczono zdj?cie do usuni?cia (D)" +#: src/gtk-interface.c:277 #, c-format msgid "Changed photo priority (%d)" msgstr "Zmieniono priorytet zdj?cia (%d)" +#: src/gtk-interface.c:492 +msgid "Directory:" +msgstr "Katalog:" + +#: src/gtk-interface.c:494 src/rs-batch.c:980 +msgid "Choose output directory" +msgstr "Wybierz katalog docelowy" + +#: src/gtk-interface.c:510 src/rs-batch.c:991 +msgid "Filename template:" +msgstr "Wzorzec nazwy pliku:" + +#: src/gtk-interface.c:523 +msgid "Filename example:" +msgstr "Przyk?adowa nazwa:" + +#: src/gtk-interface.c:534 +msgid "File type:" +msgstr "Typ pliku:" + +#: src/gtk-interface.c:595 msgid "Preferences" msgstr "Ustawienia" +#: src/gtk-interface.c:610 msgid "Preview background color:" msgstr "Kolor t?a podgl?du:" +#: src/gtk-interface.c:625 msgid "Histogram height:" msgstr "Wysoko?? histogramu:" +#: src/gtk-interface.c:635 msgid "Show filenames in iconview" msgstr "Wy?wietlaj nazwy plik?w pod miniaturami" +#: src/gtk-interface.c:640 msgid "Use system theme" msgstr "U?yj sk?rki systemowej" +#: src/gtk-interface.c:647 msgid "Place cache in home directory" msgstr "Przechowuj pliki podr?czne w katalogu domowym" +#: src/gtk-interface.c:650 msgid "Load 8 bit photos (jpeg, png, etc)" msgstr "Otwieraj 8-bitowe zdj?cia (jpeg, png, itp.)" -msgid "Preload photos" -msgstr "?aduj zdj?cia z wyprzedzeniem" - -msgid "Directory:" -msgstr "Katalog:" - -msgid "Filename:" -msgstr "Nazwa pliku:" - -msgid "File type:" -msgstr "Typ pliku:" - -#. set default -msgid "Filename example:" -msgstr "Przyk?adowa nazwa:" - -msgid "Save uncompressed TIFF" -msgstr "Zapisuj pliki TIFF bez kompresji" - +#: src/gtk-interface.c:718 msgid "General" msgstr "Og?lne" #. gtk_notebook_append_page(GTK_NOTEBOOK(notebook), batch_page, gtk_label_new(_("Batch"))); +#: src/gtk-interface.c:720 msgid "Quick export" msgstr "Szybka konwersja" +#: src/gtk-interface.c:721 msgid "Colors" msgstr "Kolory" +#: src/gtk-interface.c:955 src/gtk-interface.c:1178 +msgid "Opening directory..." +msgstr "Otwieranie katalogu..." + +#: src/gtk-interface.c:965 src/gtk-interface.c:1123 src/gtk-interface.c:1193 +msgid "Ready" +msgstr "Gotowe" + +#: src/gtk-interface.c:1050 msgid "Open recursive" msgstr "Przeszukuj podkatalogi" +#: src/gtk-interface.c:1059 msgid "Tools" msgstr "Narz?dzia" +#: src/gtk-interface.c:1060 msgid "Batch" msgstr "Kolejka" +#: src/gtk-interface.c:1061 msgid "Open" msgstr "Otw?rz" -msgid "Ready" -msgstr "Gotowe" - +#: src/gtk-progress.c:63 src/gtk-progress.c:99 src/gtk-progress.c:122 msgid "Progress" msgstr "Post?p" -msgid "JPEG Quality:" -msgstr "Jako?? JPEG:" +#. FIXME: Calculate some sensible size - maybe even remember user resizes +#: src/rs-save-dialog.c:93 src/rs-toolbox.c:371 +msgid "Export File" +msgstr "Konwertuj plik" +#: src/rs-save-dialog.c:244 +#, fuzzy, c-format +msgid "Exporting to %s" +msgstr "Konwertowanie do pliku ..." + +#: src/rs-save-dialog.c:360 msgid "Keep aspect" msgstr "Zachowuj proporcje" +#: src/rs-save-dialog.c:378 msgid "Width:" msgstr "Szeroko??:" +#: src/rs-save-dialog.c:380 msgid "Height:" msgstr "Wysoko??:" +#: src/rs-save-dialog.c:382 msgid "Percent:" msgstr "Procent:" -msgid "Export File" -msgstr "Konwertuj plik" - -msgid "Exporting file ..." -msgstr "Konwertowanie do pliku ..." - -msgid "File exported" -msgstr "Konwersja zako?czona" - -msgid "File export canceled" -msgstr "Konwersja anulowana" - -msgid "JPEG (Joint Photographic Experts Group)" -msgstr "JPEG (Joint Photographic Experts Group)" - -msgid "PNG (Portable Network Graphics)" -msgstr "PNG (Portable Network Graphics)" - -msgid "8-bit TIFF (Tagged Image File Format)" -msgstr "8-bitowy TIFF (Tagged Image File Format)" - -msgid "16-bit TIFF (Tagged Image File Format)" -msgstr "16-bitowy TIFF (Tagged Image File Format)" - +#: src/rs-batch.c:206 src/rs-actions.c:737 msgid "A" msgstr "A" +#: src/rs-batch.c:209 src/rs-actions.c:738 msgid "B" msgstr "B" +#: src/rs-batch.c:212 src/rs-actions.c:739 msgid "C" msgstr "C" +#: src/rs-batch.c:437 msgid "Processing photos" msgstr "Przetwarzanie zdj??" +#: src/rs-batch.c:441 msgid "Cancel" msgstr "Anuluj" +#: src/rs-batch.c:446 msgid "Last image:" msgstr "Ostatnie zdj?cie:" +#: src/rs-batch.c:479 #, c-format msgid "Time left: %dh %dm %ds" msgstr "Pozosta?y czas: %dh %dm %ds" +#: src/rs-batch.c:483 msgid "Time left: ..." msgstr "Pozosta?y czas: ..." +#: src/rs-batch.c:495 #, c-format msgid "Loading %s ..." msgstr "?adowanie %s ..." +#: src/rs-batch.c:536 #, c-format msgid "Saving %s ..." msgstr "Zapisywanie %s ..." +#: src/rs-batch.c:634 msgid "Icon" msgstr "Ikona" +#: src/rs-batch.c:641 msgid "Filename" msgstr "Nazwa pliku" +#: src/rs-batch.c:648 msgid "Setting" msgstr "Zestaw parametr?w" +#: src/rs-batch.c:738 msgid "Start" msgstr "Rozpocznij konwersj?" +#: src/rs-batch.c:741 msgid "Remove" msgstr "Usu?" +#: src/rs-batch.c:744 msgid "Remove all" msgstr "Usu? wszystkie" +#: src/rs-batch.c:869 msgid "Photo size" msgstr "Wielko?? zdj?cia" +#: src/rs-batch.c:877 msgid "Constant scale" msgstr "Skaluj do" +#: src/rs-batch.c:878 msgid "Constant width" msgstr "Sta?a szeroko??" +#: src/rs-batch.c:879 msgid "Constant height" msgstr "Sta?a wysoko??" +#: src/rs-batch.c:880 msgid "Maximum size" msgstr "Ogranicz oba wymiary" +#: src/rs-batch.c:892 msgid "Photo width:" msgstr "Szeroko??:" +#: src/rs-batch.c:894 src/rs-batch.c:903 msgid "pixels" msgstr "pikseli" +#: src/rs-batch.c:901 msgid "Photo height:" msgstr "Wysoko??:" +#: src/rs-batch.c:910 msgid "Photo scale:" msgstr "Skaluj do:" +#: src/rs-batch.c:912 msgid "%" msgstr "%" +#: src/rs-batch.c:948 #, c-format msgid "" "Constant width:\n" @@ -328,6 +396,7 @@ "Sta?a szeroko??:\n" "%d" +#: src/rs-batch.c:951 #, c-format msgid "" "Constant height:\n" @@ -336,6 +405,7 @@ "Sta?a wysoko??:\n" "%d" +#: src/rs-batch.c:954 #, c-format msgid "" "Constant Scale:\n" @@ -344,6 +414,7 @@ "Skaluj do:\n" "%d" +#: src/rs-batch.c:958 #, c-format msgid "" "Maximum size:\n" @@ -352,67 +423,76 @@ "Ogranicz wymiary do:\n" "%d x %d" -msgid "Choose output directory" -msgstr "Wybierz katalog docelowy" - +#: src/rs-batch.c:987 msgid "Output directory:" msgstr "Katalog docelowy:" -msgid "Filename template:" -msgstr "Wzorzec nazwy pliku:" - +#: src/rs-batch.c:1012 msgid "Change" msgstr "Zmie?" # "export dimensions" - maybe just plain "dimensions" instead? +#: src/rs-batch.c:1017 msgid "Export dimensions" msgstr "Wymiary zdj??" #. All +#: src/rs-store.c:275 src/rs-store.c:834 #, c-format msgid "* (%d)" msgstr "* (%d)" +#: src/rs-store.c:276 msgid "All photos (excluding deleted)" msgstr "Wszystkie zdj?cia (bez usuni?tych)" #. 1 +#: src/rs-store.c:279 src/rs-store.c:835 #, c-format msgid "1 (%d)" msgstr "1 (%d)" +#: src/rs-store.c:280 msgid "Priority 1 photos" msgstr "Zdj?cia z priorytetem 1" #. 2 +#: src/rs-store.c:283 src/rs-store.c:836 #, c-format msgid "2 (%d)" msgstr "2 (%d)" +#: src/rs-store.c:284 msgid "Priority 2 photos" msgstr "Zdj?cia z priorytetem 2" #. 3 +#: src/rs-store.c:287 src/rs-store.c:837 #, c-format msgid "3 (%d)" msgstr "3 (%d)" +#: src/rs-store.c:288 msgid "Priority 3 photos" msgstr "Zdj?cia z priorytetem 3" #. Unsorted +#: src/rs-store.c:291 src/rs-store.c:838 #, c-format msgid "U (%d)" msgstr "U (%d)" +#: src/rs-store.c:292 msgid "Unprioritized photos" msgstr "Zdj?cia bez przypisanego priorytetu" #. Deleted +#: src/rs-store.c:295 src/rs-store.c:839 #, c-format msgid "D (%d)" msgstr "D (%d)" +#: src/rs-store.c:296 msgid "Deleted photos" msgstr "Zdj?cia do usuni?cia" @@ -421,9 +501,11 @@ #. understanding of our interface. I was thinking about adding a button instead #. that said "ROCK ON!" to instantly play "AC/DC - Highway to Hell", but I #. believe this will be better for the end user +#: src/rs-store.c:331 msgid "Priorities" msgstr "Priorytety" +#: src/rs-store.c:527 #, c-format msgid "" "%s\n" @@ -432,226 +514,327 @@ "%s\n" "\n" +#: src/rs-store.c:530 #, c-format msgid "Focal length: %dmm\n" msgstr "Ogniskowa: %dmm\n" +#: src/rs-store.c:533 #, c-format msgid "Shutter speed: %.1fs\n" msgstr "Czas na?wietlania: %.1fs\n" +#: src/rs-store.c:535 #, c-format msgid "Shutter speed: 1/%.0fs\n" msgstr "Czas na?wietlania: 1/%.0fs\n" +#: src/rs-store.c:538 #, c-format msgid "Aperture: F/%.01f\n" msgstr "Przys?ona: F/%.01f\n" +#: src/rs-store.c:541 #, c-format msgid "ISO: %u\n" msgstr "ISO: %u\n" +#: src/rs-store.c:544 #, c-format msgid "Time: %s" msgstr "Data wykonania: %s" +#: src/rs-preview-widget.c:505 +msgid "Display Navigation" +msgstr "" + +#: src/rs-preview-widget.c:756 +msgid "Light out mode not available" +msgstr "" + +#: src/rs-preview-widget.c:757 +msgid "" +"Your setup doesn't seem to support RGBA visuals and/or compositing. Consult " +"your operating system manual for enabling RGBA visuals and compositing." +msgstr "" + +#: src/rs-preview-widget.c:987 msgid "Size" msgstr "Wymiary" +#: src/rs-preview-widget.c:995 msgid "-" msgstr "-" +#: src/rs-preview-widget.c:1001 msgid "Grid" msgstr "Siatka" +#: src/rs-preview-widget.c:1006 msgid "None" msgstr "Brak" +#: src/rs-preview-widget.c:1007 msgid "Golden sections" msgstr "Z?oty podzia?" +#: src/rs-preview-widget.c:1008 msgid "Rule of thirds" msgstr "Tr?jpodzia?" +#: src/rs-preview-widget.c:1009 msgid "Golden triangles #1" msgstr "Z?ote tr?jk?ty #1" +#: src/rs-preview-widget.c:1010 msgid "Golden triangles #2" msgstr "Z?ote tr?jk?ty #2" +#: src/rs-preview-widget.c:1011 msgid "Harmonious triangles #1" msgstr "Tr?jk?ty harmoniczne #1" +#: src/rs-preview-widget.c:1012 msgid "Harmonious triangles #2" msgstr "Tr?jk?ty harmoniczne #2" +#: src/rs-preview-widget.c:1021 msgid "Aspect" msgstr "Stosunek kraw?dzi" +#: src/rs-preview-widget.c:1026 msgid "Freeform" msgstr "Dowolnie" +#: src/rs-preview-widget.c:1027 msgid "ISO paper (A4)" msgstr "Papier A4" +#: src/rs-preview-widget.c:1028 msgid "3:2 (35mm)" msgstr "3:2 (35mm)" +#: src/rs-preview-widget.c:1029 msgid "4:3" msgstr "4:3" +#: src/rs-preview-widget.c:1030 msgid "10:8 (SXGA)" msgstr "10:8 (SXGA)" +#: src/rs-preview-widget.c:1031 msgid "16:10 (Wide XGA)" msgstr "16:10 (Szerokie XGA)" +#: src/rs-preview-widget.c:1032 msgid "8:3 (Dualhead XGA)" msgstr "8:3 (Podw?jne XGA)" +#: src/rs-preview-widget.c:1033 msgid "1:1" msgstr "1:1" +#: src/rs-preview-widget.c:1034 msgid "Golden rectangle" msgstr "Z?oty podzia?" +#: src/rs-preview-widget.c:1042 src/rs-preview-widget.c:1053 msgid "Crop" msgstr "Przytnij" +#: src/rs-preview-widget.c:1044 msgid "Don't crop" msgstr "Anuluj" -msgid "Flip the photo over the x-axis" -msgstr "Odbicie lustrzane w pionie" +#. Snapshot labels +#: src/rs-toolbox.c:157 src/rs-actions.c:972 +msgid " A " +msgstr " A " -msgid "Mirror the photo over the y-axis" -msgstr "Odbicie lustrzane w poziomie" +#: src/rs-toolbox.c:158 src/rs-actions.c:973 +msgid " B " +msgstr " B " -msgid "Rotate the photo 90 degrees clockwise" -msgstr "Obr?c zdj?cie o 90 stopni zgodnie z ruchem wskaz?wek zegara" +#: src/rs-toolbox.c:159 src/rs-actions.c:974 +msgid " C " +msgstr " C " -msgid "Rotate the photo 180 degrees" -msgstr "Obr?? zdj?cie o 180 stopni" +#. FIXME: Get height from gconf +#: src/rs-toolbox.c:184 +msgid "Histogram" +msgstr "Histogram" -msgid "Rotate the photo 90 degrees counter clockwise" -msgstr "Obr?? zdj?cie o 90 stopni przeciwnie do ruchu wskaz?wek zegara" +#: src/rs-toolbox.c:297 +#, fuzzy +msgid "Reset" +msgstr "Przywr?? domy?ln? krzyw?" -msgid "Transforms" -msgstr "Przekszta?cenia" - -msgid "Reset this setting" -msgstr "Przywr?? warto?? domy?ln?" - +#: src/rs-toolbox.c:415 src/rs-toolbox.c:540 msgid "Open curve ..." msgstr "Otw?rz krzyw? ..." +#: src/rs-toolbox.c:546 msgid "Save curve as ..." msgstr "Zapisz krzyw? jako ..." +#: src/rs-toolbox.c:552 msgid "Reset curve" msgstr "Przywr?? domy?ln? krzyw?" +#: src/rs-toolbox.c:557 msgid "Auto adjust curve ends" msgstr "Automatycznie ustaw ko?ce krzywej" -msgid " A " -msgstr " A " +#. Pack everything nice +#: src/rs-toolbox.c:637 +#, fuzzy +msgid "Basic" +msgstr "Kolejka" -msgid " B " -msgstr " B " +#: src/rs-toolbox.c:638 +msgid "Channel Mixer" +msgstr "" -msgid " C " -msgstr " C " +#: src/rs-toolbox.c:639 src/rs-actions.c:353 +msgid "Curve" +msgstr "Krzywa" -#. Build GUI -msgid "Exposure" -msgstr "Ekspozycja" +#: src/rs-toolbox.c:683 +msgid "Flip the photo over the x-axis" +msgstr "Odbicie lustrzane w pionie" -msgid "Hue" -msgstr "Barwa" +#: src/rs-toolbox.c:684 +msgid "Mirror the photo over the y-axis" +msgstr "Odbicie lustrzane w poziomie" -msgid "Contrast" -msgstr "Kontrast" +#: src/rs-toolbox.c:685 +msgid "Rotate the photo 90 degrees clockwise" +msgstr "Obr?c zdj?cie o 90 stopni zgodnie z ruchem wskaz?wek zegara" -#. Box it! -msgid "Warmth/tint" -msgstr "Temperatura/zabarwienie" +#: src/rs-toolbox.c:686 +msgid "Rotate the photo 90 degrees counter clockwise" +msgstr "Obr?? zdj?cie o 90 stopni przeciwnie do ruchu wskaz?wek zegara" -msgid "Sharpen" -msgstr "Wyostrzanie" +#: src/rs-toolbox.c:698 +msgid "Transforms" +msgstr "Przekszta?cenia" -msgid "Curve" -msgstr "Krzywa" - -msgid "Histogram" -msgstr "Histogram" - +#: src/rs-actions.c:141 msgid "Open directory" msgstr "Otw?rz katalog" +#: src/rs-actions.c:198 +msgid "File exported" +msgstr "Konwersja zako?czona" + +#: src/rs-actions.c:203 src/rs-actions.c:222 +#, fuzzy +msgid "Export failed" +msgstr "Konwertuj plik" + +#: src/rs-actions.c:232 msgid "Error exporting" msgstr "B??d podczas eksportu" +#: src/rs-actions.c:233 msgid "Error exporting photo to gimp." msgstr "B??d podczas eksportowania zdj?cia do gimp-a." +#: src/rs-actions.c:256 src/rs-actions.c:274 msgid "Deleting photos" msgstr "Usuwanie zdj??" +#: src/rs-actions.c:257 msgid "Your files will be permanently deleted!" msgstr "Twoje pliki zostan? nieodwracalnie usuni?te!" +#: src/rs-actions.c:259 msgid "Delete photos" msgstr "Usu? zdj?cia" +#: src/rs-actions.c:333 msgid "Copied settings" msgstr "Skopiowano parametry" +#. Build GUI +#: src/rs-actions.c:346 +msgid "Exposure" +msgstr "Ekspozycja" + +#: src/rs-actions.c:348 +msgid "Hue" +msgstr "Barwa" + +#: src/rs-actions.c:349 +msgid "Contrast" +msgstr "Kontrast" + +#: src/rs-actions.c:350 msgid "White balance" msgstr "Balans bieli" +#: src/rs-actions.c:351 +msgid "Sharpen" +msgstr "Wyostrzanie" + +#: src/rs-actions.c:352 +msgid "Channel mixer" +msgstr "" + +#: src/rs-actions.c:385 msgid "Select settings to paste" msgstr "Wybierz parametry do zast?pienia" +#: src/rs-actions.c:443 msgid "Pasted settings" msgstr "Wklejono parametry" +#: src/rs-actions.c:446 msgid "Nothing to paste" msgstr "Brak parametr?w do zastosowania" +#: src/rs-actions.c:449 msgid "Buffer empty" msgstr "Bufor jest pusty" +#: src/rs-actions.c:492 msgid "Adjusting to auto white balance" msgstr "Ustawiono automatyczny balans bieli" +#: src/rs-actions.c:502 msgid "No white balance to set from" msgstr "Brak wzorca balansu bieli" +#: src/rs-actions.c:505 msgid "Adjusting to camera white balance" msgstr "Ustawiono balans bieli z aparatu" # not entirely sure when this string shows up +#: src/rs-actions.c:683 msgid "Showing exposure mask" msgstr "W??czono widok maski ekspozycji" # not entirely sure when this string shows up +#: src/rs-actions.c:685 msgid "Hiding exposure mask" msgstr "Ukryto widok maski ekspozycji" +#: src/rs-actions.c:715 #, c-format msgid " %s added to batch queue" msgstr " %s - dodano do kolejki" +#: src/rs-actions.c:717 #, c-format msgid "%s already added to batch queue" msgstr "%s znajduje si? ju? w kolejce" +#: src/rs-actions.c:724 src/rs-actions.c:796 #, c-format msgid "%d photos added to batch queue" msgstr "%d zdj?? dodanych do kolejki" +#: src/rs-actions.c:761 msgid "" "Select which settings to\n" "add to batch queue" @@ -659,186 +842,308 @@ "Kt?re zestawy parametr?w\n" "doda? do kolejki?" +#: src/rs-actions.c:814 msgid "Removed from batch queue" msgstr "Usuni?to z kolejki" +#: src/rs-actions.c:816 msgid "Not in batch queue" msgstr "Zdj?cia nie ma w kolejce" +#: src/rs-actions.c:850 msgid "A raw image converter for GTK+/GNOME" msgstr "Program do konwersji plik?w RAW dla GTK+/GNOME" +#: src/rs-actions.c:881 msgid "_File" msgstr "_Plik" +#: src/rs-actions.c:882 msgid "_Edit" msgstr "_Edycja" +#: src/rs-actions.c:883 msgid "_Photo" msgstr "_Zdj?cie" +#: src/rs-actions.c:884 msgid "_Set Priority" msgstr "Zmie? _priorytet" +#: src/rs-actions.c:885 msgid "_White Balance" msgstr "_Balans bieli" +#: src/rs-actions.c:886 msgid "_View" msgstr "_Widok" +#: src/rs-actions.c:887 msgid "_Sort by" msgstr "_Sortuj wg" +#: src/rs-actions.c:888 msgid "_Batch" msgstr "_Kolejka" +#: src/rs-actions.c:889 msgid "_Help" msgstr "_Pomoc" #. File menu +#: src/rs-actions.c:894 msgid "_Open Directory" msgstr "_Otw?rz katalog" +#: src/rs-actions.c:895 msgid "_Quick Export" msgstr "_Szybka konwersja" +#: src/rs-actions.c:896 msgid "_Export As" msgstr "_Konwertuj do..." +#: src/rs-actions.c:897 msgid "_Export to Gimp" msgstr "_Eksportuj do Gimp-a" +#: src/rs-actions.c:898 msgid "_Reload directory" msgstr "_Prze?aduj katalog" +#: src/rs-actions.c:899 msgid "_Delete flagged photos" msgstr "_Usu? oznaczone zdj?cia" +#: src/rs-actions.c:900 msgid "_Quit" msgstr "Za_ko?cz" #. Edit menu +#: src/rs-actions.c:903 msgid "_Revert settings" msgstr "_Cofnij zmiany" +#: src/rs-actions.c:904 msgid "_Copy settings" msgstr "_Kopiuj parametry" +#: src/rs-actions.c:905 msgid "_Paste settings" msgstr "_Wklej parametry" +#: src/rs-actions.c:906 msgid "_Reset settings" msgstr "_Parametry domy?lne" +#: src/rs-actions.c:907 msgid "_Preferences" msgstr "_Ustawienia" #. Photo menu +#: src/rs-actions.c:910 msgid "_Flag photo for deletion" msgstr "_Oznacz do usuni?cia" +#: src/rs-actions.c:911 msgid "_1" msgstr "_1" +#: src/rs-actions.c:912 msgid "_2" msgstr "_2" +#: src/rs-actions.c:913 msgid "_3" msgstr "_3" +#: src/rs-actions.c:914 msgid "_Remove priority" msgstr "_Usu? priorytet" +#: src/rs-actions.c:915 msgid "_Auto" msgstr "_Auto" +#: src/rs-actions.c:916 msgid "_Camera" msgstr "_Z aparatu" +#: src/rs-actions.c:917 msgid "_Crop" msgstr "_Przytnij" +#: src/rs-actions.c:918 msgid "_Uncrop" msgstr "_Cofnij przycinanie" +#: src/rs-actions.c:919 msgid "_Straighten" msgstr "_Wyprostuj" +#: src/rs-actions.c:920 msgid "_Unstraighten" msgstr "_Cofnij prostowanie" +#: src/rs-actions.c:921 msgid "_Group" msgstr "_Grupuj" +#: src/rs-actions.c:922 msgid "_Ungroup" msgstr "_Anuluj grupowanie" +#: src/rs-actions.c:923 msgid "_Auto group" msgstr "Grupuj a_utomatycznie" +#: src/rs-actions.c:924 +#, fuzzy +msgid "_Tag Photo..." +msgstr "_Zdj?cie" + +#: src/rs-actions.c:925 +msgid "Rotate Clockwise" +msgstr "" + +#: src/rs-actions.c:926 +#, fuzzy +msgid "Rotate Counter Clockwise" +msgstr "Obr?c zdj?cie o 90 stopni zgodnie z ruchem wskaz?wek zegara" + +#: src/rs-actions.c:927 +msgid "Flip" +msgstr "" + +#: src/rs-actions.c:928 +msgid "Mirror" +msgstr "" + #. View menu +#: src/rs-actions.c:931 msgid "_Previous photo" msgstr "_Poprzednie zdj?cie" +#: src/rs-actions.c:932 msgid "_Next Photo" msgstr "_Nast?pne zdj?cie" -msgid "_Zoom to fit" -msgstr "_Dopasuj do okna" - -msgid "_Zoom to 100%" -msgstr "_Skala 1:1" - #. Batch menu +#: src/rs-actions.c:935 msgid "_Add to batch queue" msgstr "_Dodaj do kolejki" +#: src/rs-actions.c:936 msgid "_Add current view to queue" msgstr "Dodaj bie??cy _widok do kolejki" +#: src/rs-actions.c:937 msgid "_Remove from batch queue" msgstr "_Usu? z kolejki" +#: src/rs-actions.c:938 msgid "_Start" msgstr "_Rozpocznij konwersj?" #. help menu +#: src/rs-actions.c:941 msgid "_About" msgstr "_O programie" +#: src/rs-actions.c:949 +msgid "_Zoom to fit" +msgstr "_Dopasuj do okna" + +#: src/rs-actions.c:950 msgid "_Iconbox" msgstr "_Miniaturki" +#: src/rs-actions.c:951 msgid "_Toolbox" msgstr "_Panel narz?dzi" +#: src/rs-actions.c:952 msgid "_Fullscreen" msgstr "Pe?ny _ekran" +#: src/rs-actions.c:953 msgid "_Exposure mask" msgstr "_Maska ekspozycji" +#: src/rs-actions.c:954 msgid "_Split" msgstr "Podgl?d _dzielony" +#: src/rs-actions.c:956 +msgid "_Lights out" +msgstr "" + +#: src/rs-actions.c:962 msgid "Name" msgstr "Nazwy pliku" +#: src/rs-actions.c:963 msgid "Timestamp" msgstr "Daty wykonania" +#: src/rs-actions.c:964 msgid "ISO" msgstr "ISO" +#: src/rs-actions.c:965 msgid "Aperture" msgstr "Przys?ony" +#: src/rs-actions.c:966 msgid "Focallength" msgstr "Ogniskowej" +#: src/rs-actions.c:967 msgid "Shutterspeed" msgstr "Czasu na?wietlania" +#~ msgid "Background renderer active" +#~ msgstr "Przygotowywanie obrazu" + +#~ msgid "Preload photos" +#~ msgstr "?aduj zdj?cia z wyprzedzeniem" + +#~ msgid "Filename:" +#~ msgstr "Nazwa pliku:" + +#~ msgid "Save uncompressed TIFF" +#~ msgstr "Zapisuj pliki TIFF bez kompresji" + +#~ msgid "JPEG Quality:" +#~ msgstr "Jako?? JPEG:" + +#~ msgid "File export canceled" +#~ msgstr "Konwersja anulowana" + +#~ msgid "JPEG (Joint Photographic Experts Group)" +#~ msgstr "JPEG (Joint Photographic Experts Group)" + +#~ msgid "PNG (Portable Network Graphics)" +#~ msgstr "PNG (Portable Network Graphics)" + +#~ msgid "8-bit TIFF (Tagged Image File Format)" +#~ msgstr "8-bitowy TIFF (Tagged Image File Format)" + +#~ msgid "16-bit TIFF (Tagged Image File Format)" +#~ msgstr "16-bitowy TIFF (Tagged Image File Format)" + +#~ msgid "Rotate the photo 180 degrees" +#~ msgstr "Obr?? zdj?cie o 180 stopni" + +#~ msgid "Reset this setting" +#~ msgstr "Przywr?? warto?? domy?ln?" + +#~ msgid "Warmth/tint" +#~ msgstr "Temperatura/zabarwienie" + +#~ msgid "_Zoom to 100%" +#~ msgstr "_Skala 1:1" + #~ msgid "Canon CR2" #~ msgstr "Canon CR2" @@ -880,6 +1185,3 @@ #~ msgid "Hasselblad" #~ msgstr "Hasselblad" - -#~ msgid "Opening directory..." -#~ msgstr "Otwieranie katalogu..." Modified: trunk/po/pt_BR.po =================================================================== --- trunk/po/pt_BR.po 2009-09-27 21:47:00 UTC (rev 2670) +++ trunk/po/pt_BR.po 2009-09-27 22:10:12 UTC (rev 2671) @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: Rawstudio 1.1.1\n" "Report-Msgid-Bugs-To: rawstudio-dev at rawstudio.org\n" -"POT-Creation-Date: 2009-01-11 04:26+0100\n" +"POT-Creation-Date: 2009-09-28 00:09+0200\n" "PO-Revision-Date: 2008-05-20 18:29-0300\n" "Last-Translator: Rafael Sachetto \n" "Language-Team: Rawstudio development \n" @@ -15,283 +15,351 @@ "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +#: src/filename.c:280 #, c-format msgid "%f - Original filename" msgstr "%f - Arquivo original" +#: src/filename.c:281 #, c-format msgid "%2c - Incremental counter" msgstr "" +#: src/filename.c:282 #, c-format msgid "%s - Setting id (A, B or C)" msgstr "" +#: src/filename.c:283 +#, c-format +msgid "%d - Date from EXIF (YYYY-MM-DD)" +msgstr "" + +#: src/filename.c:284 +msgid "%t - Time from EXIF (HH:MM:SS)" +msgstr "" + +#: src/gtk-helper.c:420 msgid "Select color profile" msgstr "Selecione o perfil de cores" +#: src/gtk-helper.c:450 msgid "All files" msgstr "Todos os arquivos" +#: src/gtk-helper.c:451 msgid "Color profiles (icc and icm)" msgstr "" +#: src/gtk-helper.c:465 msgid "Not a valid color profile." msgstr "N?o ? um perfil de cor v?lido." +#: src/gtk-helper.c:466 msgid "" "The file you selected does not appear to be a valid color profile for this " "version of Rawstudio." msgstr "" +#: src/gtk-helper.c:568 msgid "Enable color management (experimental)" msgstr "" +#: src/gtk-helper.c:576 msgid "Input profile" msgstr "Perfil de entrada" +#: src/gtk-helper.c:579 msgid "BuiltInRGBProfile" msgstr "" +#: src/gtk-helper.c:629 msgid "Display profile" msgstr "" +#: src/gtk-helper.c:632 src/gtk-helper.c:685 msgid "sRGB" msgstr "sRGB" +#: src/gtk-helper.c:682 msgid "Export profile" msgstr "Exportar perfil" +#: src/gtk-helper.c:734 msgid "Intent" msgstr "" +#: src/gtk-helper.c:737 msgid "Perceptual" msgstr "" +#: src/gtk-helper.c:738 msgid "Relative colormetric" msgstr "" +#: src/gtk-helper.c:739 src/rs-actions.c:347 msgid "Saturation" msgstr "Satura??o" +#: src/gtk-helper.c:740 msgid "Absolute colormetric" msgstr "" -msgid "Background renderer active" -msgstr "" - +#: src/gtk-interface.c:182 msgid "Opening photo ..." msgstr "Abrindo foto ..." +#: src/gtk-interface.c:197 msgid "Couldn't open photo" msgstr "" +#: src/gtk-interface.c:202 msgid "Image opened" msgstr "Imagem aberta" +#: src/gtk-interface.c:203 src/gtk-interface.c:830 src/gtk-interface.c:953 +#: src/gtk-interface.c:995 msgid "Rawstudio" msgstr "Rawstudio" +#: src/gtk-interface.c:273 #, c-format msgid "Changed photo priority (*)" msgstr "" +#: src/gtk-interface.c:275 #, c-format msgid "Changed photo priority (D)" msgstr "" +#: src/gtk-interface.c:277 #, c-format msgid "Changed photo priority (%d)" msgstr "" +#: src/gtk-interface.c:492 +msgid "Directory:" +msgstr "Diret?rio:" + +#: src/gtk-interface.c:494 src/rs-batch.c:980 +msgid "Choose output directory" +msgstr "Escolha o diret?rio de sa?da" + +#: src/gtk-interface.c:510 src/rs-batch.c:991 +msgid "Filename template:" +msgstr "" + +#: src/gtk-interface.c:523 +msgid "Filename example:" +msgstr "Exemplo de nome de arquivo:" + +#: src/gtk-interface.c:534 +msgid "File type:" +msgstr "Tipo do arquivo:" + +#: src/gtk-interface.c:595 msgid "Preferences" msgstr "Prefer?ncias" +#: src/gtk-interface.c:610 msgid "Preview background color:" msgstr "" +#: src/gtk-interface.c:625 msgid "Histogram height:" msgstr "" +#: src/gtk-interface.c:635 msgid "Show filenames in iconview" msgstr "" +#: src/gtk-interface.c:640 msgid "Use system theme" msgstr "" +#: src/gtk-interface.c:647 msgid "Place cache in home directory" msgstr "" +#: src/gtk-interface.c:650 msgid "Load 8 bit photos (jpeg, png, etc)" msgstr "" -msgid "Preload photos" -msgstr "" - -msgid "Directory:" -msgstr "Diret?rio:" - -msgid "Filename:" -msgstr "Nome do arquivo:" - -msgid "File type:" -msgstr "Tipo do arquivo:" - -#. set default -msgid "Filename example:" -msgstr "Exemplo de nome de arquivo:" - -msgid "Save uncompressed TIFF" -msgstr "" - +#: src/gtk-interface.c:718 msgid "General" msgstr "Gera;" #. gtk_notebook_append_page(GTK_NOTEBOOK(notebook), batch_page, gtk_label_new(_("Batch"))); +#: src/gtk-interface.c:720 msgid "Quick export" msgstr "" +#: src/gtk-interface.c:721 msgid "Colors" msgstr "Cores" +#: src/gtk-interface.c:955 src/gtk-interface.c:1178 +msgid "Opening directory..." +msgstr "Abrido diret?rio..." + +#: src/gtk-interface.c:965 src/gtk-interface.c:1123 src/gtk-interface.c:1193 +msgid "Ready" +msgstr "Pronto" + +#: src/gtk-interface.c:1050 msgid "Open recursive" msgstr "Abrir recursivamente" +#: src/gtk-interface.c:1059 msgid "Tools" msgstr "Ferramentas" +#: src/gtk-interface.c:1060 msgid "Batch" msgstr "Lote" +#: src/gtk-interface.c:1061 msgid "Open" msgstr "Abrir" -msgid "Ready" -msgstr "Pronto" - +#: src/gtk-progress.c:63 src/gtk-progress.c:99 src/gtk-progress.c:122 msgid "Progress" msgstr "Progresso" -msgid "JPEG Quality:" -msgstr "Qualidade JPEG:" +#. FIXME: Calculate some sensible size - maybe even remember user resizes +#: src/rs-save-dialog.c:93 src/rs-toolbox.c:371 +msgid "Export File" +msgstr "Exportar arquivo" +#: src/rs-save-dialog.c:244 +#, fuzzy, c-format +msgid "Exporting to %s" +msgstr "Exportando arquivo ..." + +#: src/rs-save-dialog.c:360 msgid "Keep aspect" msgstr "Manter aspecto" +#: src/rs-save-dialog.c:378 msgid "Width:" msgstr "Largura:" +#: src/rs-save-dialog.c:380 msgid "Height:" msgstr "Altura" +#: src/rs-save-dialog.c:382 msgid "Percent:" msgstr "Percentual:" -msgid "Export File" -msgstr "Exportar arquivo" - -msgid "Exporting file ..." -msgstr "Exportando arquivo ..." - -msgid "File exported" -msgstr "Arquivo exportado" - -msgid "File export canceled" -msgstr "Exporta??o de arquivo cancelada" - -msgid "JPEG (Joint Photographic Experts Group)" -msgstr "JPEG (Joint Photographic Experts Group)" - -msgid "PNG (Portable Network Graphics)" -msgstr "PNG (Portable Network Graphics)" - -msgid "8-bit TIFF (Tagged Image File Format)" -msgstr "8-bit TIFF (Tagged Image File Format)" - -msgid "16-bit TIFF (Tagged Image File Format)" -msgstr "16-bit TIFF (Tagged Image File Format)" - +#: src/rs-batch.c:206 src/rs-actions.c:737 msgid "A" msgstr "A" +#: src/rs-batch.c:209 src/rs-actions.c:738 msgid "B" msgstr "B" +#: src/rs-batch.c:212 src/rs-actions.c:739 msgid "C" msgstr "C" +#: src/rs-batch.c:437 msgid "Processing photos" msgstr "Processando fotos" +#: src/rs-batch.c:441 msgid "Cancel" msgstr "Cancelar" +#: src/rs-batch.c:446 msgid "Last image:" msgstr "?ltima imagem:" +#: src/rs-batch.c:479 #, c-format msgid "Time left: %dh %dm %ds" msgstr "Tempo restante: %dh %dm %ds" +#: src/rs-batch.c:483 msgid "Time left: ..." msgstr "Tempo restante: ..." +#: src/rs-batch.c:495 #, c-format msgid "Loading %s ..." msgstr "Carregando %s ..." +#: src/rs-batch.c:536 #, c-format msgid "Saving %s ..." msgstr "Salvando %s ..." +#: src/rs-batch.c:634 msgid "Icon" msgstr "?cone" +#: src/rs-batch.c:641 msgid "Filename" msgstr "Nome do arquivo" +#: src/rs-batch.c:648 msgid "Setting" msgstr "Configura??o" +#: src/rs-batch.c:738 msgid "Start" msgstr "Come?ar" +#: src/rs-batch.c:741 msgid "Remove" msgstr "Remover" +#: src/rs-batch.c:744 msgid "Remove all" msgstr "Remover todos" +#: src/rs-batch.c:869 msgid "Photo size" msgstr "Tamanho da foto" +#: src/rs-batch.c:877 msgid "Constant scale" msgstr "" +#: src/rs-batch.c:878 msgid "Constant width" msgstr "Largura constante" +#: src/rs-batch.c:879 msgid "Constant height" msgstr "Altura constante" +#: src/rs-batch.c:880 msgid "Maximum size" msgstr "Tamanho m?ximo" +#: src/rs-batch.c:892 msgid "Photo width:" msgstr "Largura da foto:" +#: src/rs-batch.c:894 src/rs-batch.c:903 msgid "pixels" msgstr "pixels" +#: src/rs-batch.c:901 msgid "Photo height:" msgstr "Altura da foto:" +#: src/rs-batch.c:910 msgid "Photo scale:" msgstr "" +#: src/rs-batch.c:912 msgid "%" msgstr "%" +#: src/rs-batch.c:948 #, c-format msgid "" "Constant width:\n" @@ -300,6 +368,7 @@ "Largura constante:\n" "%d" +#: src/rs-batch.c:951 #, c-format msgid "" "Constant height:\n" @@ -308,12 +377,14 @@ "Altura constante:\n" "%d" +#: src/rs-batch.c:954 #, c-format msgid "" "Constant Scale:\n" "%d" msgstr "" +#: src/rs-batch.c:958 #, c-format msgid "" "Maximum size:\n" @@ -322,66 +393,75 @@ "Maximum size:\n" "%d x %d" -msgid "Choose output directory" -msgstr "Escolha o diret?rio de sa?da" - +#: src/rs-batch.c:987 msgid "Output directory:" msgstr "Diret?rio de sa?da:" -msgid "Filename template:" -msgstr "" - +#: src/rs-batch.c:1012 msgid "Change" msgstr "Modificar" +#: src/rs-batch.c:1017 msgid "Export dimensions" msgstr "Exportar dimens?es" #. All +#: src/rs-store.c:275 src/rs-store.c:834 #, c-format msgid "* (%d)" msgstr "* (%d)" +#: src/rs-store.c:276 msgid "All photos (excluding deleted)" msgstr "Todas as fotos (exceto as apagadas)" #. 1 +#: src/rs-store.c:279 src/rs-store.c:835 #, c-format msgid "1 (%d)" msgstr "1 (%d)" +#: src/rs-store.c:280 msgid "Priority 1 photos" msgstr "" #. 2 +#: src/rs-store.c:283 src/rs-store.c:836 #, c-format msgid "2 (%d)" msgstr "2 (%d)" +#: src/rs-store.c:284 msgid "Priority 2 photos" msgstr "" #. 3 +#: src/rs-store.c:287 src/rs-store.c:837 #, c-format msgid "3 (%d)" msgstr "3 (%d)" +#: src/rs-store.c:288 msgid "Priority 3 photos" msgstr "" #. Unsorted +#: src/rs-store.c:291 src/rs-store.c:838 #, c-format msgid "U (%d)" msgstr "U (%d)" +#: src/rs-store.c:292 msgid "Unprioritized photos" msgstr "Fotos sem prioridade" #. Deleted +#: src/rs-store.c:295 src/rs-store.c:839 #, c-format msgid "D (%d)" msgstr "D (%d)" +#: src/rs-store.c:296 msgid "Deleted photos" msgstr "Fotos apagadas" @@ -390,419 +470,622 @@ #. understanding of our interface. I was thinking about adding a button instead #. that said "ROCK ON!" to instantly play "AC/DC - Highway to Hell", but I #. believe this will be better for the end user +#: src/rs-store.c:331 msgid "Priorities" msgstr "Prioridades" +#: src/rs-store.c:527 #, c-format msgid "" "%s\n" "\n" msgstr "" +#: src/rs-store.c:530 #, c-format msgid "Focal length: %dmm\n" msgstr "" +#: src/rs-store.c:533 #, c-format msgid "Shutter speed: %.1fs\n" msgstr "" +#: src/rs-store.c:535 #, c-format msgid "Shutter speed: 1/%.0fs\n" msgstr "" +#: src/rs-store.c:538 #, c-format msgid "Aperture: F/%.01f\n" msgstr "" +#: src/rs-store.c:541 #, c-format msgid "ISO: %u\n" msgstr "" +#: src/rs-store.c:544 #, c-format msgid "Time: %s" msgstr "" +#: src/rs-preview-widget.c:505 +msgid "Display Navigation" +msgstr "" + +#: src/rs-preview-widget.c:756 +msgid "Light out mode not available" +msgstr "" + +#: src/rs-preview-widget.c:757 +msgid "" +"Your setup doesn't seem to support RGBA visuals and/or compositing. Consult " +"your operating system manual for enabling RGBA visuals and compositing." +msgstr "" + +#: src/rs-preview-widget.c:987 msgid "Size" msgstr "Tamanho" +#: src/rs-preview-widget.c:995 msgid "-" msgstr "-" +#: src/rs-preview-widget.c:1001 msgid "Grid" msgstr "Grade" +#: src/rs-preview-widget.c:1006 msgid "None" msgstr "Nenhuma" +#: src/rs-preview-widget.c:1007 msgid "Golden sections" msgstr "" +#: src/rs-preview-widget.c:1008 msgid "Rule of thirds" msgstr "" +#: src/rs-preview-widget.c:1009 msgid "Golden triangles #1" msgstr "" +#: src/rs-preview-widget.c:1010 msgid "Golden triangles #2" msgstr "" +#: src/rs-preview-widget.c:1011 msgid "Harmonious triangles #1" msgstr "" +#: src/rs-preview-widget.c:1012 msgid "Harmonious triangles #2" msgstr "" +#: src/rs-preview-widget.c:1021 msgid "Aspect" msgstr "Aspecto" +#: src/rs-preview-widget.c:1026 msgid "Freeform" msgstr "" +#: src/rs-preview-widget.c:1027 msgid "ISO paper (A4)" msgstr "ISO paper (A4)" +#: src/rs-preview-widget.c:1028 msgid "3:2 (35mm)" msgstr "3:2 (35mm)" +#: src/rs-preview-widget.c:1029 msgid "4:3" msgstr "4:3" +#: src/rs-preview-widget.c:1030 msgid "10:8 (SXGA)" msgstr "10:8 (SXGA)" +#: src/rs-preview-widget.c:1031 msgid "16:10 (Wide XGA)" msgstr "" +#: src/rs-preview-widget.c:1032 msgid "8:3 (Dualhead XGA)" msgstr "8:3 (Dualhead XGA)" +#: src/rs-preview-widget.c:1033 msgid "1:1" msgstr "1:1" +#: src/rs-preview-widget.c:1034 msgid "Golden rectangle" msgstr "" +#: src/rs-preview-widget.c:1042 src/rs-preview-widget.c:1053 msgid "Crop" msgstr "" +#: src/rs-preview-widget.c:1044 msgid "Don't crop" msgstr "" -msgid "Flip the photo over the x-axis" -msgstr "" +#. Snapshot labels +#: src/rs-toolbox.c:157 src/rs-actions.c:972 +msgid " A " +msgstr " A " -msgid "Mirror the photo over the y-axis" -msgstr "" +#: src/rs-toolbox.c:158 src/rs-actions.c:973 +msgid " B " +msgstr " B " -msgid "Rotate the photo 90 degrees clockwise" -msgstr "" +#: src/rs-toolbox.c:159 src/rs-actions.c:974 +msgid " C " +msgstr " C " -msgid "Rotate the photo 180 degrees" -msgstr "" +#. FIXME: Get height from gconf +#: src/rs-toolbox.c:184 +msgid "Histogram" +msgstr "Histograma" -msgid "Rotate the photo 90 degrees counter clockwise" -msgstr "" +#: src/rs-toolbox.c:297 +#, fuzzy +msgid "Reset" +msgstr "Reiniciar curva" -msgid "Transforms" -msgstr "" - -msgid "Reset this setting" -msgstr "" - +#: src/rs-toolbox.c:415 src/rs-toolbox.c:540 msgid "Open curve ..." msgstr "Abrir curva ..." +#: src/rs-toolbox.c:546 msgid "Save curve as ..." msgstr "Salvar curva como ..." +#: src/rs-toolbox.c:552 msgid "Reset curve" msgstr "Reiniciar curva" +#: src/rs-toolbox.c:557 msgid "Auto adjust curve ends" msgstr "" -msgid " A " -msgstr " A " +#. Pack everything nice +#: src/rs-toolbox.c:637 +#, fuzzy +msgid "Basic" +msgstr "Lote" -msgid " B " -msgstr " B " +#: src/rs-toolbox.c:638 +msgid "Channel Mixer" +msgstr "" -msgid " C " -msgstr " C " +#: src/rs-toolbox.c:639 src/rs-actions.c:353 +msgid "Curve" +msgstr "Curva" -#. Build GUI -msgid "Exposure" +#: src/rs-toolbox.c:683 +msgid "Flip the photo over the x-axis" msgstr "" -msgid "Hue" +#: src/rs-toolbox.c:684 +msgid "Mirror the photo over the y-axis" msgstr "" -msgid "Contrast" +#: src/rs-toolbox.c:685 +msgid "Rotate the photo 90 degrees clockwise" msgstr "" -#. Box it! -msgid "Warmth/tint" +#: src/rs-toolbox.c:686 +msgid "Rotate the photo 90 degrees counter clockwise" msgstr "" -msgid "Sharpen" +#: src/rs-toolbox.c:698 +msgid "Transforms" msgstr "" -msgid "Curve" -msgstr "Curva" - -msgid "Histogram" -msgstr "Histograma" - +#: src/rs-actions.c:141 msgid "Open directory" msgstr "" +#: src/rs-actions.c:198 +msgid "File exported" +msgstr "Arquivo exportado" + +#: src/rs-actions.c:203 src/rs-actions.c:222 +#, fuzzy +msgid "Export failed" +msgstr "Exportar arquivo" + +#: src/rs-actions.c:232 msgid "Error exporting" msgstr "" +#: src/rs-actions.c:233 msgid "Error exporting photo to gimp." msgstr "" +#: src/rs-actions.c:256 src/rs-actions.c:274 msgid "Deleting photos" msgstr "Apagando fotos" +#: src/rs-actions.c:257 msgid "Your files will be permanently deleted!" msgstr "Seus arquivos ser?o permanentemente apagado!" +#: src/rs-actions.c:259 msgid "Delete photos" msgstr "Apagar fotos" +#: src/rs-actions.c:333 msgid "Copied settings" msgstr "Configura??es copiadas" +#. Build GUI +#: src/rs-actions.c:346 +msgid "Exposure" +msgstr "" + +#: src/rs-actions.c:348 +msgid "Hue" +msgstr "" + +#: src/rs-actions.c:349 +msgid "Contrast" +msgstr "" + +#: src/rs-actions.c:350 msgid "White balance" msgstr "" +#: src/rs-actions.c:351 +msgid "Sharpen" +msgstr "" + +#: src/rs-actions.c:352 +msgid "Channel mixer" +msgstr "" + +#: src/rs-actions.c:385 msgid "Select settings to paste" msgstr "" +#: src/rs-actions.c:443 msgid "Pasted settings" msgstr "Configura??es coladas" +#: src/rs-actions.c:446 msgid "Nothing to paste" msgstr "Nada para colar" +#: src/rs-actions.c:449 msgid "Buffer empty" msgstr "Buffer vazio" +#: src/rs-actions.c:492 msgid "Adjusting to auto white balance" msgstr "" +#: src/rs-actions.c:502 msgid "No white balance to set from" msgstr "" +#: src/rs-actions.c:505 msgid "Adjusting to camera white balance" msgstr "" +#: src/rs-actions.c:683 msgid "Showing exposure mask" msgstr "" +#: src/rs-actions.c:685 msgid "Hiding exposure mask" msgstr "" +#: src/rs-actions.c:715 #, c-format msgid " %s added to batch queue" msgstr "" +#: src/rs-actions.c:717 #, c-format msgid "%s already added to batch queue" msgstr "" +#: src/rs-actions.c:724 src/rs-actions.c:796 #, c-format msgid "%d photos added to batch queue" msgstr "" +#: src/rs-actions.c:761 msgid "" "Select which settings to\n" "add to batch queue" msgstr "" +#: src/rs-actions.c:814 msgid "Removed from batch queue" msgstr "" +#: src/rs-actions.c:816 msgid "Not in batch queue" msgstr "" +#: src/rs-actions.c:850 msgid "A raw image converter for GTK+/GNOME" msgstr "" +#: src/rs-actions.c:881 msgid "_File" msgstr "_Arquivo" +#: src/rs-actions.c:882 msgid "_Edit" msgstr "_Editar" +#: src/rs-actions.c:883 msgid "_Photo" msgstr "_Foto" +#: src/rs-actions.c:884 msgid "_Set Priority" msgstr "Ajustar _prioridade" +#: src/rs-actions.c:885 msgid "_White Balance" msgstr "_Balan?o de branco" +#: src/rs-actions.c:886 msgid "_View" msgstr "_Visualizar" +#: src/rs-actions.c:887 msgid "_Sort by" msgstr "" +#: src/rs-actions.c:888 msgid "_Batch" msgstr "_Lote" +#: src/rs-actions.c:889 msgid "_Help" msgstr "A_juda" #. File menu +#: src/rs-actions.c:894 msgid "_Open Directory" msgstr "" +#: src/rs-actions.c:895 msgid "_Quick Export" msgstr "" +#: src/rs-actions.c:896 msgid "_Export As" msgstr "" +#: src/rs-actions.c:897 msgid "_Export to Gimp" msgstr "" +#: src/rs-actions.c:898 msgid "_Reload directory" msgstr "" +#: src/rs-actions.c:899 msgid "_Delete flagged photos" msgstr "" +#: src/rs-actions.c:900 msgid "_Quit" msgstr "_Sair" #. Edit menu +#: src/rs-actions.c:903 msgid "_Revert settings" msgstr "" +#: src/rs-actions.c:904 msgid "_Copy settings" msgstr "" +#: src/rs-actions.c:905 msgid "_Paste settings" msgstr "" +#: src/rs-actions.c:906 msgid "_Reset settings" msgstr "" +#: src/rs-actions.c:907 msgid "_Preferences" msgstr "" #. Photo menu +#: src/rs-actions.c:910 msgid "_Flag photo for deletion" msgstr "" +#: src/rs-actions.c:911 msgid "_1" msgstr "_1" +#: src/rs-actions.c:912 msgid "_2" msgstr "_2" +#: src/rs-actions.c:913 msgid "_3" msgstr "_3" +#: src/rs-actions.c:914 msgid "_Remove priority" msgstr "_Remover prioridade" +#: src/rs-actions.c:915 msgid "_Auto" msgstr "" +#: src/rs-actions.c:916 msgid "_Camera" msgstr "" +#: src/rs-actions.c:917 msgid "_Crop" msgstr "" +#: src/rs-actions.c:918 msgid "_Uncrop" msgstr "" +#: src/rs-actions.c:919 msgid "_Straighten" msgstr "" +#: src/rs-actions.c:920 msgid "_Unstraighten" msgstr "" +#: src/rs-actions.c:921 msgid "_Group" msgstr "" +#: src/rs-actions.c:922 msgid "_Ungroup" msgstr "" +#: src/rs-actions.c:923 msgid "_Auto group" msgstr "" -#. View menu -msgid "_Previous photo" +#: src/rs-actions.c:924 +#, fuzzy +msgid "_Tag Photo..." +msgstr "_Foto" + +#: src/rs-actions.c:925 +msgid "Rotate Clockwise" msgstr "" -msgid "_Next Photo" +#: src/rs-actions.c:926 +msgid "Rotate Counter Clockwise" msgstr "" -msgid "_Zoom to fit" +#: src/rs-actions.c:927 +msgid "Flip" msgstr "" -msgid "_Zoom to 100%" +#: src/rs-actions.c:928 +msgid "Mirror" msgstr "" +#. View menu +#: src/rs-actions.c:931 +msgid "_Previous photo" +msgstr "" + +#: src/rs-actions.c:932 +msgid "_Next Photo" +msgstr "" + #. Batch menu +#: src/rs-actions.c:935 msgid "_Add to batch queue" msgstr "" +#: src/rs-actions.c:936 msgid "_Add current view to queue" msgstr "" +#: src/rs-actions.c:937 msgid "_Remove from batch queue" msgstr "" +#: src/rs-actions.c:938 msgid "_Start" msgstr "" #. help menu +#: src/rs-actions.c:941 msgid "_About" msgstr "" +#: src/rs-actions.c:949 +msgid "_Zoom to fit" +msgstr "" + +#: src/rs-actions.c:950 msgid "_Iconbox" msgstr "" +#: src/rs-actions.c:951 msgid "_Toolbox" msgstr "" +#: src/rs-actions.c:952 msgid "_Fullscreen" msgstr "_Tela cheia" +#: src/rs-actions.c:953 msgid "_Exposure mask" msgstr "" +#: src/rs-actions.c:954 msgid "_Split" msgstr "" +#: src/rs-actions.c:956 +msgid "_Lights out" +msgstr "" + +#: src/rs-actions.c:962 msgid "Name" msgstr "" +#: src/rs-actions.c:963 msgid "Timestamp" msgstr "" +#: src/rs-actions.c:964 #, fuzzy msgid "ISO" msgstr "ISO%d" +#: src/rs-actions.c:965 msgid "Aperture" msgstr "" +#: src/rs-actions.c:966 msgid "Focallength" msgstr "" +#: src/rs-actions.c:967 msgid "Shutterspeed" msgstr "" +#~ msgid "Filename:" +#~ msgstr "Nome do arquivo:" + +#~ msgid "JPEG Quality:" +#~ msgstr "Qualidade JPEG:" + +#~ msgid "File export canceled" +#~ msgstr "Exporta??o de arquivo cancelada" + +#~ msgid "JPEG (Joint Photographic Experts Group)" +#~ msgstr "JPEG (Joint Photographic Experts Group)" + +#~ msgid "PNG (Portable Network Graphics)" +#~ msgstr "PNG (Portable Network Graphics)" + +#~ msgid "8-bit TIFF (Tagged Image File Format)" +#~ msgstr "8-bit TIFF (Tagged Image File Format)" + +#~ msgid "16-bit TIFF (Tagged Image File Format)" +#~ msgstr "16-bit TIFF (Tagged Image File Format)" + #~ msgid "%dmm " #~ msgstr "%dmm " @@ -853,6 +1136,3 @@ #~ msgid "Hasselblad" #~ msgstr "Hasselblad" - -#~ msgid "Opening directory..." -#~ msgstr "Abrido diret?rio..." Modified: trunk/po/ru.po =================================================================== --- trunk/po/ru.po 2009-09-27 21:47:00 UTC (rev 2670) +++ trunk/po/ru.po 2009-09-27 22:10:12 UTC (rev 2671) @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: Rawstudio 1.1.1\n" "Report-Msgid-Bugs-To: rawstudio-dev at rawstudio.org\n" -"POT-Creation-Date: 2009-01-11 04:26+0100\n" +"POT-Creation-Date: 2009-09-28 00:09+0200\n" "PO-Revision-Date: 2008-09-30 01:06+0300\n" "Last-Translator: Alexandre Prokoudine \n" "Language-Team: Rawstudio development \n" @@ -21,30 +21,47 @@ "X-Poedit-Language: Russian\n" "X-Poedit-Country: RUSSIAN FEDERATION\n" +#: src/filename.c:280 #, c-format msgid "%f - Original filename" msgstr "%f ? ???????? ??? ?????" +#: src/filename.c:281 #, c-format msgid "%2c - Incremental counter" msgstr "%2c ? ?????????? ??????" +#: src/filename.c:282 #, c-format msgid "%s - Setting id (A, B or C)" msgstr "%s ? ????? ?????????? (A, B ??? C)" +#: src/filename.c:283 +#, c-format +msgid "%d - Date from EXIF (YYYY-MM-DD)" +msgstr "" + +#: src/filename.c:284 +msgid "%t - Time from EXIF (HH:MM:SS)" +msgstr "" + +#: src/gtk-helper.c:420 msgid "Select color profile" msgstr "???????? ???????? ???????" +#: src/gtk-helper.c:450 msgid "All files" msgstr "??? ?????" +#: src/gtk-helper.c:451 msgid "Color profiles (icc and icm)" msgstr "???????? ??????? (icc ? icm)" +#: src/gtk-helper.c:465 msgid "Not a valid color profile." msgstr "??? ???????????? ???????? ???????." +#: src/gtk-helper.c:466 msgid "" "The file you selected does not appear to be a valid color profile for this " "version of Rawstudio." @@ -52,254 +69,305 @@ "????????? ???? ???? ?? ????? ?? ?????????? ???????? ???????, ??????? ????? " "???? ?? ???????????? ? Rawstudio." +#: src/gtk-helper.c:568 msgid "Enable color management (experimental)" msgstr "???????? ?????????? ??????" +#: src/gtk-helper.c:576 msgid "Input profile" msgstr "??????? ??????: " +#: src/gtk-helper.c:579 msgid "BuiltInRGBProfile" msgstr "?????????? ??????? RGB" +#: src/gtk-helper.c:629 msgid "Display profile" msgstr "??????? ????????: " +#: src/gtk-helper.c:632 src/gtk-helper.c:685 msgid "sRGB" msgstr "sRGB" +#: src/gtk-helper.c:682 msgid "Export profile" msgstr "??????? ????????: " +#: src/gtk-helper.c:734 msgid "Intent" msgstr "?????????????: " +#: src/gtk-helper.c:737 msgid "Perceptual" msgstr "??????????????" +#: src/gtk-helper.c:738 msgid "Relative colormetric" msgstr "????????????? ?????????????????" +#: src/gtk-helper.c:739 src/rs-actions.c:347 msgid "Saturation" msgstr "????????????" +#: src/gtk-helper.c:740 msgid "Absolute colormetric" msgstr "?????????? ?????????????????" -msgid "Background renderer active" -msgstr "??????? ?????????? ???????" - +#: src/gtk-interface.c:182 msgid "Opening photo ..." msgstr "??????????? ??????..." +#: src/gtk-interface.c:197 msgid "Couldn't open photo" msgstr "?? ??????? ??????? ??????" +#: src/gtk-interface.c:202 msgid "Image opened" msgstr "?????? ??????" +#: src/gtk-interface.c:203 src/gtk-interface.c:830 src/gtk-interface.c:953 +#: src/gtk-interface.c:995 msgid "Rawstudio" msgstr "Rawstudio" +#: src/gtk-interface.c:273 #, c-format msgid "Changed photo priority (*)" msgstr "??????? ????????? ?????? (*)" +#: src/gtk-interface.c:275 #, c-format msgid "Changed photo priority (D)" msgstr "??????? ????????? ?????? (D)" +#: src/gtk-interface.c:277 #, c-format msgid "Changed photo priority (%d)" msgstr "??????? ????????? ?????? (%d)" +#: src/gtk-interface.c:492 +msgid "Directory:" +msgstr "???????:" + +#: src/gtk-interface.c:494 src/rs-batch.c:980 +msgid "Choose output directory" +msgstr "??????? ??????? ??? ????????" + +#: src/gtk-interface.c:510 src/rs-batch.c:991 +msgid "Filename template:" +msgstr "?????? ????? ?????:" + +#: src/gtk-interface.c:523 +msgid "Filename example:" +msgstr "?????? ????? ?????:" + +#: src/gtk-interface.c:534 +msgid "File type:" +msgstr "??? ?????:" + +#: src/gtk-interface.c:595 msgid "Preferences" msgstr "?????????" +#: src/gtk-interface.c:610 msgid "Preview background color:" msgstr "???? ????:" +#: src/gtk-interface.c:625 msgid "Histogram height:" msgstr "?????? ???????????:" +#: src/gtk-interface.c:635 msgid "Show filenames in iconview" msgstr "?????????? ????? ??????" +#: src/gtk-interface.c:640 msgid "Use system theme" msgstr "???????????? ????????? ????? ??????????" +#: src/gtk-interface.c:647 msgid "Place cache in home directory" msgstr "??????? ??? ? ???????? ????????" +#: src/gtk-interface.c:650 msgid "Load 8 bit photos (jpeg, png, etc)" msgstr "????????? 8-????????? ?????? (JPEG, PNG ? ?.?.)" -msgid "Preload photos" -msgstr "????????? ??????" - -msgid "Directory:" -msgstr "???????:" - -msgid "Filename:" -msgstr "??? ?????:" - -msgid "File type:" -msgstr "??? ?????:" - -#. set default -msgid "Filename example:" -msgstr "?????? ????? ?????:" - -msgid "Save uncompressed TIFF" -msgstr "????????? ???????? TIFF" - +#: src/gtk-interface.c:718 msgid "General" msgstr "?????" #. gtk_notebook_append_page(GTK_NOTEBOOK(notebook), batch_page, gtk_label_new(_("Batch"))); +#: src/gtk-interface.c:720 msgid "Quick export" msgstr "??????? ???????" +#: src/gtk-interface.c:721 msgid "Colors" msgstr "?????" +#: src/gtk-interface.c:955 src/gtk-interface.c:1178 +msgid "Opening directory..." +msgstr "??????????? ???????" + +#: src/gtk-interface.c:965 src/gtk-interface.c:1123 src/gtk-interface.c:1193 +msgid "Ready" +msgstr "??????" + +#: src/gtk-interface.c:1050 msgid "Open recursive" msgstr "????????? ??????????" +#: src/gtk-interface.c:1059 msgid "Tools" msgstr "???????????" +#: src/gtk-interface.c:1060 msgid "Batch" msgstr "???????" +#: src/gtk-interface.c:1061 msgid "Open" msgstr "????????" -msgid "Ready" -msgstr "??????" - +#: src/gtk-progress.c:63 src/gtk-progress.c:99 src/gtk-progress.c:122 msgid "Progress" msgstr "????????" -msgid "JPEG Quality:" -msgstr "???????? JPEG" +#. FIXME: Calculate some sensible size - maybe even remember user resizes +#: src/rs-save-dialog.c:93 src/rs-toolbox.c:371 +msgid "Export File" +msgstr "?????????????? ??????" +#: src/rs-save-dialog.c:244 +#, fuzzy, c-format +msgid "Exporting to %s" +msgstr "?????????????? ??????..." + +#: src/rs-save-dialog.c:360 msgid "Keep aspect" msgstr "????????? ???????????" +#: src/rs-save-dialog.c:378 msgid "Width:" msgstr "??????:" +#: src/rs-save-dialog.c:380 msgid "Height:" msgstr "??????:" +#: src/rs-save-dialog.c:382 msgid "Percent:" msgstr "???????:" -msgid "Export File" -msgstr "?????????????? ??????" - -msgid "Exporting file ..." -msgstr "?????????????? ??????..." - -msgid "File exported" -msgstr "???? ?????????????" - -msgid "File export canceled" -msgstr "??????? ??????? ???????" - -msgid "JPEG (Joint Photographic Experts Group)" -msgstr "JPEG (Joint Photographic Experts Group)" - -msgid "PNG (Portable Network Graphics)" -msgstr "PNG (Portable Network Graphics)" - -msgid "8-bit TIFF (Tagged Image File Format)" -msgstr "8-????????? TIFF (Tagged Image File Format)" - -msgid "16-bit TIFF (Tagged Image File Format)" -msgstr "16-????????? TIFF (Tagged Image File Format)" - +#: src/rs-batch.c:206 src/rs-actions.c:737 msgid "A" msgstr "A" +#: src/rs-batch.c:209 src/rs-actions.c:738 msgid "B" msgstr "B" +#: src/rs-batch.c:212 src/rs-actions.c:739 msgid "C" msgstr "C" +#: src/rs-batch.c:437 msgid "Processing photos" msgstr "??????? ???????" +#: src/rs-batch.c:441 msgid "Cancel" msgstr "????????" +#: src/rs-batch.c:446 msgid "Last image:" msgstr "????????? ??????:" +#: src/rs-batch.c:479 #, c-format msgid "Time left: %dh %dm %ds" msgstr "???????? ???????: %dh %dm %ds" +#: src/rs-batch.c:483 msgid "Time left: ..." msgstr "???????? ???????: ..." +#: src/rs-batch.c:495 #, c-format msgid "Loading %s ..." msgstr "??????????? %s ..." +#: src/rs-batch.c:536 #, c-format msgid "Saving %s ..." msgstr "??????????? %s ..." +#: src/rs-batch.c:634 msgid "Icon" msgstr "?????" +#: src/rs-batch.c:641 msgid "Filename" msgstr "??? ?????" +#: src/rs-batch.c:648 msgid "Setting" msgstr "????????" +#: src/rs-batch.c:738 msgid "Start" msgstr "??????" +#: src/rs-batch.c:741 msgid "Remove" msgstr "???????" +#: src/rs-batch.c:744 msgid "Remove all" msgstr "??????? ???" +#: src/rs-batch.c:869 msgid "Photo size" msgstr "?????? ??????:" +#: src/rs-batch.c:877 msgid "Constant scale" msgstr "???????????????" +#: src/rs-batch.c:878 msgid "Constant width" msgstr "?????????? ??????" +#: src/rs-batch.c:879 msgid "Constant height" msgstr "?????????? ??????" +#: src/rs-batch.c:880 msgid "Maximum size" msgstr "???????????? ??????" +#: src/rs-batch.c:892 msgid "Photo width:" msgstr "?????? ??????:" +#: src/rs-batch.c:894 src/rs-batch.c:903 msgid "pixels" msgstr "????????" +#: src/rs-batch.c:901 msgid "Photo height:" msgstr "?????? ??????:" +#: src/rs-batch.c:910 msgid "Photo scale:" msgstr "??????? ??????:" +#: src/rs-batch.c:912 msgid "%" msgstr "%" +#: src/rs-batch.c:948 #, c-format msgid "" "Constant width:\n" @@ -308,6 +376,7 @@ "?????????? ??????:\n" "%d" +#: src/rs-batch.c:951 #, c-format msgid "" "Constant height:\n" @@ -316,6 +385,7 @@ "?????????? ??????:\n" "%d" +#: src/rs-batch.c:954 #, c-format msgid "" "Constant Scale:\n" @@ -324,6 +394,7 @@ "?????????? ???????:\n" "%d" +#: src/rs-batch.c:958 #, c-format msgid "" "Maximum size:\n" @@ -332,66 +403,75 @@ "???????????? ??????:\n" "%d x %d" -msgid "Choose output directory" -msgstr "??????? ??????? ??? ????????" - +#: src/rs-batch.c:987 msgid "Output directory:" msgstr "??????? ??????:" -msgid "Filename template:" -msgstr "?????? ????? ?????:" - +#: src/rs-batch.c:1012 msgid "Change" msgstr "???????" +#: src/rs-batch.c:1017 msgid "Export dimensions" msgstr "??????? ??? ????????" #. All +#: src/rs-store.c:275 src/rs-store.c:834 #, c-format msgid "* (%d)" msgstr "* (%d)" +#: src/rs-store.c:276 msgid "All photos (excluding deleted)" msgstr "??? ?????? (????? ?????????)" #. 1 +#: src/rs-store.c:279 src/rs-store.c:835 #, c-format msgid "1 (%d)" msgstr "1 (%d)" +#: src/rs-store.c:280 msgid "Priority 1 photos" msgstr "?????? ? ??????????? 1" #. 2 +#: src/rs-store.c:283 src/rs-store.c:836 #, c-format msgid "2 (%d)" msgstr "2 (%d)" +#: src/rs-store.c:284 msgid "Priority 2 photos" msgstr "?????? ? ??????????? 2" #. 3 +#: src/rs-store.c:287 src/rs-store.c:837 #, c-format msgid "3 (%d)" msgstr "3 (%d)" +#: src/rs-store.c:288 msgid "Priority 3 photos" msgstr "?????? ? ??????????? 3" #. Unsorted +#: src/rs-store.c:291 src/rs-store.c:838 #, c-format msgid "U (%d)" msgstr "U (%d)" +#: src/rs-store.c:292 msgid "Unprioritized photos" msgstr "?????? ??? ??????????" #. Deleted +#: src/rs-store.c:295 src/rs-store.c:839 #, c-format msgid "D (%d)" msgstr "D (%d)" +#: src/rs-store.c:296 msgid "Deleted photos" msgstr "????????? ??????" @@ -400,9 +480,11 @@ #. understanding of our interface. I was thinking about adding a button instead #. that said "ROCK ON!" to instantly play "AC/DC - Highway to Hell", but I #. believe this will be better for the end user +#: src/rs-store.c:331 msgid "Priorities" msgstr "??????????" +#: src/rs-store.c:527 #, c-format msgid "" "%s\n" @@ -411,224 +493,325 @@ "%s\n" "\n" +#: src/rs-store.c:530 #, c-format msgid "Focal length: %dmm\n" msgstr "???????? ??????????: %d??\n" +#: src/rs-store.c:533 #, c-format msgid "Shutter speed: %.1fs\n" msgstr "????????: %.1f?\n" +#: src/rs-store.c:535 #, c-format msgid "Shutter speed: 1/%.0fs\n" msgstr "????????: 1/%.0f?\n" +#: src/rs-store.c:538 #, c-format msgid "Aperture: F/%.01f\n" msgstr "????????: F/%.01f\n" +#: src/rs-store.c:541 #, c-format msgid "ISO: %u\n" msgstr "ISO: %u\n" +#: src/rs-store.c:544 #, c-format msgid "Time: %s" msgstr "?????: %s" +#: src/rs-preview-widget.c:505 +msgid "Display Navigation" +msgstr "" + +#: src/rs-preview-widget.c:756 +msgid "Light out mode not available" +msgstr "" + +#: src/rs-preview-widget.c:757 +msgid "" +"Your setup doesn't seem to support RGBA visuals and/or compositing. Consult " +"your operating system manual for enabling RGBA visuals and compositing." +msgstr "" + +#: src/rs-preview-widget.c:987 msgid "Size" msgstr "??????" +#: src/rs-preview-widget.c:995 msgid "-" msgstr "?" +#: src/rs-preview-widget.c:1001 msgid "Grid" msgstr "?????" +#: src/rs-preview-widget.c:1006 msgid "None" msgstr "???" +#: src/rs-preview-widget.c:1007 msgid "Golden sections" msgstr "??????? ???????" +#: src/rs-preview-widget.c:1008 msgid "Rule of thirds" msgstr "??????? ??????" +#: src/rs-preview-widget.c:1009 msgid "Golden triangles #1" msgstr "??????? ???????????? ?1" +#: src/rs-preview-widget.c:1010 msgid "Golden triangles #2" msgstr "??????? ???????????? ?2" +#: src/rs-preview-widget.c:1011 msgid "Harmonious triangles #1" msgstr "??????????? ???????????? ?1" +#: src/rs-preview-widget.c:1012 msgid "Harmonious triangles #2" msgstr "??????????? ???????????? ?2" +#: src/rs-preview-widget.c:1021 msgid "Aspect" msgstr "???????????" +#: src/rs-preview-widget.c:1026 msgid "Freeform" msgstr "????????????" +#: src/rs-preview-widget.c:1027 msgid "ISO paper (A4)" msgstr "?????? ?????? ISO (A4)" +#: src/rs-preview-widget.c:1028 msgid "3:2 (35mm)" msgstr "3:2 (35??)" +#: src/rs-preview-widget.c:1029 msgid "4:3" msgstr "4:3" +#: src/rs-preview-widget.c:1030 msgid "10:8 (SXGA)" msgstr "10:8 (SXGA)" +#: src/rs-preview-widget.c:1031 msgid "16:10 (Wide XGA)" msgstr "16:10 (Wide XGA)" +#: src/rs-preview-widget.c:1032 msgid "8:3 (Dualhead XGA)" msgstr "8:3 (Dualhead XGA)" +#: src/rs-preview-widget.c:1033 msgid "1:1" msgstr "1:1" +#: src/rs-preview-widget.c:1034 msgid "Golden rectangle" msgstr "??????? ?????????????" +#: src/rs-preview-widget.c:1042 src/rs-preview-widget.c:1053 msgid "Crop" msgstr "???????????" +#: src/rs-preview-widget.c:1044 msgid "Don't crop" msgstr "?? ???????????" -msgid "Flip the photo over the x-axis" -msgstr "????????? ???????? ?? ?????????????? ???" +#. Snapshot labels +#: src/rs-toolbox.c:157 src/rs-actions.c:972 +msgid " A " +msgstr " A " -msgid "Mirror the photo over the y-axis" -msgstr "????????? ???????? ?? ???????????? ???" +#: src/rs-toolbox.c:158 src/rs-actions.c:973 +msgid " B " +msgstr " B " -msgid "Rotate the photo 90 degrees clockwise" -msgstr "????????? ?????? ?? 90? ?? ??????? ???????" +#: src/rs-toolbox.c:159 src/rs-actions.c:974 +msgid " C " +msgstr " C " -msgid "Rotate the photo 180 degrees" -msgstr "????????? ?????? ?? 180?" +#. FIXME: Get height from gconf +#: src/rs-toolbox.c:184 +msgid "Histogram" +msgstr "???????????" -msgid "Rotate the photo 90 degrees counter clockwise" -msgstr "????????? ?????? ?? 90? ?????? ??????? ???????" +#: src/rs-toolbox.c:297 +#, fuzzy +msgid "Reset" +msgstr "???????? ??????" -msgid "Transforms" -msgstr "??????????????" - -msgid "Reset this setting" -msgstr "???????? ???? ????????" - +#: src/rs-toolbox.c:415 src/rs-toolbox.c:540 msgid "Open curve ..." msgstr "????????? ?????? ?? ?????..." +#: src/rs-toolbox.c:546 msgid "Save curve as ..." msgstr "????????? ?????? ???..." +#: src/rs-toolbox.c:552 msgid "Reset curve" msgstr "???????? ??????" +#: src/rs-toolbox.c:557 msgid "Auto adjust curve ends" msgstr "????????? ????? ??????" -msgid " A " -msgstr " A " +#. Pack everything nice +#: src/rs-toolbox.c:637 +#, fuzzy +msgid "Basic" +msgstr "???????" -msgid " B " -msgstr " B " +#: src/rs-toolbox.c:638 +msgid "Channel Mixer" +msgstr "" -msgid " C " -msgstr " C " +#: src/rs-toolbox.c:639 src/rs-actions.c:353 +msgid "Curve" +msgstr "??????" -#. Build GUI -msgid "Exposure" -msgstr "??????????" +#: src/rs-toolbox.c:683 +msgid "Flip the photo over the x-axis" +msgstr "????????? ???????? ?? ?????????????? ???" -msgid "Hue" -msgstr "???" +#: src/rs-toolbox.c:684 +msgid "Mirror the photo over the y-axis" +msgstr "????????? ???????? ?? ???????????? ???" -msgid "Contrast" -msgstr "????????" +#: src/rs-toolbox.c:685 +msgid "Rotate the photo 90 degrees clockwise" +msgstr "????????? ?????? ?? 90? ?? ??????? ???????" -#. Box it! -msgid "Warmth/tint" -msgstr "??????????? ? ???????" +#: src/rs-toolbox.c:686 +msgid "Rotate the photo 90 degrees counter clockwise" +msgstr "????????? ?????? ?? 90? ?????? ??????? ???????" -msgid "Sharpen" -msgstr "????????" +#: src/rs-toolbox.c:698 +msgid "Transforms" +msgstr "??????????????" -msgid "Curve" -msgstr "??????" - -msgid "Histogram" -msgstr "???????????" - +#: src/rs-actions.c:141 msgid "Open directory" msgstr "??????? ???????" +#: src/rs-actions.c:198 +msgid "File exported" +msgstr "???? ?????????????" + +#: src/rs-actions.c:203 src/rs-actions.c:222 +#, fuzzy +msgid "Export failed" +msgstr "?????????????? ??????" + +#: src/rs-actions.c:232 msgid "Error exporting" msgstr "?????? ??? ????????" +#: src/rs-actions.c:233 msgid "Error exporting photo to gimp." msgstr "?????? ??? ???????? ? GIMP" +#: src/rs-actions.c:256 src/rs-actions.c:274 msgid "Deleting photos" msgstr "????????? ??????" +#: src/rs-actions.c:257 msgid "Your files will be permanently deleted!" msgstr "???? ????? ????? ??????? ????????????!" +#: src/rs-actions.c:259 msgid "Delete photos" msgstr "??????? ??????" +#: src/rs-actions.c:333 msgid "Copied settings" msgstr "????????? ??????? ???????????" +#. Build GUI +#: src/rs-actions.c:346 +msgid "Exposure" +msgstr "??????????" + +#: src/rs-actions.c:348 +msgid "Hue" +msgstr "???" + +#: src/rs-actions.c:349 +msgid "Contrast" +msgstr "????????" + +#: src/rs-actions.c:350 msgid "White balance" msgstr "?????? ??????" +#: src/rs-actions.c:351 +msgid "Sharpen" +msgstr "????????" + +#: src/rs-actions.c:352 +msgid "Channel mixer" +msgstr "" + +#: src/rs-actions.c:385 msgid "Select settings to paste" msgstr "??????????? ?????????" +#: src/rs-actions.c:443 msgid "Pasted settings" msgstr "????????? ??????? ?????????" +#: src/rs-actions.c:446 msgid "Nothing to paste" msgstr "??? ??????????? ?????????? ???????" +#: src/rs-actions.c:449 msgid "Buffer empty" msgstr "????? ????" +#: src/rs-actions.c:492 msgid "Adjusting to auto white balance" msgstr "??????????? ????????? ? ?????????????? ???????? ??????" +#: src/rs-actions.c:502 msgid "No white balance to set from" msgstr "???????? ????? ?????? ??????" +#: src/rs-actions.c:505 msgid "Adjusting to camera white balance" msgstr "??????????? ????????? ?? ??????? ?????? ??????" +#: src/rs-actions.c:683 msgid "Showing exposure mask" msgstr "???????????? ????? ??????????" +#: src/rs-actions.c:685 msgid "Hiding exposure mask" msgstr "???????? ????? ??????????" +#: src/rs-actions.c:715 #, c-format msgid " %s added to batch queue" msgstr "%s ???????? ? ??????? ?? ???????" +#: src/rs-actions.c:717 #, c-format msgid "%s already added to batch queue" msgstr "%s ??? ???????? ? ??????? ?? ???????" +#: src/rs-actions.c:724 src/rs-actions.c:796 #, c-format msgid "%d photos added to batch queue" msgstr "%d ??????? ????????? ? ??????? ?? ???????" +#: src/rs-actions.c:761 msgid "" "Select which settings to\n" "add to batch queue" @@ -636,186 +819,308 @@ "????????, ????? ?????????\n" "???????? ? ??????? ?? ???????" +#: src/rs-actions.c:814 msgid "Removed from batch queue" msgstr "?????? ?? ??????? ?? ???????" +#: src/rs-actions.c:816 msgid "Not in batch queue" msgstr "?? ? ??????? ?? ???????" +#: src/rs-actions.c:850 msgid "A raw image converter for GTK+/GNOME" msgstr "?????????? ???????? ????????? ??? GTK+/GNOME" +#: src/rs-actions.c:881 msgid "_File" msgstr "_????" +#: src/rs-actions.c:882 msgid "_Edit" msgstr "_??????" +#: src/rs-actions.c:883 msgid "_Photo" msgstr "?_?????" +#: src/rs-actions.c:884 msgid "_Set Priority" msgstr "_??????? ?????????" +#: src/rs-actions.c:885 msgid "_White Balance" msgstr "_?????? ??????" +#: src/rs-actions.c:886 msgid "_View" msgstr "_???" +#: src/rs-actions.c:887 msgid "_Sort by" msgstr "_??????????? ??" +#: src/rs-actions.c:888 msgid "_Batch" msgstr "???_????" +#: src/rs-actions.c:889 msgid "_Help" msgstr "_???????" #. File menu +#: src/rs-actions.c:894 msgid "_Open Directory" msgstr "_??????? ???????" +#: src/rs-actions.c:895 msgid "_Quick Export" msgstr "??????? ???????" +#: src/rs-actions.c:896 msgid "_Export As" msgstr "?????????????? _???" +#: src/rs-actions.c:897 msgid "_Export to Gimp" msgstr "_?????????????? ? GIMP" +#: src/rs-actions.c:898 msgid "_Reload directory" msgstr "_????????????? ???????" +#: src/rs-actions.c:899 msgid "_Delete flagged photos" msgstr "_??????? ?????????? ??????" +#: src/rs-actions.c:900 msgid "_Quit" msgstr "?_????" #. Edit menu +#: src/rs-actions.c:903 msgid "_Revert settings" msgstr "_???????? ?????????" +#: src/rs-actions.c:904 msgid "_Copy settings" msgstr "_??????????? ?????????" +#: src/rs-actions.c:905 msgid "_Paste settings" msgstr "_???????? ?????????" +#: src/rs-actions.c:906 msgid "_Reset settings" msgstr "_?????? ?????????" +#: src/rs-actions.c:907 msgid "_Preferences" msgstr "_?????????" #. Photo menu +#: src/rs-actions.c:910 msgid "_Flag photo for deletion" msgstr "??_?????? ??? ????????" +#: src/rs-actions.c:911 msgid "_1" msgstr "_1" +#: src/rs-actions.c:912 msgid "_2" msgstr "_2" +#: src/rs-actions.c:913 msgid "_3" msgstr "_3" +#: src/rs-actions.c:914 msgid "_Remove priority" msgstr "_????? ?????????" +#: src/rs-actions.c:915 msgid "_Auto" msgstr "_????" +#: src/rs-actions.c:916 msgid "_Camera" msgstr "_??????" +#: src/rs-actions.c:917 msgid "_Crop" msgstr "_???????????" +#: src/rs-actions.c:918 msgid "_Uncrop" msgstr "_????? ????????????" +#: src/rs-actions.c:919 msgid "_Straighten" msgstr "_?????????" +#: src/rs-actions.c:920 msgid "_Unstraighten" msgstr "??_??? ????????????" +#: src/rs-actions.c:921 msgid "_Group" msgstr "?_????????????" +#: src/rs-actions.c:922 msgid "_Ungroup" msgstr "_???????????????" +#: src/rs-actions.c:923 msgid "_Auto group" msgstr "????????????? _?????????????" +#: src/rs-actions.c:924 +#, fuzzy +msgid "_Tag Photo..." +msgstr "?_?????" + +#: src/rs-actions.c:925 +msgid "Rotate Clockwise" +msgstr "" + +#: src/rs-actions.c:926 +#, fuzzy +msgid "Rotate Counter Clockwise" +msgstr "????????? ?????? ?? 90? ?? ??????? ???????" + +#: src/rs-actions.c:927 +msgid "Flip" +msgstr "" + +#: src/rs-actions.c:928 +msgid "Mirror" +msgstr "???????" + #. View menu +#: src/rs-actions.c:931 msgid "_Previous photo" msgstr "_?????????? ??????" +#: src/rs-actions.c:932 msgid "_Next Photo" msgstr "_????????? ??????" -msgid "_Zoom to fit" -msgstr "_???????? ? ????" - -msgid "_Zoom to 100%" -msgstr "_??????? 1:1" - #. Batch menu +#: src/rs-actions.c:935 msgid "_Add to batch queue" msgstr "_???????? ? ???????" +#: src/rs-actions.c:936 msgid "_Add current view to queue" msgstr "???????? _??? ????? ? ???????" +#: src/rs-actions.c:937 msgid "_Remove from batch queue" msgstr "_??????? ?? ???????" +#: src/rs-actions.c:938 msgid "_Start" msgstr "_?????? ???????" #. help menu +#: src/rs-actions.c:941 msgid "_About" msgstr "_? ?????????" +#: src/rs-actions.c:949 +msgid "_Zoom to fit" +msgstr "_???????? ? ????" + +#: src/rs-actions.c:950 msgid "_Iconbox" msgstr "?????? _???????" +#: src/rs-actions.c:951 msgid "_Toolbox" msgstr "?????? _????????????" +#: src/rs-actions.c:952 msgid "_Fullscreen" msgstr "?_???????????? ?????" +#: src/rs-actions.c:953 msgid "_Exposure mask" msgstr "?_???? ??????????" +#: src/rs-actions.c:954 msgid "_Split" msgstr "_?????????" +#: src/rs-actions.c:956 +msgid "_Lights out" +msgstr "" + +#: src/rs-actions.c:962 msgid "Name" msgstr "?????" +#: src/rs-actions.c:963 msgid "Timestamp" msgstr "???????" +#: src/rs-actions.c:964 msgid "ISO" msgstr "ISO" +#: src/rs-actions.c:965 msgid "Aperture" msgstr "????????" +#: src/rs-actions.c:966 msgid "Focallength" msgstr "????????? ??????????" +#: src/rs-actions.c:967 msgid "Shutterspeed" msgstr "????????" +#~ msgid "Background renderer active" +#~ msgstr "??????? ?????????? ???????" + +#~ msgid "Preload photos" +#~ msgstr "????????? ??????" + +#~ msgid "Filename:" +#~ msgstr "??? ?????:" + +#~ msgid "Save uncompressed TIFF" +#~ msgstr "????????? ???????? TIFF" + +#~ msgid "JPEG Quality:" +#~ msgstr "???????? JPEG" + +#~ msgid "File export canceled" +#~ msgstr "??????? ??????? ???????" + +#~ msgid "JPEG (Joint Photographic Experts Group)" +#~ msgstr "JPEG (Joint Photographic Experts Group)" + +#~ msgid "PNG (Portable Network Graphics)" +#~ msgstr "PNG (Portable Network Graphics)" + +#~ msgid "8-bit TIFF (Tagged Image File Format)" +#~ msgstr "8-????????? TIFF (Tagged Image File Format)" + +#~ msgid "16-bit TIFF (Tagged Image File Format)" +#~ msgstr "16-????????? TIFF (Tagged Image File Format)" + +#~ msgid "Rotate the photo 180 degrees" +#~ msgstr "????????? ?????? ?? 180?" + +#~ msgid "Reset this setting" +#~ msgstr "???????? ???? ????????" + +#~ msgid "Warmth/tint" +#~ msgstr "??????????? ? ???????" + +#~ msgid "_Zoom to 100%" +#~ msgstr "_??????? 1:1" + #~ msgid "Canon CR2" #~ msgstr "Canon CR2" @@ -861,9 +1166,6 @@ #~ msgid "Epson" #~ msgstr "Epson" -#~ msgid "Opening directory..." -#~ msgstr "??????????? ???????" - #~ msgid "%dmm " #~ msgstr "%d?? " @@ -941,9 +1243,6 @@ #~ msgid "/_Batch/_Remove from batch queue" #~ msgstr "/???????? ?????????/_??????? ?? ???????" -#~ msgid "Mirror" -#~ msgstr "???????" - #~ msgid "CW" #~ msgstr "CW" Modified: trunk/po/sv.po =================================================================== --- trunk/po/sv.po 2009-09-27 21:47:00 UTC (rev 2670) +++ trunk/po/sv.po 2009-09-27 22:10:12 UTC (rev 2671) @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: Rawstudio 1.1.1\n" "Report-Msgid-Bugs-To: rawstudio-dev at rawstudio.org\n" -"POT-Creation-Date: 2009-01-11 04:26+0100\n" +"POT-Creation-Date: 2009-09-28 00:09+0200\n" "PO-Revision-Date: 2008-05-03 12:21+0100\n" "Last-Translator: Patrik Jarl \n" "Language-Team: Rawstudio development \n" @@ -16,30 +16,47 @@ "Content-Transfer-Encoding: 8bit\n" "X-Poedit-Language: English\n" +#: src/filename.c:280 #, c-format msgid "%f - Original filename" msgstr "%f - Ursprungligt filnamn" +#: src/filename.c:281 #, c-format msgid "%2c - Incremental counter" msgstr "%2c - ?kande r?knare" +#: src/filename.c:282 #, c-format msgid "%s - Setting id (A, B or C)" msgstr "%s - Inst?llning (A, B or C)" +#: src/filename.c:283 +#, c-format +msgid "%d - Date from EXIF (YYYY-MM-DD)" +msgstr "" + +#: src/filename.c:284 +msgid "%t - Time from EXIF (HH:MM:SS)" +msgstr "" + +#: src/gtk-helper.c:420 msgid "Select color profile" msgstr "V?lj f?rgprofil" +#: src/gtk-helper.c:450 msgid "All files" msgstr "Alla filer" +#: src/gtk-helper.c:451 msgid "Color profiles (icc and icm)" msgstr "F?rgprofil (icc och icm)" +#: src/gtk-helper.c:465 msgid "Not a valid color profile." msgstr "Inte en giltig f?rgprofil." +#: src/gtk-helper.c:466 msgid "" "The file you selected does not appear to be a valid color profile for this " "version of Rawstudio." @@ -47,254 +64,305 @@ "Filen du valde verkar inte vara en giltig f?rgprofilf?r denna version av " "Rawstudio." +#: src/gtk-helper.c:568 msgid "Enable color management (experimental)" msgstr "Aktivera f?rghantering (exprementell)" +#: src/gtk-helper.c:576 msgid "Input profile" msgstr "Indata profil" +#: src/gtk-helper.c:579 msgid "BuiltInRGBProfile" msgstr "Inbyggd RGB-profilBuiltInRGBProfile" +#: src/gtk-helper.c:629 msgid "Display profile" msgstr "Sk?rmprofil" +#: src/gtk-helper.c:632 src/gtk-helper.c:685 msgid "sRGB" msgstr "sRGB" +#: src/gtk-helper.c:682 msgid "Export profile" msgstr "Exportprofil" +#: src/gtk-helper.c:734 msgid "Intent" msgstr "Avsikt" +#: src/gtk-helper.c:737 msgid "Perceptual" msgstr "Uppfattning" +#: src/gtk-helper.c:738 msgid "Relative colormetric" msgstr "Relativ f?rgmetrisk" +#: src/gtk-helper.c:739 src/rs-actions.c:347 msgid "Saturation" msgstr "M?ttnad" +#: src/gtk-helper.c:740 msgid "Absolute colormetric" msgstr "Absolut f?rgmetrisk" -msgid "Background renderer active" -msgstr "Bakgrundsrendering p?g?r" - +#: src/gtk-interface.c:182 msgid "Opening photo ..." msgstr "?ppnar foto ..." +#: src/gtk-interface.c:197 msgid "Couldn't open photo" msgstr "Kunde inte ?ppna foto" +#: src/gtk-interface.c:202 msgid "Image opened" msgstr "Bild ?ppnad" +#: src/gtk-interface.c:203 src/gtk-interface.c:830 src/gtk-interface.c:953 +#: src/gtk-interface.c:995 msgid "Rawstudio" msgstr "Rawstudio" +#: src/gtk-interface.c:273 #, c-format msgid "Changed photo priority (*)" msgstr "Bildprioritet ?ndrad (*)" +#: src/gtk-interface.c:275 #, c-format msgid "Changed photo priority (D)" msgstr "Bildprioritet ?ndrad (D)" +#: src/gtk-interface.c:277 #, c-format msgid "Changed photo priority (%d)" msgstr "Bildprioritet ?ndrad (%d)" +#: src/gtk-interface.c:492 +msgid "Directory:" +msgstr "Katalog:" + +#: src/gtk-interface.c:494 src/rs-batch.c:980 +msgid "Choose output directory" +msgstr "V?lj destinationskatalog" + +#: src/gtk-interface.c:510 src/rs-batch.c:991 +msgid "Filename template:" +msgstr "Filnamnsmall:" + +#: src/gtk-interface.c:523 +msgid "Filename example:" +msgstr "Filnamnsexampel:" + +#: src/gtk-interface.c:534 +msgid "File type:" +msgstr "Filtyp:" + +#: src/gtk-interface.c:595 msgid "Preferences" msgstr "Egenskaper" +#: src/gtk-interface.c:610 msgid "Preview background color:" msgstr "F?rhandsgranska bakgrundsf?rger:" +#: src/gtk-interface.c:625 msgid "Histogram height:" msgstr "Histogram h?jd:" +#: src/gtk-interface.c:635 msgid "Show filenames in iconview" msgstr "Visa filnamn i ikonvy" +#: src/gtk-interface.c:640 msgid "Use system theme" msgstr "Anv?nd systemtema" +#: src/gtk-interface.c:647 msgid "Place cache in home directory" msgstr "Mellanlagra i hemkatalogen" +#: src/gtk-interface.c:650 msgid "Load 8 bit photos (jpeg, png, etc)" msgstr "Ladda 8 bitars foto (jpeg, png, etc)" -msgid "Preload photos" -msgstr "F?rhandsladda foton" - -msgid "Directory:" -msgstr "Katalog:" - -msgid "Filename:" -msgstr "Filnamn:" - -msgid "File type:" -msgstr "Filtyp:" - -#. set default -msgid "Filename example:" -msgstr "Filnamnsexampel:" - -msgid "Save uncompressed TIFF" -msgstr "Spara i okomprimerad TIFF" - +#: src/gtk-interface.c:718 msgid "General" msgstr "Allm?n" #. gtk_notebook_append_page(GTK_NOTEBOOK(notebook), batch_page, gtk_label_new(_("Batch"))); +#: src/gtk-interface.c:720 msgid "Quick export" msgstr "Snabb export" +#: src/gtk-interface.c:721 msgid "Colors" msgstr "F?rger" +#: src/gtk-interface.c:955 src/gtk-interface.c:1178 +msgid "Opening directory..." +msgstr "?ppnar katalog..." + +#: src/gtk-interface.c:965 src/gtk-interface.c:1123 src/gtk-interface.c:1193 +msgid "Ready" +msgstr "F?rdig" + +#: src/gtk-interface.c:1050 msgid "Open recursive" msgstr "?ppna rekursivt" +#: src/gtk-interface.c:1059 msgid "Tools" msgstr "Verktyg" +#: src/gtk-interface.c:1060 msgid "Batch" msgstr "Processering" +#: src/gtk-interface.c:1061 msgid "Open" msgstr "?ppna" -msgid "Ready" -msgstr "F?rdig" - +#: src/gtk-progress.c:63 src/gtk-progress.c:99 src/gtk-progress.c:122 msgid "Progress" msgstr "Framg?ng" -msgid "JPEG Quality:" -msgstr "JPEG Kvalitet:" +#. FIXME: Calculate some sensible size - maybe even remember user resizes +#: src/rs-save-dialog.c:93 src/rs-toolbox.c:371 +msgid "Export File" +msgstr "Exportera Fil" +#: src/rs-save-dialog.c:244 +#, fuzzy, c-format +msgid "Exporting to %s" +msgstr "Exporterar fil ..." + +#: src/rs-save-dialog.c:360 msgid "Keep aspect" msgstr "Beh?ll h?jd-breddf?rh?llandet" +#: src/rs-save-dialog.c:378 msgid "Width:" msgstr "Bredd:" +#: src/rs-save-dialog.c:380 msgid "Height:" msgstr "H?jd:" +#: src/rs-save-dialog.c:382 msgid "Percent:" msgstr "Procent:" -msgid "Export File" -msgstr "Exportera Fil" - -msgid "Exporting file ..." -msgstr "Exporterar fil ..." - -msgid "File exported" -msgstr "Fil exporterad" - -msgid "File export canceled" -msgstr "Filexport avbruten" - -msgid "JPEG (Joint Photographic Experts Group)" -msgstr "JPEG (Joint Photographic Experts Group)" - -msgid "PNG (Portable Network Graphics)" -msgstr "PNG (Portable Network Graphics)" - -msgid "8-bit TIFF (Tagged Image File Format)" -msgstr "8-bit TIFF (Tagged Image File Format)" - -msgid "16-bit TIFF (Tagged Image File Format)" -msgstr "16-bit TIFF (Tagged Image File Format)" - +#: src/rs-batch.c:206 src/rs-actions.c:737 msgid "A" msgstr "A" +#: src/rs-batch.c:209 src/rs-actions.c:738 msgid "B" msgstr "B" +#: src/rs-batch.c:212 src/rs-actions.c:739 msgid "C" msgstr "C" +#: src/rs-batch.c:437 msgid "Processing photos" msgstr "Bearbetar foton" +#: src/rs-batch.c:441 msgid "Cancel" msgstr "Avbryt" +#: src/rs-batch.c:446 msgid "Last image:" msgstr "Sista bild:" +#: src/rs-batch.c:479 #, c-format msgid "Time left: %dh %dm %ds" msgstr "?terst?ende tid: %dh %dm %ds" +#: src/rs-batch.c:483 msgid "Time left: ..." msgstr "?terst?ende tidt: ..." +#: src/rs-batch.c:495 #, c-format msgid "Loading %s ..." msgstr "L?ser %s ..." +#: src/rs-batch.c:536 #, c-format msgid "Saving %s ..." msgstr "Sparar %s ..." +#: src/rs-batch.c:634 msgid "Icon" msgstr "Ikon" +#: src/rs-batch.c:641 msgid "Filename" msgstr "Filnamn" +#: src/rs-batch.c:648 msgid "Setting" msgstr "Inst?llning" +#: src/rs-batch.c:738 msgid "Start" msgstr "Starta" +#: src/rs-batch.c:741 msgid "Remove" msgstr "Radera" +#: src/rs-batch.c:744 msgid "Remove all" msgstr "Radera alla" +#: src/rs-batch.c:869 msgid "Photo size" msgstr "Fotostorlek" +#: src/rs-batch.c:877 msgid "Constant scale" msgstr "Konstant skalning" +#: src/rs-batch.c:878 msgid "Constant width" msgstr "Konstant bredd" +#: src/rs-batch.c:879 msgid "Constant height" msgstr "Konstant h?jd" +#: src/rs-batch.c:880 msgid "Maximum size" msgstr "Maximal storlek" +#: src/rs-batch.c:892 msgid "Photo width:" msgstr "Fotobredd:" +#: src/rs-batch.c:894 src/rs-batch.c:903 msgid "pixels" msgstr "pixels" +#: src/rs-batch.c:901 msgid "Photo height:" msgstr "Fotoh?jd:" +#: src/rs-batch.c:910 msgid "Photo scale:" msgstr "Fotoskala:" +#: src/rs-batch.c:912 msgid "%" msgstr "%" +#: src/rs-batch.c:948 #, c-format msgid "" "Constant width:\n" @@ -303,6 +371,7 @@ "Konstant bredd:\n" "%d" +#: src/rs-batch.c:951 #, c-format msgid "" "Constant height:\n" @@ -311,6 +380,7 @@ "Konstant h?jd:\n" "%d" +#: src/rs-batch.c:954 #, c-format msgid "" "Constant Scale:\n" @@ -319,6 +389,7 @@ "Konstant skala:\n" "%d" +#: src/rs-batch.c:958 #, c-format msgid "" "Maximum size:\n" @@ -327,66 +398,75 @@ "Maximal storlek:\n" "%d x %d" -msgid "Choose output directory" -msgstr "V?lj destinationskatalog" - +#: src/rs-batch.c:987 msgid "Output directory:" msgstr "Destinationskatalog:" -msgid "Filename template:" -msgstr "Filnamnsmall:" - +#: src/rs-batch.c:1012 msgid "Change" msgstr "?ndra" +#: src/rs-batch.c:1017 msgid "Export dimensions" msgstr "Exportera dimensioner" #. All +#: src/rs-store.c:275 src/rs-store.c:834 #, c-format msgid "* (%d)" msgstr "* (%d)" +#: src/rs-store.c:276 msgid "All photos (excluding deleted)" msgstr "Alla foton (f?rutom raderade)" #. 1 +#: src/rs-store.c:279 src/rs-store.c:835 #, c-format msgid "1 (%d)" msgstr "1 (%d)" +#: src/rs-store.c:280 msgid "Priority 1 photos" msgstr "Prioritet 1 foton" #. 2 +#: src/rs-store.c:283 src/rs-store.c:836 #, c-format msgid "2 (%d)" msgstr "2 (%d)" +#: src/rs-store.c:284 msgid "Priority 2 photos" msgstr "Prioritet 2 foton" #. 3 +#: src/rs-store.c:287 src/rs-store.c:837 #, c-format msgid "3 (%d)" msgstr "3 (%d)" +#: src/rs-store.c:288 msgid "Priority 3 photos" msgstr "Prioritet 3 foton" #. Unsorted +#: src/rs-store.c:291 src/rs-store.c:838 #, c-format msgid "U (%d)" msgstr "U (%d)" +#: src/rs-store.c:292 msgid "Unprioritized photos" msgstr "Oprioriterade foton" #. Deleted +#: src/rs-store.c:295 src/rs-store.c:839 #, c-format msgid "D (%d)" msgstr "D (%d)" +#: src/rs-store.c:296 msgid "Deleted photos" msgstr "Raderade foton" @@ -395,234 +475,337 @@ #. understanding of our interface. I was thinking about adding a button instead #. that said "ROCK ON!" to instantly play "AC/DC - Highway to Hell", but I #. believe this will be better for the end user +#: src/rs-store.c:331 msgid "Priorities" msgstr "Prioriteter" +#: src/rs-store.c:527 #, c-format msgid "" "%s\n" "\n" msgstr "" +#: src/rs-store.c:530 #, c-format msgid "Focal length: %dmm\n" msgstr "" +#: src/rs-store.c:533 #, c-format msgid "Shutter speed: %.1fs\n" msgstr "" +#: src/rs-store.c:535 #, c-format msgid "Shutter speed: 1/%.0fs\n" msgstr "" +#: src/rs-store.c:538 #, c-format msgid "Aperture: F/%.01f\n" msgstr "" +#: src/rs-store.c:541 #, c-format msgid "ISO: %u\n" msgstr "" +#: src/rs-store.c:544 #, c-format msgid "Time: %s" msgstr "" +#: src/rs-preview-widget.c:505 +msgid "Display Navigation" +msgstr "" + +#: src/rs-preview-widget.c:756 +msgid "Light out mode not available" +msgstr "" + +#: src/rs-preview-widget.c:757 +msgid "" +"Your setup doesn't seem to support RGBA visuals and/or compositing. Consult " +"your operating system manual for enabling RGBA visuals and compositing." +msgstr "" + +#: src/rs-preview-widget.c:987 msgid "Size" msgstr "Storlek" +#: src/rs-preview-widget.c:995 msgid "-" msgstr "-" +#: src/rs-preview-widget.c:1001 msgid "Grid" msgstr "Rutn?t" +#: src/rs-preview-widget.c:1006 msgid "None" msgstr "Ingen" +#: src/rs-preview-widget.c:1007 msgid "Golden sections" msgstr "Gyllene snittet" +#: src/rs-preview-widget.c:1008 msgid "Rule of thirds" msgstr "Tredjedels-regeln" +#: src/rs-preview-widget.c:1009 msgid "Golden triangles #1" msgstr "Gyllene trianglar #1" +#: src/rs-preview-widget.c:1010 msgid "Golden triangles #2" msgstr "Gyllene trianglar #2" +#: src/rs-preview-widget.c:1011 msgid "Harmonious triangles #1" msgstr "Harmoniska trianglar #1" +#: src/rs-preview-widget.c:1012 msgid "Harmonious triangles #2" msgstr "Harmoniska trianglar #2" +#: src/rs-preview-widget.c:1021 msgid "Aspect" msgstr "F?rh?llande" +#: src/rs-preview-widget.c:1026 msgid "Freeform" msgstr "Fri form" +#: src/rs-preview-widget.c:1027 msgid "ISO paper (A4)" msgstr "ISO papper (A4)" +#: src/rs-preview-widget.c:1028 msgid "3:2 (35mm)" msgstr "3:2 (35mm)" +#: src/rs-preview-widget.c:1029 msgid "4:3" msgstr "4:3" +#: src/rs-preview-widget.c:1030 msgid "10:8 (SXGA)" msgstr "10:8 (SXGA)" +#: src/rs-preview-widget.c:1031 msgid "16:10 (Wide XGA)" msgstr "16:10 (Wide XGA)" +#: src/rs-preview-widget.c:1032 msgid "8:3 (Dualhead XGA)" msgstr "8:3 (Dualhead XGA)" +#: src/rs-preview-widget.c:1033 msgid "1:1" msgstr "1:1" +#: src/rs-preview-widget.c:1034 msgid "Golden rectangle" msgstr "Gyllene retangel" +#: src/rs-preview-widget.c:1042 src/rs-preview-widget.c:1053 msgid "Crop" msgstr "Besk?r" +#: src/rs-preview-widget.c:1044 msgid "Don't crop" msgstr "Besk?r inte" -msgid "Flip the photo over the x-axis" -msgstr "V?nd fotot lodr?tt" +#. Snapshot labels +#: src/rs-toolbox.c:157 src/rs-actions.c:972 +msgid " A " +msgstr " A " -msgid "Mirror the photo over the y-axis" -msgstr "V?nd fotot v?gr?tt" +#: src/rs-toolbox.c:158 src/rs-actions.c:973 +msgid " B " +msgstr " B " -msgid "Rotate the photo 90 degrees clockwise" -msgstr "Rotera fotot 90 grader medsols" +#: src/rs-toolbox.c:159 src/rs-actions.c:974 +msgid " C " +msgstr " C " -msgid "Rotate the photo 180 degrees" -msgstr "Rotera fotot 180 grader" +#. FIXME: Get height from gconf +#: src/rs-toolbox.c:184 +msgid "Histogram" +msgstr "Histogram" -msgid "Rotate the photo 90 degrees counter clockwise" -msgstr "Rotera fotot 90 grader motsols" +#: src/rs-toolbox.c:297 +#, fuzzy +msgid "Reset" +msgstr "?terst?ll kurva" -msgid "Transforms" -msgstr "Transformera" - -msgid "Reset this setting" -msgstr "?terst?ll inst?llning" - +#: src/rs-toolbox.c:415 src/rs-toolbox.c:540 msgid "Open curve ..." msgstr "?ppna kurva ..." +#: src/rs-toolbox.c:546 msgid "Save curve as ..." msgstr "Spara kurva som ..." +#: src/rs-toolbox.c:552 msgid "Reset curve" msgstr "?terst?ll kurva" +#: src/rs-toolbox.c:557 msgid "Auto adjust curve ends" msgstr "Autojustera kurv?ndpunkter" -msgid " A " -msgstr " A " +#. Pack everything nice +#: src/rs-toolbox.c:637 +#, fuzzy +msgid "Basic" +msgstr "Processering" -msgid " B " -msgstr " B " +#: src/rs-toolbox.c:638 +msgid "Channel Mixer" +msgstr "" -msgid " C " -msgstr " C " +#: src/rs-toolbox.c:639 src/rs-actions.c:353 +msgid "Curve" +msgstr "Kurva" -#. Build GUI -msgid "Exposure" -msgstr "Exponering" +#: src/rs-toolbox.c:683 +msgid "Flip the photo over the x-axis" +msgstr "V?nd fotot lodr?tt" -msgid "Hue" -msgstr "F?rgm?ttnad" +#: src/rs-toolbox.c:684 +msgid "Mirror the photo over the y-axis" +msgstr "V?nd fotot v?gr?tt" -msgid "Contrast" -msgstr "Konstrast" +#: src/rs-toolbox.c:685 +msgid "Rotate the photo 90 degrees clockwise" +msgstr "Rotera fotot 90 grader medsols" -#. Box it! -msgid "Warmth/tint" -msgstr "V?rme/nyans" +#: src/rs-toolbox.c:686 +msgid "Rotate the photo 90 degrees counter clockwise" +msgstr "Rotera fotot 90 grader motsols" -msgid "Sharpen" -msgstr "Mer sk?rpa" +#: src/rs-toolbox.c:698 +msgid "Transforms" +msgstr "Transformera" -msgid "Curve" -msgstr "Kurva" - -msgid "Histogram" -msgstr "Histogram" - +#: src/rs-actions.c:141 msgid "Open directory" msgstr "?ppna katalog" +#: src/rs-actions.c:198 +msgid "File exported" +msgstr "Fil exporterad" + +#: src/rs-actions.c:203 src/rs-actions.c:222 +#, fuzzy +msgid "Export failed" +msgstr "Exportera Fil" + +#: src/rs-actions.c:232 msgid "Error exporting" msgstr "Misslyckad export" +#: src/rs-actions.c:233 msgid "Error exporting photo to gimp." msgstr "Misslyckades exportera foto till gimp." +#: src/rs-actions.c:256 src/rs-actions.c:274 msgid "Deleting photos" msgstr "Raderar foton" +#: src/rs-actions.c:257 msgid "Your files will be permanently deleted!" msgstr "Dina filer kommer raderas permanent!" +#: src/rs-actions.c:259 msgid "Delete photos" msgstr "Radera foton" +#: src/rs-actions.c:333 msgid "Copied settings" msgstr "Inst?llningar kopierade" +#. Build GUI +#: src/rs-actions.c:346 +msgid "Exposure" +msgstr "Exponering" + +#: src/rs-actions.c:348 +msgid "Hue" +msgstr "F?rgm?ttnad" + +#: src/rs-actions.c:349 +msgid "Contrast" +msgstr "Konstrast" + +#: src/rs-actions.c:350 msgid "White balance" msgstr "Vitbalans" +#: src/rs-actions.c:351 +msgid "Sharpen" +msgstr "Mer sk?rpa" + +#: src/rs-actions.c:352 +msgid "Channel mixer" +msgstr "" + +#: src/rs-actions.c:385 #, fuzzy msgid "Select settings to paste" msgstr "V?lj inst?llning att klistra in" +#: src/rs-actions.c:443 msgid "Pasted settings" msgstr "Inklistrad inst?llning" +#: src/rs-actions.c:446 msgid "Nothing to paste" msgstr "Inget att klistra in" +#: src/rs-actions.c:449 msgid "Buffer empty" msgstr "Buffert tom" +#: src/rs-actions.c:492 msgid "Adjusting to auto white balance" msgstr "Justerar till automatisk vitbalans" +#: src/rs-actions.c:502 msgid "No white balance to set from" msgstr "No white balance to set from" +#: src/rs-actions.c:505 msgid "Adjusting to camera white balance" msgstr "Justerar till kamerans vitbalans" +#: src/rs-actions.c:683 msgid "Showing exposure mask" msgstr "Visar exponeringsmask" +#: src/rs-actions.c:685 msgid "Hiding exposure mask" msgstr "D?ljer exponeringsmask" +#: src/rs-actions.c:715 #, c-format msgid " %s added to batch queue" msgstr " %s l?gger till processeringsk?n" +#: src/rs-actions.c:717 #, c-format msgid "%s already added to batch queue" msgstr "%s redan tillagd i processeringsk?n" +#: src/rs-actions.c:724 src/rs-actions.c:796 #, c-format msgid "%d photos added to batch queue" msgstr "%d foton tillagda i processeringsk?n" +#: src/rs-actions.c:761 msgid "" "Select which settings to\n" "add to batch queue" @@ -630,188 +813,310 @@ "V?lj vilken inst?llning som\n" "ska g?lla f?r processeringk?n" +#: src/rs-actions.c:814 msgid "Removed from batch queue" msgstr "Borttagen fr?n processeringk?n" +#: src/rs-actions.c:816 msgid "Not in batch queue" msgstr "Inte i satsprocesseringsk?n" +#: src/rs-actions.c:850 msgid "A raw image converter for GTK+/GNOME" msgstr "En r?filskonvertering f?r GTK+/GNOME" +#: src/rs-actions.c:881 msgid "_File" msgstr "_Fil" +#: src/rs-actions.c:882 msgid "_Edit" msgstr "_Redigera" +#: src/rs-actions.c:883 msgid "_Photo" msgstr "_Foto" +#: src/rs-actions.c:884 msgid "_Set Priority" msgstr "_S?tt prioritet" +#: src/rs-actions.c:885 msgid "_White Balance" msgstr "Vit_balans" +#: src/rs-actions.c:886 msgid "_View" msgstr "_Visa" +#: src/rs-actions.c:887 msgid "_Sort by" msgstr "" +#: src/rs-actions.c:888 msgid "_Batch" msgstr "_Processeringsk?" +#: src/rs-actions.c:889 msgid "_Help" msgstr "_Hj?lp" #. File menu +#: src/rs-actions.c:894 msgid "_Open Directory" msgstr "_?ppna katalog" +#: src/rs-actions.c:895 msgid "_Quick Export" msgstr "_Snabbexportering" +#: src/rs-actions.c:896 msgid "_Export As" msgstr "_Exportera som" +#: src/rs-actions.c:897 msgid "_Export to Gimp" msgstr "_Exportera till Gimp" +#: src/rs-actions.c:898 msgid "_Reload directory" msgstr "_L?s om katalog" +#: src/rs-actions.c:899 msgid "_Delete flagged photos" msgstr "_Radera markerade foton" +#: src/rs-actions.c:900 msgid "_Quit" msgstr "_Avsluta" #. Edit menu +#: src/rs-actions.c:903 msgid "_Revert settings" msgstr "_?terst?ll inst?llningar" +#: src/rs-actions.c:904 msgid "_Copy settings" msgstr "_Kopiera inst?llningar" +#: src/rs-actions.c:905 msgid "_Paste settings" msgstr "_Klistra in inst?llningar" +#: src/rs-actions.c:906 msgid "_Reset settings" msgstr "_Nollst?ll inst?llningar" +#: src/rs-actions.c:907 msgid "_Preferences" msgstr "_Egenskaper" #. Photo menu +#: src/rs-actions.c:910 msgid "_Flag photo for deletion" msgstr "_M?rk foto f?r radering" +#: src/rs-actions.c:911 msgid "_1" msgstr "_1" +#: src/rs-actions.c:912 msgid "_2" msgstr "_2" +#: src/rs-actions.c:913 msgid "_3" msgstr "_3" +#: src/rs-actions.c:914 msgid "_Remove priority" msgstr "_Ta bort prioritet" +#: src/rs-actions.c:915 msgid "_Auto" msgstr "_Autojustera" +#: src/rs-actions.c:916 msgid "_Camera" msgstr "_Kamera" +#: src/rs-actions.c:917 msgid "_Crop" msgstr "_Besk?r" +#: src/rs-actions.c:918 msgid "_Uncrop" msgstr "_Besk?r inte" +#: src/rs-actions.c:919 msgid "_Straighten" msgstr "_R?tta upp" +#: src/rs-actions.c:920 msgid "_Unstraighten" msgstr "_R?tta inte upp" +#: src/rs-actions.c:921 msgid "_Group" msgstr "_Gruppera" +#: src/rs-actions.c:922 msgid "_Ungroup" msgstr "_Gruppera inte" +#: src/rs-actions.c:923 #, fuzzy msgid "_Auto group" msgstr "_Gruppera inte" +#: src/rs-actions.c:924 +#, fuzzy +msgid "_Tag Photo..." +msgstr "_Foto" + +#: src/rs-actions.c:925 +msgid "Rotate Clockwise" +msgstr "" + +#: src/rs-actions.c:926 +#, fuzzy +msgid "Rotate Counter Clockwise" +msgstr "Rotera fotot 90 grader medsols" + +#: src/rs-actions.c:927 +msgid "Flip" +msgstr "" + +#: src/rs-actions.c:928 +msgid "Mirror" +msgstr "" + #. View menu +#: src/rs-actions.c:931 msgid "_Previous photo" msgstr "_F?reg?ende foto" +#: src/rs-actions.c:932 msgid "_Next Photo" msgstr "_Efterf?ljande foto" -msgid "_Zoom to fit" -msgstr "_Anpassad zoom" - -msgid "_Zoom to 100%" -msgstr "_Zooma till 100%" - #. Batch menu +#: src/rs-actions.c:935 msgid "_Add to batch queue" msgstr "_L?gg i processeringsk?" +#: src/rs-actions.c:936 msgid "_Add current view to queue" msgstr "_L?gg till aktuell vy till k?" +#: src/rs-actions.c:937 msgid "_Remove from batch queue" msgstr "_Ta bort fr?n processeringsk?" +#: src/rs-actions.c:938 msgid "_Start" msgstr "_Starta" #. help menu +#: src/rs-actions.c:941 msgid "_About" msgstr "_Om" +#: src/rs-actions.c:949 +msgid "_Zoom to fit" +msgstr "_Anpassad zoom" + +#: src/rs-actions.c:950 msgid "_Iconbox" msgstr "_Ikonl?da" +#: src/rs-actions.c:951 msgid "_Toolbox" msgstr "_Verktygsl?da" +#: src/rs-actions.c:952 msgid "_Fullscreen" msgstr "_Fullsk?rm" +#: src/rs-actions.c:953 msgid "_Exposure mask" msgstr "_Exponeringsmask" +#: src/rs-actions.c:954 msgid "_Split" msgstr "_Dela" +#: src/rs-actions.c:956 +msgid "_Lights out" +msgstr "" + +#: src/rs-actions.c:962 msgid "Name" msgstr "" +#: src/rs-actions.c:963 msgid "Timestamp" msgstr "" +#: src/rs-actions.c:964 #, fuzzy msgid "ISO" msgstr "ISO%d" +#: src/rs-actions.c:965 msgid "Aperture" msgstr "" +#: src/rs-actions.c:966 msgid "Focallength" msgstr "" +#: src/rs-actions.c:967 msgid "Shutterspeed" msgstr "" +#~ msgid "Background renderer active" +#~ msgstr "Bakgrundsrendering p?g?r" + +#~ msgid "Preload photos" +#~ msgstr "F?rhandsladda foton" + +#~ msgid "Filename:" +#~ msgstr "Filnamn:" + +#~ msgid "Save uncompressed TIFF" +#~ msgstr "Spara i okomprimerad TIFF" + +#~ msgid "JPEG Quality:" +#~ msgstr "JPEG Kvalitet:" + +#~ msgid "File export canceled" +#~ msgstr "Filexport avbruten" + +#~ msgid "JPEG (Joint Photographic Experts Group)" +#~ msgstr "JPEG (Joint Photographic Experts Group)" + +#~ msgid "PNG (Portable Network Graphics)" +#~ msgstr "PNG (Portable Network Graphics)" + +#~ msgid "8-bit TIFF (Tagged Image File Format)" +#~ msgstr "8-bit TIFF (Tagged Image File Format)" + +#~ msgid "16-bit TIFF (Tagged Image File Format)" +#~ msgstr "16-bit TIFF (Tagged Image File Format)" + +#~ msgid "Rotate the photo 180 degrees" +#~ msgstr "Rotera fotot 180 grader" + +#~ msgid "Reset this setting" +#~ msgstr "?terst?ll inst?llning" + +#~ msgid "Warmth/tint" +#~ msgstr "V?rme/nyans" + +#~ msgid "_Zoom to 100%" +#~ msgstr "_Zooma till 100%" + #~ msgid "%dmm " #~ msgstr "%dmm " @@ -865,6 +1170,3 @@ #~ msgid "Hasselblad" #~ msgstr "Hasselblad" - -#~ msgid "Opening directory..." -#~ msgstr "?ppnar katalog..." From anders at kvistmail.dk Mon Sep 28 00:12:32 2009 From: anders at kvistmail.dk (Anders Kvist) Date: Mon, 28 Sep 2009 00:12:32 +0200 Subject: [Rawstudio-commit] r2672 - trunk/po Message-ID: Author: akv Date: 2009-09-28 00:12:32 +0200 (Mon, 28 Sep 2009) New Revision: 2672 Modified: trunk/po/en.po Log: Updated english translation. Modified: trunk/po/en.po =================================================================== --- trunk/po/en.po 2009-09-27 22:10:12 UTC (rev 2671) +++ trunk/po/en.po 2009-09-27 22:12:32 UTC (rev 2672) @@ -8,7 +8,7 @@ "Project-Id-Version: Rawstudio 1.1.1\n" "Report-Msgid-Bugs-To: rawstudio-dev at rawstudio.org\n" "POT-Creation-Date: 2009-09-28 00:09+0200\n" -"PO-Revision-Date: 2008-04-17 21:42+0100\n" +"PO-Revision-Date: 2009-09-28 00:12+0100\n" "Last-Translator: Anders Kvist \n" "Language-Team: Rawstudio development \n" "MIME-Version: 1.0\n" @@ -34,11 +34,11 @@ #: src/filename.c:283 #, c-format msgid "%d - Date from EXIF (YYYY-MM-DD)" -msgstr "" +msgstr "%d - Date from EXIF (YYYY-MM-DD)" #: src/filename.c:284 msgid "%t - Time from EXIF (HH:MM:SS)" -msgstr "" +msgstr "%t - Time from EXIF (HH:MM:SS)" #: src/gtk-helper.c:420 msgid "Select color profile" @@ -57,12 +57,8 @@ msgstr "Not a valid color profile." #: src/gtk-helper.c:466 -msgid "" -"The file you selected does not appear to be a valid color profile for this " -"version of Rawstudio." -msgstr "" -"The file you selected does not appear to be a valid color profile for this " -"version of Rawstudio." +msgid "The file you selected does not appear to be a valid color profile for this version of Rawstudio." +msgstr "The file you selected does not appear to be a valid color profile for this version of Rawstudio." #: src/gtk-helper.c:568 msgid "Enable color management (experimental)" @@ -80,7 +76,8 @@ msgid "Display profile" msgstr "Display profile" -#: src/gtk-helper.c:632 src/gtk-helper.c:685 +#: src/gtk-helper.c:632 +#: src/gtk-helper.c:685 msgid "sRGB" msgstr "sRGB" @@ -100,7 +97,8 @@ msgid "Relative colormetric" msgstr "Relative colormetric" -#: src/gtk-helper.c:739 src/rs-actions.c:347 +#: src/gtk-helper.c:739 +#: src/rs-actions.c:347 msgid "Saturation" msgstr "Saturation" @@ -120,7 +118,9 @@ msgid "Image opened" msgstr "Image opened" -#: src/gtk-interface.c:203 src/gtk-interface.c:830 src/gtk-interface.c:953 +#: src/gtk-interface.c:203 +#: src/gtk-interface.c:830 +#: src/gtk-interface.c:953 #: src/gtk-interface.c:995 msgid "Rawstudio" msgstr "Rawstudio" @@ -144,11 +144,13 @@ msgid "Directory:" msgstr "Directory:" -#: src/gtk-interface.c:494 src/rs-batch.c:980 +#: src/gtk-interface.c:494 +#: src/rs-batch.c:980 msgid "Choose output directory" msgstr "Choose output directory" -#: src/gtk-interface.c:510 src/rs-batch.c:991 +#: src/gtk-interface.c:510 +#: src/rs-batch.c:991 msgid "Filename template:" msgstr "Filename template:" @@ -201,11 +203,14 @@ msgid "Colors" msgstr "Colors" -#: src/gtk-interface.c:955 src/gtk-interface.c:1178 +#: src/gtk-interface.c:955 +#: src/gtk-interface.c:1178 msgid "Opening directory..." msgstr "Opening directory..." -#: src/gtk-interface.c:965 src/gtk-interface.c:1123 src/gtk-interface.c:1193 +#: src/gtk-interface.c:965 +#: src/gtk-interface.c:1123 +#: src/gtk-interface.c:1193 msgid "Ready" msgstr "Ready" @@ -225,19 +230,22 @@ msgid "Open" msgstr "Open" -#: src/gtk-progress.c:63 src/gtk-progress.c:99 src/gtk-progress.c:122 +#: src/gtk-progress.c:63 +#: src/gtk-progress.c:99 +#: src/gtk-progress.c:122 msgid "Progress" msgstr "Progress" #. FIXME: Calculate some sensible size - maybe even remember user resizes -#: src/rs-save-dialog.c:93 src/rs-toolbox.c:371 +#: src/rs-save-dialog.c:93 +#: src/rs-toolbox.c:371 msgid "Export File" msgstr "Export File" #: src/rs-save-dialog.c:244 -#, fuzzy, c-format +#, c-format msgid "Exporting to %s" -msgstr "Exporting file ..." +msgstr "Exporting to %s" #: src/rs-save-dialog.c:360 msgid "Keep aspect" @@ -255,15 +263,18 @@ msgid "Percent:" msgstr "Percent:" -#: src/rs-batch.c:206 src/rs-actions.c:737 +#: src/rs-batch.c:206 +#: src/rs-actions.c:737 msgid "A" msgstr "A" -#: src/rs-batch.c:209 src/rs-actions.c:738 +#: src/rs-batch.c:209 +#: src/rs-actions.c:738 msgid "B" msgstr "B" -#: src/rs-batch.c:212 src/rs-actions.c:739 +#: src/rs-batch.c:212 +#: src/rs-actions.c:739 msgid "C" msgstr "C" @@ -346,7 +357,8 @@ msgid "Photo width:" msgstr "Photo width:" -#: src/rs-batch.c:894 src/rs-batch.c:903 +#: src/rs-batch.c:894 +#: src/rs-batch.c:903 msgid "pixels" msgstr "pixels" @@ -411,7 +423,8 @@ msgstr "Export dimensions" #. All -#: src/rs-store.c:275 src/rs-store.c:834 +#: src/rs-store.c:275 +#: src/rs-store.c:834 #, c-format msgid "* (%d)" msgstr "* (%d)" @@ -421,7 +434,8 @@ msgstr "All photos (excluding deleted)" #. 1 -#: src/rs-store.c:279 src/rs-store.c:835 +#: src/rs-store.c:279 +#: src/rs-store.c:835 #, c-format msgid "1 (%d)" msgstr "1 (%d)" @@ -431,7 +445,8 @@ msgstr "Priority 1 photos" #. 2 -#: src/rs-store.c:283 src/rs-store.c:836 +#: src/rs-store.c:283 +#: src/rs-store.c:836 #, c-format msgid "2 (%d)" msgstr "2 (%d)" @@ -441,7 +456,8 @@ msgstr "Priority 2 photos" #. 3 -#: src/rs-store.c:287 src/rs-store.c:837 +#: src/rs-store.c:287 +#: src/rs-store.c:837 #, c-format msgid "3 (%d)" msgstr "3 (%d)" @@ -451,7 +467,8 @@ msgstr "Priority 3 photos" #. Unsorted -#: src/rs-store.c:291 src/rs-store.c:838 +#: src/rs-store.c:291 +#: src/rs-store.c:838 #, c-format msgid "U (%d)" msgstr "U (%d)" @@ -461,7 +478,8 @@ msgstr "Unprioritized photos" #. Deleted -#: src/rs-store.c:295 src/rs-store.c:839 +#: src/rs-store.c:295 +#: src/rs-store.c:839 #, c-format msgid "D (%d)" msgstr "D (%d)" @@ -485,50 +503,50 @@ "%s\n" "\n" msgstr "" +"%s\n" +"\n" #: src/rs-store.c:530 #, c-format msgid "Focal length: %dmm\n" -msgstr "" +msgstr "Focal length: %dmm\n" #: src/rs-store.c:533 #, c-format msgid "Shutter speed: %.1fs\n" -msgstr "" +msgstr "Shutter speed: %.1fs\n" #: src/rs-store.c:535 #, c-format msgid "Shutter speed: 1/%.0fs\n" -msgstr "" +msgstr "Shutter speed: 1/%.0fs\n" #: src/rs-store.c:538 #, c-format msgid "Aperture: F/%.01f\n" -msgstr "" +msgstr "Aperture: F/%.01f\n" #: src/rs-store.c:541 #, c-format msgid "ISO: %u\n" -msgstr "" +msgstr "ISO: %u\n" #: src/rs-store.c:544 #, c-format msgid "Time: %s" -msgstr "" +msgstr "Time: %s" #: src/rs-preview-widget.c:505 msgid "Display Navigation" -msgstr "" +msgstr "Display Navigation" #: src/rs-preview-widget.c:756 msgid "Light out mode not available" -msgstr "" +msgstr "Light out mode not available" #: src/rs-preview-widget.c:757 -msgid "" -"Your setup doesn't seem to support RGBA visuals and/or compositing. Consult " -"your operating system manual for enabling RGBA visuals and compositing." -msgstr "" +msgid "Your setup doesn't seem to support RGBA visuals and/or compositing. Consult your operating system manual for enabling RGBA visuals and compositing." +msgstr "Your setup doesn't seem to support RGBA visuals and/or compositing. Consult your operating system manual for enabling RGBA visuals and compositing." #: src/rs-preview-widget.c:987 msgid "Size" @@ -610,7 +628,8 @@ msgid "Golden rectangle" msgstr "Golden rectangle" -#: src/rs-preview-widget.c:1042 src/rs-preview-widget.c:1053 +#: src/rs-preview-widget.c:1042 +#: src/rs-preview-widget.c:1053 msgid "Crop" msgstr "Crop" @@ -619,15 +638,18 @@ msgstr "Don't crop" #. Snapshot labels -#: src/rs-toolbox.c:157 src/rs-actions.c:972 +#: src/rs-toolbox.c:157 +#: src/rs-actions.c:972 msgid " A " msgstr " A " -#: src/rs-toolbox.c:158 src/rs-actions.c:973 +#: src/rs-toolbox.c:158 +#: src/rs-actions.c:973 msgid " B " msgstr " B " -#: src/rs-toolbox.c:159 src/rs-actions.c:974 +#: src/rs-toolbox.c:159 +#: src/rs-actions.c:974 msgid " C " msgstr " C " @@ -637,11 +659,11 @@ msgstr "Histogram" #: src/rs-toolbox.c:297 -#, fuzzy msgid "Reset" -msgstr "Reset curve" +msgstr "Reset" -#: src/rs-toolbox.c:415 src/rs-toolbox.c:540 +#: src/rs-toolbox.c:415 +#: src/rs-toolbox.c:540 msgid "Open curve ..." msgstr "Open curve ..." @@ -659,15 +681,15 @@ #. Pack everything nice #: src/rs-toolbox.c:637 -#, fuzzy msgid "Basic" -msgstr "Batch" +msgstr "Basic" #: src/rs-toolbox.c:638 msgid "Channel Mixer" -msgstr "" +msgstr "Channel Mixer" -#: src/rs-toolbox.c:639 src/rs-actions.c:353 +#: src/rs-toolbox.c:639 +#: src/rs-actions.c:353 msgid "Curve" msgstr "Curve" @@ -699,10 +721,10 @@ msgid "File exported" msgstr "File exported" -#: src/rs-actions.c:203 src/rs-actions.c:222 -#, fuzzy +#: src/rs-actions.c:203 +#: src/rs-actions.c:222 msgid "Export failed" -msgstr "Export File" +msgstr "Export failed" #: src/rs-actions.c:232 msgid "Error exporting" @@ -712,7 +734,8 @@ msgid "Error exporting photo to gimp." msgstr "Error exporting photo to gimp." -#: src/rs-actions.c:256 src/rs-actions.c:274 +#: src/rs-actions.c:256 +#: src/rs-actions.c:274 msgid "Deleting photos" msgstr "Deleting photos" @@ -751,7 +774,7 @@ #: src/rs-actions.c:352 msgid "Channel mixer" -msgstr "" +msgstr "Channel mixer" #: src/rs-actions.c:385 msgid "Select settings to paste" @@ -799,7 +822,8 @@ msgid "%s already added to batch queue" msgstr "%s already added to batch queue" -#: src/rs-actions.c:724 src/rs-actions.c:796 +#: src/rs-actions.c:724 +#: src/rs-actions.c:796 #, c-format msgid "%d photos added to batch queue" msgstr "%d photos added to batch queue" @@ -850,7 +874,7 @@ #: src/rs-actions.c:887 msgid "_Sort by" -msgstr "" +msgstr "_Sort by" #: src/rs-actions.c:888 msgid "_Batch" @@ -964,31 +988,28 @@ msgstr "_Ungroup" #: src/rs-actions.c:923 -#, fuzzy msgid "_Auto group" -msgstr "_Ungroup" +msgstr "_Auto group" #: src/rs-actions.c:924 -#, fuzzy msgid "_Tag Photo..." -msgstr "_Photo" +msgstr "_Tag Photo..." #: src/rs-actions.c:925 msgid "Rotate Clockwise" -msgstr "" +msgstr "Rotate Clockwise" #: src/rs-actions.c:926 -#, fuzzy msgid "Rotate Counter Clockwise" -msgstr "Rotate the photo 90 degrees clockwise" +msgstr "Rotate Counter Clockwise" #: src/rs-actions.c:927 msgid "Flip" -msgstr "" +msgstr "Flip" #: src/rs-actions.c:928 msgid "Mirror" -msgstr "" +msgstr "Mirror" #. View menu #: src/rs-actions.c:931 @@ -1047,125 +1068,94 @@ #: src/rs-actions.c:956 msgid "_Lights out" -msgstr "" +msgstr "_Lights out" #: src/rs-actions.c:962 msgid "Name" -msgstr "" +msgstr "Name" #: src/rs-actions.c:963 msgid "Timestamp" -msgstr "" +msgstr "Timestamp" #: src/rs-actions.c:964 -#, fuzzy msgid "ISO" -msgstr "ISO%d" +msgstr "ISO" #: src/rs-actions.c:965 msgid "Aperture" -msgstr "" +msgstr "Aperture" #: src/rs-actions.c:966 msgid "Focallength" -msgstr "" +msgstr "Focallength" #: src/rs-actions.c:967 msgid "Shutterspeed" -msgstr "" +msgstr "Shutterspeed" #~ msgid "Background renderer active" #~ msgstr "Background renderer active" - #~ msgid "Preload photos" #~ msgstr "Preload photos" - #~ msgid "Filename:" #~ msgstr "Filename:" - #~ msgid "Save uncompressed TIFF" #~ msgstr "Save uncompressed TIFF" - #~ msgid "JPEG Quality:" #~ msgstr "JPEG Quality:" - #~ msgid "File export canceled" #~ msgstr "File export canceled" - #~ msgid "JPEG (Joint Photographic Experts Group)" #~ msgstr "JPEG (Joint Photographic Experts Group)" - #~ msgid "PNG (Portable Network Graphics)" #~ msgstr "PNG (Portable Network Graphics)" - #~ msgid "8-bit TIFF (Tagged Image File Format)" #~ msgstr "8-bit TIFF (Tagged Image File Format)" - #~ msgid "16-bit TIFF (Tagged Image File Format)" #~ msgstr "16-bit TIFF (Tagged Image File Format)" - #~ msgid "Rotate the photo 180 degrees" #~ msgstr "Rotate the photo 180 degrees" - #~ msgid "Reset this setting" #~ msgstr "Reset this setting" - #~ msgid "Warmth/tint" #~ msgstr "Warmth/tint" - #~ msgid "_Zoom to 100%" #~ msgstr "_Zoom to 100%" - #~ msgid "%dmm " #~ msgstr "%dmm " - #~ msgid "%.1fs " #~ msgstr "%.1fs " - #~ msgid "1/%.0fs " #~ msgstr "1/%.0fs " - #~ msgid "F/%.1f " #~ msgstr "F/%.1f " - #~ msgid "No metadata" #~ msgstr "No metadata" - #~ msgid "Canon CR2" #~ msgstr "Canon CR2" - #~ msgid "Canon CIFF" #~ msgstr "Canon CIFF" - #~ msgid "Nikon NEF" #~ msgstr "Nikon NEF" - #~ msgid "Minolta raw" #~ msgstr "Minolta raw" - #~ msgid "Canon TIFF" #~ msgstr "Canon TIFF" - #~ msgid "Sony" #~ msgstr "Sony" - #~ msgid "Kodak" #~ msgstr "Kodak" - #~ msgid "Sigma" #~ msgstr "Sigma" - #~ msgid "Panasonic raw" #~ msgstr "Panasonic raw" - #~ msgid "Pentax raw" #~ msgstr "Pentax raw" - #~ msgid "Adobe Digital negative" #~ msgstr "Adobe Digital negative" - #~ msgid "Mamiya" #~ msgstr "Mamiya" - #~ msgid "Hasselblad" #~ msgstr "Hasselblad" + From anders at kvistmail.dk Mon Sep 28 00:22:17 2009 From: anders at kvistmail.dk (Anders Kvist) Date: Mon, 28 Sep 2009 00:22:17 +0200 Subject: [Rawstudio-commit] r2673 - trunk/po Message-ID: Author: akv Date: 2009-09-28 00:22:16 +0200 (Mon, 28 Sep 2009) New Revision: 2673 Modified: trunk/po/da.po Log: Updated danish translations. Modified: trunk/po/da.po =================================================================== --- trunk/po/da.po 2009-09-27 22:12:32 UTC (rev 2672) +++ trunk/po/da.po 2009-09-27 22:22:16 UTC (rev 2673) @@ -8,7 +8,7 @@ "Project-Id-Version: Rawstudio 1.1.1\n" "Report-Msgid-Bugs-To: rawstudio-dev at rawstudio.org\n" "POT-Creation-Date: 2009-09-28 00:09+0200\n" -"PO-Revision-Date: 2009-01-11 04:25+0100\n" +"PO-Revision-Date: 2009-09-28 00:22+0100\n" "Last-Translator: Anders Kvist \n" "Language-Team: Rawstudio development \n" "MIME-Version: 1.0\n" @@ -35,11 +35,11 @@ #: src/filename.c:283 #, c-format msgid "%d - Date from EXIF (YYYY-MM-DD)" -msgstr "" +msgstr "%d - Dato fra EXIF (YYYY-MM-DD)" #: src/filename.c:284 msgid "%t - Time from EXIF (HH:MM:SS)" -msgstr "" +msgstr "%t - Tid fra EXIF (HH:MM:SS)" #: src/gtk-helper.c:420 msgid "Select color profile" @@ -58,12 +58,8 @@ msgstr "Ikke en valid farveprofil" #: src/gtk-helper.c:466 -msgid "" -"The file you selected does not appear to be a valid color profile for this " -"version of Rawstudio." -msgstr "" -"Den valgte fil er ikke en godkendt farveprofil til denne version af " -"Rawstudio." +msgid "The file you selected does not appear to be a valid color profile for this version of Rawstudio." +msgstr "Den valgte fil er ikke en godkendt farveprofil til denne version af Rawstudio." #: src/gtk-helper.c:568 msgid "Enable color management (experimental)" @@ -81,7 +77,8 @@ msgid "Display profile" msgstr "Sk?rm profil" -#: src/gtk-helper.c:632 src/gtk-helper.c:685 +#: src/gtk-helper.c:632 +#: src/gtk-helper.c:685 msgid "sRGB" msgstr "sRGB" @@ -101,7 +98,8 @@ msgid "Relative colormetric" msgstr "Relativt farvemetrisk" -#: src/gtk-helper.c:739 src/rs-actions.c:347 +#: src/gtk-helper.c:739 +#: src/rs-actions.c:347 msgid "Saturation" msgstr "Farvem?tning" @@ -121,7 +119,9 @@ msgid "Image opened" msgstr "Foto ?bnet" -#: src/gtk-interface.c:203 src/gtk-interface.c:830 src/gtk-interface.c:953 +#: src/gtk-interface.c:203 +#: src/gtk-interface.c:830 +#: src/gtk-interface.c:953 #: src/gtk-interface.c:995 msgid "Rawstudio" msgstr "Rawstudio" @@ -145,11 +145,13 @@ msgid "Directory:" msgstr "Bibliotek:" -#: src/gtk-interface.c:494 src/rs-batch.c:980 +#: src/gtk-interface.c:494 +#: src/rs-batch.c:980 msgid "Choose output directory" msgstr "V?lg output bibliotek" -#: src/gtk-interface.c:510 src/rs-batch.c:991 +#: src/gtk-interface.c:510 +#: src/rs-batch.c:991 msgid "Filename template:" msgstr "Filnavns skabelon:" @@ -202,11 +204,14 @@ msgid "Colors" msgstr "Farver" -#: src/gtk-interface.c:955 src/gtk-interface.c:1178 +#: src/gtk-interface.c:955 +#: src/gtk-interface.c:1178 msgid "Opening directory..." msgstr "?ben bibliotek" -#: src/gtk-interface.c:965 src/gtk-interface.c:1123 src/gtk-interface.c:1193 +#: src/gtk-interface.c:965 +#: src/gtk-interface.c:1123 +#: src/gtk-interface.c:1193 msgid "Ready" msgstr "Klar" @@ -226,19 +231,22 @@ msgid "Open" msgstr "?ben" -#: src/gtk-progress.c:63 src/gtk-progress.c:99 src/gtk-progress.c:122 +#: src/gtk-progress.c:63 +#: src/gtk-progress.c:99 +#: src/gtk-progress.c:122 msgid "Progress" msgstr "Fremskridt" #. FIXME: Calculate some sensible size - maybe even remember user resizes -#: src/rs-save-dialog.c:93 src/rs-toolbox.c:371 +#: src/rs-save-dialog.c:93 +#: src/rs-toolbox.c:371 msgid "Export File" msgstr "Eksporter fil" #: src/rs-save-dialog.c:244 -#, fuzzy, c-format +#, c-format msgid "Exporting to %s" -msgstr "Eksporterer fil ..." +msgstr "Eksporterer %s" #: src/rs-save-dialog.c:360 msgid "Keep aspect" @@ -256,15 +264,18 @@ msgid "Percent:" msgstr "Procent:" -#: src/rs-batch.c:206 src/rs-actions.c:737 +#: src/rs-batch.c:206 +#: src/rs-actions.c:737 msgid "A" msgstr "A" -#: src/rs-batch.c:209 src/rs-actions.c:738 +#: src/rs-batch.c:209 +#: src/rs-actions.c:738 msgid "B" msgstr "B" -#: src/rs-batch.c:212 src/rs-actions.c:739 +#: src/rs-batch.c:212 +#: src/rs-actions.c:739 msgid "C" msgstr "C" @@ -347,7 +358,8 @@ msgid "Photo width:" msgstr "Foto bredde:" -#: src/rs-batch.c:894 src/rs-batch.c:903 +#: src/rs-batch.c:894 +#: src/rs-batch.c:903 msgid "pixels" msgstr "pixels" @@ -412,7 +424,8 @@ msgstr "Eksponerings dimensioner" #. All -#: src/rs-store.c:275 src/rs-store.c:834 +#: src/rs-store.c:275 +#: src/rs-store.c:834 #, c-format msgid "* (%d)" msgstr "* (%d)" @@ -422,7 +435,8 @@ msgstr "Alle fotos (undtaget slettede)" #. 1 -#: src/rs-store.c:279 src/rs-store.c:835 +#: src/rs-store.c:279 +#: src/rs-store.c:835 #, c-format msgid "1 (%d)" msgstr "1 (%d)" @@ -432,7 +446,8 @@ msgstr "Prioritet 1 fotos" #. 2 -#: src/rs-store.c:283 src/rs-store.c:836 +#: src/rs-store.c:283 +#: src/rs-store.c:836 #, c-format msgid "2 (%d)" msgstr "2 (%d)" @@ -442,7 +457,8 @@ msgstr "Prioritet 2 fotos" #. 3 -#: src/rs-store.c:287 src/rs-store.c:837 +#: src/rs-store.c:287 +#: src/rs-store.c:837 #, c-format msgid "3 (%d)" msgstr "3 (%d)" @@ -452,7 +468,8 @@ msgstr "Prioritet 3 fotos" #. Unsorted -#: src/rs-store.c:291 src/rs-store.c:838 +#: src/rs-store.c:291 +#: src/rs-store.c:838 #, c-format msgid "U (%d)" msgstr "U (%d)" @@ -462,7 +479,8 @@ msgstr "Uprioriterede fotos" #. Deleted -#: src/rs-store.c:295 src/rs-store.c:839 +#: src/rs-store.c:295 +#: src/rs-store.c:839 #, c-format msgid "D (%d)" msgstr "D (%d)" @@ -521,17 +539,16 @@ #: src/rs-preview-widget.c:505 msgid "Display Navigation" -msgstr "" +msgstr "Sk?rm navigation" #: src/rs-preview-widget.c:756 msgid "Light out mode not available" -msgstr "" +msgstr "Sluk lyset mode ikke tilg?ngelig" #: src/rs-preview-widget.c:757 -msgid "" -"Your setup doesn't seem to support RGBA visuals and/or compositing. Consult " -"your operating system manual for enabling RGBA visuals and compositing." -msgstr "" +#, fuzzy +msgid "Your setup doesn't seem to support RGBA visuals and/or compositing. Consult your operating system manual for enabling RGBA visuals and compositing." +msgstr "Your setup doesn't seem to support RGBA visuals and/or compositing. Consult your operating system manual for enabling RGBA visuals and compositing." #: src/rs-preview-widget.c:987 msgid "Size" @@ -613,7 +630,8 @@ msgid "Golden rectangle" msgstr "Gylden rektangel" -#: src/rs-preview-widget.c:1042 src/rs-preview-widget.c:1053 +#: src/rs-preview-widget.c:1042 +#: src/rs-preview-widget.c:1053 msgid "Crop" msgstr "Besk?r" @@ -622,15 +640,18 @@ msgstr "Afbryd crop" #. Snapshot labels -#: src/rs-toolbox.c:157 src/rs-actions.c:972 +#: src/rs-toolbox.c:157 +#: src/rs-actions.c:972 msgid " A " msgstr " A" -#: src/rs-toolbox.c:158 src/rs-actions.c:973 +#: src/rs-toolbox.c:158 +#: src/rs-actions.c:973 msgid " B " msgstr " B " -#: src/rs-toolbox.c:159 src/rs-actions.c:974 +#: src/rs-toolbox.c:159 +#: src/rs-actions.c:974 msgid " C " msgstr " C " @@ -640,11 +661,11 @@ msgstr "Histogram" #: src/rs-toolbox.c:297 -#, fuzzy msgid "Reset" -msgstr "Nulstil kurve" +msgstr "Nulstil" -#: src/rs-toolbox.c:415 src/rs-toolbox.c:540 +#: src/rs-toolbox.c:415 +#: src/rs-toolbox.c:540 msgid "Open curve ..." msgstr "?ben kurve ..." @@ -662,15 +683,15 @@ #. Pack everything nice #: src/rs-toolbox.c:637 -#, fuzzy msgid "Basic" -msgstr "Batch" +msgstr "Basis" #: src/rs-toolbox.c:638 msgid "Channel Mixer" -msgstr "" +msgstr "Kanalmixer" -#: src/rs-toolbox.c:639 src/rs-actions.c:353 +#: src/rs-toolbox.c:639 +#: src/rs-actions.c:353 msgid "Curve" msgstr "Kurve" @@ -702,10 +723,10 @@ msgid "File exported" msgstr "Fil eksporteret" -#: src/rs-actions.c:203 src/rs-actions.c:222 -#, fuzzy +#: src/rs-actions.c:203 +#: src/rs-actions.c:222 msgid "Export failed" -msgstr "Eksporter fil" +msgstr "Fejl under eksportering" #: src/rs-actions.c:232 msgid "Error exporting" @@ -715,7 +736,8 @@ msgid "Error exporting photo to gimp." msgstr "Fejl ved eksportering til Gimp" -#: src/rs-actions.c:256 src/rs-actions.c:274 +#: src/rs-actions.c:256 +#: src/rs-actions.c:274 msgid "Deleting photos" msgstr "Sletter fotos" @@ -754,7 +776,7 @@ #: src/rs-actions.c:352 msgid "Channel mixer" -msgstr "" +msgstr "Kanalmixer" #: src/rs-actions.c:385 msgid "Select settings to paste" @@ -802,7 +824,8 @@ msgid "%s already added to batch queue" msgstr "%s er allerede tilf?jet til batch k?en" -#: src/rs-actions.c:724 src/rs-actions.c:796 +#: src/rs-actions.c:724 +#: src/rs-actions.c:796 #, c-format msgid "%d photos added to batch queue" msgstr "%d fotos tilf?jet til batch k?en" @@ -971,26 +994,24 @@ msgstr "_Auto gruppering" #: src/rs-actions.c:924 -#, fuzzy msgid "_Tag Photo..." -msgstr "_Foto" +msgstr "_Marker foto" #: src/rs-actions.c:925 msgid "Rotate Clockwise" -msgstr "" +msgstr "Roter med uret" #: src/rs-actions.c:926 -#, fuzzy msgid "Rotate Counter Clockwise" -msgstr "Roter fotoet 90 grader med uret" +msgstr "Roter mod uret" #: src/rs-actions.c:927 msgid "Flip" -msgstr "" +msgstr "Vend" #: src/rs-actions.c:928 msgid "Mirror" -msgstr "" +msgstr "Spejl" #. View menu #: src/rs-actions.c:931 @@ -1049,7 +1070,7 @@ #: src/rs-actions.c:956 msgid "_Lights out" -msgstr "" +msgstr "_Sluk lyset" #: src/rs-actions.c:962 msgid "Name" @@ -1077,126 +1098,86 @@ #~ msgid "Background renderer active" #~ msgstr "Beregner i baggrunden" - #~ msgid "Preload photos" #~ msgstr "Forh?nds?bning af fotos" - #~ msgid "Filename:" #~ msgstr "Filnavn:" - #~ msgid "Save uncompressed TIFF" #~ msgstr "Gem TIFF ukomprimeret" - #~ msgid "JPEG Quality:" #~ msgstr "JPEG kvalitet:" - #~ msgid "File export canceled" #~ msgstr "Eksportering af fil afbrudt" - #~ msgid "JPEG (Joint Photographic Experts Group)" #~ msgstr "JPEG (Joint Photographic Experts Group)" - #~ msgid "PNG (Portable Network Graphics)" #~ msgstr "PNG (Portable Network Graphics)" - #~ msgid "8-bit TIFF (Tagged Image File Format)" #~ msgstr "8-bit TIFF (Tagged Image File Format)" - #~ msgid "16-bit TIFF (Tagged Image File Format)" #~ msgstr "16-bit TIFF (Tagged Image File Format)" - #~ msgid "Rotate the photo 180 degrees" #~ msgstr "Roter fotoet 180 grader" - #~ msgid "Reset this setting" #~ msgstr "Nulstil denne indstilling" - #~ msgid "Warmth/tint" #~ msgstr "Varme/Nuance" - #~ msgid "_Zoom to 100%" #~ msgstr "_Zoom til 100%" - #~ msgid "%dmm " #~ msgstr "%dmm " - #~ msgid "%.1fs " #~ msgstr "%.1fs " - #~ msgid "1/%.0fs " #~ msgstr "1/%.0fs " - #~ msgid "F/%.1f " #~ msgstr "F/%.1f " - #~ msgid "No metadata" #~ msgstr "Ingen metadata" - #~ msgid "Canon CR2" #~ msgstr "Canon CR2" - #~ msgid "Canon CIFF" #~ msgstr "Canon CIFF" - #~ msgid "Nikon NEF" #~ msgstr "Nikon NEF" - #~ msgid "Minolta raw" #~ msgstr "Minolta raw" - #~ msgid "Canon TIFF" #~ msgstr "Canon TIFF" - #~ msgid "Sony" #~ msgstr "Sony" - #~ msgid "Kodak" #~ msgstr "Kodak" - #~ msgid "Sigma" #~ msgstr "Sigma" - #~ msgid "Panasonic raw" #~ msgstr "Panasonic raw" - #~ msgid "Pentax raw" #~ msgstr "Pentax raw" - #~ msgid "Adobe Digital negative" #~ msgstr "Adobe Digital negative" - #~ msgid "Mamiya" #~ msgstr "Mamiya" - #~ msgid "Hasselblad" #~ msgstr "Hasselblad" - #~ msgid "Split" #~ msgstr "Delt visning" - #~ msgid "Exp. mask" #~ msgstr "Eksponerings maskering" - #~ msgid "Toggle exposure mask" #~ msgstr "Skift eksponerings maskerings tilstand" - #~ msgid "Set zoom" #~ msgstr "Set zoom" - #~ msgid "Zoom out" #~ msgstr "Zoom ud" - #~ msgid "Zoom in" #~ msgstr "Zoom ind" - #~ msgid "Zoom to fit" #~ msgstr "Zoom tilpasning" - #~ msgid "Zoom to 100%" #~ msgstr "Zoom til 100%" - #~ msgid "Zoom:" #~ msgstr "Zoom:" - #~ msgid "Apply" #~ msgstr "Anvend" + From anders at kvistmail.dk Mon Sep 28 00:55:11 2009 From: anders at kvistmail.dk (Anders Kvist) Date: Mon, 28 Sep 2009 00:55:11 +0200 Subject: [Rawstudio-commit] r2674 - trunk/src Message-ID: Author: akv Date: 2009-09-28 00:55:11 +0200 (Mon, 28 Sep 2009) New Revision: 2674 Modified: trunk/src/conf_interface.h trunk/src/rs-library.c trunk/src/rs-library.h trunk/src/rs-store.c Log: Disabling showing of autotag-tags - can be changed with library_autotag (boolean) in gconf. Modified: trunk/src/conf_interface.h =================================================================== --- trunk/src/conf_interface.h 2009-09-27 22:22:16 UTC (rev 2673) +++ trunk/src/conf_interface.h 2009-09-27 22:55:11 UTC (rev 2674) @@ -70,6 +70,7 @@ #define CONF_SPLIT_CONTINUOUS "split_continuous" #define CONF_LAST_PRIORITY_PAGE "last_priority_page" #define CONF_STORE_SORT_METHOD "store_sort_method" +#define CONF_LIBRARY_AUTOTAG "library_autotag" #define DEFAULT_CONF_EXPORT_FILENAME "%f_%2c" #define DEFAULT_CONF_BATCH_DIRECTORY "batch_exports/" @@ -95,6 +96,7 @@ #define DEFAULT_CONF_LOAD_RECURSIVE FALSE #define DEFAULT_CONF_USE_SYSTEM_THEME FALSE #define DEFAULT_CONF_SHOW_FILENAMES FALSE +#define DEFAULT_CONF_LIBRARY_AUTOTAG FALSE /* get the last working directory from gconf */ void rs_set_last_working_directory(const char *lwd); Modified: trunk/src/rs-library.c =================================================================== --- trunk/src/rs-library.c 2009-09-27 22:22:16 UTC (rev 2673) +++ trunk/src/rs-library.c 2009-09-27 22:55:11 UTC (rev 2674) @@ -555,15 +555,23 @@ } GList * -rs_library_photo_tags(RS_LIBRARY *library, gchar *photo) +rs_library_photo_tags(RS_LIBRARY *library, gchar *photo, gboolean autotag) { sqlite3_stmt *stmt; gint rc; sqlite3 *db = library->db; GList *tags = NULL; - sqlite3_prepare_v2(db, "select tags.tagname from library,phototags,tags WHERE library.id=phototags.photo and phototags.tag=tags.id and library.filename = ?1;", -1, &stmt, NULL); - rc = sqlite3_bind_text(stmt, 1, photo, strlen(photo), NULL); + if (autotag) + { + sqlite3_prepare_v2(db, "select tags.tagname from library,phototags,tags WHERE library.id=phototags.photo and phototags.tag=tags.id and library.filename = ?1;", -1, &stmt, NULL); + rc = sqlite3_bind_text(stmt, 1, photo, strlen(photo), NULL); + } + else + { + sqlite3_prepare_v2(db, "select tags.tagname from library,phototags,tags WHERE library.id=phototags.photo and phototags.tag=tags.id and library.filename = ?1 and phototags.autotag = 0;", -1, &stmt, NULL); + rc = sqlite3_bind_text(stmt, 1, photo, strlen(photo), NULL); + } while (sqlite3_step(stmt) == SQLITE_ROW) tags = g_list_append(tags, g_strdup((gchar *) sqlite3_column_text(stmt, 0))); sqlite3_finalize(stmt); Modified: trunk/src/rs-library.h =================================================================== --- trunk/src/rs-library.h 2009-09-27 22:22:16 UTC (rev 2673) +++ trunk/src/rs-library.h 2009-09-27 22:55:11 UTC (rev 2674) @@ -39,7 +39,7 @@ gboolean rs_library_delete_tag(RS_LIBRARY *library, gchar *tag, gboolean force); GList * rs_library_search(RS_LIBRARY *library, GList *tags); void rs_library_photo_default_tags(RS_LIBRARY *library, gchar *photo, RSMetadata *metadata); -GList * rs_library_photo_tags(RS_LIBRARY *library, gchar *photo); +GList * rs_library_photo_tags(RS_LIBRARY *library, gchar *photo, gboolean autotag); GList * rs_library_find_tag(RS_LIBRARY *library, gchar *tag); //void rs_library_delete_tag(gchar *filename, gchar *tag); Modified: trunk/src/rs-store.c =================================================================== --- trunk/src/rs-store.c 2009-09-27 22:22:16 UTC (rev 2673) +++ trunk/src/rs-store.c 2009-09-27 22:55:11 UTC (rev 2674) @@ -514,7 +514,9 @@ GTimer *gt = g_timer_new(); RS_LIBRARY *library = g_malloc(sizeof(RS_LIBRARY *)); rs_library_init(library); - GList *tags = rs_library_photo_tags(library, filename); + gboolean autotag; + rs_conf_get_boolean_with_default(CONF_LIBRARY_AUTOTAG, &autotag, DEFAULT_CONF_LIBRARY_AUTOTAG); + GList *tags = rs_library_photo_tags(library, filename, autotag); rs_library_destroy(library); printf("time: %f\n",g_timer_elapsed(gt, NULL)); From anders at kvistmail.dk Mon Sep 28 18:45:04 2009 From: anders at kvistmail.dk (Anders Kvist) Date: Mon, 28 Sep 2009 18:45:04 +0200 Subject: [Rawstudio-commit] r2675 - trunk/po Message-ID: Author: akv Date: 2009-09-28 18:45:04 +0200 (Mon, 28 Sep 2009) New Revision: 2675 Modified: trunk/po/POTFILES.in Log: Added missing files to POTFILES.in - Alexandre Prokoudine. Modified: trunk/po/POTFILES.in =================================================================== --- trunk/po/POTFILES.in 2009-09-27 22:55:11 UTC (rev 2674) +++ trunk/po/POTFILES.in 2009-09-28 16:45:04 UTC (rev 2675) @@ -1,5 +1,6 @@ # List of source files containing translatable strings. +librawstudio/rs-settings.c src/filename.c src/gtk-helper.c src/gtk-interface.c @@ -12,3 +13,8 @@ src/rs-toolbox.c src/rs-actions.c src/rs-dir-selector.c +plugins/denoise/denoise.c +plugins/output-flickr/output-flickr.c +plugins/output-jpegfile/output-jpegfile.c +plugins/output-pngfile/output-pngfile.c +plugins/output-tifffile/output-tifffile.c From anders at kvistmail.dk Mon Sep 28 18:45:47 2009 From: anders at kvistmail.dk (Anders Kvist) Date: Mon, 28 Sep 2009 18:45:47 +0200 Subject: [Rawstudio-commit] r2676 - trunk/po Message-ID: Author: akv Date: 2009-09-28 18:45:47 +0200 (Mon, 28 Sep 2009) New Revision: 2676 Modified: trunk/po/ru.po Log: Updated Russian translations - Alexandre Prokoudine. Modified: trunk/po/ru.po =================================================================== --- trunk/po/ru.po 2009-09-28 16:45:04 UTC (rev 2675) +++ trunk/po/ru.po 2009-09-28 16:45:47 UTC (rev 2676) @@ -1,373 +1,441 @@ # translation of Rawstudio to Russian -# translation of rawstudio.po to Russian -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# Copyright (C) 2009 rawstudio Alexandre Prokoudine # This file is distributed under the same license as the PACKAGE package. # # Alexandre Prokoudine , 2007. msgid "" msgstr "" "Project-Id-Version: Rawstudio 1.1.1\n" -"Report-Msgid-Bugs-To: rawstudio-dev at rawstudio.org\n" -"POT-Creation-Date: 2009-09-28 00:09+0200\n" -"PO-Revision-Date: 2008-09-30 01:06+0300\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-09-27 04:22+0400\n" +"PO-Revision-Date: 2009-09-27 04:37+0300\n" "Last-Translator: Alexandre Prokoudine \n" "Language-Team: Rawstudio development \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: KBabel 1.11.4\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" -"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "X-Poedit-Language: Russian\n" "X-Poedit-Country: RUSSIAN FEDERATION\n" -#: src/filename.c:280 +#. Build GUI +#: ../librawstudio/rs-settings.c:70 +#: ../src/rs-actions.c:345 +msgid "Exposure" +msgstr "??????????" + +#: ../librawstudio/rs-settings.c:75 +#: ../src/gtk-helper.c:739 +#: ../src/rs-actions.c:346 +msgid "Saturation" +msgstr "????????????" + +#: ../librawstudio/rs-settings.c:80 +#: ../src/rs-actions.c:347 +msgid "Hue" +msgstr "???" + +#: ../librawstudio/rs-settings.c:85 +#: ../src/rs-actions.c:348 +msgid "Contrast" +msgstr "????????" + +#: ../librawstudio/rs-settings.c:90 +msgid "Warmth" +msgstr "???????" + +#: ../librawstudio/rs-settings.c:95 +msgid "Tint" +msgstr "???????" + +#: ../librawstudio/rs-settings.c:100 +#: ../src/rs-actions.c:350 +msgid "Sharpen" +msgstr "????????" + +#. FIXME: ? +#: ../librawstudio/rs-settings.c:105 +#: ../plugins/denoise/denoise.c:94 +msgid "Denoise" +msgstr "?????????? ????" + +#. FIXME: ? +#: ../librawstudio/rs-settings.c:110 +msgid "Color Denoise" +msgstr "??????? ???" + +#: ../librawstudio/rs-settings.c:110 +#: ../plugins/denoise/denoise.c:102 +msgid "Color denoise" +msgstr "??????? ???" + +#. FIXME: ? +#: ../librawstudio/rs-settings.c:115 +msgid "Red" +msgstr "???????" + +#. FIXME: ? +#: ../librawstudio/rs-settings.c:120 +msgid "Green" +msgstr "???????" + +#. FIXME: ? +#: ../librawstudio/rs-settings.c:125 +msgid "Blue" +msgstr "?????" + +#: ../src/filename.c:280 #, c-format msgid "%f - Original filename" msgstr "%f ? ???????? ??? ?????" -#: src/filename.c:281 +#: ../src/filename.c:281 #, c-format msgid "%2c - Incremental counter" msgstr "%2c ? ?????????? ??????" -#: src/filename.c:282 +#: ../src/filename.c:282 #, c-format msgid "%s - Setting id (A, B or C)" msgstr "%s ? ????? ?????????? (A, B ??? C)" -#: src/filename.c:283 +#: ../src/filename.c:283 #, c-format msgid "%d - Date from EXIF (YYYY-MM-DD)" -msgstr "" +msgstr "%d ? ???? ?? Exif (????-??-??)" -#: src/filename.c:284 +#: ../src/filename.c:284 msgid "%t - Time from EXIF (HH:MM:SS)" -msgstr "" +msgstr "%t ? ????? ?? Exif (??-??-??)" -#: src/gtk-helper.c:420 +#: ../src/gtk-helper.c:420 msgid "Select color profile" msgstr "???????? ???????? ???????" -#: src/gtk-helper.c:450 +#: ../src/gtk-helper.c:450 msgid "All files" msgstr "??? ?????" -#: src/gtk-helper.c:451 +#: ../src/gtk-helper.c:451 msgid "Color profiles (icc and icm)" msgstr "???????? ??????? (icc ? icm)" -#: src/gtk-helper.c:465 +#: ../src/gtk-helper.c:465 msgid "Not a valid color profile." msgstr "??? ???????????? ???????? ???????." -#: src/gtk-helper.c:466 -msgid "" -"The file you selected does not appear to be a valid color profile for this " -"version of Rawstudio." -msgstr "" -"????????? ???? ???? ?? ????? ?? ?????????? ???????? ???????, ??????? ????? " -"???? ?? ???????????? ? Rawstudio." +#: ../src/gtk-helper.c:466 +msgid "The file you selected does not appear to be a valid color profile for this version of Rawstudio." +msgstr "????????? ???? ???? ?? ????? ?? ?????????? ???????? ???????, ??????? ????? ???? ?? ???????????? ? Rawstudio." -#: src/gtk-helper.c:568 +#: ../src/gtk-helper.c:568 msgid "Enable color management (experimental)" msgstr "???????? ?????????? ??????" -#: src/gtk-helper.c:576 +#: ../src/gtk-helper.c:576 msgid "Input profile" msgstr "??????? ??????: " -#: src/gtk-helper.c:579 +#: ../src/gtk-helper.c:579 msgid "BuiltInRGBProfile" msgstr "?????????? ??????? RGB" -#: src/gtk-helper.c:629 +#: ../src/gtk-helper.c:629 msgid "Display profile" msgstr "??????? ????????: " -#: src/gtk-helper.c:632 src/gtk-helper.c:685 +#: ../src/gtk-helper.c:632 +#: ../src/gtk-helper.c:685 msgid "sRGB" msgstr "sRGB" -#: src/gtk-helper.c:682 +#: ../src/gtk-helper.c:682 msgid "Export profile" msgstr "??????? ????????: " -#: src/gtk-helper.c:734 +#: ../src/gtk-helper.c:734 msgid "Intent" msgstr "?????????????: " -#: src/gtk-helper.c:737 +#: ../src/gtk-helper.c:737 msgid "Perceptual" msgstr "??????????????" -#: src/gtk-helper.c:738 +#: ../src/gtk-helper.c:738 msgid "Relative colormetric" msgstr "????????????? ?????????????????" -#: src/gtk-helper.c:739 src/rs-actions.c:347 -msgid "Saturation" -msgstr "????????????" - -#: src/gtk-helper.c:740 +#: ../src/gtk-helper.c:740 msgid "Absolute colormetric" msgstr "?????????? ?????????????????" -#: src/gtk-interface.c:182 +#: ../src/gtk-interface.c:83 +msgid "Background renderer active" +msgstr "??????? ?????????? ???????" + +#: ../src/gtk-interface.c:175 msgid "Opening photo ..." msgstr "??????????? ??????..." -#: src/gtk-interface.c:197 +#: ../src/gtk-interface.c:190 msgid "Couldn't open photo" msgstr "?? ??????? ??????? ??????" -#: src/gtk-interface.c:202 +#: ../src/gtk-interface.c:195 msgid "Image opened" msgstr "?????? ??????" -#: src/gtk-interface.c:203 src/gtk-interface.c:830 src/gtk-interface.c:953 -#: src/gtk-interface.c:995 +#: ../src/gtk-interface.c:196 +#: ../src/gtk-interface.c:807 +#: ../src/gtk-interface.c:930 +#: ../src/gtk-interface.c:966 msgid "Rawstudio" msgstr "Rawstudio" -#: src/gtk-interface.c:273 +#: ../src/gtk-interface.c:254 #, c-format msgid "Changed photo priority (*)" msgstr "??????? ????????? ?????? (*)" -#: src/gtk-interface.c:275 +#: ../src/gtk-interface.c:256 #, c-format msgid "Changed photo priority (D)" msgstr "??????? ????????? ?????? (D)" -#: src/gtk-interface.c:277 +#: ../src/gtk-interface.c:258 #, c-format msgid "Changed photo priority (%d)" msgstr "??????? ????????? ?????? (%d)" -#: src/gtk-interface.c:492 +#: ../src/gtk-interface.c:469 msgid "Directory:" msgstr "???????:" -#: src/gtk-interface.c:494 src/rs-batch.c:980 +#: ../src/gtk-interface.c:471 +#: ../src/rs-batch.c:980 msgid "Choose output directory" msgstr "??????? ??????? ??? ????????" -#: src/gtk-interface.c:510 src/rs-batch.c:991 +#: ../src/gtk-interface.c:487 +#: ../src/rs-batch.c:991 msgid "Filename template:" msgstr "?????? ????? ?????:" -#: src/gtk-interface.c:523 +#: ../src/gtk-interface.c:500 msgid "Filename example:" msgstr "?????? ????? ?????:" -#: src/gtk-interface.c:534 +#: ../src/gtk-interface.c:511 msgid "File type:" msgstr "??? ?????:" -#: src/gtk-interface.c:595 +#: ../src/gtk-interface.c:572 msgid "Preferences" msgstr "?????????" -#: src/gtk-interface.c:610 +#: ../src/gtk-interface.c:587 msgid "Preview background color:" msgstr "???? ????:" -#: src/gtk-interface.c:625 +#: ../src/gtk-interface.c:602 msgid "Histogram height:" msgstr "?????? ???????????:" -#: src/gtk-interface.c:635 +#: ../src/gtk-interface.c:612 msgid "Show filenames in iconview" msgstr "?????????? ????? ??????" -#: src/gtk-interface.c:640 +#: ../src/gtk-interface.c:617 msgid "Use system theme" msgstr "???????????? ????????? ????? ??????????" -#: src/gtk-interface.c:647 +#: ../src/gtk-interface.c:624 msgid "Place cache in home directory" msgstr "??????? ??? ? ???????? ????????" -#: src/gtk-interface.c:650 +#: ../src/gtk-interface.c:627 msgid "Load 8 bit photos (jpeg, png, etc)" msgstr "????????? 8-????????? ?????? (JPEG, PNG ? ?.?.)" -#: src/gtk-interface.c:718 +#: ../src/gtk-interface.c:695 msgid "General" msgstr "?????" #. gtk_notebook_append_page(GTK_NOTEBOOK(notebook), batch_page, gtk_label_new(_("Batch"))); -#: src/gtk-interface.c:720 +#: ../src/gtk-interface.c:697 msgid "Quick export" msgstr "??????? ???????" -#: src/gtk-interface.c:721 +#: ../src/gtk-interface.c:698 msgid "Colors" msgstr "?????" -#: src/gtk-interface.c:955 src/gtk-interface.c:1178 -msgid "Opening directory..." -msgstr "??????????? ???????" - -#: src/gtk-interface.c:965 src/gtk-interface.c:1123 src/gtk-interface.c:1193 -msgid "Ready" -msgstr "??????" - -#: src/gtk-interface.c:1050 +#: ../src/gtk-interface.c:1021 msgid "Open recursive" msgstr "????????? ??????????" -#: src/gtk-interface.c:1059 +#: ../src/gtk-interface.c:1030 msgid "Tools" msgstr "???????????" -#: src/gtk-interface.c:1060 +#: ../src/gtk-interface.c:1031 msgid "Batch" msgstr "???????" -#: src/gtk-interface.c:1061 +#: ../src/gtk-interface.c:1032 msgid "Open" msgstr "????????" -#: src/gtk-progress.c:63 src/gtk-progress.c:99 src/gtk-progress.c:122 +#: ../src/gtk-interface.c:1094 +msgid "Ready" +msgstr "??????" + +#: ../src/gtk-progress.c:63 +#: ../src/gtk-progress.c:99 +#: ../src/gtk-progress.c:122 msgid "Progress" msgstr "????????" #. FIXME: Calculate some sensible size - maybe even remember user resizes -#: src/rs-save-dialog.c:93 src/rs-toolbox.c:371 +#: ../src/rs-save-dialog.c:93 +#: ../src/rs-toolbox.c:371 msgid "Export File" msgstr "?????????????? ??????" -#: src/rs-save-dialog.c:244 -#, fuzzy, c-format +#: ../src/rs-save-dialog.c:244 +#, c-format msgid "Exporting to %s" -msgstr "?????????????? ??????..." +msgstr "??????? ? %s" -#: src/rs-save-dialog.c:360 +#: ../src/rs-save-dialog.c:360 msgid "Keep aspect" msgstr "????????? ???????????" -#: src/rs-save-dialog.c:378 +#: ../src/rs-save-dialog.c:378 msgid "Width:" msgstr "??????:" -#: src/rs-save-dialog.c:380 +#: ../src/rs-save-dialog.c:380 msgid "Height:" msgstr "??????:" -#: src/rs-save-dialog.c:382 +#: ../src/rs-save-dialog.c:382 msgid "Percent:" msgstr "???????:" -#: src/rs-batch.c:206 src/rs-actions.c:737 +#: ../src/rs-batch.c:206 +#: ../src/rs-actions.c:677 msgid "A" msgstr "A" -#: src/rs-batch.c:209 src/rs-actions.c:738 +#: ../src/rs-batch.c:209 +#: ../src/rs-actions.c:678 msgid "B" msgstr "B" -#: src/rs-batch.c:212 src/rs-actions.c:739 +#: ../src/rs-batch.c:212 +#: ../src/rs-actions.c:679 msgid "C" msgstr "C" -#: src/rs-batch.c:437 +#: ../src/rs-batch.c:437 msgid "Processing photos" msgstr "??????? ???????" -#: src/rs-batch.c:441 +#: ../src/rs-batch.c:441 msgid "Cancel" msgstr "????????" -#: src/rs-batch.c:446 +#: ../src/rs-batch.c:446 msgid "Last image:" msgstr "????????? ??????:" -#: src/rs-batch.c:479 +#: ../src/rs-batch.c:479 #, c-format msgid "Time left: %dh %dm %ds" msgstr "???????? ???????: %dh %dm %ds" -#: src/rs-batch.c:483 +#: ../src/rs-batch.c:483 msgid "Time left: ..." msgstr "???????? ???????: ..." -#: src/rs-batch.c:495 +#: ../src/rs-batch.c:495 #, c-format msgid "Loading %s ..." msgstr "??????????? %s ..." -#: src/rs-batch.c:536 +#: ../src/rs-batch.c:536 #, c-format msgid "Saving %s ..." msgstr "??????????? %s ..." -#: src/rs-batch.c:634 +#: ../src/rs-batch.c:634 msgid "Icon" msgstr "?????" -#: src/rs-batch.c:641 +#: ../src/rs-batch.c:641 msgid "Filename" msgstr "??? ?????" -#: src/rs-batch.c:648 +#: ../src/rs-batch.c:648 msgid "Setting" msgstr "????????" -#: src/rs-batch.c:738 +#: ../src/rs-batch.c:738 msgid "Start" msgstr "??????" -#: src/rs-batch.c:741 +#: ../src/rs-batch.c:741 msgid "Remove" msgstr "???????" -#: src/rs-batch.c:744 +#: ../src/rs-batch.c:744 msgid "Remove all" msgstr "??????? ???" -#: src/rs-batch.c:869 +#: ../src/rs-batch.c:869 msgid "Photo size" msgstr "?????? ??????:" -#: src/rs-batch.c:877 +#: ../src/rs-batch.c:877 msgid "Constant scale" msgstr "???????????????" -#: src/rs-batch.c:878 +#: ../src/rs-batch.c:878 msgid "Constant width" msgstr "?????????? ??????" -#: src/rs-batch.c:879 +#: ../src/rs-batch.c:879 msgid "Constant height" msgstr "?????????? ??????" -#: src/rs-batch.c:880 +#: ../src/rs-batch.c:880 msgid "Maximum size" msgstr "???????????? ??????" -#: src/rs-batch.c:892 +#: ../src/rs-batch.c:892 msgid "Photo width:" msgstr "?????? ??????:" -#: src/rs-batch.c:894 src/rs-batch.c:903 +#: ../src/rs-batch.c:894 +#: ../src/rs-batch.c:903 msgid "pixels" msgstr "????????" -#: src/rs-batch.c:901 +#: ../src/rs-batch.c:901 msgid "Photo height:" msgstr "?????? ??????:" -#: src/rs-batch.c:910 +#: ../src/rs-batch.c:910 msgid "Photo scale:" msgstr "??????? ??????:" -#: src/rs-batch.c:912 +#: ../src/rs-batch.c:912 msgid "%" msgstr "%" -#: src/rs-batch.c:948 +#: ../src/rs-batch.c:948 #, c-format msgid "" "Constant width:\n" @@ -376,7 +444,7 @@ "?????????? ??????:\n" "%d" -#: src/rs-batch.c:951 +#: ../src/rs-batch.c:951 #, c-format msgid "" "Constant height:\n" @@ -385,7 +453,7 @@ "?????????? ??????:\n" "%d" -#: src/rs-batch.c:954 +#: ../src/rs-batch.c:954 #, c-format msgid "" "Constant Scale:\n" @@ -394,7 +462,7 @@ "?????????? ???????:\n" "%d" -#: src/rs-batch.c:958 +#: ../src/rs-batch.c:958 #, c-format msgid "" "Maximum size:\n" @@ -403,75 +471,81 @@ "???????????? ??????:\n" "%d x %d" -#: src/rs-batch.c:987 +#: ../src/rs-batch.c:987 msgid "Output directory:" msgstr "??????? ??????:" -#: src/rs-batch.c:1012 +#: ../src/rs-batch.c:1012 msgid "Change" msgstr "???????" -#: src/rs-batch.c:1017 +#: ../src/rs-batch.c:1017 msgid "Export dimensions" msgstr "??????? ??? ????????" #. All -#: src/rs-store.c:275 src/rs-store.c:834 +#: ../src/rs-store.c:275 +#: ../src/rs-store.c:807 #, c-format msgid "* (%d)" msgstr "* (%d)" -#: src/rs-store.c:276 +#: ../src/rs-store.c:276 msgid "All photos (excluding deleted)" msgstr "??? ?????? (????? ?????????)" #. 1 -#: src/rs-store.c:279 src/rs-store.c:835 +#: ../src/rs-store.c:279 +#: ../src/rs-store.c:808 #, c-format msgid "1 (%d)" msgstr "1 (%d)" -#: src/rs-store.c:280 +#: ../src/rs-store.c:280 msgid "Priority 1 photos" msgstr "?????? ? ??????????? 1" #. 2 -#: src/rs-store.c:283 src/rs-store.c:836 +#: ../src/rs-store.c:283 +#: ../src/rs-store.c:809 #, c-format msgid "2 (%d)" msgstr "2 (%d)" -#: src/rs-store.c:284 +#: ../src/rs-store.c:284 msgid "Priority 2 photos" msgstr "?????? ? ??????????? 2" #. 3 -#: src/rs-store.c:287 src/rs-store.c:837 +#: ../src/rs-store.c:287 +#: ../src/rs-store.c:810 #, c-format msgid "3 (%d)" msgstr "3 (%d)" -#: src/rs-store.c:288 +#: ../src/rs-store.c:288 msgid "Priority 3 photos" msgstr "?????? ? ??????????? 3" #. Unsorted -#: src/rs-store.c:291 src/rs-store.c:838 +#: ../src/rs-store.c:291 +#: ../src/rs-store.c:811 #, c-format msgid "U (%d)" msgstr "U (%d)" -#: src/rs-store.c:292 +#: ../src/rs-store.c:292 msgid "Unprioritized photos" msgstr "?????? ??? ??????????" #. Deleted -#: src/rs-store.c:295 src/rs-store.c:839 +#: ../src/rs-store.c:295 +#: ../src/rs-store.c:812 #, c-format msgid "D (%d)" msgstr "D (%d)" -#: src/rs-store.c:296 +#: ../src/rs-store.c:296 msgid "Deleted photos" msgstr "????????? ??????" @@ -480,11 +554,11 @@ #. understanding of our interface. I was thinking about adding a button instead #. that said "ROCK ON!" to instantly play "AC/DC - Highway to Hell", but I #. believe this will be better for the end user -#: src/rs-store.c:331 +#: ../src/rs-store.c:331 msgid "Priorities" msgstr "??????????" -#: src/rs-store.c:527 +#: ../src/rs-store.c:518 #, c-format msgid "" "%s\n" @@ -493,325 +567,312 @@ "%s\n" "\n" -#: src/rs-store.c:530 +#: ../src/rs-store.c:521 #, c-format msgid "Focal length: %dmm\n" msgstr "???????? ??????????: %d??\n" -#: src/rs-store.c:533 +#: ../src/rs-store.c:524 #, c-format msgid "Shutter speed: %.1fs\n" msgstr "????????: %.1f?\n" -#: src/rs-store.c:535 +#: ../src/rs-store.c:526 #, c-format msgid "Shutter speed: 1/%.0fs\n" msgstr "????????: 1/%.0f?\n" -#: src/rs-store.c:538 +#: ../src/rs-store.c:529 #, c-format msgid "Aperture: F/%.01f\n" msgstr "????????: F/%.01f\n" -#: src/rs-store.c:541 +#: ../src/rs-store.c:532 #, c-format msgid "ISO: %u\n" msgstr "ISO: %u\n" -#: src/rs-store.c:544 +#: ../src/rs-store.c:535 #, c-format msgid "Time: %s" msgstr "?????: %s" -#: src/rs-preview-widget.c:505 +#: ../src/rs-preview-widget.c:505 msgid "Display Navigation" msgstr "" -#: src/rs-preview-widget.c:756 +#: ../src/rs-preview-widget.c:756 msgid "Light out mode not available" -msgstr "" +msgstr "????? ?????????? ????? ??????????" -#: src/rs-preview-widget.c:757 -msgid "" -"Your setup doesn't seem to support RGBA visuals and/or compositing. Consult " -"your operating system manual for enabling RGBA visuals and compositing." +#: ../src/rs-preview-widget.c:757 +msgid "Your setup doesn't seem to support RGBA visuals and/or compositing. Consult your operating system manual for enabling RGBA visuals and compositing." msgstr "" -#: src/rs-preview-widget.c:987 +#: ../src/rs-preview-widget.c:987 msgid "Size" msgstr "??????" -#: src/rs-preview-widget.c:995 +#: ../src/rs-preview-widget.c:995 msgid "-" msgstr "?" -#: src/rs-preview-widget.c:1001 +#: ../src/rs-preview-widget.c:1001 msgid "Grid" msgstr "?????" -#: src/rs-preview-widget.c:1006 +#: ../src/rs-preview-widget.c:1006 msgid "None" msgstr "???" -#: src/rs-preview-widget.c:1007 +#: ../src/rs-preview-widget.c:1007 msgid "Golden sections" msgstr "??????? ???????" -#: src/rs-preview-widget.c:1008 +#: ../src/rs-preview-widget.c:1008 msgid "Rule of thirds" msgstr "??????? ??????" -#: src/rs-preview-widget.c:1009 +#: ../src/rs-preview-widget.c:1009 msgid "Golden triangles #1" msgstr "??????? ???????????? ?1" -#: src/rs-preview-widget.c:1010 +#: ../src/rs-preview-widget.c:1010 msgid "Golden triangles #2" msgstr "??????? ???????????? ?2" -#: src/rs-preview-widget.c:1011 +#: ../src/rs-preview-widget.c:1011 msgid "Harmonious triangles #1" msgstr "??????????? ???????????? ?1" -#: src/rs-preview-widget.c:1012 +#: ../src/rs-preview-widget.c:1012 msgid "Harmonious triangles #2" msgstr "??????????? ???????????? ?2" -#: src/rs-preview-widget.c:1021 +#: ../src/rs-preview-widget.c:1021 msgid "Aspect" msgstr "???????????" -#: src/rs-preview-widget.c:1026 +#: ../src/rs-preview-widget.c:1026 msgid "Freeform" msgstr "????????????" -#: src/rs-preview-widget.c:1027 +#: ../src/rs-preview-widget.c:1027 msgid "ISO paper (A4)" msgstr "?????? ?????? ISO (A4)" -#: src/rs-preview-widget.c:1028 +#: ../src/rs-preview-widget.c:1028 msgid "3:2 (35mm)" msgstr "3:2 (35??)" -#: src/rs-preview-widget.c:1029 +#: ../src/rs-preview-widget.c:1029 msgid "4:3" msgstr "4:3" -#: src/rs-preview-widget.c:1030 +#: ../src/rs-preview-widget.c:1030 msgid "10:8 (SXGA)" msgstr "10:8 (SXGA)" -#: src/rs-preview-widget.c:1031 +#: ../src/rs-preview-widget.c:1031 msgid "16:10 (Wide XGA)" msgstr "16:10 (Wide XGA)" -#: src/rs-preview-widget.c:1032 +#: ../src/rs-preview-widget.c:1032 msgid "8:3 (Dualhead XGA)" msgstr "8:3 (Dualhead XGA)" -#: src/rs-preview-widget.c:1033 +#: ../src/rs-preview-widget.c:1033 msgid "1:1" msgstr "1:1" -#: src/rs-preview-widget.c:1034 +#: ../src/rs-preview-widget.c:1034 msgid "Golden rectangle" msgstr "??????? ?????????????" -#: src/rs-preview-widget.c:1042 src/rs-preview-widget.c:1053 +#: ../src/rs-preview-widget.c:1042 +#: ../src/rs-preview-widget.c:1053 msgid "Crop" msgstr "???????????" -#: src/rs-preview-widget.c:1044 +#: ../src/rs-preview-widget.c:1044 msgid "Don't crop" msgstr "?? ???????????" #. Snapshot labels -#: src/rs-toolbox.c:157 src/rs-actions.c:972 +#: ../src/rs-toolbox.c:157 +#: ../src/rs-actions.c:911 msgid " A " msgstr " A " -#: src/rs-toolbox.c:158 src/rs-actions.c:973 +#: ../src/rs-toolbox.c:158 +#: ../src/rs-actions.c:912 msgid " B " msgstr " B " -#: src/rs-toolbox.c:159 src/rs-actions.c:974 +#: ../src/rs-toolbox.c:159 +#: ../src/rs-actions.c:913 msgid " C " msgstr " C " #. FIXME: Get height from gconf -#: src/rs-toolbox.c:184 +#: ../src/rs-toolbox.c:184 msgid "Histogram" msgstr "???????????" -#: src/rs-toolbox.c:297 -#, fuzzy +#: ../src/rs-toolbox.c:297 msgid "Reset" -msgstr "???????? ??????" +msgstr "????????" -#: src/rs-toolbox.c:415 src/rs-toolbox.c:540 +#: ../src/rs-toolbox.c:415 +#: ../src/rs-toolbox.c:540 msgid "Open curve ..." msgstr "????????? ?????? ?? ?????..." -#: src/rs-toolbox.c:546 +#: ../src/rs-toolbox.c:546 msgid "Save curve as ..." msgstr "????????? ?????? ???..." -#: src/rs-toolbox.c:552 +#: ../src/rs-toolbox.c:552 msgid "Reset curve" msgstr "???????? ??????" -#: src/rs-toolbox.c:557 +#: ../src/rs-toolbox.c:557 msgid "Auto adjust curve ends" msgstr "????????? ????? ??????" #. Pack everything nice -#: src/rs-toolbox.c:637 -#, fuzzy +#: ../src/rs-toolbox.c:637 msgid "Basic" -msgstr "???????" +msgstr "???????? ?????????" -#: src/rs-toolbox.c:638 +#: ../src/rs-toolbox.c:638 msgid "Channel Mixer" -msgstr "" +msgstr "?????? ???????" -#: src/rs-toolbox.c:639 src/rs-actions.c:353 +#: ../src/rs-toolbox.c:639 +#: ../src/rs-actions.c:352 msgid "Curve" msgstr "??????" -#: src/rs-toolbox.c:683 +#: ../src/rs-toolbox.c:683 msgid "Flip the photo over the x-axis" msgstr "????????? ???????? ?? ?????????????? ???" -#: src/rs-toolbox.c:684 +#: ../src/rs-toolbox.c:684 msgid "Mirror the photo over the y-axis" msgstr "????????? ???????? ?? ???????????? ???" -#: src/rs-toolbox.c:685 +#: ../src/rs-toolbox.c:685 msgid "Rotate the photo 90 degrees clockwise" msgstr "????????? ?????? ?? 90? ?? ??????? ???????" -#: src/rs-toolbox.c:686 +#: ../src/rs-toolbox.c:686 msgid "Rotate the photo 90 degrees counter clockwise" msgstr "????????? ?????? ?? 90? ?????? ??????? ???????" -#: src/rs-toolbox.c:698 +#: ../src/rs-toolbox.c:698 msgid "Transforms" msgstr "??????????????" -#: src/rs-actions.c:141 +#: ../src/rs-actions.c:140 msgid "Open directory" msgstr "??????? ???????" -#: src/rs-actions.c:198 +#: ../src/rs-actions.c:197 msgid "File exported" msgstr "???? ?????????????" -#: src/rs-actions.c:203 src/rs-actions.c:222 -#, fuzzy +#: ../src/rs-actions.c:202 +#: ../src/rs-actions.c:221 msgid "Export failed" -msgstr "?????????????? ??????" +msgstr "?? ??????? ?????????????? ??????" -#: src/rs-actions.c:232 +#: ../src/rs-actions.c:231 msgid "Error exporting" msgstr "?????? ??? ????????" -#: src/rs-actions.c:233 +#: ../src/rs-actions.c:232 msgid "Error exporting photo to gimp." msgstr "?????? ??? ???????? ? GIMP" -#: src/rs-actions.c:256 src/rs-actions.c:274 +#: ../src/rs-actions.c:255 +#: ../src/rs-actions.c:273 msgid "Deleting photos" msgstr "????????? ??????" -#: src/rs-actions.c:257 +#: ../src/rs-actions.c:256 msgid "Your files will be permanently deleted!" msgstr "???? ????? ????? ??????? ????????????!" -#: src/rs-actions.c:259 +#: ../src/rs-actions.c:258 msgid "Delete photos" msgstr "??????? ??????" -#: src/rs-actions.c:333 +#: ../src/rs-actions.c:332 msgid "Copied settings" msgstr "????????? ??????? ???????????" -#. Build GUI -#: src/rs-actions.c:346 -msgid "Exposure" -msgstr "??????????" - -#: src/rs-actions.c:348 -msgid "Hue" -msgstr "???" - -#: src/rs-actions.c:349 -msgid "Contrast" -msgstr "????????" - -#: src/rs-actions.c:350 +#: ../src/rs-actions.c:349 msgid "White balance" msgstr "?????? ??????" -#: src/rs-actions.c:351 -msgid "Sharpen" -msgstr "????????" - -#: src/rs-actions.c:352 +#: ../src/rs-actions.c:351 msgid "Channel mixer" -msgstr "" +msgstr "?????? ???????" -#: src/rs-actions.c:385 +#: ../src/rs-actions.c:384 msgid "Select settings to paste" msgstr "??????????? ?????????" -#: src/rs-actions.c:443 +#: ../src/rs-actions.c:442 msgid "Pasted settings" msgstr "????????? ??????? ?????????" -#: src/rs-actions.c:446 +#: ../src/rs-actions.c:445 msgid "Nothing to paste" msgstr "??? ??????????? ?????????? ???????" -#: src/rs-actions.c:449 +#: ../src/rs-actions.c:448 msgid "Buffer empty" msgstr "????? ????" -#: src/rs-actions.c:492 +#: ../src/rs-actions.c:491 msgid "Adjusting to auto white balance" msgstr "??????????? ????????? ? ?????????????? ???????? ??????" -#: src/rs-actions.c:502 +#: ../src/rs-actions.c:501 msgid "No white balance to set from" msgstr "???????? ????? ?????? ??????" -#: src/rs-actions.c:505 +#: ../src/rs-actions.c:504 msgid "Adjusting to camera white balance" msgstr "??????????? ????????? ?? ??????? ?????? ??????" -#: src/rs-actions.c:683 +#: ../src/rs-actions.c:623 msgid "Showing exposure mask" msgstr "???????????? ????? ??????????" -#: src/rs-actions.c:685 +#: ../src/rs-actions.c:625 msgid "Hiding exposure mask" msgstr "???????? ????? ??????????" -#: src/rs-actions.c:715 +#: ../src/rs-actions.c:655 #, c-format msgid " %s added to batch queue" msgstr "%s ???????? ? ??????? ?? ???????" -#: src/rs-actions.c:717 +#: ../src/rs-actions.c:657 #, c-format msgid "%s already added to batch queue" msgstr "%s ??? ???????? ? ??????? ?? ???????" -#: src/rs-actions.c:724 src/rs-actions.c:796 +#: ../src/rs-actions.c:664 +#: ../src/rs-actions.c:736 #, c-format msgid "%d photos added to batch queue" msgstr "%d ??????? ????????? ? ??????? ?? ???????" -#: src/rs-actions.c:761 +#: ../src/rs-actions.c:701 msgid "" "Select which settings to\n" "add to batch queue" @@ -819,438 +880,403 @@ "????????, ????? ?????????\n" "???????? ? ??????? ?? ???????" -#: src/rs-actions.c:814 +#: ../src/rs-actions.c:754 msgid "Removed from batch queue" msgstr "?????? ?? ??????? ?? ???????" -#: src/rs-actions.c:816 +#: ../src/rs-actions.c:756 msgid "Not in batch queue" msgstr "?? ? ??????? ?? ???????" -#: src/rs-actions.c:850 +#: ../src/rs-actions.c:790 msgid "A raw image converter for GTK+/GNOME" msgstr "?????????? ???????? ????????? ??? GTK+/GNOME" -#: src/rs-actions.c:881 +#: ../src/rs-actions.c:821 msgid "_File" msgstr "_????" -#: src/rs-actions.c:882 +#: ../src/rs-actions.c:822 msgid "_Edit" msgstr "_??????" -#: src/rs-actions.c:883 +#: ../src/rs-actions.c:823 msgid "_Photo" msgstr "?_?????" -#: src/rs-actions.c:884 +#: ../src/rs-actions.c:824 msgid "_Set Priority" msgstr "_??????? ?????????" -#: src/rs-actions.c:885 +#: ../src/rs-actions.c:825 msgid "_White Balance" msgstr "_?????? ??????" -#: src/rs-actions.c:886 +#: ../src/rs-actions.c:826 msgid "_View" msgstr "_???" -#: src/rs-actions.c:887 +#: ../src/rs-actions.c:827 msgid "_Sort by" msgstr "_??????????? ??" -#: src/rs-actions.c:888 +#: ../src/rs-actions.c:828 msgid "_Batch" msgstr "???_????" -#: src/rs-actions.c:889 +#: ../src/rs-actions.c:829 msgid "_Help" msgstr "_???????" #. File menu -#: src/rs-actions.c:894 +#: ../src/rs-actions.c:834 msgid "_Open Directory" msgstr "_??????? ???????" -#: src/rs-actions.c:895 +#: ../src/rs-actions.c:835 msgid "_Quick Export" msgstr "??????? ???????" -#: src/rs-actions.c:896 +#: ../src/rs-actions.c:836 msgid "_Export As" msgstr "?????????????? _???" -#: src/rs-actions.c:897 +#: ../src/rs-actions.c:837 msgid "_Export to Gimp" msgstr "_?????????????? ? GIMP" -#: src/rs-actions.c:898 +#: ../src/rs-actions.c:838 msgid "_Reload directory" msgstr "_????????????? ???????" -#: src/rs-actions.c:899 +#: ../src/rs-actions.c:839 msgid "_Delete flagged photos" msgstr "_??????? ?????????? ??????" -#: src/rs-actions.c:900 +#: ../src/rs-actions.c:840 msgid "_Quit" msgstr "?_????" #. Edit menu -#: src/rs-actions.c:903 +#: ../src/rs-actions.c:843 msgid "_Revert settings" msgstr "_???????? ?????????" -#: src/rs-actions.c:904 +#: ../src/rs-actions.c:844 msgid "_Copy settings" msgstr "_??????????? ?????????" -#: src/rs-actions.c:905 +#: ../src/rs-actions.c:845 msgid "_Paste settings" msgstr "_???????? ?????????" -#: src/rs-actions.c:906 +#: ../src/rs-actions.c:846 msgid "_Reset settings" msgstr "_?????? ?????????" -#: src/rs-actions.c:907 +#: ../src/rs-actions.c:847 msgid "_Preferences" msgstr "_?????????" #. Photo menu -#: src/rs-actions.c:910 +#: ../src/rs-actions.c:850 msgid "_Flag photo for deletion" msgstr "??_?????? ??? ????????" -#: src/rs-actions.c:911 +#: ../src/rs-actions.c:851 msgid "_1" msgstr "_1" -#: src/rs-actions.c:912 +#: ../src/rs-actions.c:852 msgid "_2" msgstr "_2" -#: src/rs-actions.c:913 +#: ../src/rs-actions.c:853 msgid "_3" msgstr "_3" -#: src/rs-actions.c:914 +#: ../src/rs-actions.c:854 msgid "_Remove priority" msgstr "_????? ?????????" -#: src/rs-actions.c:915 +#: ../src/rs-actions.c:855 msgid "_Auto" msgstr "_????" -#: src/rs-actions.c:916 +#: ../src/rs-actions.c:856 msgid "_Camera" msgstr "_??????" -#: src/rs-actions.c:917 +#: ../src/rs-actions.c:857 msgid "_Crop" msgstr "_???????????" -#: src/rs-actions.c:918 +#: ../src/rs-actions.c:858 msgid "_Uncrop" msgstr "_????? ????????????" -#: src/rs-actions.c:919 +#: ../src/rs-actions.c:859 msgid "_Straighten" msgstr "_?????????" -#: src/rs-actions.c:920 +#: ../src/rs-actions.c:860 msgid "_Unstraighten" msgstr "??_??? ????????????" -#: src/rs-actions.c:921 +#: ../src/rs-actions.c:861 msgid "_Group" msgstr "?_????????????" -#: src/rs-actions.c:922 +#: ../src/rs-actions.c:862 msgid "_Ungroup" msgstr "_???????????????" -#: src/rs-actions.c:923 +#: ../src/rs-actions.c:863 msgid "_Auto group" msgstr "????????????? _?????????????" -#: src/rs-actions.c:924 -#, fuzzy -msgid "_Tag Photo..." -msgstr "?_?????" - -#: src/rs-actions.c:925 +#: ../src/rs-actions.c:864 msgid "Rotate Clockwise" -msgstr "" +msgstr "????????? ?? ??????? ???????" -#: src/rs-actions.c:926 -#, fuzzy +#: ../src/rs-actions.c:865 msgid "Rotate Counter Clockwise" -msgstr "????????? ?????? ?? 90? ?? ??????? ???????" +msgstr "????????? ?????? ??????? ???????" -#: src/rs-actions.c:927 +#: ../src/rs-actions.c:866 msgid "Flip" -msgstr "" +msgstr "????????" -#: src/rs-actions.c:928 +#: ../src/rs-actions.c:867 msgid "Mirror" msgstr "???????" #. View menu -#: src/rs-actions.c:931 +#: ../src/rs-actions.c:870 msgid "_Previous photo" msgstr "_?????????? ??????" -#: src/rs-actions.c:932 +#: ../src/rs-actions.c:871 msgid "_Next Photo" msgstr "_????????? ??????" #. Batch menu -#: src/rs-actions.c:935 +#: ../src/rs-actions.c:874 msgid "_Add to batch queue" msgstr "_???????? ? ???????" -#: src/rs-actions.c:936 +#: ../src/rs-actions.c:875 msgid "_Add current view to queue" msgstr "???????? _??? ????? ? ???????" -#: src/rs-actions.c:937 +#: ../src/rs-actions.c:876 msgid "_Remove from batch queue" msgstr "_??????? ?? ???????" -#: src/rs-actions.c:938 +#: ../src/rs-actions.c:877 msgid "_Start" msgstr "_?????? ???????" #. help menu -#: src/rs-actions.c:941 +#: ../src/rs-actions.c:880 msgid "_About" msgstr "_? ?????????" -#: src/rs-actions.c:949 +#: ../src/rs-actions.c:888 msgid "_Zoom to fit" msgstr "_???????? ? ????" -#: src/rs-actions.c:950 +#: ../src/rs-actions.c:889 msgid "_Iconbox" msgstr "?????? _???????" -#: src/rs-actions.c:951 +#: ../src/rs-actions.c:890 msgid "_Toolbox" msgstr "?????? _????????????" -#: src/rs-actions.c:952 +#: ../src/rs-actions.c:891 msgid "_Fullscreen" msgstr "?_???????????? ?????" -#: src/rs-actions.c:953 +#: ../src/rs-actions.c:892 msgid "_Exposure mask" msgstr "?_???? ??????????" -#: src/rs-actions.c:954 +#: ../src/rs-actions.c:893 msgid "_Split" msgstr "_?????????" -#: src/rs-actions.c:956 +#: ../src/rs-actions.c:895 msgid "_Lights out" -msgstr "" +msgstr "_????????? ????" -#: src/rs-actions.c:962 +#: ../src/rs-actions.c:901 msgid "Name" msgstr "?????" -#: src/rs-actions.c:963 +#: ../src/rs-actions.c:902 msgid "Timestamp" msgstr "???????" -#: src/rs-actions.c:964 +#: ../src/rs-actions.c:903 msgid "ISO" msgstr "ISO" -#: src/rs-actions.c:965 +#: ../src/rs-actions.c:904 msgid "Aperture" msgstr "????????" -#: src/rs-actions.c:966 +#: ../src/rs-actions.c:905 msgid "Focallength" msgstr "????????? ??????????" -#: src/rs-actions.c:967 +#: ../src/rs-actions.c:906 msgid "Shutterspeed" msgstr "????????" -#~ msgid "Background renderer active" -#~ msgstr "??????? ?????????? ???????" +#: ../plugins/denoise/denoise.c:86 +msgid "Sharpen Amount" +msgstr "???????? ????????" -#~ msgid "Preload photos" -#~ msgstr "????????? ??????" +#: ../plugins/denoise/denoise.c:87 +msgid "How much image will be sharpened" +msgstr "????????? ????? ???????? ????????" -#~ msgid "Filename:" -#~ msgstr "??? ?????:" +#: ../plugins/output-flickr/output-flickr.c:105 +#: ../plugins/output-jpegfile/output-jpegfile.c:87 +msgid "JPEG Quality" +msgstr "???????? JPEG:" -#~ msgid "Save uncompressed TIFF" -#~ msgstr "????????? ???????? TIFF" +#: ../plugins/output-flickr/output-flickr.c:156 +msgid "Upload photo to Flickr" +msgstr "????????? ?????? ?? Flickr" -#~ msgid "JPEG Quality:" -#~ msgstr "???????? JPEG" +#: ../plugins/output-jpegfile/output-jpegfile.c:93 +msgid "JPEG (Joint Photographic Experts Group)" +msgstr "JPEG (Joint Photographic Experts Group)" -#~ msgid "File export canceled" -#~ msgstr "??????? ??????? ???????" +#: ../plugins/output-pngfile/output-pngfile.c:79 +msgid "PNG (Portable Network Graphics)" +msgstr "PNG (Portable Network Graphics)" -#~ msgid "JPEG (Joint Photographic Experts Group)" -#~ msgstr "JPEG (Joint Photographic Experts Group)" +#: ../plugins/output-tifffile/output-tifffile.c:81 +msgid "Save uncompressed TIFF" +msgstr "????????? ???????? TIFF" -#~ msgid "PNG (Portable Network Graphics)" -#~ msgstr "PNG (Portable Network Graphics)" +#: ../plugins/output-tifffile/output-tifffile.c:87 +msgid "Save 16 bit TIFF" +msgstr "????????? TIFF ? 16 ????????? ?? ???????? ?????" -#~ msgid "8-bit TIFF (Tagged Image File Format)" -#~ msgstr "8-????????? TIFF (Tagged Image File Format)" +#: ../plugins/output-tifffile/output-tifffile.c:93 +msgid "TIFF (Tagged Image File Format)" +msgstr "TIFF (Tagged Image File Format)" +#~ msgid "Preload photos" +#~ msgstr "????????? ??????" +#~ msgid "Filename:" +#~ msgstr "??? ?????:" +#~ msgid "File export canceled" +#~ msgstr "??????? ??????? ???????" #~ msgid "16-bit TIFF (Tagged Image File Format)" #~ msgstr "16-????????? TIFF (Tagged Image File Format)" - #~ msgid "Rotate the photo 180 degrees" #~ msgstr "????????? ?????? ?? 180?" - #~ msgid "Reset this setting" #~ msgstr "???????? ???? ????????" - -#~ msgid "Warmth/tint" -#~ msgstr "??????????? ? ???????" - #~ msgid "_Zoom to 100%" #~ msgstr "_??????? 1:1" - #~ msgid "Canon CR2" #~ msgstr "Canon CR2" - #~ msgid "Canon CIFF" #~ msgstr "Canon CIFF" - #~ msgid "Nikon NEF" #~ msgstr "Nikon NEF" - #~ msgid "Minolta raw" #~ msgstr "Minolta RAW" - #~ msgid "Canon TIFF" #~ msgstr "Canon TIFF" - #~ msgid "Sony" #~ msgstr "Sony" - #~ msgid "Kodak" #~ msgstr "Kodak" - #~ msgid "Sigma" #~ msgstr "Sigma" - #~ msgid "Olympus" #~ msgstr "Olympus" - #~ msgid "Panasonic raw" #~ msgstr "Panasonic RAW" - #~ msgid "Pentax raw" #~ msgstr "Pentax RAW" - #~ msgid "Adobe Digital negative" #~ msgstr "Adobe Digital Negative" - #~ msgid "Mamiya" #~ msgstr "Mamiya" - #~ msgid "Hasselblad" #~ msgstr "Hasselblad" - #~ msgid "Epson" #~ msgstr "Epson" - +#~ msgid "Opening directory..." +#~ msgstr "??????????? ???????" #~ msgid "%dmm " #~ msgstr "%d?? " - #~ msgid "%.1fs " #~ msgstr "%.1fs " - #~ msgid "1/%.0fs " #~ msgstr "1/%.0fs " - #~ msgid "F/%.1f " #~ msgstr "F/%.1f " - #~ msgid "No metadata" #~ msgstr "??? ??????????" - #~ msgid "Split" #~ msgstr "?????????" - #~ msgid "Exp. mask" #~ msgstr "????? ??????????" - #~ msgid "Toggle exposure mask" #~ msgstr "??????????? ????? ??????????" - #~ msgid "Set zoom" #~ msgstr "??????? ??????? ??????????? ??????" - #~ msgid "Zoom out" #~ msgstr "????????" - #~ msgid "Zoom in" #~ msgstr "??????????" - #~ msgid "Zoom to fit" #~ msgstr "???????? ? ????" - #~ msgid "Zoom to 100%" #~ msgstr "???????? 100%" - #~ msgid "Zoom:" #~ msgstr "???????:" - #~ msgid "Apply" #~ msgstr "?????????" - #~ msgid "Straighten" #~ msgstr "?????????" - #~ msgid "Unstraighten" #~ msgstr "????? ????????????" - #~ msgid "Exposure Mask" #~ msgstr "????? ??????????" #, fuzzy #~ msgid "Added view to batch queue" #~ msgstr "???????? ? ??????? ?? ?????????" - #~ msgid "/File/_Open directory..." #~ msgstr "/????/_??????? ???????..." #, fuzzy #~ msgid "/File/_Quick export" #~ msgstr "/????/_??????????????" - #~ msgid "/File/_Export as..." #~ msgstr "/????/?????????????? _???..." - #~ msgid "/File/_Reload" #~ msgstr "/????/_?????????????" - #~ msgid "/_Batch/_Add to batch queue" #~ msgstr "/???????? ?????????/_???????? ? ???????" - #~ msgid "/_Batch/_Remove from batch queue" #~ msgstr "/???????? ?????????/_??????? ?? ???????" - #~ msgid "CW" #~ msgstr "CW" - #~ msgid "180" #~ msgstr "180?" - #~ msgid "CCW" #~ msgstr "CCW" - #~ msgid "Scale" #~ msgstr "???????" + From anders at kvistmail.dk Mon Sep 28 18:47:42 2009 From: anders at kvistmail.dk (Anders Kvist) Date: Mon, 28 Sep 2009 18:47:42 +0200 Subject: [Rawstudio-commit] r2677 - trunk/po Message-ID: Author: akv Date: 2009-09-28 18:47:42 +0200 (Mon, 28 Sep 2009) New Revision: 2677 Modified: trunk/po/ca.po trunk/po/cs.po trunk/po/da.po trunk/po/de.po trunk/po/en.po trunk/po/es.po trunk/po/fi.po trunk/po/fr.po trunk/po/it.po trunk/po/nb.po trunk/po/nl.po trunk/po/pl.po trunk/po/pt_BR.po trunk/po/ru.po trunk/po/sv.po Log: Updated all .po-files from latest rawstudio.pot Modified: trunk/po/ca.po =================================================================== --- trunk/po/ca.po 2009-09-28 16:45:47 UTC (rev 2676) +++ trunk/po/ca.po 2009-09-28 16:47:42 UTC (rev 2677) @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: Rawstudio 1.1.1\n" "Report-Msgid-Bugs-To: rawstudio-dev at rawstudio.org\n" -"POT-Creation-Date: 2009-09-28 00:09+0200\n" +"POT-Creation-Date: 2009-09-28 18:46+0200\n" "PO-Revision-Date: 2008-08-19 09:35+0100\n" "Last-Translator: Anders Kvist \n" "Language-Team: Rawstudio development \n" @@ -18,6 +18,68 @@ "X-Poedit-Country: ANDORRA\n" "X-Poedit-SourceCharset: utf-8\n" +#. Build GUI +#: librawstudio/rs-settings.c:70 src/rs-actions.c:346 +msgid "Exposure" +msgstr "Exposici?" + +#: librawstudio/rs-settings.c:75 src/gtk-helper.c:739 src/rs-actions.c:347 +msgid "Saturation" +msgstr "Saturaci?" + +#: librawstudio/rs-settings.c:80 src/rs-actions.c:348 +msgid "Hue" +msgstr "Mat?s" + +#: librawstudio/rs-settings.c:85 src/rs-actions.c:349 +msgid "Contrast" +msgstr "Contrast" + +#: librawstudio/rs-settings.c:90 +#, fuzzy +msgid "Warmth" +msgstr "Mat?s/color" + +#: librawstudio/rs-settings.c:95 +msgid "Tint" +msgstr "" + +#: librawstudio/rs-settings.c:100 src/rs-actions.c:351 +msgid "Sharpen" +msgstr "Augmenta la nitidesa" + +#. FIXME: ? +#: librawstudio/rs-settings.c:105 plugins/denoise/denoise.c:94 +msgid "Denoise" +msgstr "" + +#. FIXME: ? +#: librawstudio/rs-settings.c:110 +#, fuzzy +msgid "Color Denoise" +msgstr "Colors" + +#: librawstudio/rs-settings.c:110 plugins/denoise/denoise.c:102 +#, fuzzy +msgid "Color denoise" +msgstr "Colors" + +#. FIXME: ? +#: librawstudio/rs-settings.c:115 +#, fuzzy +msgid "Red" +msgstr "Preparat" + +#. FIXME: ? +#: librawstudio/rs-settings.c:120 +msgid "Green" +msgstr "" + +#. FIXME: ? +#: librawstudio/rs-settings.c:125 +msgid "Blue" +msgstr "" + #: src/filename.c:280 #, c-format msgid "%f - Original filename" @@ -102,10 +164,6 @@ msgid "Relative colormetric" msgstr "Colorimetria relativa" -#: src/gtk-helper.c:739 src/rs-actions.c:347 -msgid "Saturation" -msgstr "Saturaci?" - #: src/gtk-helper.c:740 msgid "Absolute colormetric" msgstr "Colorimetria absoluta" @@ -413,7 +471,7 @@ msgstr "Exporta la mida" #. All -#: src/rs-store.c:275 src/rs-store.c:834 +#: src/rs-store.c:275 src/rs-store.c:836 #, c-format msgid "* (%d)" msgstr "* (%d)" @@ -423,7 +481,7 @@ msgstr "Totes les fotos (excepte les suprimides)" #. 1 -#: src/rs-store.c:279 src/rs-store.c:835 +#: src/rs-store.c:279 src/rs-store.c:837 #, c-format msgid "1 (%d)" msgstr "1 (%d)" @@ -433,7 +491,7 @@ msgstr "Fotografies amb prioritat 1" #. 2 -#: src/rs-store.c:283 src/rs-store.c:836 +#: src/rs-store.c:283 src/rs-store.c:838 #, c-format msgid "2 (%d)" msgstr "2 (%d)" @@ -443,7 +501,7 @@ msgstr "Fotografies amb prioritat 2" #. 3 -#: src/rs-store.c:287 src/rs-store.c:837 +#: src/rs-store.c:287 src/rs-store.c:839 #, c-format msgid "3 (%d)" msgstr "3 (%d)" @@ -453,7 +511,7 @@ msgstr "Fotos amb prioritat 3" #. Unsorted -#: src/rs-store.c:291 src/rs-store.c:838 +#: src/rs-store.c:291 src/rs-store.c:840 #, c-format msgid "U (%d)" msgstr "U (%d)" @@ -463,7 +521,7 @@ msgstr "Fotografies sense prioritat" #. Deleted -#: src/rs-store.c:295 src/rs-store.c:839 +#: src/rs-store.c:295 src/rs-store.c:841 #, c-format msgid "D (%d)" msgstr "D (%d)" @@ -481,39 +539,39 @@ msgid "Priorities" msgstr "Prioritats" -#: src/rs-store.c:527 +#: src/rs-store.c:529 #, c-format msgid "" "%s\n" "\n" msgstr "" -#: src/rs-store.c:530 +#: src/rs-store.c:532 #, c-format msgid "Focal length: %dmm\n" msgstr "" -#: src/rs-store.c:533 +#: src/rs-store.c:535 #, c-format msgid "Shutter speed: %.1fs\n" msgstr "" -#: src/rs-store.c:535 +#: src/rs-store.c:537 #, c-format msgid "Shutter speed: 1/%.0fs\n" msgstr "" -#: src/rs-store.c:538 +#: src/rs-store.c:540 #, c-format msgid "Aperture: F/%.01f\n" msgstr "" -#: src/rs-store.c:541 +#: src/rs-store.c:543 #, c-format msgid "ISO: %u\n" msgstr "" -#: src/rs-store.c:544 +#: src/rs-store.c:546 #, c-format msgid "Time: %s" msgstr "" @@ -730,27 +788,10 @@ msgid "Copied settings" msgstr "Par?metres copiats" -#. Build GUI -#: src/rs-actions.c:346 -msgid "Exposure" -msgstr "Exposici?" - -#: src/rs-actions.c:348 -msgid "Hue" -msgstr "Mat?s" - -#: src/rs-actions.c:349 -msgid "Contrast" -msgstr "Contrast" - #: src/rs-actions.c:350 msgid "White balance" msgstr "Equilibri de blanc" -#: src/rs-actions.c:351 -msgid "Sharpen" -msgstr "Augmenta la nitidesa" - #: src/rs-actions.c:352 msgid "Channel mixer" msgstr "" @@ -1075,6 +1116,119 @@ msgid "Shutterspeed" msgstr "" +#: plugins/denoise/denoise.c:86 +#, fuzzy +msgid "Sharpen Amount" +msgstr "Augmenta la nitidesa" + +#: plugins/denoise/denoise.c:87 +msgid "How much image will be sharpened" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:105 +#: plugins/output-jpegfile/output-jpegfile.c:87 +#, fuzzy +msgid "JPEG Quality" +msgstr "Qualitat JPEG:" + +#: plugins/output-flickr/output-flickr.c:112 +#, fuzzy +msgid "Title" +msgstr "_Fitxer" + +#: plugins/output-flickr/output-flickr.c:127 +msgid "Description" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:133 +msgid "Tags" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:140 +msgid "Public (everyone can see this)" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:146 +msgid "Visible to Friends" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:152 +msgid "Visible to Family" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:156 +msgid "Upload photo to Flickr" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:305 +msgid "We recieved an error during authentication. Please try again." +msgstr "" + +#: plugins/output-flickr/output-flickr.c:308 +msgid "" +"Rawstudio were not able to upload the photo cause the authentication has " +"been revoked. Please re-authenticate Rawstudio to upload to Flickr." +msgstr "" + +#: plugins/output-flickr/output-flickr.c:311 +msgid "" +"It seems like rawstudio lost its authentication to upload to your account, " +"please re-authenticate." +msgstr "" + +#: plugins/output-flickr/output-flickr.c:315 +#, c-format +msgid "" +"%s\n" +"\n" +"Note: This error isn't catched by Rawstudio. Please let us know that you " +"found it and how to reproduce it so we can make a more useful errormessage. " +"Thanks!" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:317 +msgid "Flickr error" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:376 +msgid "" +"Rawstudio needs to be authenticated before it will be able to upload photos " +"to your Flickr account." +msgstr "" + +#: plugins/output-flickr/output-flickr.c:383 +msgid "Step 1:" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:384 +msgid "Step 2:" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:386 +msgid "Authenticate Rawstudio" +msgstr "" + +#: plugins/output-jpegfile/output-jpegfile.c:93 +msgid "JPEG (Joint Photographic Experts Group)" +msgstr "JPEG (Joint Photographic Experts Group)" + +#: plugins/output-pngfile/output-pngfile.c:79 +msgid "PNG (Portable Network Graphics)" +msgstr "PNG (Portable Network Graphics)" + +#: plugins/output-tifffile/output-tifffile.c:81 +msgid "Save uncompressed TIFF" +msgstr "Desa com a TIFF sense comprimir" + +#: plugins/output-tifffile/output-tifffile.c:87 +msgid "Save 16 bit TIFF" +msgstr "" + +#: plugins/output-tifffile/output-tifffile.c:93 +#, fuzzy +msgid "TIFF (Tagged Image File Format)" +msgstr "TIFF (Tagged Image File Format) de 8 bits" + #~ msgid "Background renderer active" #~ msgstr "La visualitzaci? del fons est? habilitada" @@ -1084,24 +1238,9 @@ #~ msgid "Filename:" #~ msgstr "Nom del fitxer:" -#~ msgid "Save uncompressed TIFF" -#~ msgstr "Desa com a TIFF sense comprimir" - -#~ msgid "JPEG Quality:" -#~ msgstr "Qualitat JPEG:" - #~ msgid "File export canceled" #~ msgstr "S'ha cancel?lat la exportaci? del fitxer" -#~ msgid "JPEG (Joint Photographic Experts Group)" -#~ msgstr "JPEG (Joint Photographic Experts Group)" - -#~ msgid "PNG (Portable Network Graphics)" -#~ msgstr "PNG (Portable Network Graphics)" - -#~ msgid "8-bit TIFF (Tagged Image File Format)" -#~ msgstr "TIFF (Tagged Image File Format) de 8 bits" - #~ msgid "16-bit TIFF (Tagged Image File Format)" #~ msgstr "TIFF (Tagged Image File Format) de 16 bits" @@ -1111,9 +1250,6 @@ #~ msgid "Reset this setting" #~ msgstr "Reinicia aquest par?metre" -#~ msgid "Warmth/tint" -#~ msgstr "Mat?s/color" - #~ msgid "_Zoom to 100%" #~ msgstr "Amplia al _100%" Modified: trunk/po/cs.po =================================================================== --- trunk/po/cs.po 2009-09-28 16:45:47 UTC (rev 2676) +++ trunk/po/cs.po 2009-09-28 16:47:42 UTC (rev 2677) @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: Rawstudio 1.1.1\n" "Report-Msgid-Bugs-To: rawstudio-dev at rawstudio.org\n" -"POT-Creation-Date: 2009-09-28 00:09+0200\n" +"POT-Creation-Date: 2009-09-28 18:46+0200\n" "PO-Revision-Date: 2008-04-17 22:04+0100\n" "Last-Translator: Anders Kvist \n" "Language-Team: Rawstudio development \n" @@ -20,6 +20,68 @@ "X-Poedit-Language: Czech\n" "X-Poedit-Country: CZECH REPUBLIC\n" +#. Build GUI +#: librawstudio/rs-settings.c:70 src/rs-actions.c:346 +msgid "Exposure" +msgstr "Expozice" + +#: librawstudio/rs-settings.c:75 src/gtk-helper.c:739 src/rs-actions.c:347 +msgid "Saturation" +msgstr "Sytost" + +#: librawstudio/rs-settings.c:80 src/rs-actions.c:348 +msgid "Hue" +msgstr "Odst?n" + +#: librawstudio/rs-settings.c:85 src/rs-actions.c:349 +msgid "Contrast" +msgstr "Kontrast" + +#: librawstudio/rs-settings.c:90 +#, fuzzy +msgid "Warmth" +msgstr "Teplota/t?nov?n?" + +#: librawstudio/rs-settings.c:95 +msgid "Tint" +msgstr "" + +#: librawstudio/rs-settings.c:100 src/rs-actions.c:351 +msgid "Sharpen" +msgstr "Doost?en?" + +#. FIXME: ? +#: librawstudio/rs-settings.c:105 plugins/denoise/denoise.c:94 +msgid "Denoise" +msgstr "" + +#. FIXME: ? +#: librawstudio/rs-settings.c:110 +#, fuzzy +msgid "Color Denoise" +msgstr "Barvy" + +#: librawstudio/rs-settings.c:110 plugins/denoise/denoise.c:102 +#, fuzzy +msgid "Color denoise" +msgstr "Barvy" + +#. FIXME: ? +#: librawstudio/rs-settings.c:115 +#, fuzzy +msgid "Red" +msgstr "P?ipraveno" + +#. FIXME: ? +#: librawstudio/rs-settings.c:120 +msgid "Green" +msgstr "" + +#. FIXME: ? +#: librawstudio/rs-settings.c:125 +msgid "Blue" +msgstr "" + #: src/filename.c:280 #, c-format msgid "%f - Original filename" @@ -103,10 +165,6 @@ msgid "Relative colormetric" msgstr "Relativn? kolorimetrick?" -#: src/gtk-helper.c:739 src/rs-actions.c:347 -msgid "Saturation" -msgstr "Sytost" - #: src/gtk-helper.c:740 msgid "Absolute colormetric" msgstr "Absolutn? kolorimetrick?" @@ -415,7 +473,7 @@ msgstr "Adres?? pro export:" #. All -#: src/rs-store.c:275 src/rs-store.c:834 +#: src/rs-store.c:275 src/rs-store.c:836 #, c-format msgid "* (%d)" msgstr "* (%d)" @@ -425,7 +483,7 @@ msgstr "V?echny fotografie (krom? smazan?ch)" #. 1 -#: src/rs-store.c:279 src/rs-store.c:835 +#: src/rs-store.c:279 src/rs-store.c:837 #, c-format msgid "1 (%d)" msgstr "1 (%d)" @@ -435,7 +493,7 @@ msgstr "Fotografie s prioritou 1" #. 2 -#: src/rs-store.c:283 src/rs-store.c:836 +#: src/rs-store.c:283 src/rs-store.c:838 #, c-format msgid "2 (%d)" msgstr "2 (%d)" @@ -445,7 +503,7 @@ msgstr "Fotografie s prioritou 2" #. 3 -#: src/rs-store.c:287 src/rs-store.c:837 +#: src/rs-store.c:287 src/rs-store.c:839 #, c-format msgid "3 (%d)" msgstr "3 (%d)" @@ -455,7 +513,7 @@ msgstr "Fotografie s prioritou 3" #. Unsorted -#: src/rs-store.c:291 src/rs-store.c:838 +#: src/rs-store.c:291 src/rs-store.c:840 #, c-format msgid "U (%d)" msgstr "U (%d)" @@ -465,7 +523,7 @@ msgstr "Fotografie bez priority" #. Deleted -#: src/rs-store.c:295 src/rs-store.c:839 +#: src/rs-store.c:295 src/rs-store.c:841 #, c-format msgid "D (%d)" msgstr "D (%d)" @@ -484,39 +542,39 @@ msgid "Priorities" msgstr "Pr?b?h" -#: src/rs-store.c:527 +#: src/rs-store.c:529 #, c-format msgid "" "%s\n" "\n" msgstr "" -#: src/rs-store.c:530 +#: src/rs-store.c:532 #, c-format msgid "Focal length: %dmm\n" msgstr "" -#: src/rs-store.c:533 +#: src/rs-store.c:535 #, c-format msgid "Shutter speed: %.1fs\n" msgstr "" -#: src/rs-store.c:535 +#: src/rs-store.c:537 #, c-format msgid "Shutter speed: 1/%.0fs\n" msgstr "" -#: src/rs-store.c:538 +#: src/rs-store.c:540 #, c-format msgid "Aperture: F/%.01f\n" msgstr "" -#: src/rs-store.c:541 +#: src/rs-store.c:543 #, c-format msgid "ISO: %u\n" msgstr "" -#: src/rs-store.c:544 +#: src/rs-store.c:546 #, c-format msgid "Time: %s" msgstr "" @@ -734,27 +792,10 @@ msgid "Copied settings" msgstr "Zkop?rovan? nastaven?" -#. Build GUI -#: src/rs-actions.c:346 -msgid "Exposure" -msgstr "Expozice" - -#: src/rs-actions.c:348 -msgid "Hue" -msgstr "Odst?n" - -#: src/rs-actions.c:349 -msgid "Contrast" -msgstr "Kontrast" - #: src/rs-actions.c:350 msgid "White balance" msgstr "Vyv??en? b?l?" -#: src/rs-actions.c:351 -msgid "Sharpen" -msgstr "Doost?en?" - #: src/rs-actions.c:352 msgid "Channel mixer" msgstr "" @@ -1102,6 +1143,119 @@ msgid "Shutterspeed" msgstr "Expozice" +#: plugins/denoise/denoise.c:86 +#, fuzzy +msgid "Sharpen Amount" +msgstr "Doost?en?" + +#: plugins/denoise/denoise.c:87 +msgid "How much image will be sharpened" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:105 +#: plugins/output-jpegfile/output-jpegfile.c:87 +#, fuzzy +msgid "JPEG Quality" +msgstr "Kvalita JPEG:" + +#: plugins/output-flickr/output-flickr.c:112 +#, fuzzy +msgid "Title" +msgstr "_Soubor" + +#: plugins/output-flickr/output-flickr.c:127 +msgid "Description" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:133 +msgid "Tags" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:140 +msgid "Public (everyone can see this)" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:146 +msgid "Visible to Friends" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:152 +msgid "Visible to Family" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:156 +msgid "Upload photo to Flickr" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:305 +msgid "We recieved an error during authentication. Please try again." +msgstr "" + +#: plugins/output-flickr/output-flickr.c:308 +msgid "" +"Rawstudio were not able to upload the photo cause the authentication has " +"been revoked. Please re-authenticate Rawstudio to upload to Flickr." +msgstr "" + +#: plugins/output-flickr/output-flickr.c:311 +msgid "" +"It seems like rawstudio lost its authentication to upload to your account, " +"please re-authenticate." +msgstr "" + +#: plugins/output-flickr/output-flickr.c:315 +#, c-format +msgid "" +"%s\n" +"\n" +"Note: This error isn't catched by Rawstudio. Please let us know that you " +"found it and how to reproduce it so we can make a more useful errormessage. " +"Thanks!" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:317 +msgid "Flickr error" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:376 +msgid "" +"Rawstudio needs to be authenticated before it will be able to upload photos " +"to your Flickr account." +msgstr "" + +#: plugins/output-flickr/output-flickr.c:383 +msgid "Step 1:" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:384 +msgid "Step 2:" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:386 +msgid "Authenticate Rawstudio" +msgstr "" + +#: plugins/output-jpegfile/output-jpegfile.c:93 +msgid "JPEG (Joint Photographic Experts Group)" +msgstr "JPEG (Joint Photographic Experts Group)" + +#: plugins/output-pngfile/output-pngfile.c:79 +msgid "PNG (Portable Network Graphics)" +msgstr "PNG (Portable Network Graphics)" + +#: plugins/output-tifffile/output-tifffile.c:81 +msgid "Save uncompressed TIFF" +msgstr "Ulo?it nekomprimovan? TIFF" + +#: plugins/output-tifffile/output-tifffile.c:87 +msgid "Save 16 bit TIFF" +msgstr "" + +#: plugins/output-tifffile/output-tifffile.c:93 +#, fuzzy +msgid "TIFF (Tagged Image File Format)" +msgstr "8-bit TIFF (Tagged Image File Format)" + #~ msgid "Background renderer active" #~ msgstr "Vykreslov?n? pozad? aktivn?" @@ -1113,24 +1267,9 @@ #~ msgid "Filename:" #~ msgstr "Jm?no souboru" -#~ msgid "Save uncompressed TIFF" -#~ msgstr "Ulo?it nekomprimovan? TIFF" - -#~ msgid "JPEG Quality:" -#~ msgstr "Kvalita JPEG:" - #~ msgid "File export canceled" #~ msgstr "Export souboru zru?en" -#~ msgid "JPEG (Joint Photographic Experts Group)" -#~ msgstr "JPEG (Joint Photographic Experts Group)" - -#~ msgid "PNG (Portable Network Graphics)" -#~ msgstr "PNG (Portable Network Graphics)" - -#~ msgid "8-bit TIFF (Tagged Image File Format)" -#~ msgstr "8-bit TIFF (Tagged Image File Format)" - #~ msgid "16-bit TIFF (Tagged Image File Format)" #~ msgstr "16-bit TIFF (Tagged Image File Format)" @@ -1140,9 +1279,6 @@ #~ msgid "Reset this setting" #~ msgstr "Resetovat toto nastaven?" -#~ msgid "Warmth/tint" -#~ msgstr "Teplota/t?nov?n?" - #~ msgid "_Zoom to 100%" #~ msgstr "_P?ibl??it 100%" Modified: trunk/po/da.po =================================================================== --- trunk/po/da.po 2009-09-28 16:45:47 UTC (rev 2676) +++ trunk/po/da.po 2009-09-28 16:47:42 UTC (rev 2677) @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: Rawstudio 1.1.1\n" "Report-Msgid-Bugs-To: rawstudio-dev at rawstudio.org\n" -"POT-Creation-Date: 2009-09-28 00:09+0200\n" +"POT-Creation-Date: 2009-09-28 18:46+0200\n" "PO-Revision-Date: 2009-09-28 00:22+0100\n" "Last-Translator: Anders Kvist \n" "Language-Team: Rawstudio development \n" @@ -17,6 +17,68 @@ "X-Poedit-Language: Danish\n" "X-Poedit-Country: DENMARK\n" +#. Build GUI +#: librawstudio/rs-settings.c:70 src/rs-actions.c:346 +msgid "Exposure" +msgstr "Eksponering" + +#: librawstudio/rs-settings.c:75 src/gtk-helper.c:739 src/rs-actions.c:347 +msgid "Saturation" +msgstr "Farvem?tning" + +#: librawstudio/rs-settings.c:80 src/rs-actions.c:348 +msgid "Hue" +msgstr "Farvetone" + +#: librawstudio/rs-settings.c:85 src/rs-actions.c:349 +msgid "Contrast" +msgstr "Kontrast" + +#: librawstudio/rs-settings.c:90 +#, fuzzy +msgid "Warmth" +msgstr "Varme/Nuance" + +#: librawstudio/rs-settings.c:95 +msgid "Tint" +msgstr "" + +#: librawstudio/rs-settings.c:100 src/rs-actions.c:351 +msgid "Sharpen" +msgstr "Skarphed" + +#. FIXME: ? +#: librawstudio/rs-settings.c:105 plugins/denoise/denoise.c:94 +msgid "Denoise" +msgstr "" + +#. FIXME: ? +#: librawstudio/rs-settings.c:110 +#, fuzzy +msgid "Color Denoise" +msgstr "Farver" + +#: librawstudio/rs-settings.c:110 plugins/denoise/denoise.c:102 +#, fuzzy +msgid "Color denoise" +msgstr "Farver" + +#. FIXME: ? +#: librawstudio/rs-settings.c:115 +#, fuzzy +msgid "Red" +msgstr "Klar" + +#. FIXME: ? +#: librawstudio/rs-settings.c:120 +msgid "Green" +msgstr "" + +#. FIXME: ? +#: librawstudio/rs-settings.c:125 +msgid "Blue" +msgstr "" + #: src/filename.c:280 #, c-format msgid "%f - Original filename" @@ -58,8 +120,12 @@ msgstr "Ikke en valid farveprofil" #: src/gtk-helper.c:466 -msgid "The file you selected does not appear to be a valid color profile for this version of Rawstudio." -msgstr "Den valgte fil er ikke en godkendt farveprofil til denne version af Rawstudio." +msgid "" +"The file you selected does not appear to be a valid color profile for this " +"version of Rawstudio." +msgstr "" +"Den valgte fil er ikke en godkendt farveprofil til denne version af " +"Rawstudio." #: src/gtk-helper.c:568 msgid "Enable color management (experimental)" @@ -77,8 +143,7 @@ msgid "Display profile" msgstr "Sk?rm profil" -#: src/gtk-helper.c:632 -#: src/gtk-helper.c:685 +#: src/gtk-helper.c:632 src/gtk-helper.c:685 msgid "sRGB" msgstr "sRGB" @@ -98,11 +163,6 @@ msgid "Relative colormetric" msgstr "Relativt farvemetrisk" -#: src/gtk-helper.c:739 -#: src/rs-actions.c:347 -msgid "Saturation" -msgstr "Farvem?tning" - #: src/gtk-helper.c:740 msgid "Absolute colormetric" msgstr "Absolut farvemetrisk" @@ -119,9 +179,7 @@ msgid "Image opened" msgstr "Foto ?bnet" -#: src/gtk-interface.c:203 -#: src/gtk-interface.c:830 -#: src/gtk-interface.c:953 +#: src/gtk-interface.c:203 src/gtk-interface.c:830 src/gtk-interface.c:953 #: src/gtk-interface.c:995 msgid "Rawstudio" msgstr "Rawstudio" @@ -145,13 +203,11 @@ msgid "Directory:" msgstr "Bibliotek:" -#: src/gtk-interface.c:494 -#: src/rs-batch.c:980 +#: src/gtk-interface.c:494 src/rs-batch.c:980 msgid "Choose output directory" msgstr "V?lg output bibliotek" -#: src/gtk-interface.c:510 -#: src/rs-batch.c:991 +#: src/gtk-interface.c:510 src/rs-batch.c:991 msgid "Filename template:" msgstr "Filnavns skabelon:" @@ -204,14 +260,11 @@ msgid "Colors" msgstr "Farver" -#: src/gtk-interface.c:955 -#: src/gtk-interface.c:1178 +#: src/gtk-interface.c:955 src/gtk-interface.c:1178 msgid "Opening directory..." msgstr "?ben bibliotek" -#: src/gtk-interface.c:965 -#: src/gtk-interface.c:1123 -#: src/gtk-interface.c:1193 +#: src/gtk-interface.c:965 src/gtk-interface.c:1123 src/gtk-interface.c:1193 msgid "Ready" msgstr "Klar" @@ -231,15 +284,12 @@ msgid "Open" msgstr "?ben" -#: src/gtk-progress.c:63 -#: src/gtk-progress.c:99 -#: src/gtk-progress.c:122 +#: src/gtk-progress.c:63 src/gtk-progress.c:99 src/gtk-progress.c:122 msgid "Progress" msgstr "Fremskridt" #. FIXME: Calculate some sensible size - maybe even remember user resizes -#: src/rs-save-dialog.c:93 -#: src/rs-toolbox.c:371 +#: src/rs-save-dialog.c:93 src/rs-toolbox.c:371 msgid "Export File" msgstr "Eksporter fil" @@ -264,18 +314,15 @@ msgid "Percent:" msgstr "Procent:" -#: src/rs-batch.c:206 -#: src/rs-actions.c:737 +#: src/rs-batch.c:206 src/rs-actions.c:737 msgid "A" msgstr "A" -#: src/rs-batch.c:209 -#: src/rs-actions.c:738 +#: src/rs-batch.c:209 src/rs-actions.c:738 msgid "B" msgstr "B" -#: src/rs-batch.c:212 -#: src/rs-actions.c:739 +#: src/rs-batch.c:212 src/rs-actions.c:739 msgid "C" msgstr "C" @@ -358,8 +405,7 @@ msgid "Photo width:" msgstr "Foto bredde:" -#: src/rs-batch.c:894 -#: src/rs-batch.c:903 +#: src/rs-batch.c:894 src/rs-batch.c:903 msgid "pixels" msgstr "pixels" @@ -424,8 +470,7 @@ msgstr "Eksponerings dimensioner" #. All -#: src/rs-store.c:275 -#: src/rs-store.c:834 +#: src/rs-store.c:275 src/rs-store.c:836 #, c-format msgid "* (%d)" msgstr "* (%d)" @@ -435,8 +480,7 @@ msgstr "Alle fotos (undtaget slettede)" #. 1 -#: src/rs-store.c:279 -#: src/rs-store.c:835 +#: src/rs-store.c:279 src/rs-store.c:837 #, c-format msgid "1 (%d)" msgstr "1 (%d)" @@ -446,8 +490,7 @@ msgstr "Prioritet 1 fotos" #. 2 -#: src/rs-store.c:283 -#: src/rs-store.c:836 +#: src/rs-store.c:283 src/rs-store.c:838 #, c-format msgid "2 (%d)" msgstr "2 (%d)" @@ -457,8 +500,7 @@ msgstr "Prioritet 2 fotos" #. 3 -#: src/rs-store.c:287 -#: src/rs-store.c:837 +#: src/rs-store.c:287 src/rs-store.c:839 #, c-format msgid "3 (%d)" msgstr "3 (%d)" @@ -468,8 +510,7 @@ msgstr "Prioritet 3 fotos" #. Unsorted -#: src/rs-store.c:291 -#: src/rs-store.c:838 +#: src/rs-store.c:291 src/rs-store.c:840 #, c-format msgid "U (%d)" msgstr "U (%d)" @@ -479,8 +520,7 @@ msgstr "Uprioriterede fotos" #. Deleted -#: src/rs-store.c:295 -#: src/rs-store.c:839 +#: src/rs-store.c:295 src/rs-store.c:841 #, c-format msgid "D (%d)" msgstr "D (%d)" @@ -498,7 +538,7 @@ msgid "Priorities" msgstr "Prioriteter" -#: src/rs-store.c:527 +#: src/rs-store.c:529 #, c-format msgid "" "%s\n" @@ -507,32 +547,32 @@ "%s\n" "\n" -#: src/rs-store.c:530 +#: src/rs-store.c:532 #, c-format msgid "Focal length: %dmm\n" msgstr "Fokus l?ngde: %dmm\n" -#: src/rs-store.c:533 +#: src/rs-store.c:535 #, c-format msgid "Shutter speed: %.1fs\n" msgstr "Lukker hastighed: %.1fs\n" -#: src/rs-store.c:535 +#: src/rs-store.c:537 #, c-format msgid "Shutter speed: 1/%.0fs\n" msgstr "Lukker hastighed: 1/%.0fs\n" -#: src/rs-store.c:538 +#: src/rs-store.c:540 #, c-format msgid "Aperture: F/%.01f\n" msgstr "Bl?nde: F/%.01f\n" -#: src/rs-store.c:541 +#: src/rs-store.c:543 #, c-format msgid "ISO: %u\n" msgstr "ISO: %u\n" -#: src/rs-store.c:544 +#: src/rs-store.c:546 #, c-format msgid "Time: %s" msgstr "Tid: %s" @@ -547,8 +587,12 @@ #: src/rs-preview-widget.c:757 #, fuzzy -msgid "Your setup doesn't seem to support RGBA visuals and/or compositing. Consult your operating system manual for enabling RGBA visuals and compositing." -msgstr "Your setup doesn't seem to support RGBA visuals and/or compositing. Consult your operating system manual for enabling RGBA visuals and compositing." +msgid "" +"Your setup doesn't seem to support RGBA visuals and/or compositing. Consult " +"your operating system manual for enabling RGBA visuals and compositing." +msgstr "" +"Your setup doesn't seem to support RGBA visuals and/or compositing. Consult " +"your operating system manual for enabling RGBA visuals and compositing." #: src/rs-preview-widget.c:987 msgid "Size" @@ -630,8 +674,7 @@ msgid "Golden rectangle" msgstr "Gylden rektangel" -#: src/rs-preview-widget.c:1042 -#: src/rs-preview-widget.c:1053 +#: src/rs-preview-widget.c:1042 src/rs-preview-widget.c:1053 msgid "Crop" msgstr "Besk?r" @@ -640,18 +683,15 @@ msgstr "Afbryd crop" #. Snapshot labels -#: src/rs-toolbox.c:157 -#: src/rs-actions.c:972 +#: src/rs-toolbox.c:157 src/rs-actions.c:972 msgid " A " msgstr " A" -#: src/rs-toolbox.c:158 -#: src/rs-actions.c:973 +#: src/rs-toolbox.c:158 src/rs-actions.c:973 msgid " B " msgstr " B " -#: src/rs-toolbox.c:159 -#: src/rs-actions.c:974 +#: src/rs-toolbox.c:159 src/rs-actions.c:974 msgid " C " msgstr " C " @@ -664,8 +704,7 @@ msgid "Reset" msgstr "Nulstil" -#: src/rs-toolbox.c:415 -#: src/rs-toolbox.c:540 +#: src/rs-toolbox.c:415 src/rs-toolbox.c:540 msgid "Open curve ..." msgstr "?ben kurve ..." @@ -690,8 +729,7 @@ msgid "Channel Mixer" msgstr "Kanalmixer" -#: src/rs-toolbox.c:639 -#: src/rs-actions.c:353 +#: src/rs-toolbox.c:639 src/rs-actions.c:353 msgid "Curve" msgstr "Kurve" @@ -723,8 +761,7 @@ msgid "File exported" msgstr "Fil eksporteret" -#: src/rs-actions.c:203 -#: src/rs-actions.c:222 +#: src/rs-actions.c:203 src/rs-actions.c:222 msgid "Export failed" msgstr "Fejl under eksportering" @@ -736,8 +773,7 @@ msgid "Error exporting photo to gimp." msgstr "Fejl ved eksportering til Gimp" -#: src/rs-actions.c:256 -#: src/rs-actions.c:274 +#: src/rs-actions.c:256 src/rs-actions.c:274 msgid "Deleting photos" msgstr "Sletter fotos" @@ -753,27 +789,10 @@ msgid "Copied settings" msgstr "Indstillinger kopieret" -#. Build GUI -#: src/rs-actions.c:346 -msgid "Exposure" -msgstr "Eksponering" - -#: src/rs-actions.c:348 -msgid "Hue" -msgstr "Farvetone" - -#: src/rs-actions.c:349 -msgid "Contrast" -msgstr "Kontrast" - #: src/rs-actions.c:350 msgid "White balance" msgstr "Hvidbalance" -#: src/rs-actions.c:351 -msgid "Sharpen" -msgstr "Skarphed" - #: src/rs-actions.c:352 msgid "Channel mixer" msgstr "Kanalmixer" @@ -824,8 +843,7 @@ msgid "%s already added to batch queue" msgstr "%s er allerede tilf?jet til batch k?en" -#: src/rs-actions.c:724 -#: src/rs-actions.c:796 +#: src/rs-actions.c:724 src/rs-actions.c:796 #, c-format msgid "%d photos added to batch queue" msgstr "%d fotos tilf?jet til batch k?en" @@ -1096,88 +1114,223 @@ msgid "Shutterspeed" msgstr "Lukker hastighed" +#: plugins/denoise/denoise.c:86 +#, fuzzy +msgid "Sharpen Amount" +msgstr "Skarphed" + +#: plugins/denoise/denoise.c:87 +msgid "How much image will be sharpened" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:105 +#: plugins/output-jpegfile/output-jpegfile.c:87 +#, fuzzy +msgid "JPEG Quality" +msgstr "JPEG kvalitet:" + +#: plugins/output-flickr/output-flickr.c:112 +#, fuzzy +msgid "Title" +msgstr "_Filer" + +#: plugins/output-flickr/output-flickr.c:127 +msgid "Description" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:133 +msgid "Tags" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:140 +msgid "Public (everyone can see this)" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:146 +msgid "Visible to Friends" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:152 +msgid "Visible to Family" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:156 +msgid "Upload photo to Flickr" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:305 +msgid "We recieved an error during authentication. Please try again." +msgstr "" + +#: plugins/output-flickr/output-flickr.c:308 +msgid "" +"Rawstudio were not able to upload the photo cause the authentication has " +"been revoked. Please re-authenticate Rawstudio to upload to Flickr." +msgstr "" + +#: plugins/output-flickr/output-flickr.c:311 +msgid "" +"It seems like rawstudio lost its authentication to upload to your account, " +"please re-authenticate." +msgstr "" + +#: plugins/output-flickr/output-flickr.c:315 +#, c-format +msgid "" +"%s\n" +"\n" +"Note: This error isn't catched by Rawstudio. Please let us know that you " +"found it and how to reproduce it so we can make a more useful errormessage. " +"Thanks!" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:317 +msgid "Flickr error" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:376 +msgid "" +"Rawstudio needs to be authenticated before it will be able to upload photos " +"to your Flickr account." +msgstr "" + +#: plugins/output-flickr/output-flickr.c:383 +msgid "Step 1:" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:384 +msgid "Step 2:" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:386 +msgid "Authenticate Rawstudio" +msgstr "" + +#: plugins/output-jpegfile/output-jpegfile.c:93 +msgid "JPEG (Joint Photographic Experts Group)" +msgstr "JPEG (Joint Photographic Experts Group)" + +#: plugins/output-pngfile/output-pngfile.c:79 +msgid "PNG (Portable Network Graphics)" +msgstr "PNG (Portable Network Graphics)" + +#: plugins/output-tifffile/output-tifffile.c:81 +msgid "Save uncompressed TIFF" +msgstr "Gem TIFF ukomprimeret" + +#: plugins/output-tifffile/output-tifffile.c:87 +msgid "Save 16 bit TIFF" +msgstr "" + +#: plugins/output-tifffile/output-tifffile.c:93 +#, fuzzy +msgid "TIFF (Tagged Image File Format)" +msgstr "8-bit TIFF (Tagged Image File Format)" + #~ msgid "Background renderer active" #~ msgstr "Beregner i baggrunden" + #~ msgid "Preload photos" #~ msgstr "Forh?nds?bning af fotos" + #~ msgid "Filename:" #~ msgstr "Filnavn:" -#~ msgid "Save uncompressed TIFF" -#~ msgstr "Gem TIFF ukomprimeret" -#~ msgid "JPEG Quality:" -#~ msgstr "JPEG kvalitet:" + #~ msgid "File export canceled" #~ msgstr "Eksportering af fil afbrudt" -#~ msgid "JPEG (Joint Photographic Experts Group)" -#~ msgstr "JPEG (Joint Photographic Experts Group)" -#~ msgid "PNG (Portable Network Graphics)" -#~ msgstr "PNG (Portable Network Graphics)" -#~ msgid "8-bit TIFF (Tagged Image File Format)" -#~ msgstr "8-bit TIFF (Tagged Image File Format)" + #~ msgid "16-bit TIFF (Tagged Image File Format)" #~ msgstr "16-bit TIFF (Tagged Image File Format)" + #~ msgid "Rotate the photo 180 degrees" #~ msgstr "Roter fotoet 180 grader" + #~ msgid "Reset this setting" #~ msgstr "Nulstil denne indstilling" -#~ msgid "Warmth/tint" -#~ msgstr "Varme/Nuance" + #~ msgid "_Zoom to 100%" #~ msgstr "_Zoom til 100%" + #~ msgid "%dmm " #~ msgstr "%dmm " + #~ msgid "%.1fs " #~ msgstr "%.1fs " + #~ msgid "1/%.0fs " #~ msgstr "1/%.0fs " + #~ msgid "F/%.1f " #~ msgstr "F/%.1f " + #~ msgid "No metadata" #~ msgstr "Ingen metadata" + #~ msgid "Canon CR2" #~ msgstr "Canon CR2" + #~ msgid "Canon CIFF" #~ msgstr "Canon CIFF" + #~ msgid "Nikon NEF" #~ msgstr "Nikon NEF" + #~ msgid "Minolta raw" #~ msgstr "Minolta raw" + #~ msgid "Canon TIFF" #~ msgstr "Canon TIFF" + #~ msgid "Sony" #~ msgstr "Sony" + #~ msgid "Kodak" #~ msgstr "Kodak" + #~ msgid "Sigma" #~ msgstr "Sigma" + #~ msgid "Panasonic raw" #~ msgstr "Panasonic raw" + #~ msgid "Pentax raw" #~ msgstr "Pentax raw" + #~ msgid "Adobe Digital negative" #~ msgstr "Adobe Digital negative" + #~ msgid "Mamiya" #~ msgstr "Mamiya" + #~ msgid "Hasselblad" #~ msgstr "Hasselblad" + #~ msgid "Split" #~ msgstr "Delt visning" + #~ msgid "Exp. mask" #~ msgstr "Eksponerings maskering" + #~ msgid "Toggle exposure mask" #~ msgstr "Skift eksponerings maskerings tilstand" + #~ msgid "Set zoom" #~ msgstr "Set zoom" + #~ msgid "Zoom out" #~ msgstr "Zoom ud" + #~ msgid "Zoom in" #~ msgstr "Zoom ind" + #~ msgid "Zoom to fit" #~ msgstr "Zoom tilpasning" + #~ msgid "Zoom to 100%" #~ msgstr "Zoom til 100%" + #~ msgid "Zoom:" #~ msgstr "Zoom:" + #~ msgid "Apply" #~ msgstr "Anvend" - Modified: trunk/po/de.po =================================================================== --- trunk/po/de.po 2009-09-28 16:45:47 UTC (rev 2676) +++ trunk/po/de.po 2009-09-28 16:47:42 UTC (rev 2677) @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: Rawstudio 1.1.1\n" "Report-Msgid-Bugs-To: rawstudio-dev at rawstudio.org\n" -"POT-Creation-Date: 2009-09-28 00:09+0200\n" +"POT-Creation-Date: 2009-09-28 18:46+0200\n" "PO-Revision-Date: 2009-04-03 11:22+0100\n" "Last-Translator: Marcus Dapp \n" "Language-Team: Rawstudio development \n" @@ -20,6 +20,68 @@ "X-Poedit-Language: German\n" "X-Poedit-Country: GERMANY\n" +#. Build GUI +#: librawstudio/rs-settings.c:70 src/rs-actions.c:346 +msgid "Exposure" +msgstr "Belichtung" + +#: librawstudio/rs-settings.c:75 src/gtk-helper.c:739 src/rs-actions.c:347 +msgid "Saturation" +msgstr "S?ttigung" + +#: librawstudio/rs-settings.c:80 src/rs-actions.c:348 +msgid "Hue" +msgstr "Farbton" + +#: librawstudio/rs-settings.c:85 src/rs-actions.c:349 +msgid "Contrast" +msgstr "Kontrast" + +#: librawstudio/rs-settings.c:90 +#, fuzzy +msgid "Warmth" +msgstr "Farbtemperatur/Farbton" + +#: librawstudio/rs-settings.c:95 +msgid "Tint" +msgstr "" + +#: librawstudio/rs-settings.c:100 src/rs-actions.c:351 +msgid "Sharpen" +msgstr "Sch?rfen" + +#. FIXME: ? +#: librawstudio/rs-settings.c:105 plugins/denoise/denoise.c:94 +msgid "Denoise" +msgstr "" + +#. FIXME: ? +#: librawstudio/rs-settings.c:110 +#, fuzzy +msgid "Color Denoise" +msgstr "Farben" + +#: librawstudio/rs-settings.c:110 plugins/denoise/denoise.c:102 +#, fuzzy +msgid "Color denoise" +msgstr "Farben" + +#. FIXME: ? +#: librawstudio/rs-settings.c:115 +#, fuzzy +msgid "Red" +msgstr "Fertig" + +#. FIXME: ? +#: librawstudio/rs-settings.c:120 +msgid "Green" +msgstr "" + +#. FIXME: ? +#: librawstudio/rs-settings.c:125 +msgid "Blue" +msgstr "" + #: src/filename.c:280 #, c-format msgid "%f - Original filename" @@ -104,10 +166,6 @@ msgid "Relative colormetric" msgstr "Relativ farbmetrisch" -#: src/gtk-helper.c:739 src/rs-actions.c:347 -msgid "Saturation" -msgstr "S?ttigung" - #: src/gtk-helper.c:740 msgid "Absolute colormetric" msgstr "Absolut farbmetrisch" @@ -416,7 +474,7 @@ msgstr "Bildgr?sse exportieren" #. All -#: src/rs-store.c:275 src/rs-store.c:834 +#: src/rs-store.c:275 src/rs-store.c:836 #, c-format msgid "* (%d)" msgstr "* (%d)" @@ -426,7 +484,7 @@ msgstr "Alle Bilder (ohne gel?schte)" #. 1 -#: src/rs-store.c:279 src/rs-store.c:835 +#: src/rs-store.c:279 src/rs-store.c:837 #, c-format msgid "1 (%d)" msgstr "1 (%d)" @@ -436,7 +494,7 @@ msgstr "Bilder der Priorit?t 1" #. 2 -#: src/rs-store.c:283 src/rs-store.c:836 +#: src/rs-store.c:283 src/rs-store.c:838 #, c-format msgid "2 (%d)" msgstr "2 (%d)" @@ -446,7 +504,7 @@ msgstr "Bilder der Priorit?t 2" #. 3 -#: src/rs-store.c:287 src/rs-store.c:837 +#: src/rs-store.c:287 src/rs-store.c:839 #, c-format msgid "3 (%d)" msgstr "3 (%d)" @@ -456,7 +514,7 @@ msgstr "Bilder der Priorit?t 3" #. Unsorted -#: src/rs-store.c:291 src/rs-store.c:838 +#: src/rs-store.c:291 src/rs-store.c:840 #, c-format msgid "U (%d)" msgstr "U (%d)" @@ -466,7 +524,7 @@ msgstr "Bilder ohne Priorit?t" #. Deleted -#: src/rs-store.c:295 src/rs-store.c:839 +#: src/rs-store.c:295 src/rs-store.c:841 #, c-format msgid "D (%d)" msgstr "D (%d)" @@ -484,7 +542,7 @@ msgid "Priorities" msgstr "Priorit?ten" -#: src/rs-store.c:527 +#: src/rs-store.c:529 #, c-format msgid "" "%s\n" @@ -493,32 +551,32 @@ "%s\n" "\n" -#: src/rs-store.c:530 +#: src/rs-store.c:532 #, c-format msgid "Focal length: %dmm\n" msgstr "Brennweite: %dmm\n" -#: src/rs-store.c:533 +#: src/rs-store.c:535 #, c-format msgid "Shutter speed: %.1fs\n" msgstr "Verschlusszeit: %.1fs\n" -#: src/rs-store.c:535 +#: src/rs-store.c:537 #, c-format msgid "Shutter speed: 1/%.0fs\n" msgstr "Verschlusszeit: 1/%.0fs\n" -#: src/rs-store.c:538 +#: src/rs-store.c:540 #, c-format msgid "Aperture: F/%.01f\n" msgstr "Blende: F/%.01f\n" -#: src/rs-store.c:541 +#: src/rs-store.c:543 #, c-format msgid "ISO: %u\n" msgstr "ISO: %u\n" -#: src/rs-store.c:544 +#: src/rs-store.c:546 #, c-format msgid "Time: %s" msgstr "Uhrzeit: %s" @@ -735,27 +793,10 @@ msgid "Copied settings" msgstr "Einstellungen kopiert" -#. Build GUI -#: src/rs-actions.c:346 -msgid "Exposure" -msgstr "Belichtung" - -#: src/rs-actions.c:348 -msgid "Hue" -msgstr "Farbton" - -#: src/rs-actions.c:349 -msgid "Contrast" -msgstr "Kontrast" - #: src/rs-actions.c:350 msgid "White balance" msgstr "Weissabgleich" -#: src/rs-actions.c:351 -msgid "Sharpen" -msgstr "Sch?rfen" - #: src/rs-actions.c:352 msgid "Channel mixer" msgstr "" @@ -1079,6 +1120,119 @@ msgid "Shutterspeed" msgstr "Verschlusszeit" +#: plugins/denoise/denoise.c:86 +#, fuzzy +msgid "Sharpen Amount" +msgstr "Sch?rfen" + +#: plugins/denoise/denoise.c:87 +msgid "How much image will be sharpened" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:105 +#: plugins/output-jpegfile/output-jpegfile.c:87 +#, fuzzy +msgid "JPEG Quality" +msgstr "JPEG Qualit?t" + +#: plugins/output-flickr/output-flickr.c:112 +#, fuzzy +msgid "Title" +msgstr "_Datei" + +#: plugins/output-flickr/output-flickr.c:127 +msgid "Description" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:133 +msgid "Tags" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:140 +msgid "Public (everyone can see this)" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:146 +msgid "Visible to Friends" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:152 +msgid "Visible to Family" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:156 +msgid "Upload photo to Flickr" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:305 +msgid "We recieved an error during authentication. Please try again." +msgstr "" + +#: plugins/output-flickr/output-flickr.c:308 +msgid "" +"Rawstudio were not able to upload the photo cause the authentication has " +"been revoked. Please re-authenticate Rawstudio to upload to Flickr." +msgstr "" + +#: plugins/output-flickr/output-flickr.c:311 +msgid "" +"It seems like rawstudio lost its authentication to upload to your account, " +"please re-authenticate." +msgstr "" + +#: plugins/output-flickr/output-flickr.c:315 +#, c-format +msgid "" +"%s\n" +"\n" +"Note: This error isn't catched by Rawstudio. Please let us know that you " +"found it and how to reproduce it so we can make a more useful errormessage. " +"Thanks!" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:317 +msgid "Flickr error" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:376 +msgid "" +"Rawstudio needs to be authenticated before it will be able to upload photos " +"to your Flickr account." +msgstr "" + +#: plugins/output-flickr/output-flickr.c:383 +msgid "Step 1:" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:384 +msgid "Step 2:" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:386 +msgid "Authenticate Rawstudio" +msgstr "" + +#: plugins/output-jpegfile/output-jpegfile.c:93 +msgid "JPEG (Joint Photographic Experts Group)" +msgstr "JPEG (Joint Photographic Experts Group)" + +#: plugins/output-pngfile/output-pngfile.c:79 +msgid "PNG (Portable Network Graphics)" +msgstr "PNG (Portable Network Graphics)" + +#: plugins/output-tifffile/output-tifffile.c:81 +msgid "Save uncompressed TIFF" +msgstr "Speichere umkomprimiertes TIFF" + +#: plugins/output-tifffile/output-tifffile.c:87 +msgid "Save 16 bit TIFF" +msgstr "" + +#: plugins/output-tifffile/output-tifffile.c:93 +#, fuzzy +msgid "TIFF (Tagged Image File Format)" +msgstr "8-bit TIFF (Tagged Image File Format)" + #~ msgid "Background renderer active" #~ msgstr "Verarbeitung im Hintergrund aktiv" @@ -1088,24 +1242,9 @@ #~ msgid "Filename:" #~ msgstr "Dateiname:" -#~ msgid "Save uncompressed TIFF" -#~ msgstr "Speichere umkomprimiertes TIFF" - -#~ msgid "JPEG Quality:" -#~ msgstr "JPEG Qualit?t" - #~ msgid "File export canceled" #~ msgstr "Datei Export abgebrochen" -#~ msgid "JPEG (Joint Photographic Experts Group)" -#~ msgstr "JPEG (Joint Photographic Experts Group)" - -#~ msgid "PNG (Portable Network Graphics)" -#~ msgstr "PNG (Portable Network Graphics)" - -#~ msgid "8-bit TIFF (Tagged Image File Format)" -#~ msgstr "8-bit TIFF (Tagged Image File Format)" - #~ msgid "16-bit TIFF (Tagged Image File Format)" #~ msgstr "16-bit TIFF (Tagged Image File Format)" @@ -1115,9 +1254,6 @@ #~ msgid "Reset this setting" #~ msgstr "Einstellungen zur?cksetzen" -#~ msgid "Warmth/tint" -#~ msgstr "Farbtemperatur/Farbton" - #~ msgid "_Zoom to 100%" #~ msgstr "_Auf 100% zoomen" Modified: trunk/po/en.po =================================================================== --- trunk/po/en.po 2009-09-28 16:45:47 UTC (rev 2676) +++ trunk/po/en.po 2009-09-28 16:47:42 UTC (rev 2677) @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: Rawstudio 1.1.1\n" "Report-Msgid-Bugs-To: rawstudio-dev at rawstudio.org\n" -"POT-Creation-Date: 2009-09-28 00:09+0200\n" +"POT-Creation-Date: 2009-09-28 18:46+0200\n" "PO-Revision-Date: 2009-09-28 00:12+0100\n" "Last-Translator: Anders Kvist \n" "Language-Team: Rawstudio development \n" @@ -16,6 +16,68 @@ "Content-Transfer-Encoding: 8bit\n" "X-Poedit-Language: English\n" +#. Build GUI +#: librawstudio/rs-settings.c:70 src/rs-actions.c:346 +msgid "Exposure" +msgstr "Exposure" + +#: librawstudio/rs-settings.c:75 src/gtk-helper.c:739 src/rs-actions.c:347 +msgid "Saturation" +msgstr "Saturation" + +#: librawstudio/rs-settings.c:80 src/rs-actions.c:348 +msgid "Hue" +msgstr "Hue" + +#: librawstudio/rs-settings.c:85 src/rs-actions.c:349 +msgid "Contrast" +msgstr "Contrast" + +#: librawstudio/rs-settings.c:90 +#, fuzzy +msgid "Warmth" +msgstr "Warmth/tint" + +#: librawstudio/rs-settings.c:95 +msgid "Tint" +msgstr "" + +#: librawstudio/rs-settings.c:100 src/rs-actions.c:351 +msgid "Sharpen" +msgstr "Sharpen" + +#. FIXME: ? +#: librawstudio/rs-settings.c:105 plugins/denoise/denoise.c:94 +msgid "Denoise" +msgstr "" + +#. FIXME: ? +#: librawstudio/rs-settings.c:110 +#, fuzzy +msgid "Color Denoise" +msgstr "Colors" + +#: librawstudio/rs-settings.c:110 plugins/denoise/denoise.c:102 +#, fuzzy +msgid "Color denoise" +msgstr "Colors" + +#. FIXME: ? +#: librawstudio/rs-settings.c:115 +#, fuzzy +msgid "Red" +msgstr "Ready" + +#. FIXME: ? +#: librawstudio/rs-settings.c:120 +msgid "Green" +msgstr "" + +#. FIXME: ? +#: librawstudio/rs-settings.c:125 +msgid "Blue" +msgstr "" + #: src/filename.c:280 #, c-format msgid "%f - Original filename" @@ -57,8 +119,12 @@ msgstr "Not a valid color profile." #: src/gtk-helper.c:466 -msgid "The file you selected does not appear to be a valid color profile for this version of Rawstudio." -msgstr "The file you selected does not appear to be a valid color profile for this version of Rawstudio." +msgid "" +"The file you selected does not appear to be a valid color profile for this " +"version of Rawstudio." +msgstr "" +"The file you selected does not appear to be a valid color profile for this " +"version of Rawstudio." #: src/gtk-helper.c:568 msgid "Enable color management (experimental)" @@ -76,8 +142,7 @@ msgid "Display profile" msgstr "Display profile" -#: src/gtk-helper.c:632 -#: src/gtk-helper.c:685 +#: src/gtk-helper.c:632 src/gtk-helper.c:685 msgid "sRGB" msgstr "sRGB" @@ -97,11 +162,6 @@ msgid "Relative colormetric" msgstr "Relative colormetric" -#: src/gtk-helper.c:739 -#: src/rs-actions.c:347 -msgid "Saturation" -msgstr "Saturation" - #: src/gtk-helper.c:740 msgid "Absolute colormetric" msgstr "Absolute colormetric" @@ -118,9 +178,7 @@ msgid "Image opened" msgstr "Image opened" -#: src/gtk-interface.c:203 -#: src/gtk-interface.c:830 -#: src/gtk-interface.c:953 +#: src/gtk-interface.c:203 src/gtk-interface.c:830 src/gtk-interface.c:953 #: src/gtk-interface.c:995 msgid "Rawstudio" msgstr "Rawstudio" @@ -144,13 +202,11 @@ msgid "Directory:" msgstr "Directory:" -#: src/gtk-interface.c:494 -#: src/rs-batch.c:980 +#: src/gtk-interface.c:494 src/rs-batch.c:980 msgid "Choose output directory" msgstr "Choose output directory" -#: src/gtk-interface.c:510 -#: src/rs-batch.c:991 +#: src/gtk-interface.c:510 src/rs-batch.c:991 msgid "Filename template:" msgstr "Filename template:" @@ -203,14 +259,11 @@ msgid "Colors" msgstr "Colors" -#: src/gtk-interface.c:955 -#: src/gtk-interface.c:1178 +#: src/gtk-interface.c:955 src/gtk-interface.c:1178 msgid "Opening directory..." msgstr "Opening directory..." -#: src/gtk-interface.c:965 -#: src/gtk-interface.c:1123 -#: src/gtk-interface.c:1193 +#: src/gtk-interface.c:965 src/gtk-interface.c:1123 src/gtk-interface.c:1193 msgid "Ready" msgstr "Ready" @@ -230,15 +283,12 @@ msgid "Open" msgstr "Open" -#: src/gtk-progress.c:63 -#: src/gtk-progress.c:99 -#: src/gtk-progress.c:122 +#: src/gtk-progress.c:63 src/gtk-progress.c:99 src/gtk-progress.c:122 msgid "Progress" msgstr "Progress" #. FIXME: Calculate some sensible size - maybe even remember user resizes -#: src/rs-save-dialog.c:93 -#: src/rs-toolbox.c:371 +#: src/rs-save-dialog.c:93 src/rs-toolbox.c:371 msgid "Export File" msgstr "Export File" @@ -263,18 +313,15 @@ msgid "Percent:" msgstr "Percent:" -#: src/rs-batch.c:206 -#: src/rs-actions.c:737 +#: src/rs-batch.c:206 src/rs-actions.c:737 msgid "A" msgstr "A" -#: src/rs-batch.c:209 -#: src/rs-actions.c:738 +#: src/rs-batch.c:209 src/rs-actions.c:738 msgid "B" msgstr "B" -#: src/rs-batch.c:212 -#: src/rs-actions.c:739 +#: src/rs-batch.c:212 src/rs-actions.c:739 msgid "C" msgstr "C" @@ -357,8 +404,7 @@ msgid "Photo width:" msgstr "Photo width:" -#: src/rs-batch.c:894 -#: src/rs-batch.c:903 +#: src/rs-batch.c:894 src/rs-batch.c:903 msgid "pixels" msgstr "pixels" @@ -423,8 +469,7 @@ msgstr "Export dimensions" #. All -#: src/rs-store.c:275 -#: src/rs-store.c:834 +#: src/rs-store.c:275 src/rs-store.c:836 #, c-format msgid "* (%d)" msgstr "* (%d)" @@ -434,8 +479,7 @@ msgstr "All photos (excluding deleted)" #. 1 -#: src/rs-store.c:279 -#: src/rs-store.c:835 +#: src/rs-store.c:279 src/rs-store.c:837 #, c-format msgid "1 (%d)" msgstr "1 (%d)" @@ -445,8 +489,7 @@ msgstr "Priority 1 photos" #. 2 -#: src/rs-store.c:283 -#: src/rs-store.c:836 +#: src/rs-store.c:283 src/rs-store.c:838 #, c-format msgid "2 (%d)" msgstr "2 (%d)" @@ -456,8 +499,7 @@ msgstr "Priority 2 photos" #. 3 -#: src/rs-store.c:287 -#: src/rs-store.c:837 +#: src/rs-store.c:287 src/rs-store.c:839 #, c-format msgid "3 (%d)" msgstr "3 (%d)" @@ -467,8 +509,7 @@ msgstr "Priority 3 photos" #. Unsorted -#: src/rs-store.c:291 -#: src/rs-store.c:838 +#: src/rs-store.c:291 src/rs-store.c:840 #, c-format msgid "U (%d)" msgstr "U (%d)" @@ -478,8 +519,7 @@ msgstr "Unprioritized photos" #. Deleted -#: src/rs-store.c:295 -#: src/rs-store.c:839 +#: src/rs-store.c:295 src/rs-store.c:841 #, c-format msgid "D (%d)" msgstr "D (%d)" @@ -497,7 +537,7 @@ msgid "Priorities" msgstr "Priorities" -#: src/rs-store.c:527 +#: src/rs-store.c:529 #, c-format msgid "" "%s\n" @@ -506,32 +546,32 @@ "%s\n" "\n" -#: src/rs-store.c:530 +#: src/rs-store.c:532 #, c-format msgid "Focal length: %dmm\n" msgstr "Focal length: %dmm\n" -#: src/rs-store.c:533 +#: src/rs-store.c:535 #, c-format msgid "Shutter speed: %.1fs\n" msgstr "Shutter speed: %.1fs\n" -#: src/rs-store.c:535 +#: src/rs-store.c:537 #, c-format msgid "Shutter speed: 1/%.0fs\n" msgstr "Shutter speed: 1/%.0fs\n" -#: src/rs-store.c:538 +#: src/rs-store.c:540 #, c-format msgid "Aperture: F/%.01f\n" msgstr "Aperture: F/%.01f\n" -#: src/rs-store.c:541 +#: src/rs-store.c:543 #, c-format msgid "ISO: %u\n" msgstr "ISO: %u\n" -#: src/rs-store.c:544 +#: src/rs-store.c:546 #, c-format msgid "Time: %s" msgstr "Time: %s" @@ -545,8 +585,12 @@ msgstr "Light out mode not available" #: src/rs-preview-widget.c:757 -msgid "Your setup doesn't seem to support RGBA visuals and/or compositing. Consult your operating system manual for enabling RGBA visuals and compositing." -msgstr "Your setup doesn't seem to support RGBA visuals and/or compositing. Consult your operating system manual for enabling RGBA visuals and compositing." +msgid "" +"Your setup doesn't seem to support RGBA visuals and/or compositing. Consult " +"your operating system manual for enabling RGBA visuals and compositing." +msgstr "" +"Your setup doesn't seem to support RGBA visuals and/or compositing. Consult " +"your operating system manual for enabling RGBA visuals and compositing." #: src/rs-preview-widget.c:987 msgid "Size" @@ -628,8 +672,7 @@ msgid "Golden rectangle" msgstr "Golden rectangle" -#: src/rs-preview-widget.c:1042 -#: src/rs-preview-widget.c:1053 +#: src/rs-preview-widget.c:1042 src/rs-preview-widget.c:1053 msgid "Crop" msgstr "Crop" @@ -638,18 +681,15 @@ msgstr "Don't crop" #. Snapshot labels -#: src/rs-toolbox.c:157 -#: src/rs-actions.c:972 +#: src/rs-toolbox.c:157 src/rs-actions.c:972 msgid " A " msgstr " A " -#: src/rs-toolbox.c:158 -#: src/rs-actions.c:973 +#: src/rs-toolbox.c:158 src/rs-actions.c:973 msgid " B " msgstr " B " -#: src/rs-toolbox.c:159 -#: src/rs-actions.c:974 +#: src/rs-toolbox.c:159 src/rs-actions.c:974 msgid " C " msgstr " C " @@ -662,8 +702,7 @@ msgid "Reset" msgstr "Reset" -#: src/rs-toolbox.c:415 -#: src/rs-toolbox.c:540 +#: src/rs-toolbox.c:415 src/rs-toolbox.c:540 msgid "Open curve ..." msgstr "Open curve ..." @@ -688,8 +727,7 @@ msgid "Channel Mixer" msgstr "Channel Mixer" -#: src/rs-toolbox.c:639 -#: src/rs-actions.c:353 +#: src/rs-toolbox.c:639 src/rs-actions.c:353 msgid "Curve" msgstr "Curve" @@ -721,8 +759,7 @@ msgid "File exported" msgstr "File exported" -#: src/rs-actions.c:203 -#: src/rs-actions.c:222 +#: src/rs-actions.c:203 src/rs-actions.c:222 msgid "Export failed" msgstr "Export failed" @@ -734,8 +771,7 @@ msgid "Error exporting photo to gimp." msgstr "Error exporting photo to gimp." -#: src/rs-actions.c:256 -#: src/rs-actions.c:274 +#: src/rs-actions.c:256 src/rs-actions.c:274 msgid "Deleting photos" msgstr "Deleting photos" @@ -751,27 +787,10 @@ msgid "Copied settings" msgstr "Copied settings" -#. Build GUI -#: src/rs-actions.c:346 -msgid "Exposure" -msgstr "Exposure" - -#: src/rs-actions.c:348 -msgid "Hue" -msgstr "Hue" - -#: src/rs-actions.c:349 -msgid "Contrast" -msgstr "Contrast" - #: src/rs-actions.c:350 msgid "White balance" msgstr "White balance" -#: src/rs-actions.c:351 -msgid "Sharpen" -msgstr "Sharpen" - #: src/rs-actions.c:352 msgid "Channel mixer" msgstr "Channel mixer" @@ -822,8 +841,7 @@ msgid "%s already added to batch queue" msgstr "%s already added to batch queue" -#: src/rs-actions.c:724 -#: src/rs-actions.c:796 +#: src/rs-actions.c:724 src/rs-actions.c:796 #, c-format msgid "%d photos added to batch queue" msgstr "%d photos added to batch queue" @@ -1094,68 +1112,193 @@ msgid "Shutterspeed" msgstr "Shutterspeed" +#: plugins/denoise/denoise.c:86 +#, fuzzy +msgid "Sharpen Amount" +msgstr "Sharpen" + +#: plugins/denoise/denoise.c:87 +msgid "How much image will be sharpened" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:105 +#: plugins/output-jpegfile/output-jpegfile.c:87 +#, fuzzy +msgid "JPEG Quality" +msgstr "JPEG Quality:" + +#: plugins/output-flickr/output-flickr.c:112 +#, fuzzy +msgid "Title" +msgstr "_File" + +#: plugins/output-flickr/output-flickr.c:127 +msgid "Description" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:133 +msgid "Tags" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:140 +msgid "Public (everyone can see this)" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:146 +msgid "Visible to Friends" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:152 +msgid "Visible to Family" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:156 +msgid "Upload photo to Flickr" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:305 +msgid "We recieved an error during authentication. Please try again." +msgstr "" + +#: plugins/output-flickr/output-flickr.c:308 +msgid "" +"Rawstudio were not able to upload the photo cause the authentication has " +"been revoked. Please re-authenticate Rawstudio to upload to Flickr." +msgstr "" + +#: plugins/output-flickr/output-flickr.c:311 +msgid "" +"It seems like rawstudio lost its authentication to upload to your account, " +"please re-authenticate." +msgstr "" + +#: plugins/output-flickr/output-flickr.c:315 +#, c-format +msgid "" +"%s\n" +"\n" +"Note: This error isn't catched by Rawstudio. Please let us know that you " +"found it and how to reproduce it so we can make a more useful errormessage. " +"Thanks!" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:317 +msgid "Flickr error" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:376 +msgid "" +"Rawstudio needs to be authenticated before it will be able to upload photos " +"to your Flickr account." +msgstr "" + +#: plugins/output-flickr/output-flickr.c:383 +msgid "Step 1:" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:384 +msgid "Step 2:" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:386 +msgid "Authenticate Rawstudio" +msgstr "" + +#: plugins/output-jpegfile/output-jpegfile.c:93 +msgid "JPEG (Joint Photographic Experts Group)" +msgstr "JPEG (Joint Photographic Experts Group)" + +#: plugins/output-pngfile/output-pngfile.c:79 +msgid "PNG (Portable Network Graphics)" +msgstr "PNG (Portable Network Graphics)" + +#: plugins/output-tifffile/output-tifffile.c:81 +msgid "Save uncompressed TIFF" +msgstr "Save uncompressed TIFF" + +#: plugins/output-tifffile/output-tifffile.c:87 +msgid "Save 16 bit TIFF" +msgstr "" + +#: plugins/output-tifffile/output-tifffile.c:93 +#, fuzzy +msgid "TIFF (Tagged Image File Format)" +msgstr "8-bit TIFF (Tagged Image File Format)" + #~ msgid "Background renderer active" #~ msgstr "Background renderer active" + #~ msgid "Preload photos" #~ msgstr "Preload photos" + #~ msgid "Filename:" #~ msgstr "Filename:" -#~ msgid "Save uncompressed TIFF" -#~ msgstr "Save uncompressed TIFF" -#~ msgid "JPEG Quality:" -#~ msgstr "JPEG Quality:" + #~ msgid "File export canceled" #~ msgstr "File export canceled" -#~ msgid "JPEG (Joint Photographic Experts Group)" -#~ msgstr "JPEG (Joint Photographic Experts Group)" -#~ msgid "PNG (Portable Network Graphics)" -#~ msgstr "PNG (Portable Network Graphics)" -#~ msgid "8-bit TIFF (Tagged Image File Format)" -#~ msgstr "8-bit TIFF (Tagged Image File Format)" + #~ msgid "16-bit TIFF (Tagged Image File Format)" #~ msgstr "16-bit TIFF (Tagged Image File Format)" + #~ msgid "Rotate the photo 180 degrees" #~ msgstr "Rotate the photo 180 degrees" + #~ msgid "Reset this setting" #~ msgstr "Reset this setting" -#~ msgid "Warmth/tint" -#~ msgstr "Warmth/tint" + #~ msgid "_Zoom to 100%" #~ msgstr "_Zoom to 100%" + #~ msgid "%dmm " #~ msgstr "%dmm " + #~ msgid "%.1fs " #~ msgstr "%.1fs " + #~ msgid "1/%.0fs " #~ msgstr "1/%.0fs " + #~ msgid "F/%.1f " #~ msgstr "F/%.1f " + #~ msgid "No metadata" #~ msgstr "No metadata" + #~ msgid "Canon CR2" #~ msgstr "Canon CR2" + #~ msgid "Canon CIFF" #~ msgstr "Canon CIFF" + #~ msgid "Nikon NEF" #~ msgstr "Nikon NEF" + #~ msgid "Minolta raw" #~ msgstr "Minolta raw" + #~ msgid "Canon TIFF" #~ msgstr "Canon TIFF" + #~ msgid "Sony" #~ msgstr "Sony" + #~ msgid "Kodak" #~ msgstr "Kodak" + #~ msgid "Sigma" #~ msgstr "Sigma" + #~ msgid "Panasonic raw" #~ msgstr "Panasonic raw" + #~ msgid "Pentax raw" #~ msgstr "Pentax raw" + #~ msgid "Adobe Digital negative" #~ msgstr "Adobe Digital negative" + #~ msgid "Mamiya" #~ msgstr "Mamiya" + #~ msgid "Hasselblad" #~ msgstr "Hasselblad" - Modified: trunk/po/es.po =================================================================== --- trunk/po/es.po 2009-09-28 16:45:47 UTC (rev 2676) +++ trunk/po/es.po 2009-09-28 16:47:42 UTC (rev 2677) @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: Rawstudio 1.1.1\n" "Report-Msgid-Bugs-To: rawstudio-dev at rawstudio.org\n" -"POT-Creation-Date: 2009-09-28 00:09+0200\n" +"POT-Creation-Date: 2009-09-28 18:46+0200\n" "PO-Revision-Date: 2008-05-02 00:47+0100\n" "Last-Translator: Patrik Jarl \n" "Language-Team: Rawstudio development \n" @@ -19,6 +19,68 @@ "X-Poedit-Language: Spanish\n" "X-Poedit-Country: SPAIN\n" +#. Build GUI +#: librawstudio/rs-settings.c:70 src/rs-actions.c:346 +msgid "Exposure" +msgstr "Exposici?n" + +#: librawstudio/rs-settings.c:75 src/gtk-helper.c:739 src/rs-actions.c:347 +msgid "Saturation" +msgstr "Saturaci?n" + +#: librawstudio/rs-settings.c:80 src/rs-actions.c:348 +msgid "Hue" +msgstr "Tono" + +#: librawstudio/rs-settings.c:85 src/rs-actions.c:349 +msgid "Contrast" +msgstr "Contraste" + +#: librawstudio/rs-settings.c:90 +#, fuzzy +msgid "Warmth" +msgstr "Temperatura/matiz" + +#: librawstudio/rs-settings.c:95 +msgid "Tint" +msgstr "" + +#: librawstudio/rs-settings.c:100 src/rs-actions.c:351 +msgid "Sharpen" +msgstr "Enfoque" + +#. FIXME: ? +#: librawstudio/rs-settings.c:105 plugins/denoise/denoise.c:94 +msgid "Denoise" +msgstr "" + +#. FIXME: ? +#: librawstudio/rs-settings.c:110 +#, fuzzy +msgid "Color Denoise" +msgstr "Colores" + +#: librawstudio/rs-settings.c:110 plugins/denoise/denoise.c:102 +#, fuzzy +msgid "Color denoise" +msgstr "Colores" + +#. FIXME: ? +#: librawstudio/rs-settings.c:115 +#, fuzzy +msgid "Red" +msgstr "Listo" + +#. FIXME: ? +#: librawstudio/rs-settings.c:120 +msgid "Green" +msgstr "" + +#. FIXME: ? +#: librawstudio/rs-settings.c:125 +msgid "Blue" +msgstr "" + #: src/filename.c:280 #, c-format msgid "%f - Original filename" @@ -103,10 +165,6 @@ msgid "Relative colormetric" msgstr "Colorim?trico relativo" -#: src/gtk-helper.c:739 src/rs-actions.c:347 -msgid "Saturation" -msgstr "Saturaci?n" - #: src/gtk-helper.c:740 msgid "Absolute colormetric" msgstr "Colorim?trico absoluto" @@ -414,7 +472,7 @@ msgstr "Exportar dimensiones" #. All -#: src/rs-store.c:275 src/rs-store.c:834 +#: src/rs-store.c:275 src/rs-store.c:836 #, c-format msgid "* (%d)" msgstr "* (%d)" @@ -424,7 +482,7 @@ msgstr "Todas las fotos (excluidas las borradas)" #. 1 -#: src/rs-store.c:279 src/rs-store.c:835 +#: src/rs-store.c:279 src/rs-store.c:837 #, c-format msgid "1 (%d)" msgstr "1 (%d)" @@ -434,7 +492,7 @@ msgstr "Fotos de prioridad 1" #. 2 -#: src/rs-store.c:283 src/rs-store.c:836 +#: src/rs-store.c:283 src/rs-store.c:838 #, c-format msgid "2 (%d)" msgstr "2 (%d)" @@ -444,7 +502,7 @@ msgstr "Fotos de prioridad 2" #. 3 -#: src/rs-store.c:287 src/rs-store.c:837 +#: src/rs-store.c:287 src/rs-store.c:839 #, c-format msgid "3 (%d)" msgstr "3 (%d)" @@ -454,7 +512,7 @@ msgstr "Fotos de prioridad 3" #. Unsorted -#: src/rs-store.c:291 src/rs-store.c:838 +#: src/rs-store.c:291 src/rs-store.c:840 #, c-format msgid "U (%d)" msgstr "U (%d)" @@ -464,7 +522,7 @@ msgstr "Fotos sin priorizar" #. Deleted -#: src/rs-store.c:295 src/rs-store.c:839 +#: src/rs-store.c:295 src/rs-store.c:841 #, c-format msgid "D (%d)" msgstr "D (%d)" @@ -482,39 +540,39 @@ msgid "Priorities" msgstr "Prioridades" -#: src/rs-store.c:527 +#: src/rs-store.c:529 #, c-format msgid "" "%s\n" "\n" msgstr "" -#: src/rs-store.c:530 +#: src/rs-store.c:532 #, c-format msgid "Focal length: %dmm\n" msgstr "" -#: src/rs-store.c:533 +#: src/rs-store.c:535 #, c-format msgid "Shutter speed: %.1fs\n" msgstr "" -#: src/rs-store.c:535 +#: src/rs-store.c:537 #, c-format msgid "Shutter speed: 1/%.0fs\n" msgstr "" -#: src/rs-store.c:538 +#: src/rs-store.c:540 #, c-format msgid "Aperture: F/%.01f\n" msgstr "" -#: src/rs-store.c:541 +#: src/rs-store.c:543 #, c-format msgid "ISO: %u\n" msgstr "" -#: src/rs-store.c:544 +#: src/rs-store.c:546 #, c-format msgid "Time: %s" msgstr "" @@ -731,27 +789,10 @@ msgid "Copied settings" msgstr "Ajustes copiados" -#. Build GUI -#: src/rs-actions.c:346 -msgid "Exposure" -msgstr "Exposici?n" - -#: src/rs-actions.c:348 -msgid "Hue" -msgstr "Tono" - -#: src/rs-actions.c:349 -msgid "Contrast" -msgstr "Contraste" - #: src/rs-actions.c:350 msgid "White balance" msgstr "Balance de blancos" -#: src/rs-actions.c:351 -msgid "Sharpen" -msgstr "Enfoque" - #: src/rs-actions.c:352 msgid "Channel mixer" msgstr "" @@ -1077,6 +1118,119 @@ msgid "Shutterspeed" msgstr "" +#: plugins/denoise/denoise.c:86 +#, fuzzy +msgid "Sharpen Amount" +msgstr "Enfoque" + +#: plugins/denoise/denoise.c:87 +msgid "How much image will be sharpened" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:105 +#: plugins/output-jpegfile/output-jpegfile.c:87 +#, fuzzy +msgid "JPEG Quality" +msgstr "Calidad JPEG:" + +#: plugins/output-flickr/output-flickr.c:112 +#, fuzzy +msgid "Title" +msgstr "_Archivo" + +#: plugins/output-flickr/output-flickr.c:127 +msgid "Description" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:133 +msgid "Tags" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:140 +msgid "Public (everyone can see this)" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:146 +msgid "Visible to Friends" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:152 +msgid "Visible to Family" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:156 +msgid "Upload photo to Flickr" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:305 +msgid "We recieved an error during authentication. Please try again." +msgstr "" + +#: plugins/output-flickr/output-flickr.c:308 +msgid "" +"Rawstudio were not able to upload the photo cause the authentication has " +"been revoked. Please re-authenticate Rawstudio to upload to Flickr." +msgstr "" + +#: plugins/output-flickr/output-flickr.c:311 +msgid "" +"It seems like rawstudio lost its authentication to upload to your account, " +"please re-authenticate." +msgstr "" + +#: plugins/output-flickr/output-flickr.c:315 +#, c-format +msgid "" +"%s\n" +"\n" +"Note: This error isn't catched by Rawstudio. Please let us know that you " +"found it and how to reproduce it so we can make a more useful errormessage. " +"Thanks!" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:317 +msgid "Flickr error" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:376 +msgid "" +"Rawstudio needs to be authenticated before it will be able to upload photos " +"to your Flickr account." +msgstr "" + +#: plugins/output-flickr/output-flickr.c:383 +msgid "Step 1:" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:384 +msgid "Step 2:" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:386 +msgid "Authenticate Rawstudio" +msgstr "" + +#: plugins/output-jpegfile/output-jpegfile.c:93 +msgid "JPEG (Joint Photographic Experts Group)" +msgstr "JPEG (Joint Photographic Experts Group)" + +#: plugins/output-pngfile/output-pngfile.c:79 +msgid "PNG (Portable Network Graphics)" +msgstr "PNG (Portable Network Graphics)" + +#: plugins/output-tifffile/output-tifffile.c:81 +msgid "Save uncompressed TIFF" +msgstr "Guardar TIFF sin compresi?n" + +#: plugins/output-tifffile/output-tifffile.c:87 +msgid "Save 16 bit TIFF" +msgstr "" + +#: plugins/output-tifffile/output-tifffile.c:93 +#, fuzzy +msgid "TIFF (Tagged Image File Format)" +msgstr "8-bit TIFF (Tagged Image File Format)" + #~ msgid "Background renderer active" #~ msgstr "Renderizador en segundo plano activo" @@ -1086,24 +1240,9 @@ #~ msgid "Filename:" #~ msgstr "Nombre de archivo:" -#~ msgid "Save uncompressed TIFF" -#~ msgstr "Guardar TIFF sin compresi?n" - -#~ msgid "JPEG Quality:" -#~ msgstr "Calidad JPEG:" - #~ msgid "File export canceled" #~ msgstr "Cancelada la exportaci?n de archivo" -#~ msgid "JPEG (Joint Photographic Experts Group)" -#~ msgstr "JPEG (Joint Photographic Experts Group)" - -#~ msgid "PNG (Portable Network Graphics)" -#~ msgstr "PNG (Portable Network Graphics)" - -#~ msgid "8-bit TIFF (Tagged Image File Format)" -#~ msgstr "8-bit TIFF (Tagged Image File Format)" - #~ msgid "16-bit TIFF (Tagged Image File Format)" #~ msgstr "16-bit TIFF (Tagged Image File Format)" @@ -1113,9 +1252,6 @@ #~ msgid "Reset this setting" #~ msgstr "Restaurar este ajuste" -#~ msgid "Warmth/tint" -#~ msgstr "Temperatura/matiz" - #~ msgid "_Zoom to 100%" #~ msgstr "_Zoom al 100 %" Modified: trunk/po/fi.po =================================================================== --- trunk/po/fi.po 2009-09-28 16:45:47 UTC (rev 2676) +++ trunk/po/fi.po 2009-09-28 16:47:42 UTC (rev 2677) @@ -17,7 +17,7 @@ msgstr "" "Project-Id-Version: Rawstudio 1.1.1\n" "Report-Msgid-Bugs-To: rawstudio-dev at rawstudio.org\n" -"POT-Creation-Date: 2009-09-28 00:09+0200\n" +"POT-Creation-Date: 2009-09-28 18:46+0200\n" "PO-Revision-Date: 2008-04-18 07:45+0200\n" "Last-Translator: Olli H.\n" "Language-Team: Rawstudio development \n" @@ -27,6 +27,68 @@ "X-Poedit-Language: Finnish\n" "X-Poedit-Country: FINLAND\n" +#. Build GUI +#: librawstudio/rs-settings.c:70 src/rs-actions.c:346 +msgid "Exposure" +msgstr "Valotus" + +#: librawstudio/rs-settings.c:75 src/gtk-helper.c:739 src/rs-actions.c:347 +msgid "Saturation" +msgstr "V?rikyll?isyys" + +#: librawstudio/rs-settings.c:80 src/rs-actions.c:348 +msgid "Hue" +msgstr "S?vy" + +#: librawstudio/rs-settings.c:85 src/rs-actions.c:349 +msgid "Contrast" +msgstr "Kontrasti" + +#: librawstudio/rs-settings.c:90 +#, fuzzy +msgid "Warmth" +msgstr "V?ril?mp?tila/v?ri" + +#: librawstudio/rs-settings.c:95 +msgid "Tint" +msgstr "" + +#: librawstudio/rs-settings.c:100 src/rs-actions.c:351 +msgid "Sharpen" +msgstr "Ter?v?itys" + +#. FIXME: ? +#: librawstudio/rs-settings.c:105 plugins/denoise/denoise.c:94 +msgid "Denoise" +msgstr "" + +#. FIXME: ? +#: librawstudio/rs-settings.c:110 +#, fuzzy +msgid "Color Denoise" +msgstr "V?rit" + +#: librawstudio/rs-settings.c:110 plugins/denoise/denoise.c:102 +#, fuzzy +msgid "Color denoise" +msgstr "V?rit" + +#. FIXME: ? +#: librawstudio/rs-settings.c:115 +#, fuzzy +msgid "Red" +msgstr "Valmis" + +#. FIXME: ? +#: librawstudio/rs-settings.c:120 +msgid "Green" +msgstr "" + +#. FIXME: ? +#: librawstudio/rs-settings.c:125 +msgid "Blue" +msgstr "" + #: src/filename.c:280 #, c-format msgid "%f - Original filename" @@ -110,10 +172,6 @@ msgid "Relative colormetric" msgstr "Suhteellinen kolorimetrinen" -#: src/gtk-helper.c:739 src/rs-actions.c:347 -msgid "Saturation" -msgstr "V?rikyll?isyys" - #: src/gtk-helper.c:740 msgid "Absolute colormetric" msgstr "Absoluuttinen kolorimetrinen" @@ -421,7 +479,7 @@ msgstr "Viedyn kuvan mitat" #. All -#: src/rs-store.c:275 src/rs-store.c:834 +#: src/rs-store.c:275 src/rs-store.c:836 #, c-format msgid "* (%d)" msgstr "* (%d)" @@ -431,7 +489,7 @@ msgstr "Kaikki kuvat (paitsi poistettavaksi merkityt)" #. 1 -#: src/rs-store.c:279 src/rs-store.c:835 +#: src/rs-store.c:279 src/rs-store.c:837 #, c-format msgid "1 (%d)" msgstr "1 (%d)" @@ -441,7 +499,7 @@ msgstr "T?rkeysmerkinn?n 1 kuvat" #. 2 -#: src/rs-store.c:283 src/rs-store.c:836 +#: src/rs-store.c:283 src/rs-store.c:838 #, c-format msgid "2 (%d)" msgstr "2 (%d)" @@ -451,7 +509,7 @@ msgstr "T?rkeysmerkinn?n 2 kuvat" #. 3 -#: src/rs-store.c:287 src/rs-store.c:837 +#: src/rs-store.c:287 src/rs-store.c:839 #, c-format msgid "3 (%d)" msgstr "3 (%d)" @@ -461,7 +519,7 @@ msgstr "T?rkeysmerkinn?n 1 kuvat" #. Unsorted -#: src/rs-store.c:291 src/rs-store.c:838 +#: src/rs-store.c:291 src/rs-store.c:840 #, c-format msgid "U (%d)" msgstr "U (%d)" @@ -471,7 +529,7 @@ msgstr "T?rkeysmerkitsem?tt?m?t kuvat" #. Deleted -#: src/rs-store.c:295 src/rs-store.c:839 +#: src/rs-store.c:295 src/rs-store.c:841 #, c-format msgid "D (%d)" msgstr "D (%d)" @@ -489,39 +547,39 @@ msgid "Priorities" msgstr "T?rkeysmerkinn?t" -#: src/rs-store.c:527 +#: src/rs-store.c:529 #, c-format msgid "" "%s\n" "\n" msgstr "" -#: src/rs-store.c:530 +#: src/rs-store.c:532 #, c-format msgid "Focal length: %dmm\n" msgstr "" -#: src/rs-store.c:533 +#: src/rs-store.c:535 #, c-format msgid "Shutter speed: %.1fs\n" msgstr "" -#: src/rs-store.c:535 +#: src/rs-store.c:537 #, c-format msgid "Shutter speed: 1/%.0fs\n" msgstr "" -#: src/rs-store.c:538 +#: src/rs-store.c:540 #, c-format msgid "Aperture: F/%.01f\n" msgstr "" -#: src/rs-store.c:541 +#: src/rs-store.c:543 #, c-format msgid "ISO: %u\n" msgstr "" -#: src/rs-store.c:544 +#: src/rs-store.c:546 #, c-format msgid "Time: %s" msgstr "" @@ -738,27 +796,10 @@ msgid "Copied settings" msgstr "Arvot kopioitu" -#. Build GUI -#: src/rs-actions.c:346 -msgid "Exposure" -msgstr "Valotus" - -#: src/rs-actions.c:348 -msgid "Hue" -msgstr "S?vy" - -#: src/rs-actions.c:349 -msgid "Contrast" -msgstr "Kontrasti" - #: src/rs-actions.c:350 msgid "White balance" msgstr "Valkotasapaino" -#: src/rs-actions.c:351 -msgid "Sharpen" -msgstr "Ter?v?itys" - #: src/rs-actions.c:352 msgid "Channel mixer" msgstr "" @@ -1084,6 +1125,119 @@ msgid "Shutterspeed" msgstr "" +#: plugins/denoise/denoise.c:86 +#, fuzzy +msgid "Sharpen Amount" +msgstr "Ter?v?itys" + +#: plugins/denoise/denoise.c:87 +msgid "How much image will be sharpened" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:105 +#: plugins/output-jpegfile/output-jpegfile.c:87 +#, fuzzy +msgid "JPEG Quality" +msgstr "JPEG-laatu" + +#: plugins/output-flickr/output-flickr.c:112 +#, fuzzy +msgid "Title" +msgstr "_Tiedosto" + +#: plugins/output-flickr/output-flickr.c:127 +msgid "Description" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:133 +msgid "Tags" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:140 +msgid "Public (everyone can see this)" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:146 +msgid "Visible to Friends" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:152 +msgid "Visible to Family" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:156 +msgid "Upload photo to Flickr" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:305 +msgid "We recieved an error during authentication. Please try again." +msgstr "" + +#: plugins/output-flickr/output-flickr.c:308 +msgid "" +"Rawstudio were not able to upload the photo cause the authentication has " +"been revoked. Please re-authenticate Rawstudio to upload to Flickr." +msgstr "" + +#: plugins/output-flickr/output-flickr.c:311 +msgid "" +"It seems like rawstudio lost its authentication to upload to your account, " +"please re-authenticate." +msgstr "" + +#: plugins/output-flickr/output-flickr.c:315 +#, c-format +msgid "" +"%s\n" +"\n" +"Note: This error isn't catched by Rawstudio. Please let us know that you " +"found it and how to reproduce it so we can make a more useful errormessage. " +"Thanks!" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:317 +msgid "Flickr error" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:376 +msgid "" +"Rawstudio needs to be authenticated before it will be able to upload photos " +"to your Flickr account." +msgstr "" + +#: plugins/output-flickr/output-flickr.c:383 +msgid "Step 1:" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:384 +msgid "Step 2:" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:386 +msgid "Authenticate Rawstudio" +msgstr "" + +#: plugins/output-jpegfile/output-jpegfile.c:93 +msgid "JPEG (Joint Photographic Experts Group)" +msgstr "JPEG (Joint Photographic Experts Group)" + +#: plugins/output-pngfile/output-pngfile.c:79 +msgid "PNG (Portable Network Graphics)" +msgstr "PNG (Portable Network Graphics)" + +#: plugins/output-tifffile/output-tifffile.c:81 +msgid "Save uncompressed TIFF" +msgstr "Tallenna pakkaamaton TIFF" + +#: plugins/output-tifffile/output-tifffile.c:87 +msgid "Save 16 bit TIFF" +msgstr "" + +#: plugins/output-tifffile/output-tifffile.c:93 +#, fuzzy +msgid "TIFF (Tagged Image File Format)" +msgstr "8-bittinen TIFF (Tagged Image File Format)" + #~ msgid "Background renderer active" #~ msgstr "Taustan render?ij? on aktiivinen" @@ -1093,24 +1247,9 @@ #~ msgid "Filename:" #~ msgstr "Tiedoston nimi:" -#~ msgid "Save uncompressed TIFF" -#~ msgstr "Tallenna pakkaamaton TIFF" - -#~ msgid "JPEG Quality:" -#~ msgstr "JPEG-laatu" - #~ msgid "File export canceled" #~ msgstr "Tiedoston vienti keskeytettiin" -#~ msgid "JPEG (Joint Photographic Experts Group)" -#~ msgstr "JPEG (Joint Photographic Experts Group)" - -#~ msgid "PNG (Portable Network Graphics)" -#~ msgstr "PNG (Portable Network Graphics)" - -#~ msgid "8-bit TIFF (Tagged Image File Format)" -#~ msgstr "8-bittinen TIFF (Tagged Image File Format)" - #~ msgid "16-bit TIFF (Tagged Image File Format)" #~ msgstr "16-bit TIFF (Tagged Image File Format)" @@ -1120,9 +1259,6 @@ #~ msgid "Reset this setting" #~ msgstr "Palauta oletusarvo" -#~ msgid "Warmth/tint" -#~ msgstr "V?ril?mp?tila/v?ri" - #~ msgid "_Zoom to 100%" #~ msgstr "_Zoomaa 100%" Modified: trunk/po/fr.po =================================================================== --- trunk/po/fr.po 2009-09-28 16:45:47 UTC (rev 2676) +++ trunk/po/fr.po 2009-09-28 16:47:42 UTC (rev 2677) @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: Rawstudio 1.1.1\n" "Report-Msgid-Bugs-To: rawstudio-dev at rawstudio.org\n" -"POT-Creation-Date: 2009-09-28 00:09+0200\n" +"POT-Creation-Date: 2009-09-28 18:46+0200\n" "PO-Revision-Date: 2008-04-17 23:01+0100\n" "Last-Translator: Edouard Gomez \n" "Language-Team: Rawstudio development \n" @@ -17,6 +17,68 @@ "X-Poedit-Language: French\n" "X-Poedit-Country: FRANCE\n" +#. Build GUI +#: librawstudio/rs-settings.c:70 src/rs-actions.c:346 +msgid "Exposure" +msgstr "Exposition" + +#: librawstudio/rs-settings.c:75 src/gtk-helper.c:739 src/rs-actions.c:347 +msgid "Saturation" +msgstr "Saturation" + +#: librawstudio/rs-settings.c:80 src/rs-actions.c:348 +msgid "Hue" +msgstr "Teinte" + +#: librawstudio/rs-settings.c:85 src/rs-actions.c:349 +msgid "Contrast" +msgstr "Contraste" + +#: librawstudio/rs-settings.c:90 +#, fuzzy +msgid "Warmth" +msgstr "Temp?rature/Teinte" + +#: librawstudio/rs-settings.c:95 +msgid "Tint" +msgstr "" + +#: librawstudio/rs-settings.c:100 src/rs-actions.c:351 +msgid "Sharpen" +msgstr "Nettet?" + +#. FIXME: ? +#: librawstudio/rs-settings.c:105 plugins/denoise/denoise.c:94 +msgid "Denoise" +msgstr "" + +#. FIXME: ? +#: librawstudio/rs-settings.c:110 +#, fuzzy +msgid "Color Denoise" +msgstr "Couleurs" + +#: librawstudio/rs-settings.c:110 plugins/denoise/denoise.c:102 +#, fuzzy +msgid "Color denoise" +msgstr "Couleurs" + +#. FIXME: ? +#: librawstudio/rs-settings.c:115 +#, fuzzy +msgid "Red" +msgstr "Pr?t" + +#. FIXME: ? +#: librawstudio/rs-settings.c:120 +msgid "Green" +msgstr "" + +#. FIXME: ? +#: librawstudio/rs-settings.c:125 +msgid "Blue" +msgstr "" + #: src/filename.c:280 #, c-format msgid "%f - Original filename" @@ -101,10 +163,6 @@ msgid "Relative colormetric" msgstr "Colorim?trie relative" -#: src/gtk-helper.c:739 src/rs-actions.c:347 -msgid "Saturation" -msgstr "Saturation" - #: src/gtk-helper.c:740 msgid "Absolute colormetric" msgstr "Colorim?trie absolue" @@ -412,7 +470,7 @@ msgstr "Exporter les dimensions" #. All -#: src/rs-store.c:275 src/rs-store.c:834 +#: src/rs-store.c:275 src/rs-store.c:836 #, c-format msgid "* (%d)" msgstr "* (%d)" @@ -422,7 +480,7 @@ msgstr "Toutes les photos (y compris celles supprim?es)" #. 1 -#: src/rs-store.c:279 src/rs-store.c:835 +#: src/rs-store.c:279 src/rs-store.c:837 #, c-format msgid "1 (%d)" msgstr "1 (%d)" @@ -432,7 +490,7 @@ msgstr "Photos de priorit? 1" #. 2 -#: src/rs-store.c:283 src/rs-store.c:836 +#: src/rs-store.c:283 src/rs-store.c:838 #, c-format msgid "2 (%d)" msgstr "2 (%d)" @@ -442,7 +500,7 @@ msgstr "Photos de priorit? 2" #. 3 -#: src/rs-store.c:287 src/rs-store.c:837 +#: src/rs-store.c:287 src/rs-store.c:839 #, c-format msgid "3 (%d)" msgstr "3 (%d)" @@ -452,7 +510,7 @@ msgstr "Photos de priorit? 3" #. Unsorted -#: src/rs-store.c:291 src/rs-store.c:838 +#: src/rs-store.c:291 src/rs-store.c:840 #, c-format msgid "U (%d)" msgstr "U (%d)" @@ -462,7 +520,7 @@ msgstr "Photos sans priorit?" #. Deleted -#: src/rs-store.c:295 src/rs-store.c:839 +#: src/rs-store.c:295 src/rs-store.c:841 #, c-format msgid "D (%d)" msgstr "D (%d)" @@ -480,39 +538,39 @@ msgid "Priorities" msgstr "Priorit?s" -#: src/rs-store.c:527 +#: src/rs-store.c:529 #, c-format msgid "" "%s\n" "\n" msgstr "" -#: src/rs-store.c:530 +#: src/rs-store.c:532 #, c-format msgid "Focal length: %dmm\n" msgstr "" -#: src/rs-store.c:533 +#: src/rs-store.c:535 #, c-format msgid "Shutter speed: %.1fs\n" msgstr "" -#: src/rs-store.c:535 +#: src/rs-store.c:537 #, c-format msgid "Shutter speed: 1/%.0fs\n" msgstr "" -#: src/rs-store.c:538 +#: src/rs-store.c:540 #, c-format msgid "Aperture: F/%.01f\n" msgstr "" -#: src/rs-store.c:541 +#: src/rs-store.c:543 #, c-format msgid "ISO: %u\n" msgstr "" -#: src/rs-store.c:544 +#: src/rs-store.c:546 #, c-format msgid "Time: %s" msgstr "" @@ -729,27 +787,10 @@ msgid "Copied settings" msgstr "Param?tres copi?s" -#. Build GUI -#: src/rs-actions.c:346 -msgid "Exposure" -msgstr "Exposition" - -#: src/rs-actions.c:348 -msgid "Hue" -msgstr "Teinte" - -#: src/rs-actions.c:349 -msgid "Contrast" -msgstr "Contraste" - #: src/rs-actions.c:350 msgid "White balance" msgstr "Balance des blancs" -#: src/rs-actions.c:351 -msgid "Sharpen" -msgstr "Nettet?" - #: src/rs-actions.c:352 msgid "Channel mixer" msgstr "" @@ -1075,6 +1116,119 @@ msgid "Shutterspeed" msgstr "" +#: plugins/denoise/denoise.c:86 +#, fuzzy +msgid "Sharpen Amount" +msgstr "Nettet?" + +#: plugins/denoise/denoise.c:87 +msgid "How much image will be sharpened" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:105 +#: plugins/output-jpegfile/output-jpegfile.c:87 +#, fuzzy +msgid "JPEG Quality" +msgstr "Qualit? JPEG" + +#: plugins/output-flickr/output-flickr.c:112 +#, fuzzy +msgid "Title" +msgstr "_Fichier" + +#: plugins/output-flickr/output-flickr.c:127 +msgid "Description" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:133 +msgid "Tags" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:140 +msgid "Public (everyone can see this)" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:146 +msgid "Visible to Friends" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:152 +msgid "Visible to Family" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:156 +msgid "Upload photo to Flickr" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:305 +msgid "We recieved an error during authentication. Please try again." +msgstr "" + +#: plugins/output-flickr/output-flickr.c:308 +msgid "" +"Rawstudio were not able to upload the photo cause the authentication has " +"been revoked. Please re-authenticate Rawstudio to upload to Flickr." +msgstr "" + +#: plugins/output-flickr/output-flickr.c:311 +msgid "" +"It seems like rawstudio lost its authentication to upload to your account, " +"please re-authenticate." +msgstr "" + +#: plugins/output-flickr/output-flickr.c:315 +#, c-format +msgid "" +"%s\n" +"\n" +"Note: This error isn't catched by Rawstudio. Please let us know that you " +"found it and how to reproduce it so we can make a more useful errormessage. " +"Thanks!" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:317 +msgid "Flickr error" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:376 +msgid "" +"Rawstudio needs to be authenticated before it will be able to upload photos " +"to your Flickr account." +msgstr "" + +#: plugins/output-flickr/output-flickr.c:383 +msgid "Step 1:" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:384 +msgid "Step 2:" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:386 +msgid "Authenticate Rawstudio" +msgstr "" + +#: plugins/output-jpegfile/output-jpegfile.c:93 +msgid "JPEG (Joint Photographic Experts Group)" +msgstr "JPEG (Joint Photographic Experts Group)" + +#: plugins/output-pngfile/output-pngfile.c:79 +msgid "PNG (Portable Network Graphics)" +msgstr "PNG (Portable Network Graphics)" + +#: plugins/output-tifffile/output-tifffile.c:81 +msgid "Save uncompressed TIFF" +msgstr "Sauvegarder en TIFF non compress?" + +#: plugins/output-tifffile/output-tifffile.c:87 +msgid "Save 16 bit TIFF" +msgstr "" + +#: plugins/output-tifffile/output-tifffile.c:93 +#, fuzzy +msgid "TIFF (Tagged Image File Format)" +msgstr "8-bit TIFF (Tagged Image File Format)" + #~ msgid "Background renderer active" #~ msgstr "Rendu actif en t?che de fond" @@ -1084,24 +1238,9 @@ #~ msgid "Filename:" #~ msgstr "Nom de fichier :" -#~ msgid "Save uncompressed TIFF" -#~ msgstr "Sauvegarder en TIFF non compress?" - -#~ msgid "JPEG Quality:" -#~ msgstr "Qualit? JPEG" - #~ msgid "File export canceled" #~ msgstr "Exportation du fichier annul?" -#~ msgid "JPEG (Joint Photographic Experts Group)" -#~ msgstr "JPEG (Joint Photographic Experts Group)" - -#~ msgid "PNG (Portable Network Graphics)" -#~ msgstr "PNG (Portable Network Graphics)" - -#~ msgid "8-bit TIFF (Tagged Image File Format)" -#~ msgstr "8-bit TIFF (Tagged Image File Format)" - #~ msgid "16-bit TIFF (Tagged Image File Format)" #~ msgstr "16-bit TIFF (Tagged Image File Format)" @@ -1111,9 +1250,6 @@ #~ msgid "Reset this setting" #~ msgstr "R?initialiser ce param?tre" -#~ msgid "Warmth/tint" -#~ msgstr "Temp?rature/Teinte" - #~ msgid "_Zoom to 100%" #~ msgstr "_Zoom 100%" Modified: trunk/po/it.po =================================================================== --- trunk/po/it.po 2009-09-28 16:45:47 UTC (rev 2676) +++ trunk/po/it.po 2009-09-28 16:47:42 UTC (rev 2677) @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: Rawstudio 1.1.1\n" "Report-Msgid-Bugs-To: rawstudio-dev at rawstudio.org\n" -"POT-Creation-Date: 2009-09-28 00:09+0200\n" +"POT-Creation-Date: 2009-09-28 18:46+0200\n" "PO-Revision-Date: 2008-04-19 19:26+0100\n" "Last-Translator: Simone Contini \n" "Language-Team: Rawstudio development \n" @@ -17,6 +17,68 @@ "X-Poedit-Language: Italian\n" "X-Poedit-Country: ITALY\n" +#. Build GUI +#: librawstudio/rs-settings.c:70 src/rs-actions.c:346 +msgid "Exposure" +msgstr "Esposizione" + +#: librawstudio/rs-settings.c:75 src/gtk-helper.c:739 src/rs-actions.c:347 +msgid "Saturation" +msgstr "Saturazione" + +#: librawstudio/rs-settings.c:80 src/rs-actions.c:348 +msgid "Hue" +msgstr "Tinta" + +#: librawstudio/rs-settings.c:85 src/rs-actions.c:349 +msgid "Contrast" +msgstr "Contrasto" + +#: librawstudio/rs-settings.c:90 +#, fuzzy +msgid "Warmth" +msgstr "Temperatura di colore/Tinta" + +#: librawstudio/rs-settings.c:95 +msgid "Tint" +msgstr "" + +#: librawstudio/rs-settings.c:100 src/rs-actions.c:351 +msgid "Sharpen" +msgstr "Nitidezza" + +#. FIXME: ? +#: librawstudio/rs-settings.c:105 plugins/denoise/denoise.c:94 +msgid "Denoise" +msgstr "" + +#. FIXME: ? +#: librawstudio/rs-settings.c:110 +#, fuzzy +msgid "Color Denoise" +msgstr "Colore" + +#: librawstudio/rs-settings.c:110 plugins/denoise/denoise.c:102 +#, fuzzy +msgid "Color denoise" +msgstr "Colore" + +#. FIXME: ? +#: librawstudio/rs-settings.c:115 +#, fuzzy +msgid "Red" +msgstr "Pronto" + +#. FIXME: ? +#: librawstudio/rs-settings.c:120 +msgid "Green" +msgstr "" + +#. FIXME: ? +#: librawstudio/rs-settings.c:125 +msgid "Blue" +msgstr "" + #: src/filename.c:280 #, c-format msgid "%f - Original filename" @@ -101,10 +163,6 @@ msgid "Relative colormetric" msgstr "Colorimetrico relativo" -#: src/gtk-helper.c:739 src/rs-actions.c:347 -msgid "Saturation" -msgstr "Saturazione" - #: src/gtk-helper.c:740 msgid "Absolute colormetric" msgstr "Colorimetrico assoluto" @@ -412,7 +470,7 @@ msgstr "Dimensione di esportazione" #. All -#: src/rs-store.c:275 src/rs-store.c:834 +#: src/rs-store.c:275 src/rs-store.c:836 #, c-format msgid "* (%d)" msgstr "* (%d)" @@ -422,7 +480,7 @@ msgstr "Tutte le foto (escluse quelle cancellate)" #. 1 -#: src/rs-store.c:279 src/rs-store.c:835 +#: src/rs-store.c:279 src/rs-store.c:837 #, c-format msgid "1 (%d)" msgstr "1 (%d)" @@ -432,7 +490,7 @@ msgstr "Foto con contrassegno 1" #. 2 -#: src/rs-store.c:283 src/rs-store.c:836 +#: src/rs-store.c:283 src/rs-store.c:838 #, c-format msgid "2 (%d)" msgstr "2 (%d)" @@ -442,7 +500,7 @@ msgstr "Foto con contrassegno 2" #. 3 -#: src/rs-store.c:287 src/rs-store.c:837 +#: src/rs-store.c:287 src/rs-store.c:839 #, c-format msgid "3 (%d)" msgstr "3 (%d)" @@ -452,7 +510,7 @@ msgstr "Foto con contrassegno 3" #. Unsorted -#: src/rs-store.c:291 src/rs-store.c:838 +#: src/rs-store.c:291 src/rs-store.c:840 #, c-format msgid "U (%d)" msgstr "U (%d)" @@ -462,7 +520,7 @@ msgstr "Foto senza contrassegno" #. Deleted -#: src/rs-store.c:295 src/rs-store.c:839 +#: src/rs-store.c:295 src/rs-store.c:841 #, c-format msgid "D (%d)" msgstr "D (%d)" @@ -480,39 +538,39 @@ msgid "Priorities" msgstr "Contrassegni" -#: src/rs-store.c:527 +#: src/rs-store.c:529 #, c-format msgid "" "%s\n" "\n" msgstr "" -#: src/rs-store.c:530 +#: src/rs-store.c:532 #, c-format msgid "Focal length: %dmm\n" msgstr "" -#: src/rs-store.c:533 +#: src/rs-store.c:535 #, c-format msgid "Shutter speed: %.1fs\n" msgstr "" -#: src/rs-store.c:535 +#: src/rs-store.c:537 #, c-format msgid "Shutter speed: 1/%.0fs\n" msgstr "" -#: src/rs-store.c:538 +#: src/rs-store.c:540 #, c-format msgid "Aperture: F/%.01f\n" msgstr "" -#: src/rs-store.c:541 +#: src/rs-store.c:543 #, c-format msgid "ISO: %u\n" msgstr "" -#: src/rs-store.c:544 +#: src/rs-store.c:546 #, c-format msgid "Time: %s" msgstr "" @@ -729,27 +787,10 @@ msgid "Copied settings" msgstr "Impostazioni copiate" -#. Build GUI -#: src/rs-actions.c:346 -msgid "Exposure" -msgstr "Esposizione" - -#: src/rs-actions.c:348 -msgid "Hue" -msgstr "Tinta" - -#: src/rs-actions.c:349 -msgid "Contrast" -msgstr "Contrasto" - #: src/rs-actions.c:350 msgid "White balance" msgstr "Bilanciamento del bianco" -#: src/rs-actions.c:351 -msgid "Sharpen" -msgstr "Nitidezza" - #: src/rs-actions.c:352 msgid "Channel mixer" msgstr "" @@ -1075,6 +1116,119 @@ msgid "Shutterspeed" msgstr "" +#: plugins/denoise/denoise.c:86 +#, fuzzy +msgid "Sharpen Amount" +msgstr "Nitidezza" + +#: plugins/denoise/denoise.c:87 +msgid "How much image will be sharpened" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:105 +#: plugins/output-jpegfile/output-jpegfile.c:87 +#, fuzzy +msgid "JPEG Quality" +msgstr "Qualit? JPEG:" + +#: plugins/output-flickr/output-flickr.c:112 +#, fuzzy +msgid "Title" +msgstr "_File" + +#: plugins/output-flickr/output-flickr.c:127 +msgid "Description" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:133 +msgid "Tags" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:140 +msgid "Public (everyone can see this)" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:146 +msgid "Visible to Friends" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:152 +msgid "Visible to Family" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:156 +msgid "Upload photo to Flickr" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:305 +msgid "We recieved an error during authentication. Please try again." +msgstr "" + +#: plugins/output-flickr/output-flickr.c:308 +msgid "" +"Rawstudio were not able to upload the photo cause the authentication has " +"been revoked. Please re-authenticate Rawstudio to upload to Flickr." +msgstr "" + +#: plugins/output-flickr/output-flickr.c:311 +msgid "" +"It seems like rawstudio lost its authentication to upload to your account, " +"please re-authenticate." +msgstr "" + +#: plugins/output-flickr/output-flickr.c:315 +#, c-format +msgid "" +"%s\n" +"\n" +"Note: This error isn't catched by Rawstudio. Please let us know that you " +"found it and how to reproduce it so we can make a more useful errormessage. " +"Thanks!" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:317 +msgid "Flickr error" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:376 +msgid "" +"Rawstudio needs to be authenticated before it will be able to upload photos " +"to your Flickr account." +msgstr "" + +#: plugins/output-flickr/output-flickr.c:383 +msgid "Step 1:" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:384 +msgid "Step 2:" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:386 +msgid "Authenticate Rawstudio" +msgstr "" + +#: plugins/output-jpegfile/output-jpegfile.c:93 +msgid "JPEG (Joint Photographic Experts Group)" +msgstr "JPEG (Joint Photographic Experts Group)" + +#: plugins/output-pngfile/output-pngfile.c:79 +msgid "PNG (Portable Network Graphics)" +msgstr "PNG (Portable Network Graphics)" + +#: plugins/output-tifffile/output-tifffile.c:81 +msgid "Save uncompressed TIFF" +msgstr "Salva TIFF non compresso" + +#: plugins/output-tifffile/output-tifffile.c:87 +msgid "Save 16 bit TIFF" +msgstr "" + +#: plugins/output-tifffile/output-tifffile.c:93 +#, fuzzy +msgid "TIFF (Tagged Image File Format)" +msgstr "8-bit TIFF (Tagged Image File Format)" + #~ msgid "Background renderer active" #~ msgstr "Visualizzazione in sottofondo attiva" @@ -1084,24 +1238,9 @@ #~ msgid "Filename:" #~ msgstr "Nome file:" -#~ msgid "Save uncompressed TIFF" -#~ msgstr "Salva TIFF non compresso" - -#~ msgid "JPEG Quality:" -#~ msgstr "Qualit? JPEG:" - #~ msgid "File export canceled" #~ msgstr "Esportazione file cancellata" -#~ msgid "JPEG (Joint Photographic Experts Group)" -#~ msgstr "JPEG (Joint Photographic Experts Group)" - -#~ msgid "PNG (Portable Network Graphics)" -#~ msgstr "PNG (Portable Network Graphics)" - -#~ msgid "8-bit TIFF (Tagged Image File Format)" -#~ msgstr "8-bit TIFF (Tagged Image File Format)" - #~ msgid "16-bit TIFF (Tagged Image File Format)" #~ msgstr "16-bit TIFF (Tagged Image File Format)" @@ -1111,9 +1250,6 @@ #~ msgid "Reset this setting" #~ msgstr "Ripristina questo settaggio" -#~ msgid "Warmth/tint" -#~ msgstr "Temperatura di colore/Tinta" - #~ msgid "_Zoom to 100%" #~ msgstr "_Zoom 100%" Modified: trunk/po/nb.po =================================================================== --- trunk/po/nb.po 2009-09-28 16:45:47 UTC (rev 2676) +++ trunk/po/nb.po 2009-09-28 16:47:42 UTC (rev 2677) @@ -6,7 +6,7 @@ msgstr "" "Project-Id-Version: Rawstudio 1.1.1\n" "Report-Msgid-Bugs-To: rawstudio-dev at rawstudio.org\n" -"POT-Creation-Date: 2009-09-28 00:09+0200\n" +"POT-Creation-Date: 2009-09-28 18:46+0200\n" "PO-Revision-Date: 2008-04-17 21:48+0100\n" "Last-Translator: Anders Kvist \n" "Language-Team: Rawstudio development \n" @@ -16,6 +16,68 @@ "X-Poedit-Language: Norwegian Bokmal\n" "X-Poedit-Country: NORWAY\n" +#. Build GUI +#: librawstudio/rs-settings.c:70 src/rs-actions.c:346 +msgid "Exposure" +msgstr "Eksponering" + +#: librawstudio/rs-settings.c:75 src/gtk-helper.c:739 src/rs-actions.c:347 +msgid "Saturation" +msgstr "Metning" + +#: librawstudio/rs-settings.c:80 src/rs-actions.c:348 +msgid "Hue" +msgstr "Fargetone" + +#: librawstudio/rs-settings.c:85 src/rs-actions.c:349 +msgid "Contrast" +msgstr "Kontrast" + +#: librawstudio/rs-settings.c:90 +#, fuzzy +msgid "Warmth" +msgstr "Varme/nyanse" + +#: librawstudio/rs-settings.c:95 +msgid "Tint" +msgstr "" + +#: librawstudio/rs-settings.c:100 src/rs-actions.c:351 +msgid "Sharpen" +msgstr "Gj?r skarpere" + +#. FIXME: ? +#: librawstudio/rs-settings.c:105 plugins/denoise/denoise.c:94 +msgid "Denoise" +msgstr "" + +#. FIXME: ? +#: librawstudio/rs-settings.c:110 +#, fuzzy +msgid "Color Denoise" +msgstr "Fargestyring" + +#: librawstudio/rs-settings.c:110 plugins/denoise/denoise.c:102 +#, fuzzy +msgid "Color denoise" +msgstr "Fargestyring" + +#. FIXME: ? +#: librawstudio/rs-settings.c:115 +#, fuzzy +msgid "Red" +msgstr "Klar" + +#. FIXME: ? +#: librawstudio/rs-settings.c:120 +msgid "Green" +msgstr "" + +#. FIXME: ? +#: librawstudio/rs-settings.c:125 +msgid "Blue" +msgstr "" + #: src/filename.c:280 #, c-format msgid "%f - Original filename" @@ -100,10 +162,6 @@ msgid "Relative colormetric" msgstr "Relativ fargemetrikk" -#: src/gtk-helper.c:739 src/rs-actions.c:347 -msgid "Saturation" -msgstr "Metning" - #: src/gtk-helper.c:740 msgid "Absolute colormetric" msgstr "Absolutt fargemetrikk" @@ -411,7 +469,7 @@ msgstr "Eksporteringsdimensjoner" #. All -#: src/rs-store.c:275 src/rs-store.c:834 +#: src/rs-store.c:275 src/rs-store.c:836 #, c-format msgid "* (%d)" msgstr "* (%d)" @@ -421,7 +479,7 @@ msgstr "Alle bilder (unntatt slettede)" #. 1 -#: src/rs-store.c:279 src/rs-store.c:835 +#: src/rs-store.c:279 src/rs-store.c:837 #, c-format msgid "1 (%d)" msgstr "1 (%d)" @@ -431,7 +489,7 @@ msgstr "Prioritet 1" #. 2 -#: src/rs-store.c:283 src/rs-store.c:836 +#: src/rs-store.c:283 src/rs-store.c:838 #, c-format msgid "2 (%d)" msgstr "2 (%d)" @@ -441,7 +499,7 @@ msgstr "Prioritet 2" #. 3 -#: src/rs-store.c:287 src/rs-store.c:837 +#: src/rs-store.c:287 src/rs-store.c:839 #, c-format msgid "3 (%d)" msgstr "3 (%d)" @@ -451,7 +509,7 @@ msgstr "Prioritet 3" #. Unsorted -#: src/rs-store.c:291 src/rs-store.c:838 +#: src/rs-store.c:291 src/rs-store.c:840 #, c-format msgid "U (%d)" msgstr "U (%d)" @@ -461,7 +519,7 @@ msgstr "Uprioriterte bilder" #. Deleted -#: src/rs-store.c:295 src/rs-store.c:839 +#: src/rs-store.c:295 src/rs-store.c:841 #, c-format msgid "D (%d)" msgstr "S (%d)" @@ -479,39 +537,39 @@ msgid "Priorities" msgstr "Prioritet" -#: src/rs-store.c:527 +#: src/rs-store.c:529 #, c-format msgid "" "%s\n" "\n" msgstr "" -#: src/rs-store.c:530 +#: src/rs-store.c:532 #, c-format msgid "Focal length: %dmm\n" msgstr "" -#: src/rs-store.c:533 +#: src/rs-store.c:535 #, c-format msgid "Shutter speed: %.1fs\n" msgstr "" -#: src/rs-store.c:535 +#: src/rs-store.c:537 #, c-format msgid "Shutter speed: 1/%.0fs\n" msgstr "" -#: src/rs-store.c:538 +#: src/rs-store.c:540 #, c-format msgid "Aperture: F/%.01f\n" msgstr "" -#: src/rs-store.c:541 +#: src/rs-store.c:543 #, c-format msgid "ISO: %u\n" msgstr "" -#: src/rs-store.c:544 +#: src/rs-store.c:546 #, c-format msgid "Time: %s" msgstr "" @@ -728,27 +786,10 @@ msgid "Copied settings" msgstr "Innstillinger kopiert" -#. Build GUI -#: src/rs-actions.c:346 -msgid "Exposure" -msgstr "Eksponering" - -#: src/rs-actions.c:348 -msgid "Hue" -msgstr "Fargetone" - -#: src/rs-actions.c:349 -msgid "Contrast" -msgstr "Kontrast" - #: src/rs-actions.c:350 msgid "White balance" msgstr "Hvitbalanse" -#: src/rs-actions.c:351 -msgid "Sharpen" -msgstr "Gj?r skarpere" - #: src/rs-actions.c:352 msgid "Channel mixer" msgstr "" @@ -1074,6 +1115,119 @@ msgid "Shutterspeed" msgstr "" +#: plugins/denoise/denoise.c:86 +#, fuzzy +msgid "Sharpen Amount" +msgstr "Gj?r skarpere" + +#: plugins/denoise/denoise.c:87 +msgid "How much image will be sharpened" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:105 +#: plugins/output-jpegfile/output-jpegfile.c:87 +#, fuzzy +msgid "JPEG Quality" +msgstr "JPEG-kvalitet:" + +#: plugins/output-flickr/output-flickr.c:112 +#, fuzzy +msgid "Title" +msgstr "_Fil" + +#: plugins/output-flickr/output-flickr.c:127 +msgid "Description" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:133 +msgid "Tags" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:140 +msgid "Public (everyone can see this)" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:146 +msgid "Visible to Friends" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:152 +msgid "Visible to Family" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:156 +msgid "Upload photo to Flickr" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:305 +msgid "We recieved an error during authentication. Please try again." +msgstr "" + +#: plugins/output-flickr/output-flickr.c:308 +msgid "" +"Rawstudio were not able to upload the photo cause the authentication has " +"been revoked. Please re-authenticate Rawstudio to upload to Flickr." +msgstr "" + +#: plugins/output-flickr/output-flickr.c:311 +msgid "" +"It seems like rawstudio lost its authentication to upload to your account, " +"please re-authenticate." +msgstr "" + +#: plugins/output-flickr/output-flickr.c:315 +#, c-format +msgid "" +"%s\n" +"\n" +"Note: This error isn't catched by Rawstudio. Please let us know that you " +"found it and how to reproduce it so we can make a more useful errormessage. " +"Thanks!" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:317 +msgid "Flickr error" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:376 +msgid "" +"Rawstudio needs to be authenticated before it will be able to upload photos " +"to your Flickr account." +msgstr "" + +#: plugins/output-flickr/output-flickr.c:383 +msgid "Step 1:" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:384 +msgid "Step 2:" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:386 +msgid "Authenticate Rawstudio" +msgstr "" + +#: plugins/output-jpegfile/output-jpegfile.c:93 +msgid "JPEG (Joint Photographic Experts Group)" +msgstr "JPEG" + +#: plugins/output-pngfile/output-pngfile.c:79 +msgid "PNG (Portable Network Graphics)" +msgstr "PNG" + +#: plugins/output-tifffile/output-tifffile.c:81 +msgid "Save uncompressed TIFF" +msgstr "Lagre TIFF ukomprimert" + +#: plugins/output-tifffile/output-tifffile.c:87 +msgid "Save 16 bit TIFF" +msgstr "" + +#: plugins/output-tifffile/output-tifffile.c:93 +#, fuzzy +msgid "TIFF (Tagged Image File Format)" +msgstr "8-bits TIFF" + #~ msgid "Background renderer active" #~ msgstr "Ferdigstiller i bakgrunnen" @@ -1083,24 +1237,9 @@ #~ msgid "Filename:" #~ msgstr "Filnavn:" -#~ msgid "Save uncompressed TIFF" -#~ msgstr "Lagre TIFF ukomprimert" - -#~ msgid "JPEG Quality:" -#~ msgstr "JPEG-kvalitet:" - #~ msgid "File export canceled" #~ msgstr "Eksportering avbrutt" -#~ msgid "JPEG (Joint Photographic Experts Group)" -#~ msgstr "JPEG" - -#~ msgid "PNG (Portable Network Graphics)" -#~ msgstr "PNG" - -#~ msgid "8-bit TIFF (Tagged Image File Format)" -#~ msgstr "8-bits TIFF" - #~ msgid "16-bit TIFF (Tagged Image File Format)" #~ msgstr "16-bits TIFF" @@ -1110,9 +1249,6 @@ #~ msgid "Reset this setting" #~ msgstr "Nullstill" -#~ msgid "Warmth/tint" -#~ msgstr "Varme/nyanse" - #~ msgid "_Zoom to 100%" #~ msgstr "_Piksel for piksel (100%)" Modified: trunk/po/nl.po =================================================================== --- trunk/po/nl.po 2009-09-28 16:45:47 UTC (rev 2676) +++ trunk/po/nl.po 2009-09-28 16:47:42 UTC (rev 2677) @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: Rawstudio 1.1.1\n" "Report-Msgid-Bugs-To: rawstudio-dev at rawstudio.org\n" -"POT-Creation-Date: 2009-09-28 00:09+0200\n" +"POT-Creation-Date: 2009-09-28 18:46+0200\n" "PO-Revision-Date: 2008-05-05 00:22+0100\n" "Last-Translator: O. Lavell \n" "Language-Team: Rawstudio development \n" @@ -15,6 +15,68 @@ "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +#. Build GUI +#: librawstudio/rs-settings.c:70 src/rs-actions.c:346 +msgid "Exposure" +msgstr "Belichting" + +#: librawstudio/rs-settings.c:75 src/gtk-helper.c:739 src/rs-actions.c:347 +msgid "Saturation" +msgstr "Verzadiging" + +#: librawstudio/rs-settings.c:80 src/rs-actions.c:348 +msgid "Hue" +msgstr "Tint" + +#: librawstudio/rs-settings.c:85 src/rs-actions.c:349 +msgid "Contrast" +msgstr "Contrast" + +#: librawstudio/rs-settings.c:90 +#, fuzzy +msgid "Warmth" +msgstr "Temperatuur" + +#: librawstudio/rs-settings.c:95 +msgid "Tint" +msgstr "" + +#: librawstudio/rs-settings.c:100 src/rs-actions.c:351 +msgid "Sharpen" +msgstr "Verscherpen" + +#. FIXME: ? +#: librawstudio/rs-settings.c:105 plugins/denoise/denoise.c:94 +msgid "Denoise" +msgstr "" + +#. FIXME: ? +#: librawstudio/rs-settings.c:110 +#, fuzzy +msgid "Color Denoise" +msgstr "Kleuren" + +#: librawstudio/rs-settings.c:110 plugins/denoise/denoise.c:102 +#, fuzzy +msgid "Color denoise" +msgstr "Kleuren" + +#. FIXME: ? +#: librawstudio/rs-settings.c:115 +#, fuzzy +msgid "Red" +msgstr "Klaar" + +#. FIXME: ? +#: librawstudio/rs-settings.c:120 +msgid "Green" +msgstr "" + +#. FIXME: ? +#: librawstudio/rs-settings.c:125 +msgid "Blue" +msgstr "" + #: src/filename.c:280 #, c-format msgid "%f - Original filename" @@ -99,10 +161,6 @@ msgid "Relative colormetric" msgstr "Relative colormetric" -#: src/gtk-helper.c:739 src/rs-actions.c:347 -msgid "Saturation" -msgstr "Verzadiging" - #: src/gtk-helper.c:740 msgid "Absolute colormetric" msgstr "Absolute colormetric" @@ -402,7 +460,7 @@ msgstr "" #. All -#: src/rs-store.c:275 src/rs-store.c:834 +#: src/rs-store.c:275 src/rs-store.c:836 #, c-format msgid "* (%d)" msgstr "* (%d)" @@ -412,7 +470,7 @@ msgstr "" #. 1 -#: src/rs-store.c:279 src/rs-store.c:835 +#: src/rs-store.c:279 src/rs-store.c:837 #, c-format msgid "1 (%d)" msgstr "1 (%d)" @@ -422,7 +480,7 @@ msgstr "" #. 2 -#: src/rs-store.c:283 src/rs-store.c:836 +#: src/rs-store.c:283 src/rs-store.c:838 #, c-format msgid "2 (%d)" msgstr "2 (%d)" @@ -432,7 +490,7 @@ msgstr "" #. 3 -#: src/rs-store.c:287 src/rs-store.c:837 +#: src/rs-store.c:287 src/rs-store.c:839 #, c-format msgid "3 (%d)" msgstr "3 (%d)" @@ -442,7 +500,7 @@ msgstr "" #. Unsorted -#: src/rs-store.c:291 src/rs-store.c:838 +#: src/rs-store.c:291 src/rs-store.c:840 #, c-format msgid "U (%d)" msgstr "U (%d)" @@ -452,7 +510,7 @@ msgstr "" #. Deleted -#: src/rs-store.c:295 src/rs-store.c:839 +#: src/rs-store.c:295 src/rs-store.c:841 #, c-format msgid "D (%d)" msgstr "D (%d)" @@ -470,39 +528,39 @@ msgid "Priorities" msgstr "Prioriteiten" -#: src/rs-store.c:527 +#: src/rs-store.c:529 #, c-format msgid "" "%s\n" "\n" msgstr "" -#: src/rs-store.c:530 +#: src/rs-store.c:532 #, c-format msgid "Focal length: %dmm\n" msgstr "" -#: src/rs-store.c:533 +#: src/rs-store.c:535 #, c-format msgid "Shutter speed: %.1fs\n" msgstr "" -#: src/rs-store.c:535 +#: src/rs-store.c:537 #, c-format msgid "Shutter speed: 1/%.0fs\n" msgstr "" -#: src/rs-store.c:538 +#: src/rs-store.c:540 #, c-format msgid "Aperture: F/%.01f\n" msgstr "" -#: src/rs-store.c:541 +#: src/rs-store.c:543 #, c-format msgid "ISO: %u\n" msgstr "" -#: src/rs-store.c:544 +#: src/rs-store.c:546 #, c-format msgid "Time: %s" msgstr "" @@ -718,27 +776,10 @@ msgid "Copied settings" msgstr "Gekopieerde instellingen" -#. Build GUI -#: src/rs-actions.c:346 -msgid "Exposure" -msgstr "Belichting" - -#: src/rs-actions.c:348 -msgid "Hue" -msgstr "Tint" - -#: src/rs-actions.c:349 -msgid "Contrast" -msgstr "Contrast" - #: src/rs-actions.c:350 msgid "White balance" msgstr "Witbalans" -#: src/rs-actions.c:351 -msgid "Sharpen" -msgstr "Verscherpen" - #: src/rs-actions.c:352 msgid "Channel mixer" msgstr "" @@ -1062,6 +1103,119 @@ msgid "Shutterspeed" msgstr "" +#: plugins/denoise/denoise.c:86 +#, fuzzy +msgid "Sharpen Amount" +msgstr "Verscherpen" + +#: plugins/denoise/denoise.c:87 +msgid "How much image will be sharpened" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:105 +#: plugins/output-jpegfile/output-jpegfile.c:87 +#, fuzzy +msgid "JPEG Quality" +msgstr "JPEG-kwaliteit:" + +#: plugins/output-flickr/output-flickr.c:112 +#, fuzzy +msgid "Title" +msgstr "_Bestand" + +#: plugins/output-flickr/output-flickr.c:127 +msgid "Description" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:133 +msgid "Tags" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:140 +msgid "Public (everyone can see this)" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:146 +msgid "Visible to Friends" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:152 +msgid "Visible to Family" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:156 +msgid "Upload photo to Flickr" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:305 +msgid "We recieved an error during authentication. Please try again." +msgstr "" + +#: plugins/output-flickr/output-flickr.c:308 +msgid "" +"Rawstudio were not able to upload the photo cause the authentication has " +"been revoked. Please re-authenticate Rawstudio to upload to Flickr." +msgstr "" + +#: plugins/output-flickr/output-flickr.c:311 +msgid "" +"It seems like rawstudio lost its authentication to upload to your account, " +"please re-authenticate." +msgstr "" + +#: plugins/output-flickr/output-flickr.c:315 +#, c-format +msgid "" +"%s\n" +"\n" +"Note: This error isn't catched by Rawstudio. Please let us know that you " +"found it and how to reproduce it so we can make a more useful errormessage. " +"Thanks!" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:317 +msgid "Flickr error" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:376 +msgid "" +"Rawstudio needs to be authenticated before it will be able to upload photos " +"to your Flickr account." +msgstr "" + +#: plugins/output-flickr/output-flickr.c:383 +msgid "Step 1:" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:384 +msgid "Step 2:" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:386 +msgid "Authenticate Rawstudio" +msgstr "" + +#: plugins/output-jpegfile/output-jpegfile.c:93 +msgid "JPEG (Joint Photographic Experts Group)" +msgstr "JPEG (Joint Photographic Experts Group)" + +#: plugins/output-pngfile/output-pngfile.c:79 +msgid "PNG (Portable Network Graphics)" +msgstr "PNG (Portable Network Graphics)" + +#: plugins/output-tifffile/output-tifffile.c:81 +msgid "Save uncompressed TIFF" +msgstr "Ongecomprimeerde TIFF opslaan" + +#: plugins/output-tifffile/output-tifffile.c:87 +msgid "Save 16 bit TIFF" +msgstr "" + +#: plugins/output-tifffile/output-tifffile.c:93 +#, fuzzy +msgid "TIFF (Tagged Image File Format)" +msgstr "8-bit TIFF (Tagged Image File Format)" + #~ msgid "Background renderer active" #~ msgstr "Renderer op achtergrond actief" @@ -1071,33 +1225,15 @@ #~ msgid "Filename:" #~ msgstr "Bestandsnaam:" -#~ msgid "Save uncompressed TIFF" -#~ msgstr "Ongecomprimeerde TIFF opslaan" - -#~ msgid "JPEG Quality:" -#~ msgstr "JPEG-kwaliteit:" - #~ msgid "File export canceled" #~ msgstr "Bestandsexport geannuleerd" -#~ msgid "JPEG (Joint Photographic Experts Group)" -#~ msgstr "JPEG (Joint Photographic Experts Group)" - -#~ msgid "PNG (Portable Network Graphics)" -#~ msgstr "PNG (Portable Network Graphics)" - -#~ msgid "8-bit TIFF (Tagged Image File Format)" -#~ msgstr "8-bit TIFF (Tagged Image File Format)" - #~ msgid "16-bit TIFF (Tagged Image File Format)" #~ msgstr "16-bit TIFF (Tagged Image File Format)" #~ msgid "Rotate the photo 180 degrees" #~ msgstr "180 graden roteren" -#~ msgid "Warmth/tint" -#~ msgstr "Temperatuur" - #~ msgid "_Zoom to 100%" #~ msgstr "_Zoom naar 100%" Modified: trunk/po/pl.po =================================================================== --- trunk/po/pl.po 2009-09-28 16:45:47 UTC (rev 2676) +++ trunk/po/pl.po 2009-09-28 16:47:42 UTC (rev 2677) @@ -11,7 +11,7 @@ msgstr "" "Project-Id-Version: Rawstudio 1.1.1\n" "Report-Msgid-Bugs-To: rawstudio-dev at rawstudio.org\n" -"POT-Creation-Date: 2009-09-28 00:09+0200\n" +"POT-Creation-Date: 2009-09-28 18:46+0200\n" "PO-Revision-Date: 2008-09-24 01:00+0100\n" "Last-Translator: ?ukasz Romanowicz \n" "Language-Team: Rawstudio development \n" @@ -23,6 +23,69 @@ "X-Poedit-Language: Polish\n" "X-Poedit-Country: POLAND\n" +#. Build GUI +#: librawstudio/rs-settings.c:70 src/rs-actions.c:346 +msgid "Exposure" +msgstr "Ekspozycja" + +# should be a different string for color rendering intent +#: librawstudio/rs-settings.c:75 src/gtk-helper.c:739 src/rs-actions.c:347 +msgid "Saturation" +msgstr "Nasycenie" + +#: librawstudio/rs-settings.c:80 src/rs-actions.c:348 +msgid "Hue" +msgstr "Barwa" + +#: librawstudio/rs-settings.c:85 src/rs-actions.c:349 +msgid "Contrast" +msgstr "Kontrast" + +#: librawstudio/rs-settings.c:90 +#, fuzzy +msgid "Warmth" +msgstr "Temperatura/zabarwienie" + +#: librawstudio/rs-settings.c:95 +msgid "Tint" +msgstr "" + +#: librawstudio/rs-settings.c:100 src/rs-actions.c:351 +msgid "Sharpen" +msgstr "Wyostrzanie" + +#. FIXME: ? +#: librawstudio/rs-settings.c:105 plugins/denoise/denoise.c:94 +msgid "Denoise" +msgstr "" + +#. FIXME: ? +#: librawstudio/rs-settings.c:110 +#, fuzzy +msgid "Color Denoise" +msgstr "Kolory" + +#: librawstudio/rs-settings.c:110 plugins/denoise/denoise.c:102 +#, fuzzy +msgid "Color denoise" +msgstr "Kolory" + +#. FIXME: ? +#: librawstudio/rs-settings.c:115 +#, fuzzy +msgid "Red" +msgstr "Gotowe" + +#. FIXME: ? +#: librawstudio/rs-settings.c:120 +msgid "Green" +msgstr "" + +#. FIXME: ? +#: librawstudio/rs-settings.c:125 +msgid "Blue" +msgstr "" + # Comments for future translators # Uwagi dla kolejnych t?umaczy: # @@ -124,11 +187,6 @@ msgid "Relative colormetric" msgstr "Kolorymetryczny wzgl?dny" -# should be a different string for color rendering intent -#: src/gtk-helper.c:739 src/rs-actions.c:347 -msgid "Saturation" -msgstr "Nasycenie" - #: src/gtk-helper.c:740 msgid "Absolute colormetric" msgstr "Kolorymetryczny bezwzgl?dny" @@ -437,7 +495,7 @@ msgstr "Wymiary zdj??" #. All -#: src/rs-store.c:275 src/rs-store.c:834 +#: src/rs-store.c:275 src/rs-store.c:836 #, c-format msgid "* (%d)" msgstr "* (%d)" @@ -447,7 +505,7 @@ msgstr "Wszystkie zdj?cia (bez usuni?tych)" #. 1 -#: src/rs-store.c:279 src/rs-store.c:835 +#: src/rs-store.c:279 src/rs-store.c:837 #, c-format msgid "1 (%d)" msgstr "1 (%d)" @@ -457,7 +515,7 @@ msgstr "Zdj?cia z priorytetem 1" #. 2 -#: src/rs-store.c:283 src/rs-store.c:836 +#: src/rs-store.c:283 src/rs-store.c:838 #, c-format msgid "2 (%d)" msgstr "2 (%d)" @@ -467,7 +525,7 @@ msgstr "Zdj?cia z priorytetem 2" #. 3 -#: src/rs-store.c:287 src/rs-store.c:837 +#: src/rs-store.c:287 src/rs-store.c:839 #, c-format msgid "3 (%d)" msgstr "3 (%d)" @@ -477,7 +535,7 @@ msgstr "Zdj?cia z priorytetem 3" #. Unsorted -#: src/rs-store.c:291 src/rs-store.c:838 +#: src/rs-store.c:291 src/rs-store.c:840 #, c-format msgid "U (%d)" msgstr "U (%d)" @@ -487,7 +545,7 @@ msgstr "Zdj?cia bez przypisanego priorytetu" #. Deleted -#: src/rs-store.c:295 src/rs-store.c:839 +#: src/rs-store.c:295 src/rs-store.c:841 #, c-format msgid "D (%d)" msgstr "D (%d)" @@ -505,7 +563,7 @@ msgid "Priorities" msgstr "Priorytety" -#: src/rs-store.c:527 +#: src/rs-store.c:529 #, c-format msgid "" "%s\n" @@ -514,32 +572,32 @@ "%s\n" "\n" -#: src/rs-store.c:530 +#: src/rs-store.c:532 #, c-format msgid "Focal length: %dmm\n" msgstr "Ogniskowa: %dmm\n" -#: src/rs-store.c:533 +#: src/rs-store.c:535 #, c-format msgid "Shutter speed: %.1fs\n" msgstr "Czas na?wietlania: %.1fs\n" -#: src/rs-store.c:535 +#: src/rs-store.c:537 #, c-format msgid "Shutter speed: 1/%.0fs\n" msgstr "Czas na?wietlania: 1/%.0fs\n" -#: src/rs-store.c:538 +#: src/rs-store.c:540 #, c-format msgid "Aperture: F/%.01f\n" msgstr "Przys?ona: F/%.01f\n" -#: src/rs-store.c:541 +#: src/rs-store.c:543 #, c-format msgid "ISO: %u\n" msgstr "ISO: %u\n" -#: src/rs-store.c:544 +#: src/rs-store.c:546 #, c-format msgid "Time: %s" msgstr "Data wykonania: %s" @@ -756,27 +814,10 @@ msgid "Copied settings" msgstr "Skopiowano parametry" -#. Build GUI -#: src/rs-actions.c:346 -msgid "Exposure" -msgstr "Ekspozycja" - -#: src/rs-actions.c:348 -msgid "Hue" -msgstr "Barwa" - -#: src/rs-actions.c:349 -msgid "Contrast" -msgstr "Kontrast" - #: src/rs-actions.c:350 msgid "White balance" msgstr "Balans bieli" -#: src/rs-actions.c:351 -msgid "Sharpen" -msgstr "Wyostrzanie" - #: src/rs-actions.c:352 msgid "Channel mixer" msgstr "" @@ -1102,6 +1143,119 @@ msgid "Shutterspeed" msgstr "Czasu na?wietlania" +#: plugins/denoise/denoise.c:86 +#, fuzzy +msgid "Sharpen Amount" +msgstr "Wyostrzanie" + +#: plugins/denoise/denoise.c:87 +msgid "How much image will be sharpened" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:105 +#: plugins/output-jpegfile/output-jpegfile.c:87 +#, fuzzy +msgid "JPEG Quality" +msgstr "Jako?? JPEG:" + +#: plugins/output-flickr/output-flickr.c:112 +#, fuzzy +msgid "Title" +msgstr "_Plik" + +#: plugins/output-flickr/output-flickr.c:127 +msgid "Description" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:133 +msgid "Tags" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:140 +msgid "Public (everyone can see this)" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:146 +msgid "Visible to Friends" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:152 +msgid "Visible to Family" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:156 +msgid "Upload photo to Flickr" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:305 +msgid "We recieved an error during authentication. Please try again." +msgstr "" + +#: plugins/output-flickr/output-flickr.c:308 +msgid "" +"Rawstudio were not able to upload the photo cause the authentication has " +"been revoked. Please re-authenticate Rawstudio to upload to Flickr." +msgstr "" + +#: plugins/output-flickr/output-flickr.c:311 +msgid "" +"It seems like rawstudio lost its authentication to upload to your account, " +"please re-authenticate." +msgstr "" + +#: plugins/output-flickr/output-flickr.c:315 +#, c-format +msgid "" +"%s\n" +"\n" +"Note: This error isn't catched by Rawstudio. Please let us know that you " +"found it and how to reproduce it so we can make a more useful errormessage. " +"Thanks!" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:317 +msgid "Flickr error" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:376 +msgid "" +"Rawstudio needs to be authenticated before it will be able to upload photos " +"to your Flickr account." +msgstr "" + +#: plugins/output-flickr/output-flickr.c:383 +msgid "Step 1:" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:384 +msgid "Step 2:" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:386 +msgid "Authenticate Rawstudio" +msgstr "" + +#: plugins/output-jpegfile/output-jpegfile.c:93 +msgid "JPEG (Joint Photographic Experts Group)" +msgstr "JPEG (Joint Photographic Experts Group)" + +#: plugins/output-pngfile/output-pngfile.c:79 +msgid "PNG (Portable Network Graphics)" +msgstr "PNG (Portable Network Graphics)" + +#: plugins/output-tifffile/output-tifffile.c:81 +msgid "Save uncompressed TIFF" +msgstr "Zapisuj pliki TIFF bez kompresji" + +#: plugins/output-tifffile/output-tifffile.c:87 +msgid "Save 16 bit TIFF" +msgstr "" + +#: plugins/output-tifffile/output-tifffile.c:93 +#, fuzzy +msgid "TIFF (Tagged Image File Format)" +msgstr "8-bitowy TIFF (Tagged Image File Format)" + #~ msgid "Background renderer active" #~ msgstr "Przygotowywanie obrazu" @@ -1111,24 +1265,9 @@ #~ msgid "Filename:" #~ msgstr "Nazwa pliku:" -#~ msgid "Save uncompressed TIFF" -#~ msgstr "Zapisuj pliki TIFF bez kompresji" - -#~ msgid "JPEG Quality:" -#~ msgstr "Jako?? JPEG:" - #~ msgid "File export canceled" #~ msgstr "Konwersja anulowana" -#~ msgid "JPEG (Joint Photographic Experts Group)" -#~ msgstr "JPEG (Joint Photographic Experts Group)" - -#~ msgid "PNG (Portable Network Graphics)" -#~ msgstr "PNG (Portable Network Graphics)" - -#~ msgid "8-bit TIFF (Tagged Image File Format)" -#~ msgstr "8-bitowy TIFF (Tagged Image File Format)" - #~ msgid "16-bit TIFF (Tagged Image File Format)" #~ msgstr "16-bitowy TIFF (Tagged Image File Format)" @@ -1138,9 +1277,6 @@ #~ msgid "Reset this setting" #~ msgstr "Przywr?? warto?? domy?ln?" -#~ msgid "Warmth/tint" -#~ msgstr "Temperatura/zabarwienie" - #~ msgid "_Zoom to 100%" #~ msgstr "_Skala 1:1" Modified: trunk/po/pt_BR.po =================================================================== --- trunk/po/pt_BR.po 2009-09-28 16:45:47 UTC (rev 2676) +++ trunk/po/pt_BR.po 2009-09-28 16:47:42 UTC (rev 2677) @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: Rawstudio 1.1.1\n" "Report-Msgid-Bugs-To: rawstudio-dev at rawstudio.org\n" -"POT-Creation-Date: 2009-09-28 00:09+0200\n" +"POT-Creation-Date: 2009-09-28 18:46+0200\n" "PO-Revision-Date: 2008-05-20 18:29-0300\n" "Last-Translator: Rafael Sachetto \n" "Language-Team: Rawstudio development \n" @@ -15,6 +15,67 @@ "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +#. Build GUI +#: librawstudio/rs-settings.c:70 src/rs-actions.c:346 +msgid "Exposure" +msgstr "" + +#: librawstudio/rs-settings.c:75 src/gtk-helper.c:739 src/rs-actions.c:347 +msgid "Saturation" +msgstr "Satura??o" + +#: librawstudio/rs-settings.c:80 src/rs-actions.c:348 +msgid "Hue" +msgstr "" + +#: librawstudio/rs-settings.c:85 src/rs-actions.c:349 +msgid "Contrast" +msgstr "" + +#: librawstudio/rs-settings.c:90 +msgid "Warmth" +msgstr "" + +#: librawstudio/rs-settings.c:95 +msgid "Tint" +msgstr "" + +#: librawstudio/rs-settings.c:100 src/rs-actions.c:351 +msgid "Sharpen" +msgstr "" + +#. FIXME: ? +#: librawstudio/rs-settings.c:105 plugins/denoise/denoise.c:94 +msgid "Denoise" +msgstr "" + +#. FIXME: ? +#: librawstudio/rs-settings.c:110 +#, fuzzy +msgid "Color Denoise" +msgstr "Cores" + +#: librawstudio/rs-settings.c:110 plugins/denoise/denoise.c:102 +#, fuzzy +msgid "Color denoise" +msgstr "Cores" + +#. FIXME: ? +#: librawstudio/rs-settings.c:115 +#, fuzzy +msgid "Red" +msgstr "Pronto" + +#. FIXME: ? +#: librawstudio/rs-settings.c:120 +msgid "Green" +msgstr "" + +#. FIXME: ? +#: librawstudio/rs-settings.c:125 +msgid "Blue" +msgstr "" + #: src/filename.c:280 #, c-format msgid "%f - Original filename" @@ -97,10 +158,6 @@ msgid "Relative colormetric" msgstr "" -#: src/gtk-helper.c:739 src/rs-actions.c:347 -msgid "Saturation" -msgstr "Satura??o" - #: src/gtk-helper.c:740 msgid "Absolute colormetric" msgstr "" @@ -406,7 +463,7 @@ msgstr "Exportar dimens?es" #. All -#: src/rs-store.c:275 src/rs-store.c:834 +#: src/rs-store.c:275 src/rs-store.c:836 #, c-format msgid "* (%d)" msgstr "* (%d)" @@ -416,7 +473,7 @@ msgstr "Todas as fotos (exceto as apagadas)" #. 1 -#: src/rs-store.c:279 src/rs-store.c:835 +#: src/rs-store.c:279 src/rs-store.c:837 #, c-format msgid "1 (%d)" msgstr "1 (%d)" @@ -426,7 +483,7 @@ msgstr "" #. 2 -#: src/rs-store.c:283 src/rs-store.c:836 +#: src/rs-store.c:283 src/rs-store.c:838 #, c-format msgid "2 (%d)" msgstr "2 (%d)" @@ -436,7 +493,7 @@ msgstr "" #. 3 -#: src/rs-store.c:287 src/rs-store.c:837 +#: src/rs-store.c:287 src/rs-store.c:839 #, c-format msgid "3 (%d)" msgstr "3 (%d)" @@ -446,7 +503,7 @@ msgstr "" #. Unsorted -#: src/rs-store.c:291 src/rs-store.c:838 +#: src/rs-store.c:291 src/rs-store.c:840 #, c-format msgid "U (%d)" msgstr "U (%d)" @@ -456,7 +513,7 @@ msgstr "Fotos sem prioridade" #. Deleted -#: src/rs-store.c:295 src/rs-store.c:839 +#: src/rs-store.c:295 src/rs-store.c:841 #, c-format msgid "D (%d)" msgstr "D (%d)" @@ -474,39 +531,39 @@ msgid "Priorities" msgstr "Prioridades" -#: src/rs-store.c:527 +#: src/rs-store.c:529 #, c-format msgid "" "%s\n" "\n" msgstr "" -#: src/rs-store.c:530 +#: src/rs-store.c:532 #, c-format msgid "Focal length: %dmm\n" msgstr "" -#: src/rs-store.c:533 +#: src/rs-store.c:535 #, c-format msgid "Shutter speed: %.1fs\n" msgstr "" -#: src/rs-store.c:535 +#: src/rs-store.c:537 #, c-format msgid "Shutter speed: 1/%.0fs\n" msgstr "" -#: src/rs-store.c:538 +#: src/rs-store.c:540 #, c-format msgid "Aperture: F/%.01f\n" msgstr "" -#: src/rs-store.c:541 +#: src/rs-store.c:543 #, c-format msgid "ISO: %u\n" msgstr "" -#: src/rs-store.c:544 +#: src/rs-store.c:546 #, c-format msgid "Time: %s" msgstr "" @@ -723,27 +780,10 @@ msgid "Copied settings" msgstr "Configura??es copiadas" -#. Build GUI -#: src/rs-actions.c:346 -msgid "Exposure" -msgstr "" - -#: src/rs-actions.c:348 -msgid "Hue" -msgstr "" - -#: src/rs-actions.c:349 -msgid "Contrast" -msgstr "" - #: src/rs-actions.c:350 msgid "White balance" msgstr "" -#: src/rs-actions.c:351 -msgid "Sharpen" -msgstr "" - #: src/rs-actions.c:352 msgid "Channel mixer" msgstr "" @@ -1065,24 +1105,124 @@ msgid "Shutterspeed" msgstr "" +#: plugins/denoise/denoise.c:86 +msgid "Sharpen Amount" +msgstr "" + +#: plugins/denoise/denoise.c:87 +msgid "How much image will be sharpened" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:105 +#: plugins/output-jpegfile/output-jpegfile.c:87 +#, fuzzy +msgid "JPEG Quality" +msgstr "Qualidade JPEG:" + +#: plugins/output-flickr/output-flickr.c:112 +#, fuzzy +msgid "Title" +msgstr "_Arquivo" + +#: plugins/output-flickr/output-flickr.c:127 +msgid "Description" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:133 +msgid "Tags" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:140 +msgid "Public (everyone can see this)" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:146 +msgid "Visible to Friends" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:152 +msgid "Visible to Family" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:156 +msgid "Upload photo to Flickr" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:305 +msgid "We recieved an error during authentication. Please try again." +msgstr "" + +#: plugins/output-flickr/output-flickr.c:308 +msgid "" +"Rawstudio were not able to upload the photo cause the authentication has " +"been revoked. Please re-authenticate Rawstudio to upload to Flickr." +msgstr "" + +#: plugins/output-flickr/output-flickr.c:311 +msgid "" +"It seems like rawstudio lost its authentication to upload to your account, " +"please re-authenticate." +msgstr "" + +#: plugins/output-flickr/output-flickr.c:315 +#, c-format +msgid "" +"%s\n" +"\n" +"Note: This error isn't catched by Rawstudio. Please let us know that you " +"found it and how to reproduce it so we can make a more useful errormessage. " +"Thanks!" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:317 +msgid "Flickr error" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:376 +msgid "" +"Rawstudio needs to be authenticated before it will be able to upload photos " +"to your Flickr account." +msgstr "" + +#: plugins/output-flickr/output-flickr.c:383 +msgid "Step 1:" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:384 +msgid "Step 2:" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:386 +msgid "Authenticate Rawstudio" +msgstr "" + +#: plugins/output-jpegfile/output-jpegfile.c:93 +msgid "JPEG (Joint Photographic Experts Group)" +msgstr "JPEG (Joint Photographic Experts Group)" + +#: plugins/output-pngfile/output-pngfile.c:79 +msgid "PNG (Portable Network Graphics)" +msgstr "PNG (Portable Network Graphics)" + +#: plugins/output-tifffile/output-tifffile.c:81 +msgid "Save uncompressed TIFF" +msgstr "" + +#: plugins/output-tifffile/output-tifffile.c:87 +msgid "Save 16 bit TIFF" +msgstr "" + +#: plugins/output-tifffile/output-tifffile.c:93 +#, fuzzy +msgid "TIFF (Tagged Image File Format)" +msgstr "8-bit TIFF (Tagged Image File Format)" + #~ msgid "Filename:" #~ msgstr "Nome do arquivo:" -#~ msgid "JPEG Quality:" -#~ msgstr "Qualidade JPEG:" - #~ msgid "File export canceled" #~ msgstr "Exporta??o de arquivo cancelada" -#~ msgid "JPEG (Joint Photographic Experts Group)" -#~ msgstr "JPEG (Joint Photographic Experts Group)" - -#~ msgid "PNG (Portable Network Graphics)" -#~ msgstr "PNG (Portable Network Graphics)" - -#~ msgid "8-bit TIFF (Tagged Image File Format)" -#~ msgstr "8-bit TIFF (Tagged Image File Format)" - #~ msgid "16-bit TIFF (Tagged Image File Format)" #~ msgstr "16-bit TIFF (Tagged Image File Format)" Modified: trunk/po/ru.po =================================================================== --- trunk/po/ru.po 2009-09-28 16:45:47 UTC (rev 2676) +++ trunk/po/ru.po 2009-09-28 16:47:42 UTC (rev 2677) @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: Rawstudio 1.1.1\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-09-27 04:22+0400\n" +"Report-Msgid-Bugs-To: rawstudio-dev at rawstudio.org\n" +"POT-Creation-Date: 2009-09-28 18:46+0200\n" "PO-Revision-Date: 2009-09-27 04:37+0300\n" "Last-Translator: Alexandre Prokoudine \n" "Language-Team: Rawstudio development \n" @@ -15,427 +15,412 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: KBabel 1.11.4\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" +"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "X-Poedit-Language: Russian\n" "X-Poedit-Country: RUSSIAN FEDERATION\n" #. Build GUI -#: ../librawstudio/rs-settings.c:70 -#: ../src/rs-actions.c:345 +#: librawstudio/rs-settings.c:70 src/rs-actions.c:346 msgid "Exposure" msgstr "??????????" -#: ../librawstudio/rs-settings.c:75 -#: ../src/gtk-helper.c:739 -#: ../src/rs-actions.c:346 +#: librawstudio/rs-settings.c:75 src/gtk-helper.c:739 src/rs-actions.c:347 msgid "Saturation" msgstr "????????????" -#: ../librawstudio/rs-settings.c:80 -#: ../src/rs-actions.c:347 +#: librawstudio/rs-settings.c:80 src/rs-actions.c:348 msgid "Hue" msgstr "???" -#: ../librawstudio/rs-settings.c:85 -#: ../src/rs-actions.c:348 +#: librawstudio/rs-settings.c:85 src/rs-actions.c:349 msgid "Contrast" msgstr "????????" -#: ../librawstudio/rs-settings.c:90 +#: librawstudio/rs-settings.c:90 msgid "Warmth" msgstr "???????" -#: ../librawstudio/rs-settings.c:95 +#: librawstudio/rs-settings.c:95 msgid "Tint" msgstr "???????" -#: ../librawstudio/rs-settings.c:100 -#: ../src/rs-actions.c:350 +#: librawstudio/rs-settings.c:100 src/rs-actions.c:351 msgid "Sharpen" msgstr "????????" #. FIXME: ? -#: ../librawstudio/rs-settings.c:105 -#: ../plugins/denoise/denoise.c:94 +#: librawstudio/rs-settings.c:105 plugins/denoise/denoise.c:94 msgid "Denoise" msgstr "?????????? ????" #. FIXME: ? -#: ../librawstudio/rs-settings.c:110 +#: librawstudio/rs-settings.c:110 msgid "Color Denoise" msgstr "??????? ???" -#: ../librawstudio/rs-settings.c:110 -#: ../plugins/denoise/denoise.c:102 +#: librawstudio/rs-settings.c:110 plugins/denoise/denoise.c:102 msgid "Color denoise" msgstr "??????? ???" #. FIXME: ? -#: ../librawstudio/rs-settings.c:115 +#: librawstudio/rs-settings.c:115 msgid "Red" msgstr "???????" #. FIXME: ? -#: ../librawstudio/rs-settings.c:120 +#: librawstudio/rs-settings.c:120 msgid "Green" msgstr "???????" #. FIXME: ? -#: ../librawstudio/rs-settings.c:125 +#: librawstudio/rs-settings.c:125 msgid "Blue" msgstr "?????" -#: ../src/filename.c:280 +#: src/filename.c:280 #, c-format msgid "%f - Original filename" msgstr "%f ? ???????? ??? ?????" -#: ../src/filename.c:281 +#: src/filename.c:281 #, c-format msgid "%2c - Incremental counter" msgstr "%2c ? ?????????? ??????" -#: ../src/filename.c:282 +#: src/filename.c:282 #, c-format msgid "%s - Setting id (A, B or C)" msgstr "%s ? ????? ?????????? (A, B ??? C)" -#: ../src/filename.c:283 +#: src/filename.c:283 #, c-format msgid "%d - Date from EXIF (YYYY-MM-DD)" msgstr "%d ? ???? ?? Exif (????-??-??)" -#: ../src/filename.c:284 +#: src/filename.c:284 msgid "%t - Time from EXIF (HH:MM:SS)" msgstr "%t ? ????? ?? Exif (??-??-??)" -#: ../src/gtk-helper.c:420 +#: src/gtk-helper.c:420 msgid "Select color profile" msgstr "???????? ???????? ???????" -#: ../src/gtk-helper.c:450 +#: src/gtk-helper.c:450 msgid "All files" msgstr "??? ?????" -#: ../src/gtk-helper.c:451 +#: src/gtk-helper.c:451 msgid "Color profiles (icc and icm)" msgstr "???????? ??????? (icc ? icm)" -#: ../src/gtk-helper.c:465 +#: src/gtk-helper.c:465 msgid "Not a valid color profile." msgstr "??? ???????????? ???????? ???????." -#: ../src/gtk-helper.c:466 -msgid "The file you selected does not appear to be a valid color profile for this version of Rawstudio." -msgstr "????????? ???? ???? ?? ????? ?? ?????????? ???????? ???????, ??????? ????? ???? ?? ???????????? ? Rawstudio." +#: src/gtk-helper.c:466 +msgid "" +"The file you selected does not appear to be a valid color profile for this " +"version of Rawstudio." +msgstr "" +"????????? ???? ???? ?? ????? ?? ?????????? ???????? ???????, ??????? ????? " +"???? ?? ???????????? ? Rawstudio." -#: ../src/gtk-helper.c:568 +#: src/gtk-helper.c:568 msgid "Enable color management (experimental)" msgstr "???????? ?????????? ??????" -#: ../src/gtk-helper.c:576 +#: src/gtk-helper.c:576 msgid "Input profile" msgstr "??????? ??????: " -#: ../src/gtk-helper.c:579 +#: src/gtk-helper.c:579 msgid "BuiltInRGBProfile" msgstr "?????????? ??????? RGB" -#: ../src/gtk-helper.c:629 +#: src/gtk-helper.c:629 msgid "Display profile" msgstr "??????? ????????: " -#: ../src/gtk-helper.c:632 -#: ../src/gtk-helper.c:685 +#: src/gtk-helper.c:632 src/gtk-helper.c:685 msgid "sRGB" msgstr "sRGB" -#: ../src/gtk-helper.c:682 +#: src/gtk-helper.c:682 msgid "Export profile" msgstr "??????? ????????: " -#: ../src/gtk-helper.c:734 +#: src/gtk-helper.c:734 msgid "Intent" msgstr "?????????????: " -#: ../src/gtk-helper.c:737 +#: src/gtk-helper.c:737 msgid "Perceptual" msgstr "??????????????" -#: ../src/gtk-helper.c:738 +#: src/gtk-helper.c:738 msgid "Relative colormetric" msgstr "????????????? ?????????????????" -#: ../src/gtk-helper.c:740 +#: src/gtk-helper.c:740 msgid "Absolute colormetric" msgstr "?????????? ?????????????????" -#: ../src/gtk-interface.c:83 -msgid "Background renderer active" -msgstr "??????? ?????????? ???????" - -#: ../src/gtk-interface.c:175 +#: src/gtk-interface.c:182 msgid "Opening photo ..." msgstr "??????????? ??????..." -#: ../src/gtk-interface.c:190 +#: src/gtk-interface.c:197 msgid "Couldn't open photo" msgstr "?? ??????? ??????? ??????" -#: ../src/gtk-interface.c:195 +#: src/gtk-interface.c:202 msgid "Image opened" msgstr "?????? ??????" -#: ../src/gtk-interface.c:196 -#: ../src/gtk-interface.c:807 -#: ../src/gtk-interface.c:930 -#: ../src/gtk-interface.c:966 +#: src/gtk-interface.c:203 src/gtk-interface.c:830 src/gtk-interface.c:953 +#: src/gtk-interface.c:995 msgid "Rawstudio" msgstr "Rawstudio" -#: ../src/gtk-interface.c:254 +#: src/gtk-interface.c:273 #, c-format msgid "Changed photo priority (*)" msgstr "??????? ????????? ?????? (*)" -#: ../src/gtk-interface.c:256 +#: src/gtk-interface.c:275 #, c-format msgid "Changed photo priority (D)" msgstr "??????? ????????? ?????? (D)" -#: ../src/gtk-interface.c:258 +#: src/gtk-interface.c:277 #, c-format msgid "Changed photo priority (%d)" msgstr "??????? ????????? ?????? (%d)" -#: ../src/gtk-interface.c:469 +#: src/gtk-interface.c:492 msgid "Directory:" msgstr "???????:" -#: ../src/gtk-interface.c:471 -#: ../src/rs-batch.c:980 +#: src/gtk-interface.c:494 src/rs-batch.c:980 msgid "Choose output directory" msgstr "??????? ??????? ??? ????????" -#: ../src/gtk-interface.c:487 -#: ../src/rs-batch.c:991 +#: src/gtk-interface.c:510 src/rs-batch.c:991 msgid "Filename template:" msgstr "?????? ????? ?????:" -#: ../src/gtk-interface.c:500 +#: src/gtk-interface.c:523 msgid "Filename example:" msgstr "?????? ????? ?????:" -#: ../src/gtk-interface.c:511 +#: src/gtk-interface.c:534 msgid "File type:" msgstr "??? ?????:" -#: ../src/gtk-interface.c:572 +#: src/gtk-interface.c:595 msgid "Preferences" msgstr "?????????" -#: ../src/gtk-interface.c:587 +#: src/gtk-interface.c:610 msgid "Preview background color:" msgstr "???? ????:" -#: ../src/gtk-interface.c:602 +#: src/gtk-interface.c:625 msgid "Histogram height:" msgstr "?????? ???????????:" -#: ../src/gtk-interface.c:612 +#: src/gtk-interface.c:635 msgid "Show filenames in iconview" msgstr "?????????? ????? ??????" -#: ../src/gtk-interface.c:617 +#: src/gtk-interface.c:640 msgid "Use system theme" msgstr "???????????? ????????? ????? ??????????" -#: ../src/gtk-interface.c:624 +#: src/gtk-interface.c:647 msgid "Place cache in home directory" msgstr "??????? ??? ? ???????? ????????" -#: ../src/gtk-interface.c:627 +#: src/gtk-interface.c:650 msgid "Load 8 bit photos (jpeg, png, etc)" msgstr "????????? 8-????????? ?????? (JPEG, PNG ? ?.?.)" -#: ../src/gtk-interface.c:695 +#: src/gtk-interface.c:718 msgid "General" msgstr "?????" #. gtk_notebook_append_page(GTK_NOTEBOOK(notebook), batch_page, gtk_label_new(_("Batch"))); -#: ../src/gtk-interface.c:697 +#: src/gtk-interface.c:720 msgid "Quick export" msgstr "??????? ???????" -#: ../src/gtk-interface.c:698 +#: src/gtk-interface.c:721 msgid "Colors" msgstr "?????" -#: ../src/gtk-interface.c:1021 +#: src/gtk-interface.c:955 src/gtk-interface.c:1178 +msgid "Opening directory..." +msgstr "??????????? ???????" + +#: src/gtk-interface.c:965 src/gtk-interface.c:1123 src/gtk-interface.c:1193 +msgid "Ready" +msgstr "??????" + +#: src/gtk-interface.c:1050 msgid "Open recursive" msgstr "????????? ??????????" -#: ../src/gtk-interface.c:1030 +#: src/gtk-interface.c:1059 msgid "Tools" msgstr "???????????" -#: ../src/gtk-interface.c:1031 +#: src/gtk-interface.c:1060 msgid "Batch" msgstr "???????" -#: ../src/gtk-interface.c:1032 +#: src/gtk-interface.c:1061 msgid "Open" msgstr "????????" -#: ../src/gtk-interface.c:1094 -msgid "Ready" -msgstr "??????" - -#: ../src/gtk-progress.c:63 -#: ../src/gtk-progress.c:99 -#: ../src/gtk-progress.c:122 +#: src/gtk-progress.c:63 src/gtk-progress.c:99 src/gtk-progress.c:122 msgid "Progress" msgstr "????????" #. FIXME: Calculate some sensible size - maybe even remember user resizes -#: ../src/rs-save-dialog.c:93 -#: ../src/rs-toolbox.c:371 +#: src/rs-save-dialog.c:93 src/rs-toolbox.c:371 msgid "Export File" msgstr "?????????????? ??????" -#: ../src/rs-save-dialog.c:244 +#: src/rs-save-dialog.c:244 #, c-format msgid "Exporting to %s" msgstr "??????? ? %s" -#: ../src/rs-save-dialog.c:360 +#: src/rs-save-dialog.c:360 msgid "Keep aspect" msgstr "????????? ???????????" -#: ../src/rs-save-dialog.c:378 +#: src/rs-save-dialog.c:378 msgid "Width:" msgstr "??????:" -#: ../src/rs-save-dialog.c:380 +#: src/rs-save-dialog.c:380 msgid "Height:" msgstr "??????:" -#: ../src/rs-save-dialog.c:382 +#: src/rs-save-dialog.c:382 msgid "Percent:" msgstr "???????:" -#: ../src/rs-batch.c:206 -#: ../src/rs-actions.c:677 +#: src/rs-batch.c:206 src/rs-actions.c:737 msgid "A" msgstr "A" -#: ../src/rs-batch.c:209 -#: ../src/rs-actions.c:678 +#: src/rs-batch.c:209 src/rs-actions.c:738 msgid "B" msgstr "B" -#: ../src/rs-batch.c:212 -#: ../src/rs-actions.c:679 +#: src/rs-batch.c:212 src/rs-actions.c:739 msgid "C" msgstr "C" -#: ../src/rs-batch.c:437 +#: src/rs-batch.c:437 msgid "Processing photos" msgstr "??????? ???????" -#: ../src/rs-batch.c:441 +#: src/rs-batch.c:441 msgid "Cancel" msgstr "????????" -#: ../src/rs-batch.c:446 +#: src/rs-batch.c:446 msgid "Last image:" msgstr "????????? ??????:" -#: ../src/rs-batch.c:479 +#: src/rs-batch.c:479 #, c-format msgid "Time left: %dh %dm %ds" msgstr "???????? ???????: %dh %dm %ds" -#: ../src/rs-batch.c:483 +#: src/rs-batch.c:483 msgid "Time left: ..." msgstr "???????? ???????: ..." -#: ../src/rs-batch.c:495 +#: src/rs-batch.c:495 #, c-format msgid "Loading %s ..." msgstr "??????????? %s ..." -#: ../src/rs-batch.c:536 +#: src/rs-batch.c:536 #, c-format msgid "Saving %s ..." msgstr "??????????? %s ..." -#: ../src/rs-batch.c:634 +#: src/rs-batch.c:634 msgid "Icon" msgstr "?????" -#: ../src/rs-batch.c:641 +#: src/rs-batch.c:641 msgid "Filename" msgstr "??? ?????" -#: ../src/rs-batch.c:648 +#: src/rs-batch.c:648 msgid "Setting" msgstr "????????" -#: ../src/rs-batch.c:738 +#: src/rs-batch.c:738 msgid "Start" msgstr "??????" -#: ../src/rs-batch.c:741 +#: src/rs-batch.c:741 msgid "Remove" msgstr "???????" -#: ../src/rs-batch.c:744 +#: src/rs-batch.c:744 msgid "Remove all" msgstr "??????? ???" -#: ../src/rs-batch.c:869 +#: src/rs-batch.c:869 msgid "Photo size" msgstr "?????? ??????:" -#: ../src/rs-batch.c:877 +#: src/rs-batch.c:877 msgid "Constant scale" msgstr "???????????????" -#: ../src/rs-batch.c:878 +#: src/rs-batch.c:878 msgid "Constant width" msgstr "?????????? ??????" -#: ../src/rs-batch.c:879 +#: src/rs-batch.c:879 msgid "Constant height" msgstr "?????????? ??????" -#: ../src/rs-batch.c:880 +#: src/rs-batch.c:880 msgid "Maximum size" msgstr "???????????? ??????" -#: ../src/rs-batch.c:892 +#: src/rs-batch.c:892 msgid "Photo width:" msgstr "?????? ??????:" -#: ../src/rs-batch.c:894 -#: ../src/rs-batch.c:903 +#: src/rs-batch.c:894 src/rs-batch.c:903 msgid "pixels" msgstr "????????" -#: ../src/rs-batch.c:901 +#: src/rs-batch.c:901 msgid "Photo height:" msgstr "?????? ??????:" -#: ../src/rs-batch.c:910 +#: src/rs-batch.c:910 msgid "Photo scale:" msgstr "??????? ??????:" -#: ../src/rs-batch.c:912 +#: src/rs-batch.c:912 msgid "%" msgstr "%" -#: ../src/rs-batch.c:948 +#: src/rs-batch.c:948 #, c-format msgid "" "Constant width:\n" @@ -444,7 +429,7 @@ "?????????? ??????:\n" "%d" -#: ../src/rs-batch.c:951 +#: src/rs-batch.c:951 #, c-format msgid "" "Constant height:\n" @@ -453,7 +438,7 @@ "?????????? ??????:\n" "%d" -#: ../src/rs-batch.c:954 +#: src/rs-batch.c:954 #, c-format msgid "" "Constant Scale:\n" @@ -462,7 +447,7 @@ "?????????? ???????:\n" "%d" -#: ../src/rs-batch.c:958 +#: src/rs-batch.c:958 #, c-format msgid "" "Maximum size:\n" @@ -471,81 +456,75 @@ "???????????? ??????:\n" "%d x %d" -#: ../src/rs-batch.c:987 +#: src/rs-batch.c:987 msgid "Output directory:" msgstr "??????? ??????:" -#: ../src/rs-batch.c:1012 +#: src/rs-batch.c:1012 msgid "Change" msgstr "???????" -#: ../src/rs-batch.c:1017 +#: src/rs-batch.c:1017 msgid "Export dimensions" msgstr "??????? ??? ????????" #. All -#: ../src/rs-store.c:275 -#: ../src/rs-store.c:807 +#: src/rs-store.c:275 src/rs-store.c:836 #, c-format msgid "* (%d)" msgstr "* (%d)" -#: ../src/rs-store.c:276 +#: src/rs-store.c:276 msgid "All photos (excluding deleted)" msgstr "??? ?????? (????? ?????????)" #. 1 -#: ../src/rs-store.c:279 -#: ../src/rs-store.c:808 +#: src/rs-store.c:279 src/rs-store.c:837 #, c-format msgid "1 (%d)" msgstr "1 (%d)" -#: ../src/rs-store.c:280 +#: src/rs-store.c:280 msgid "Priority 1 photos" msgstr "?????? ? ??????????? 1" #. 2 -#: ../src/rs-store.c:283 -#: ../src/rs-store.c:809 +#: src/rs-store.c:283 src/rs-store.c:838 #, c-format msgid "2 (%d)" msgstr "2 (%d)" -#: ../src/rs-store.c:284 +#: src/rs-store.c:284 msgid "Priority 2 photos" msgstr "?????? ? ??????????? 2" #. 3 -#: ../src/rs-store.c:287 -#: ../src/rs-store.c:810 +#: src/rs-store.c:287 src/rs-store.c:839 #, c-format msgid "3 (%d)" msgstr "3 (%d)" -#: ../src/rs-store.c:288 +#: src/rs-store.c:288 msgid "Priority 3 photos" msgstr "?????? ? ??????????? 3" #. Unsorted -#: ../src/rs-store.c:291 -#: ../src/rs-store.c:811 +#: src/rs-store.c:291 src/rs-store.c:840 #, c-format msgid "U (%d)" msgstr "U (%d)" -#: ../src/rs-store.c:292 +#: src/rs-store.c:292 msgid "Unprioritized photos" msgstr "?????? ??? ??????????" #. Deleted -#: ../src/rs-store.c:295 -#: ../src/rs-store.c:812 +#: src/rs-store.c:295 src/rs-store.c:841 #, c-format msgid "D (%d)" msgstr "D (%d)" -#: ../src/rs-store.c:296 +#: src/rs-store.c:296 msgid "Deleted photos" msgstr "????????? ??????" @@ -554,11 +533,11 @@ #. understanding of our interface. I was thinking about adding a button instead #. that said "ROCK ON!" to instantly play "AC/DC - Highway to Hell", but I #. believe this will be better for the end user -#: ../src/rs-store.c:331 +#: src/rs-store.c:331 msgid "Priorities" msgstr "??????????" -#: ../src/rs-store.c:518 +#: src/rs-store.c:529 #, c-format msgid "" "%s\n" @@ -567,312 +546,305 @@ "%s\n" "\n" -#: ../src/rs-store.c:521 +#: src/rs-store.c:532 #, c-format msgid "Focal length: %dmm\n" msgstr "???????? ??????????: %d??\n" -#: ../src/rs-store.c:524 +#: src/rs-store.c:535 #, c-format msgid "Shutter speed: %.1fs\n" msgstr "????????: %.1f?\n" -#: ../src/rs-store.c:526 +#: src/rs-store.c:537 #, c-format msgid "Shutter speed: 1/%.0fs\n" msgstr "????????: 1/%.0f?\n" -#: ../src/rs-store.c:529 +#: src/rs-store.c:540 #, c-format msgid "Aperture: F/%.01f\n" msgstr "????????: F/%.01f\n" -#: ../src/rs-store.c:532 +#: src/rs-store.c:543 #, c-format msgid "ISO: %u\n" msgstr "ISO: %u\n" -#: ../src/rs-store.c:535 +#: src/rs-store.c:546 #, c-format msgid "Time: %s" msgstr "?????: %s" -#: ../src/rs-preview-widget.c:505 +#: src/rs-preview-widget.c:505 msgid "Display Navigation" msgstr "" -#: ../src/rs-preview-widget.c:756 +#: src/rs-preview-widget.c:756 msgid "Light out mode not available" msgstr "????? ?????????? ????? ??????????" -#: ../src/rs-preview-widget.c:757 -msgid "Your setup doesn't seem to support RGBA visuals and/or compositing. Consult your operating system manual for enabling RGBA visuals and compositing." +#: src/rs-preview-widget.c:757 +msgid "" +"Your setup doesn't seem to support RGBA visuals and/or compositing. Consult " +"your operating system manual for enabling RGBA visuals and compositing." msgstr "" -#: ../src/rs-preview-widget.c:987 +#: src/rs-preview-widget.c:987 msgid "Size" msgstr "??????" -#: ../src/rs-preview-widget.c:995 +#: src/rs-preview-widget.c:995 msgid "-" msgstr "?" -#: ../src/rs-preview-widget.c:1001 +#: src/rs-preview-widget.c:1001 msgid "Grid" msgstr "?????" -#: ../src/rs-preview-widget.c:1006 +#: src/rs-preview-widget.c:1006 msgid "None" msgstr "???" -#: ../src/rs-preview-widget.c:1007 +#: src/rs-preview-widget.c:1007 msgid "Golden sections" msgstr "??????? ???????" -#: ../src/rs-preview-widget.c:1008 +#: src/rs-preview-widget.c:1008 msgid "Rule of thirds" msgstr "??????? ??????" -#: ../src/rs-preview-widget.c:1009 +#: src/rs-preview-widget.c:1009 msgid "Golden triangles #1" msgstr "??????? ???????????? ?1" -#: ../src/rs-preview-widget.c:1010 +#: src/rs-preview-widget.c:1010 msgid "Golden triangles #2" msgstr "??????? ???????????? ?2" -#: ../src/rs-preview-widget.c:1011 +#: src/rs-preview-widget.c:1011 msgid "Harmonious triangles #1" msgstr "??????????? ???????????? ?1" -#: ../src/rs-preview-widget.c:1012 +#: src/rs-preview-widget.c:1012 msgid "Harmonious triangles #2" msgstr "??????????? ???????????? ?2" -#: ../src/rs-preview-widget.c:1021 +#: src/rs-preview-widget.c:1021 msgid "Aspect" msgstr "???????????" -#: ../src/rs-preview-widget.c:1026 +#: src/rs-preview-widget.c:1026 msgid "Freeform" msgstr "????????????" -#: ../src/rs-preview-widget.c:1027 +#: src/rs-preview-widget.c:1027 msgid "ISO paper (A4)" msgstr "?????? ?????? ISO (A4)" -#: ../src/rs-preview-widget.c:1028 +#: src/rs-preview-widget.c:1028 msgid "3:2 (35mm)" msgstr "3:2 (35??)" -#: ../src/rs-preview-widget.c:1029 +#: src/rs-preview-widget.c:1029 msgid "4:3" msgstr "4:3" -#: ../src/rs-preview-widget.c:1030 +#: src/rs-preview-widget.c:1030 msgid "10:8 (SXGA)" msgstr "10:8 (SXGA)" -#: ../src/rs-preview-widget.c:1031 +#: src/rs-preview-widget.c:1031 msgid "16:10 (Wide XGA)" msgstr "16:10 (Wide XGA)" -#: ../src/rs-preview-widget.c:1032 +#: src/rs-preview-widget.c:1032 msgid "8:3 (Dualhead XGA)" msgstr "8:3 (Dualhead XGA)" -#: ../src/rs-preview-widget.c:1033 +#: src/rs-preview-widget.c:1033 msgid "1:1" msgstr "1:1" -#: ../src/rs-preview-widget.c:1034 +#: src/rs-preview-widget.c:1034 msgid "Golden rectangle" msgstr "??????? ?????????????" -#: ../src/rs-preview-widget.c:1042 -#: ../src/rs-preview-widget.c:1053 +#: src/rs-preview-widget.c:1042 src/rs-preview-widget.c:1053 msgid "Crop" msgstr "???????????" -#: ../src/rs-preview-widget.c:1044 +#: src/rs-preview-widget.c:1044 msgid "Don't crop" msgstr "?? ???????????" #. Snapshot labels -#: ../src/rs-toolbox.c:157 -#: ../src/rs-actions.c:911 +#: src/rs-toolbox.c:157 src/rs-actions.c:972 msgid " A " msgstr " A " -#: ../src/rs-toolbox.c:158 -#: ../src/rs-actions.c:912 +#: src/rs-toolbox.c:158 src/rs-actions.c:973 msgid " B " msgstr " B " -#: ../src/rs-toolbox.c:159 -#: ../src/rs-actions.c:913 +#: src/rs-toolbox.c:159 src/rs-actions.c:974 msgid " C " msgstr " C " #. FIXME: Get height from gconf -#: ../src/rs-toolbox.c:184 +#: src/rs-toolbox.c:184 msgid "Histogram" msgstr "???????????" -#: ../src/rs-toolbox.c:297 +#: src/rs-toolbox.c:297 msgid "Reset" msgstr "????????" -#: ../src/rs-toolbox.c:415 -#: ../src/rs-toolbox.c:540 +#: src/rs-toolbox.c:415 src/rs-toolbox.c:540 msgid "Open curve ..." msgstr "????????? ?????? ?? ?????..." -#: ../src/rs-toolbox.c:546 +#: src/rs-toolbox.c:546 msgid "Save curve as ..." msgstr "????????? ?????? ???..." -#: ../src/rs-toolbox.c:552 +#: src/rs-toolbox.c:552 msgid "Reset curve" msgstr "???????? ??????" -#: ../src/rs-toolbox.c:557 +#: src/rs-toolbox.c:557 msgid "Auto adjust curve ends" msgstr "????????? ????? ??????" #. Pack everything nice -#: ../src/rs-toolbox.c:637 +#: src/rs-toolbox.c:637 msgid "Basic" msgstr "???????? ?????????" -#: ../src/rs-toolbox.c:638 +#: src/rs-toolbox.c:638 msgid "Channel Mixer" msgstr "?????? ???????" -#: ../src/rs-toolbox.c:639 -#: ../src/rs-actions.c:352 +#: src/rs-toolbox.c:639 src/rs-actions.c:353 msgid "Curve" msgstr "??????" -#: ../src/rs-toolbox.c:683 +#: src/rs-toolbox.c:683 msgid "Flip the photo over the x-axis" msgstr "????????? ???????? ?? ?????????????? ???" -#: ../src/rs-toolbox.c:684 +#: src/rs-toolbox.c:684 msgid "Mirror the photo over the y-axis" msgstr "????????? ???????? ?? ???????????? ???" -#: ../src/rs-toolbox.c:685 +#: src/rs-toolbox.c:685 msgid "Rotate the photo 90 degrees clockwise" msgstr "????????? ?????? ?? 90? ?? ??????? ???????" -#: ../src/rs-toolbox.c:686 +#: src/rs-toolbox.c:686 msgid "Rotate the photo 90 degrees counter clockwise" msgstr "????????? ?????? ?? 90? ?????? ??????? ???????" -#: ../src/rs-toolbox.c:698 +#: src/rs-toolbox.c:698 msgid "Transforms" msgstr "??????????????" -#: ../src/rs-actions.c:140 +#: src/rs-actions.c:141 msgid "Open directory" msgstr "??????? ???????" -#: ../src/rs-actions.c:197 +#: src/rs-actions.c:198 msgid "File exported" msgstr "???? ?????????????" -#: ../src/rs-actions.c:202 -#: ../src/rs-actions.c:221 +#: src/rs-actions.c:203 src/rs-actions.c:222 msgid "Export failed" msgstr "?? ??????? ?????????????? ??????" -#: ../src/rs-actions.c:231 +#: src/rs-actions.c:232 msgid "Error exporting" msgstr "?????? ??? ????????" -#: ../src/rs-actions.c:232 +#: src/rs-actions.c:233 msgid "Error exporting photo to gimp." msgstr "?????? ??? ???????? ? GIMP" -#: ../src/rs-actions.c:255 -#: ../src/rs-actions.c:273 +#: src/rs-actions.c:256 src/rs-actions.c:274 msgid "Deleting photos" msgstr "????????? ??????" -#: ../src/rs-actions.c:256 +#: src/rs-actions.c:257 msgid "Your files will be permanently deleted!" msgstr "???? ????? ????? ??????? ????????????!" -#: ../src/rs-actions.c:258 +#: src/rs-actions.c:259 msgid "Delete photos" msgstr "??????? ??????" -#: ../src/rs-actions.c:332 +#: src/rs-actions.c:333 msgid "Copied settings" msgstr "????????? ??????? ???????????" -#: ../src/rs-actions.c:349 +#: src/rs-actions.c:350 msgid "White balance" msgstr "?????? ??????" -#: ../src/rs-actions.c:351 +#: src/rs-actions.c:352 msgid "Channel mixer" msgstr "?????? ???????" -#: ../src/rs-actions.c:384 +#: src/rs-actions.c:385 msgid "Select settings to paste" msgstr "??????????? ?????????" -#: ../src/rs-actions.c:442 +#: src/rs-actions.c:443 msgid "Pasted settings" msgstr "????????? ??????? ?????????" -#: ../src/rs-actions.c:445 +#: src/rs-actions.c:446 msgid "Nothing to paste" msgstr "??? ??????????? ?????????? ???????" -#: ../src/rs-actions.c:448 +#: src/rs-actions.c:449 msgid "Buffer empty" msgstr "????? ????" -#: ../src/rs-actions.c:491 +#: src/rs-actions.c:492 msgid "Adjusting to auto white balance" msgstr "??????????? ????????? ? ?????????????? ???????? ??????" -#: ../src/rs-actions.c:501 +#: src/rs-actions.c:502 msgid "No white balance to set from" msgstr "???????? ????? ?????? ??????" -#: ../src/rs-actions.c:504 +#: src/rs-actions.c:505 msgid "Adjusting to camera white balance" msgstr "??????????? ????????? ?? ??????? ?????? ??????" -#: ../src/rs-actions.c:623 +#: src/rs-actions.c:683 msgid "Showing exposure mask" msgstr "???????????? ????? ??????????" -#: ../src/rs-actions.c:625 +#: src/rs-actions.c:685 msgid "Hiding exposure mask" msgstr "???????? ????? ??????????" -#: ../src/rs-actions.c:655 +#: src/rs-actions.c:715 #, c-format msgid " %s added to batch queue" msgstr "%s ???????? ? ??????? ?? ???????" -#: ../src/rs-actions.c:657 +#: src/rs-actions.c:717 #, c-format msgid "%s already added to batch queue" msgstr "%s ??? ???????? ? ??????? ?? ???????" -#: ../src/rs-actions.c:664 -#: ../src/rs-actions.c:736 +#: src/rs-actions.c:724 src/rs-actions.c:796 #, c-format msgid "%d photos added to batch queue" msgstr "%d ??????? ????????? ? ??????? ?? ???????" -#: ../src/rs-actions.c:701 +#: src/rs-actions.c:761 msgid "" "Select which settings to\n" "add to batch queue" @@ -880,403 +852,529 @@ "????????, ????? ?????????\n" "???????? ? ??????? ?? ???????" -#: ../src/rs-actions.c:754 +#: src/rs-actions.c:814 msgid "Removed from batch queue" msgstr "?????? ?? ??????? ?? ???????" -#: ../src/rs-actions.c:756 +#: src/rs-actions.c:816 msgid "Not in batch queue" msgstr "?? ? ??????? ?? ???????" -#: ../src/rs-actions.c:790 +#: src/rs-actions.c:850 msgid "A raw image converter for GTK+/GNOME" msgstr "?????????? ???????? ????????? ??? GTK+/GNOME" -#: ../src/rs-actions.c:821 +#: src/rs-actions.c:881 msgid "_File" msgstr "_????" -#: ../src/rs-actions.c:822 +#: src/rs-actions.c:882 msgid "_Edit" msgstr "_??????" -#: ../src/rs-actions.c:823 +#: src/rs-actions.c:883 msgid "_Photo" msgstr "?_?????" -#: ../src/rs-actions.c:824 +#: src/rs-actions.c:884 msgid "_Set Priority" msgstr "_??????? ?????????" -#: ../src/rs-actions.c:825 +#: src/rs-actions.c:885 msgid "_White Balance" msgstr "_?????? ??????" -#: ../src/rs-actions.c:826 +#: src/rs-actions.c:886 msgid "_View" msgstr "_???" -#: ../src/rs-actions.c:827 +#: src/rs-actions.c:887 msgid "_Sort by" msgstr "_??????????? ??" -#: ../src/rs-actions.c:828 +#: src/rs-actions.c:888 msgid "_Batch" msgstr "???_????" -#: ../src/rs-actions.c:829 +#: src/rs-actions.c:889 msgid "_Help" msgstr "_???????" #. File menu -#: ../src/rs-actions.c:834 +#: src/rs-actions.c:894 msgid "_Open Directory" msgstr "_??????? ???????" -#: ../src/rs-actions.c:835 +#: src/rs-actions.c:895 msgid "_Quick Export" msgstr "??????? ???????" -#: ../src/rs-actions.c:836 +#: src/rs-actions.c:896 msgid "_Export As" msgstr "?????????????? _???" -#: ../src/rs-actions.c:837 +#: src/rs-actions.c:897 msgid "_Export to Gimp" msgstr "_?????????????? ? GIMP" -#: ../src/rs-actions.c:838 +#: src/rs-actions.c:898 msgid "_Reload directory" msgstr "_????????????? ???????" -#: ../src/rs-actions.c:839 +#: src/rs-actions.c:899 msgid "_Delete flagged photos" msgstr "_??????? ?????????? ??????" -#: ../src/rs-actions.c:840 +#: src/rs-actions.c:900 msgid "_Quit" msgstr "?_????" #. Edit menu -#: ../src/rs-actions.c:843 +#: src/rs-actions.c:903 msgid "_Revert settings" msgstr "_???????? ?????????" -#: ../src/rs-actions.c:844 +#: src/rs-actions.c:904 msgid "_Copy settings" msgstr "_??????????? ?????????" -#: ../src/rs-actions.c:845 +#: src/rs-actions.c:905 msgid "_Paste settings" msgstr "_???????? ?????????" -#: ../src/rs-actions.c:846 +#: src/rs-actions.c:906 msgid "_Reset settings" msgstr "_?????? ?????????" -#: ../src/rs-actions.c:847 +#: src/rs-actions.c:907 msgid "_Preferences" msgstr "_?????????" #. Photo menu -#: ../src/rs-actions.c:850 +#: src/rs-actions.c:910 msgid "_Flag photo for deletion" msgstr "??_?????? ??? ????????" -#: ../src/rs-actions.c:851 +#: src/rs-actions.c:911 msgid "_1" msgstr "_1" -#: ../src/rs-actions.c:852 +#: src/rs-actions.c:912 msgid "_2" msgstr "_2" -#: ../src/rs-actions.c:853 +#: src/rs-actions.c:913 msgid "_3" msgstr "_3" -#: ../src/rs-actions.c:854 +#: src/rs-actions.c:914 msgid "_Remove priority" msgstr "_????? ?????????" -#: ../src/rs-actions.c:855 +#: src/rs-actions.c:915 msgid "_Auto" msgstr "_????" -#: ../src/rs-actions.c:856 +#: src/rs-actions.c:916 msgid "_Camera" msgstr "_??????" -#: ../src/rs-actions.c:857 +#: src/rs-actions.c:917 msgid "_Crop" msgstr "_???????????" -#: ../src/rs-actions.c:858 +#: src/rs-actions.c:918 msgid "_Uncrop" msgstr "_????? ????????????" -#: ../src/rs-actions.c:859 +#: src/rs-actions.c:919 msgid "_Straighten" msgstr "_?????????" -#: ../src/rs-actions.c:860 +#: src/rs-actions.c:920 msgid "_Unstraighten" msgstr "??_??? ????????????" -#: ../src/rs-actions.c:861 +#: src/rs-actions.c:921 msgid "_Group" msgstr "?_????????????" -#: ../src/rs-actions.c:862 +#: src/rs-actions.c:922 msgid "_Ungroup" msgstr "_???????????????" -#: ../src/rs-actions.c:863 +#: src/rs-actions.c:923 msgid "_Auto group" msgstr "????????????? _?????????????" -#: ../src/rs-actions.c:864 +#: src/rs-actions.c:924 +#, fuzzy +msgid "_Tag Photo..." +msgstr "?_?????" + +#: src/rs-actions.c:925 msgid "Rotate Clockwise" msgstr "????????? ?? ??????? ???????" -#: ../src/rs-actions.c:865 +#: src/rs-actions.c:926 msgid "Rotate Counter Clockwise" msgstr "????????? ?????? ??????? ???????" -#: ../src/rs-actions.c:866 +#: src/rs-actions.c:927 msgid "Flip" msgstr "????????" -#: ../src/rs-actions.c:867 +#: src/rs-actions.c:928 msgid "Mirror" msgstr "???????" #. View menu -#: ../src/rs-actions.c:870 +#: src/rs-actions.c:931 msgid "_Previous photo" msgstr "_?????????? ??????" -#: ../src/rs-actions.c:871 +#: src/rs-actions.c:932 msgid "_Next Photo" msgstr "_????????? ??????" #. Batch menu -#: ../src/rs-actions.c:874 +#: src/rs-actions.c:935 msgid "_Add to batch queue" msgstr "_???????? ? ???????" -#: ../src/rs-actions.c:875 +#: src/rs-actions.c:936 msgid "_Add current view to queue" msgstr "???????? _??? ????? ? ???????" -#: ../src/rs-actions.c:876 +#: src/rs-actions.c:937 msgid "_Remove from batch queue" msgstr "_??????? ?? ???????" -#: ../src/rs-actions.c:877 +#: src/rs-actions.c:938 msgid "_Start" msgstr "_?????? ???????" #. help menu -#: ../src/rs-actions.c:880 +#: src/rs-actions.c:941 msgid "_About" msgstr "_? ?????????" -#: ../src/rs-actions.c:888 +#: src/rs-actions.c:949 msgid "_Zoom to fit" msgstr "_???????? ? ????" -#: ../src/rs-actions.c:889 +#: src/rs-actions.c:950 msgid "_Iconbox" msgstr "?????? _???????" -#: ../src/rs-actions.c:890 +#: src/rs-actions.c:951 msgid "_Toolbox" msgstr "?????? _????????????" -#: ../src/rs-actions.c:891 +#: src/rs-actions.c:952 msgid "_Fullscreen" msgstr "?_???????????? ?????" -#: ../src/rs-actions.c:892 +#: src/rs-actions.c:953 msgid "_Exposure mask" msgstr "?_???? ??????????" -#: ../src/rs-actions.c:893 +#: src/rs-actions.c:954 msgid "_Split" msgstr "_?????????" -#: ../src/rs-actions.c:895 +#: src/rs-actions.c:956 msgid "_Lights out" msgstr "_????????? ????" -#: ../src/rs-actions.c:901 +#: src/rs-actions.c:962 msgid "Name" msgstr "?????" -#: ../src/rs-actions.c:902 +#: src/rs-actions.c:963 msgid "Timestamp" msgstr "???????" -#: ../src/rs-actions.c:903 +#: src/rs-actions.c:964 msgid "ISO" msgstr "ISO" -#: ../src/rs-actions.c:904 +#: src/rs-actions.c:965 msgid "Aperture" msgstr "????????" -#: ../src/rs-actions.c:905 +#: src/rs-actions.c:966 msgid "Focallength" msgstr "????????? ??????????" -#: ../src/rs-actions.c:906 +#: src/rs-actions.c:967 msgid "Shutterspeed" msgstr "????????" -#: ../plugins/denoise/denoise.c:86 +#: plugins/denoise/denoise.c:86 msgid "Sharpen Amount" msgstr "???????? ????????" -#: ../plugins/denoise/denoise.c:87 +#: plugins/denoise/denoise.c:87 msgid "How much image will be sharpened" msgstr "????????? ????? ???????? ????????" -#: ../plugins/output-flickr/output-flickr.c:105 -#: ../plugins/output-jpegfile/output-jpegfile.c:87 +#: plugins/output-flickr/output-flickr.c:105 +#: plugins/output-jpegfile/output-jpegfile.c:87 msgid "JPEG Quality" msgstr "???????? JPEG:" -#: ../plugins/output-flickr/output-flickr.c:156 +#: plugins/output-flickr/output-flickr.c:112 +#, fuzzy +msgid "Title" +msgstr "???????" + +#: plugins/output-flickr/output-flickr.c:127 +msgid "Description" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:133 +msgid "Tags" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:140 +msgid "Public (everyone can see this)" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:146 +msgid "Visible to Friends" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:152 +msgid "Visible to Family" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:156 msgid "Upload photo to Flickr" msgstr "????????? ?????? ?? Flickr" -#: ../plugins/output-jpegfile/output-jpegfile.c:93 +#: plugins/output-flickr/output-flickr.c:305 +msgid "We recieved an error during authentication. Please try again." +msgstr "" + +#: plugins/output-flickr/output-flickr.c:308 +msgid "" +"Rawstudio were not able to upload the photo cause the authentication has " +"been revoked. Please re-authenticate Rawstudio to upload to Flickr." +msgstr "" + +#: plugins/output-flickr/output-flickr.c:311 +msgid "" +"It seems like rawstudio lost its authentication to upload to your account, " +"please re-authenticate." +msgstr "" + +#: plugins/output-flickr/output-flickr.c:315 +#, c-format +msgid "" +"%s\n" +"\n" +"Note: This error isn't catched by Rawstudio. Please let us know that you " +"found it and how to reproduce it so we can make a more useful errormessage. " +"Thanks!" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:317 +msgid "Flickr error" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:376 +msgid "" +"Rawstudio needs to be authenticated before it will be able to upload photos " +"to your Flickr account." +msgstr "" + +#: plugins/output-flickr/output-flickr.c:383 +msgid "Step 1:" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:384 +msgid "Step 2:" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:386 +msgid "Authenticate Rawstudio" +msgstr "" + +#: plugins/output-jpegfile/output-jpegfile.c:93 msgid "JPEG (Joint Photographic Experts Group)" msgstr "JPEG (Joint Photographic Experts Group)" -#: ../plugins/output-pngfile/output-pngfile.c:79 +#: plugins/output-pngfile/output-pngfile.c:79 msgid "PNG (Portable Network Graphics)" msgstr "PNG (Portable Network Graphics)" -#: ../plugins/output-tifffile/output-tifffile.c:81 +#: plugins/output-tifffile/output-tifffile.c:81 msgid "Save uncompressed TIFF" msgstr "????????? ???????? TIFF" -#: ../plugins/output-tifffile/output-tifffile.c:87 +#: plugins/output-tifffile/output-tifffile.c:87 msgid "Save 16 bit TIFF" msgstr "????????? TIFF ? 16 ????????? ?? ???????? ?????" -#: ../plugins/output-tifffile/output-tifffile.c:93 +#: plugins/output-tifffile/output-tifffile.c:93 msgid "TIFF (Tagged Image File Format)" msgstr "TIFF (Tagged Image File Format)" +#~ msgid "Background renderer active" +#~ msgstr "??????? ?????????? ???????" + #~ msgid "Preload photos" #~ msgstr "????????? ??????" + #~ msgid "Filename:" #~ msgstr "??? ?????:" + #~ msgid "File export canceled" #~ msgstr "??????? ??????? ???????" + #~ msgid "16-bit TIFF (Tagged Image File Format)" #~ msgstr "16-????????? TIFF (Tagged Image File Format)" + #~ msgid "Rotate the photo 180 degrees" #~ msgstr "????????? ?????? ?? 180?" + #~ msgid "Reset this setting" #~ msgstr "???????? ???? ????????" + #~ msgid "_Zoom to 100%" #~ msgstr "_??????? 1:1" + #~ msgid "Canon CR2" #~ msgstr "Canon CR2" + #~ msgid "Canon CIFF" #~ msgstr "Canon CIFF" + #~ msgid "Nikon NEF" #~ msgstr "Nikon NEF" + #~ msgid "Minolta raw" #~ msgstr "Minolta RAW" + #~ msgid "Canon TIFF" #~ msgstr "Canon TIFF" + #~ msgid "Sony" #~ msgstr "Sony" + #~ msgid "Kodak" #~ msgstr "Kodak" + #~ msgid "Sigma" #~ msgstr "Sigma" + #~ msgid "Olympus" #~ msgstr "Olympus" + #~ msgid "Panasonic raw" #~ msgstr "Panasonic RAW" + #~ msgid "Pentax raw" #~ msgstr "Pentax RAW" + #~ msgid "Adobe Digital negative" #~ msgstr "Adobe Digital Negative" + #~ msgid "Mamiya" #~ msgstr "Mamiya" + #~ msgid "Hasselblad" #~ msgstr "Hasselblad" + #~ msgid "Epson" #~ msgstr "Epson" -#~ msgid "Opening directory..." -#~ msgstr "??????????? ???????" + #~ msgid "%dmm " #~ msgstr "%d?? " + #~ msgid "%.1fs " #~ msgstr "%.1fs " + #~ msgid "1/%.0fs " #~ msgstr "1/%.0fs " + #~ msgid "F/%.1f " #~ msgstr "F/%.1f " + #~ msgid "No metadata" #~ msgstr "??? ??????????" + #~ msgid "Split" #~ msgstr "?????????" + #~ msgid "Exp. mask" #~ msgstr "????? ??????????" + #~ msgid "Toggle exposure mask" #~ msgstr "??????????? ????? ??????????" + #~ msgid "Set zoom" #~ msgstr "??????? ??????? ??????????? ??????" + #~ msgid "Zoom out" #~ msgstr "????????" + #~ msgid "Zoom in" #~ msgstr "??????????" + #~ msgid "Zoom to fit" #~ msgstr "???????? ? ????" + #~ msgid "Zoom to 100%" #~ msgstr "???????? 100%" + #~ msgid "Zoom:" #~ msgstr "???????:" + #~ msgid "Apply" #~ msgstr "?????????" + #~ msgid "Straighten" #~ msgstr "?????????" + #~ msgid "Unstraighten" #~ msgstr "????? ????????????" + #~ msgid "Exposure Mask" #~ msgstr "????? ??????????" #, fuzzy #~ msgid "Added view to batch queue" #~ msgstr "???????? ? ??????? ?? ?????????" + #~ msgid "/File/_Open directory..." #~ msgstr "/????/_??????? ???????..." #, fuzzy #~ msgid "/File/_Quick export" #~ msgstr "/????/_??????????????" + #~ msgid "/File/_Export as..." #~ msgstr "/????/?????????????? _???..." + #~ msgid "/File/_Reload" #~ msgstr "/????/_?????????????" + #~ msgid "/_Batch/_Add to batch queue" #~ msgstr "/???????? ?????????/_???????? ? ???????" + #~ msgid "/_Batch/_Remove from batch queue" #~ msgstr "/???????? ?????????/_??????? ?? ???????" + #~ msgid "CW" #~ msgstr "CW" + #~ msgid "180" #~ msgstr "180?" + #~ msgid "CCW" #~ msgstr "CCW" + #~ msgid "Scale" #~ msgstr "???????" - Modified: trunk/po/sv.po =================================================================== --- trunk/po/sv.po 2009-09-28 16:45:47 UTC (rev 2676) +++ trunk/po/sv.po 2009-09-28 16:47:42 UTC (rev 2677) @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: Rawstudio 1.1.1\n" "Report-Msgid-Bugs-To: rawstudio-dev at rawstudio.org\n" -"POT-Creation-Date: 2009-09-28 00:09+0200\n" +"POT-Creation-Date: 2009-09-28 18:46+0200\n" "PO-Revision-Date: 2008-05-03 12:21+0100\n" "Last-Translator: Patrik Jarl \n" "Language-Team: Rawstudio development \n" @@ -16,6 +16,68 @@ "Content-Transfer-Encoding: 8bit\n" "X-Poedit-Language: English\n" +#. Build GUI +#: librawstudio/rs-settings.c:70 src/rs-actions.c:346 +msgid "Exposure" +msgstr "Exponering" + +#: librawstudio/rs-settings.c:75 src/gtk-helper.c:739 src/rs-actions.c:347 +msgid "Saturation" +msgstr "M?ttnad" + +#: librawstudio/rs-settings.c:80 src/rs-actions.c:348 +msgid "Hue" +msgstr "F?rgm?ttnad" + +#: librawstudio/rs-settings.c:85 src/rs-actions.c:349 +msgid "Contrast" +msgstr "Konstrast" + +#: librawstudio/rs-settings.c:90 +#, fuzzy +msgid "Warmth" +msgstr "V?rme/nyans" + +#: librawstudio/rs-settings.c:95 +msgid "Tint" +msgstr "" + +#: librawstudio/rs-settings.c:100 src/rs-actions.c:351 +msgid "Sharpen" +msgstr "Mer sk?rpa" + +#. FIXME: ? +#: librawstudio/rs-settings.c:105 plugins/denoise/denoise.c:94 +msgid "Denoise" +msgstr "" + +#. FIXME: ? +#: librawstudio/rs-settings.c:110 +#, fuzzy +msgid "Color Denoise" +msgstr "F?rger" + +#: librawstudio/rs-settings.c:110 plugins/denoise/denoise.c:102 +#, fuzzy +msgid "Color denoise" +msgstr "F?rger" + +#. FIXME: ? +#: librawstudio/rs-settings.c:115 +#, fuzzy +msgid "Red" +msgstr "F?rdig" + +#. FIXME: ? +#: librawstudio/rs-settings.c:120 +msgid "Green" +msgstr "" + +#. FIXME: ? +#: librawstudio/rs-settings.c:125 +msgid "Blue" +msgstr "" + #: src/filename.c:280 #, c-format msgid "%f - Original filename" @@ -100,10 +162,6 @@ msgid "Relative colormetric" msgstr "Relativ f?rgmetrisk" -#: src/gtk-helper.c:739 src/rs-actions.c:347 -msgid "Saturation" -msgstr "M?ttnad" - #: src/gtk-helper.c:740 msgid "Absolute colormetric" msgstr "Absolut f?rgmetrisk" @@ -411,7 +469,7 @@ msgstr "Exportera dimensioner" #. All -#: src/rs-store.c:275 src/rs-store.c:834 +#: src/rs-store.c:275 src/rs-store.c:836 #, c-format msgid "* (%d)" msgstr "* (%d)" @@ -421,7 +479,7 @@ msgstr "Alla foton (f?rutom raderade)" #. 1 -#: src/rs-store.c:279 src/rs-store.c:835 +#: src/rs-store.c:279 src/rs-store.c:837 #, c-format msgid "1 (%d)" msgstr "1 (%d)" @@ -431,7 +489,7 @@ msgstr "Prioritet 1 foton" #. 2 -#: src/rs-store.c:283 src/rs-store.c:836 +#: src/rs-store.c:283 src/rs-store.c:838 #, c-format msgid "2 (%d)" msgstr "2 (%d)" @@ -441,7 +499,7 @@ msgstr "Prioritet 2 foton" #. 3 -#: src/rs-store.c:287 src/rs-store.c:837 +#: src/rs-store.c:287 src/rs-store.c:839 #, c-format msgid "3 (%d)" msgstr "3 (%d)" @@ -451,7 +509,7 @@ msgstr "Prioritet 3 foton" #. Unsorted -#: src/rs-store.c:291 src/rs-store.c:838 +#: src/rs-store.c:291 src/rs-store.c:840 #, c-format msgid "U (%d)" msgstr "U (%d)" @@ -461,7 +519,7 @@ msgstr "Oprioriterade foton" #. Deleted -#: src/rs-store.c:295 src/rs-store.c:839 +#: src/rs-store.c:295 src/rs-store.c:841 #, c-format msgid "D (%d)" msgstr "D (%d)" @@ -479,39 +537,39 @@ msgid "Priorities" msgstr "Prioriteter" -#: src/rs-store.c:527 +#: src/rs-store.c:529 #, c-format msgid "" "%s\n" "\n" msgstr "" -#: src/rs-store.c:530 +#: src/rs-store.c:532 #, c-format msgid "Focal length: %dmm\n" msgstr "" -#: src/rs-store.c:533 +#: src/rs-store.c:535 #, c-format msgid "Shutter speed: %.1fs\n" msgstr "" -#: src/rs-store.c:535 +#: src/rs-store.c:537 #, c-format msgid "Shutter speed: 1/%.0fs\n" msgstr "" -#: src/rs-store.c:538 +#: src/rs-store.c:540 #, c-format msgid "Aperture: F/%.01f\n" msgstr "" -#: src/rs-store.c:541 +#: src/rs-store.c:543 #, c-format msgid "ISO: %u\n" msgstr "" -#: src/rs-store.c:544 +#: src/rs-store.c:546 #, c-format msgid "Time: %s" msgstr "" @@ -728,27 +786,10 @@ msgid "Copied settings" msgstr "Inst?llningar kopierade" -#. Build GUI -#: src/rs-actions.c:346 -msgid "Exposure" -msgstr "Exponering" - -#: src/rs-actions.c:348 -msgid "Hue" -msgstr "F?rgm?ttnad" - -#: src/rs-actions.c:349 -msgid "Contrast" -msgstr "Konstrast" - #: src/rs-actions.c:350 msgid "White balance" msgstr "Vitbalans" -#: src/rs-actions.c:351 -msgid "Sharpen" -msgstr "Mer sk?rpa" - #: src/rs-actions.c:352 msgid "Channel mixer" msgstr "" @@ -1075,6 +1116,119 @@ msgid "Shutterspeed" msgstr "" +#: plugins/denoise/denoise.c:86 +#, fuzzy +msgid "Sharpen Amount" +msgstr "Mer sk?rpa" + +#: plugins/denoise/denoise.c:87 +msgid "How much image will be sharpened" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:105 +#: plugins/output-jpegfile/output-jpegfile.c:87 +#, fuzzy +msgid "JPEG Quality" +msgstr "JPEG Kvalitet:" + +#: plugins/output-flickr/output-flickr.c:112 +#, fuzzy +msgid "Title" +msgstr "_Fil" + +#: plugins/output-flickr/output-flickr.c:127 +msgid "Description" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:133 +msgid "Tags" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:140 +msgid "Public (everyone can see this)" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:146 +msgid "Visible to Friends" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:152 +msgid "Visible to Family" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:156 +msgid "Upload photo to Flickr" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:305 +msgid "We recieved an error during authentication. Please try again." +msgstr "" + +#: plugins/output-flickr/output-flickr.c:308 +msgid "" +"Rawstudio were not able to upload the photo cause the authentication has " +"been revoked. Please re-authenticate Rawstudio to upload to Flickr." +msgstr "" + +#: plugins/output-flickr/output-flickr.c:311 +msgid "" +"It seems like rawstudio lost its authentication to upload to your account, " +"please re-authenticate." +msgstr "" + +#: plugins/output-flickr/output-flickr.c:315 +#, c-format +msgid "" +"%s\n" +"\n" +"Note: This error isn't catched by Rawstudio. Please let us know that you " +"found it and how to reproduce it so we can make a more useful errormessage. " +"Thanks!" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:317 +msgid "Flickr error" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:376 +msgid "" +"Rawstudio needs to be authenticated before it will be able to upload photos " +"to your Flickr account." +msgstr "" + +#: plugins/output-flickr/output-flickr.c:383 +msgid "Step 1:" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:384 +msgid "Step 2:" +msgstr "" + +#: plugins/output-flickr/output-flickr.c:386 +msgid "Authenticate Rawstudio" +msgstr "" + +#: plugins/output-jpegfile/output-jpegfile.c:93 +msgid "JPEG (Joint Photographic Experts Group)" +msgstr "JPEG (Joint Photographic Experts Group)" + +#: plugins/output-pngfile/output-pngfile.c:79 +msgid "PNG (Portable Network Graphics)" +msgstr "PNG (Portable Network Graphics)" + +#: plugins/output-tifffile/output-tifffile.c:81 +msgid "Save uncompressed TIFF" +msgstr "Spara i okomprimerad TIFF" + +#: plugins/output-tifffile/output-tifffile.c:87 +msgid "Save 16 bit TIFF" +msgstr "" + +#: plugins/output-tifffile/output-tifffile.c:93 +#, fuzzy +msgid "TIFF (Tagged Image File Format)" +msgstr "8-bit TIFF (Tagged Image File Format)" + #~ msgid "Background renderer active" #~ msgstr "Bakgrundsrendering p?g?r" @@ -1084,24 +1238,9 @@ #~ msgid "Filename:" #~ msgstr "Filnamn:" -#~ msgid "Save uncompressed TIFF" -#~ msgstr "Spara i okomprimerad TIFF" - -#~ msgid "JPEG Quality:" -#~ msgstr "JPEG Kvalitet:" - #~ msgid "File export canceled" #~ msgstr "Filexport avbruten" -#~ msgid "JPEG (Joint Photographic Experts Group)" -#~ msgstr "JPEG (Joint Photographic Experts Group)" - -#~ msgid "PNG (Portable Network Graphics)" -#~ msgstr "PNG (Portable Network Graphics)" - -#~ msgid "8-bit TIFF (Tagged Image File Format)" -#~ msgstr "8-bit TIFF (Tagged Image File Format)" - #~ msgid "16-bit TIFF (Tagged Image File Format)" #~ msgstr "16-bit TIFF (Tagged Image File Format)" @@ -1111,9 +1250,6 @@ #~ msgid "Reset this setting" #~ msgstr "?terst?ll inst?llning" -#~ msgid "Warmth/tint" -#~ msgstr "V?rme/nyans" - #~ msgid "_Zoom to 100%" #~ msgstr "_Zooma till 100%" From anders at kvistmail.dk Mon Sep 28 18:51:42 2009 From: anders at kvistmail.dk (Anders Kvist) Date: Mon, 28 Sep 2009 18:51:42 +0200 Subject: [Rawstudio-commit] r2678 - trunk/po Message-ID: Author: akv Date: 2009-09-28 18:51:41 +0200 (Mon, 28 Sep 2009) New Revision: 2678 Modified: trunk/po/da.po Log: Updated danish translation. Modified: trunk/po/da.po =================================================================== --- trunk/po/da.po 2009-09-28 16:47:42 UTC (rev 2677) +++ trunk/po/da.po 2009-09-28 16:51:41 UTC (rev 2678) @@ -8,7 +8,7 @@ "Project-Id-Version: Rawstudio 1.1.1\n" "Report-Msgid-Bugs-To: rawstudio-dev at rawstudio.org\n" "POT-Creation-Date: 2009-09-28 18:46+0200\n" -"PO-Revision-Date: 2009-09-28 00:22+0100\n" +"PO-Revision-Date: 2009-09-28 18:51+0100\n" "Last-Translator: Anders Kvist \n" "Language-Team: Rawstudio development \n" "MIME-Version: 1.0\n" @@ -18,19 +18,24 @@ "X-Poedit-Country: DENMARK\n" #. Build GUI -#: librawstudio/rs-settings.c:70 src/rs-actions.c:346 +#: librawstudio/rs-settings.c:70 +#: src/rs-actions.c:346 msgid "Exposure" msgstr "Eksponering" -#: librawstudio/rs-settings.c:75 src/gtk-helper.c:739 src/rs-actions.c:347 +#: librawstudio/rs-settings.c:75 +#: src/gtk-helper.c:739 +#: src/rs-actions.c:347 msgid "Saturation" msgstr "Farvem?tning" -#: librawstudio/rs-settings.c:80 src/rs-actions.c:348 +#: librawstudio/rs-settings.c:80 +#: src/rs-actions.c:348 msgid "Hue" msgstr "Farvetone" -#: librawstudio/rs-settings.c:85 src/rs-actions.c:349 +#: librawstudio/rs-settings.c:85 +#: src/rs-actions.c:349 msgid "Contrast" msgstr "Kontrast" @@ -41,16 +46,18 @@ #: librawstudio/rs-settings.c:95 msgid "Tint" -msgstr "" +msgstr "Nuance" -#: librawstudio/rs-settings.c:100 src/rs-actions.c:351 +#: librawstudio/rs-settings.c:100 +#: src/rs-actions.c:351 msgid "Sharpen" msgstr "Skarphed" #. FIXME: ? -#: librawstudio/rs-settings.c:105 plugins/denoise/denoise.c:94 +#: librawstudio/rs-settings.c:105 +#: plugins/denoise/denoise.c:94 msgid "Denoise" -msgstr "" +msgstr "St?jfjernelse" #. FIXME: ? #: librawstudio/rs-settings.c:110 @@ -58,7 +65,8 @@ msgid "Color Denoise" msgstr "Farver" -#: librawstudio/rs-settings.c:110 plugins/denoise/denoise.c:102 +#: librawstudio/rs-settings.c:110 +#: plugins/denoise/denoise.c:102 #, fuzzy msgid "Color denoise" msgstr "Farver" @@ -72,12 +80,12 @@ #. FIXME: ? #: librawstudio/rs-settings.c:120 msgid "Green" -msgstr "" +msgstr "Gr?n" #. FIXME: ? #: librawstudio/rs-settings.c:125 msgid "Blue" -msgstr "" +msgstr "Bl?" #: src/filename.c:280 #, c-format @@ -120,12 +128,8 @@ msgstr "Ikke en valid farveprofil" #: src/gtk-helper.c:466 -msgid "" -"The file you selected does not appear to be a valid color profile for this " -"version of Rawstudio." -msgstr "" -"Den valgte fil er ikke en godkendt farveprofil til denne version af " -"Rawstudio." +msgid "The file you selected does not appear to be a valid color profile for this version of Rawstudio." +msgstr "Den valgte fil er ikke en godkendt farveprofil til denne version af Rawstudio." #: src/gtk-helper.c:568 msgid "Enable color management (experimental)" @@ -143,7 +147,8 @@ msgid "Display profile" msgstr "Sk?rm profil" -#: src/gtk-helper.c:632 src/gtk-helper.c:685 +#: src/gtk-helper.c:632 +#: src/gtk-helper.c:685 msgid "sRGB" msgstr "sRGB" @@ -179,7 +184,9 @@ msgid "Image opened" msgstr "Foto ?bnet" -#: src/gtk-interface.c:203 src/gtk-interface.c:830 src/gtk-interface.c:953 +#: src/gtk-interface.c:203 +#: src/gtk-interface.c:830 +#: src/gtk-interface.c:953 #: src/gtk-interface.c:995 msgid "Rawstudio" msgstr "Rawstudio" @@ -203,11 +210,13 @@ msgid "Directory:" msgstr "Bibliotek:" -#: src/gtk-interface.c:494 src/rs-batch.c:980 +#: src/gtk-interface.c:494 +#: src/rs-batch.c:980 msgid "Choose output directory" msgstr "V?lg output bibliotek" -#: src/gtk-interface.c:510 src/rs-batch.c:991 +#: src/gtk-interface.c:510 +#: src/rs-batch.c:991 msgid "Filename template:" msgstr "Filnavns skabelon:" @@ -260,11 +269,14 @@ msgid "Colors" msgstr "Farver" -#: src/gtk-interface.c:955 src/gtk-interface.c:1178 +#: src/gtk-interface.c:955 +#: src/gtk-interface.c:1178 msgid "Opening directory..." msgstr "?ben bibliotek" -#: src/gtk-interface.c:965 src/gtk-interface.c:1123 src/gtk-interface.c:1193 +#: src/gtk-interface.c:965 +#: src/gtk-interface.c:1123 +#: src/gtk-interface.c:1193 msgid "Ready" msgstr "Klar" @@ -284,12 +296,15 @@ msgid "Open" msgstr "?ben" -#: src/gtk-progress.c:63 src/gtk-progress.c:99 src/gtk-progress.c:122 +#: src/gtk-progress.c:63 +#: src/gtk-progress.c:99 +#: src/gtk-progress.c:122 msgid "Progress" msgstr "Fremskridt" #. FIXME: Calculate some sensible size - maybe even remember user resizes -#: src/rs-save-dialog.c:93 src/rs-toolbox.c:371 +#: src/rs-save-dialog.c:93 +#: src/rs-toolbox.c:371 msgid "Export File" msgstr "Eksporter fil" @@ -314,15 +329,18 @@ msgid "Percent:" msgstr "Procent:" -#: src/rs-batch.c:206 src/rs-actions.c:737 +#: src/rs-batch.c:206 +#: src/rs-actions.c:737 msgid "A" msgstr "A" -#: src/rs-batch.c:209 src/rs-actions.c:738 +#: src/rs-batch.c:209 +#: src/rs-actions.c:738 msgid "B" msgstr "B" -#: src/rs-batch.c:212 src/rs-actions.c:739 +#: src/rs-batch.c:212 +#: src/rs-actions.c:739 msgid "C" msgstr "C" @@ -405,7 +423,8 @@ msgid "Photo width:" msgstr "Foto bredde:" -#: src/rs-batch.c:894 src/rs-batch.c:903 +#: src/rs-batch.c:894 +#: src/rs-batch.c:903 msgid "pixels" msgstr "pixels" @@ -470,7 +489,8 @@ msgstr "Eksponerings dimensioner" #. All -#: src/rs-store.c:275 src/rs-store.c:836 +#: src/rs-store.c:275 +#: src/rs-store.c:836 #, c-format msgid "* (%d)" msgstr "* (%d)" @@ -480,7 +500,8 @@ msgstr "Alle fotos (undtaget slettede)" #. 1 -#: src/rs-store.c:279 src/rs-store.c:837 +#: src/rs-store.c:279 +#: src/rs-store.c:837 #, c-format msgid "1 (%d)" msgstr "1 (%d)" @@ -490,7 +511,8 @@ msgstr "Prioritet 1 fotos" #. 2 -#: src/rs-store.c:283 src/rs-store.c:838 +#: src/rs-store.c:283 +#: src/rs-store.c:838 #, c-format msgid "2 (%d)" msgstr "2 (%d)" @@ -500,7 +522,8 @@ msgstr "Prioritet 2 fotos" #. 3 -#: src/rs-store.c:287 src/rs-store.c:839 +#: src/rs-store.c:287 +#: src/rs-store.c:839 #, c-format msgid "3 (%d)" msgstr "3 (%d)" @@ -510,7 +533,8 @@ msgstr "Prioritet 3 fotos" #. Unsorted -#: src/rs-store.c:291 src/rs-store.c:840 +#: src/rs-store.c:291 +#: src/rs-store.c:840 #, c-format msgid "U (%d)" msgstr "U (%d)" @@ -520,7 +544,8 @@ msgstr "Uprioriterede fotos" #. Deleted -#: src/rs-store.c:295 src/rs-store.c:841 +#: src/rs-store.c:295 +#: src/rs-store.c:841 #, c-format msgid "D (%d)" msgstr "D (%d)" @@ -587,12 +612,8 @@ #: src/rs-preview-widget.c:757 #, fuzzy -msgid "" -"Your setup doesn't seem to support RGBA visuals and/or compositing. Consult " -"your operating system manual for enabling RGBA visuals and compositing." -msgstr "" -"Your setup doesn't seem to support RGBA visuals and/or compositing. Consult " -"your operating system manual for enabling RGBA visuals and compositing." +msgid "Your setup doesn't seem to support RGBA visuals and/or compositing. Consult your operating system manual for enabling RGBA visuals and compositing." +msgstr "Your setup doesn't seem to support RGBA visuals and/or compositing. Consult your operating system manual for enabling RGBA visuals and compositing." #: src/rs-preview-widget.c:987 msgid "Size" @@ -674,7 +695,8 @@ msgid "Golden rectangle" msgstr "Gylden rektangel" -#: src/rs-preview-widget.c:1042 src/rs-preview-widget.c:1053 +#: src/rs-preview-widget.c:1042 +#: src/rs-preview-widget.c:1053 msgid "Crop" msgstr "Besk?r" @@ -683,15 +705,18 @@ msgstr "Afbryd crop" #. Snapshot labels -#: src/rs-toolbox.c:157 src/rs-actions.c:972 +#: src/rs-toolbox.c:157 +#: src/rs-actions.c:972 msgid " A " msgstr " A" -#: src/rs-toolbox.c:158 src/rs-actions.c:973 +#: src/rs-toolbox.c:158 +#: src/rs-actions.c:973 msgid " B " msgstr " B " -#: src/rs-toolbox.c:159 src/rs-actions.c:974 +#: src/rs-toolbox.c:159 +#: src/rs-actions.c:974 msgid " C " msgstr " C " @@ -704,7 +729,8 @@ msgid "Reset" msgstr "Nulstil" -#: src/rs-toolbox.c:415 src/rs-toolbox.c:540 +#: src/rs-toolbox.c:415 +#: src/rs-toolbox.c:540 msgid "Open curve ..." msgstr "?ben kurve ..." @@ -729,7 +755,8 @@ msgid "Channel Mixer" msgstr "Kanalmixer" -#: src/rs-toolbox.c:639 src/rs-actions.c:353 +#: src/rs-toolbox.c:639 +#: src/rs-actions.c:353 msgid "Curve" msgstr "Kurve" @@ -761,7 +788,8 @@ msgid "File exported" msgstr "Fil eksporteret" -#: src/rs-actions.c:203 src/rs-actions.c:222 +#: src/rs-actions.c:203 +#: src/rs-actions.c:222 msgid "Export failed" msgstr "Fejl under eksportering" @@ -773,7 +801,8 @@ msgid "Error exporting photo to gimp." msgstr "Fejl ved eksportering til Gimp" -#: src/rs-actions.c:256 src/rs-actions.c:274 +#: src/rs-actions.c:256 +#: src/rs-actions.c:274 msgid "Deleting photos" msgstr "Sletter fotos" @@ -843,7 +872,8 @@ msgid "%s already added to batch queue" msgstr "%s er allerede tilf?jet til batch k?en" -#: src/rs-actions.c:724 src/rs-actions.c:796 +#: src/rs-actions.c:724 +#: src/rs-actions.c:796 #, c-format msgid "%d photos added to batch queue" msgstr "%d fotos tilf?jet til batch k?en" @@ -1121,7 +1151,7 @@ #: plugins/denoise/denoise.c:87 msgid "How much image will be sharpened" -msgstr "" +msgstr "Hvor meget billedet skal g?res skarpere" #: plugins/output-flickr/output-flickr.c:105 #: plugins/output-jpegfile/output-jpegfile.c:87 @@ -1136,75 +1166,78 @@ #: plugins/output-flickr/output-flickr.c:127 msgid "Description" -msgstr "" +msgstr "Beskrivelse" #: plugins/output-flickr/output-flickr.c:133 msgid "Tags" -msgstr "" +msgstr "M?rker" #: plugins/output-flickr/output-flickr.c:140 msgid "Public (everyone can see this)" -msgstr "" +msgstr "Offentlig (alle kan se dette)" #: plugins/output-flickr/output-flickr.c:146 msgid "Visible to Friends" -msgstr "" +msgstr "Synlig for venner" #: plugins/output-flickr/output-flickr.c:152 msgid "Visible to Family" -msgstr "" +msgstr "Synlig for familie" #: plugins/output-flickr/output-flickr.c:156 msgid "Upload photo to Flickr" -msgstr "" +msgstr "Send billede til Flickr" #: plugins/output-flickr/output-flickr.c:305 +#, fuzzy msgid "We recieved an error during authentication. Please try again." -msgstr "" +msgstr "We recieved an error during authentication. Please try again." #: plugins/output-flickr/output-flickr.c:308 -msgid "" -"Rawstudio were not able to upload the photo cause the authentication has " -"been revoked. Please re-authenticate Rawstudio to upload to Flickr." -msgstr "" +#, fuzzy +msgid "Rawstudio were not able to upload the photo cause the authentication has been revoked. Please re-authenticate Rawstudio to upload to Flickr." +msgstr "Rawstudio were not able to upload the photo cause the authentication has been revoked. Please re-authenticate Rawstudio to upload to Flickr." #: plugins/output-flickr/output-flickr.c:311 -msgid "" -"It seems like rawstudio lost its authentication to upload to your account, " -"please re-authenticate." -msgstr "" +#, fuzzy +msgid "It seems like rawstudio lost its authentication to upload to your account, please re-authenticate." +msgstr "It seems like rawstudio lost its authentication to upload to your account, please re-authenticate." #: plugins/output-flickr/output-flickr.c:315 -#, c-format +#, fuzzy, c-format msgid "" "%s\n" "\n" -"Note: This error isn't catched by Rawstudio. Please let us know that you " -"found it and how to reproduce it so we can make a more useful errormessage. " -"Thanks!" +"Note: This error isn't catched by Rawstudio. Please let us know that you found it and how to reproduce it so we can make a more useful errormessage. Thanks!" msgstr "" +"%s\n" +"\n" +"Note: This error isn't catched by Rawstudio. Please let us know that you found it and how to reproduce it so we can make a more useful errormessage. Thanks!" #: plugins/output-flickr/output-flickr.c:317 +#, fuzzy msgid "Flickr error" -msgstr "" +msgstr "Flickr error" #: plugins/output-flickr/output-flickr.c:376 -msgid "" -"Rawstudio needs to be authenticated before it will be able to upload photos " -"to your Flickr account." -msgstr "" +#, fuzzy +msgid "Rawstudio needs to be authenticated before it will be able to upload photos to your Flickr account." +msgstr "Rawstudio needs to be authenticated before it will be able to upload photos to your Flickr account." #: plugins/output-flickr/output-flickr.c:383 +#, fuzzy msgid "Step 1:" -msgstr "" +msgstr "Step 1:" #: plugins/output-flickr/output-flickr.c:384 +#, fuzzy msgid "Step 2:" -msgstr "" +msgstr "Step 2:" #: plugins/output-flickr/output-flickr.c:386 +#, fuzzy msgid "Authenticate Rawstudio" -msgstr "" +msgstr "Authenticate Rawstudio" #: plugins/output-jpegfile/output-jpegfile.c:93 msgid "JPEG (Joint Photographic Experts Group)" @@ -1220,7 +1253,7 @@ #: plugins/output-tifffile/output-tifffile.c:87 msgid "Save 16 bit TIFF" -msgstr "" +msgstr "Gem 16 bit TIFF" #: plugins/output-tifffile/output-tifffile.c:93 #, fuzzy @@ -1229,108 +1262,74 @@ #~ msgid "Background renderer active" #~ msgstr "Beregner i baggrunden" - #~ msgid "Preload photos" #~ msgstr "Forh?nds?bning af fotos" - #~ msgid "Filename:" #~ msgstr "Filnavn:" - #~ msgid "File export canceled" #~ msgstr "Eksportering af fil afbrudt" - #~ msgid "16-bit TIFF (Tagged Image File Format)" #~ msgstr "16-bit TIFF (Tagged Image File Format)" - #~ msgid "Rotate the photo 180 degrees" #~ msgstr "Roter fotoet 180 grader" - #~ msgid "Reset this setting" #~ msgstr "Nulstil denne indstilling" - #~ msgid "_Zoom to 100%" #~ msgstr "_Zoom til 100%" - #~ msgid "%dmm " #~ msgstr "%dmm " - #~ msgid "%.1fs " #~ msgstr "%.1fs " - #~ msgid "1/%.0fs " #~ msgstr "1/%.0fs " - #~ msgid "F/%.1f " #~ msgstr "F/%.1f " - #~ msgid "No metadata" #~ msgstr "Ingen metadata" - #~ msgid "Canon CR2" #~ msgstr "Canon CR2" - #~ msgid "Canon CIFF" #~ msgstr "Canon CIFF" - #~ msgid "Nikon NEF" #~ msgstr "Nikon NEF" - #~ msgid "Minolta raw" #~ msgstr "Minolta raw" - #~ msgid "Canon TIFF" #~ msgstr "Canon TIFF" - #~ msgid "Sony" #~ msgstr "Sony" - #~ msgid "Kodak" #~ msgstr "Kodak" - #~ msgid "Sigma" #~ msgstr "Sigma" - #~ msgid "Panasonic raw" #~ msgstr "Panasonic raw" - #~ msgid "Pentax raw" #~ msgstr "Pentax raw" - #~ msgid "Adobe Digital negative" #~ msgstr "Adobe Digital negative" - #~ msgid "Mamiya" #~ msgstr "Mamiya" - #~ msgid "Hasselblad" #~ msgstr "Hasselblad" - #~ msgid "Split" #~ msgstr "Delt visning" - #~ msgid "Exp. mask" #~ msgstr "Eksponerings maskering" - #~ msgid "Toggle exposure mask" #~ msgstr "Skift eksponerings maskerings tilstand" - #~ msgid "Set zoom" #~ msgstr "Set zoom" - #~ msgid "Zoom out" #~ msgstr "Zoom ud" - #~ msgid "Zoom in" #~ msgstr "Zoom ind" - #~ msgid "Zoom to fit" #~ msgstr "Zoom tilpasning" - #~ msgid "Zoom to 100%" #~ msgstr "Zoom til 100%" - #~ msgid "Zoom:" #~ msgstr "Zoom:" - #~ msgid "Apply" #~ msgstr "Anvend" + From klauspost at gmail.com Mon Sep 28 19:58:39 2009 From: klauspost at gmail.com (Klaus Post) Date: Mon, 28 Sep 2009 19:58:39 +0200 Subject: [Rawstudio-commit] r2679 - trunk/plugins/resample Message-ID: Author: post Date: 2009-09-28 19:58:39 +0200 (Mon, 28 Sep 2009) New Revision: 2679 Modified: trunk/plugins/resample/resample.c Log: Rewrote vertical resampler to integer SSE2, input is truncated to 15 bits, but difference should be about 90dB PSNR, and there is no bias, so difference should not be noticable. Added 32 bit SSE2 vertical resampler, about 50% speed of the 64 bit one - still considerably faster, though. Modified: trunk/plugins/resample/resample.c =================================================================== --- trunk/plugins/resample/resample.c 2009-09-28 16:51:41 UTC (rev 2678) +++ trunk/plugins/resample/resample.c 2009-09-28 17:58:39 UTC (rev 2679) @@ -247,14 +247,6 @@ return mask; } -/* This function is (probably) only faster on x86-64 */ - -#if defined (__x86_64__) -#define RESAMPLE_V_USE_SSE2 1 -#else -#define RESAMPLE_V_USE_SSE2 0 -#endif - gpointer start_thread_resampler(gpointer _thread_info) { @@ -262,11 +254,12 @@ if (t->input->w == t->output->w) { + gboolean sse2_available = !!(rs_detect_cpu_features() & RS_CPU_FLAG_SSE2); if (t->use_fast) ResizeV_fast(t); - else if (!RESAMPLE_V_USE_SSE2 && t->use_compatible) + else if (!sse2_available && t->use_compatible) ResizeV_compatible(t); - else if (RESAMPLE_V_USE_SSE2) + else if (sse2_available) ResizeV_SSE2(t); else ResizeV(t); @@ -666,16 +659,12 @@ } -/* Special Vertical SSE2 resampler, that has massive parallism, - * but on the other hand has to convert all data to float before - * processing it, because there is no 32 * 32 bit multiply in SSE2. - * This makes it very precise, and faster on a Core2 and later Intel - * processors in 64 bit mode. +/* Special Vertical SSE2 resampler, that has massive parallism. * An important restriction is that "info->dest_offset_other", must result * in a 16 byte aligned memory pointer. */ -#if defined (__x86_64__) +#if !defined (__x86_64__) static void ResizeV_SSE2(ResampleInfo *info) @@ -695,7 +684,7 @@ if (old_size <= fir_filter_size) return ResizeV_fast(info); - gfloat *weights = g_new(gfloat, new_size * fir_filter_size); + gint *weights = g_new(gint, new_size * fir_filter_size); gint *offsets = g_new(gint, new_size); gdouble pos = 0.0; @@ -734,17 +723,25 @@ for (k=0; k> 2); + /* Subtract 32768 as it would appear after shift */ + add_round_sub -= (32768 << (FPScaleShift-1)); + /* 0.5 pixel value is lost to rounding times fir_filter_size, compensate */ + add_round_sub += fir_filter_size * (FPScale >> 2); for (y = 0; y < new_size ; y++) { @@ -755,114 +752,266 @@ for (x = start_x; x <= (end_x_sse-24); x+=24) { /* Accumulators, set to 0 */ - __m128 acc1, acc2, acc3, acc1_h, acc2_h, acc3_h; - acc1 = acc2 = acc3 = acc1_h = acc2_h = acc3_h = (__m128)zero; + __m128i acc1, acc2, acc3, acc1_h, acc2_h, acc3_h; + acc1 = acc2 = acc3 = acc1_h = acc2_h = acc3_h = zero; for (i = 0; i < fir_filter_size; i++) { /* Load weight */ - __m128 w = _mm_set_ps(wg[i],wg[i],wg[i],wg[i]); + __m128i w = _mm_set_epi32(wg[i],wg[i],wg[i],wg[i]); /* Load source */ __m128i src1i, src2i, src3i; - __m128i* in_sse = (__m128i*)&in[i*input->rowstride]; + __m128i* in_sse = (__m128i*)&in[i * input->rowstride]; src1i = _mm_load_si128(in_sse); src2i = _mm_load_si128(in_sse+1); src3i = _mm_load_si128(in_sse+2); /* Unpack to dwords */ - __m128i src1i_high, src2i_high, src3i_high; - src1i_high = _mm_unpackhi_epi16(src1i, zero); - src2i_high = _mm_unpackhi_epi16(src2i, zero); - src3i_high = _mm_unpackhi_epi16(src3i, zero); + __m128i src1i_h, src2i_h, src3i_h; + src1i_h = _mm_unpackhi_epi16(src1i, zero); + src2i_h = _mm_unpackhi_epi16(src2i, zero); + src3i_h = _mm_unpackhi_epi16(src3i, zero); src1i = _mm_unpacklo_epi16(src1i, zero); src2i = _mm_unpacklo_epi16(src2i, zero); src3i = _mm_unpacklo_epi16(src3i, zero); + + /*Shift down to 15 bit for multiplication */ + src1i_h = _mm_srli_epi16(src1i_h, 1); + src2i_h = _mm_srli_epi16(src2i_h, 1); + src3i_h = _mm_srli_epi16(src3i_h, 1); + src1i = _mm_srli_epi16(src1i, 1); + src2i = _mm_srli_epi16(src2i, 1); + src3i = _mm_srli_epi16(src3i, 1); + + /* Multiply my weight */ + src1i_h = _mm_madd_epi16(src1i_h, w); + src2i_h = _mm_madd_epi16(src2i_h, w); + src3i_h = _mm_madd_epi16(src3i_h, w); + src1i = _mm_madd_epi16(src1i, w); + src2i = _mm_madd_epi16(src2i, w); + src3i = _mm_madd_epi16(src3i, w); - /* Convert to float */ - __m128 src1, src2, src3; - __m128 src1_high, src2_high, src3_high; - src1_high = _mm_cvtepi32_ps(src1i_high); - src2_high = _mm_cvtepi32_ps(src2i_high); - src3_high = _mm_cvtepi32_ps(src3i_high); - src1 = _mm_cvtepi32_ps(src1i); - src2 = _mm_cvtepi32_ps(src2i); - src3 = _mm_cvtepi32_ps(src3i); + /* Accumulate */ + acc1_h = _mm_add_epi32(acc1_h, src1i_h); + acc2_h = _mm_add_epi32(acc2_h, src2i_h); + acc3_h = _mm_add_epi32(acc3_h, src3i_h); + acc1 = _mm_add_epi32(acc1, src1i); + acc2 = _mm_add_epi32(acc2, src2i); + acc3 = _mm_add_epi32(acc3, src3i); + } + __m128i add_32 = _mm_set_epi32(add_round_sub, add_round_sub, add_round_sub, add_round_sub); + __m128i signxor = _mm_set_epi32(0x80008000, 0x80008000, 0x80008000, 0x80008000); + + /* Add rounder and subtract 32768 */ + acc1_h = _mm_add_epi32(acc1_h, add_32); + acc2_h = _mm_add_epi32(acc2_h, add_32); + acc3_h = _mm_add_epi32(acc3_h, add_32); + acc1 = _mm_add_epi32(acc1, add_32); + acc2 = _mm_add_epi32(acc2, add_32); + acc3 = _mm_add_epi32(acc3, add_32); + + /* Shift down */ + acc1_h = _mm_srai_epi32(acc1_h, FPScaleShift - 1 ); + acc2_h = _mm_srai_epi32(acc2_h, FPScaleShift - 1); + acc3_h = _mm_srai_epi32(acc3_h, FPScaleShift - 1); + acc1 = _mm_srai_epi32(acc1, FPScaleShift - 1); + acc2 = _mm_srai_epi32(acc2, FPScaleShift - 1); + acc3 = _mm_srai_epi32(acc3, FPScaleShift - 1); + + /* Pack to signed shorts */ + acc1 = _mm_packs_epi32(acc1, acc1_h); + acc2 = _mm_packs_epi32(acc2, acc2_h); + acc3 = _mm_packs_epi32(acc3, acc3_h); - /* Multiply by weight */ - src1_high = _mm_mul_ps(src1_high, w); - src2_high = _mm_mul_ps(src2_high, w); - src3_high = _mm_mul_ps(src3_high, w); - src1 = _mm_mul_ps(src1, w); - src2 = _mm_mul_ps(src2, w); - src3 = _mm_mul_ps(src3, w); + /* Shift sign to unsinged shorts */ + acc1 = _mm_xor_si128(acc1, signxor); + acc2 = _mm_xor_si128(acc2, signxor); + acc3 = _mm_xor_si128(acc3, signxor); - /* Accumulate */ - acc1_h = _mm_add_ps(acc1_h, src1_high); - acc2_h = _mm_add_ps(acc2_h, src2_high); - acc3_h = _mm_add_ps(acc3_h, src3_high); - acc1 = _mm_add_ps(acc1, src1); - acc2 = _mm_add_ps(acc2, src2); - acc3 = _mm_add_ps(acc3, src3); + /* Store result */ + __m128i* sse_dst = (__m128i*)&out[x]; + _mm_store_si128(sse_dst, acc1); + _mm_store_si128(sse_dst + 1, acc2); + _mm_store_si128(sse_dst + 2, acc3); + in += 24; + } + + /* Process remaining pixels */ + for (; x < end_x; x++) + { + gint acc1 = 0; + for (i = 0; i < fir_filter_size; i++) + { + acc1 += in[i * input->rowstride] * *(gshort*)&wg[i]; } - __m128i subtract = _mm_set_epi32(32768, 32768, 32768, 32768); + out[x] = clampbits((acc1 + (FPScale / 2)) >> FPScaleShift, 16); + in++; + } + wg += fir_filter_size; + } + g_free(weights); + g_free(offsets); +} - /* Convert to integer */ - __m128i acc1i, acc2i, acc3i, acc1_hi, acc2_hi, acc3_hi; - acc1i = _mm_cvtps_epi32(acc1); - acc2i = _mm_cvtps_epi32(acc2); - acc3i = _mm_cvtps_epi32(acc3); - acc1_hi = _mm_cvtps_epi32(acc1_h); - acc2_hi = _mm_cvtps_epi32(acc2_h); - acc3_hi = _mm_cvtps_epi32(acc3_h); +#elif defined (__SSE2__) - /* Subtract 32768 to avoid signed saturation */ - acc1i = _mm_sub_epi32(acc1i, subtract); - acc2i = _mm_sub_epi32(acc2i, subtract); - acc3i = _mm_sub_epi32(acc3i, subtract); - acc1_hi = _mm_sub_epi32(acc1_hi, subtract); - acc2_hi = _mm_sub_epi32(acc2_hi, subtract); - acc3_hi = _mm_sub_epi32(acc3_hi, subtract); +static void +ResizeV_SSE2(ResampleInfo *info) +{ + const RS_IMAGE16 *input = info->input; + const RS_IMAGE16 *output = info->output; + const guint old_size = info->old_size; + const guint new_size = info->new_size; + const guint start_x = info->dest_offset_other * input->pixelsize; + const guint end_x = info->dest_end_other * input->pixelsize; + gdouble pos_step = ((gdouble) old_size) / ((gdouble)new_size); + gdouble filter_step = MIN(1.0 / pos_step, 1.0); + gdouble filter_support = (gdouble) lanczos_taps() / filter_step; + gint fir_filter_size = (gint) (ceil(filter_support*2)); + + if (old_size <= fir_filter_size) + return ResizeV_fast(info); + + gint *weights = g_new(gint, new_size * fir_filter_size); + gint *offsets = g_new(gint, new_size); + + gdouble pos = 0.0; + + gint i,j,k; + + for (i=0; i old_size-1) + end_pos = old_size-1; + + gint start_pos = end_pos - fir_filter_size + 1; + + if (start_pos < 0) + start_pos = 0; + + offsets[i] = start_pos; + + /* The following code ensures that the coefficients add to exactly FPScale */ + gdouble total = 0.0; + + /* Ensure that we have a valid position */ + gdouble ok_pos = MAX(0.0,MIN(old_size-1,pos)); + + for (j=0; j 0.0f); + + gdouble total2 = 0.0; + + for (k=0; k> 2); + /* Subtract 32768 as it would appear after shift */ + add_round_sub -= (32768 << (FPScaleShift-1)); + /* 0.5 pixel value is lost to rounding times fir_filter_size, compensate */ + add_round_sub += fir_filter_size * (FPScale >> 2); + + for (y = 0; y < new_size ; y++) + { + gushort *in = GET_PIXEL(input, start_x / input->pixelsize, offsets[y]); + gushort *out = GET_PIXEL(output, 0, y); + __m128i zero; + zero = _mm_xor_si128(zero, zero); + for (x = start_x; x <= (end_x_sse-8); x+=8) + { + /* Accumulators, set to 0 */ + __m128i acc1, acc1_h; + acc1 = acc1_h = zero; + + for (i = 0; i < fir_filter_size; i++) { + /* Load weight */ + __m128i w = _mm_set_epi32(wg[i],wg[i],wg[i],wg[i]); + /* Load source */ + __m128i src1i; + __m128i* in_sse = (__m128i*)&in[i * input->rowstride]; + src1i = _mm_load_si128(in_sse); + /* Unpack to dwords */ + __m128i src1i_h; + src1i_h = _mm_unpackhi_epi16(src1i, zero); + src1i = _mm_unpacklo_epi16(src1i, zero); + + /*Shift down to 15 bit for multiplication */ + src1i_h = _mm_srli_epi16(src1i_h, 1); + src1i = _mm_srli_epi16(src1i, 1); + + /* Multiply my weight */ + src1i_h = _mm_madd_epi16(src1i_h, w); + src1i = _mm_madd_epi16(src1i, w); + + /* Accumulate */ + acc1_h = _mm_add_epi32(acc1_h, src1i_h); + acc1 = _mm_add_epi32(acc1, src1i); + } + __m128i add_32 = _mm_set_epi32(add_round_sub, add_round_sub, add_round_sub, add_round_sub); __m128i signxor = _mm_set_epi32(0x80008000, 0x80008000, 0x80008000, 0x80008000); - + + /* Add rounder and subtract 32768 */ + acc1_h = _mm_add_epi32(acc1_h, add_32); + acc1 = _mm_add_epi32(acc1, add_32); + + /* Shift down */ + acc1_h = _mm_srai_epi32(acc1_h, FPScaleShift - 1 ); + acc1 = _mm_srai_epi32(acc1, FPScaleShift - 1); + /* Pack to signed shorts */ - acc1i = _mm_packs_epi32(acc1i, acc1_hi); - acc2i = _mm_packs_epi32(acc2i, acc2_hi); - acc3i = _mm_packs_epi32(acc3i, acc3_hi); + acc1 = _mm_packs_epi32(acc1, acc1_h); /* Shift sign to unsinged shorts */ - acc1i = _mm_xor_si128(acc1i,signxor); - acc2i = _mm_xor_si128(acc2i,signxor); - acc3i = _mm_xor_si128(acc3i,signxor); + acc1 = _mm_xor_si128(acc1, signxor); /* Store result */ __m128i* sse_dst = (__m128i*)&out[x]; - _mm_store_si128(sse_dst, acc1i); - _mm_store_si128(sse_dst+1, acc2i); - _mm_store_si128(sse_dst+2, acc3i); - in+=24; + _mm_store_si128(sse_dst, acc1); + in += 8; } + /* Process remaining pixels */ for (; x < end_x; x++) { - gfloat acc1 = 0; + gint acc1 = 0; for (i = 0; i < fir_filter_size; i++) { - acc1 += (gfloat)in[i*input->rowstride]* wg[i]; + acc1 += in[i * input->rowstride] * *(gshort*)&wg[i]; } - out[x] = (gushort)clampbits((int)(acc1), 16); + out[x] = clampbits((acc1 + (FPScale / 2)) >> FPScaleShift, 16); in++; } - wg+=fir_filter_size; + wg += fir_filter_size; } g_free(weights); g_free(offsets); } -#else // not defined (__x86_64__) +#else static void ResizeV_SSE2(ResampleInfo *info) { - g_assert(FALSE); + ResizeV(info); } #endif // not defined (__x86_64__) From anders at brander.dk Mon Sep 28 20:19:57 2009 From: anders at brander.dk (Anders Brander) Date: Mon, 28 Sep 2009 20:19:57 +0200 Subject: [Rawstudio-commit] r2680 - trunk/librawstudio Message-ID: Author: abrander Date: 2009-09-28 20:19:57 +0200 (Mon, 28 Sep 2009) New Revision: 2680 Modified: trunk/librawstudio/rs-tiff.c trunk/librawstudio/rs-tiff.h Log: Added rs_tiff_get_ascii(). Modified: trunk/librawstudio/rs-tiff.c =================================================================== --- trunk/librawstudio/rs-tiff.c 2009-09-28 17:58:39 UTC (rev 2679) +++ trunk/librawstudio/rs-tiff.c 2009-09-28 18:19:57 UTC (rev 2680) @@ -168,3 +168,19 @@ return ret; } + +gchar * +rs_tiff_get_ascii(RSTiff *tiff, guint ifd_num, gushort tag) +{ + gchar *ret = NULL; + RSTiffIfdEntry *entry = NULL; + + entry = rs_tiff_get_ifd_entry(tiff, ifd_num, tag); + if (entry && entry->type && entry->count) + { + if ((entry->value_offset + entry->count) < tiff->map_length) + ret = g_strndup(tiff->map + entry->value_offset , entry->count); + } + + return ret; +} Modified: trunk/librawstudio/rs-tiff.h =================================================================== --- trunk/librawstudio/rs-tiff.h 2009-09-28 17:58:39 UTC (rev 2679) +++ trunk/librawstudio/rs-tiff.h 2009-09-28 18:19:57 UTC (rev 2680) @@ -56,6 +56,9 @@ RSTiffIfdEntry * rs_tiff_get_ifd_entry(RSTiff *tiff, guint ifd_num, gushort tag); +gchar * +rs_tiff_get_ascii(RSTiff *tiff, guint ifd_num, gushort tag); + G_END_DECLS #endif /* RS_TIFF_H */ From anders at brander.dk Mon Sep 28 20:35:25 2009 From: anders at brander.dk (Anders Brander) Date: Mon, 28 Sep 2009 20:35:25 +0200 Subject: [Rawstudio-commit] r2681 - trunk/plugins/resample Message-ID: Author: abrander Date: 2009-09-28 20:35:25 +0200 (Mon, 28 Sep 2009) New Revision: 2681 Modified: trunk/plugins/resample/resample.c Log: Made RSResample compile on non-SSE2 archs. Modified: trunk/plugins/resample/resample.c =================================================================== --- trunk/plugins/resample/resample.c 2009-09-28 18:19:57 UTC (rev 2680) +++ trunk/plugins/resample/resample.c 2009-09-28 18:35:25 UTC (rev 2681) @@ -82,7 +82,9 @@ static gint get_height(RSFilter *filter); static void ResizeH(ResampleInfo *info); static void ResizeV(ResampleInfo *info); +#if defined (__SSE2__) static void ResizeV_SSE2(ResampleInfo *info); +#endif /* defined (__SSE2__) */ static void ResizeH_compatible(ResampleInfo *info); static void ResizeV_compatible(ResampleInfo *info); static void ResizeH_fast(ResampleInfo *info); @@ -259,8 +261,10 @@ ResizeV_fast(t); else if (!sse2_available && t->use_compatible) ResizeV_compatible(t); +#if defined (__SSE2__) else if (sse2_available) ResizeV_SSE2(t); +#endif /* defined (__SSE2__) */ else ResizeV(t); } else { @@ -665,6 +669,7 @@ */ #if !defined (__x86_64__) +#if defined (__SSE2__) static void ResizeV_SSE2(ResampleInfo *info) @@ -850,7 +855,7 @@ g_free(weights); g_free(offsets); } - +#endif /* defined (__SSE2__) */ #elif defined (__SSE2__) static void From klauspost at gmail.com Mon Sep 28 23:06:42 2009 From: klauspost at gmail.com (Klaus Post) Date: Mon, 28 Sep 2009 23:06:42 +0200 Subject: [Rawstudio-commit] rawspeed r152 - RawSpeed Message-ID: Author: post Date: 2009-09-28 23:06:41 +0200 (Mon, 28 Sep 2009) New Revision: 152 Modified: RawSpeed/ArwDecoder.cpp RawSpeed/ArwDecoder.h RawSpeed/ByteStream.cpp RawSpeed/ByteStream.h RawSpeed/RawDecoder.cpp RawSpeed/RawDecoder.h RawSpeed/Rw2Decoder.cpp RawSpeed/Rw2Decoder.h Log: - Added multhreading helpers. - Added multithreaded decodding of compressed ARW2 files. - Added multithreaded decoding of RW2 files. Modified: RawSpeed/ArwDecoder.cpp =================================================================== --- RawSpeed/ArwDecoder.cpp 2009-09-27 19:12:41 UTC (rev 151) +++ RawSpeed/ArwDecoder.cpp 2009-09-28 21:06:41 UTC (rev 152) @@ -122,45 +122,21 @@ } void ArwDecoder::DecodeARW2(ByteStream &input, guint w, guint h, guint bpp) { - guchar* data = mRaw->getData(); - guint pitch = mRaw->pitch; + if (bpp == 8) { - BitPumpPlain bits(&input); - for (guint y = 0; y < h; y++ ) { - gushort* dest = (gushort*)&data[y*pitch]; - bits.setAbsoluteOffset((w*bpp*y)>>3); // Realign - // Process 32 pixels (16x2) per loop. - for (guint x = 0; x < w-30; ) { - bits.checkPos(); - gint _max = bits.getBits(11); - gint _min = bits.getBits(11); - gint _imax = bits.getBits(4); - gint _imin = bits.getBits(4); - gint sh; - for (sh = 0; sh < 4 && 0x80 << sh <= _max-_min; sh++); - for (gint i = 0; i < 16; i++) { - gint p; - if (i == _imax) p = _max; - else if (i == _imin) p = _min; - else { - p = (bits.getBits(7) << sh) + _min; - if (p > 0x7ff) - p = 0x7ff; - } - dest[x+i*2] = curve[p << 1]; - } - x += x & 1 ? 31 : 1; // Skip to next 32 pixels - } - } + in = &input; + this->startThreads(); return; } // End bpp = 8 + if (bpp==12) { guchar* data = mRaw->getData(); guint pitch = mRaw->pitch; const guchar *in = input.getData(); - if (input.getRemainSize()< (w*h*3/2) ) { + + if (input.getRemainSize()< (w*h*3/2) ) h = input.getRemainSize() / (w*3/2) - 1; - } + for (guint y=0; y < h; y++) { gushort* dest = (gushort*)&data[y*pitch]; for(guint x =0 ; x < w; x+=2) { @@ -199,4 +175,43 @@ string model = data[0]->getEntry(MODEL)->getString(); setMetaData(meta, make, model, ""); -} \ No newline at end of file +} + +/* Since ARW2 compressed images have predictable offsets, we decode them threaded */ + +void ArwDecoder::decodeThreaded(RawDecoderThread * t) +{ + guchar* data = mRaw->getData(); + guint pitch = mRaw->pitch; + guint w = mRaw->dim.x; + + BitPumpPlain bits(in); + for (guint y = t->start_y; y < t->end_y; y++ ) { + gushort* dest = (gushort*)&data[y*pitch]; + // Realign + bits.setAbsoluteOffset((w*8*y)>>3); + + // Process 32 pixels (16x2) per loop. + for (guint x = 0; x < w-30; ) { + bits.checkPos(); + gint _max = bits.getBits(11); + gint _min = bits.getBits(11); + gint _imax = bits.getBits(4); + gint _imin = bits.getBits(4); + gint sh; + for (sh = 0; sh < 4 && 0x80 << sh <= _max-_min; sh++); + for (gint i = 0; i < 16; i++) { + gint p; + if (i == _imax) p = _max; + else if (i == _imin) p = _min; + else { + p = (bits.getBits(7) << sh) + _min; + if (p > 0x7ff) + p = 0x7ff; + } + dest[x+i*2] = curve[p << 1]; + } + x += x & 1 ? 31 : 1; // Skip to next 32 pixels + } + } +} Modified: RawSpeed/ArwDecoder.h =================================================================== --- RawSpeed/ArwDecoder.h 2009-09-27 19:12:41 UTC (rev 151) +++ RawSpeed/ArwDecoder.h 2009-09-28 21:06:41 UTC (rev 152) @@ -34,9 +34,11 @@ virtual RawImage decodeRaw(); virtual void checkSupport(CameraMetaData *meta); virtual void decodeMetaData(CameraMetaData *meta); + virtual void decodeThreaded(RawDecoderThread* t); protected: void DecodeARW(ByteStream &input, guint w, guint h); void DecodeARW2(ByteStream &input, guint w, guint h, guint bpp); TiffIFD *mRootIFD; guint curve[0x4001]; + ByteStream *in; }; Modified: RawSpeed/ByteStream.cpp =================================================================== --- RawSpeed/ByteStream.cpp 2009-09-27 19:12:41 UTC (rev 151) +++ RawSpeed/ByteStream.cpp 2009-09-28 21:06:41 UTC (rev 152) @@ -29,6 +29,12 @@ } +ByteStream::ByteStream(const ByteStream *b) : +buffer(b->buffer), size(b->size), off(b->off) +{ + +} + ByteStream::~ByteStream(void) { Modified: RawSpeed/ByteStream.h =================================================================== --- RawSpeed/ByteStream.h 2009-09-27 19:12:41 UTC (rev 151) +++ RawSpeed/ByteStream.h 2009-09-28 21:06:41 UTC (rev 152) @@ -25,6 +25,7 @@ { public: ByteStream(const guchar* _buffer, guint _size); + ByteStream(const ByteStream* b); ~ByteStream(void); guint peekByte(); gushort getShort(); Modified: RawSpeed/RawDecoder.cpp =================================================================== --- RawSpeed/RawDecoder.cpp 2009-09-27 19:12:41 UTC (rev 151) +++ RawSpeed/RawDecoder.cpp 2009-09-28 21:06:41 UTC (rev 152) @@ -167,5 +167,53 @@ } else str = str.substr( startpos, endpos-startpos+1 ); +} -} + +void *RawDecoderDecodeThread(void *_this) { + RawDecoderThread* me = (RawDecoderThread*)_this; + try { + me->parent->decodeThreaded(me); + } catch (RawDecoderException ex) { + me->error = _strdup(ex.what()); + } + pthread_exit(NULL); + return 0; +} + +void RawDecoder::startThreads() +{ + guint threads = rs_get_number_of_processor_cores(); + int y_offset = 0; + int y_per_thread = (mRaw->dim.y + threads - 1) / threads; + RawDecoderThread t[threads]; + + pthread_attr_t attr; + + /* Initialize and set thread detached attribute */ + pthread_attr_init(&attr); + pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE); + + for (guint i = 0; i < threads; i++) + { + t[i].start_y = y_offset; + t[i].end_y = MIN(y_offset + y_per_thread, mRaw->dim.y); + t[i].parent = this; + pthread_create(&t[i].threadid, &attr, RawDecoderDecodeThread, &t[i]); + y_offset = t[i].end_y; + } + + void *status; + for(guint i = 0; i < threads; i++){ + pthread_join(t[i].threadid, &status); + if (t[i].error) { + errors.push_back(t[i].error); + } + } +} + +void RawDecoder::decodeThreaded(RawDecoderThread * t) +{ + ThrowRDE("Internal Error: This class does not support threaded decoding"); +} + Modified: RawSpeed/RawDecoder.h =================================================================== --- RawSpeed/RawDecoder.h 2009-09-27 19:12:41 UTC (rev 151) +++ RawSpeed/RawDecoder.h 2009-09-28 21:06:41 UTC (rev 152) @@ -27,6 +27,20 @@ http://www.klauspost.com */ + +class RawDecoder; + +class RawDecoderThread +{ + public: + RawDecoderThread() {error = 0;}; + guint start_y; + guint end_y; + const char* error; + pthread_t threadid; + RawDecoder* parent; +}; + class RawDecoder { public: @@ -35,11 +49,13 @@ virtual RawImage decodeRaw() = 0; virtual void checkSupport(CameraMetaData *meta) = 0; virtual void decodeMetaData(CameraMetaData *meta) = 0; + virtual void decodeThreaded(RawDecoderThread* t); FileMap *mFile; void readUncompressedRaw(ByteStream &input, iPoint2D& size, iPoint2D& offset, int inputPitch, int bitPerPixel, gboolean MSBOrder); RawImage mRaw; vector errors; protected: + void startThreads(); void checkCameraSupported(CameraMetaData *meta, string make, string model, string mode); virtual void setMetaData(CameraMetaData *meta, string make, string model, string mode); void Decode12BitRaw(ByteStream &input, guint w, guint h); Modified: RawSpeed/Rw2Decoder.cpp =================================================================== --- RawSpeed/Rw2Decoder.cpp 2009-09-27 19:12:41 UTC (rev 151) +++ RawSpeed/Rw2Decoder.cpp 2009-09-28 21:06:41 UTC (rev 152) @@ -24,15 +24,15 @@ */ Rw2Decoder::Rw2Decoder(TiffIFD *rootIFD, FileMap* file) : -RawDecoder(file), mRootIFD(rootIFD), input(0),vbits(0) +RawDecoder(file), mRootIFD(rootIFD), input_start(0) { } Rw2Decoder::~Rw2Decoder(void) { - if (input) - delete input; - input = 0; + if (input_start) + delete input_start; + input_start = 0; } RawImage Rw2Decoder::decodeRaw() @@ -61,7 +61,7 @@ load_flags = 0x2008; gint off = offsets->getInt(); - input = new ByteStream(mFile->getData(off),mFile->getSize()-off); + input_start = new ByteStream(mFile->getData(off),mFile->getSize()-off); try { DecodeRw2(); } catch (IOException e) { @@ -74,75 +74,60 @@ void Rw2Decoder::DecodeRw2() { - int x, y, i, j, sh=0, pred[2], nonz[2]; + startThreads(); +} + +void Rw2Decoder::decodeThreaded(RawDecoderThread * t) +{ + int x, i, j, sh=0, pred[2], nonz[2]; int w = mRaw->dim.x/14; - int h = mRaw->dim.y; + guint y; - for (y=0; y < h; y++) { + /* 9 + 1/7 bits per pixel */ + int skip = w * 14 * t->start_y * 9; + skip += w * 2 * t->start_y; + skip /= 8; + + PanaBitpump bits(new ByteStream(input_start)); + bits.load_flags = load_flags; + bits.skipBytes(skip); + + for (y = t->start_y; y < t->end_y; y++) { gushort* dest = (gushort*)mRaw->getData(0,y); for (x=0; x < w; x++) { pred[0] = pred[1] = nonz[0] = nonz[1] = 0; for (i = 0; i < 14; i++) { // Even pixels if (i % 3 == 2) - sh = 4 >> (3 - pana_bits(2)); + sh = 4 >> (3 - bits.getBits(2)); if (nonz[0]) { - if ((j = pana_bits(8))) { + if ((j = bits.getBits(8))) { if ((pred[0] -= 0x80 << sh) < 0 || sh == 4) pred[0] &= ~(-1 << sh); pred[0] += j << sh; } - } else if ((nonz[0] = pana_bits(8)) || i > 11) - pred[0] = nonz[0] << 4 | pana_bits(4); - *dest++ = pred[0]; + } else if ((nonz[0] = bits.getBits(8)) || i > 11) + pred[0] = nonz[0] << 4 | bits.getBits(4); + *dest++ = pred[0]; // Odd pixels - i++; - if (i % 3 == 2) - sh = 4 >> (3 - pana_bits(2)); - if (nonz[1]) { - if ((j = pana_bits(8))) { - if ((pred[1] -= 0x80 << sh) < 0 || sh == 4) - pred[1] &= ~(-1 << sh); - pred[1] += j << sh; - } - } else if ((nonz[1] = pana_bits(8)) || i > 11) - pred[1] = nonz[1] << 4 | pana_bits(4); - *dest++ = pred[1]; + i++; + if (i % 3 == 2) + sh = 4 >> (3 - bits.getBits(2)); + if (nonz[1]) { + if ((j = bits.getBits(8))) { + if ((pred[1] -= 0x80 << sh) < 0 || sh == 4) + pred[1] &= ~(-1 << sh); + pred[1] += j << sh; + } + } else if ((nonz[1] = bits.getBits(8)) || i > 11) + pred[1] = nonz[1] << 4 | bits.getBits(4); + *dest++ = pred[1]; } } - } + } } -guint Rw2Decoder::pana_bits (int nbits) -{ - int byte; - - if (!vbits) { - /* On truncated files this routine will just return just for the truncated - * part of the file. Since there is no chance of affecting output buffer - * size we allow the decoder to decode this - */ - if (input->getRemainSize() < 0x4000-load_flags) { - memcpy (buf+load_flags, input->getData(), input->getRemainSize()); - input->skipBytes(input->getRemainSize()); - } else { - memcpy (buf+load_flags, input->getData(), 0x4000-load_flags); - input->skipBytes(0x4000-load_flags); - if (input->getRemainSize()getData(), input->getRemainSize()); - input->skipBytes(input->getRemainSize()); - } else { - memcpy (buf, input->getData(), load_flags); - input->skipBytes(load_flags); - } - } - } - vbits = (vbits - nbits) & 0x1ffff; - byte = vbits >> 3 ^ 0x3ff0; - return (buf[byte] | buf[byte+1] << 8) >> (vbits & 7) & ~(-1 << nbits); -} - void Rw2Decoder::checkSupport(CameraMetaData *meta) { vector data = mRootIFD->getIFDsWithTag(MODEL); if (data.empty()) @@ -199,3 +184,51 @@ return ""; } + +PanaBitpump::PanaBitpump(ByteStream* _input) : input(_input), vbits(0) +{ +} + +PanaBitpump::~PanaBitpump() +{ + if (input) + delete input; + input = 0; +} + +void PanaBitpump::skipBytes(int bytes) +{ + gint blocks = (bytes/0x4000) * 0x4000; + input->skipBytes(blocks); + for (int i = blocks; i < bytes; i++) + getBits(8); +} + +guint PanaBitpump::getBits(int nbits) +{ + int byte; + + if (!vbits) { + /* On truncated files this routine will just return just for the truncated + * part of the file. Since there is no chance of affecting output buffer + * size we allow the decoder to decode this + */ + if (input->getRemainSize() < 0x4000-load_flags) { + memcpy (buf+load_flags, input->getData(), input->getRemainSize()); + input->skipBytes(input->getRemainSize()); + } else { + memcpy (buf+load_flags, input->getData(), 0x4000-load_flags); + input->skipBytes(0x4000-load_flags); + if (input->getRemainSize()getData(), input->getRemainSize()); + input->skipBytes(input->getRemainSize()); + } else { + memcpy (buf, input->getData(), load_flags); + input->skipBytes(load_flags); + } + } + } + vbits = (vbits - nbits) & 0x1ffff; + byte = vbits >> 3 ^ 0x3ff0; + return (buf[byte] | buf[byte+1] << 8) >> (vbits & 7) & ~(-1 << nbits); +} Modified: RawSpeed/Rw2Decoder.h =================================================================== --- RawSpeed/Rw2Decoder.h 2009-09-27 19:12:41 UTC (rev 151) +++ RawSpeed/Rw2Decoder.h 2009-09-28 21:06:41 UTC (rev 152) @@ -25,6 +25,18 @@ http://www.klauspost.com */ +class PanaBitpump { + public: + PanaBitpump(ByteStream* input); + virtual ~PanaBitpump(); + ByteStream* input; + guchar buf[0x4000]; + int vbits; + guint load_flags; + guint getBits(int nbits); + void skipBytes(int bytes); +}; + class Rw2Decoder : public RawDecoder { @@ -35,14 +47,12 @@ virtual void decodeMetaData(CameraMetaData *meta); virtual void checkSupport(CameraMetaData *meta); TiffIFD *mRootIFD; +protected: + virtual void decodeThreaded(RawDecoderThread* t); private: - guint pana_bits (int nbits); string getMode(const string model); void DecodeRw2(); bool almostEqualRelative(float A, float B, float maxRelativeError); + ByteStream* input_start; guint load_flags; - ByteStream* input; - guchar buf[0x4000]; - int vbits; - }; From klauspost at gmail.com Mon Sep 28 23:07:13 2009 From: klauspost at gmail.com (Klaus Post) Date: Mon, 28 Sep 2009 23:07:13 +0200 Subject: [Rawstudio-commit] rawspeed r153 - / Message-ID: Author: post Date: 2009-09-28 23:07:13 +0200 (Mon, 28 Sep 2009) New Revision: 153 Modified: RawSpeed.kdevelop Log: IDE Updates. Modified: RawSpeed.kdevelop =================================================================== --- RawSpeed.kdevelop 2009-09-28 21:06:41 UTC (rev 152) +++ RawSpeed.kdevelop 2009-09-28 21:07:13 UTC (rev 153) @@ -10,22 +10,22 @@ RawSpeed . false - - + + kdevsubversion executable /usr/local/bin/rawstudio - - + + /home/klaus/dev/rawspeed/RawSpeed false true true true - false + true @@ -468,9 +468,9 @@ 0 - - - + + + default @@ -481,8 +481,8 @@ 4 0 false - - + + -f rawstudio-plugin.makefile default @@ -492,11 +492,11 @@ - - - - - + + + + + true true false @@ -569,7 +569,7 @@ 3 EmbeddedKDevDesigner - + /usr/bin/qmake @@ -597,7 +597,7 @@ .; - + set m_,_ theValue From klauspost at gmail.com Mon Sep 28 23:11:59 2009 From: klauspost at gmail.com (Klaus Post) Date: Mon, 28 Sep 2009 23:11:59 +0200 Subject: [Rawstudio-commit] r2682 - trunk/plugins/resample Message-ID: Author: post Date: 2009-09-28 23:11:59 +0200 (Mon, 28 Sep 2009) New Revision: 2682 Modified: trunk/plugins/resample/resample.c Log: Assembler for x64 was accidentally disabled. Modified: trunk/plugins/resample/resample.c =================================================================== --- trunk/plugins/resample/resample.c 2009-09-28 18:35:25 UTC (rev 2681) +++ trunk/plugins/resample/resample.c 2009-09-28 21:11:59 UTC (rev 2682) @@ -668,7 +668,7 @@ * in a 16 byte aligned memory pointer. */ -#if !defined (__x86_64__) +#if defined (__x86_64__) #if defined (__SSE2__) static void From klauspost at gmail.com Mon Sep 28 23:17:09 2009 From: klauspost at gmail.com (Klaus Post) Date: Mon, 28 Sep 2009 23:17:09 +0200 Subject: [Rawstudio-commit] r2683 - trunk/plugins/resample Message-ID: Author: post Date: 2009-09-28 23:17:09 +0200 (Mon, 28 Sep 2009) New Revision: 2683 Modified: trunk/plugins/resample/resample.c Log: Removed unneeded ifdefs. Modified: trunk/plugins/resample/resample.c =================================================================== --- trunk/plugins/resample/resample.c 2009-09-28 21:11:59 UTC (rev 2682) +++ trunk/plugins/resample/resample.c 2009-09-28 21:17:09 UTC (rev 2683) @@ -82,9 +82,7 @@ static gint get_height(RSFilter *filter); static void ResizeH(ResampleInfo *info); static void ResizeV(ResampleInfo *info); -#if defined (__SSE2__) static void ResizeV_SSE2(ResampleInfo *info); -#endif /* defined (__SSE2__) */ static void ResizeH_compatible(ResampleInfo *info); static void ResizeV_compatible(ResampleInfo *info); static void ResizeH_fast(ResampleInfo *info); @@ -261,10 +259,8 @@ ResizeV_fast(t); else if (!sse2_available && t->use_compatible) ResizeV_compatible(t); -#if defined (__SSE2__) else if (sse2_available) ResizeV_SSE2(t); -#endif /* defined (__SSE2__) */ else ResizeV(t); } else { @@ -1011,7 +1007,7 @@ g_free(offsets); } -#else +#else // not defined (__SSE2__) static void ResizeV_SSE2(ResampleInfo *info) @@ -1019,7 +1015,7 @@ ResizeV(info); } -#endif // not defined (__x86_64__) +#endif // not defined (__x86_64__) and not defined (__SSE2__) static void ResizeH_compatible(ResampleInfo *info) From klauspost at gmail.com Tue Sep 29 19:55:47 2009 From: klauspost at gmail.com (Klaus Post) Date: Tue, 29 Sep 2009 19:55:47 +0200 Subject: [Rawstudio-commit] r2684 - trunk/plugins/demosaic Message-ID: Author: post Date: 2009-09-29 19:55:47 +0200 (Tue, 29 Sep 2009) New Revision: 2684 Modified: trunk/plugins/demosaic/demosaic.c Log: More precise hotpixel detection. Modified: trunk/plugins/demosaic/demosaic.c =================================================================== --- trunk/plugins/demosaic/demosaic.c 2009-09-28 21:17:09 UTC (rev 2683) +++ trunk/plugins/demosaic/demosaic.c 2009-09-29 17:55:47 UTC (rev 2684) @@ -652,7 +652,7 @@ /* If difference larger than surrounding pixels by a factor of 4, replace with left/right pixel interpolation */ - if ((d > d2 * 10) && (d > 2000)) { + if ((d > d2 * 8) && (d > 1600)) { /* Do extended test! */ left = (int)img[x - 4]; right = (int)img[x + 4]; @@ -664,10 +664,13 @@ d = MIN(d, ABS(c - up)); d = MIN(d, ABS(c - down)); + /* Create threshold for surrounding pixels - also include other colors */ d2 = MAX(d2, ABS(left - right)); d2 = MAX(d2, ABS(up - down)); + d2 = MAX(d2, ABS((int)img[x - 1] - (int)img[x + 1])); + d2 = MAX(d2, ABS((int)img[x - (p>>1)] - (int)img[x + (p>>1)])); - if ((d > d2 * 10) && (d > 2000)) { + if ((d > d2 * 8) && (d > 1600)) { img[x] = (gushort)(((gint)img[x-2] + (gint)img[x+2] + 1) >> 1); } } From klauspost at gmail.com Tue Sep 29 20:26:02 2009 From: klauspost at gmail.com (Klaus Post) Date: Tue, 29 Sep 2009 20:26:02 +0200 Subject: [Rawstudio-commit] rawspeed r154 - / RawSpeed Message-ID: Author: post Date: 2009-09-29 20:26:02 +0200 (Tue, 29 Sep 2009) New Revision: 154 Modified: RawSpeed.kdevelop RawSpeed/ArwDecoder.cpp RawSpeed/BitPumpJPEG.cpp RawSpeed/BitPumpMSB.cpp RawSpeed/BitPumpPlain.cpp RawSpeed/ByteStream.cpp RawSpeed/Camera.cpp RawSpeed/CameraMetaData.cpp RawSpeed/CameraMetadataException.cpp RawSpeed/ColorFilterArray.cpp RawSpeed/Cr2Decoder.cpp RawSpeed/DngDecoder.cpp RawSpeed/DngDecoderSlices.cpp RawSpeed/FileIOException.cpp RawSpeed/FileMap.cpp RawSpeed/FileReader.cpp RawSpeed/LJpegDecompressor.cpp RawSpeed/LJpegPlain.cpp RawSpeed/NefDecoder.cpp RawSpeed/NikonDecompressor.cpp RawSpeed/OrfDecoder.cpp RawSpeed/PefDecoder.cpp RawSpeed/PentaxDecompressor.cpp RawSpeed/PlanarRawImage.cpp RawSpeed/RawDecoder.cpp RawSpeed/RawDecoderException.cpp RawSpeed/RawImage.cpp RawSpeed/RgbImage.cpp RawSpeed/Rw2Decoder.cpp RawSpeed/TiffEntry.cpp RawSpeed/TiffEntryBE.cpp RawSpeed/TiffIFD.cpp RawSpeed/TiffIFDBE.cpp RawSpeed/TiffParser.cpp RawSpeed/TiffParserException.cpp RawSpeed/TiffParserHeaderless.cpp RawSpeed/TiffParserOlympus.cpp RawSpeed/TiffTag.h Log: Code consistency, spaces around operators, reindentation. No actual code changes. Modified: RawSpeed/ArwDecoder.cpp =================================================================== --- RawSpeed/ArwDecoder.cpp 2009-09-28 21:07:13 UTC (rev 153) +++ RawSpeed/ArwDecoder.cpp 2009-09-29 18:26:02 UTC (rev 154) @@ -23,18 +23,15 @@ */ -ArwDecoder::ArwDecoder( TiffIFD *rootIFD, FileMap* file ) : - RawDecoder(file), mRootIFD(rootIFD) -{ +ArwDecoder::ArwDecoder(TiffIFD *rootIFD, FileMap* file) : + RawDecoder(file), mRootIFD(rootIFD) { } -ArwDecoder::~ArwDecoder(void) -{ +ArwDecoder::~ArwDecoder(void) { } -RawImage ArwDecoder::decodeRaw() -{ +RawImage ArwDecoder::decodeRaw() { vector data = mRootIFD->getIFDsWithTag(STRIPOFFSETS); data = mRootIFD->getIFDsWithTag(STRIPOFFSETS); @@ -51,16 +48,16 @@ TiffEntry *counts = raw->getEntry(STRIPBYTECOUNTS); if (offsets->count != 1) { - ThrowRDE("ARW Decoder: Multiple Strips found: %u",offsets->count); + ThrowRDE("ARW Decoder: Multiple Strips found: %u", offsets->count); } if (counts->count != offsets->count) { - ThrowRDE("ARW Decoder: Byte count number does not match strip size: count:%u, strips:%u ",counts->count, offsets->count); + ThrowRDE("ARW Decoder: Byte count number does not match strip size: count:%u, strips:%u ", counts->count, offsets->count); } guint width = raw->getEntry(IMAGEWIDTH)->getInt(); guint height = raw->getEntry(IMAGELENGTH)->getInt(); guint bitPerPixel = raw->getEntry(BITSPERSAMPLE)->getInt(); - gboolean arw1 = counts->getInt()*8 != width*height*bitPerPixel; + gboolean arw1 = counts->getInt() * 8 != width * height * bitPerPixel; if (arw1) height += 8; @@ -69,29 +66,29 @@ mRaw->createData(); const gushort* c = raw->getEntry(SONY_CURVE)->getShortArray(); - guint sony_curve[] = { 0,0,0,0,0,4095 }; + guint sony_curve[] = { 0, 0, 0, 0, 0, 4095 }; for (guint i = 0; i < 4; i++) - sony_curve[i+1] = (c[i]>> 2) & 0xfff; + sony_curve[i+1] = (c[i] >> 2) & 0xfff; for (guint i = 0; i < 0x4001; i++) curve[i] = i; - for (guint i=0; i < 5; i++) - for (guint j = sony_curve[i]+1; j <= sony_curve[i+1]; j++) + for (guint i = 0; i < 5; i++) + for (guint j = sony_curve[i] + 1; j <= sony_curve[i+1]; j++) curve[j] = curve[j-1] + (1 << i); guint c2 = counts->getInt(); guint off = offsets->getInt(); - if (!mFile->isValid(off+c2)) - c2 = mFile->getSize()-off; + if (!mFile->isValid(off + c2)) + c2 = mFile->getSize() - off; ByteStream input(mFile->getData(off), c2); if (arw1) - DecodeARW(input,width,height); + DecodeARW(input, width, height); else - DecodeARW2(input,width,height,bitPerPixel); + DecodeARW2(input, width, height, bitPerPixel); return mRaw; } @@ -99,11 +96,11 @@ void ArwDecoder::DecodeARW(ByteStream &input, guint w, guint h) { BitPumpMSB bits(&input); guchar* data = mRaw->getData(); - gushort* dest = (gushort*)&data[0]; - guint pitch = mRaw->pitch/sizeof(gushort); + gushort* dest = (gushort*) & data[0]; + guint pitch = mRaw->pitch / sizeof(gushort); gint sum = 0; - for (guint x = w; x--; ) - for (guint y=0; y < h+1; y+=2) { + for (guint x = w; x--;) + for (guint y = 0; y < h + 1; y += 2) { bits.checkPos(); bits.fill(); if (y == h) y = 1; @@ -113,7 +110,7 @@ while (len < 17 && !bits.getBitNoFill()) len++; bits.fill(); gint diff = bits.getBitsNoFill(len); - if ((diff & (1 << (len-1))) == 0) + if ((diff & (1 << (len - 1))) == 0) diff -= (1 << len) - 1; sum += diff; _ASSERTE(!(sum >> 12)); @@ -129,23 +126,23 @@ return; } // End bpp = 8 - if (bpp==12) { + if (bpp == 12) { guchar* data = mRaw->getData(); guint pitch = mRaw->pitch; const guchar *in = input.getData(); - if (input.getRemainSize()< (w*h*3/2) ) - h = input.getRemainSize() / (w*3/2) - 1; + if (input.getRemainSize() < (w*h*3 / 2)) + h = input.getRemainSize() / (w * 3 / 2) - 1; - for (guint y=0; y < h; y++) { - gushort* dest = (gushort*)&data[y*pitch]; - for(guint x =0 ; x < w; x+=2) { + for (guint y = 0; y < h; y++) { + gushort* dest = (gushort*) & data[y*pitch]; + for (guint x = 0 ; x < w; x += 2) { guint g1 = *in++; guint g2 = *in++; // Shift up to match compressed precision - dest[x] = (g1 | ((g2&0xf)<<8)) << 2; + dest[x] = (g1 | ((g2 & 0xf) << 8)) << 2; guint g3 = *in++; - dest[x+1] = ((g2>>4) | (g3<<4)) << 2; + dest[x+1] = ((g2 >> 4) | (g3 << 4)) << 2; } } return; @@ -162,8 +159,7 @@ this->checkCameraSupported(meta, make, model, ""); } -void ArwDecoder::decodeMetaData(CameraMetaData *meta) -{ +void ArwDecoder::decodeMetaData(CameraMetaData *meta) { //Default mRaw->cfa.setCFA(CFA_RED, CFA_GREEN, CFA_GREEN2, CFA_BLUE); vector data = mRootIFD->getIFDsWithTag(MODEL); @@ -179,27 +175,26 @@ /* Since ARW2 compressed images have predictable offsets, we decode them threaded */ -void ArwDecoder::decodeThreaded(RawDecoderThread * t) -{ +void ArwDecoder::decodeThreaded(RawDecoderThread * t) { guchar* data = mRaw->getData(); guint pitch = mRaw->pitch; guint w = mRaw->dim.x; BitPumpPlain bits(in); - for (guint y = t->start_y; y < t->end_y; y++ ) { - gushort* dest = (gushort*)&data[y*pitch]; + for (guint y = t->start_y; y < t->end_y; y++) { + gushort* dest = (gushort*) & data[y*pitch]; // Realign - bits.setAbsoluteOffset((w*8*y)>>3); + bits.setAbsoluteOffset((w*8*y) >> 3); - // Process 32 pixels (16x2) per loop. - for (guint x = 0; x < w-30; ) { + // Process 32 pixels (16x2) per loop. + for (guint x = 0; x < w - 30;) { bits.checkPos(); gint _max = bits.getBits(11); gint _min = bits.getBits(11); gint _imax = bits.getBits(4); gint _imin = bits.getBits(4); gint sh; - for (sh = 0; sh < 4 && 0x80 << sh <= _max-_min; sh++); + for (sh = 0; sh < 4 && 0x80 << sh <= _max - _min; sh++); for (gint i = 0; i < 16; i++) { gint p; if (i == _imax) p = _max; Modified: RawSpeed/BitPumpJPEG.cpp =================================================================== --- RawSpeed/BitPumpJPEG.cpp 2009-09-28 21:07:13 UTC (rev 153) +++ RawSpeed/BitPumpJPEG.cpp 2009-09-29 18:26:02 UTC (rev 154) @@ -28,148 +28,176 @@ /*** Used for entropy encoded sections ***/ -#define BITS_PER_LONG (8*sizeof(guint)) -#define MIN_GET_BITS (BITS_PER_LONG-7) /* max value for long getBuffer */ +#define BITS_PER_LONG (8*sizeof(guint)) +#define MIN_GET_BITS (BITS_PER_LONG-7) /* max value for long getBuffer */ -BitPumpJPEG::BitPumpJPEG( ByteStream *s ): - buffer(s->getData()), size(s->getRemainSize()+sizeof(guint)), mLeft(0),mCurr(0), off(0) -{ +BitPumpJPEG::BitPumpJPEG(ByteStream *s): + buffer(s->getData()), size(s->getRemainSize() + sizeof(guint)), mLeft(0), mCurr(0), off(0) { init(); } -BitPumpJPEG::BitPumpJPEG( const guchar* _buffer, guint _size ) : - buffer(_buffer), size(_size+sizeof(guint)), mLeft(0),mCurr(0), off(0) -{ + +BitPumpJPEG::BitPumpJPEG(const guchar* _buffer, guint _size) : + buffer(_buffer), size(_size + sizeof(guint)), mLeft(0), mCurr(0), off(0) { init(); } - void __inline BitPumpJPEG::init() { - for (int i = 0; i < 31; i++) { - masks[i] = (1<> (--mLeft)) & 1; } + guint BitPumpJPEG::getBits(guint nbits) { - _ASSERTE(nbits<24); + _ASSERTE(nbits < 24); + if (mLeft < nbits) { fill(); } + return ((mCurr >> (mLeft -= (nbits)))) & masks[nbits]; } + guint BitPumpJPEG::peekBit() { if (!mLeft) fill(); - return (mCurr >> (mLeft-1)) & 1; + return (mCurr >> (mLeft - 1)) & 1; } + guint BitPumpJPEG::peekBits(guint nbits) { if (mLeft < nbits) { fill(); } - return ((mCurr >> (mLeft-nbits))) & masks[nbits]; + return ((mCurr >> (mLeft - nbits))) & masks[nbits]; } + guint BitPumpJPEG::peekByte() { if (mLeft < 8) { fill(); } - if (off>size) + if (off > size) throw IOException("Out of buffer read"); - return ((mCurr >> (mLeft-8))) & 0xff; + + return ((mCurr >> (mLeft - 8))) & 0xff; } + guint BitPumpJPEG::getBitSafe() { if (!mLeft) { fill(); - if (off>size) + if (off > size) throw IOException("Out of buffer read"); } + return (mCurr >> (--mLeft)) & 1; } + guint BitPumpJPEG::getBitsSafe(unsigned int nbits) { - if (nbits>MIN_GET_BITS) + if (nbits > MIN_GET_BITS) throw IOException("Too many bits requested"); + if (mLeft < nbits) { fill(); - if (off>size) + if (off > size) throw IOException("Out of buffer read"); } return ((mCurr >> (mLeft -= (nbits)))) & masks[nbits]; } + void BitPumpJPEG::skipBits(unsigned int nbits) { - _ASSERTE(nbits<24); + _ASSERTE(nbits < 24); + if (mLeft < nbits) { fill(); - if (off>size) + + if (off > size) throw IOException("Out of buffer read"); } + mLeft -= nbits; } + unsigned char BitPumpJPEG::getByte() { if (mLeft < 8) { fill(); } + return ((mCurr >> (mLeft -= 8))) & 0xff; } + unsigned char BitPumpJPEG::getByteSafe() { if (mLeft < 8) { fill(); - if (off>size) + + if (off > size) throw IOException("Out of buffer read"); } + return ((mCurr >> (mLeft -= 8))) & 0xff; } + void BitPumpJPEG::setAbsoluteOffset(unsigned int offset) { if (offset >= size) - throw IOException("Offset set out of buffer"); + throw IOException("Offset set out of buffer"); + mLeft = 0; + off = offset; } -BitPumpJPEG::~BitPumpJPEG(void) -{ +BitPumpJPEG::~BitPumpJPEG(void) { } Modified: RawSpeed/BitPumpMSB.cpp =================================================================== --- RawSpeed/BitPumpMSB.cpp 2009-09-28 21:07:13 UTC (rev 153) +++ RawSpeed/BitPumpMSB.cpp 2009-09-29 18:26:02 UTC (rev 154) @@ -1,6 +1,6 @@ #include "StdAfx.h" #include "BitPumpMSB.h" -/* +/* RawSpeed - RAW file decoder. Copyright (C) 2009 Klaus Post @@ -24,41 +24,42 @@ /*** Used for entropy encoded sections ***/ -#define BITS_PER_LONG (8*sizeof(guint)) -#define MIN_GET_BITS (BITS_PER_LONG-7) /* max value for long getBuffer */ +#define BITS_PER_LONG (8*sizeof(guint)) +#define MIN_GET_BITS (BITS_PER_LONG-7) /* max value for long getBuffer */ -BitPumpMSB::BitPumpMSB( ByteStream *s ): - buffer(s->getData()), size(s->getRemainSize()+sizeof(guint)), mLeft(0),mCurr(0), off(0) -{ +BitPumpMSB::BitPumpMSB(ByteStream *s): + buffer(s->getData()), size(s->getRemainSize() + sizeof(guint)), mLeft(0), mCurr(0), off(0) { init(); } -BitPumpMSB::BitPumpMSB( const guchar* _buffer, guint _size ) : - buffer(_buffer), size(_size+sizeof(guint)), mLeft(0),mCurr(0), off(0) -{ +BitPumpMSB::BitPumpMSB(const guchar* _buffer, guint _size) : + buffer(_buffer), size(_size + sizeof(guint)), mLeft(0), mCurr(0), off(0) { init(); } - void __inline BitPumpMSB::init() { - for (int i = 0; i < 31; i++) { - masks[i] = (1<> (--mLeft)) & 1; } @@ -66,56 +67,68 @@ if (mLeft < nbits) { fill(); } + return ((mCurr >> (mLeft -= (nbits)))) & masks[nbits]; } guint BitPumpMSB::peekBit() { if (!mLeft) fill(); - return (mCurr >> (mLeft-1)) & 1; + + return (mCurr >> (mLeft - 1)) & 1; } guint BitPumpMSB::peekBits(guint nbits) { if (mLeft < nbits) { fill(); } - return ((mCurr >> (mLeft-nbits))) & masks[nbits]; + + return ((mCurr >> (mLeft - nbits))) & masks[nbits]; } guint BitPumpMSB::peekByte() { if (mLeft < 8) { fill(); } - if (off>size) + + if (off > size) throw IOException("Out of buffer read"); - return ((mCurr >> (mLeft-8))) & 0xff; + + return ((mCurr >> (mLeft - 8))) & 0xff; } guint BitPumpMSB::getBitSafe() { if (!mLeft) { fill(); - if (off>size) + + if (off > size) throw IOException("Out of buffer read"); } + return (mCurr >> (--mLeft)) & 1; } -guint BitPumpMSB::getBitsSafe(unsigned int nbits) { - if (nbits>MIN_GET_BITS) +guint BitPumpMSB::getBitsSafe(unsigned int nbits) { + if (nbits > MIN_GET_BITS) throw IOException("Too many bits requested"); + if (mLeft < nbits) { fill(); - if (off>size) + + if (off > size) throw IOException("Out of buffer read"); } + return ((mCurr >> (mLeft -= (nbits)))) & masks[nbits]; } void BitPumpMSB::skipBits(unsigned int nbits) { if (mLeft < nbits) { fill(); - if (off>size) + + if (off > size) throw IOException("Out of buffer read"); } + mLeft -= nbits; } @@ -123,29 +136,34 @@ if (mLeft < 8) { fill(); } + return ((mCurr >> (mLeft -= 8))) & 0xff; } unsigned char BitPumpMSB::getByteSafe() { if (mLeft < 8) { fill(); - if (off>size) + + if (off > size) throw IOException("Out of buffer read"); } + return ((mCurr >> (mLeft -= 8))) & 0xff; } void BitPumpMSB::setAbsoluteOffset(unsigned int offset) { - if (offset >= size) - throw IOException("Offset set out of buffer"); + if (offset >= size) + throw IOException("Offset set out of buffer"); + mLeft = 0; + mCurr = 0; + off = offset; } -BitPumpMSB::~BitPumpMSB(void) -{ +BitPumpMSB::~BitPumpMSB(void) { } Modified: RawSpeed/BitPumpPlain.cpp =================================================================== --- RawSpeed/BitPumpPlain.cpp 2009-09-28 21:07:13 UTC (rev 153) +++ RawSpeed/BitPumpPlain.cpp 2009-09-29 18:26:02 UTC (rev 154) @@ -1,6 +1,6 @@ #include "StdAfx.h" #include "BitPumpPlain.h" -/* +/* RawSpeed - RAW file decoder. Copyright (C) 2009 Klaus Post @@ -24,35 +24,33 @@ /*** Used for entropy encoded sections ***/ -#define BITS_PER_LONG (8*sizeof(guint)) -#define MIN_GET_BITS (BITS_PER_LONG-7) /* max value for long getBuffer */ +#define BITS_PER_LONG (8*sizeof(guint)) +#define MIN_GET_BITS (BITS_PER_LONG-7) /* max value for long getBuffer */ -BitPumpPlain::BitPumpPlain( ByteStream *s ): - buffer(s->getData()), size(8*s->getRemainSize()), off(0) -{ +BitPumpPlain::BitPumpPlain(ByteStream *s): + buffer(s->getData()), size(8*s->getRemainSize()), off(0) { for (int i = 0; i < 31; i++) { - masks[i] = (1<>3] >> (off&7) & 1; + guint v = *(guint*) & buffer[off>>3] >> (off & 7) & 1; off++; return v; } guint BitPumpPlain::getBits(guint nbits) { - guint v = *(guint*)&buffer[off>>3] >> (off&7) & masks[nbits]; - off+=nbits; + guint v = *(guint*) & buffer[off>>3] >> (off & 7) & masks[nbits]; + off += nbits; return v; } @@ -69,44 +67,49 @@ } guint BitPumpPlain::getBitSafe() { - if (off>size) + if (off > size) throw IOException("Out of buffer read"); + return *(guint*)&buffer[off>>3] >> (off&7) & 1; } -guint BitPumpPlain::getBitsSafe(unsigned int nbits) { - if (off>size) +guint BitPumpPlain::getBitsSafe(unsigned int nbits) { + if (off > size) throw IOException("Out of buffer read"); + return *(guint*)&buffer[off>>3] >> (off&7) & masks[nbits]; } void BitPumpPlain::skipBits(unsigned int nbits) { - off+=nbits; - if (off>size) - throw IOException("Out of buffer read"); + off += nbits; + + if (off > size) + throw IOException("Out of buffer read"); } unsigned char BitPumpPlain::getByte() { - guint v = *(guint*)&buffer[off>>3] >> (off&7) & 0xff; + guint v = *(guint*) & buffer[off>>3] >> (off & 7) & 0xff; off += 8; return v; } unsigned char BitPumpPlain::getByteSafe() { - guint v = *(guint*)&buffer[off>>3] >> (off&7) & 0xff; - off+=8; - if (off>size) + guint v = *(guint*) & buffer[off>>3] >> (off & 7) & 0xff; + off += 8; + + if (off > size) throw IOException("Out of buffer read"); + return v; } void BitPumpPlain::setAbsoluteOffset(unsigned int offset) { - if (offset >= size) - throw IOException("Offset set out of buffer"); - off = offset*8; + if (offset >= size) + throw IOException("Offset set out of buffer"); + + off = offset * 8; } -BitPumpPlain::~BitPumpPlain(void) -{ +BitPumpPlain::~BitPumpPlain(void) { } Modified: RawSpeed/ByteStream.cpp =================================================================== --- RawSpeed/ByteStream.cpp 2009-09-28 21:07:13 UTC (rev 153) +++ RawSpeed/ByteStream.cpp 2009-09-29 18:26:02 UTC (rev 154) @@ -1,6 +1,6 @@ #include "StdAfx.h" #include "ByteStream.h" -/* +/* RawSpeed - RAW file decoder. Copyright (C) 2009 Klaus Post @@ -23,72 +23,63 @@ */ -ByteStream::ByteStream( const guchar* _buffer, guint _size ) : -buffer(_buffer), size(_size), off(0) -{ +ByteStream::ByteStream(const guchar* _buffer, guint _size) : + buffer(_buffer), size(_size), off(0) { } ByteStream::ByteStream(const ByteStream *b) : -buffer(b->buffer), size(b->size), off(b->off) -{ + buffer(b->buffer), size(b->size), off(b->off) { } -ByteStream::~ByteStream(void) -{ +ByteStream::~ByteStream(void) { } -guint ByteStream::peekByte() -{ +guint ByteStream::peekByte() { return buffer[off]; } -void ByteStream::skipBytes( guint nbytes ) -{ - off += nbytes; - if (off>size) - throw IOException("Skipped out of buffer"); +void ByteStream::skipBytes(guint nbytes) { + off += nbytes; + if (off > size) + throw IOException("Skipped out of buffer"); } -guchar ByteStream::getByte() -{ - if (off>=size) +guchar ByteStream::getByte() { + if (off >= size) throw IOException("Out of buffer read"); return buffer[off++]; } -gushort ByteStream::getShort() -{ - if (off+1>=size) +gushort ByteStream::getShort() { + if (off + 1 >= size) throw IOException("Out of buffer read"); - guint a= buffer[off++]; + guint a = buffer[off++]; guint b = buffer[off++]; // !!! ENDIAN SWAP - return (a<<8)|b; + return (a << 8) | b; } gint ByteStream::getInt() { - if (off+4>=size) + if (off + 4 >= size) throw IOException("Out of buffer read"); return *(gint*)&buffer[off+=4]; } -void ByteStream::setAbsoluteOffset( guint offset ) -{ - if (offset >= size) +void ByteStream::setAbsoluteOffset(guint offset) { + if (offset >= size) throw IOException("Offset set out of buffer"); off = offset; } -void ByteStream::skipToMarker() -{ - gint c=0; +void ByteStream::skipToMarker() { + gint c = 0; while (!(buffer[off] == 0xFF && buffer[off+1] != 0)) { off++; c++; - if (off>=size) + if (off >= size) throw IOException("No marker found inside rest of buffer"); } // _RPT1(0,"Skipped %u bytes.\n", c); Modified: RawSpeed/Camera.cpp =================================================================== --- RawSpeed/Camera.cpp 2009-09-28 21:07:13 UTC (rev 153) +++ RawSpeed/Camera.cpp 2009-09-29 18:26:02 UTC (rev 154) @@ -1,7 +1,7 @@ #include "StdAfx.h" #include "Camera.h" #include -/* +/* RawSpeed - RAW file decoder. Copyright (C) 2009 Klaus Post @@ -25,20 +25,20 @@ Camera::Camera(xmlDocPtr doc, xmlNodePtr cur) { xmlChar *key; - key = xmlGetProp(cur,(const xmlChar *)"make"); + key = xmlGetProp(cur, (const xmlChar *)"make"); if (!key) ThrowCME("Camera XML Parser: \"make\" attribute not found."); make = string((const char*)key); xmlFree(key); - key = xmlGetProp(cur,(const xmlChar *)"model"); + key = xmlGetProp(cur, (const xmlChar *)"model"); if (!key) ThrowCME("Camera XML Parser: \"model\" attribute not found."); model = string((const char*)key); xmlFree(key); supported = true; - key = xmlGetProp(cur,(const xmlChar *)"supported"); + key = xmlGetProp(cur, (const xmlChar *)"supported"); if (key) { string s = string((const char*)key); if (s.compare("no") == 0) @@ -46,7 +46,7 @@ xmlFree(key); } - key = xmlGetProp(cur,(const xmlChar *)"mode"); + key = xmlGetProp(cur, (const xmlChar *)"mode"); if (key) { mode = string((const char*)key); xmlFree(key); @@ -64,12 +64,11 @@ Camera::~Camera(void) { } -void Camera::parseCameraChild( xmlDocPtr doc, xmlNodePtr cur ) -{ +void Camera::parseCameraChild(xmlDocPtr doc, xmlNodePtr cur) { if (!xmlStrcmp(cur->name, (const xmlChar *) "CFA")) { - if( 2 != getAttributeAsInt(cur,cur->name,"width")) + if (2 != getAttributeAsInt(cur, cur->name, "width")) ThrowCME("Unsupported CFA size in camera %s %s", make.c_str(), model.c_str()); - if( 2 != getAttributeAsInt(cur,cur->name,"height")) + if (2 != getAttributeAsInt(cur, cur->name, "height")) ThrowCME("Unsupported CFA size in camera %s %s", make.c_str(), model.c_str()); cur = cur->xmlChildrenNode; @@ -77,22 +76,22 @@ parseCFA(doc, cur); cur = cur->next; } - + return; } if (!xmlStrcmp(cur->name, (const xmlChar *) "Crop")) { - cropPos.x = getAttributeAsInt(cur,cur->name,"x"); - cropPos.y = getAttributeAsInt(cur,cur->name,"y"); + cropPos.x = getAttributeAsInt(cur, cur->name, "x"); + cropPos.y = getAttributeAsInt(cur, cur->name, "y"); - cropSize.x = getAttributeAsInt(cur,cur->name,"width"); - cropSize.y = getAttributeAsInt(cur,cur->name,"height"); + cropSize.x = getAttributeAsInt(cur, cur->name, "width"); + cropSize.y = getAttributeAsInt(cur, cur->name, "height"); return; } if (!xmlStrcmp(cur->name, (const xmlChar *) "Sensor")) { - black = getAttributeAsInt(cur,cur->name,"black"); - white = getAttributeAsInt(cur,cur->name,"white"); + black = getAttributeAsInt(cur, cur->name, "black"); + white = getAttributeAsInt(cur, cur->name, "white"); return; } @@ -106,68 +105,65 @@ } } -void Camera::parseCFA( xmlDocPtr doc, xmlNodePtr cur ) -{ +void Camera::parseCFA(xmlDocPtr doc, xmlNodePtr cur) { xmlChar *key; if (!xmlStrcmp(cur->name, (const xmlChar *) "Color")) { - int x = getAttributeAsInt(cur,cur->name,"x"); - if (x<0 || x>1) { - ThrowCME("Invalid x coordinate in CFA array of in camera %s %s", make.c_str(), model.c_str()); + int x = getAttributeAsInt(cur, cur->name, "x"); + if (x < 0 || x > 1) { + ThrowCME("Invalid x coordinate in CFA array of in camera %s %s", make.c_str(), model.c_str()); } - int y = getAttributeAsInt(cur,cur->name,"y"); - if (y<0 || y>1) { - ThrowCME("Invalid y coordinate in CFA array of in camera %s %s", make.c_str(), model.c_str()); + int y = getAttributeAsInt(cur, cur->name, "y"); + if (y < 0 || y > 1) { + ThrowCME("Invalid y coordinate in CFA array of in camera %s %s", make.c_str(), model.c_str()); } key = xmlNodeListGetString(doc, cur->children, 1); if (!xmlStrcmp(key, (const xmlChar *) "GREEN")) - cfa.setColorAt(iPoint2D(x,y),CFA_GREEN); + cfa.setColorAt(iPoint2D(x, y), CFA_GREEN); else if (!xmlStrcmp(key, (const xmlChar *) "RED")) - cfa.setColorAt(iPoint2D(x,y),CFA_RED); + cfa.setColorAt(iPoint2D(x, y), CFA_RED); else if (!xmlStrcmp(key, (const xmlChar *) "BLUE")) - cfa.setColorAt(iPoint2D(x,y),CFA_BLUE); + cfa.setColorAt(iPoint2D(x, y), CFA_BLUE); xmlFree(key); } } -void Camera::parseBlackAreas( xmlDocPtr doc, xmlNodePtr cur ) -{ +void Camera::parseBlackAreas(xmlDocPtr doc, xmlNodePtr cur) { if (!xmlStrcmp(cur->name, (const xmlChar *) "Vertical")) { - int x = getAttributeAsInt(cur,cur->name,"x"); - if (x<0) { - ThrowCME("Invalid x coordinate in vertical BlackArea of in camera %s %s", make.c_str(), model.c_str()); + int x = getAttributeAsInt(cur, cur->name, "x"); + if (x < 0) { + ThrowCME("Invalid x coordinate in vertical BlackArea of in camera %s %s", make.c_str(), model.c_str()); } - int w = getAttributeAsInt(cur,cur->name,"width"); - if (w<0) { - ThrowCME("Invalid width in vertical BlackArea of in camera %s %s", make.c_str(), model.c_str()); + int w = getAttributeAsInt(cur, cur->name, "width"); + if (w < 0) { + ThrowCME("Invalid width in vertical BlackArea of in camera %s %s", make.c_str(), model.c_str()); } - blackAreas.push_back(BlackArea(x,w,true)); + blackAreas.push_back(BlackArea(x, w, true)); } else if (!xmlStrcmp(cur->name, (const xmlChar *) "Horizontal")) { - int y = getAttributeAsInt(cur,cur->name,"y"); - if (y<0) { - ThrowCME("Invalid y coordinate in horizontal BlackArea of in camera %s %s", make.c_str(), model.c_str()); - } + int y = getAttributeAsInt(cur, cur->name, "y"); + if (y < 0) { + ThrowCME("Invalid y coordinate in horizontal BlackArea of in camera %s %s", make.c_str(), model.c_str()); + } - int h = getAttributeAsInt(cur,cur->name,"height"); - if (h<0) { - ThrowCME("Invalid width in horizontal BlackArea of in camera %s %s", make.c_str(), model.c_str()); - } + int h = getAttributeAsInt(cur, cur->name, "height"); + if (h < 0) { + ThrowCME("Invalid width in horizontal BlackArea of in camera %s %s", make.c_str(), model.c_str()); + } - blackAreas.push_back(BlackArea(y,h,false)); + blackAreas.push_back(BlackArea(y, h, false)); } } -int Camera::StringToInt( const xmlChar *in, const xmlChar *tag, const char* attribute ) -{ +int Camera::StringToInt(const xmlChar *in, const xmlChar *tag, const char* attribute) { int i; #ifdef __unix__ @@ -176,19 +172,18 @@ if (EOF == sscanf_s((const char*)in, "%d", &i)) #endif ThrowCME("Error parsing attribute %s in tag %s, in camera %s %s.", attribute, tag, make.c_str(), model.c_str()); - + return i; } -int Camera::getAttributeAsInt( xmlNodePtr cur , const xmlChar *tag, const char* attribute) -{ - xmlChar *key = xmlGetProp(cur,(const xmlChar *)attribute); +int Camera::getAttributeAsInt(xmlNodePtr cur , const xmlChar *tag, const char* attribute) { + xmlChar *key = xmlGetProp(cur, (const xmlChar *)attribute); if (!key) ThrowCME("Could not find attribute %s in tag %s, in camera %s %s.", attribute, tag, make.c_str(), model.c_str()); - int i = StringToInt(key,tag,attribute); + int i = StringToInt(key, tag, attribute); return i; } Modified: RawSpeed/CameraMetaData.cpp =================================================================== --- RawSpeed/CameraMetaData.cpp 2009-09-28 21:07:13 UTC (rev 153) +++ RawSpeed/CameraMetaData.cpp 2009-09-29 18:26:02 UTC (rev 154) @@ -1,6 +1,6 @@ #include "StdAfx.h" #include "CameraMetaData.h" -/* +/* RawSpeed - RAW file decoder. Copyright (C) 2009 Klaus Post @@ -22,17 +22,16 @@ http://www.klauspost.com */ -CameraMetaData::CameraMetaData(char *docname) -{ +CameraMetaData::CameraMetaData(char *docname) { ctxt = xmlNewParserCtxt(); doc = xmlCtxtReadFile(ctxt, docname, NULL, XML_PARSE_DTDVALID); - if (doc == NULL ) { + if (doc == NULL) { ThrowCME("CameraMetaData: XML Document could not be parsed successfully. Error was: %s", ctxt->lastError.message); } if (ctxt->valid == 0) { - if (ctxt->lastError.code ==0x5e) { + if (ctxt->lastError.code == 0x5e) { printf("CameraMetaData: Unable to locate DTD, attempting to ignore."); } else { ThrowCME("CameraMetaData: XML file does not validate. DTD Error was: %s", ctxt->lastError.message); @@ -48,12 +47,12 @@ cur = cur->xmlChildrenNode; while (cur != NULL) { - if ((!xmlStrcmp(cur->name, (const xmlChar *)"Camera"))){ + if ((!xmlStrcmp(cur->name, (const xmlChar *)"Camera"))) { Camera *camera = new Camera(doc, cur); string id = string(camera->make).append(camera->model).append(camera->mode); - if (cameras.end() !=cameras.find(id)) - printf("CameraMetaData: Duplicate entry found for camera: %s %s, Skipping!\n",camera->make.c_str(), camera->model.c_str()); - else + if (cameras.end() != cameras.find(id)) + printf("CameraMetaData: Duplicate entry found for camera: %s %s, Skipping!\n", camera->make.c_str(), camera->model.c_str()); + else cameras[id] = camera; } cur = cur->next; @@ -67,8 +66,8 @@ } CameraMetaData::~CameraMetaData(void) { - map::iterator i = cameras.begin(); - for ( ; i != cameras.end(); i++) { + map::iterator i = cameras.begin(); + for (; i != cameras.end(); i++) { delete((*i).second); } if (doc) @@ -79,45 +78,42 @@ ctxt = 0; } -void CameraMetaData::dumpXML() -{ - map::iterator i = cameras.begin(); - for ( ; i != cameras.end(); i++) { +void CameraMetaData::dumpXML() { + map::iterator i = cameras.begin(); + for (; i != cameras.end(); i++) { dumpCameraXML((*i).second); } } -void CameraMetaData::dumpCameraXML( Camera* cam ) -{ +void CameraMetaData::dumpCameraXML(Camera* cam) { cout << "make << "\" model = \"" << cam->model << "\">" << endl; cout << "" << endl; - cout << "" << ColorFilterArray::colorToString(cam->cfa.getColorAt(0,0)) << ""; - cout << "" << ColorFilterArray::colorToString(cam->cfa.getColorAt(1,0)) << "" << endl; - cout << "" << ColorFilterArray::colorToString(cam->cfa.getColorAt(0,1)) << ""; - cout << "" << ColorFilterArray::colorToString(cam->cfa.getColorAt(1,1)) << "" << endl; + cout << "" << ColorFilterArray::colorToString(cam->cfa.getColorAt(0, 0)) << ""; + cout << "" << ColorFilterArray::colorToString(cam->cfa.getColorAt(1, 0)) << "" << endl; + cout << "" << ColorFilterArray::colorToString(cam->cfa.getColorAt(0, 1)) << ""; + cout << "" << ColorFilterArray::colorToString(cam->cfa.getColorAt(1, 1)) << "" << endl; cout << "" << endl; cout << "cropPos.x << "\" y=\"" << cam->cropPos.y << "\" "; cout << "width=\"" << cam->cropSize.x << "\" height=\"" << cam->cropSize.y << "\"/>" << endl; - cout << "black << "\" white=\"" << cam->white << "\"/>" << endl; + cout << "black << "\" white=\"" << cam->white << "\"/>" << endl; if (!cam->blackAreas.empty()) { cout << "" << endl; for (guint i = 0; i < cam->blackAreas.size(); i++) { BlackArea b = cam->blackAreas[i]; if (b.isVertical) { - cout << ""<< endl; + cout << "" << endl; } else { - cout << ""<< endl; + cout << "" << endl; } } cout << "" << endl; } - cout << "" <" << endl; } -Camera* CameraMetaData::getCamera( string make, string model, string mode ) -{ +Camera* CameraMetaData::getCamera(string make, string model, string mode) { string id = string(make).append(model).append(mode); - if (cameras.end() ==cameras.find(id)) + if (cameras.end() == cameras.find(id)) return NULL; return cameras[id]; -} \ No newline at end of file +} Modified: RawSpeed/CameraMetadataException.cpp =================================================================== --- RawSpeed/CameraMetadataException.cpp 2009-09-28 21:07:13 UTC (rev 153) +++ RawSpeed/CameraMetadataException.cpp 2009-09-29 18:26:02 UTC (rev 154) @@ -1,6 +1,6 @@ #include "StdAfx.h" #include "CameraMetadataException.h" -/* +/* RawSpeed - RAW file decoder. Copyright (C) 2009 Klaus Post @@ -32,11 +32,10 @@ vsprintf_s(buf, 8192, fmt, val); #endif va_end(val); - _RPT1(0, "EXCEPTION: %s\n",buf); + _RPT1(0, "EXCEPTION: %s\n", buf); throw CameraMetadataException(buf); } -CameraMetadataException::CameraMetadataException(const string _msg): runtime_error(_msg) -{ +CameraMetadataException::CameraMetadataException(const string _msg): runtime_error(_msg) { _RPT1(0, "CameraMetadata Exception: %s\n", _msg.c_str()); } Modified: RawSpeed/ColorFilterArray.cpp =================================================================== --- RawSpeed/ColorFilterArray.cpp 2009-09-28 21:07:13 UTC (rev 153) +++ RawSpeed/ColorFilterArray.cpp 2009-09-29 18:26:02 UTC (rev 154) @@ -1,6 +1,6 @@ #include "StdAfx.h" #include "ColorFilterArray.h" -/* +/* RawSpeed - RAW file decoder. Copyright (C) 2009 Klaus Post @@ -26,82 +26,77 @@ setCFA(CFA_UNKNOWN, CFA_UNKNOWN, CFA_UNKNOWN, CFA_UNKNOWN); } -ColorFilterArray::ColorFilterArray( CFAColor up_left, CFAColor up_right, CFAColor down_left, CFAColor down_right ) -{ +ColorFilterArray::ColorFilterArray(CFAColor up_left, CFAColor up_right, CFAColor down_left, CFAColor down_right) { cfa[0] = up_left; cfa[1] = up_right; cfa[2] = down_left; cfa[3] = down_right; } -ColorFilterArray::~ColorFilterArray(void) -{ +ColorFilterArray::~ColorFilterArray(void) { } -void ColorFilterArray::setCFA( CFAColor up_left, CFAColor up_right, CFAColor down_left, CFAColor down_right ) -{ +void ColorFilterArray::setCFA(CFAColor up_left, CFAColor up_right, CFAColor down_left, CFAColor down_right) { cfa[0] = up_left; cfa[1] = up_right; cfa[2] = down_left; cfa[3] = down_right; } -void ColorFilterArray::setCFA( guchar dcrawCode ) -{ - cfa[0] = (CFAColor)(dcrawCode&0x3); - cfa[1] = (CFAColor)((dcrawCode>>2)&0x3); - cfa[2] = (CFAColor)((dcrawCode>>4)&0x3); - cfa[3] = (CFAColor)((dcrawCode>>6)&0x3); +void ColorFilterArray::setCFA(guchar dcrawCode) { + cfa[0] = (CFAColor)(dcrawCode & 0x3); + cfa[1] = (CFAColor)((dcrawCode >> 2) & 0x3); + cfa[2] = (CFAColor)((dcrawCode >> 4) & 0x3); + cfa[3] = (CFAColor)((dcrawCode >> 6) & 0x3); } guint ColorFilterArray::getDcrawFilter() { - if (cfa[0]>3 || cfa[1]>3 || cfa[2]>3 || cfa[3]>3) + if (cfa[0] > 3 || cfa[1] > 3 || cfa[2] > 3 || cfa[3] > 3) ThrowRDE("getDcrawFilter: Invalid colors defined."); - guint v = cfa[0] | cfa[1]<<2 | cfa[2]<<4 | cfa[3]<<6; - return v | (v<<8) | (v<<16) | (v<<24); + guint v = cfa[0] | cfa[1] << 2 | cfa[2] << 4 | cfa[3] << 6; + return v | (v << 8) | (v << 16) | (v << 24); } -std::string ColorFilterArray::asString() -{ +std::string ColorFilterArray::asString() { string s("Upper left:"); - s += colorToString(cfa[0]); + s += colorToString(cfa[0]); s.append(" * Upper right:"); s += colorToString(cfa[1]); - s +=("\nLower left:"); - s += colorToString(cfa[2]); + s += ("\nLower left:"); + s += colorToString(cfa[2]); s.append(" * Lower right:"); s += colorToString(cfa[3]); s.append("\n"); - s += string("CFA_")+colorToString(cfa[0])+string(", CFA_")+colorToString(cfa[1]); - s += string(", CFA_")+colorToString(cfa[2])+string(", CFA_")+colorToString(cfa[3])+string("\n"); + s += string("CFA_") + colorToString(cfa[0]) + string(", CFA_") + colorToString(cfa[1]); + s += string(", CFA_") + colorToString(cfa[2]) + string(", CFA_") + colorToString(cfa[3]) + string("\n"); return s; } -std::string ColorFilterArray::colorToString( CFAColor c ) { +std::string ColorFilterArray::colorToString(CFAColor c) { switch (c) { - case CFA_RED: - return string("RED"); - case CFA_GREEN: - return string("GREEN"); - case CFA_BLUE: - return string("BLUE"); - case CFA_GREEN2: - return string("GREEN2"); - case CFA_CYAN: - return string("CYAN"); - case CFA_MAGENTA: - return string("MAGENTA"); - case CFA_YELLOW: - return string("YELLOW"); - case CFA_WHITE: - return string("WHITE"); - default: - return string("UNKNOWN"); + case CFA_RED: + return string("RED"); + case CFA_GREEN: + return string("GREEN"); + case CFA_BLUE: + return string("BLUE"); + case CFA_GREEN2: + return string("GREEN2"); + case CFA_CYAN: + return string("CYAN"); + case CFA_MAGENTA: + return string("MAGENTA"); + case CFA_YELLOW: + return string("YELLOW"); + case CFA_WHITE: + return string("WHITE"); + default: + return string("UNKNOWN"); } } -void ColorFilterArray::setColorAt( iPoint2D pos, CFAColor c ) { +void ColorFilterArray::setColorAt(iPoint2D pos, CFAColor c) { if (pos.x > 1 || pos.x < 0) ThrowRDE("ColorFilterArray::SetColor: position out of CFA pattern"); if (pos.y > 1 || pos.y < 0) @@ -110,8 +105,7 @@ // _RPT2(0, "cfa[%u] = %u\n",pos.x+pos.y*2, c); } -void ColorFilterArray::shiftLeft() -{ +void ColorFilterArray::shiftLeft() { CFAColor tmp1 = cfa[0]; CFAColor tmp2 = cfa[2]; cfa[0] = cfa[1]; @@ -120,12 +114,11 @@ cfa[3] = tmp2; } -void ColorFilterArray::shiftDown() -{ +void ColorFilterArray::shiftDown() { CFAColor tmp1 = cfa[0]; CFAColor tmp2 = cfa[1]; cfa[0] = cfa[2]; cfa[1] = cfa[3]; cfa[2] = tmp1; cfa[3] = tmp2; -} \ No newline at end of file +} Modified: RawSpeed/Cr2Decoder.cpp =================================================================== --- RawSpeed/Cr2Decoder.cpp 2009-09-28 21:07:13 UTC (rev 153) +++ RawSpeed/Cr2Decoder.cpp 2009-09-29 18:26:02 UTC (rev 154) @@ -2,7 +2,7 @@ #include "Cr2Decoder.h" #include "TiffParserHeaderless.h" -/* +/* RawSpeed - RAW file decoder. Copyright (C) 2009 Klaus Post @@ -25,18 +25,15 @@ */ Cr2Decoder::Cr2Decoder(TiffIFD *rootIFD, FileMap* file) : - RawDecoder(file), mRootIFD(rootIFD) -{ + RawDecoder(file), mRootIFD(rootIFD) { } -Cr2Decoder::~Cr2Decoder(void) -{ +Cr2Decoder::~Cr2Decoder(void) { } -RawImage Cr2Decoder::decodeRaw() -{ - +RawImage Cr2Decoder::decodeRaw() { + vector data = mRootIFD->getIFDsWithTag((TiffTag)0xc5d8); if (data.empty()) @@ -53,27 +50,27 @@ TiffEntry *offsets = raw->getEntry(STRIPOFFSETS); TiffEntry *counts = raw->getEntry(STRIPBYTECOUNTS); // Iterate through all slices - for (guint s = 0; scount; s++) { + for (guint s = 0; s < offsets->count; s++) { Cr2Slice slice; slice.offset = offsets[0].getInt(); slice.count = counts[0].getInt(); SOFInfo sof; - LJpegPlain l(mFile,mRaw); - l.getSOF(&sof,slice.offset,slice.count); - slice.w = sof.w*sof.cps; + LJpegPlain l(mFile, mRaw); + l.getSOF(&sof, slice.offset, slice.count); + slice.w = sof.w * sof.cps; slice.h = sof.h; if (!slices.empty()) if (slices[0].w != slice.w) ThrowRDE("CR2 Decoder: Slice width does not match."); - if (mFile->isValid(slice.offset+slice.count)) // Only decode if size is valid + if (mFile->isValid(slice.offset + slice.count)) // Only decode if size is valid slices.push_back(slice); completeH += slice.h; } } catch (TiffParserException) { ThrowRDE("CR2 Decoder: Unsupported format."); } - + if (slices.empty()) { ThrowRDE("CR2 Decoder: No Slices found."); } @@ -81,16 +78,16 @@ mRaw->bpp = 2; mRaw->dim = iPoint2D(slices[0].w, completeH); - if(raw->hasEntry((TiffTag)0xc6c5)) { + if (raw->hasEntry((TiffTag)0xc6c5)) { gushort ss = raw->getEntry((TiffTag)0xc6c5)->getInt(); // sRaw - if (ss == 4) { + if (ss == 4) { mRaw->dim.x /= 3; mRaw->setCpp(3); mRaw->isCFA = false; } } - + mRaw->createData(); vector s_width; @@ -105,26 +102,25 @@ } guint offY = 0; - for (guint i = 0; i < slices.size(); i++ ) { + for (guint i = 0; i < slices.size(); i++) { Cr2Slice slice = slices[i]; try { - LJpegPlain l(mFile,mRaw); + LJpegPlain l(mFile, mRaw); l.addSlices(s_width); l.mUseBigtable = true; l.startDecoder(slice.offset, slice.count, 0, offY); - } catch (RawDecoderException e) { + } catch (RawDecoderException e) { if (i == 0) throw; // These may just be single slice error - store the error and move on errors.push_back(_strdup(e.what())); - } - catch (IOException e) { + } catch (IOException e) { // Let's try to ignore this - it might be truncated data, so something might be useful. } offY += slice.w; } - if (mRaw->subsampling.x >1 || mRaw->subsampling.y >1) + if (mRaw->subsampling.x > 1 || mRaw->subsampling.y > 1) sRawInterpolate(); return mRaw; @@ -161,8 +157,7 @@ } // Interpolate and convert sRaw data. -void Cr2Decoder::sRawInterpolate() -{ +void Cr2Decoder::sRawInterpolate() { vector data = mRootIFD->getIFDsWithTag(MAKERNOTE); if (data.empty()) ThrowRDE("CR2 sRaw: Makernote not found"); @@ -182,7 +177,7 @@ wb_data = &wb_data[4+(126+22)/2]; sraw_coeffs[0] = wb_data[0]; - sraw_coeffs[1] = (wb_data[1] + wb_data[2] + 1 )>>1; + sraw_coeffs[1] = (wb_data[1] + wb_data[2] + 1) >> 1; sraw_coeffs[2] = wb_data[3]; // Check if sRaw2 is using old coefficients @@ -196,11 +191,11 @@ if (mRaw->subsampling.y == 1 && mRaw->subsampling.x == 2) { if (isOldSraw) - interpolate_422_old(mRaw->dim.x / 2, mRaw->dim.y ,0, mRaw->dim.y); - else - interpolate_422(mRaw->dim.x / 2, mRaw->dim.y ,0, mRaw->dim.y); + interpolate_422_old(mRaw->dim.x / 2, mRaw->dim.y , 0, mRaw->dim.y); + else + interpolate_422(mRaw->dim.x / 2, mRaw->dim.y , 0, mRaw->dim.y); } else { - interpolate_420(mRaw->dim.x / 2, mRaw->dim.y / 2 ,0 , mRaw->dim.y / 2); + interpolate_420(mRaw->dim.x / 2, mRaw->dim.y / 2 , 0 , mRaw->dim.y / 2); } } @@ -215,52 +210,50 @@ // Note: Thread safe. -void Cr2Decoder::interpolate_422(int w, int h, int start_h , int end_h) -{ +void Cr2Decoder::interpolate_422(int w, int h, int start_h , int end_h) { // Last pixel should not be interpolated - w--; + w--; // Current line gushort* c_line; for (int y = start_h; y < end_h; y++) { - c_line = (gushort*)mRaw->getData(0,y); - gint r,g,b; + c_line = (gushort*)mRaw->getData(0, y); + gint r, g, b; int off = 0; for (int x = 0; x < w; x++) { int Y = c_line[off]; - int Cb = c_line[off+1]- 16384; - int Cr = c_line[off+2]- 16384; + int Cb = c_line[off+1] - 16384; + int Cr = c_line[off+2] - 16384; YUV_TO_RGB(Y, Cb, Cr); - STORE_RGB(c_line,off,off+1,off+2); - off+=3; + STORE_RGB(c_line, off, off + 1, off + 2); + off += 3; Y = c_line[off]; - int Cb2 = (Cb + c_line[off+1+3] - 16384)>>1; - int Cr2 = (Cr + c_line[off+2+3] - 16384)>>1; + int Cb2 = (Cb + c_line[off+1+3] - 16384) >> 1; + int Cr2 = (Cr + c_line[off+2+3] - 16384) >> 1; YUV_TO_RGB(Y, Cb2, Cr2); - STORE_RGB(c_line,off,off+1,off+2); - off+=3; + STORE_RGB(c_line, off, off + 1, off + 2); + off += 3; } // Last two pixels int Y = c_line[off]; - int Cb = c_line[off+1]- 16384; - int Cr = c_line[off+2]- 16384; + int Cb = c_line[off+1] - 16384; + int Cr = c_line[off+2] - 16384; YUV_TO_RGB(Y, Cb, Cr); - STORE_RGB(c_line,off,off+1,off+2); + STORE_RGB(c_line, off, off + 1, off + 2); Y = c_line[off+3]; YUV_TO_RGB(Y, Cb, Cr); - STORE_RGB(c_line,off+3,off+4,off+5); + STORE_RGB(c_line, off + 3, off + 4, off + 5); } } // Note: Not thread safe, since it writes inplace. -void Cr2Decoder::interpolate_420(int w, int h, int start_h , int end_h) -{ +void Cr2Decoder::interpolate_420(int w, int h, int start_h , int end_h) { // Last pixel should not be interpolated - w--; + w--; gboolean atLastLine = FALSE; @@ -277,88 +270,88 @@ gushort* nn_line; int off; - gint r,g,b; + gint r, g, b; for (int y = start_h; y < end_h; y++) { - c_line = (gushort*)mRaw->getData(0,y*2); - n_line = (gushort*)mRaw->getData(0,y*2+1); - nn_line = (gushort*)mRaw->getData(0,y*2+2); + c_line = (gushort*)mRaw->getData(0, y * 2); + n_line = (gushort*)mRaw->getData(0, y * 2 + 1); + nn_line = (gushort*)mRaw->getData(0, y * 2 + 2); off = 0; for (int x = 0; x < w; x++) { int Y = c_line[off]; - int Cb = c_line[off+1]- 16384; - int Cr = c_line[off+2]- 16384; + int Cb = c_line[off+1] - 16384; + int Cr = c_line[off+2] - 16384; YUV_TO_RGB(Y, Cb, Cr); - STORE_RGB(c_line,off,off+1,off+2); + STORE_RGB(c_line, off, off + 1, off + 2); Y = c_line[off+3]; - int Cb2 = (Cb + c_line[off+1+6] - 16383)>>1; - int Cr2 = (Cr + c_line[off+2+6] - 16383)>>1; + int Cb2 = (Cb + c_line[off+1+6] - 16383) >> 1; + int Cr2 = (Cr + c_line[off+2+6] - 16383) >> 1; YUV_TO_RGB(Y, Cb2, Cr2); - STORE_RGB(c_line,off+3,off+4,off+5); + STORE_RGB(c_line, off + 3, off + 4, off + 5); // Next line Y = n_line[off]; - int Cb3 = (Cb + nn_line[off+1]- 16383)>>1; - int Cr3 = (Cr + nn_line[off+2]- 16383)>>1; + int Cb3 = (Cb + nn_line[off+1] - 16383) >> 1; + int Cr3 = (Cr + nn_line[off+2] - 16383) >> 1; YUV_TO_RGB(Y, Cb3, Cr3); - STORE_RGB(n_line,off,off+1,off+2); + STORE_RGB(n_line, off, off + 1, off + 2); Y = n_line[off+3]; - Cb = (Cb + Cb2 + Cb3 + nn_line[off+1+6] - 16382)>>2; //Left + Above + Right +Below - Cr = (Cr + Cr2 + Cr3 + nn_line[off+2+6] - 16382)>>2; + Cb = (Cb + Cb2 + Cb3 + nn_line[off+1+6] - 16382) >> 2; //Left + Above + Right +Below + Cr = (Cr + Cr2 + Cr3 + nn_line[off+2+6] - 16382) >> 2; YUV_TO_RGB(Y, Cb, Cr); - STORE_RGB(n_line,off+3,off+4,off+5); - off+=6; + STORE_RGB(n_line, off + 3, off + 4, off + 5); + off += 6; } int Y = c_line[off]; - int Cb = c_line[off+1]- 16384; - int Cr = c_line[off+2]- 16384; + int Cb = c_line[off+1] - 16384; + int Cr = c_line[off+2] - 16384; YUV_TO_RGB(Y, Cb, Cr); - STORE_RGB(c_line,off,off+1,off+2); + STORE_RGB(c_line, off, off + 1, off + 2); Y = c_line[off+3]; YUV_TO_RGB(Y, Cb, Cr); - STORE_RGB(c_line,off+3,off+4,off+5); + STORE_RGB(c_line, off + 3, off + 4, off + 5); // Next line Y = n_line[off]; - Cb = (Cb + nn_line[off+1]- 16383)>>1; - Cr = (Cr + nn_line[off+2]- 16383)>>1; + Cb = (Cb + nn_line[off+1] - 16383) >> 1; + Cr = (Cr + nn_line[off+2] - 16383) >> 1; YUV_TO_RGB(Y, Cb, Cr); - STORE_RGB(n_line,off,off+1,off+2); + STORE_RGB(n_line, off, off + 1, off + 2); Y = n_line[off+3]; YUV_TO_RGB(Y, Cb, Cr); - STORE_RGB(n_line,off+3,off+4,off+5); + STORE_RGB(n_line, off + 3, off + 4, off + 5); } if (atLastLine) { - c_line = (gushort*)mRaw->getData(0,end_h*2); - n_line = (gushort*)mRaw->getData(0,end_h*2+1); + c_line = (gushort*)mRaw->getData(0, end_h * 2); + n_line = (gushort*)mRaw->getData(0, end_h * 2 + 1); off = 0; // Last line for (int x = 0; x < w; x++) { int Y = c_line[off]; - int Cb = c_line[off+1]- 16384; - int Cr = c_line[off+2]- 16384; + int Cb = c_line[off+1] - 16384; + int Cr = c_line[off+2] - 16384; YUV_TO_RGB(Y, Cb, Cr); - STORE_RGB(c_line,off,off+1,off+2); + STORE_RGB(c_line, off, off + 1, off + 2); Y = c_line[off+3]; YUV_TO_RGB(Y, Cb, Cr); - STORE_RGB(c_line,off+3,off+4,off+5); + STORE_RGB(c_line, off + 3, off + 4, off + 5); // Next line Y = n_line[off]; YUV_TO_RGB(Y, Cb, Cr); - STORE_RGB(n_line,off,off+1,off+2); + STORE_RGB(n_line, off, off + 1, off + 2); Y = n_line[off+3]; YUV_TO_RGB(Y, Cb, Cr); - STORE_RGB(n_line,off+3,off+4,off+5); - off+=6; + STORE_RGB(n_line, off + 3, off + 4, off + 5); + off += 6; } } } @@ -373,42 +366,41 @@ // Note: Thread safe. -void Cr2Decoder::interpolate_422_old(int w, int h, int start_h , int end_h) -{ +void Cr2Decoder::interpolate_422_old(int w, int h, int start_h , int end_h) { // Last pixel should not be interpolated - w--; + w--; // Current line gushort* c_line; for (int y = start_h; y < end_h; y++) { - c_line = (gushort*)mRaw->getData(0,y); - gint r,g,b; + c_line = (gushort*)mRaw->getData(0, y); + gint r, g, b; int off = 0; for (int x = 0; x < w; x++) { int Y = c_line[off]; - int Cb = c_line[off+1]- 16384; - int Cr = c_line[off+2]- 16384; + int Cb = c_line[off+1] - 16384; + int Cr = c_line[off+2] - 16384; YUV_TO_RGB(Y, Cb, Cr); - STORE_RGB(c_line,off,off+1,off+2); - off+=3; + STORE_RGB(c_line, off, off + 1, off + 2); + off += 3; Y = c_line[off]; - int Cb2 = (Cb + c_line[off+1+3] - 16384)>>1; - int Cr2 = (Cr + c_line[off+2+3] - 16384)>>1; + int Cb2 = (Cb + c_line[off+1+3] - 16384) >> 1; + int Cr2 = (Cr + c_line[off+2+3] - 16384) >> 1; YUV_TO_RGB(Y, Cb2, Cr2); - STORE_RGB(c_line,off,off+1,off+2); - off+=3; + STORE_RGB(c_line, off, off + 1, off + 2); + off += 3; } // Last two pixels int Y = c_line[off]; - int Cb = c_line[off+1]- 16384; - int Cr = c_line[off+2]- 16384; + int Cb = c_line[off+1] - 16384; + int Cr = c_line[off+2] - 16384; YUV_TO_RGB(Y, Cb, Cr); - STORE_RGB(c_line,off,off+1,off+2); + STORE_RGB(c_line, off, off + 1, off + 2); Y = c_line[off+3]; YUV_TO_RGB(Y, Cb, Cr); - STORE_RGB(c_line,off+3,off+4,off+5); + STORE_RGB(c_line, off + 3, off + 4, off + 5); } } Modified: RawSpeed/DngDecoder.cpp =================================================================== --- RawSpeed/DngDecoder.cpp 2009-09-28 21:07:13 UTC (rev 153) +++ RawSpeed/DngDecoder.cpp 2009-09-29 18:26:02 UTC (rev 154) @@ -2,7 +2,7 @@ #include "DngDecoder.h" #include -/* +/* RawSpeed - RAW file decoder. Copyright (C) 2009 Klaus Post @@ -26,24 +26,22 @@ //#define PRINT_INFO -DngDecoder::DngDecoder(TiffIFD *rootIFD, FileMap* file) : RawDecoder(file), mRootIFD(rootIFD) -{ +DngDecoder::DngDecoder(TiffIFD *rootIFD, FileMap* file) : RawDecoder(file), mRootIFD(rootIFD) { vector data = mRootIFD->getIFDsWithTag(DNGVERSION); const unsigned char* v = data[0]->getEntry(DNGVERSION)->getData(); if (v[0] != 1) - ThrowRDE("Not a supported DNG image format: v%u.%u.%u.%u",(int)v[0],(int)v[1],(int)v[2],(int)v[3]); + ThrowRDE("Not a supported DNG image format: v%u.%u.%u.%u", (int)v[0], (int)v[1], (int)v[2], (int)v[3]); if (v[1] > 3) - ThrowRDE("Not a supported DNG image format: v%u.%u.%u.%u",(int)v[0],(int)v[1],(int)v[2],(int)v[3]); + ThrowRDE("Not a supported DNG image format: v%u.%u.%u.%u", (int)v[0], (int)v[1], (int)v[2], (int)v[3]); - if ((v[0] <= 1) && (v[1] < 1) ) // Prior to v1.1.xxx fix LJPEG encoding bug + if ((v[0] <= 1) && (v[1] < 1)) // Prior to v1.1.xxx fix LJPEG encoding bug mFixLjpeg = true; else mFixLjpeg = false; } -DngDecoder::~DngDecoder(void) -{ +DngDecoder::~DngDecoder(void) { } RawImage DngDecoder::decodeRaw() { @@ -53,11 +51,11 @@ ThrowRDE("DNG Decoder: No image data found"); // Erase the ones not with JPEG compression - for (vector::iterator i = data.begin(); i != data.end(); ) { + for (vector::iterator i = data.begin(); i != data.end();) { int compression = (*i)->getEntry(COMPRESSION)->getShort(); bool isSubsampled = false; try { - isSubsampled = (*i)->getEntry(NEWSUBFILETYPE)->getInt()&1; // bit 0 is on if image is subsampled + isSubsampled = (*i)->getEntry(NEWSUBFILETYPE)->getInt() & 1; // bit 0 is on if image is subsampled } catch (TiffParserException) {} if ((compression != 7 && compression != 1) || isSubsampled) { // Erase if subsampled, or not JPEG or uncompressed i = data.erase(i); @@ -69,23 +67,23 @@ if (data.empty()) ThrowRDE("DNG Decoder: No RAW chunks found"); - if (data.size()>1) { - _RPT0(0,"Multiple RAW chunks found - using first only!"); + if (data.size() > 1) { + _RPT0(0, "Multiple RAW chunks found - using first only!"); } TiffIFD* raw = data[0]; mRaw = RawImage::create(); mRaw->isCFA = (raw->getEntry(PHOTOMETRICINTERPRETATION)->getShort() == 32803); - if (mRaw->isCFA) - _RPT0(0,"This is a CFA image\n"); - else - _RPT0(0,"This is NOT a CFA image\n"); + if (mRaw->isCFA) + _RPT0(0, "This is a CFA image\n"); + else + _RPT0(0, "This is NOT a CFA image\n"); try { mRaw->dim.x = raw->getEntry(IMAGEWIDTH)->getInt(); mRaw->dim.y = raw->getEntry(IMAGELENGTH)->getInt(); - mRaw->bpp = 2; + mRaw->bpp = 2; } catch (TiffParserException) { ThrowRDE("DNG Decoder: Could not read basic image information."); } @@ -102,26 +100,26 @@ const unsigned short* pDim = raw->getEntry(CFAREPEATPATTERNDIM)->getShortArray(); // Get the size const unsigned char* cPat = raw->getEntry(CFAPATTERN)->getData(); // Does NOT contain dimensions as some documents state -/* - if (raw->hasEntry(CFAPLANECOLOR)) { - TiffEntry* e = raw->getEntry(CFAPLANECOLOR); - const unsigned char* cPlaneOrder = e->getData(); // Map from the order in the image, to the position in the CFA - printf("Planecolor: "); - for (guint i = 0; i < e->count; i++) { - printf("%u,",cPlaneOrder[i]); - } - printf("\n"); - } -*/ - iPoint2D cfaSize(pDim[1],pDim[0]); + /* + if (raw->hasEntry(CFAPLANECOLOR)) { + TiffEntry* e = raw->getEntry(CFAPLANECOLOR); + const unsigned char* cPlaneOrder = e->getData(); // Map from the order in the image, to the position in the CFA + printf("Planecolor: "); + for (guint i = 0; i < e->count; i++) { + printf("%u,",cPlaneOrder[i]); + } + printf("\n"); + } + */ + iPoint2D cfaSize(pDim[1], pDim[0]); if (pDim[0] != 2) ThrowRDE("DNG Decoder: Unsupported CFA configuration."); if (pDim[1] != 2) ThrowRDE("DNG Decoder: Unsupported CFA configuration."); - + if (cfaSize.area() != raw->getEntry(CFAPATTERN)->count) ThrowRDE("DNG Decoder: CFA pattern dimension and pattern count does not match: %d."); - + for (int y = 0; y < cfaSize.y; y++) { for (int x = 0; x < cfaSize.x; x++) { guint c1 = cPat[x+y*cfaSize.x]; @@ -137,12 +135,12 @@ c2 = CFA_UNKNOWN; ThrowRDE("DNG Decoder: Unsupported CFA Color."); } - mRaw->cfa.setColorAt(iPoint2D(x,y),c2); + mRaw->cfa.setColorAt(iPoint2D(x, y), c2); } } } - + // Now load the image if (compression == 1) { // Uncompressed. try { @@ -159,40 +157,40 @@ guint bps = raw->getEntry(BITSPERSAMPLE)->getShort(); if (TEcounts->count != TEoffsets->count) { - ThrowRDE("DNG Decoder: Byte count number does not match strip size: count:%u, strips:%u ",TEcounts->count, TEoffsets->count); + ThrowRDE("DNG Decoder: Byte count number does not match strip size: count:%u, strips:%u ", TEcounts->count, TEoffsets->count); } guint offY = 0; vector slices; - for (guint s = 0; sheight) - slice.h = height-offY; + if (offY + yPerSlice > height) + slice.h = height - offY; else slice.h = yPerSlice; - offY +=yPerSlice; + offY += yPerSlice; - if (mFile->isValid(slice.offset+slice.count)) // Only decode if size is valid + if (mFile->isValid(slice.offset + slice.count)) // Only decode if size is valid slices.push_back(slice); } mRaw->createData(); - for (guint i = 0; i< slices.size(); i++) { + for (guint i = 0; i < slices.size(); i++) { DngStrip slice = slices[i]; - ByteStream in(mFile->getData(slice.offset),slice.count); - iPoint2D size(width,slice.h); - iPoint2D pos(0,slice.offsetY); + ByteStream in(mFile->getData(slice.offset), slice.count); + iPoint2D size(width, slice.h); + iPoint2D pos(0, slice.offsetY); gboolean big_endian = (mRootIFD->endian == big); - readUncompressedRaw(in,size,pos,width*bps/8,bps,big_endian); + readUncompressedRaw(in, size, pos, width*bps / 8, bps, big_endian); } } catch (TiffParserException) { - ThrowRDE("DNG Decoder: Unsupported format, uncompressed with no strips."); + ThrowRDE("DNG Decoder: Unsupported format, uncompressed with no strips."); } } else if (compression == 7) { try { @@ -207,9 +205,9 @@ if (raw->hasEntry(TILEOFFSETS)) { guint tilew = raw->getEntry(TILEWIDTH)->getInt(); guint tileh = raw->getEntry(TILELENGTH)->getInt(); - guint tilesX = (mRaw->dim.x + tilew -1) / tilew; - guint tilesY = (mRaw->dim.y + tileh -1) / tileh; - guint nTiles = tilesX*tilesY; + guint tilesX = (mRaw->dim.x + tilew - 1) / tilew; + guint tilesY = (mRaw->dim.y + tileh - 1) / tileh; + guint nTiles = tilesX * tilesY; TiffEntry *TEoffsets = raw->getEntry(TILEOFFSETS); const guint* offsets = TEoffsets->getIntArray(); @@ -218,14 +216,14 @@ const guint* counts = TEcounts->getIntArray(); if (TEoffsets->count != TEcounts->count || TEoffsets->count != nTiles) - ThrowRDE("DNG Decoder: Tile count mismatch: offsets:%u count:%u, calculated:%u",TEoffsets->count,TEcounts->count, nTiles ); - + ThrowRDE("DNG Decoder: Tile count mismatch: offsets:%u count:%u, calculated:%u", TEoffsets->count, TEcounts->count, nTiles); + slices.mFixLjpeg = mFixLjpeg; - for (guint y=0; y< tilesY; y++) { - for (guint x=0; x< tilesX; x++) { - DngSliceElement e(offsets[x+y*tilesX], counts[x+y*tilesX], tilew*x, tileh*y); - e.mUseBigtable = tilew*tileh > 1024*1024; + for (guint y = 0; y < tilesY; y++) { + for (guint x = 0; x < tilesX; x++) { + DngSliceElement e(offsets[x+y*tilesX], counts[x+y*tilesX], tilew*x, tileh*y); + e.mUseBigtable = tilew * tileh > 1024 * 1024; slices.addSlice(e); } } @@ -238,16 +236,16 @@ guint yPerSlice = raw->getEntry(ROWSPERSTRIP)->getInt(); if (TEcounts->count != TEoffsets->count) { - ThrowRDE("DNG Decoder: Byte count number does not match strip size: count:%u, stips:%u ",TEcounts->count, TEoffsets->count); + ThrowRDE("DNG Decoder: Byte count number does not match strip size: count:%u, stips:%u ", TEcounts->count, TEoffsets->count); } guint offY = 0; - for (guint s = 0; scount; s++) { + for (guint s = 0; s < TEcounts->count; s++) { DngSliceElement e(offsets[s], counts[s], 0, offY); - e.mUseBigtable = yPerSlice*mRaw->dim.y > 1024*1024; - offY +=yPerSlice; + e.mUseBigtable = yPerSlice * mRaw->dim.y > 1024 * 1024; + offY += yPerSlice; - if (mFile->isValid(e.byteOffset+e.byteCount)) // Only decode if size is valid + if (mFile->isValid(e.byteOffset + e.byteCount)) // Only decode if size is valid slices.addSlice(e); } } @@ -258,12 +256,12 @@ errors = slices.errors; if (errors.size() >= nSlices) - ThrowRDE("DNG Decoding: Too many errors encountered. Giving up.\nFirst Error:%s",errors[0]); + ThrowRDE("DNG Decoding: Too many errors encountered. Giving up.\nFirst Error:%s", errors[0]); } catch (TiffParserException e) { ThrowRDE("DNG Decoder: Unsupported format, tried strips and tiles:\n%s", e.what()); } - } else { - ThrowRDE("DNG Decoder: Unknown compression: %u",compression); + } else { + ThrowRDE("DNG Decoder: Unknown compression: %u", compression); } } catch (TiffParserException e) { ThrowRDE("DNG Decoder: Image could not be read:\n%s", e.what()); @@ -275,12 +273,12 @@ if (raw->hasEntry(ACTIVEAREA)) { const guint *corners = raw->getEntry(ACTIVEAREA)->getIntArray(); iPoint2D top_left(corners[1], corners[0]); - new_size = iPoint2D(corners[3]-corners[1], corners[2]-corners[0]); - mRaw->subFrame(top_left,new_size); + new_size = iPoint2D(corners[3] - corners[1], corners[2] - corners[0]); + mRaw->subFrame(top_left, new_size); } else if (raw->hasEntry(DEFAULTCROPORIGIN)) { - iPoint2D top_left(0,0); + iPoint2D top_left(0, 0); if (raw->getEntry(DEFAULTCROPORIGIN)->type == TIFF_LONG) { const guint* tl = raw->getEntry(DEFAULTCROPORIGIN)->getIntArray(); @@ -293,7 +291,7 @@ top_left = iPoint2D(tl[0], tl[1]); new_size = iPoint2D(sz[0], sz[1]); } - mRaw->subFrame(top_left,new_size); + mRaw->subFrame(top_left, new_size); } #endif // Linearization @@ -302,15 +300,15 @@ const gushort* intable = raw->getEntry(LINEARIZATIONTABLE)->getShortArray(); guint len = raw->getEntry(LINEARIZATIONTABLE)->count; gushort table[65536]; - for (guint i = 0; i < 65536 ; i++ ) { - if (idim.y; y++) { - guint cw = mRaw->dim.x*mRaw->getCpp(); - gushort* pixels = (gushort*)mRaw->getData(0,y); + guint cw = mRaw->dim.x * mRaw->getCpp(); + gushort* pixels = (gushort*)mRaw->getData(0, y); for (guint x = 0; x < cw; x++) { pixels[x] = table[pixels[x]]; } @@ -322,7 +320,7 @@ if (raw->hasEntry(BLACKLEVELREPEATDIM)) { black = 65536; const gushort *blackdim = raw->getEntry(BLACKLEVELREPEATDIM)->getShortArray(); - if (blackdim[0] != 0 && blackdim[1] != 0) { + if (blackdim[0] != 0 && blackdim[1] != 0) { if (raw->hasEntry(BLACKLEVELDELTAV)) { const guint *blackarray = raw->getEntry(BLACKLEVEL)->getIntArray(); int blackbase = blackarray[0] / blackarray[1]; @@ -336,13 +334,13 @@ const guint* blackarray = black_entry->getIntArray(); if (blackarray[1]) black = blackarray[0] / blackarray[1]; - else + else black = 0; - } else if (black_entry->type == TIFF_RATIONAL){ + } else if (black_entry->type == TIFF_RATIONAL) { const guint* blackarray = (const guint*)black_entry->getData(); if (blackarray[1]) black = blackarray[0] / blackarray[1]; - else + else black = 0; } } @@ -354,8 +352,7 @@ return mRaw; } -void DngDecoder::decodeMetaData(CameraMetaData *meta) -{ +void DngDecoder::decodeMetaData(CameraMetaData *meta) { #ifdef PRINT_INFO if (mRaw->isCFA) printMetaData(); @@ -371,8 +368,7 @@ this->checkCameraSupported(meta, make, model, "dng"); } -void DngDecoder::printMetaData() -{ +void DngDecoder::printMetaData() { vector data = mRootIFD->getIFDsWithTag(MODEL); if (data.empty()) ThrowRDE("Model name found"); @@ -389,11 +385,11 @@ ThrowRDE("DNG Decoder: No image data found"); // Erase the ones not with JPEG compression - for (vector::iterator i = data.begin(); i != data.end(); ) { + for (vector::iterator i = data.begin(); i != data.end();) { int compression = (*i)->getEntry(COMPRESSION)->getShort(); bool isSubsampled = false; try { - isSubsampled = (*i)->getEntry(NEWSUBFILETYPE)->getInt()&1; // bit 0 is on if image is subsampled + isSubsampled = (*i)->getEntry(NEWSUBFILETYPE)->getInt() & 1; // bit 0 is on if image is subsampled } catch (TiffParserException) {} if ((compression != 7 && compression != 1) || isSubsampled) { // Erase if subsampled, or not JPEG or uncompressed i = data.erase(i); @@ -409,13 +405,13 @@ ColorFilterArray cfa(mRaw->cfa); // Crop - iPoint2D top_left(0,0); + iPoint2D top_left(0, 0); iPoint2D new_size(mRaw->dim.x, mRaw->dim.y); if (raw->hasEntry(ACTIVEAREA)) { const guint *corners = raw->getEntry(ACTIVEAREA)->getIntArray(); top_left = iPoint2D(corners[1], corners[0]); - new_size = iPoint2D(corners[3]-corners[1], corners[2]-corners[0]); + new_size = iPoint2D(corners[3] - corners[1], corners[2] - corners[0]); } else if (raw->hasEntry(DEFAULTCROPORIGIN)) { @@ -441,7 +437,7 @@ if (raw->hasEntry(BLACKLEVELREPEATDIM)) { const gushort *blackdim = raw->getEntry(BLACKLEVELREPEATDIM)->getShortArray(); black = 65536; - if (blackdim[0] != 0 && blackdim[1] != 0) { + if (blackdim[0] != 0 && blackdim[1] != 0) { if (raw->hasEntry(BLACKLEVELDELTAV)) { const guint *blackarray = raw->getEntry(BLACKLEVEL)->getIntArray(); int blackbase = blackarray[0] / blackarray[1]; @@ -451,9 +447,9 @@ black = MIN(black, blackbase + blackarrayv[i*2] / blackarrayv[i*2+1]); } else { const guint *blackarray = raw->getEntry(BLACKLEVEL)->getIntArray(); - if ( blackarray[1] ) + if (blackarray[1]) black = blackarray[0] / blackarray[1]; - else + else black = 0; } } else { @@ -463,10 +459,10 @@ cout << "" << endl; cout << "" << endl; - cout << "" << ColorFilterArray::colorToString(cfa.getColorAt(0,0)) << ""; - cout << "" << ColorFilterArray::colorToString(cfa.getColorAt(1,0)) << "" << endl; - cout << "" << ColorFilterArray::colorToString(cfa.getColorAt(0,1)) << ""; - cout << "" << ColorFilterArray::colorToString(cfa.getColorAt(1,1)) << "" << endl; + cout << "" << ColorFilterArray::colorToString(cfa.getColorAt(0, 0)) << ""; + cout << "" << ColorFilterArray::colorToString(cfa.getColorAt(1, 0)) << "" << endl; + cout << "" << ColorFilterArray::colorToString(cfa.getColorAt(0, 1)) << ""; + cout << "" << ColorFilterArray::colorToString(cfa.getColorAt(1, 1)) << "" << endl; cout << "" << endl; cout << "" << endl; @@ -474,7 +470,7 @@ cout << "" << endl; - cout << "" <" << endl; } Modified: RawSpeed/DngDecoderSlices.cpp =================================================================== --- RawSpeed/DngDecoderSlices.cpp 2009-09-28 21:07:13 UTC (rev 153) +++ RawSpeed/DngDecoderSlices.cpp 2009-09-29 18:26:02 UTC (rev 154) @@ -1,6 +1,6 @@ #include "StdAfx.h" #include "DngDecoderSlices.h" -/* +/* RawSpeed - RAW file decoder. Copyright (C) 2009 Klaus Post @@ -37,8 +37,8 @@ } -DngDecoderSlices::DngDecoderSlices( FileMap* file, RawImage img ) : -mFile(file), mRaw(img) { +DngDecoderSlices::DngDecoderSlices(FileMap* file, RawImage img) : + mFile(file), mRaw(img) { mFixLjpeg = false; #ifdef WIN32 nThreads = pthread_num_processors_np(); @@ -47,17 +47,14 @@ #endif } -DngDecoderSlices::~DngDecoderSlices(void) -{ +DngDecoderSlices::~DngDecoderSlices(void) { } -void DngDecoderSlices::addSlice( DngSliceElement slice ) -{ +void DngDecoderSlices::addSlice(DngSliceElement slice) { slices.push(slice); } -void DngDecoderSlices::startDecoding() -{ +void DngDecoderSlices::startDecoding() { // Create threads int slicesPerThread = ((int)slices.size() + nThreads - 1) / nThreads; @@ -68,22 +65,22 @@ pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE); pthread_mutex_init(&errMutex, NULL); - for (guint i = 0; i< nThreads; i++) { + for (guint i = 0; i < nThreads; i++) { DngDecoderThread* t = new DngDecoderThread(); - for (int j = 0; jslices.push(slices.front()); slices.pop(); } } t->parent = this; - pthread_create(&t->threadid,&attr,DecodeThread,t); + pthread_create(&t->threadid, &attr, DecodeThread, t); threads.push_back(t); } pthread_attr_destroy(&attr); void *status; - for(guint i=0; ithreadid, &status); delete(threads[i]); } @@ -91,7 +88,7 @@ } -void DngDecoderSlices::decodeSlice( DngDecoderThread* t ) { +void DngDecoderSlices::decodeSlice(DngDecoderThread* t) { while (!t->slices.empty()) { LJpegPlain l(mFile, mRaw); l.mDNGCompatible = mFixLjpeg; @@ -100,12 +97,11 @@ t->slices.pop(); try { l.startDecoder(e.byteOffset, e.byteCount, e.offX, e.offY); - } catch (RawDecoderException err) { + } catch (RawDecoderException err) { pthread_mutex_lock(&errMutex); errors.push_back(_strdup(err.what())); pthread_mutex_unlock(&errMutex); - } - catch (IOException err) { + } catch (IOException err) { pthread_mutex_lock(&errMutex); errors.push_back("DngDecoderSlices::decodeSlice: IO error occurred, probably attempted to read past end of file."); pthread_mutex_unlock(&errMutex); @@ -113,7 +109,6 @@ } } -int DngDecoderSlices::size() -{ +int DngDecoderSlices::size() { return (int)slices.size(); -} \ No newline at end of file +} Modified: RawSpeed/FileIOException.cpp =================================================================== --- RawSpeed/FileIOException.cpp 2009-09-28 21:07:13 UTC (rev 153) +++ RawSpeed/FileIOException.cpp 2009-09-29 18:26:02 UTC (rev 154) @@ -5,7 +5,7 @@ #define vsprintf_s(...) vsnprintf(__VA_ARGS__) #endif -/* +/* RawSpeed - RAW file decoder. Copyright (C) 2009 Klaus Post @@ -27,8 +27,7 @@ http://www.klauspost.com */ -FileIOException::FileIOException(const string error) : RawDecoderException(error) -{ +FileIOException::FileIOException(const string error) : RawDecoderException(error) { } @@ -38,6 +37,6 @@ char buf[8192]; vsprintf_s(buf, 8192, fmt, val); va_end(val); - _RPT1(0, "EXCEPTION: %s\n",buf); + _RPT1(0, "EXCEPTION: %s\n", buf); throw FileIOException(buf); -} \ No newline at end of file +} Modified: RawSpeed/FileMap.cpp =================================================================== --- RawSpeed/FileMap.cpp 2009-09-28 21:07:13 UTC (rev 153) +++ RawSpeed/FileMap.cpp 2009-09-29 18:26:02 UTC (rev 154) @@ -1,6 +1,6 @@ #include "StdAfx.h" #include "FileMap.h" -/* +/* RawSpeed - RAW file decoder. Copyright (C) 2009 Klaus Post @@ -22,13 +22,12 @@ http://www.klauspost.com */ -FileMap::FileMap(guint _size) : size(_size) -{ - data = (unsigned char*)_aligned_malloc(size+4,16); +FileMap::FileMap(guint _size) : size(_size) { + data = (unsigned char*)_aligned_malloc(size + 4, 16); if (!data) { - throw new FileIOException("Not enough memory to open file."); + throw new FileIOException("Not enough memory to open file."); } - mOwnAlloc= true; + mOwnAlloc = true; } FileMap::FileMap(guchar* _data, guint _size): data(_data), size(_size) { @@ -36,8 +35,7 @@ } -FileMap::~FileMap(void) -{ +FileMap::~FileMap(void) { if (data && mOwnAlloc) { _aligned_free(data); } @@ -45,17 +43,15 @@ size = 0; } -FileMap* FileMap::clone() -{ +FileMap* FileMap::clone() { FileMap *new_map = new FileMap(size); memcpy(new_map->data, data, size); return new_map; } -void FileMap::corrupt( int errors ) -{ +void FileMap::corrupt(int errors) { for (int i = 0; i < errors; i++) { - guint pos = ( rand() | (rand()<<15) ) % size; - data[pos] = rand()&0xff; + guint pos = (rand() | (rand() << 15)) % size; + data[pos] = rand() & 0xff; } -} \ No newline at end of file +} Modified: RawSpeed/FileReader.cpp =================================================================== --- RawSpeed/FileReader.cpp 2009-09-28 21:07:13 UTC (rev 153) +++ RawSpeed/FileReader.cpp 2009-09-29 18:26:02 UTC (rev 154) @@ -7,7 +7,7 @@ #include #include #endif // __unix__ -/* +/* RawSpeed - RAW file decoder. Copyright (C) 2009 Klaus Post @@ -30,8 +30,7 @@ */ -FileReader::FileReader(LPCWSTR _filename) : mFilename(_filename) -{ +FileReader::FileReader(LPCWSTR _filename) : mFilename(_filename) { } FileMap* FileReader::readFile() { @@ -48,21 +47,21 @@ #if 0 // Not used, as it is slower than sync read - guchar* pa = (guchar*)mmap(0, st.st_size, PROT_READ|PROT_WRITE, MAP_PRIVATE, fd, 0); + guchar* pa = (guchar*)mmap(0, st.st_size, PROT_READ | PROT_WRITE, MAP_PRIVATE, fd, 0); FileMap *fileData = new FileMap(pa, st.st_size); -#else +#else FileMap *fileData = new FileMap(st.st_size); - while((st.st_size > 0) && (bytes_read < st.st_size)) { + while ((st.st_size > 0) && (bytes_read < st.st_size)) { dest = (char *) fileData->getDataWrt(bytes_read); - bytes_read += read(fd, dest, st.st_size-bytes_read); + bytes_read += read(fd, dest, st.st_size - bytes_read); } #endif #else // __unix__ HANDLE file_h; // File handle - file_h = CreateFile(mFilename, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING,FILE_FLAG_SEQUENTIAL_SCAN, NULL); + file_h = CreateFile(mFilename, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN, NULL); if (file_h == INVALID_HANDLE_VALUE) { throw FileIOException("Could not open file."); } @@ -84,7 +83,6 @@ return fileData; } -FileReader::~FileReader(void) -{ +FileReader::~FileReader(void) { } Modified: RawSpeed/LJpegDecompressor.cpp =================================================================== --- RawSpeed/LJpegDecompressor.cpp 2009-09-28 21:07:13 UTC (rev 153) +++ RawSpeed/LJpegDecompressor.cpp 2009-09-29 18:26:02 UTC (rev 154) @@ -59,28 +59,28 @@ */ const guint bitMask[] = { 0xffffffff, 0x7fffffff, -0x3fffffff, 0x1fffffff, -0x0fffffff, 0x07ffffff, -0x03ffffff, 0x01ffffff, -0x00ffffff, 0x007fffff, -0x003fffff, 0x001fffff, -0x000fffff, 0x0007ffff, -0x0003ffff, 0x0001ffff, -0x0000ffff, 0x00007fff, -0x00003fff, 0x00001fff, -0x00000fff, 0x000007ff, -0x000003ff, 0x000001ff, -0x000000ff, 0x0000007f, -0x0000003f, 0x0000001f, -0x0000000f, 0x00000007, -0x00000003, 0x00000001}; + 0x3fffffff, 0x1fffffff, + 0x0fffffff, 0x07ffffff, + 0x03ffffff, 0x01ffffff, + 0x00ffffff, 0x007fffff, + 0x003fffff, 0x001fffff, + 0x000fffff, 0x0007ffff, + 0x0003ffff, 0x0001ffff, + 0x0000ffff, 0x00007fff, + 0x00003fff, 0x00001fff, + 0x00000fff, 0x000007ff, + 0x000003ff, 0x000001ff, + 0x000000ff, 0x0000007f, + 0x0000003f, 0x0000001f, + 0x0000000f, 0x00000007, + 0x00000003, 0x00000001 + }; LJpegDecompressor::LJpegDecompressor(FileMap* file, RawImage img): - mFile(file), mRaw(img) -{ + mFile(file), mRaw(img) { input = 0; skipX = skipY = 0; - for (int i = 0; i< 4; i++) { + for (int i = 0; i < 4; i++) { huff[i].initialized = false; huff[i].bigTable = 0; } @@ -89,21 +89,19 @@ mUseBigtable = false; } -LJpegDecompressor::~LJpegDecompressor(void) -{ +LJpegDecompressor::~LJpegDecompressor(void) { if (input) delete input; input = 0; - for (int i = 0; i< 4; i++) { + for (int i = 0; i < 4; i++) { if (huff[i].bigTable) _aligned_free(huff[i].bigTable); } } -void LJpegDecompressor::getSOF( SOFInfo* sof, guint offset, guint size ) -{ - if (!mFile->isValid(offset+size-1)) +void LJpegDecompressor::getSOF(SOFInfo* sof, guint offset, guint size) { + if (!mFile->isValid(offset + size - 1)) ThrowRDE("LJpegDecompressor::getSOF: Start offset plus size is longer than file. Truncated file."); try { input = new ByteStream(mFile->getData(offset), size); @@ -114,8 +112,8 @@ while (true) { JpegMarker m = getNextMarker(true); if (M_SOF3 == m) { - parseSOF(sof); - return; + parseSOF(sof); + return; } if (M_EOI == m) { ThrowRDE("LJpegDecompressor: Could not locate Start of Frame."); @@ -128,11 +126,11 @@ } void LJpegDecompressor::startDecoder(guint offset, guint size, guint offsetX, guint offsetY) { - if (!mFile->isValid(offset+size-1)) + if (!mFile->isValid(offset + size - 1)) ThrowRDE("LJpegDecompressor::startDecoder: Start offset plus size is longer than file. Truncated file."); - if ((gint)offsetX>=mRaw->dim.x) + if ((gint)offsetX >= mRaw->dim.x) ThrowRDE("LJpegDecompressor::startDecoder: X offset outside of image"); - if ((gint)offsetY>=mRaw->dim.y) + if ((gint)offsetY >= mRaw->dim.y) ThrowRDE("LJpegDecompressor::startDecoder: Y offset outside of image"); offX = offsetX; offY = offsetY; @@ -146,13 +144,13 @@ gboolean moreImage = true; while (moreImage) { - JpegMarker m = getNextMarker(true); + JpegMarker m = getNextMarker(true); - switch (m) { + switch (m) { case M_SOS: // _RPT0(0,"Found SOS marker\n"); parseSOS(); - break; + break; case M_EOI: // _RPT0(0,"Found EOI marker\n"); moreImage = false; @@ -160,20 +158,20 @@ case M_DHT: // _RPT0(0,"Found DHT marker\n"); - parseDHT(); - break; + parseDHT(); + break; case M_DQT: ThrowRDE("LJpegDecompressor: Not a valid RAW file."); - break; + break; case M_DRI: // _RPT0(0,"Found DRI marker\n"); - break; + break; case M_APP0: // _RPT0(0,"Found APP0 marker\n"); - break; + break; case M_SOF3: // _RPT0(0,"Found SOF 3 marker:\n"); @@ -181,9 +179,9 @@ break; default: // Just let it skip to next marker - _RPT1(0,"Found marker:0x%x. Skipping\n",(int)m); + _RPT1(0, "Found marker:0x%x. Skipping\n", (int)m); break; - } + } } } catch (IOException) { @@ -199,29 +197,28 @@ sof->cps = input->getByte(); - if (sof->prec>16) + if (sof->prec > 16) ThrowRDE("LJpegDecompressor: More than 16 bits per channel is not supported."); - if (sof->cps>4 || sof->cps<2) + if (sof->cps > 4 || sof->cps < 2) ThrowRDE("LJpegDecompressor: Only from 2 to 4 components are supported."); - if(headerLength!=8+sof->cps*3) + if (headerLength != 8 + sof->cps*3) ThrowRDE("LJpegDecompressor: Header size mismatch."); - for (guint i = 0; i< sof->cps; i++) { + for (guint i = 0; i < sof->cps; i++) { sof->compInfo[i].componentId = input->getByte(); guint subs = input->getByte(); - frame.compInfo[i].superV = subs&0xf; - frame.compInfo[i].superH = subs>>4; + frame.compInfo[i].superV = subs & 0xf; + frame.compInfo[i].superH = subs >> 4; guint Tq = input->getByte(); - if (Tq!=0) + if (Tq != 0) ThrowRDE("LJpegDecompressor: Quantized components not supported."); } sof->initialized = true; } -void LJpegDecompressor::parseSOS() -{ +void LJpegDecompressor::parseSOS() { if (!frame.initialized) ThrowRDE("LJpegDecompressor::parseSOS: Frame not yet initialized (SOF Marker not parsed)"); @@ -230,19 +227,19 @@ if (frame.cps != soscps) ThrowRDE("LJpegDecompressor::parseSOS: Component number mismatch."); - for (guint i=0;igetByte(); guint count = 0; // Find the correct component while (frame.compInfo[count].componentId != cs) { - if (count>=frame.cps) + if (count >= frame.cps) ThrowRDE("LJpegDecompressor::parseSOS: Invalid Component Selector"); count++; } guint b = input->getByte(); - guint td = b>>4; - if (td>3) + guint td = b >> 4; + if (td > 3) ThrowRDE("LJpegDecompressor::parseSOS: Invalid Huffman table selection"); if (!huff[td].initialized) ThrowRDE("LJpegDecompressor::parseSOS: Invalid Huffman table selection, not defined."); @@ -252,14 +249,14 @@ // Get predictor pred = input->getByte(); - if (pred>7) + if (pred > 7) ThrowRDE("LJpegDecompressor::parseSOS: Invalid predictor mode."); input->skipBytes(1); // Se + Ah Not used in LJPEG guint b = input->getByte(); - Pt = b&0xf; // Point Transform + Pt = b & 0xf; // Point Transform - guint cheadersize = 3+frame.cps * 2 + 3; + guint cheadersize = 3 + frame.cps * 2 + 3; _ASSERTE(cheadersize == headerLength); bits = new BitPumpJPEG(input); @@ -274,39 +271,39 @@ } void LJpegDecompressor::parseDHT() { - guint headerLength = input->getShort() -2; // Subtract myself + guint headerLength = input->getShort() - 2; // Subtract myself while (headerLength) { - guint b = input->getByte(); + guint b = input->getByte(); - guint Tc = (b>>4); - if (Tc!=0) - ThrowRDE("LJpegDecompressor::parseDHT: Unsupported Table class."); + guint Tc = (b >> 4); + if (Tc != 0) + ThrowRDE("LJpegDecompressor::parseDHT: Unsupported Table class."); - guint Th = b&0xf; - if (Th>3) - ThrowRDE("LJpegDecompressor::parseDHT: Invalid huffman table destination id."); + guint Th = b & 0xf; + if (Th > 3) + ThrowRDE("LJpegDecompressor::parseDHT: Invalid huffman table destination id."); - guint acc = 0; - HuffmanTable* t = &huff[Th]; + guint acc = 0; + HuffmanTable* t = &huff[Th]; - for (guint i = 0; i < 16 ;i++) { - t->bits[i+1] = input->getByte(); - acc+=t->bits[i+1]; - } - t->bits[0] = 0; - memset(t->huffval,0,sizeof(t->huffval)); - if (acc > 256) - ThrowRDE("LJpegDecompressor::parseDHT: Invalid DHT table."); + for (guint i = 0; i < 16 ;i++) { + t->bits[i+1] = input->getByte(); + acc += t->bits[i+1]; + } + t->bits[0] = 0; + memset(t->huffval, 0, sizeof(t->huffval)); + if (acc > 256) + ThrowRDE("LJpegDecompressor::parseDHT: Invalid DHT table."); - if (headerLength < 1+16+acc) - ThrowRDE("LJpegDecompressor::parseDHT: Invalid DHT table length."); + if (headerLength < 1 + 16 + acc) + ThrowRDE("LJpegDecompressor::parseDHT: Invalid DHT table length."); - for(guint i =0 ; ihuffval[i] = input->getByte(); - } - createHuffmanTable(t); - headerLength -= 1+16+acc; + for (guint i = 0 ; i < acc; i++) { + t->huffval[i] = input->getByte(); + } + createHuffmanTable(t); + headerLength -= 1 + 16 + acc; } } @@ -400,24 +397,24 @@ * If size is zero, it means that more than 8 bits are in the huffman * code (this happens about 3-4% of the time). */ - memset (htbl->numbits, 0, sizeof(htbl->numbits)); - for (p=0; pnumbits, 0, sizeof(htbl->numbits)); + for (p = 0; p < lastp; p++) { size = huffsize[p]; if (size <= 8) { value = htbl->huffval[p]; code = huffcode[p]; - ll = code << (8-size); + ll = code << (8 - size); if (size < 8) { ul = ll | bitMask[24+size]; } else { ul = ll; } - _ASSERTE(ll >= 0 && ul >=0); + _ASSERTE(ll >= 0 && ul >= 0); _ASSERTE(ll < 256 && ul < 256); _ASSERTE(ll <= ul); - _ASSERTE(size<=8); - for (i=ll; i<=ul; i++) { - htbl->numbits[i] = size | (value<<4); + _ASSERTE(size <= 8); + for (i = ll; i <= ul; i++) { + htbl->numbits[i] = size | (value << 4); } } } @@ -438,25 +435,25 @@ * ************************************/ -void LJpegDecompressor::createBigTable( HuffmanTable *htbl ) { +void LJpegDecompressor::createBigTable(HuffmanTable *htbl) { const guint bits = 14; // HuffDecode functions must be changed, if this is modified. - const guint size = 1<bigTable = (gint*)_aligned_malloc(size*sizeof(gint),16); - for (guint i = 0; i >8; // Get 8 bits + htbl->bigTable = (gint*)_aligned_malloc(size * sizeof(gint), 16); + for (guint i = 0; i < size; i++) { + gushort input = i << 2; // Calculate input value + gint code = input >> 8; // Get 8 bits guint val = htbl->numbits[code]; - l = val&15; + l = val & 15; if (l) { - rv=val>>4; + rv = val >> 4; } else { l = 8; while (code > htbl->maxcode[l]) { - temp = input>>(15-l)&1; + temp = input >> (15 - l) & 1; code = (code << 1) | temp; l++; } @@ -470,16 +467,16 @@ continue; } else { rv = htbl->huffval[htbl->valptr[l] + - ((int)(code - htbl->mincode[l]))]; + ((int)(code - htbl->mincode[l]))]; } } if (rv == 16) { if (mDNGCompatible) - htbl->bigTable[i] = (-32768<<8) | (16+l); + htbl->bigTable[i] = (-32768 << 8) | (16 + l); else - htbl->bigTable[i] = (-32768<<8) | l; + htbl->bigTable[i] = (-32768 << 8) | l; continue; } @@ -489,10 +486,10 @@ } if (rv) { - gint x = input>>(16-l-rv) & ((1<> (16 - l - rv) & ((1 << rv) - 1); + if ((x & (1 << (rv - 1))) == 0) x -= (1 << rv) - 1; - htbl->bigTable[i] = (x<<8) | (l+rv); + htbl->bigTable[i] = (x << 8) | (l + rv); } else { htbl->bigTable[i] = l; } @@ -505,19 +502,18 @@ * * HuffDecode -- * -* Taken from Figure F.16: extract next coded symbol from -* input stream. This should becode a macro. +* Taken from Figure F.16: extract next coded symbol from +* input stream. This should becode a macro. * * Results: -* Next coded symbol +* Next coded symbol * * Side effects: -* Bitstream is parsed. +* Bitstream is parsed. * *-------------------------------------------------------------- */ -gint LJpegDecompressor::HuffDecode(HuffmanTable *htbl) -{ +gint LJpegDecompressor::HuffDecode(HuffmanTable *htbl) { gint rv; gint temp; gint code, val; @@ -532,7 +528,7 @@ val = htbl->bigTable[code]; if ((val&0xff) != 0xff) { bits->skipBits(val&0xff); - return val>>8; + return val >> 8; } } /* @@ -543,10 +539,10 @@ rv = 0; code = bits->peekByteNoFill(); val = htbl->numbits[code]; - l = val&15; + l = val & 15; if (l) { bits->skipBits(l); - rv=val>>4; + rv = val >> 4; } else { bits->skipBits(8); l = 8; @@ -561,10 +557,10 @@ */ if (l > frame.prec || htbl->valptr[l] == 0xff) { - ThrowRDE("Corrupt JPEG data: bad Huffman code:%u",l); + ThrowRDE("Corrupt JPEG data: bad Huffman code:%u", l); } else { rv = htbl->huffval[htbl->valptr[l] + - ((int)(code - htbl->mincode[l]))]; + ((int)(code - htbl->mincode[l]))]; } } @@ -575,8 +571,8 @@ } // Ensure we have enough bits - if ((rv+l)>24) { - if (rv>16) // There is no values above 16 bits. + if ((rv + l) > 24) { + if (rv > 16) // There is no values above 16 bits. ThrowRDE("Corrupt JPEG data: Too many bits requested."); else bits->fill(); @@ -589,7 +585,7 @@ if (rv) { gint x = bits->getBitsNoFill(rv); - if ((x & (1 << (rv-1))) == 0) + if ((x & (1 << (rv - 1))) == 0) x -= (1 << rv) - 1; return x; } Modified: RawSpeed/LJpegPlain.cpp =================================================================== --- RawSpeed/LJpegPlain.cpp 2009-09-28 21:07:13 UTC (rev 153) +++ RawSpeed/LJpegPlain.cpp 2009-09-29 18:26:02 UTC (rev 154) @@ -1,6 +1,6 @@ #include "StdAfx.h" #include "LJpegPlain.h" -/* +/* RawSpeed - RAW file decoder. Copyright (C) 2009 Klaus Post @@ -23,15 +23,13 @@ */ -LJpegPlain::LJpegPlain( FileMap* file, RawImage img ) : -LJpegDecompressor(file,img) -{ +LJpegPlain::LJpegPlain(FileMap* file, RawImage img) : + LJpegDecompressor(file, img) { offset = 0; slice_width = 0; } -LJpegPlain::~LJpegPlain(void) -{ +LJpegPlain::~LJpegPlain(void) { if (offset) delete(offset); offset = 0; @@ -42,10 +40,10 @@ void LJpegPlain::decodeScan() { // If image attempts to decode beyond the image bounds, strip it. - if ( (frame.w * frame.cps + offX * mRaw->getCpp()) > mRaw->dim.x * mRaw->getCpp() ) - skipX = ( ( ( frame.w * frame.cps + offX * mRaw->getCpp() ) ) - mRaw->dim.x * mRaw->getCpp() ) / frame.cps; - if (frame.h+offY > (guint)mRaw->dim.y) - skipY = frame.h+offY - mRaw->dim.y; + if ((frame.w * frame.cps + offX * mRaw->getCpp()) > mRaw->dim.x * mRaw->getCpp()) + skipX = (((frame.w * frame.cps + offX * mRaw->getCpp())) - mRaw->dim.x * mRaw->getCpp()) / frame.cps; + if (frame.h + offY > (guint)mRaw->dim.y) + skipY = frame.h + offY - mRaw->dim.y; if (slicesW.empty()) slicesW.push_back(frame.w*frame.cps); @@ -60,16 +58,14 @@ if (pred == 1) { if (frame.compInfo[0].superH == 2 && frame.compInfo[0].superV == 2 && - frame.compInfo[1].superH == 1 && frame.compInfo[1].superV == 1 && - frame.compInfo[2].superH == 1 && frame.compInfo[2].superV == 1) - { + frame.compInfo[1].superH == 1 && frame.compInfo[1].superV == 1 && + frame.compInfo[2].superH == 1 && frame.compInfo[2].superV == 1) { // Something like Cr2 sRaw1, use fast decoder decodeScanLeft4_2_0(); return; } else if (frame.compInfo[0].superH == 2 && frame.compInfo[0].superV == 1 && - frame.compInfo[1].superH == 1 && frame.compInfo[1].superV == 1 && - frame.compInfo[2].superH == 1 && frame.compInfo[2].superV == 1) - { + frame.compInfo[1].superH == 1 && frame.compInfo[1].superV == 1 && + frame.compInfo[2].superH == 1 && frame.compInfo[2].superV == 1) { // Something like Cr2 sRaw2, use fast decoder decodeScanLeft4_2_2(); return; @@ -84,20 +80,20 @@ } if (pred == 1) { - if (frame.cps==2) + if (frame.cps == 2) decodeScanLeft2Comps(); - else if (frame.cps==3) + else if (frame.cps == 3) decodeScanLeft3Comps(); - else if (frame.cps==4) + else if (frame.cps == 4) decodeScanLeft4Comps(); - else + else ThrowRDE("LJpegDecompressor::decodeScan: Unsupported component direction count."); return; } ThrowRDE("LJpegDecompressor::decodeScan: Unsupported prediction direction."); } -/** +/** * CR2 Slice handling: * In the following code, canon slices are handled in-place, to avoid having to * copy the entire frame afterwards. @@ -106,14 +102,14 @@ * Each of these offsets are an offset into the destination image, and it also contains the * slice number (shifted up 28 bits), so it is possible to retrieve the width of each slice. * Every time "components" pixels has been processed the slice size is tested, and output offset -* is adjusted if needed. This makes slice handling very "light", since it involves a single +* is adjusted if needed. This makes slice handling very "light", since it involves a single * counter, and a predictable branch. * For unsliced images, add one slice with the width of the image. **/ void LJpegPlain::decodeScanLeftGeneric() { - _ASSERTE(slicesW.size()<16); // We only have 4 bits for slice number. - _ASSERTE(!(slicesW.size()>1 && skipX)); // Check if this is a valid state + _ASSERTE(slicesW.size() < 16); // We only have 4 bits for slice number. + _ASSERTE(!(slicesW.size() > 1 && skipX)); // Check if this is a valid state guint comps = frame.cps; // Components HuffmanTable *dctbl[4]; // Tables for up to 4 components @@ -148,25 +144,25 @@ mRaw->subsampling.y = maxSuperV; //Prepare slices (for CR2) - guint slices = (guint)slicesW.size()*(frame.h-skipY)/maxSuperV; + guint slices = (guint)slicesW.size() * (frame.h - skipY) / maxSuperV; offset = new guint[slices+1]; guint t_y = 0; guint t_x = 0; guint t_s = 0; guint slice = 0; - guint pitch_s = mRaw->pitch/2; // Pitch in shorts + guint pitch_s = mRaw->pitch / 2; // Pitch in shorts slice_width = new int[slices]; // This is divided by comps, since comps pixels are processed at the time for (guint i = 0 ; i < slicesW.size(); i++) - slice_width[i] = slicesW[i] / pixGroup/maxSuperH; // This is a guess, but works for sRaw1+2. + slice_width[i] = slicesW[i] / pixGroup / maxSuperH; // This is a guess, but works for sRaw1+2. - for (slice = 0; slice< slices; slice++) { - offset[slice] = ((t_x+offX)*mRaw->bpp+((offY+t_y)*mRaw->pitch)) | (t_s<<28); - _ASSERTE((offset[slice]&0x0fffffff)pitch*mRaw->dim.y); + for (slice = 0; slice < slices; slice++) { + offset[slice] = ((t_x + offX) * mRaw->bpp + ((offY + t_y) * mRaw->pitch)) | (t_s << 28); + _ASSERTE((offset[slice]&0x0fffffff) < mRaw->pitch*mRaw->dim.y); t_y += maxSuperV; - if (t_y >= (frame.h-skipY)) { + if (t_y >= (frame.h - skipY)) { t_y = 0; t_x += slice_width[t_s++]; } @@ -178,11 +174,11 @@ // Predictors for components gint p[4]; - gushort *dest = (gushort*)&draw[offset[0]&0x0fffffff]; + gushort *dest = (gushort*) & draw[offset[0] & 0x0fffffff]; // Always points to next slice slice = 1; - guint pixInSlice = slice_width[0]; + guint pixInSlice = slice_width[0]; // Initialize predictors and decode one group. guint x = 0; @@ -192,10 +188,10 @@ for (guint x2 = 0; x2 < samplesH[i]; x2++) { // First pixel is not predicted, all other are. if (y2 == 0 && x2 == 0) { - *dest = p[i] = (1<<(frame.prec-Pt-1)) + HuffDecode(dctbl[i]); + *dest = p[i] = (1 << (frame.prec - Pt - 1)) + HuffDecode(dctbl[i]); } else { p[i] += HuffDecode(dctbl[i]); - _ASSERTE(p[i]>=0 && p[i]<65536); + _ASSERTE(p[i] >= 0 && p[i] < 65536); dest[x2*comps+y2*pitch_s] = p[i]; } } @@ -206,43 +202,43 @@ } // Increment destination to next group - dest += (maxSuperH-1)*comps; + dest += (maxSuperH - 1) * comps; x = maxSuperH; pixInSlice -= maxSuperH; - guint cw = (frame.w-skipX); - for (guint y=0;y<(frame.h-skipY);y+=maxSuperV) { - for (; x < cw ; x+=maxSuperH) { + guint cw = (frame.w - skipX); + for (guint y = 0;y < (frame.h - skipY);y += maxSuperV) { + for (; x < cw ; x += maxSuperH) { if (0 == pixInSlice) { // Next slice - _ASSERTE(slicepitch*mRaw->dim.y); + dest = (gushort*) & draw[o&0x0fffffff]; // Adjust destination for next pixel + _ASSERTE((o&0x0fffffff) < mRaw->pitch*mRaw->dim.y); pixInSlice = slice_width[o>>28]; // If new are at the start of a new line, also update predictors. - if (x == 0) + if (x == 0) predict = dest; } for (guint i = 0; i < comps; i++) { for (guint y2 = 0; y2 < samplesV[i]; y2++) { - for (guint x2 = 0; x2 < samplesH[i]; x2++) { + for (guint x2 = 0; x2 < samplesH[i]; x2++) { p[i] += HuffDecode(dctbl[i]); - _ASSERTE(p[i]>=0 && p[i]<65536); + _ASSERTE(p[i] >= 0 && p[i] < 65536); dest[x2*comps+y2*pitch_s] = p[i]; } } dest++; } - dest += (maxSuperH*comps) - comps; + dest += (maxSuperH * comps) - comps; pixInSlice -= maxSuperH; // Check if we are still within the file. bits->checkPos(); } if (skipX) { - for (guint i = 0; i < skipX; i+=maxSuperH) { + for (guint i = 0; i < skipX; i += maxSuperH) { for (guint j = 0; j < pixGroup; i++) HuffDecode(dctbl[i]); } @@ -265,8 +261,8 @@ /*************************************************************************/ void LJpegPlain::decodeScanLeft4_2_0() { - _ASSERTE(slicesW.size()<16); // We only have 4 bits for slice number. - _ASSERTE(!(slicesW.size()>1 && skipX)); // Check if this is a valid state + _ASSERTE(slicesW.size() < 16); // We only have 4 bits for slice number. + _ASSERTE(!(slicesW.size() > 1 && skipX)); // Check if this is a valid state _ASSERTE(frame.compInfo[0].superH == 2); // Check if this is a valid state _ASSERTE(frame.compInfo[0].superV == 2); // Check if this is a valid state _ASSERTE(frame.compInfo[1].superH == 1); // Check if this is a valid state @@ -288,25 +284,25 @@ guchar *draw = mRaw->getData(); //Prepare slices (for CR2) - guint slices = (guint)slicesW.size()*(frame.h-skipY)/2; + guint slices = (guint)slicesW.size() * (frame.h - skipY) / 2; offset = new guint[slices+1]; guint t_y = 0; guint t_x = 0; guint t_s = 0; guint slice = 0; - guint pitch_s = mRaw->pitch/2; // Pitch in shorts + guint pitch_s = mRaw->pitch / 2; // Pitch in shorts slice_width = new int[slices]; // This is divided by comps, since comps pixels are processed at the time for (guint i = 0 ; i < slicesW.size(); i++) slice_width[i] = slicesW[i] / COMPS; - for (slice = 0; slice< slices; slice++) { - offset[slice] = ((t_x+offX)*mRaw->bpp+((offY+t_y)*mRaw->pitch)) | (t_s<<28); - _ASSERTE((offset[slice]&0x0fffffff)pitch*mRaw->dim.y); + for (slice = 0; slice < slices; slice++) { + offset[slice] = ((t_x + offX) * mRaw->bpp + ((offY + t_y) * mRaw->pitch)) | (t_s << 28); + _ASSERTE((offset[slice]&0x0fffffff) < mRaw->pitch*mRaw->dim.y); t_y += 2; - if (t_y >= (frame.h-skipY)) { + if (t_y >= (frame.h - skipY)) { t_y = 0; t_x += slice_width[t_s++]; } @@ -317,7 +313,7 @@ slice_width[slicesW.size()-1] -= skipX; // Predictors for components - gushort *dest = (gushort*)&draw[offset[0]&0x0fffffff]; + gushort *dest = (gushort*) & draw[offset[0] & 0x0fffffff]; // Always points to next slice slice = 1; @@ -329,29 +325,29 @@ gint p2; gint p3; // First pixel is not predicted, all other are. - *dest = p1 = (1<<(frame.prec-Pt-1)) + HuffDecode(dctbl1); + *dest = p1 = (1 << (frame.prec - Pt - 1)) + HuffDecode(dctbl1); p1 = dest[COMPS] = p1 + HuffDecode(dctbl1); p1 = dest[pitch_s] = p1 + HuffDecode(dctbl1); p1 = dest[COMPS+pitch_s] = p1 + HuffDecode(dctbl1); predict = dest; - dest[1] = p2 = (1<<(frame.prec-Pt-1)) + HuffDecode(dctbl2); - dest[2] = p3 = (1<<(frame.prec-Pt-1)) + HuffDecode(dctbl3); + dest[1] = p2 = (1 << (frame.prec - Pt - 1)) + HuffDecode(dctbl2); + dest[2] = p3 = (1 << (frame.prec - Pt - 1)) + HuffDecode(dctbl3); // Skip next - dest+=COMPS*2; + dest += COMPS * 2; x = 2; pixInSlice -= 2; - guint cw = (frame.w-skipX); - for (guint y=0;y<(frame.h-skipY);y+=2) { - for (; x < cw ; x+=2) { + guint cw = (frame.w - skipX); + for (guint y = 0;y < (frame.h - skipY);y += 2) { + for (; x < cw ; x += 2) { if (0 == pixInSlice) { // Next slice guint o = offset[slice++]; - dest = (gushort*)&draw[o&0x0fffffff]; // Adjust destination for next pixel - _ASSERTE((o&0x0fffffff)pitch*mRaw->dim.y); + dest = (gushort*) & draw[o&0x0fffffff]; // Adjust destination for next pixel + _ASSERTE((o&0x0fffffff) < mRaw->pitch*mRaw->dim.y); pixInSlice = slice_width[o>>28]; // If new are at the start of a new line, also update predictors. @@ -368,7 +364,7 @@ p1 += HuffDecode(dctbl1); dest[pitch_s+COMPS] = p1; - dest[1] = p2 = p2 + HuffDecode(dctbl2); + dest[1] = p2 = p2 + HuffDecode(dctbl2); dest[2] = p3 = p3 + HuffDecode(dctbl3); dest += COMPS * 2; @@ -387,10 +383,9 @@ } } -void LJpegPlain::decodeScanLeft4_2_2() -{ - _ASSERTE(slicesW.size()<16); // We only have 4 bits for slice number. - _ASSERTE(!(slicesW.size()>1 && skipX)); // Check if this is a valid state +void LJpegPlain::decodeScanLeft4_2_2() { + _ASSERTE(slicesW.size() < 16); // We only have 4 bits for slice number. + _ASSERTE(!(slicesW.size() > 1 && skipX)); // Check if this is a valid state _ASSERTE(frame.compInfo[0].superH == 2); // Check if this is a valid state _ASSERTE(frame.compInfo[0].superV == 1); // Check if this is a valid state _ASSERTE(frame.compInfo[1].superH == 1); // Check if this is a valid state @@ -412,7 +407,7 @@ guchar *draw = mRaw->getData(); //Prepare slices (for CR2) - guint slices = (guint)slicesW.size()*(frame.h-skipY); + guint slices = (guint)slicesW.size() * (frame.h - skipY); offset = new guint[slices+1]; guint t_y = 0; @@ -423,13 +418,13 @@ // This is divided by comps, since comps pixels are processed at the time for (guint i = 0 ; i < slicesW.size(); i++) - slice_width[i] = slicesW[i]/2; + slice_width[i] = slicesW[i] / 2; for (slice = 0; slice < slices; slice++) { - offset[slice] = ((t_x+offX)*mRaw->bpp+((offY+t_y)*mRaw->pitch)) | (t_s<<28); - _ASSERTE((offset[slice]&0x0fffffff)pitch*mRaw->dim.y); + offset[slice] = ((t_x + offX) * mRaw->bpp + ((offY + t_y) * mRaw->pitch)) | (t_s << 28); + _ASSERTE((offset[slice]&0x0fffffff) < mRaw->pitch*mRaw->dim.y); t_y ++; - if (t_y >= (frame.h-skipY)) { + if (t_y >= (frame.h - skipY)) { t_y = 0; t_x += slice_width[t_s++]; } @@ -440,7 +435,7 @@ slice_width[slicesW.size()-1] -= skipX; // Predictors for components - gushort *dest = (gushort*)&draw[offset[0]&0x0fffffff]; + gushort *dest = (gushort*) & draw[offset[0] & 0x0fffffff]; // Always points to next slice slice = 1; @@ -452,27 +447,27 @@ gint p2; gint p3; // First pixel is not predicted, all other are. - *dest = p1 = (1<<(frame.prec-Pt-1)) + HuffDecode(dctbl1); + *dest = p1 = (1 << (frame.prec - Pt - 1)) + HuffDecode(dctbl1); p1 = dest[COMPS] = p1 + HuffDecode(dctbl1); predict = dest; - dest[1] = p2 = (1<<(frame.prec-Pt-1)) + HuffDecode(dctbl2); - dest[2] = p3 = (1<<(frame.prec-Pt-1)) + HuffDecode(dctbl3); + dest[1] = p2 = (1 << (frame.prec - Pt - 1)) + HuffDecode(dctbl2); + dest[2] = p3 = (1 << (frame.prec - Pt - 1)) + HuffDecode(dctbl3); // Skip to next - dest+=COMPS*2; + dest += COMPS * 2; x = 2; pixInSlice -= 2; - guint cw = (frame.w-skipX); - for (guint y=0;y<(frame.h-skipY);y++) { - for (; x < cw ; x+=2) { + guint cw = (frame.w - skipX); + for (guint y = 0;y < (frame.h - skipY);y++) { + for (; x < cw ; x += 2) { if (0 == pixInSlice) { // Next slice guint o = offset[slice++]; - dest = (gushort*)&draw[o&0x0fffffff]; // Adjust destination for next pixel - _ASSERTE((o&0x0fffffff)pitch*mRaw->dim.y); + dest = (gushort*) & draw[o&0x0fffffff]; // Adjust destination for next pixel + _ASSERTE((o&0x0fffffff) < mRaw->pitch*mRaw->dim.y); pixInSlice = slice_width[o>>28]; // If new are at the start of a new line, also update predictors. @@ -506,8 +501,8 @@ #undef COMPS #define COMPS 2 void LJpegPlain::decodeScanLeft2Comps() { - _ASSERTE(slicesW.size()<16); // We only have 4 bits for slice number. - _ASSERTE(!(slicesW.size()>1 && skipX)); // Check if this is a valid state + _ASSERTE(slicesW.size() < 16); // We only have 4 bits for slice number. + _ASSERTE(!(slicesW.size() > 1 && skipX)); // Check if this is a valid state guchar *draw = mRaw->getData(); // First line @@ -515,19 +510,19 @@ HuffmanTable *dctbl2 = &huff[frame.compInfo[1].dcTblNo]; //Prepare slices (for CR2) - guint slices = (guint)slicesW.size()*(frame.h-skipY); + guint slices = (guint)slicesW.size() * (frame.h - skipY); offset = new guint[slices+1]; guint t_y = 0; guint t_x = 0; guint t_s = 0; guint slice = 0; - guint cw = (frame.w-skipX); - for (slice = 0; slice< slices; slice++) { - offset[slice] = ((t_x+offX)*mRaw->bpp+((offY+t_y)*mRaw->pitch)) | (t_s<<28); - _ASSERTE((offset[slice]&0x0fffffff)pitch*mRaw->dim.y); + guint cw = (frame.w - skipX); + for (slice = 0; slice < slices; slice++) { + offset[slice] = ((t_x + offX) * mRaw->bpp + ((offY + t_y) * mRaw->pitch)) | (t_s << 28); + _ASSERTE((offset[slice]&0x0fffffff) < mRaw->pitch*mRaw->dim.y); t_y++; - if (t_y == (frame.h-skipY)) { + if (t_y == (frame.h - skipY)) { t_y = 0; t_x += slicesW[t_s++]; } @@ -546,31 +541,31 @@ // First pixels are obviously not predicted gint p1; gint p2; - gushort *dest = (gushort*)&draw[offset[0]&0x0fffffff]; + gushort *dest = (gushort*) & draw[offset[0] & 0x0fffffff]; gushort *predict = dest; - *dest++ = p1 = (1<<(frame.prec-Pt-1)) + HuffDecode(dctbl1); - *dest++ = p2 = (1<<(frame.prec-Pt-1)) + HuffDecode(dctbl2); + *dest++ = p1 = (1 << (frame.prec - Pt - 1)) + HuffDecode(dctbl1); + *dest++ = p2 = (1 << (frame.prec - Pt - 1)) + HuffDecode(dctbl2); slice = 1; // Always points to next slice - guint pixInSlice = slice_width[0]-1; // Skip first pixel + guint pixInSlice = slice_width[0] - 1; // Skip first pixel guint x = 1; // Skip first pixels on first line. - for (guint y=0;y<(frame.h-skipY);y++) { + for (guint y = 0;y < (frame.h - skipY);y++) { for (; x < cw ; x++) { gint diff = HuffDecode(dctbl1); p1 += diff; *dest++ = (gushort)p1; - _ASSERTE(p1>=0 && p1<65536); + _ASSERTE(p1 >= 0 && p1 < 65536); diff = HuffDecode(dctbl2); p2 += diff; *dest++ = (gushort)p2; - _ASSERTE(p2>=0 && p2<65536); + _ASSERTE(p2 >= 0 && p2 < 65536); if (0 == --pixInSlice) { // Next slice guint o = offset[slice++]; - dest = (gushort*)&draw[o&0x0fffffff]; // Adjust destination for next pixel - _ASSERTE((o&0x0fffffff)pitch*mRaw->dim.y); + dest = (gushort*) & draw[o&0x0fffffff]; // Adjust destination for next pixel + _ASSERTE((o&0x0fffffff) < mRaw->pitch*mRaw->dim.y); pixInSlice = slice_width[o>>28]; } bits->checkPos(); @@ -601,18 +596,18 @@ HuffmanTable *dctbl3 = &huff[frame.compInfo[2].dcTblNo]; //Prepare slices (for CR2) - guint slices = (guint)slicesW.size()*(frame.h-skipY); + guint slices = (guint)slicesW.size() * (frame.h - skipY); offset = new guint[slices+1]; guint t_y = 0; guint t_x = 0; guint t_s = 0; guint slice = 0; - for (slice = 0; slice< slices; slice++) { - offset[slice] = ((t_x+offX)*mRaw->bpp+((offY+t_y)*mRaw->pitch)) | (t_s<<28); - _ASSERTE((offset[slice]&0x0fffffff)pitch*mRaw->dim.y); + for (slice = 0; slice < slices; slice++) { + offset[slice] = ((t_x + offX) * mRaw->bpp + ((offY + t_y) * mRaw->pitch)) | (t_s << 28); + _ASSERTE((offset[slice]&0x0fffffff) < mRaw->pitch*mRaw->dim.y); t_y++; - if (t_y == (frame.h-skipY)) { + if (t_y == (frame.h - skipY)) { t_y = 0; t_x += slicesW[t_s++]; } @@ -633,19 +628,19 @@ gint p1; gint p2; gint p3; - gushort *dest = (gushort*)&draw[offset[0]&0x0fffffff]; + gushort *dest = (gushort*) & draw[offset[0] & 0x0fffffff]; gushort *predict = dest; - *dest++ = p1 = (1<<(frame.prec-Pt-1)) + HuffDecode(dctbl1); - *dest++ = p2 = (1<<(frame.prec-Pt-1)) + HuffDecode(dctbl2); - *dest++ = p3 = (1<<(frame.prec-Pt-1)) + HuffDecode(dctbl3); + *dest++ = p1 = (1 << (frame.prec - Pt - 1)) + HuffDecode(dctbl1); + *dest++ = p2 = (1 << (frame.prec - Pt - 1)) + HuffDecode(dctbl2); + *dest++ = p3 = (1 << (frame.prec - Pt - 1)) + HuffDecode(dctbl3); slice = 1; - guint pixInSlice = slice_width[0]-1; + guint pixInSlice = slice_width[0] - 1; - guint cw = (frame.w-skipX); + guint cw = (frame.w - skipX); guint x = 1; // Skip first pixels on first line. - for (guint y=0;y<(frame.h-skipY);y++) { + for (guint y = 0;y < (frame.h - skipY);y++) { for (; x < cw ; x++) { p1 += HuffDecode(dctbl1); *dest++ = (gushort)p1; @@ -658,9 +653,9 @@ if (0 == --pixInSlice) { // Next slice guint o = offset[slice++]; - dest = (gushort*)&draw[o&0x0fffffff]; // Adjust destination for next pixel - _ASSERTE((o&0x0fffffff)pitch*mRaw->dim.y); - _ASSERTE((o>>28) < slicesW.size()); + dest = (gushort*) & draw[o&0x0fffffff]; // Adjust destination for next pixel + _ASSERTE((o&0x0fffffff) < mRaw->pitch*mRaw->dim.y); + _ASSERTE((o >> 28) < slicesW.size()); pixInSlice = slice_width[o>>28]; } bits->checkPos(); @@ -694,18 +689,18 @@ HuffmanTable *dctbl4 = &huff[frame.compInfo[3].dcTblNo]; //Prepare slices (for CR2) - guint slices = (guint)slicesW.size()*(frame.h-skipY); + guint slices = (guint)slicesW.size() * (frame.h - skipY); offset = new guint[slices+1]; guint t_y = 0; guint t_x = 0; guint t_s = 0; guint slice = 0; - for (slice = 0; slice< slices; slice++) { - offset[slice] = ((t_x+offX)*mRaw->bpp+((offY+t_y)*mRaw->pitch)) | (t_s<<28); - _ASSERTE((offset[slice]&0x0fffffff)pitch*mRaw->dim.y); + for (slice = 0; slice < slices; slice++) { + offset[slice] = ((t_x + offX) * mRaw->bpp + ((offY + t_y) * mRaw->pitch)) | (t_s << 28); + _ASSERTE((offset[slice]&0x0fffffff) < mRaw->pitch*mRaw->dim.y); t_y++; - if (t_y == (frame.h-skipY)) { + if (t_y == (frame.h - skipY)) { t_y = 0; t_x += slicesW[t_s++]; } @@ -726,20 +721,20 @@ gint p2; gint p3; gint p4; - gushort *dest = (gushort*)&draw[offset[0]&0x0fffffff]; + gushort *dest = (gushort*) & draw[offset[0] & 0x0fffffff]; gushort *predict = dest; - *dest++ = p1 = (1<<(frame.prec-Pt-1)) + HuffDecode(dctbl1); - *dest++ = p2 = (1<<(frame.prec-Pt-1)) + HuffDecode(dctbl2); - *dest++ = p3 = (1<<(frame.prec-Pt-1)) + HuffDecode(dctbl3); - *dest++ = p4 = (1<<(frame.prec-Pt-1)) + HuffDecode(dctbl4); + *dest++ = p1 = (1 << (frame.prec - Pt - 1)) + HuffDecode(dctbl1); + *dest++ = p2 = (1 << (frame.prec - Pt - 1)) + HuffDecode(dctbl2); + *dest++ = p3 = (1 << (frame.prec - Pt - 1)) + HuffDecode(dctbl3); + *dest++ = p4 = (1 << (frame.prec - Pt - 1)) + HuffDecode(dctbl4); slice = 1; - guint pixInSlice = slice_width[0]-1; + guint pixInSlice = slice_width[0] - 1; - guint cw = (frame.w-skipX); + guint cw = (frame.w - skipX); guint x = 1; // Skip first pixels on first line. - for (guint y=0;y<(frame.h-skipY);y++) { + for (guint y = 0;y < (frame.h - skipY);y++) { for (; x < cw ; x++) { p1 += HuffDecode(dctbl1); *dest++ = (gushort)p1; @@ -755,8 +750,8 @@ if (0 == --pixInSlice) { // Next slice guint o = offset[slice++]; - dest = (gushort*)&draw[o&0x0fffffff]; // Adjust destination for next pixel - _ASSERTE((o&0x0fffffff)pitch*mRaw->dim.y); + dest = (gushort*) & draw[o&0x0fffffff]; // Adjust destination for next pixel + _ASSERTE((o&0x0fffffff) < mRaw->pitch*mRaw->dim.y); pixInSlice = slice_width[o>>28]; } bits->checkPos(); @@ -766,7 +761,7 @@ HuffDecode(dctbl1); HuffDecode(dctbl2); HuffDecode(dctbl3); - HuffDecode(dctbl4); + HuffDecode(dctbl4); } } p1 = predict[0]; // Predictors for next row Modified: RawSpeed/NefDecoder.cpp =================================================================== --- RawSpeed/NefDecoder.cpp 2009-09-28 21:07:13 UTC (rev 153) +++ RawSpeed/NefDecoder.cpp 2009-09-29 18:26:02 UTC (rev 154) @@ -1,6 +1,6 @@ #include "StdAfx.h" #include "NefDecoder.h" -/* +/* RawSpeed - RAW file decoder. Copyright (C) 2009 Klaus Post @@ -22,18 +22,15 @@ http://www.klauspost.com */ -NefDecoder::NefDecoder(TiffIFD *rootIFD, FileMap* file ) : -RawDecoder(file), mRootIFD(rootIFD) -{ +NefDecoder::NefDecoder(TiffIFD *rootIFD, FileMap* file) : + RawDecoder(file), mRootIFD(rootIFD) { } -NefDecoder::~NefDecoder(void) -{ +NefDecoder::~NefDecoder(void) { } -RawImage NefDecoder::decodeRaw() -{ +RawImage NefDecoder::decodeRaw() { vector data = mRootIFD->getIFDsWithTag(CFAPATTERN); if (data.empty()) @@ -57,18 +54,18 @@ } } - if (compression==1) { + if (compression == 1) { DecodeUncompressed(); return mRaw; } if (offsets->count != 1) { - ThrowRDE("NEF Decoder: Multiple Strips found: %u",offsets->count); + ThrowRDE("NEF Decoder: Multiple Strips found: %u", offsets->count); } if (counts->count != offsets->count) { - ThrowRDE("NEF Decoder: Byte count number does not match strip size: count:%u, strips:%u ",counts->count, offsets->count); + ThrowRDE("NEF Decoder: Byte count number does not match strip size: count:%u, strips:%u ", counts->count, offsets->count); } - if (!mFile->isValid(offsets->getInt()+counts->getInt())) + if (!mFile->isValid(offsets->getInt() + counts->getInt())) ThrowRDE("NEF Decoder: Invalid strip byte count. File probably truncated."); @@ -90,10 +87,10 @@ TiffIFD* exif = data[0]; TiffEntry *makernoteEntry = exif->getEntry(MAKERNOTE); const guchar* makernote = makernoteEntry->getData(); - FileMap makermap((guchar*)&makernote[10], makernoteEntry->count-10); + FileMap makermap((guchar*)&makernote[10], makernoteEntry->count - 10); TiffParser makertiff(&makermap); makertiff.parseData(); - + data = makertiff.RootIFD()->getIFDsWithTag((TiffTag)0x8c); if (data.empty()) @@ -105,13 +102,13 @@ } catch (TiffParserException) { meta = data[0]->getEntry((TiffTag)0x8c); // Fall back } - + ByteStream metadata(meta->getData(), meta->count); try { - NikonDecompressor decompressor(mFile,mRaw); - decompressor.DecompressNikon(metadata, width, height, bitPerPixel,offsets->getInt(),counts->getInt()); + NikonDecompressor decompressor(mFile, mRaw); + decompressor.DecompressNikon(metadata, width, height, bitPerPixel, offsets->getInt(), counts->getInt()); } catch (IOException e) { - // Let's ignore it, it may have delivered somewhat useful data. + // Let's ignore it, it may have delivered somewhat useful data. } return mRaw; @@ -122,15 +119,14 @@ are only needed for the D100, thanks to a bug in some cameras that tags all images as "compressed". */ -gboolean NefDecoder::D100IsCompressed(guint offset) -{ +gboolean NefDecoder::D100IsCompressed(guint offset) { const guchar *test = mFile->getData(offset); gint i; - for (i=15; i < 256; i+=16) + for (i = 15; i < 256; i += 16) if (test[i]) return true; return false; -} +} void NefDecoder::DecodeUncompressed() { vector data = mRootIFD->getIFDsWithTag(CFAPATTERN); @@ -146,18 +142,18 @@ vector slices; guint offY = 0; - for (guint s = 0; sheight) - slice.h = height-offY; + if (offY + yPerSlice > height) + slice.h = height - offY; else slice.h = yPerSlice; - offY +=yPerSlice; + offY += yPerSlice; - if (mFile->isValid(slice.offset+slice.count)) // Only decode if size is valid + if (mFile->isValid(slice.offset + slice.count)) // Only decode if size is valid slices.push_back(slice); } @@ -168,12 +164,12 @@ bitPerPixel = 16; // D3 offY = 0; - for (guint i = 0; i< slices.size(); i++) { + for (guint i = 0; i < slices.size(); i++) { NefSlice slice = slices[i]; - ByteStream in(mFile->getData(slice.offset),slice.count); - iPoint2D size(width,slice.h); - iPoint2D pos(0,offY); - readUncompressedRaw(in,size,pos,width*bitPerPixel/8,bitPerPixel,true); + ByteStream in(mFile->getData(slice.offset), slice.count); + iPoint2D size(width, slice.h); + iPoint2D pos(0, offY); + readUncompressedRaw(in, size, pos, width*bitPerPixel / 8, bitPerPixel, true); offY += slice.h; } } @@ -181,37 +177,37 @@ void NefDecoder::DecodeD100Uncompressed() { ThrowRDE("NEF DEcoder: D100 uncompressed not supported"); -/* - TiffIFD* raw = mRootIFD->getIFDsWithTag(CFAPATTERN)[0]; + /* + TiffIFD* raw = mRootIFD->getIFDsWithTag(CFAPATTERN)[0]; - guint nslices = raw->getEntry(STRIPOFFSETS)->count; - guint offset = raw->getEntry(STRIPOFFSETS)->getInt(); - guint count = raw->getEntry(STRIPBYTECOUNTS)->getInt(); - if (!mFile->isValid(offset+count)) - ThrowRDE("DecodeD100Uncompressed: Truncated file"); + guint nslices = raw->getEntry(STRIPOFFSETS)->count; + guint offset = raw->getEntry(STRIPOFFSETS)->getInt(); + guint count = raw->getEntry(STRIPBYTECOUNTS)->getInt(); + if (!mFile->isValid(offset+count)) + ThrowRDE("DecodeD100Uncompressed: Truncated file"); - const guchar *in = mFile->getData(offset); + const guchar *in = mFile->getData(offset); - guint w = raw->getEntry(IMAGEWIDTH)->getInt(); - guint h = raw->getEntry(IMAGELENGTH)->getInt(); + guint w = raw->getEntry(IMAGEWIDTH)->getInt(); + guint h = raw->getEntry(IMAGELENGTH)->getInt(); - mRaw->dim = iPoint2D(w, h); - mRaw->bpp = 2; - mRaw->createData(); + mRaw->dim = iPoint2D(w, h); + mRaw->bpp = 2; + mRaw->createData(); - guchar* data = mRaw->getData(); - guint outPitch = mRaw->pitch; + guchar* data = mRaw->getData(); + guint outPitch = mRaw->pitch; - BitPumpMSB bits(mFile->getData(offset),count); - for (guint y = 0; y < h; y++) { - gushort* dest = (gushort*)&data[y*outPitch]; - for(guint x =0 ; x < w; x++) { - guint b = bits.getBits(12); - dest[x] = b; - if ((x % 10) == 9) - bits.skipBits(8); - } - }*/ + BitPumpMSB bits(mFile->getData(offset),count); + for (guint y = 0; y < h; y++) { + gushort* dest = (gushort*)&data[y*outPitch]; + for(guint x =0 ; x < w; x++) { + guint b = bits.getBits(12); + dest[x] = b; + if ((x % 10) == 9) + bits.skipBits(8); + } + }*/ } void NefDecoder::checkSupport(CameraMetaData *meta) { @@ -223,8 +219,7 @@ this->checkCameraSupported(meta, make, model, ""); } -void NefDecoder::decodeMetaData(CameraMetaData *meta) -{ +void NefDecoder::decodeMetaData(CameraMetaData *meta) { mRaw->cfa.setCFA(CFA_RED, CFA_GREEN, CFA_GREEN2, CFA_BLUE); vector data = mRootIFD->getIFDsWithTag(MODEL); @@ -238,11 +233,11 @@ string make = data[0]->getEntry(MAKE)->getString(); string model = data[0]->getEntry(MODEL)->getString(); - setMetaData(meta, make, model,""); + setMetaData(meta, make, model, ""); - if (white!=65536) + if (white != 65536) mRaw->whitePoint = white; - if (black>=0) + if (black >= 0) mRaw->blackLevel = black; -} \ No newline at end of file +} Modified: RawSpeed/NikonDecompressor.cpp =================================================================== --- RawSpeed/NikonDecompressor.cpp 2009-09-28 21:07:13 UTC (rev 153) +++ RawSpeed/NikonDecompressor.cpp 2009-09-29 18:26:02 UTC (rev 154) @@ -1,6 +1,6 @@ #include "StdAfx.h" #include "NikonDecompressor.h" -/* +/* RawSpeed - RAW file decoder. Copyright (C) 2009 Klaus Post @@ -22,17 +22,15 @@ http://www.klauspost.com */ -NikonDecompressor::NikonDecompressor(FileMap* file, RawImage img ) : -LJpegDecompressor(file,img) -{ +NikonDecompressor::NikonDecompressor(FileMap* file, RawImage img) : + LJpegDecompressor(file, img) { for (guint i = 0; i < 0xffff ; i++) { curve[i] = i; } bits = 0; } -NikonDecompressor::~NikonDecompressor(void) -{ +NikonDecompressor::~NikonDecompressor(void) { if (bits) delete(bits); bits = 0; @@ -43,17 +41,17 @@ guint acc = 0; for (guint i = 0; i < 16 ;i++) { dctbl1->bits[i+1] = nikon_tree[huffSelect][i]; - acc+=dctbl1->bits[i+1]; + acc += dctbl1->bits[i+1]; } dctbl1->bits[0] = 0; - for(guint i =0 ; ihuffval[i] = nikon_tree[huffSelect][i+16]; } createHuffmanTable(dctbl1); } -void NikonDecompressor::DecompressNikon( ByteStream &metadata, guint w, guint h, guint bitsPS, guint offset, guint size ) { +void NikonDecompressor::DecompressNikon(ByteStream &metadata, guint w, guint h, guint bitsPS, guint offset, guint size) { guint v0 = metadata.getByte(); guint v1 = metadata.getByte(); guint huffSelect = 0; @@ -62,7 +60,7 @@ gint pUp2[2]; mUseBigtable = true; - _RPT2(0, "Nef version v0:%u, v1:%u\n",v0, v1); + _RPT2(0, "Nef version v0:%u, v1:%u\n", v0, v1); if (v0 == 73 || v1 == 88) metadata.skipBytes(2110); @@ -79,13 +77,13 @@ guint step = 0; guint csize = metadata.getShort(); if (csize > 1) - step = _max / (csize-1); + step = _max / (csize - 1); if (v0 == 68 && v1 == 32 && step > 0) { - for (guint i=0; i < csize; i++) + for (guint i = 0; i < csize; i++) curve[i*step] = metadata.getShort(); - for (guint i=0; i < _max; i++) - curve[i] = ( curve[i-i%step]*(step-i%step) + - curve[i-i%step+step]*(i%step) ) / step; + for (guint i = 0; i < _max; i++) + curve[i] = (curve[i-i%step] * (step - i % step) + + curve[i-i%step+step] * (i % step)) / step; metadata.setAbsoluteOffset(562); split = metadata.getShort(); } else if (v0 != 70 && csize <= 0x4001) { @@ -94,7 +92,7 @@ } _max = csize; } - while (curve[_max-2] == curve[_max-1]) _max--; + while (curve[_max-2] == curve[_max-1]) _max--; initTable(huffSelect); mRaw->whitePoint = curve[_max-1]; @@ -108,24 +106,24 @@ gint pLeft1 = 0; gint pLeft2 = 0; - guint cw = w/2; + guint cw = w / 2; - for (y=0; y < h; y++) { + for (y = 0; y < h; y++) { if (split && y == split) { - initTable(huffSelect+1); + initTable(huffSelect + 1); } - dest = (guint*)&draw[y*pitch]; // Adjust destination + dest = (guint*) & draw[y*pitch]; // Adjust destination pUp1[y&1] += HuffDecodeNikon(); pUp2[y&1] += HuffDecodeNikon(); pLeft1 = pUp1[y&1]; pLeft2 = pUp2[y&1]; - dest[0] = curve[pLeft1] | (curve[pLeft2]<<16); - for (x=1; x < cw; x++) { + dest[0] = curve[pLeft1] | (curve[pLeft2] << 16); + for (x = 1; x < cw; x++) { pLeft1 += HuffDecodeNikon(); pLeft2 += HuffDecodeNikon(); if (pLeft1 < 0 || pLeft1 > 65535 || pLeft2 < 0 || pLeft2 > 65535) ThrowRDE("DecompressNikon: Image value out of range. Corrupt image."); - dest[x] = curve[pLeft1] | (curve[pLeft2]<<16); + dest[x] = curve[pLeft1] | (curve[pLeft2] << 16); } } } @@ -135,22 +133,21 @@ * * HuffDecode -- * -* Taken from Figure F.16: extract next coded symbol from -* input stream. This should becode a macro. +* Taken from Figure F.16: extract next coded symbol from +* input stream. This should becode a macro. * * Results: -* Next coded symbol +* Next coded symbol * * Side effects: -* Bitstream is parsed. +* Bitstream is parsed. * *-------------------------------------------------------------- */ -gint NikonDecompressor::HuffDecodeNikon() -{ +gint NikonDecompressor::HuffDecodeNikon() { gint rv; gint l, temp; - gint code,val ; + gint code, val ; HuffmanTable *dctbl1 = &huff[0]; @@ -159,16 +156,16 @@ val = dctbl1->bigTable[code]; if ((val&0xff) != 0xff) { bits->skipBits(val&0xff); - return val>>8; + return val >> 8; } rv = 0; code = bits->peekByteNoFill(); val = dctbl1->numbits[code]; - l = val&15; + l = val & 15; if (l) { bits->skipBits(l); - rv=val>>4; + rv = val >> 4; } else { bits->skipBits(8); l = 8; @@ -177,26 +174,26 @@ code = (code << 1) | temp; l++; } - + if (l > 16) { - ThrowRDE("Corrupt JPEG data: bad Huffman code:%u\n",l); + ThrowRDE("Corrupt JPEG data: bad Huffman code:%u\n", l); } else { rv = dctbl1->huffval[dctbl1->valptr[l] + - ((int)(code - dctbl1->mincode[l]))]; + ((int)(code - dctbl1->mincode[l]))]; } } if (rv == 16) return -32768; - + /* * Section F.2.2.1: decode the difference and * Figure F.12: extend sign bit */ guint len = rv & 15; guint shl = rv >> 4; - gint diff = ((bits->getBits(len-shl) << 1) + 1) << shl >> 1; - if ((diff & (1 << (len-1))) == 0) + gint diff = ((bits->getBits(len - shl) << 1) + 1) << shl >> 1; + if ((diff & (1 << (len - 1))) == 0) diff -= (1 << len) - !shl; return diff; } Modified: RawSpeed/OrfDecoder.cpp =================================================================== --- RawSpeed/OrfDecoder.cpp 2009-09-28 21:07:13 UTC (rev 153) +++ RawSpeed/OrfDecoder.cpp 2009-09-29 18:26:02 UTC (rev 154) @@ -4,7 +4,7 @@ #ifdef __unix__ #include #endif -/* +/* RawSpeed - RAW file decoder. Copyright (C) 2009 Klaus Post @@ -27,16 +27,13 @@ */ OrfDecoder::OrfDecoder(TiffIFD *rootIFD, FileMap* file): -RawDecoder(file), mRootIFD(rootIFD) -{ + RawDecoder(file), mRootIFD(rootIFD) { } -OrfDecoder::~OrfDecoder(void) -{ +OrfDecoder::~OrfDecoder(void) { } -RawImage OrfDecoder::decodeRaw() -{ +RawImage OrfDecoder::decodeRaw() { vector data = mRootIFD->getIFDsWithTag(STRIPOFFSETS); if (data.empty()) @@ -52,15 +49,15 @@ TiffEntry *counts = raw->getEntry(STRIPBYTECOUNTS); if (offsets->count != 1) { - ThrowRDE("ORF Decoder: Multiple Strips found: %u",offsets->count); + ThrowRDE("ORF Decoder: Multiple Strips found: %u", offsets->count); } if (counts->count != offsets->count) { - ThrowRDE("ORF Decoder: Byte count number does not match strip size: count:%u, strips:%u ",counts->count, offsets->count); + ThrowRDE("ORF Decoder: Byte count number does not match strip size: count:%u, strips:%u ", counts->count, offsets->count); } guint width = raw->getEntry(IMAGEWIDTH)->getInt(); guint height = raw->getEntry(IMAGELENGTH)->getInt(); - if (!mFile->isValid(offsets->getInt()+counts->getInt())) + if (!mFile->isValid(offsets->getInt() + counts->getInt())) ThrowRDE("ORF Decoder: Truncated file"); mRaw->dim = iPoint2D(width, height); @@ -74,7 +71,7 @@ TiffIFD* exif = data[0]; TiffEntry *makernoteEntry = exif->getEntry(MAKERNOTE); const guchar* makernote = makernoteEntry->getData(); - FileMap makermap((guchar*)&makernote[8], makernoteEntry->count-8); + FileMap makermap((guchar*)&makernote[8], makernoteEntry->count - 8); TiffParserOlympus makertiff(&makermap); makertiff.parseData(); @@ -86,8 +83,8 @@ if (oly->type == TIFF_UNDEFINED) ThrowRDE("ORF Decoder: Unsupported compression"); - // We add 3 bytes slack, since the bitpump might be a few bytes ahead. - ByteStream s(mFile->getData(offsets->getInt()),counts->getInt()+3); + // We add 3 bytes slack, since the bitpump might be a few bytes ahead. + ByteStream s(mFile->getData(offsets->getInt()), counts->getInt() + 3); try { decodeCompressed(s, width, height); @@ -98,8 +95,7 @@ return mRaw; } -void OrfDecoder::decodeCompressed(ByteStream& s,guint w, guint h) -{ +void OrfDecoder::decodeCompressed(ByteStream& s, guint w, guint h) { int nbits, sign, low, high, i, wo, n, nw; int acarry[2][3], *carry, pred, diff; @@ -109,25 +105,25 @@ s.skipBytes(7); BitPumpMSB bits(&s); - for (guint y=0; y < h; y++) { - memset (acarry, 0, sizeof acarry); - gushort* dest = (gushort*)&data[y*pitch]; - for (guint x=0; x < w; x++) { + for (guint y = 0; y < h; y++) { + memset(acarry, 0, sizeof acarry); + gushort* dest = (gushort*) & data[y*pitch]; + for (guint x = 0; x < w; x++) { bits.checkPos(); bits.fill(); carry = acarry[x & 1]; i = 2 * (carry[2] < 3); - for (nbits=2+i; (gushort) carry[0] >> (nbits+i); nbits++); + for (nbits = 2 + i; (gushort) carry[0] >> (nbits + i); nbits++); sign = bits.getBitNoFill() * -1; low = bits.getBitsNoFill(2); for (high = 0; high < 12; high++) if (bits.getBitNoFill()) break; if (high == 12) - high = bits.getBits(16-nbits) >> 1; + high = bits.getBits(16 - nbits) >> 1; carry[0] = (high << nbits) | bits.getBits(nbits); diff = (carry[0] ^ sign) + carry[1]; - carry[1] = (diff*3 + carry[1]) >> 5; - carry[2] = carry[0] > 16 ? 0 : carry[2]+1; + carry[1] = (diff * 3 + carry[1]) >> 5; + carry[2] = carry[0] > 16 ? 0 : carry[2] + 1; if (y < 2 && x < 2) pred = 0; else if (y < 2) pred = dest[x-2]; else if (x < 2) pred = dest[-pitch+((gint)x)]; // Pitch is in bytes, and dest is in short, so we skip two lines @@ -136,13 +132,13 @@ n = dest[-pitch+((gint)x)]; nw = dest[-pitch+((gint)x)-2]; if ((wo < nw && nw < n) || (n < nw && nw < wo)) { - if (abs(wo-nw) > 32 || abs(n-nw) > 32) + if (abs(wo - nw) > 32 || abs(n - nw) > 32) pred = wo + n - nw; else pred = (wo + n) >> 1; - } else pred = abs(wo-nw) > abs(n-nw) ? wo : n; + } else pred = abs(wo - nw) > abs(n - nw) ? wo : n; } - dest[x] = pred + ((diff << 2) | low); - _ASSERTE(0 == dest[x]>>12) ; + dest[x] = pred + ((diff << 2) | low); + _ASSERTE(0 == dest[x] >> 12) ; } } } @@ -156,8 +152,7 @@ this->checkCameraSupported(meta, make, model, ""); } -void OrfDecoder::decodeMetaData(CameraMetaData *meta) -{ +void OrfDecoder::decodeMetaData(CameraMetaData *meta) { mRaw->cfa.setCFA(CFA_RED, CFA_GREEN, CFA_GREEN2, CFA_BLUE); vector data = mRootIFD->getIFDsWithTag(MODEL); @@ -167,6 +162,6 @@ string make = data[0]->getEntry(MAKE)->getString(); string model = data[0]->getEntry(MODEL)->getString(); - setMetaData(meta, make, model,""); + setMetaData(meta, make, model, ""); } Modified: RawSpeed/PefDecoder.cpp =================================================================== --- RawSpeed/PefDecoder.cpp 2009-09-28 21:07:13 UTC (rev 153) +++ RawSpeed/PefDecoder.cpp 2009-09-29 18:26:02 UTC (rev 154) @@ -1,6 +1,6 @@ #include "StdAfx.h" #include "PefDecoder.h" -/* +/* RawSpeed - RAW file decoder. Copyright (C) 2009 Klaus Post @@ -23,16 +23,13 @@ */ PefDecoder::PefDecoder(TiffIFD *rootIFD, FileMap* file) : -RawDecoder(file), mRootIFD(rootIFD) -{ + RawDecoder(file), mRootIFD(rootIFD) { } -PefDecoder::~PefDecoder(void) -{ +PefDecoder::~PefDecoder(void) { } -RawImage PefDecoder::decodeRaw() -{ +RawImage PefDecoder::decodeRaw() { vector data = mRootIFD->getIFDsWithTag(STRIPOFFSETS); if (data.empty()) @@ -48,12 +45,12 @@ TiffEntry *counts = raw->getEntry(STRIPBYTECOUNTS); if (offsets->count != 1) { - ThrowRDE("PEF Decoder: Multiple Strips found: %u",offsets->count); + ThrowRDE("PEF Decoder: Multiple Strips found: %u", offsets->count); } if (counts->count != offsets->count) { - ThrowRDE("PEF Decoder: Byte count number does not match strip size: count:%u, strips:%u ",counts->count, offsets->count); + ThrowRDE("PEF Decoder: Byte count number does not match strip size: count:%u, strips:%u ", counts->count, offsets->count); } - if (!mFile->isValid(offsets->getInt()+counts->getInt())) + if (!mFile->isValid(offsets->getInt() + counts->getInt())) ThrowRDE("PEF Decoder: Truncated file."); guint width = raw->getEntry(IMAGEWIDTH)->getInt(); @@ -63,7 +60,7 @@ mRaw->bpp = 2; mRaw->createData(); try { - PentaxDecompressor l(mFile,mRaw); + PentaxDecompressor l(mFile, mRaw); l.decodePentax(offsets->getInt(), counts->getInt()); } catch (IOException e) { // Let's ignore it, it may have delivered somewhat useful data. @@ -82,8 +79,7 @@ this->checkCameraSupported(meta, make, model, ""); } -void PefDecoder::decodeMetaData(CameraMetaData *meta) -{ +void PefDecoder::decodeMetaData(CameraMetaData *meta) { mRaw->cfa.setCFA(CFA_RED, CFA_GREEN, CFA_GREEN2, CFA_BLUE); vector data = mRootIFD->getIFDsWithTag(MODEL); @@ -93,19 +89,19 @@ string make = data[0]->getEntry(MAKE)->getString(); string model = data[0]->getEntry(MODEL)->getString(); - setMetaData(meta, make, model,""); + setMetaData(meta, make, model, ""); -/* vector data = mRootIFD->getIFDsWithTag(MODEL); + /* vector data = mRootIFD->getIFDsWithTag(MODEL); - if (data.empty()) - ThrowRDE("PEF Decoder: Model name found"); + if (data.empty()) + ThrowRDE("PEF Decoder: Model name found"); - string model(data[0]->getEntry(MODEL)->getString()); - //printf("Model:\"%s\"\n",model.c_str()); + string model(data[0]->getEntry(MODEL)->getString()); + //printf("Model:\"%s\"\n",model.c_str()); - if (!model.compare("PENTAX K20D ")) - { - mRaw->cfa.setCFA(CFA_BLUE, CFA_GREEN, CFA_GREEN2, CFA_RED); - } -*/ -} \ No newline at end of file + if (!model.compare("PENTAX K20D ")) + { + mRaw->cfa.setCFA(CFA_BLUE, CFA_GREEN, CFA_GREEN2, CFA_RED); + } + */ +} Modified: RawSpeed/PentaxDecompressor.cpp =================================================================== --- RawSpeed/PentaxDecompressor.cpp 2009-09-28 21:07:13 UTC (rev 153) +++ RawSpeed/PentaxDecompressor.cpp 2009-09-29 18:26:02 UTC (rev 154) @@ -1,6 +1,6 @@ #include "StdAfx.h" #include "PentaxDecompressor.h" -/* +/* RawSpeed - RAW file decoder. Copyright (C) 2009 Klaus Post @@ -22,35 +22,33 @@ http://www.klauspost.com */ -PentaxDecompressor::PentaxDecompressor(FileMap* file, RawImage img ) : -LJpegDecompressor(file,img) -{ +PentaxDecompressor::PentaxDecompressor(FileMap* file, RawImage img) : + LJpegDecompressor(file, img) { pentaxBits = 0; } -PentaxDecompressor::~PentaxDecompressor(void) -{ +PentaxDecompressor::~PentaxDecompressor(void) { if (pentaxBits) delete(pentaxBits); pentaxBits = 0; } -void PentaxDecompressor::decodePentax( guint offset, guint size ) -{ +void PentaxDecompressor::decodePentax(guint offset, guint size) { // Prepare huffmann table 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 = 16 entries - static const guchar pentax_tree[] = { 0,2,3,1,1,1,1,1,1,2,0,0,0,0,0,0, - 3,4,2,5,1,6,0,7,8,9,10,11,12 }; + static const guchar pentax_tree[] = { 0, 2, 3, 1, 1, 1, 1, 1, 1, 2, 0, 0, 0, 0, 0, 0, + 3, 4, 2, 5, 1, 6, 0, 7, 8, 9, 10, 11, 12 + }; // 0 1 2 3 4 5 6 7 8 9 0 1 2 = 13 entries HuffmanTable *dctbl1 = &huff[0]; guint acc = 0; for (guint i = 0; i < 16 ;i++) { dctbl1->bits[i+1] = pentax_tree[i]; - acc+=dctbl1->bits[i+1]; + acc += dctbl1->bits[i+1]; } dctbl1->bits[0] = 0; - for(guint i =0 ; ihuffval[i] = pentax_tree[i+16]; } mUseBigtable = true; @@ -61,25 +59,25 @@ gushort *dest; guint w = mRaw->dim.x; guint h = mRaw->dim.y; - gint pUp1[2] = {0,0}; - gint pUp2[2] = {0,0}; + gint pUp1[2] = {0, 0}; + gint pUp2[2] = {0, 0}; gint pLeft1 = 0; gint pLeft2 = 0; - for (guint y=0;ycheckPos(); - dest = (gushort*)&draw[y*mRaw->pitch]; // Adjust destination + dest = (gushort*) & draw[y*mRaw->pitch]; // Adjust destination pUp1[y&1] += HuffDecodePentax(); pUp2[y&1] += HuffDecodePentax(); dest[0] = pLeft1 = pUp1[y&1]; dest[1] = pLeft2 = pUp2[y&1]; - for (guint x = 2; x < w ; x+=2) { + for (guint x = 2; x < w ; x += 2) { pLeft1 += HuffDecodePentax(); pLeft2 += HuffDecodePentax(); dest[x] = pLeft1; dest[x+1] = pLeft2; - _ASSERTE(pLeft1 >= 0 && pLeft1 <= (65536>>3)); - _ASSERTE(pLeft2 >= 0 && pLeft2 <= (65536>>3)); + _ASSERTE(pLeft1 >= 0 && pLeft1 <= (65536 >> 3)); + _ASSERTE(pLeft2 >= 0 && pLeft2 <= (65536 >> 3)); } } } @@ -89,22 +87,21 @@ * * HuffDecode -- * -* Taken from Figure F.16: extract next coded symbol from -* input stream. This should becode a macro. +* Taken from Figure F.16: extract next coded symbol from +* input stream. This should becode a macro. * * Results: -* Next coded symbol +* Next coded symbol * * Side effects: -* Bitstream is parsed. +* Bitstream is parsed. * *-------------------------------------------------------------- */ -gint PentaxDecompressor::HuffDecodePentax() -{ +gint PentaxDecompressor::HuffDecodePentax() { gint rv; gint l, temp; - gint code,val; + gint code, val; HuffmanTable *dctbl1 = &huff[0]; /* @@ -117,16 +114,16 @@ val = dctbl1->bigTable[code]; if ((val&0xff) != 0xff) { pentaxBits->skipBits(val&0xff); - return val>>8; + return val >> 8; } rv = 0; code = pentaxBits->peekByteNoFill(); val = dctbl1->numbits[code]; - l = val&15; + l = val & 15; if (l) { pentaxBits->skipBits(l); - rv=val>>4; + rv = val >> 4; } else { pentaxBits->skipBits(8); l = 8; @@ -141,10 +138,10 @@ */ if (l > 12) { - ThrowRDE("Corrupt JPEG data: bad Huffman code:%u\n",l); + ThrowRDE("Corrupt JPEG data: bad Huffman code:%u\n", l); } else { rv = dctbl1->huffval[dctbl1->valptr[l] + - ((int)(code - dctbl1->mincode[l]))]; + ((int)(code - dctbl1->mincode[l]))]; } } @@ -158,10 +155,10 @@ if (rv) { gint x = pentaxBits->getBitsNoFill(rv); - if ((x & (1 << (rv-1))) == 0) + if ((x & (1 << (rv - 1))) == 0) x -= (1 << rv) - 1; return x; - } + } return 0; } Modified: RawSpeed/PlanarRawImage.cpp =================================================================== --- RawSpeed/PlanarRawImage.cpp 2009-09-28 21:07:13 UTC (rev 153) +++ RawSpeed/PlanarRawImage.cpp 2009-09-29 18:26:02 UTC (rev 154) @@ -1,6 +1,6 @@ #include "StdAfx.h" #include "PlanarRawImage.h" -/* +/* RawSpeed - RAW file decoder. Copyright (C) 2009 Klaus Post @@ -22,10 +22,8 @@ http://www.klauspost.com */ -PlanarRawImage::PlanarRawImage(void) -{ +PlanarRawImage::PlanarRawImage(void) { } -PlanarRawImage::~PlanarRawImage(void) -{ +PlanarRawImage::~PlanarRawImage(void) { } Modified: RawSpeed/RawDecoder.cpp =================================================================== --- RawSpeed/RawDecoder.cpp 2009-09-28 21:07:13 UTC (rev 153) +++ RawSpeed/RawDecoder.cpp 2009-09-29 18:26:02 UTC (rev 154) @@ -1,6 +1,6 @@ #include "StdAfx.h" #include "RawDecoder.h" -/* +/* RawSpeed - RAW file decoder. Copyright (C) 2009 Klaus Post @@ -22,12 +22,10 @@ http://www.klauspost.com */ -RawDecoder::RawDecoder(FileMap* file) : mFile(file), mRaw(RawImage::create()) -{ +RawDecoder::RawDecoder(FileMap* file) : mFile(file), mRaw(RawImage::create()) { } -RawDecoder::~RawDecoder(void) -{ +RawDecoder::~RawDecoder(void) { for (guint i = 0 ; i < errors.size(); i++) { free((void*)errors[i]); } @@ -41,27 +39,27 @@ guint h = size.y; guint cpp = mRaw->getCpp(); - if (input.getRemainSize()< (inputPitch*h) ) { + if (input.getRemainSize() < (inputPitch*h)) { h = input.getRemainSize() / inputPitch - 1; } - if (bitPerPixel>16) + if (bitPerPixel > 16) ThrowRDE("readUncompressedRaw: Unsupported bit depth"); - guint skipBits = inputPitch - w*bitPerPixel/8; // Skip per line - if (offset.y>mRaw->dim.y) + guint skipBits = inputPitch - w * bitPerPixel / 8; // Skip per line + if (offset.y > mRaw->dim.y) ThrowRDE("readUncompressedRaw: Invalid y offset"); - if (offset.x+size.x>mRaw->dim.x) + if (offset.x + size.x > mRaw->dim.x) ThrowRDE("readUncompressedRaw: Invalid x offset"); guint y = offset.y; - h = MIN(h+(guint)offset.y,(guint)mRaw->dim.y); + h = MIN(h + (guint)offset.y, (guint)mRaw->dim.y); if (MSBOrder) { BitPumpMSB bits(&input); w *= cpp; for (; y < h; y++) { - gushort* dest = (gushort*)&data[offset.x*sizeof(gushort)*cpp+y*outPitch]; - for(guint x =0 ; x < w; x++) { + gushort* dest = (gushort*) & data[offset.x*sizeof(gushort)*cpp+y*outPitch]; + for (guint x = 0 ; x < w; x++) { guint b = bits.getBits(bitPerPixel); dest[x] = b; } @@ -70,16 +68,16 @@ } else { - if (bitPerPixel==16) { - BitBlt(&data[offset.x*sizeof(gushort)*cpp+y*outPitch],outPitch, - input.getData(),inputPitch,w*mRaw->bpp,h-y); + if (bitPerPixel == 16) { + BitBlt(&data[offset.x*sizeof(gushort)*cpp+y*outPitch], outPitch, + input.getData(), inputPitch, w*mRaw->bpp, h - y); return; } BitPumpPlain bits(&input); w *= cpp; for (; y < h; y++) { - gushort* dest = (gushort*)&data[offset.x*sizeof(gushort)+y*outPitch]; - for(guint x =0 ; x < w; x++) { + gushort* dest = (gushort*) & data[offset.x*sizeof(gushort)+y*outPitch]; + for (guint x = 0 ; x < w; x++) { guint b = bits.getBits(bitPerPixel); dest[x] = b; } @@ -92,17 +90,17 @@ guchar* data = mRaw->getData(); guint pitch = mRaw->pitch; const guchar *in = input.getData(); - if (input.getRemainSize()< (w*h*3/2) ) { - h = input.getRemainSize() / (w*3/2) - 1; + if (input.getRemainSize() < (w*h*3 / 2)) { + h = input.getRemainSize() / (w * 3 / 2) - 1; } - for (guint y=0; y < h; y++) { - gushort* dest = (gushort*)&data[y*pitch]; - for(guint x =0 ; x < w; x+=2) { + for (guint y = 0; y < h; y++) { + gushort* dest = (gushort*) & data[y*pitch]; + for (guint x = 0 ; x < w; x += 2) { guint g1 = *in++; guint g2 = *in++; - dest[x] = g1 | ((g2&0xf)<<8); + dest[x] = g1 | ((g2 & 0xf) << 8); guint g3 = *in++; - dest[x+1] = (g2>>4) | (g3<<4); + dest[x+1] = (g2 >> 4) | (g3 << 4); } } } @@ -112,9 +110,9 @@ TrimSpaces(model); Camera* cam = meta->getCamera(make, model, mode); if (!cam) { - if (mode.length() == 0) + if (mode.length() == 0) printf("Unable to find camera in database: %s %s %s\n", make.c_str(), model.c_str(), mode.c_str()); - + return; // Assume true. } @@ -122,8 +120,7 @@ ThrowRDE("Camera not supported (explicit). Sorry."); } -void RawDecoder::setMetaData( CameraMetaData *meta, string make, string model, string mode ) -{ +void RawDecoder::setMetaData(CameraMetaData *meta, string make, string model, string mode) { TrimSpaces(make); TrimSpaces(model); Camera *cam = meta->getCamera(make, model, mode); @@ -134,13 +131,13 @@ iPoint2D new_size = cam->cropSize; - // If crop size is negative, use relative cropping - if (new_size.x <= 0) - new_size.x = mRaw->dim.x - cam->cropPos.x + new_size.x; - - if (new_size.y <= 0) - new_size.y = mRaw->dim.y - cam->cropPos.y + new_size.y; - + // If crop size is negative, use relative cropping + if (new_size.x <= 0) + new_size.x = mRaw->dim.x - cam->cropPos.x + new_size.x; + + if (new_size.y <= 0) + new_size.y = mRaw->dim.y - cam->cropPos.y + new_size.y; + mRaw->subFrame(cam->cropPos, new_size); mRaw->cfa = cam->cfa; @@ -154,19 +151,16 @@ mRaw->whitePoint = cam->white; } -void RawDecoder::TrimSpaces( string& str) -{ - // Trim Both leading and trailing spaces - size_t startpos = str.find_first_not_of(" \t"); // Find the first character position after excluding leading blank spaces - size_t endpos = str.find_last_not_of(" \t"); // Find the first character position from reverse af +void RawDecoder::TrimSpaces(string& str) { + // Trim Both leading and trailing spaces + size_t startpos = str.find_first_not_of(" \t"); // Find the first character position after excluding leading blank spaces + size_t endpos = str.find_last_not_of(" \t"); // Find the first character position from reverse af - // if all spaces or empty return an empty string - if(( string::npos == startpos ) || ( string::npos == endpos)) - { - str = ""; - } - else - str = str.substr( startpos, endpos-startpos+1 ); + // if all spaces or empty return an empty string + if ((string::npos == startpos) || (string::npos == endpos)) { + str = ""; + } else + str = str.substr(startpos, endpos - startpos + 1); } @@ -181,8 +175,7 @@ return 0; } -void RawDecoder::startThreads() -{ +void RawDecoder::startThreads() { guint threads = rs_get_number_of_processor_cores(); int y_offset = 0; int y_per_thread = (mRaw->dim.y + threads - 1) / threads; @@ -194,8 +187,7 @@ pthread_attr_init(&attr); pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE); - for (guint i = 0; i < threads; i++) - { + for (guint i = 0; i < threads; i++) { t[i].start_y = y_offset; t[i].end_y = MIN(y_offset + y_per_thread, mRaw->dim.y); t[i].parent = this; @@ -204,7 +196,7 @@ } void *status; - for(guint i = 0; i < threads; i++){ + for (guint i = 0; i < threads; i++) { pthread_join(t[i].threadid, &status); if (t[i].error) { errors.push_back(t[i].error); @@ -212,8 +204,7 @@ } } -void RawDecoder::decodeThreaded(RawDecoderThread * t) -{ +void RawDecoder::decodeThreaded(RawDecoderThread * t) { ThrowRDE("Internal Error: This class does not support threaded decoding"); } Modified: RawSpeed/RawDecoderException.cpp =================================================================== --- RawSpeed/RawDecoderException.cpp 2009-09-28 21:07:13 UTC (rev 153) +++ RawSpeed/RawDecoderException.cpp 2009-09-29 18:26:02 UTC (rev 154) @@ -4,7 +4,7 @@ #include #define vsprintf_s(...) vsnprintf(__VA_ARGS__) #endif -/* +/* RawSpeed - RAW file decoder. Copyright (C) 2009 Klaus Post @@ -34,6 +34,6 @@ char buf[8192]; vsprintf_s(buf, 8192, fmt, val); va_end(val); - _RPT1(0, "EXCEPTION: %s\n",buf); + _RPT1(0, "EXCEPTION: %s\n", buf); throw RawDecoderException(buf); } Modified: RawSpeed/RawImage.cpp =================================================================== --- RawSpeed/RawImage.cpp 2009-09-28 21:07:13 UTC (rev 153) +++ RawSpeed/RawImage.cpp 2009-09-29 18:26:02 UTC (rev 154) @@ -24,31 +24,28 @@ */ RawImageData::RawImageData(void): -dim(0,0), bpp(0), isCFA(true), -blackLevel(-1), whitePoint(65536), -dataRefCount(0), data(0), cpp(1) -{ + dim(0, 0), bpp(0), isCFA(true), + blackLevel(-1), whitePoint(65536), + dataRefCount(0), data(0), cpp(1) { pthread_mutex_init(&mymutex, NULL); subsampling.x = subsampling.y = 1; } RawImageData::RawImageData(iPoint2D _dim, guint _bpc, guint _cpp) : -dim(_dim), bpp(_bpc), -blackLevel(-1), whitePoint(65536), -dataRefCount(0),data(0), cpp(cpp) -{ + dim(_dim), bpp(_bpc), + blackLevel(-1), whitePoint(65536), + dataRefCount(0), data(0), cpp(cpp) { subsampling.x = subsampling.y = 1; createData(); pthread_mutex_init(&mymutex, NULL); } -RawImageData::~RawImageData(void) -{ +RawImageData::~RawImageData(void) { _ASSERTE(dataRefCount == 0); if (data) - _aligned_free(data); + _aligned_free(data); data = 0; - mOffset = iPoint2D(0,0); + mOffset = iPoint2D(0, 0); pthread_mutex_destroy(&mymutex); } @@ -58,21 +55,19 @@ ThrowRDE("RawImageData: Dimensions too large for allocation."); if (data) ThrowRDE("RawImageData: Duplicate data allocation in createData."); - pitch = (((dim.x*bpp) + 15)/16)*16; - data = (guchar*)_aligned_malloc(pitch*dim.y,16); + pitch = (((dim.x * bpp) + 15) / 16) * 16; + data = (guchar*)_aligned_malloc(pitch * dim.y, 16); if (!data) ThrowRDE("RawImageData::createData: Memory Allocation failed."); } -void RawImageData::destroyData() -{ +void RawImageData::destroyData() { if (data) _aligned_free(data); data = 0; } -void RawImageData::setCpp( guint val ) -{ +void RawImageData::setCpp(guint val) { if (data) ThrowRDE("RawImageData: Attempted to set Components per pixel after data allocation"); bpp /= cpp; @@ -80,23 +75,21 @@ bpp *= val; } -guchar* RawImageData::getData() -{ +guchar* RawImageData::getData() { if (!data) ThrowRDE("RawImageData::getData - Data not yet allocated."); return &data[mOffset.y*pitch+mOffset.x*bpp]; } -guchar* RawImageData::getData( guint x, guint y ) -{ - if ((int)x>=dim.x) +guchar* RawImageData::getData(guint x, guint y) { + if ((int)x >= dim.x) ThrowRDE("RawImageData::getData - X Position outside image requested."); - if ((int)y>=dim.y) { + if ((int)y >= dim.y) { ThrowRDE("RawImageData::getData - Y Position outside image requested."); } - x+= mOffset.x; - y+= mOffset.y; + x += mOffset.x; + y += mOffset.y; if (!data) ThrowRDE("RawImageData::getData - Data not yet allocated."); @@ -104,9 +97,8 @@ return &data[y*pitch+x*bpp]; } -void RawImageData::subFrame( iPoint2D offset, iPoint2D new_size ) -{ - if (!new_size.isThisInside(dim-offset)) { +void RawImageData::subFrame(iPoint2D offset, iPoint2D new_size) { + if (!new_size.isThisInside(dim - offset)) { printf("WARNING: RawImageData::subFrame - Attempted to create new subframe larger than original size. Crop skipped.\n"); return; } @@ -115,27 +107,26 @@ dim = new_size; } -void RawImageData::scaleBlackWhite() -{ - gint gw = (dim.x-20)*cpp; +void RawImageData::scaleBlackWhite() { + gint gw = (dim.x - 20) * cpp; if (blackLevel < 0 || whitePoint == 65536) { // Estimate int b = 65536; int m = 0; - for(int row=10;row<(dim.y-10);row++) { - gushort *pixel = (gushort*)getData(10,row); - for(int col = 10 ; col < gw ; col++) { + for (int row = 10;row < (dim.y - 10);row++) { + gushort *pixel = (gushort*)getData(10, row); + for (int col = 10 ; col < gw ; col++) { b = MIN(*pixel, b); m = MAX(*pixel, m); pixel++; } } - if (blackLevel<0) + if (blackLevel < 0) blackLevel = b; - if (whitePoint==65536) + if (whitePoint == 65536) whitePoint = m; printf("Estimated black:%d, Estimated white: %d\n", blackLevel, whitePoint); } - float f = 65535.0f / (float)(whitePoint-blackLevel); + float f = 65535.0f / (float)(whitePoint - blackLevel); scaleValues(f); } @@ -143,10 +134,10 @@ void RawImageData::scaleValues(float f) { int info[4]; - __cpuid(info,1); + __cpuid(info, 1); // Check SSE2 - if (f >= 0.0f && info[3]&(1<<26)) { + if (f >= 0.0f && info[3]&(1 << 26)) { __m128i ssescale; __m128i ssesub; @@ -154,25 +145,25 @@ __m128i ssesub2; __m128i ssesign; guint gw = pitch / 16; - guint i = (int)(1024.0f*f); // 10 bit fraction - i |= i<<16; - guint b = blackLevel | (blackLevel<<16); + guint i = (int)(1024.0f * f); // 10 bit fraction + i |= i << 16; + guint b = blackLevel | (blackLevel << 16); - ssescale = _mm_set_epi32(i,i,i,i); - ssesub = _mm_set_epi32(b,b,b,b); - sseround = _mm_set_epi32(512,512,512,512); - ssesub2 = _mm_set_epi32(32768,32768,32768,32768); - ssesign = _mm_set_epi32(0x80008000,0x80008000,0x80008000,0x80008000); + ssescale = _mm_set_epi32(i, i, i, i); + ssesub = _mm_set_epi32(b, b, b, b); + sseround = _mm_set_epi32(512, 512, 512, 512); + ssesub2 = _mm_set_epi32(32768, 32768, 32768, 32768); + ssesign = _mm_set_epi32(0x80008000, 0x80008000, 0x80008000, 0x80008000); for (int y = 0; y < dim.y; y++) { - __m128i* pixel = (__m128i*)&data[(mOffset.y+y)*pitch]; + __m128i* pixel = (__m128i*) & data[(mOffset.y+y)*pitch]; for (guint x = 0 ; x < gw; x++) { __m128i pix_high; __m128i temp; __m128i pix_low = _mm_load_si128(pixel); // Subtract black pix_low = _mm_subs_epu16(pix_low, ssesub); - // Multiply the two unsigned shorts and combine it to 32 bit result + // Multiply the two unsigned shorts and combine it to 32 bit result pix_high = _mm_mulhi_epu16(pix_low, ssescale); temp = _mm_mullo_epi16(pix_low, ssescale); pix_low = _mm_unpacklo_epi16(temp, pix_high); @@ -189,19 +180,19 @@ // Pack pix_low = _mm_packs_epi32(pix_low, pix_high); // Shift sign off - pix_low = _mm_xor_si128(pix_low,ssesign); + pix_low = _mm_xor_si128(pix_low, ssesign); _mm_store_si128(pixel, pix_low); pixel++; } } } else { // Not SSE2 - gint gw = dim.x*cpp; - int scale = (int)(16384.0f*f); // 14 bit fraction + gint gw = dim.x * cpp; + int scale = (int)(16384.0f * f); // 14 bit fraction for (int y = 0; y < dim.y; y++) { - gushort *pixel = (gushort*)getData(0,y); + gushort *pixel = (gushort*)getData(0, y); for (int x = 0 ; x < gw; x++) { - pixel[x] = clampbits(((pixel[x]-blackLevel)*scale+8192)>>14,16); + pixel[x] = clampbits(((pixel[x] - blackLevel) * scale + 8192) >> 14, 16); } } } @@ -214,9 +205,9 @@ //TODO: Check for SSE2 on 32 bit systems and use it there guint temp[20]; - guint i = (int)(1024.0f*f); // 10 bit fraction - i |= i<<16; - guint b = blackLevel | (blackLevel<<16); + guint i = (int)(1024.0f * f); // 10 bit fraction + i |= i << 16; + guint b = blackLevel | (blackLevel << 16); for (int j = 0; j < 4; j++) { temp[j] = b; @@ -227,22 +218,22 @@ } asm volatile - ( - "movdqu 0(%0), %%xmm7\n" // Subtraction - "movdqu 16(%0), %%xmm6\n" // Multiplication factor - "movdqu 32(%0), %%xmm5\n" // Fraction - "movdqu 48(%0), %%xmm4\n" // Sub 32768 - "movdqu 64(%0), %%xmm3\n" // Sign shift - : // no output registers - : "r" (temp) - : // %0 + ( + "movdqu 0(%0), %%xmm7\n" // Subtraction + "movdqu 16(%0), %%xmm6\n" // Multiplication factor + "movdqu 32(%0), %%xmm5\n" // Fraction + "movdqu 48(%0), %%xmm4\n" // Sub 32768 + "movdqu 64(%0), %%xmm3\n" // Sign shift + : // no output registers + : "r"(temp) + : // %0 ); for (int y = 0; y < dim.y; y++) { - guchar* pixel = (guchar*)&data[(mOffset.y+y)*pitch]; + guchar* pixel = (guchar*) & data[(mOffset.y+y)*pitch]; guint gw = pitch >> 4; for (guint x = 0; x < gw ; x++) { - asm volatile ( + asm volatile( "next_pixel:\n" "movaps 0(%0), %%xmm0\n" "psubusw %%xmm7, %%xmm0\n" // Subtract black @@ -264,22 +255,22 @@ "add $16, %0\n" : // no output registers - : "r" (pixel) - : // %0 - ); + : "r"(pixel) + : // %0 + ); } } #else - gint gw = dim.x*cpp; - int scale = (int)(16384.0f*f); // 14 bit fraction - for (int y = 0; y < dim.y; y++) { - gushort *pixel = (gushort*)getData(0,y); - for (int x = 0 ; x < gw; x++) { - pixel[x] = clampbits(((pixel[x]-blackLevel)*scale+8192)>>14,16); - } +gint gw = dim.x * cpp; +int scale = (int)(16384.0f * f); // 14 bit fraction +for (int y = 0; y < dim.y; y++) { + gushort *pixel = (gushort*)getData(0, y); + for (int x = 0 ; x < gw; x++) { + pixel[x] = clampbits(((pixel[x] - blackLevel) * scale + 8192) >> 14, 16); } +} #endif @@ -288,22 +279,19 @@ #endif -RawImage::RawImage( RawImageData* p ) : p_(p) -{ +RawImage::RawImage(RawImageData* p) : p_(p) { pthread_mutex_lock(&p_->mymutex); ++p_->dataRefCount; pthread_mutex_unlock(&p_->mymutex); } -RawImage::RawImage( const RawImage& p ) : p_(p.p_) -{ +RawImage::RawImage(const RawImage& p) : p_(p.p_) { pthread_mutex_lock(&p_->mymutex); ++p_->dataRefCount; pthread_mutex_unlock(&p_->mymutex); } -RawImage::~RawImage() -{ +RawImage::~RawImage() { pthread_mutex_lock(&p_->mymutex); if (--p_->dataRefCount == 0) { pthread_mutex_unlock(&p_->mymutex); @@ -313,18 +301,15 @@ pthread_mutex_unlock(&p_->mymutex); } -RawImageData* RawImage::operator->() -{ +RawImageData* RawImage::operator->() { return p_; } -RawImageData& RawImage::operator*() -{ +RawImageData& RawImage::operator*() { return *p_; } -RawImage& RawImage::operator=( const RawImage& p ) -{ +RawImage& RawImage::operator=(const RawImage & p) { RawImageData* const old = p_; p_ = p.p_; ++p_->dataRefCount; Modified: RawSpeed/RgbImage.cpp =================================================================== --- RawSpeed/RgbImage.cpp 2009-09-28 21:07:13 UTC (rev 153) +++ RawSpeed/RgbImage.cpp 2009-09-29 18:26:02 UTC (rev 154) @@ -1,6 +1,6 @@ #include "StdAfx.h" #include "RgbImage.h" -/* +/* RawSpeed - RAW file decoder. Copyright (C) 2009 Klaus Post @@ -23,18 +23,17 @@ */ RgbImage::RgbImage(int _w, int _h, int _bpp) : w(_w), h(_h), bpp(_bpp), owned(true) { - pitch = ((w*bpp+15)/16)*16; - data = (unsigned char*)_aligned_malloc(pitch*h,16); + pitch = ((w * bpp + 15) / 16) * 16; + data = (unsigned char*)_aligned_malloc(pitch * h, 16); } -RgbImage::RgbImage(int _w, int _h, int _bpp, int _pitch, unsigned char* _data) : -w(_w), h(_h), bpp(_bpp), pitch(_pitch), data(_data), owned(false) { +RgbImage::RgbImage(int _w, int _h, int _bpp, int _pitch, unsigned char* _data) : + w(_w), h(_h), bpp(_bpp), pitch(_pitch), data(_data), owned(false) { } -RgbImage::~RgbImage(void) -{ +RgbImage::~RgbImage(void) { if (data && owned) { _aligned_free(data); } Modified: RawSpeed/Rw2Decoder.cpp =================================================================== --- RawSpeed/Rw2Decoder.cpp 2009-09-28 21:07:13 UTC (rev 153) +++ RawSpeed/Rw2Decoder.cpp 2009-09-29 18:26:02 UTC (rev 154) @@ -24,19 +24,16 @@ */ Rw2Decoder::Rw2Decoder(TiffIFD *rootIFD, FileMap* file) : -RawDecoder(file), mRootIFD(rootIFD), input_start(0) -{ + RawDecoder(file), mRootIFD(rootIFD), input_start(0) { } -Rw2Decoder::~Rw2Decoder(void) -{ +Rw2Decoder::~Rw2Decoder(void) { if (input_start) delete input_start; input_start = 0; } -RawImage Rw2Decoder::decodeRaw() -{ +RawImage Rw2Decoder::decodeRaw() { vector data = mRootIFD->getIFDsWithTag(PANASONIC_STRIPOFFSET); @@ -48,7 +45,7 @@ TiffEntry *offsets = raw->getEntry(PANASONIC_STRIPOFFSET); if (offsets->count != 1) { - ThrowRDE("RW2 Decoder: Multiple Strips found: %u",offsets->count); + ThrowRDE("RW2 Decoder: Multiple Strips found: %u", offsets->count); } guint height = raw->getEntry((TiffTag)3)->getShort(); @@ -61,7 +58,7 @@ load_flags = 0x2008; gint off = offsets->getInt(); - input_start = new ByteStream(mFile->getData(off),mFile->getSize()-off); + input_start = new ByteStream(mFile->getData(off), mFile->getSize() - off); try { DecodeRw2(); } catch (IOException e) { @@ -72,15 +69,13 @@ return mRaw; } -void Rw2Decoder::DecodeRw2() -{ +void Rw2Decoder::DecodeRw2() { startThreads(); } -void Rw2Decoder::decodeThreaded(RawDecoderThread * t) -{ - int x, i, j, sh=0, pred[2], nonz[2]; - int w = mRaw->dim.x/14; +void Rw2Decoder::decodeThreaded(RawDecoderThread * t) { + int x, i, j, sh = 0, pred[2], nonz[2]; + int w = mRaw->dim.x / 14; guint y; /* 9 + 1/7 bits per pixel */ @@ -93,8 +88,8 @@ bits.skipBytes(skip); for (y = t->start_y; y < t->end_y; y++) { - gushort* dest = (gushort*)mRaw->getData(0,y); - for (x=0; x < w; x++) { + gushort* dest = (gushort*)mRaw->getData(0, y); + for (x = 0; x < w; x++) { pred[0] = pred[1] = nonz[0] = nonz[1] = 0; for (i = 0; i < 14; i++) { // Even pixels @@ -108,24 +103,24 @@ } } else if ((nonz[0] = bits.getBits(8)) || i > 11) pred[0] = nonz[0] << 4 | bits.getBits(4); - *dest++ = pred[0]; + *dest++ = pred[0]; // Odd pixels - i++; - if (i % 3 == 2) - sh = 4 >> (3 - bits.getBits(2)); - if (nonz[1]) { - if ((j = bits.getBits(8))) { - if ((pred[1] -= 0x80 << sh) < 0 || sh == 4) - pred[1] &= ~(-1 << sh); - pred[1] += j << sh; - } - } else if ((nonz[1] = bits.getBits(8)) || i > 11) - pred[1] = nonz[1] << 4 | bits.getBits(4); - *dest++ = pred[1]; + i++; + if (i % 3 == 2) + sh = 4 >> (3 - bits.getBits(2)); + if (nonz[1]) { + if ((j = bits.getBits(8))) { + if ((pred[1] -= 0x80 << sh) < 0 || sh == 4) + pred[1] &= ~(-1 << sh); + pred[1] += j << sh; + } + } else if ((nonz[1] = bits.getBits(8)) || i > 11) + pred[1] = nonz[1] << 4 | bits.getBits(4); + *dest++ = pred[1]; } } - } + } } void Rw2Decoder::checkSupport(CameraMetaData *meta) { @@ -138,8 +133,7 @@ this->checkCameraSupported(meta, make, model, getMode(model)); } -void Rw2Decoder::decodeMetaData( CameraMetaData *meta ) -{ +void Rw2Decoder::decodeMetaData(CameraMetaData *meta) { mRaw->cfa.setCFA(CFA_BLUE, CFA_GREEN, CFA_GREEN2, CFA_RED); vector data = mRootIFD->getIFDsWithTag(MODEL); @@ -153,8 +147,7 @@ setMetaData(meta, make, model, mode); } -bool Rw2Decoder::almostEqualRelative(float A, float B, float maxRelativeError) -{ +bool Rw2Decoder::almostEqualRelative(float A, float B, float maxRelativeError) { if (A == B) return true; @@ -164,48 +157,43 @@ return false; } -std::string Rw2Decoder::getMode( const string model ) -{ +std::string Rw2Decoder::getMode(const string model) { float ratio = 3.0f / 2.0f; // Default if (mRaw->isAllocated()) { ratio = (float)mRaw->dim.x / (float)mRaw->dim.y; } if (!model.compare("DMC-LX3") || !model.compare("DMC-G1") || !model.compare("DMC-GH1") || !model.compare("DMC-GF1")) { - if (almostEqualRelative(ratio,16.0f/9.0f,0.02f)) + if (almostEqualRelative(ratio, 16.0f / 9.0f, 0.02f)) return "16:9"; - if (almostEqualRelative(ratio,3.0f/2.0f,0.02f)) + if (almostEqualRelative(ratio, 3.0f / 2.0f, 0.02f)) return "3:2"; - if (almostEqualRelative(ratio,4.0f/3.0f,0.02f)) + if (almostEqualRelative(ratio, 4.0f / 3.0f, 0.02f)) return "4:3"; - if (almostEqualRelative(ratio,1.0f,0.02f)) + if (almostEqualRelative(ratio, 1.0f, 0.02f)) return "1:1"; } return ""; } -PanaBitpump::PanaBitpump(ByteStream* _input) : input(_input), vbits(0) -{ +PanaBitpump::PanaBitpump(ByteStream* _input) : input(_input), vbits(0) { } -PanaBitpump::~PanaBitpump() -{ +PanaBitpump::~PanaBitpump() { if (input) delete input; input = 0; } -void PanaBitpump::skipBytes(int bytes) -{ - gint blocks = (bytes/0x4000) * 0x4000; +void PanaBitpump::skipBytes(int bytes) { + gint blocks = (bytes / 0x4000) * 0x4000; input->skipBytes(blocks); for (int i = blocks; i < bytes; i++) getBits(8); } -guint PanaBitpump::getBits(int nbits) -{ +guint PanaBitpump::getBits(int nbits) { int byte; if (!vbits) { @@ -213,17 +201,17 @@ * part of the file. Since there is no chance of affecting output buffer * size we allow the decoder to decode this */ - if (input->getRemainSize() < 0x4000-load_flags) { - memcpy (buf+load_flags, input->getData(), input->getRemainSize()); + if (input->getRemainSize() < 0x4000 - load_flags) { + memcpy(buf + load_flags, input->getData(), input->getRemainSize()); input->skipBytes(input->getRemainSize()); } else { - memcpy (buf+load_flags, input->getData(), 0x4000-load_flags); - input->skipBytes(0x4000-load_flags); - if (input->getRemainSize()getData(), input->getRemainSize()); + memcpy(buf + load_flags, input->getData(), 0x4000 - load_flags); + input->skipBytes(0x4000 - load_flags); + if (input->getRemainSize() < load_flags) { + memcpy(buf, input->getData(), input->getRemainSize()); input->skipBytes(input->getRemainSize()); } else { - memcpy (buf, input->getData(), load_flags); + memcpy(buf, input->getData(), load_flags); input->skipBytes(load_flags); } } Modified: RawSpeed/TiffEntry.cpp =================================================================== --- RawSpeed/TiffEntry.cpp 2009-09-28 21:07:13 UTC (rev 153) +++ RawSpeed/TiffEntry.cpp 2009-09-29 18:26:02 UTC (rev 154) @@ -1,7 +1,7 @@ #include "StdAfx.h" #include "TiffEntry.h" #include -/* +/* RawSpeed - RAW file decoder. Copyright (C) 2009 Klaus Post @@ -27,39 +27,37 @@ TiffEntry::TiffEntry() { } -TiffEntry::TiffEntry(FileMap* f, guint offset) -{ +TiffEntry::TiffEntry(FileMap* f, guint offset) { unsigned short* p = (unsigned short*)f->getData(offset); tag = (TiffTag)p[0]; type = (TiffDataType)p[1]; - count = *(int*)f->getData(offset+4); - if (type>13) + count = *(int*)f->getData(offset + 4); + if (type > 13) throw TiffParserException("Error reading TIFF structure. Unknown Type encountered."); guint bytesize = count << datashifts[type]; - if (bytesize <=4) { - data = f->getDataWrt(offset+8); + if (bytesize <= 4) { + data = f->getDataWrt(offset + 8); } else { // offset - data_offset = *(guint*)f->getData(offset+8); - CHECKSIZE(data_offset+bytesize); + data_offset = *(guint*)f->getData(offset + 8); + CHECKSIZE(data_offset + bytesize); data = f->getDataWrt(data_offset); } #ifdef _DEBUG debug_intVal = 0xC0C4C014; debug_floatVal = sqrtf(-1); - if (type == TIFF_LONG || type == TIFF_SHORT) + if (type == TIFF_LONG || type == TIFF_SHORT) debug_intVal = getInt(); - if (type == TIFF_FLOAT || type == TIFF_DOUBLE) + if (type == TIFF_FLOAT || type == TIFF_DOUBLE) debug_floatVal = getFloat(); #endif } -TiffEntry::~TiffEntry(void) -{ +TiffEntry::~TiffEntry(void) { } unsigned int TiffEntry::getInt() { - if(!(type == TIFF_LONG || type == TIFF_SHORT)) + if (!(type == TIFF_LONG || type == TIFF_SHORT)) throw TiffParserException("TIFF, getInt: Wrong type encountered. Expected Long"); if (type == TIFF_SHORT) return getShort(); @@ -108,9 +106,9 @@ } int TiffEntry::getElementSize() { - return datasizes[type]; + return datasizes[type]; } int TiffEntry::getElementShift() { - return datashifts[type]; + return datashifts[type]; } Modified: RawSpeed/TiffEntryBE.cpp =================================================================== --- RawSpeed/TiffEntryBE.cpp 2009-09-28 21:07:13 UTC (rev 153) +++ RawSpeed/TiffEntryBE.cpp 2009-09-29 18:26:02 UTC (rev 154) @@ -1,6 +1,6 @@ #include "StdAfx.h" #include "TiffEntryBE.h" -/* +/* RawSpeed - RAW file decoder. Copyright (C) 2009 Klaus Post @@ -23,41 +23,39 @@ */ -TiffEntryBE::TiffEntryBE(FileMap* f, guint offset) : mDataSwapped(false) -{ +TiffEntryBE::TiffEntryBE(FileMap* f, guint offset) : mDataSwapped(false) { type = TIFF_UNDEFINED; // We set type to undefined to avoid debug assertion errors. data = f->getDataWrt(offset); tag = (TiffTag)getShort(); - data +=2; + data += 2; TiffDataType _type = (TiffDataType)getShort(); - data +=2; + data += 2; count = getInt(); type = _type; //Now we can set it to the proper type - if (type>13) + if (type > 13) throw TiffParserException("Error reading TIFF structure. Unknown Type encountered."); guint bytesize = count << datashifts[type]; - if (bytesize <=4) { - data = f->getDataWrt(offset+8); + if (bytesize <= 4) { + data = f->getDataWrt(offset + 8); } else { // offset - data = f->getDataWrt(offset+8); + data = f->getDataWrt(offset + 8); guint data_offset = (unsigned int)data[0] << 24 | (unsigned int)data[1] << 16 | (unsigned int)data[2] << 8 | (unsigned int)data[3]; - CHECKSIZE(data_offset+bytesize); + CHECKSIZE(data_offset + bytesize); data = f->getDataWrt(data_offset); } #ifdef _DEBUG debug_intVal = 0xC0C4C014; debug_floatVal = sqrtf(-1); - if (type == TIFF_LONG || type == TIFF_SHORT) + if (type == TIFF_LONG || type == TIFF_SHORT) debug_intVal = getInt(); - if (type == TIFF_FLOAT || type == TIFF_DOUBLE) + if (type == TIFF_FLOAT || type == TIFF_DOUBLE) debug_floatVal = getFloat(); #endif } -TiffEntryBE::~TiffEntryBE(void) -{ +TiffEntryBE::~TiffEntryBE(void) { } unsigned int TiffEntryBE::getInt() { @@ -65,7 +63,7 @@ throw TiffParserException("TIFF, getInt: Wrong type encountered. Expected Int"); if (type == TIFF_SHORT) return getShort(); - return (unsigned int)data[0] << 24 | (unsigned int)data[1] << 16 | (unsigned int)data[2] << 8 | (unsigned int)data[3]; + return (unsigned int)data[0] << 24 | (unsigned int)data[1] << 16 | (unsigned int)data[2] << 8 | (unsigned int)data[3]; } unsigned short TiffEntryBE::getShort() { @@ -76,12 +74,12 @@ const unsigned int* TiffEntryBE::getIntArray() { //TODO: Make critical section to avoid clashes. - if(!(type == TIFF_LONG || type == TIFF_UNDEFINED)) + if (!(type == TIFF_LONG || type == TIFF_UNDEFINED)) throw TiffParserException("TIFF, getIntArray: Wrong type encountered. Expected Int"); - if (mDataSwapped) + if (mDataSwapped) return (unsigned int*)&data[0]; - unsigned int* d = (unsigned int*)&data[0]; + unsigned int* d = (unsigned int*) & data[0]; for (guint i = 0; i < count; i++) { d[i] = (unsigned int)data[i*4+0] << 24 | (unsigned int)data[i*4+1] << 16 | (unsigned int)data[i*4+2] << 8 | (unsigned int)data[i*4+3]; } @@ -90,17 +88,17 @@ } const unsigned short* TiffEntryBE::getShortArray() { - //TODO: Make critical section to avoid clashes. - if(!(type == TIFF_SHORT || type == TIFF_UNDEFINED)) - throw TiffParserException("TIFF, getShortArray: Wrong type encountered. Expected Short"); + //TODO: Make critical section to avoid clashes. + if (!(type == TIFF_SHORT || type == TIFF_UNDEFINED)) + throw TiffParserException("TIFF, getShortArray: Wrong type encountered. Expected Short"); - if (mDataSwapped) + if (mDataSwapped) return (unsigned short*)&data[0]; - unsigned short* d = (unsigned short*)&data[0]; + unsigned short* d = (unsigned short*) & data[0]; for (guint i = 0; i < count; i++) { d[i] = (unsigned short)data[i*2+0] << 8 | (unsigned short)data[i*2+1]; } mDataSwapped = true; return d; -} \ No newline at end of file +} Modified: RawSpeed/TiffIFD.cpp =================================================================== --- RawSpeed/TiffIFD.cpp 2009-09-28 21:07:13 UTC (rev 153) +++ RawSpeed/TiffIFD.cpp 2009-09-29 18:26:02 UTC (rev 154) @@ -1,6 +1,6 @@ #include "StdAfx.h" #include "TiffIFD.h" -/* +/* RawSpeed - RAW file decoder. Copyright (C) 2009 Klaus Post @@ -33,8 +33,7 @@ endian = little; } -TiffIFD::TiffIFD(FileMap* f, guint offset) -{ +TiffIFD::TiffIFD(FileMap* f, guint offset) { guint size = f->getSize(); guint entries; endian = big; @@ -42,13 +41,13 @@ entries = *(unsigned short*)f->getData(offset); // Directory entries in this IFD - CHECKSIZE(offset+2+entries*4); + CHECKSIZE(offset + 2 + entries*4); for (guint i = 0; i < entries; i++) { - TiffEntry *t = new TiffEntry(f, offset+2+i*12); + TiffEntry *t = new TiffEntry(f, offset + 2 + i*12); if (t->tag == SUBIFDS || t->tag == EXIFIFDPOINTER) { // subIFD tag const unsigned int* sub_offsets = t->getIntArray(); - for (guint j = 0; j < t->count; j++ ) { + for (guint j = 0; j < t->count; j++) { mSubIFD.push_back(new TiffIFD(f, sub_offsets[j])); } delete(t); @@ -56,11 +55,10 @@ mEntry[t->tag] = t; } } - nextIFD = *(int*)f->getData(offset+2+entries*12); + nextIFD = *(int*)f->getData(offset + 2 + entries * 12); } -TiffIFD::~TiffIFD(void) -{ +TiffIFD::~TiffIFD(void) { for (map::iterator i = mEntry.begin(); i != mEntry.end(); ++i) { delete((*i).second); } @@ -96,4 +94,4 @@ bool TiffIFD::hasEntry(TiffTag tag) { return mEntry.find(tag) != mEntry.end(); -} \ No newline at end of file +} Modified: RawSpeed/TiffIFDBE.cpp =================================================================== --- RawSpeed/TiffIFDBE.cpp 2009-09-28 21:07:13 UTC (rev 153) +++ RawSpeed/TiffIFDBE.cpp 2009-09-29 18:26:02 UTC (rev 154) @@ -1,7 +1,7 @@ #include "StdAfx.h" #include "TiffIFDBE.h" #include "TiffEntryBE.h" -/* +/* RawSpeed - RAW file decoder. Copyright (C) 2009 Klaus Post @@ -27,8 +27,7 @@ endian = big; } -TiffIFDBE::TiffIFDBE(FileMap* f, guint offset) -{ +TiffIFDBE::TiffIFDBE(FileMap* f, guint offset) { endian = big; int entries; CHECKSIZE(offset); @@ -36,24 +35,23 @@ const unsigned char* data = f->getData(offset); entries = (unsigned short)data[0] << 8 | (unsigned short)data[1]; // Directory entries in this IFD - CHECKSIZE(offset+2+entries*4); + CHECKSIZE(offset + 2 + entries*4); for (int i = 0; i < entries; i++) { - TiffEntryBE *t = new TiffEntryBE(f, offset+2+i*12); + TiffEntryBE *t = new TiffEntryBE(f, offset + 2 + i*12); if (t->tag == SUBIFDS || t->tag == EXIFIFDPOINTER) { // subIFD tag const unsigned int* sub_offsets = t->getIntArray(); - for (guint j = 0; j < t->count; j++ ) { + for (guint j = 0; j < t->count; j++) { mSubIFD.push_back(new TiffIFDBE(f, sub_offsets[j])); } } else { // Store as entry mEntry[t->tag] = t; } } - data = f->getDataWrt(offset+2+entries*12); + data = f->getDataWrt(offset + 2 + entries * 12); nextIFD = (unsigned int)data[0] << 24 | (unsigned int)data[1] << 16 | (unsigned int)data[2] << 8 | (unsigned int)data[3]; } -TiffIFDBE::~TiffIFDBE(void) -{ +TiffIFDBE::~TiffIFDBE(void) { } Modified: RawSpeed/TiffParser.cpp =================================================================== --- RawSpeed/TiffParser.cpp 2009-09-28 21:07:13 UTC (rev 153) +++ RawSpeed/TiffParser.cpp 2009-09-29 18:26:02 UTC (rev 154) @@ -1,6 +1,6 @@ #include "StdAfx.h" #include "TiffParser.h" -/* +/* RawSpeed - RAW file decoder. Copyright (C) 2009 Klaus Post @@ -22,16 +22,14 @@ http://www.klauspost.com */ -TiffParser::TiffParser(FileMap* inputData): mInput(inputData), mRootIFD(0) -{ +TiffParser::TiffParser(FileMap* inputData): mInput(inputData), mRootIFD(0) { } -TiffParser::~TiffParser(void) -{ +TiffParser::~TiffParser(void) { if (mRootIFD) - delete mRootIFD; + delete mRootIFD; mRootIFD = NULL; } @@ -51,10 +49,10 @@ throw TiffParserException("Not a TIFF file (size too small)"); if (data[0] != 0x49 || data[1] != 0x49) { endian = big; - if (data[0] != 0x4D || data[1] != 0x4D) + if (data[0] != 0x4D || data[1] != 0x4D) throw TiffParserException("Not a TIFF file (ID)"); - if (data[3] != 42) + if (data[3] != 42) throw TiffParserException("Not a TIFF file (magic 42)"); } else { endian = little; @@ -106,28 +104,28 @@ for (vector::iterator i = potentials.begin(); i != potentials.end(); ++i) { string make = (*i)->getEntry(MAKE)->getString(); if (!make.compare("Canon")) { - return new Cr2Decoder(mRootIFD,mInput); + return new Cr2Decoder(mRootIFD, mInput); } if (!make.compare("NIKON CORPORATION")) { - return new NefDecoder(mRootIFD,mInput); + return new NefDecoder(mRootIFD, mInput); } if (!make.compare("NIKON")) { - return new NefDecoder(mRootIFD,mInput); + return new NefDecoder(mRootIFD, mInput); } if (!make.compare("OLYMPUS IMAGING CORP. ")) { - return new OrfDecoder(mRootIFD,mInput); + return new OrfDecoder(mRootIFD, mInput); } if (!make.compare("SONY ")) { - return new ArwDecoder(mRootIFD,mInput); + return new ArwDecoder(mRootIFD, mInput); } if (!make.compare("PENTAX Corporation ")) { - return new PefDecoder(mRootIFD,mInput); + return new PefDecoder(mRootIFD, mInput); } if (!make.compare("PENTAX ")) { - return new PefDecoder(mRootIFD,mInput); + return new PefDecoder(mRootIFD, mInput); } if (!make.compare("Panasonic")) { - return new Rw2Decoder(mRootIFD,mInput); + return new Rw2Decoder(mRootIFD, mInput); } } } Modified: RawSpeed/TiffParserException.cpp =================================================================== --- RawSpeed/TiffParserException.cpp 2009-09-28 21:07:13 UTC (rev 153) +++ RawSpeed/TiffParserException.cpp 2009-09-29 18:26:02 UTC (rev 154) @@ -5,7 +5,7 @@ #define vsprintf_s(...) vsnprintf(__VA_ARGS__) #endif -/* +/* RawSpeed - RAW file decoder. Copyright (C) 2009 Klaus Post @@ -38,6 +38,6 @@ char buf[8192]; vsprintf_s(buf, 8192, fmt, val); va_end(val); - _RPT1(0, "EXCEPTION: %s\n",buf); + _RPT1(0, "EXCEPTION: %s\n", buf); throw TiffParserException(buf); } Modified: RawSpeed/TiffParserHeaderless.cpp =================================================================== --- RawSpeed/TiffParserHeaderless.cpp 2009-09-28 21:07:13 UTC (rev 153) +++ RawSpeed/TiffParserHeaderless.cpp 2009-09-29 18:26:02 UTC (rev 154) @@ -1,6 +1,6 @@ #include "StdAfx.h" #include "TiffParserHeaderless.h" -/* +/* RawSpeed - RAW file decoder. Copyright (C) 2009 Klaus Post @@ -23,13 +23,11 @@ */ TiffParserHeaderless::TiffParserHeaderless(FileMap* input, Endianness _end) : -TiffParser(input) -{ + TiffParser(input) { endian = _end; } -TiffParserHeaderless::~TiffParserHeaderless(void) -{ +TiffParserHeaderless::~TiffParserHeaderless(void) { } #ifdef CHECKSIZE Modified: RawSpeed/TiffParserOlympus.cpp =================================================================== --- RawSpeed/TiffParserOlympus.cpp 2009-09-28 21:07:13 UTC (rev 153) +++ RawSpeed/TiffParserOlympus.cpp 2009-09-29 18:26:02 UTC (rev 154) @@ -1,6 +1,6 @@ #include "StdAfx.h" #include "TiffParserOlympus.h" -/* +/* RawSpeed - RAW file decoder. Copyright (C) 2009 Klaus Post @@ -25,11 +25,10 @@ // More relaxed Tiff parser for olympus makernote TiffParserOlympus::TiffParserOlympus(FileMap* input) : -TiffParser(input) { + TiffParser(input) { } -TiffParserOlympus::~TiffParserOlympus(void) -{ +TiffParserOlympus::~TiffParserOlympus(void) { } #ifdef CHECKSIZE @@ -49,7 +48,7 @@ throw TiffParserException("Not a TIFF file (size too small)"); if (data[0] != 0x49 || data[1] != 0x49) { endian = big; - if (data[0] != 0x4D || data[1] != 0x4D) + if (data[0] != 0x4D || data[1] != 0x4D) throw TiffParserException("Not a TIFF file (ID)"); } else { Modified: RawSpeed/TiffTag.h =================================================================== --- RawSpeed/TiffTag.h 2009-09-28 21:07:13 UTC (rev 153) +++ RawSpeed/TiffTag.h 2009-09-29 18:26:02 UTC (rev 154) @@ -25,42 +25,42 @@ typedef enum { - INTEROPERABILITYINDEX = 0x0001, - INTEROPERABILITYVERSION = 0x0002, + INTEROPERABILITYINDEX = 0x0001, + INTEROPERABILITYVERSION = 0x0002, NEWSUBFILETYPE = 0x00FE, SUBFILETYPE = 0x00FF, - IMAGEWIDTH = 0x0100, - IMAGELENGTH = 0x0101, - BITSPERSAMPLE = 0x0102, - COMPRESSION = 0x0103, - PHOTOMETRICINTERPRETATION = 0x0106, - FILLORDER = 0x010A, - DOCUMENTNAME = 0x010D, - IMAGEDESCRIPTION = 0x010E, - MAKE = 0x010F, - MODEL = 0x0110, - STRIPOFFSETS = 0x0111, - ORIENTATION = 0x0112, - SAMPLESPERPIXEL = 0x0115, - ROWSPERSTRIP = 0x0116, - STRIPBYTECOUNTS = 0x0117, + IMAGEWIDTH = 0x0100, + IMAGELENGTH = 0x0101, + BITSPERSAMPLE = 0x0102, + COMPRESSION = 0x0103, + PHOTOMETRICINTERPRETATION = 0x0106, + FILLORDER = 0x010A, + DOCUMENTNAME = 0x010D, + IMAGEDESCRIPTION = 0x010E, + MAKE = 0x010F, + MODEL = 0x0110, + STRIPOFFSETS = 0x0111, + ORIENTATION = 0x0112, + SAMPLESPERPIXEL = 0x0115, + ROWSPERSTRIP = 0x0116, + STRIPBYTECOUNTS = 0x0117, PANASONIC_STRIPOFFSET = 0x118, - XRESOLUTION = 0x011A, - YRESOLUTION = 0x011B, - PLANARCONFIGURATION = 0x011C, + XRESOLUTION = 0x011A, + YRESOLUTION = 0x011B, + PLANARCONFIGURATION = 0x011C, T4OPTIONS = 0x0124, T6OPTIONS = 0x0125, - RESOLUTIONUNIT = 0x0128, - TRANSFERFUNCTION = 0x012D, - SOFTWARE = 0x0131, - DATETIME = 0x0132, - ARTIST = 0x013B, - WHITEPOINT = 0x013E, - PRIMARYCHROMATICITIES = 0x013F, + RESOLUTIONUNIT = 0x0128, + TRANSFERFUNCTION = 0x012D, + SOFTWARE = 0x0131, + DATETIME = 0x0132, + ARTIST = 0x013B, + WHITEPOINT = 0x013E, + PRIMARYCHROMATICITIES = 0x013F, HALFTONEHINTS = 0x0141, // TILED IMAGES @@ -82,15 +82,15 @@ SMINSAMPLEVALUE = 0x0154, SMAXSAMPLEVALUE = 0x0155, - TRANSFERRANGE = 0x0156, + TRANSFERRANGE = 0x0156, CLIPPATH = 0x0157, // TIFF PAGEMAKER TECHNOTE #2. JPEGTABLES = 0x015B, // TIFF-EP - JPEGPROC = 0x0200, - JPEGINTERCHANGEFORMAT = 0x0201, - JPEGINTERCHANGEFORMATLENGTH = 0x0202, + JPEGPROC = 0x0200, + JPEGINTERCHANGEFORMAT = 0x0201, + JPEGINTERCHANGEFORMATLENGTH = 0x0202, JPEGRESTARTINTERVAL = 0x0203, JPEGLOSSLESSPREDICTORS = 0x0205, JPEGPOINTTRANSFORMS = 0x0206, @@ -98,20 +98,20 @@ JPEGDCTABLES = 0x0208, JPEGACTABLES = 0x0209, - YCBCRCOEFFICIENTS = 0x0211, - YCBCRSUBSAMPLING = 0x0212, - YCBCRPOSITIONING = 0x0213, + YCBCRCOEFFICIENTS = 0x0211, + YCBCRSUBSAMPLING = 0x0212, + YCBCRPOSITIONING = 0x0213, - REFERENCEBLACKWHITE = 0x0214, - RELATEDIMAGEFILEFORMAT = 0x1000, - RELATEDIMAGEWIDTH = 0x1001, - RELATEDIMAGELENGTH = 0x1002, - CFAREPEATPATTERNDIM = 0x828D, - CFAPATTERN = 0x828E, - BATTERYLEVEL = 0x828F, - COPYRIGHT = 0x8298, - EXPOSURETIME = 0x829A, - FNUMBER = 0x829D, + REFERENCEBLACKWHITE = 0x0214, + RELATEDIMAGEFILEFORMAT = 0x1000, + RELATEDIMAGEWIDTH = 0x1001, + RELATEDIMAGELENGTH = 0x1002, + CFAREPEATPATTERNDIM = 0x828D, + CFAPATTERN = 0x828E, + BATTERYLEVEL = 0x828F, + COPYRIGHT = 0x8298, + EXPOSURETIME = 0x829A, + FNUMBER = 0x829D, // THESE ARE FROM THE NIFF SPEC AND ONLY REALLY VALID WHEN THE HEADER BEGINS WITH IIN1 // SEE THE NIFFTAG ENUM FOR THE SPECIFCATION SPECIFIC NAMES @@ -120,32 +120,32 @@ TILEINDEX = 0x82BB, // END NIFF SPECIFIC - IPTCNAA = 0x83BB, + IPTCNAA = 0x83BB, PHOTOSHOPPRIVATE = 0x8649, - EXIFIFDPOINTER = 0x8769, - INTERCOLORPROFILE = 0x8773, - EXPOSUREPROGRAM = 0x8822, - SPECTRALSENSITIVITY = 0x8824, - GPSINFOIFDPOINTER = 0x8825, - ISOSPEEDRATINGS = 0x8827, - OECF = 0x8828, - EXIFVERSION = 0x9000, - DATETIMEORIGINAL = 0x9003, - DATETIMEDIGITIZED = 0x9004, - COMPONENTSCONFIGURATION = 0x9101, - COMPRESSEDBITSPERPIXEL = 0x9102, - SHUTTERSPEEDVALUE = 0x9201, - APERTUREVALUE = 0x9202, - BRIGHTNESSVALUE = 0x9203, - EXPOSUREBIASVALUE = 0x9204, - MAXAPERTUREVALUE = 0x9205, - SUBJECTDISTANCE = 0x9206, - METERINGMODE = 0x9207, - LIGHTSOURCE = 0x9208, - FLASH = 0x9209, - FOCALLENGTH = 0x920A, + EXIFIFDPOINTER = 0x8769, + INTERCOLORPROFILE = 0x8773, + EXPOSUREPROGRAM = 0x8822, + SPECTRALSENSITIVITY = 0x8824, + GPSINFOIFDPOINTER = 0x8825, + ISOSPEEDRATINGS = 0x8827, + OECF = 0x8828, + EXIFVERSION = 0x9000, + DATETIMEORIGINAL = 0x9003, + DATETIMEDIGITIZED = 0x9004, + COMPONENTSCONFIGURATION = 0x9101, + COMPRESSEDBITSPERPIXEL = 0x9102, + SHUTTERSPEEDVALUE = 0x9201, + APERTUREVALUE = 0x9202, + BRIGHTNESSVALUE = 0x9203, + EXPOSUREBIASVALUE = 0x9204, + MAXAPERTUREVALUE = 0x9205, + SUBJECTDISTANCE = 0x9206, + METERINGMODE = 0x9207, + LIGHTSOURCE = 0x9208, + FLASH = 0x9209, + FOCALLENGTH = 0x920A, FLASHENERGY_TIFFEP = 0x920B,// TIFF-EP SPACIALFREQUENCYRESPONSE = 0x920C,// TIFF-EP @@ -158,47 +158,47 @@ IMAGEHISTORY = 0x9213, // TIFF-EP NULL SEPARATED LIST - SUBJECTAREA = 0x9214, + SUBJECTAREA = 0x9214, EXPOSUREINDEX_TIFFEP = 0x9215, // TIFF-EP TIFFEPSTANDARDID = 0x9216, // TIFF-EP SENSINGMETHOD_TIFFEP = 0x9217, // TIFF-EP - MAKERNOTE = 0x927C, - USERCOMMENT = 0x9286, - SUBSECTIME = 0x9290, - SUBSECTIMEORIGINAL = 0x9291, - SUBSECTIMEDIGITIZED = 0x9292, - FLASHPIXVERSION = 0xA000, - COLORSPACE = 0xA001, - PIXELXDIMENSION = 0xA002, - PIXELYDIMENSION = 0xA003, - RELATEDSOUNDFILE = 0xA004, - INTEROPERABILITYIFDPOINTER = 0xA005, - FLASHENERGY = 0xA20B, - SPATIALFREQUENCYRESPONSE = 0xA20C, - FOCALPLANEXRESOLUTION = 0xA20E, - FOCALPLANEYRESOLUTION = 0xA20F, - FOCALPLANERESOLUTIONUNIT = 0xA210, - SUBJECTLOCATION = 0xA214, - EXPOSUREINDEX = 0xA215, - SENSINGMETHOD = 0xA217, - FILESOURCE = 0xA300, - SCENETYPE = 0xA301, - EXIFCFAPATTERN = 0xA302, - CUSTOMRENDERED = 0xA401, - EXPOSUREMODE = 0xA402, - WHITEBALANCE = 0xA403, - DIGITALZOOMRATIO = 0xA404, - FOCALLENGTHIN35MMFILM = 0xA405, - SCENECAPTURETYPE = 0xA406, - GAINCONTROL = 0xA407, - CONTRAST = 0xA408, - SATURATION = 0xA409, - SHARPNESS = 0xA40A, - DEVICESETTINGDESCRIPTION = 0xA40B, - SUBJECTDISTANCERANGE = 0xA40C, - IMAGEUNIQUEID = 0xA420, + MAKERNOTE = 0x927C, + USERCOMMENT = 0x9286, + SUBSECTIME = 0x9290, + SUBSECTIMEORIGINAL = 0x9291, + SUBSECTIMEDIGITIZED = 0x9292, + FLASHPIXVERSION = 0xA000, + COLORSPACE = 0xA001, + PIXELXDIMENSION = 0xA002, + PIXELYDIMENSION = 0xA003, + RELATEDSOUNDFILE = 0xA004, + INTEROPERABILITYIFDPOINTER = 0xA005, + FLASHENERGY = 0xA20B, + SPATIALFREQUENCYRESPONSE = 0xA20C, + FOCALPLANEXRESOLUTION = 0xA20E, + FOCALPLANEYRESOLUTION = 0xA20F, + FOCALPLANERESOLUTIONUNIT = 0xA210, + SUBJECTLOCATION = 0xA214, + EXPOSUREINDEX = 0xA215, + SENSINGMETHOD = 0xA217, + FILESOURCE = 0xA300, + SCENETYPE = 0xA301, + EXIFCFAPATTERN = 0xA302, + CUSTOMRENDERED = 0xA401, + EXPOSUREMODE = 0xA402, + WHITEBALANCE = 0xA403, + DIGITALZOOMRATIO = 0xA404, + FOCALLENGTHIN35MMFILM = 0xA405, + SCENECAPTURETYPE = 0xA406, + GAINCONTROL = 0xA407, + CONTRAST = 0xA408, + SATURATION = 0xA409, + SHARPNESS = 0xA40A, + DEVICESETTINGDESCRIPTION = 0xA40B, + SUBJECTDISTANCERANGE = 0xA40C, + IMAGEUNIQUEID = 0xA420, // THE FOLLOWING IDS ARE NOT DESCRIBED THE EXIF SPEC #ifndef GAMMA @@ -253,19 +253,19 @@ //BESTQUALITYSCALE = 0xC635, // RAWIFD BESTQUALITYSCALE = 0xC65C, // RAWIFD THIS LOOKS LIKE THE CORRECT VALUE SHADOWSCALE = 50739, - RAWDATAUNIQUEID = 50781, - ORIGINALRAWFILENAME = 50827, - ORIGINALRAWFILEDATA = 50828, - ACTIVEAREA = 50829, - MASKEDAREAS = 50830, - ASSHOTICCPROFILE = 50831, - ASSHOTPREPROFILEMATRIX = 50832, - CURRENTICCPROFILE = 50833, - CURRENTPREPROFILEMATRIX = 50834, - COLORIMETRICREFERENCE = 50879, - KODAKKDCPRIVATEIFD = 65024, + RAWDATAUNIQUEID = 50781, + ORIGINALRAWFILENAME = 50827, + ORIGINALRAWFILEDATA = 50828, + ACTIVEAREA = 50829, + MASKEDAREAS = 50830, + ASSHOTICCPROFILE = 50831, + ASSHOTPREPROFILEMATRIX = 50832, + CURRENTICCPROFILE = 50833, + CURRENTPREPROFILEMATRIX = 50834, + COLORIMETRICREFERENCE = 50879, + KODAKKDCPRIVATEIFD = 65024, CAMERACALIBRATIONSIGNATURE = 0xC6F3, - PROFILECALIBRATIONSIGNATURE = 0xC6F4, + PROFILECALIBRATIONSIGNATURE = 0xC6F4, EXTRACAMERAPROFILES = 0xC6F5, ASSHOTPROFILENAME = 0xC6F6, NOISEREDUCTIONAPPLIED = 0xC6F7, @@ -303,4 +303,4 @@ // PRINT IMAGE MATCHING DATA PIMIFDPOINTER = 0xC4A5 - } TiffTag; +} TiffTag; Modified: RawSpeed.kdevelop =================================================================== --- RawSpeed.kdevelop 2009-09-28 21:07:13 UTC (rev 153) +++ RawSpeed.kdevelop 2009-09-29 18:26:02 UTC (rev 154) @@ -10,16 +10,16 @@ RawSpeed . false - - + + kdevsubversion executable /usr/local/bin/rawstudio - - + + /home/klaus/dev/rawspeed/RawSpeed false true @@ -468,9 +468,9 @@ 0 - - - + + + default @@ -481,8 +481,8 @@ 4 0 false - - + + -f rawstudio-plugin.makefile default @@ -492,11 +492,11 @@ - - - - - + + + + + true true false @@ -597,7 +597,7 @@ .; - + set m_,_ theValue From anders at brander.dk Tue Sep 29 22:53:41 2009 From: anders at brander.dk (Anders Brander) Date: Tue, 29 Sep 2009 22:53:41 +0200 Subject: [Rawstudio-commit] r2685 - trunk/plugins/basic-render Message-ID: Author: abrander Date: 2009-09-29 22:53:41 +0200 (Tue, 29 Sep 2009) New Revision: 2685 Modified: trunk/plugins/basic-render/basic-render.c Log: Initializing pre_mul to identity. Modified: trunk/plugins/basic-render/basic-render.c =================================================================== --- trunk/plugins/basic-render/basic-render.c 2009-09-29 17:55:47 UTC (rev 2684) +++ trunk/plugins/basic-render/basic-render.c 2009-09-29 20:53:41 UTC (rev 2685) @@ -217,6 +217,9 @@ for(i=0;i<65536;i++) basic_render->curve_samples[i] = ((gfloat)i)/65536.0; + for(i=0;i<4;i++) + basic_render->pre_mul[i] = 1.0; + matrix4_identity(&basic_render->color_matrix); basic_render->settings = NULL; From anders at brander.dk Tue Sep 29 23:11:35 2009 From: anders at brander.dk (Anders Brander) Date: Tue, 29 Sep 2009 23:11:35 +0200 Subject: [Rawstudio-commit] r2686 - in trunk: plugins/dcp profiles Message-ID: Author: abrander Date: 2009-09-29 23:11:35 +0200 (Tue, 29 Sep 2009) New Revision: 2686 Added: trunk/profiles/prophoto.icc Modified: trunk/plugins/dcp/dcp.c trunk/profiles/Makefile.am Log: Made RSDcp return image data tagged with a ProPhoto ICC profile - and not sRGB. Modified: trunk/plugins/dcp/dcp.c =================================================================== --- trunk/plugins/dcp/dcp.c 2009-09-29 20:53:41 UTC (rev 2685) +++ trunk/plugins/dcp/dcp.c 2009-09-29 21:11:35 UTC (rev 2686) @@ -19,6 +19,7 @@ /* Plugin tmpl version 4 */ +#include "config.h" #include #include /* pow() */ @@ -26,6 +27,7 @@ #define RS_DCP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RS_TYPE_DCP, RSDcp)) #define RS_DCP_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RS_TYPE_DCP, RSDcpClass)) #define RS_IS_DCP(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RS_TYPE_DCP)) +#define RS_DCP_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RS_TYPE_DCP, RSDcpClass)) typedef struct _RSDcp RSDcp; typedef struct _RSDcpClass RSDcpClass; @@ -75,12 +77,12 @@ RS_VECTOR3 camera_white; RS_MATRIX3 camera_to_prophoto; - - RS_MATRIX3 prophoto_to_srgb; }; struct _RSDcpClass { RSFilterClass parent_class; + + RSIccProfile *prophoto_profile; }; RS_DEFINE_FILTER(rs_dcp, RSDcp) @@ -101,6 +103,7 @@ static void precalc(RSDcp *dcp); static void render(RSDcp *dcp, RS_IMAGE16 *image); static void read_profile(RSDcp *dcp, const gchar *filename); +static RSIccProfile *get_icc_profile(RSFilter *filter); G_MODULE_EXPORT void rs_plugin_load(RSPlugin *plugin) @@ -126,6 +129,8 @@ object_class->set_property = set_property; object_class->finalize = finalize; + klass->prophoto_profile = rs_icc_profile_new_from_file(PACKAGE_DATA_DIR "/" PACKAGE "/profiles/prophoto.icc"); + g_object_class_install_property(object_class, PROP_SETTINGS, g_param_spec_object( "settings", "Settings", "Settings to render from", @@ -140,6 +145,7 @@ filter_class->name = "Adobe DNG camera profile filter"; filter_class->get_image = get_image; + filter_class->get_icc_profile = get_icc_profile; } static void @@ -762,16 +768,6 @@ /* Back to RGB */ HSVtoRGB(h, s, v, &r, &g, &b); - pix.R = r; - pix.G = g; - pix.B = b; - - pix = vector3_multiply_matrix(&pix, &dcp->prophoto_to_srgb); - - r = pix.R; - g = pix.G; - b = pix.B; - /* Save as gushort */ pixel[R] = _S(r); pixel[G] = _S(g); @@ -974,17 +970,7 @@ { -0.5445989, 1.5081673, 0.0205351 }, { 0.0000000, 0.0000000, 1.2118128 } }}; - const RS_MATRIX3 prophoto_to_xyz = matrix3_invert(&xyz_to_prophoto); - /* This HAS ben adopted for D50 -> D65 white point */ - const static RS_MATRIX3 xyz_to_rgb = {{ - { 3.1338582120812, - 1.6168645994761, - 0.4906125135547 }, - { - 0.978769586326, 1.9161399511888, 0.0334523812116 }, - { 0.0719452014624, - 0.2289912335361, 1.4052430533683 } - }}; - /* Build Prophoto to sRGB */ - matrix3_multiply(&xyz_to_rgb, &prophoto_to_xyz, &dcp->prophoto_to_srgb); - /* Camera to ProPhoto */ matrix3_multiply(&xyz_to_prophoto, &dcp->camera_to_pcs, &dcp->camera_to_prophoto); /* verified by SDK */ } @@ -1119,6 +1105,13 @@ precalc(dcp); } +static RSIccProfile * +get_icc_profile(RSFilter *filter) +{ + /* We discard all earlier profiles before returning our own ProPhoto profile */ + return g_object_ref(RS_DCP_GET_CLASS(filter)->prophoto_profile); +} + /* + 0xc621 ColorMatrix1 (9 * SRATIONAL) + 0xc622 ColorMatrix2 (9 * SRATIONAL) Modified: trunk/profiles/Makefile.am =================================================================== --- trunk/profiles/Makefile.am 2009-09-29 20:53:41 UTC (rev 2685) +++ trunk/profiles/Makefile.am 2009-09-29 21:11:35 UTC (rev 2686) @@ -1,4 +1,4 @@ rawstudiodir = $(datadir)/rawstudio/profiles -rawstudio_DATA = generic_camera_profile.icc sRGB.icc +rawstudio_DATA = generic_camera_profile.icc sRGB.icc prophoto.icc EXTRA_DIST = $(rawstudio_DATA) Added: trunk/profiles/prophoto.icc =================================================================== (Binary files differ) Property changes on: trunk/profiles/prophoto.icc ___________________________________________________________________ Name: svn:mime-type + application/octet-stream From anders at brander.dk Tue Sep 29 23:19:52 2009 From: anders at brander.dk (Anders Brander) Date: Tue, 29 Sep 2009 23:19:52 +0200 Subject: [Rawstudio-commit] r2687 - trunk/librawstudio Message-ID: Author: abrander Date: 2009-09-29 23:19:51 +0200 (Tue, 29 Sep 2009) New Revision: 2687 Modified: trunk/librawstudio/rs-filter.c Log: Made rs_filter_get_icc_profile() ignore disabled filters. Modified: trunk/librawstudio/rs-filter.c =================================================================== --- trunk/librawstudio/rs-filter.c 2009-09-29 21:11:35 UTC (rev 2686) +++ trunk/librawstudio/rs-filter.c 2009-09-29 21:19:51 UTC (rev 2687) @@ -298,7 +298,7 @@ RSIccProfile *profile; g_assert(RS_IS_FILTER(filter)); - if (RS_FILTER_GET_CLASS(filter)->get_icc_profile) + if (RS_FILTER_GET_CLASS(filter)->get_icc_profile && filter->enabled) profile = RS_FILTER_GET_CLASS(filter)->get_icc_profile(filter); else profile = rs_filter_get_icc_profile(filter->previous); From anders at brander.dk Wed Sep 30 00:09:06 2009 From: anders at brander.dk (Anders Brander) Date: Wed, 30 Sep 2009 00:09:06 +0200 Subject: [Rawstudio-commit] r2688 - trunk/plugins/dcp Message-ID: Author: abrander Date: 2009-09-30 00:09:06 +0200 (Wed, 30 Sep 2009) New Revision: 2688 Modified: trunk/plugins/dcp/dcp.c Log: Removed unused reduction-matrix code. Modified: trunk/plugins/dcp/dcp.c =================================================================== --- trunk/plugins/dcp/dcp.c 2009-09-29 21:19:51 UTC (rev 2687) +++ trunk/plugins/dcp/dcp.c 2009-09-29 22:09:06 UTC (rev 2688) @@ -57,9 +57,6 @@ gboolean has_reduction_matrix1; gboolean has_reduction_matrix2; - RS_MATRIX3 reduction_matrix1; - RS_MATRIX3 reduction_matrix2; - RS_MATRIX3 reduction_matrix; gboolean has_forward_matrix1; gboolean has_forward_matrix2; @@ -98,7 +95,7 @@ static RSFilterResponse *get_image(RSFilter *filter, const RSFilterParam *param); static void settings_changed(RSSettings *settings, RSSettingsMask mask, RSDcp *dcp); static RS_xy_COORD neutral_to_xy(RSDcp *dcp, const RS_VECTOR3 *neutral); -static RS_MATRIX3 find_xyz_to_camera(RSDcp *dcp, const RS_xy_COORD *white_xy, RS_MATRIX3 *forward_matrix, RS_MATRIX3 *reduction_matrix, RS_MATRIX3 *camera_calibration); +static RS_MATRIX3 find_xyz_to_camera(RSDcp *dcp, const RS_xy_COORD *white_xy, RS_MATRIX3 *forward_matrix); static void set_white_xy(RSDcp *dcp, const RS_xy_COORD *xy); static void precalc(RSDcp *dcp); static void render(RSDcp *dcp, RS_IMAGE16 *image); @@ -338,7 +335,7 @@ for(pass = 0; pass < max_passes; pass++) { - RS_MATRIX3 xyz_to_camera = find_xyz_to_camera(dcp, &last, NULL, NULL, NULL); + RS_MATRIX3 xyz_to_camera = find_xyz_to_camera(dcp, &last, NULL); RS_MATRIX3 camera_to_xyz = matrix3_invert(&xyz_to_camera); RS_XYZ_VECTOR tmp = vector3_multiply_matrix(neutral, &camera_to_xyz); @@ -854,7 +851,7 @@ /* dng_color_spec::FindXYZtoCamera */ static RS_MATRIX3 -find_xyz_to_camera(RSDcp *dcp, const RS_xy_COORD *white_xy, RS_MATRIX3 *forward_matrix, RS_MATRIX3 *reduction_matrix, RS_MATRIX3 *camera_calibration) +find_xyz_to_camera(RSDcp *dcp, const RS_xy_COORD *white_xy, RS_MATRIX3 *forward_matrix) { gfloat temp = 5000.0; @@ -886,18 +883,6 @@ *forward_matrix = dcp->forward_matrix2; } - if (reduction_matrix) - { - if (dcp->has_reduction_matrix1 && dcp->has_reduction_matrix2) - matrix3_interpolate(&dcp->reduction_matrix1, &dcp->reduction_matrix2, alpha, reduction_matrix); - else if (dcp->has_reduction_matrix1) - *reduction_matrix = dcp->reduction_matrix1; - else if (dcp->has_reduction_matrix2) - *reduction_matrix = dcp->reduction_matrix2; - } - - /* We don't have camera_calibration anyway! */ - return color_matrix; } @@ -923,11 +908,10 @@ { RS_MATRIX3 color_matrix; RS_MATRIX3 forward_matrix; - RS_MATRIX3 reduction_matrix; dcp->white_xy = *xy; - color_matrix = find_xyz_to_camera(dcp, xy, &forward_matrix, &reduction_matrix, NULL); + color_matrix = find_xyz_to_camera(dcp, xy, &forward_matrix); RS_XYZ_VECTOR white = xy_to_XYZ(xy); @@ -1027,26 +1011,6 @@ else matrix3_identity(&dcp->color_matrix2); - /* ReductionMatrix1 */ - entry = rs_tiff_get_ifd_entry(tiff, 0, 0xc725); - if (entry) - { - dcp->reduction_matrix1 = read_matrix(tiff, entry->value_offset); - dcp->has_reduction_matrix1 = TRUE; - } - else - matrix3_identity(&dcp->reduction_matrix1); - - /* ReductionMatrix2 */ - entry = rs_tiff_get_ifd_entry(tiff, 0, 0xc726); - if (entry) - { - dcp->reduction_matrix2 = read_matrix(tiff, entry->value_offset); - dcp->has_reduction_matrix2 = TRUE; - } - else - matrix3_identity(&dcp->reduction_matrix2); - /* CalibrationIlluminant1 */ entry = rs_tiff_get_ifd_entry(tiff, 0, 0xc65a); if (entry) From anders at brander.dk Wed Sep 30 00:10:38 2009 From: anders at brander.dk (Anders Brander) Date: Wed, 30 Sep 2009 00:10:38 +0200 Subject: [Rawstudio-commit] r2689 - trunk/plugins/dcp Message-ID: Author: abrander Date: 2009-09-30 00:10:38 +0200 (Wed, 30 Sep 2009) New Revision: 2689 Modified: trunk/plugins/dcp/dcp.c Log: Removed unused has_reduction_matrix*. Modified: trunk/plugins/dcp/dcp.c =================================================================== --- trunk/plugins/dcp/dcp.c 2009-09-29 22:09:06 UTC (rev 2688) +++ trunk/plugins/dcp/dcp.c 2009-09-29 22:10:38 UTC (rev 2689) @@ -55,9 +55,6 @@ RS_MATRIX3 color_matrix1; RS_MATRIX3 color_matrix2; - gboolean has_reduction_matrix1; - gboolean has_reduction_matrix2; - gboolean has_forward_matrix1; gboolean has_forward_matrix2; RS_MATRIX3 forward_matrix1; @@ -986,8 +983,6 @@ /* FIXME: Reset this properly */ dcp->has_color_matrix1 = FALSE; dcp->has_color_matrix2 = FALSE; - dcp->has_reduction_matrix1 = FALSE; - dcp->has_reduction_matrix2 = FALSE; dcp->has_forward_matrix1 = FALSE; dcp->has_forward_matrix2 = FALSE; From anders at brander.dk Wed Sep 30 01:21:00 2009 From: anders at brander.dk (Anders Brander) Date: Wed, 30 Sep 2009 01:21:00 +0200 Subject: [Rawstudio-commit] r2690 - trunk/librawstudio Message-ID: Author: abrander Date: 2009-09-30 01:21:00 +0200 (Wed, 30 Sep 2009) New Revision: 2690 Added: trunk/librawstudio/rs-dcp-file.c trunk/librawstudio/rs-dcp-file.h Modified: trunk/librawstudio/Makefile.am trunk/librawstudio/rawstudio.h Log: Added RSDcpFile. Modified: trunk/librawstudio/Makefile.am =================================================================== --- trunk/librawstudio/Makefile.am 2009-09-29 22:10:38 UTC (rev 2689) +++ trunk/librawstudio/Makefile.am 2009-09-29 23:21:00 UTC (rev 2690) @@ -38,6 +38,7 @@ rs-tiff-ifd.h \ rs-tiff-ifd-entry.h \ rs-huesat-map.h \ + rs-dcp-file.h \ x86-cpu.h lib_LTLIBRARIES = librawstudio-1.1.la @@ -70,6 +71,7 @@ rs-tiff-ifd.c rs-tiff-ifd.h \ rs-tiff-ifd-entry.c rs-tiff-ifd-entry.h \ rs-huesat-map.c rs-huesat-map.h \ + rs-dcp-file.c rs-dcp-file.h \ rs-stock.c rs-stock.h librawstudio_1_1_la_LIBADD = @PACKAGE_LIBS@ @LIBJPEG@ @LIBTIFF@ $(INTLLIBS) Modified: trunk/librawstudio/rawstudio.h =================================================================== --- trunk/librawstudio/rawstudio.h 2009-09-29 22:10:38 UTC (rev 2689) +++ trunk/librawstudio/rawstudio.h 2009-09-29 23:21:00 UTC (rev 2690) @@ -59,6 +59,7 @@ #include "rs-tiff-ifd.h" #include "rs-tiff.h" #include "rs-huesat-map.h" +#include "rs-dcp-file.h" #include "x86-cpu.h" Added: trunk/librawstudio/rs-dcp-file.c =================================================================== --- trunk/librawstudio/rs-dcp-file.c (rev 0) +++ trunk/librawstudio/rs-dcp-file.c 2009-09-29 23:21:00 UTC (rev 2690) @@ -0,0 +1,306 @@ +/* + * Copyright (C) 2006-2009 Anders Brander and + * Anders Kvist + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include "rs-dcp-file.h" + +struct _RSDcpFile { + RSTiff parent; + gboolean dispose_has_run; + + gchar *model; + gchar *signature; + gchar *name; + gchar *copyright; +}; + +static gboolean read_file_header(RSTiff *tiff); + +G_DEFINE_TYPE (RSDcpFile, rs_dcp_file, RS_TYPE_TIFF) + +static void +rs_dcp_file_dispose(GObject *object) +{ + RSDcpFile *dcp_file = RS_DCP_FILE(object); + + if (!dcp_file->dispose_has_run) + { + dcp_file->dispose_has_run = TRUE; + + g_free(dcp_file->model); + g_free(dcp_file->signature); + g_free(dcp_file->name); + g_free(dcp_file->copyright); + } + + G_OBJECT_CLASS(rs_dcp_file_parent_class)->dispose(object); +} + +static void +rs_dcp_file_class_init(RSDcpFileClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS(klass); + RSTiffClass *tiff_class = RS_TIFF_CLASS(klass); + + tiff_class->read_file_header = read_file_header; +} + +static void +rs_dcp_file_init(RSDcpFile *dcp_file) +{ +} + +static gboolean +read_file_header(RSTiff *tiff) +{ + gboolean ret = TRUE; + + /* Parse TIFF */ + RS_TIFF_CLASS(rs_dcp_file_parent_class)->read_file_header(tiff); + + /* Read DCP Magic */ + if (rs_tiff_get_ushort(tiff, 2) != 0x4352) + ret = TRUE; + + return ret; +} + +static gboolean +read_matrix(RSDcpFile *dcp_file, guint ifd, gushort tag, RS_MATRIX3 *matrix) +{ + RSTiff *tiff = RS_TIFF(dcp_file); + gboolean ret = FALSE; + RSTiffIfdEntry *entry = rs_tiff_get_ifd_entry(tiff, ifd, tag); + + if (entry && matrix) + { + matrix->coeff[0][0] = rs_tiff_get_rational(tiff, entry->value_offset); + matrix->coeff[0][1] = rs_tiff_get_rational(tiff, entry->value_offset+8); + matrix->coeff[0][2] = rs_tiff_get_rational(tiff, entry->value_offset+16); + matrix->coeff[1][0] = rs_tiff_get_rational(tiff, entry->value_offset+24); + matrix->coeff[1][1] = rs_tiff_get_rational(tiff, entry->value_offset+32); + matrix->coeff[1][2] = rs_tiff_get_rational(tiff, entry->value_offset+40); + matrix->coeff[2][0] = rs_tiff_get_rational(tiff, entry->value_offset+48); + matrix->coeff[2][1] = rs_tiff_get_rational(tiff, entry->value_offset+56); + matrix->coeff[2][2] = rs_tiff_get_rational(tiff, entry->value_offset+64); + ret = TRUE; + } + + return ret; +} + +static gfloat +read_illuminant(RSDcpFile *dcp_file, guint ifd, gushort tag) +{ + RSTiffIfdEntry *entry = rs_tiff_get_ifd_entry(RS_TIFF(dcp_file), ifd, tag); + + if (!entry) + return 5000.0; + + enum { + lsUnknown = 0, + + lsDaylight = 1, + lsFluorescent = 2, + lsTungsten = 3, + lsFlash = 4, + lsFineWeather = 9, + lsCloudyWeather = 10, + lsShade = 11, + lsDaylightFluorescent = 12, // D 5700 - 7100K + lsDayWhiteFluorescent = 13, // N 4600 - 5400K + lsCoolWhiteFluorescent = 14, // W 3900 - 4500K + lsWhiteFluorescent = 15, // WW 3200 - 3700K + lsStandardLightA = 17, + lsStandardLightB = 18, + lsStandardLightC = 19, + lsD55 = 20, + lsD65 = 21, + lsD75 = 22, + lsD50 = 23, + lsISOStudioTungsten = 24, + + lsOther = 255 + }; + + switch (entry->value_offset) + { + case lsStandardLightA: + case lsTungsten: + return 2850.0; + + case lsISOStudioTungsten: + return 3200.0; + + case lsD50: + return 5000.0; + + case lsD55: + case lsDaylight: + case lsFineWeather: + case lsFlash: + case lsStandardLightB: + return 5500.0; + case lsD65: + case lsStandardLightC: + case lsCloudyWeather: + return 6500.0; + + case lsD75: + case lsShade: + return 7500.0; + + case lsDaylightFluorescent: + return (5700.0 + 7100.0) * 0.5; + + case lsDayWhiteFluorescent: + return (4600.0 + 5400.0) * 0.5; + + case lsCoolWhiteFluorescent: + case lsFluorescent: + return (3900.0 + 4500.0) * 0.5; + + case lsWhiteFluorescent: + return (3200.0 + 3700.0) * 0.5; + + default: + return 0.0; + } + + return 5000.0; +} + +const gchar * +read_ascii(RSDcpFile *dcp_file, guint ifd, gushort tag, gchar **cache) +{ + GStaticMutex lock = G_STATIC_MUTEX_INIT; + g_static_mutex_lock(&lock); + if (!*cache) + *cache = rs_tiff_get_ascii(RS_TIFF(dcp_file), ifd, tag); + g_static_mutex_unlock(&lock); + + return *cache; +} + +RSDcpFile * +rs_dcp_file_new_from_file(const gchar *path) +{ + return g_object_new(RS_TYPE_DCP_FILE, "filename", path, NULL); +} + +const gchar * +rs_dcp_file_get_model(RSDcpFile *dcp_file) +{ + return read_ascii(dcp_file, 0, 0xc614, &dcp_file->model); +} + +gboolean +rs_dcp_file_get_color_matrix1(RSDcpFile *dcp_file, RS_MATRIX3 *matrix) +{ + return read_matrix(dcp_file, 0, 0xc621, matrix); +} + +gboolean +rs_dcp_file_get_color_matrix2(RSDcpFile *dcp_file, RS_MATRIX3 *matrix) +{ + return read_matrix(dcp_file, 0, 0xc622, matrix); +} + +gfloat +rs_dcp_file_get_illuminant1(RSDcpFile *dcp_file) +{ + return read_illuminant(dcp_file, 0, 0xc65a); +} + +gfloat +rs_dcp_file_get_illuminant2(RSDcpFile *dcp_file) +{ + return read_illuminant(dcp_file, 0, 0xc65b); +} + +const gchar * +rs_dcp_file_get_signature(RSDcpFile *dcp_file) +{ + return read_ascii(dcp_file, 0, 0xc6f4, &dcp_file->signature); +} + +const gchar * +rs_dcp_file_get_name(RSDcpFile *dcp_file) +{ + return read_ascii(dcp_file, 0, 0xc6f8, &dcp_file->name); +} + +RSHuesatMap * +rs_dcp_file_get_huesatmap1(RSDcpFile *dcp_file) +{ + return rs_huesat_map_new_from_dcp(RS_TIFF(dcp_file), 0, 0xc6f9, 0xc6fa); +} + +RSHuesatMap * +rs_dcp_file_get_huesatmap2(RSDcpFile *dcp_file) +{ + return rs_huesat_map_new_from_dcp(RS_TIFF(dcp_file), 0, 0xc6f9, 0xc6fb); +} + +RSSpline * +rs_dcp_file_get_tonecurve(RSDcpFile *dcp_file) +{ + RSSpline *ret = NULL; + RSTiff *tiff = RS_TIFF(dcp_file); + + RSTiffIfdEntry *entry = rs_tiff_get_ifd_entry(tiff, 0, 0xc6fc); + + if (entry) + { + gint i; + gint num_knots = entry->count / 2; + gfloat *knots = g_new0(gfloat, entry->count); + + for(i = 0; i < entry->count; i++) + knots[i] = rs_tiff_get_float(tiff, (entry->value_offset+(i*4))); + + ret = rs_spline_new(knots, num_knots, NATURAL); + g_free(knots); + } + + return ret; +} + +const gchar * +rs_dcp_file_get_copyright(RSDcpFile *dcp_file) +{ + return read_ascii(dcp_file, 0, 0xc6fe, &dcp_file->copyright); +} + +gboolean +rs_dcp_file_get_forward_matrix1(RSDcpFile *dcp_file, RS_MATRIX3 *matrix) +{ + return read_matrix(dcp_file, 0, 0xc714, matrix); +} + +gboolean +rs_dcp_file_get_forward_matrix2(RSDcpFile *dcp_file, RS_MATRIX3 *matrix) +{ + return read_matrix(dcp_file, 0, 0xc715, matrix); +} + +RSHuesatMap * +rs_dcp_file_get_looktable(RSDcpFile *dcp_file) +{ + return rs_huesat_map_new_from_dcp(RS_TIFF(dcp_file), 0, 0xc725, 0xc726); +} Added: trunk/librawstudio/rs-dcp-file.h =================================================================== --- trunk/librawstudio/rs-dcp-file.h (rev 0) +++ trunk/librawstudio/rs-dcp-file.h 2009-09-29 23:21:00 UTC (rev 2690) @@ -0,0 +1,75 @@ +/* + * Copyright (C) 2006-2009 Anders Brander and + * Anders Kvist + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifndef RS_DCP_FILE_H +#define RS_DCP_FILE_H + +#include +#include + +G_BEGIN_DECLS + +#define RS_TYPE_DCP_FILE rs_dcp_file_get_type() +#define RS_DCP_FILE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RS_TYPE_DCP_FILE, RSDcpFile)) +#define RS_DCP_FILE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RS_TYPE_DCP_FILE, RSDcpFileClass)) +#define RS_IS_DCP_FILE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RS_TYPE_DCP_FILE)) +#define RS_IS_DCP_FILE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RS_TYPE_DCP_FILE)) +#define RS_DCP_FILE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RS_TYPE_DCP_FILE, RSDcpFileClass)) + +typedef struct _RSDcpFile RSDcpFile; + +typedef struct { + RSTiffClass parent_class; +} RSDcpFileClass; + +GType rs_dcp_file_get_type(void); + +RSDcpFile *rs_dcp_file_new_from_file(const gchar *path); + +const gchar *rs_dcp_file_get_model(RSDcpFile *dcp_file); + +gboolean rs_dcp_file_get_color_matrix1(RSDcpFile *dcp_file, RS_MATRIX3 *matrix); + +gboolean rs_dcp_file_get_color_matrix2(RSDcpFile *dcp_file, RS_MATRIX3 *matrix); + +gfloat rs_dcp_file_get_illuminant1(RSDcpFile *dcp_file); + +gfloat rs_dcp_file_get_illuminant2(RSDcpFile *dcp_file); + +const gchar *rs_dcp_file_get_signature(RSDcpFile *dcp_file); + +const gchar *rs_dcp_file_get_name(RSDcpFile *dcp_file); + +RSHuesatMap *rs_dcp_file_get_huesatmap1(RSDcpFile *dcp_file); + +RSHuesatMap *rs_dcp_file_get_huesatmap2(RSDcpFile *dcp_file); + +RSSpline *rs_dcp_file_get_tonecurve(RSDcpFile *dcp_file); + +const gchar *rs_dcp_file_get_copyright(RSDcpFile *dcp_file); + +gboolean rs_dcp_file_get_forward_matrix1(RSDcpFile *dcp_file, RS_MATRIX3 *matrix); + +gboolean rs_dcp_file_get_forward_matrix2(RSDcpFile *dcp_file, RS_MATRIX3 *matrix); + +RSHuesatMap *rs_dcp_file_get_looktable(RSDcpFile *dcp_file); + +G_END_DECLS + +#endif /* RS_DCP_FILE_H */ From anders at brander.dk Wed Sep 30 01:32:43 2009 From: anders at brander.dk (Anders Brander) Date: Wed, 30 Sep 2009 01:32:43 +0200 Subject: [Rawstudio-commit] r2691 - trunk/plugins/dcp Message-ID: Author: abrander Date: 2009-09-30 01:32:43 +0200 (Wed, 30 Sep 2009) New Revision: 2691 Modified: trunk/plugins/dcp/dcp.c Log: Changed RSDcp to use RSDcpFile. Modified: trunk/plugins/dcp/dcp.c =================================================================== --- trunk/plugins/dcp/dcp.c 2009-09-29 23:21:00 UTC (rev 2690) +++ trunk/plugins/dcp/dcp.c 2009-09-29 23:32:43 UTC (rev 2691) @@ -96,7 +96,7 @@ static void set_white_xy(RSDcp *dcp, const RS_xy_COORD *xy); static void precalc(RSDcp *dcp); static void render(RSDcp *dcp, RS_IMAGE16 *image); -static void read_profile(RSDcp *dcp, const gchar *filename); +static void read_profile(RSDcp *dcp, RSDcpFile *dcp_file); static RSIccProfile *get_icc_profile(RSFilter *filter); G_MODULE_EXPORT void @@ -132,9 +132,9 @@ ); g_object_class_install_property(object_class, - PROP_PROFILE, g_param_spec_string( + PROP_PROFILE, g_param_spec_object( "profile", "profile", "DCP Profile", - NULL, G_PARAM_READWRITE) + RS_TYPE_DCP_FILE, G_PARAM_READWRITE) ); filter_class->name = "Adobe DNG camera profile filter"; @@ -261,9 +261,8 @@ set_property(GObject *object, guint property_id, const GValue *value, GParamSpec *pspec) { RSDcp *dcp = RS_DCP(object); -// RSFilter *filter = RS_FILTER(dcp); + RSFilter *filter = RS_FILTER(dcp); RSSettings *settings; - const gchar *profile_filename; switch (property_id) { @@ -273,8 +272,8 @@ settings_changed(settings, MASK_ALL, dcp); break; case PROP_PROFILE: - profile_filename = g_value_get_string(value); - read_profile(dcp, profile_filename); + read_profile(dcp, g_value_get_object(value)); + rs_filter_changed(filter, RS_FILTER_CHANGED_PIXELDATA); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); @@ -773,79 +772,6 @@ #undef _F #undef _S -static gfloat -temp_from_exif_illuminant(guint illuminant) -{ - enum { - lsUnknown = 0, - - lsDaylight = 1, - lsFluorescent = 2, - lsTungsten = 3, - lsFlash = 4, - lsFineWeather = 9, - lsCloudyWeather = 10, - lsShade = 11, - lsDaylightFluorescent = 12, // D 5700 - 7100K - lsDayWhiteFluorescent = 13, // N 4600 - 5400K - lsCoolWhiteFluorescent = 14, // W 3900 - 4500K - lsWhiteFluorescent = 15, // WW 3200 - 3700K - lsStandardLightA = 17, - lsStandardLightB = 18, - lsStandardLightC = 19, - lsD55 = 20, - lsD65 = 21, - lsD75 = 22, - lsD50 = 23, - lsISOStudioTungsten = 24, - - lsOther = 255 - }; - switch (illuminant) - { - case lsStandardLightA: - case lsTungsten: - return 2850.0; - - case lsISOStudioTungsten: - return 3200.0; - - case lsD50: - return 5000.0; - - case lsD55: - case lsDaylight: - case lsFineWeather: - case lsFlash: - case lsStandardLightB: - return 5500.0; - case lsD65: - case lsStandardLightC: - case lsCloudyWeather: - return 6500.0; - - case lsD75: - case lsShade: - return 7500.0; - - case lsDaylightFluorescent: - return (5700.0 + 7100.0) * 0.5; - - case lsDayWhiteFluorescent: - return (4600.0 + 5400.0) * 0.5; - - case lsCoolWhiteFluorescent: - case lsFluorescent: - return (3900.0 + 4500.0) * 0.5; - - case lsWhiteFluorescent: - return (3200.0 + 3700.0) * 0.5; - - default: - return 0.0; - } -} - /* dng_color_spec::FindXYZtoCamera */ static RS_MATRIX3 find_xyz_to_camera(RSDcp *dcp, const RS_xy_COORD *white_xy, RS_MATRIX3 *forward_matrix) @@ -956,112 +882,36 @@ matrix3_multiply(&xyz_to_prophoto, &dcp->camera_to_pcs, &dcp->camera_to_prophoto); /* verified by SDK */ } -static RS_MATRIX3 -read_matrix(RSTiff *tiff, guint offset) -{ - RS_MATRIX3 matrix; - - matrix.coeff[0][0] = rs_tiff_get_rational(tiff, offset); - matrix.coeff[0][1] = rs_tiff_get_rational(tiff, offset+8); - matrix.coeff[0][2] = rs_tiff_get_rational(tiff, offset+16); - matrix.coeff[1][0] = rs_tiff_get_rational(tiff, offset+24); - matrix.coeff[1][1] = rs_tiff_get_rational(tiff, offset+32); - matrix.coeff[1][2] = rs_tiff_get_rational(tiff, offset+40); - matrix.coeff[2][0] = rs_tiff_get_rational(tiff, offset+48); - matrix.coeff[2][1] = rs_tiff_get_rational(tiff, offset+56); - matrix.coeff[2][2] = rs_tiff_get_rational(tiff, offset+64); - - return matrix; -} - static void -read_profile(RSDcp *dcp, const gchar *filename) +read_profile(RSDcp *dcp, RSDcpFile *dcp_file) { - RSTiff *tiff = rs_tiff_new_from_file(filename); - RSTiffIfdEntry *entry; + /* ColorMatrix */ + dcp->has_color_matrix1 = rs_dcp_file_get_color_matrix1(dcp_file, &dcp->color_matrix1); + dcp->has_color_matrix2 = rs_dcp_file_get_color_matrix2(dcp_file, &dcp->color_matrix2); - /* FIXME: Reset this properly */ - dcp->has_color_matrix1 = FALSE; - dcp->has_color_matrix2 = FALSE; - dcp->has_forward_matrix1 = FALSE; - dcp->has_forward_matrix2 = FALSE; + /* CalibrationIlluminant */ + dcp->temp1 = rs_dcp_file_get_illuminant1(dcp_file); + dcp->temp2 = rs_dcp_file_get_illuminant2(dcp_file); - /* ColorMatrix1 */ - entry = rs_tiff_get_ifd_entry(tiff, 0, 0xc621); - if (entry) - { - dcp->color_matrix1 = read_matrix(tiff, entry->value_offset); - dcp->has_color_matrix1 = TRUE; - } - else - matrix3_identity(&dcp->color_matrix1); - - /* ColorMatrix2 */ - entry = rs_tiff_get_ifd_entry(tiff, 0, 0xc622); - if (entry) - { - dcp->color_matrix2 = read_matrix(tiff, entry->value_offset); - dcp->has_color_matrix2 = TRUE; - } - else - matrix3_identity(&dcp->color_matrix2); - - /* CalibrationIlluminant1 */ - entry = rs_tiff_get_ifd_entry(tiff, 0, 0xc65a); - if (entry) - dcp->temp1 = temp_from_exif_illuminant(entry->value_offset); - else - dcp->temp1 = 5000; - - /* CalibrationIlluminant2 */ - entry = rs_tiff_get_ifd_entry(tiff, 0, 0xc65b); - if (entry) - dcp->temp2 = temp_from_exif_illuminant(entry->value_offset); - else - dcp->temp2 = 5000; - /* ProfileToneCurve */ - entry = rs_tiff_get_ifd_entry(tiff, 0, 0xc6fc); - if (entry) - { - gint i; - gint num_knots = entry->count / 2; - gfloat *knots = g_new0(gfloat, entry->count); - - for(i = 0; i < entry->count; i++) - knots[i] = rs_tiff_get_float(tiff, (entry->value_offset+(i*4))); - - dcp->baseline_exposure = rs_spline_new(knots, num_knots, NATURAL); + dcp->baseline_exposure = rs_dcp_file_get_tonecurve(dcp_file); + if (dcp->baseline_exposure) dcp->baseline_exposure_lut = rs_spline_sample(dcp->baseline_exposure, NULL, 65536); - } - /* ForwardMatrix1 */ - entry = rs_tiff_get_ifd_entry(tiff, 0, 0xc714); - if (entry) - { - dcp->forward_matrix1 = read_matrix(tiff, entry->value_offset); - dcp->has_forward_matrix1 = TRUE; + /* FIXME: Free these at some point! */ + + /* ForwardMatrix */ + dcp->has_forward_matrix1 = rs_dcp_file_get_forward_matrix1(dcp_file, &dcp->forward_matrix1); + dcp->has_forward_matrix2 = rs_dcp_file_get_forward_matrix2(dcp_file, &dcp->forward_matrix2); + if (dcp->has_forward_matrix1) normalize_forward_matrix(&dcp->forward_matrix1); - } - else - matrix3_identity(&dcp->forward_matrix1); + if (dcp->has_forward_matrix2) + normalize_forward_matrix(&dcp->forward_matrix2); - /* ForwardMatrix2 */ - entry = rs_tiff_get_ifd_entry(tiff, 0, 0xc715); - if (entry) - { - dcp->forward_matrix2 = read_matrix(tiff, entry->value_offset); - dcp->has_forward_matrix2 = TRUE; - } - else - matrix3_identity(&dcp->forward_matrix2); + dcp->looktable = rs_dcp_file_get_looktable(dcp_file); - dcp->looktable = rs_huesat_map_new_from_dcp(tiff, 0, 0xc725, 0xc726); - dcp->huesatmap1 = rs_huesat_map_new_from_dcp(tiff, 0, 0xc6f9, 0xc6fa); - dcp->huesatmap2 = rs_huesat_map_new_from_dcp(tiff, 0, 0xc6f9, 0xc6fb); - dcp->huesatmap = dcp->huesatmap1; - g_object_unref(tiff); - - precalc(dcp); + dcp->huesatmap1 = rs_dcp_file_get_huesatmap1(dcp_file); + dcp->huesatmap2 = rs_dcp_file_get_huesatmap2(dcp_file); + dcp->huesatmap = dcp->huesatmap2; /* FIXME: Interpolate this! */ } static RSIccProfile * From anders at brander.dk Wed Sep 30 01:47:16 2009 From: anders at brander.dk (Anders Brander) Date: Wed, 30 Sep 2009 01:47:16 +0200 Subject: [Rawstudio-commit] r2692 - in trunk: plugins plugins/basic-render plugins/dcp plugins/denoise plugins/exposure-mask profiles Message-ID: Author: abrander Date: 2009-09-30 01:47:16 +0200 (Wed, 30 Sep 2009) New Revision: 2692 Modified: trunk/plugins/ trunk/plugins/basic-render/ trunk/plugins/dcp/ trunk/plugins/denoise/ trunk/plugins/exposure-mask/ trunk/profiles/ Log: Ignoring autogenerated files. Property changes on: trunk/plugins ___________________________________________________________________ Name: svn:ignore - Makefile Makefile.in .deps + Makefile Makefile.in Property changes on: trunk/plugins/basic-render ___________________________________________________________________ Name: svn:ignore + Makefile Makefile.in .deps Property changes on: trunk/plugins/dcp ___________________________________________________________________ Name: svn:ignore + Makefile Makefile.in .deps Property changes on: trunk/plugins/denoise ___________________________________________________________________ Name: svn:ignore - win32 .libs .deps + Makefile Makefile.in .deps Property changes on: trunk/plugins/exposure-mask ___________________________________________________________________ Name: svn:ignore + Makefile Makefile.in .deps Property changes on: trunk/profiles ___________________________________________________________________ Name: svn:ignore + Makefile Makefile.in From anders at brander.dk Wed Sep 30 01:49:39 2009 From: anders at brander.dk (Anders Brander) Date: Wed, 30 Sep 2009 01:49:39 +0200 Subject: [Rawstudio-commit] r2693 - in attic/plugins: . lcms Message-ID: Author: abrander Date: 2009-09-30 01:49:39 +0200 (Wed, 30 Sep 2009) New Revision: 2693 Added: attic/plugins/lcms/ attic/plugins/lcms/Makefile.am attic/plugins/lcms/lcms.c Log: Added RSLcms filter to attic. Added: attic/plugins/lcms/Makefile.am =================================================================== --- attic/plugins/lcms/Makefile.am (rev 0) +++ attic/plugins/lcms/Makefile.am 2009-09-29 23:49:39 UTC (rev 2693) @@ -0,0 +1,21 @@ +plugindir = $(libdir)/rawstudio/plugins + +AM_CFLAGS =\ + -Wall -fno-strict-aliasing\ + -O4 + +AM_CXXFLAGS = $(AM_CFLAGS) + +INCLUDES = \ + -DPACKAGE_DATA_DIR=\""$(datadir)"\" \ + -DPACKAGE_LOCALE_DIR=\""$(prefix)/$(DATADIRNAME)/locale"\" \ + @PACKAGE_CFLAGS@ \ + -I../../librawstudio/ + +lib_LTLIBRARIES = lcms.la + +libdir = $(datadir)/rawstudio/plugins/ + +lcms_la_LIBADD = @PACKAGE_LIBS@ +lcms_la_LDFLAGS = -module -avoid-version +lcms_la_SOURCES = lcms.c Added: attic/plugins/lcms/lcms.c =================================================================== --- attic/plugins/lcms/lcms.c (rev 0) +++ attic/plugins/lcms/lcms.c 2009-09-29 23:49:39 UTC (rev 2693) @@ -0,0 +1,309 @@ +/* + * Copyright (C) 2006-2009 Anders Brander and + * Anders Kvist + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +/* Plugin tmpl version 4 */ + +#include +#include + +#define RS_TYPE_LCMS (rs_lcms_type) +#define RS_LCMS(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RS_TYPE_LCMS, RSLcms)) +#define RS_LCMS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RS_TYPE_LCMS, RSLcmsClass)) +#define RS_IS_LCMS(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RS_TYPE_LCMS)) + +typedef struct _RSLcms RSLcms; +typedef struct _RSLcmsClass RSLcmsClass; + +struct _RSLcms { + RSFilter parent; + + RSIccProfile *profile; + cmsHPROFILE *input_profile; + cmsHPROFILE *output_profile; + cmsHTRANSFORM transform; + gint intent; + gboolean dirty; +}; + +struct _RSLcmsClass { + RSFilterClass parent_class; +}; + +RS_DEFINE_FILTER(rs_lcms, RSLcms) + +enum { + PROP_0, + PROP_INPUT_PROFILE, + PROP_OUTPUT_PROFILE, + PROP_INTENT, +}; + +static void get_property (GObject *object, guint property_id, GValue *value, GParamSpec *pspec); +static void set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec); +static RS_IMAGE16 *get_image(RSFilter *filter); +static RSIccProfile *get_icc_profile(RSFilter *filter); + +static RSFilterClass *rs_lcms_parent_class = NULL; + +G_MODULE_EXPORT void +rs_plugin_load(RSPlugin *plugin) +{ + rs_lcms_get_type(G_TYPE_MODULE(plugin)); +} + +static void +rs_lcms_class_init(RSLcmsClass *klass) +{ + RSFilterClass *filter_class = RS_FILTER_CLASS (klass); + GObjectClass *object_class = G_OBJECT_CLASS(klass); + + rs_lcms_parent_class = g_type_class_peek_parent (klass); + + object_class->get_property = get_property; + object_class->set_property = set_property; + + g_object_class_install_property(object_class, + PROP_OUTPUT_PROFILE, g_param_spec_object ( + "output-profile", "Output profile", "The profile to use for output", + RS_TYPE_ICC_PROFILE, G_PARAM_READWRITE) + ); + g_object_class_install_property(object_class, + PROP_INTENT, g_param_spec_enum ( + "intent", "Intent", "Rendering intent", + RS_TYPE_ICC_INTENT, RS_ICC_INTENT_PERCEPTUAL, G_PARAM_READWRITE)); + + filter_class->name = "Little CMS color transform filter"; + filter_class->get_image = get_image; + filter_class->get_icc_profile = get_icc_profile; +} + +static void +rs_lcms_init(RSLcms *lcms) +{ + lcms->profile = NULL; + lcms->input_profile = NULL; + lcms->output_profile = NULL; + lcms->transform = NULL; + lcms->intent = INTENT_PERCEPTUAL; + lcms->dirty = TRUE; + cmsErrorAction(LCMS_ERROR_SHOW); +} + +static void +get_property(GObject *object, guint property_id, GValue *value, GParamSpec *pspec) +{ + RSLcms *lcms = RS_LCMS(object); + + switch (property_id) + { + case PROP_INPUT_PROFILE: + g_value_set_object(value, lcms->input_profile); + break; + case PROP_OUTPUT_PROFILE: + g_value_set_object(value, lcms->output_profile); + break; + case PROP_INTENT: + g_value_set_enum(value, lcms->intent); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + } +} + +static void +set_property(GObject *object, guint property_id, const GValue *value, GParamSpec *pspec) +{ + RSLcms *lcms = RS_LCMS(object); + + switch (property_id) + { + case PROP_OUTPUT_PROFILE: + if (lcms->profile) + { + g_object_unref(lcms->profile); + lcms->profile = NULL; + } + lcms->profile = g_value_get_object(value); + g_assert(RS_IS_ICC_PROFILE(lcms->profile)); + g_object_ref(lcms->profile); + lcms->dirty = TRUE; + break; + case PROP_INTENT: + lcms->intent = g_value_get_enum(value); + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + } +} + +static guchar * +pack_rgb_w4(void *info, register WORD wOut[], register LPBYTE output) +{ + *(LPWORD) output = wOut[0]; output+= 2; + *(LPWORD) output = wOut[1]; output+= 2; + *(LPWORD) output = wOut[2]; output+= 4; + return(output); +} + +static guchar * +unroll_rgb_w4(void *info, register WORD wIn[], register LPBYTE accum) +{ + wIn[0] = *(LPWORD) accum; accum+= 2; + wIn[1] = *(LPWORD) accum; accum+= 2; + wIn[2] = *(LPWORD) accum; accum+= 4; + return(accum); +} + +static gboolean +cms_init(RSLcms *lcms) +{ + gboolean ret = FALSE; +printf("cms_init(%p)\n", lcms); + if (!lcms->dirty) + return TRUE; + g_assert(RS_IS_ICC_PROFILE(lcms->profile)); + + if (lcms->dirty) + { + gchar *map; + gsize map_length; + + /* Get input profile */ + RSIccProfile *profile = rs_filter_get_icc_profile(RS_FILTER(lcms)->previous); + if (lcms->input_profile) + cmsCloseProfile(lcms->input_profile); + rs_icc_profile_get_data(profile, &map, &map_length); + lcms->input_profile = cmsOpenProfileFromMem(map, map_length); + g_free(map); + g_object_unref(profile); + g_assert(lcms->input_profile != NULL); + + /* Output profile */ + if (lcms->output_profile) + cmsCloseProfile(lcms->output_profile); + g_assert(RS_IS_ICC_PROFILE(lcms->profile)); + rs_icc_profile_get_data(lcms->profile, &map, &map_length); + lcms->output_profile = cmsOpenProfileFromMem(map, map_length); + g_free(map); + g_assert(lcms->output_profile != NULL); + + if (lcms->transform) + cmsDeleteTransform(lcms->transform); + + lcms->transform = cmsCreateTransform( + lcms->input_profile, TYPE_RGBA_16, + lcms->output_profile, TYPE_RGBA_16, + lcms->intent, cmsFLAGS_HIGHRESPRECALC); + + if (lcms->transform) + { + /* FIXME: Port rs_cms_guess_gamma() */ + cmsSetUserFormatters(lcms->transform, TYPE_RGB_16, unroll_rgb_w4, TYPE_RGBA_16, pack_rgb_w4); + + lcms->dirty = FALSE; + ret = TRUE; + } + else + g_warning("lcms->transform == NULL"); + } + + return ret; +} + +typedef struct { + RSLcms *lcms; + gint start_y; + gint end_y; + RS_IMAGE16 *input; + RS_IMAGE16 *output; + GThread *threadid; +} ThreadInfo; + +static gpointer +transform_thread(gpointer _thread_info) +{ + gint row; + ThreadInfo* t = _thread_info; + + for(row=t->start_y; rowend_y; row++) + { + gushort *src = GET_PIXEL(t->input, 0, row); + gushort *dest = GET_PIXEL(t->output, 0, row); + cmsDoTransform(t->lcms->transform, src, dest, t->input->w); + } + g_thread_exit(NULL); + + return NULL; /* Make the compiler shut up - we'll never return */ +} + +static RS_IMAGE16 * +get_image(RSFilter *filter) +{ + guint i, y_offset, y_per_thread, threaded_h; + const guint threads = rs_get_number_of_processor_cores(); + RSLcms *lcms = RS_LCMS(filter); + RS_IMAGE16 *input = rs_filter_get_image(filter->previous); + RS_IMAGE16 *output = NULL; + + if (!cms_init(lcms)) + return input; + + g_assert(input != NULL); + g_assert(input->pixelsize == 4); + g_assert(input->w > 0); + g_assert(input->h > 0); + g_assert(lcms->transform != NULL); + + output = rs_image16_copy(input, TRUE); + + ThreadInfo *t = g_new(ThreadInfo, threads); + threaded_h = input->h; + y_per_thread = (threaded_h + threads-1)/threads; + y_offset = 0; + + /* Set up job description for individual threads */ + for (i = 0; i < threads; i++) + { + t[i].lcms = lcms; + t[i].input = input; + t[i].output = output; + t[i].start_y = y_offset; + y_offset += y_per_thread; + y_offset = MIN(input->h, y_offset); + t[i].end_y = y_offset; + + t[i].threadid = g_thread_create(transform_thread, &t[i], TRUE, NULL); + } + + /* Wait for threads to finish */ + for(i = 0; i < threads; i++) + g_thread_join(t[i].threadid); + + g_free(t); + + g_object_unref(input); + return output; +} + +static RSIccProfile * +get_icc_profile(RSFilter *filter) +{ + RSLcms *lcms = RS_LCMS(filter); + + return lcms->profile; +}