void BrisaControlPoint::replyFinished(QNetworkReply *reply) { QTemporaryFile *rootXml = new QTemporaryFile(); if (!rootXml->open()) { qWarning() << "Brisa Control Point: Failed to open file for writing root XML."; } else { rootXml->write(reply->readAll()); rootXml->seek(0); QUrl *urlBase = new QUrl(reply->url()); BrisaControlPointDevice *device = new BrisaControlPointDevice(rootXml, urlBase); /* Fix embedded devices host/port attributes */ QList<BrisaControlPointService*> serviceList = device->getServiceList(); foreach(BrisaControlPointService *s, serviceList) { s->setAttribute(BrisaControlPointService::Host, urlBase->host()); s->setAttribute(BrisaControlPointService::Port, QString().setNum(urlBase->port())); } rootXml->remove(); delete rootXml; delete urlBase; // deleteLater as per Qt documentation (see Detailed Description section of // QNetworkAccessManager class documentation for more details; reply->deleteLater(); emit deviceFound(device); }
QString WebPuppeteerTab::printBase64() { QTemporaryFile t; if (!t.open()) return QString(); if (!print(t.fileName())) return QString(); QByteArray data = t.readAll(); t.remove(); return QString::fromLatin1(data.toBase64()); }
QString GetTemporaryName (const QString& pattern) { QTemporaryFile file (QDir::tempPath () + "/" + pattern); file.open (); QString name = file.fileName (); file.close (); file.remove (); return name; }
void ProcessInputChannel::initialize() { _backgroundOutputPipe = new QLocalSocket(); QObject::connect( _backgroundOutputPipe, SIGNAL(connected()), this, SLOT(onOutputPipeConnectionMade()) ); _backgroundOutputPipe->connectToServer(_mainProcessServerName,QLocalSocket::ReadWrite); std::cout << "Attempting connection to " << _mainProcessServerName.toStdString() << std::endl; _backgroundIPCServer = new QLocalServer(); QObject::connect( _backgroundIPCServer,SIGNAL(newConnection()),this,SLOT(onNewConnectionPending()) ); QString tmpFileName; #if defined(Q_OS_WIN) tmpFileName += QString::fromUtf8("//./pipe"); tmpFileName += QLatin1Char('/'); tmpFileName += QString::fromUtf8(NATRON_APPLICATION_NAME); tmpFileName += QString::fromUtf8("_INPUT_SOCKET"); #endif { #if defined(Q_OS_UNIX) QTemporaryFile tmpf(tmpFileName); tmpFileName = tmpf.fileName(); tmpf.remove(); #else QTemporaryFile tmpf; tmpf.open(); QString tmpFilePath = tmpf.fileName(); QString baseName; int lastSlash = tmpFilePath.lastIndexOf(QLatin1Char('/')); if (lastSlash != -1 && lastSlash < tmpFilePath.size() - 1) { baseName = tmpFilePath.mid(lastSlash + 1); } else { baseName = tmpFilePath; } tmpFileName += baseName; tmpf.remove(); #endif } _backgroundIPCServer->listen(tmpFileName); if ( !_backgroundOutputPipe->waitForConnected(5000) ) { //< blocking, we wait for the server to respond std::cout << "WARNING: The GUI application failed to respond, canceling this process will not be possible" " unless it finishes or you kill it." << std::endl; } writeToOutputChannel( QString::fromUtf8(kBgProcessServerCreatedShort) + tmpFileName ); ///we wait for the GUI app to connect its socket to this server, we let it 5 sec to reply _backgroundIPCServer->waitForNewConnection(5000); ///since we're still not returning the event loop, just process them manually in case ///Qt didn't caught the new connection pending. QCoreApplication::processEvents(); }
QString QTAIMCriticalPointLocator::temporaryFileName() { QTemporaryFile temporaryFile; temporaryFile.open(); QString temporaryFileName=temporaryFile.fileName(); temporaryFile.close(); temporaryFile.remove(); // wait for temporary file to be deleted QDir dir; do { // Nothing } while ( dir.exists(temporaryFileName) ); return temporaryFileName; }
void CMakeParserTest::testParserWithBadData() { QFETCH( QString, text ); QTemporaryFile tempFile; tempFile.setAutoRemove( false ); tempFile.open(); if ( !QFile::exists( tempFile.fileName() ) ) QFAIL( "Unable to open temporary file" ); tempFile.write( text.toUtf8() ); QString tempName = tempFile.fileName(); tempFile.close(); //hacks to the get name of the file // CMakeAst* ast = new CMakeAst; // bool parseError = CMakeListsParser::parseCMakeFile( ast, qPrintable( tempName ) ); // delete ast; // QVERIFY( parseError == true ); tempFile.remove(); }
void CMakeParserTest::testLexerWithFile() { QTemporaryFile tempFile; tempFile.setAutoRemove( false ); tempFile.open(); if ( !QFile::exists( tempFile.fileName() ) ) QFAIL( "Unable to open temporary file" ); QString tempName = tempFile.fileName(); tempFile.close(); //hacks to the get name of the file cmListFileLexer* lexer = cmListFileLexer_New(); if ( !lexer ) QFAIL( "unable to create lexer" ); QVERIFY( cmListFileLexer_SetFileName( lexer, qPrintable( tempName ) ) ); cmListFileLexer_Delete( lexer ); tempFile.remove(); }
bool SevenZip::extract() { m_sevenz.setProgram(m_sevenZip); QTemporaryFile progress; progress.open(); QStringList args; args << "x" << "-y" << m_archiveFile << m_outputDir #ifndef Q_OS_MAC << "-bsp2"; #else ; #endif QStringList env = QProcess::systemEnvironment(); env << "VDPAU_DRIVER=va_gl"; m_sevenz.setArguments(args); m_sevenz.setStandardErrorFile(progress.fileName()); qDebug() << m_sevenz.program() << m_sevenz.arguments().join(" "); m_sevenz.start(); m_sevenz.waitForStarted(-1); #ifdef Q_OS_LINUX QProcess::execute(QString("ionice -c3 -p %1").arg(m_sevenz.pid())); #endif m_szpp->setProgressName(progress.fileName()); m_szpp->start(); m_sevenz.waitForFinished(-1); m_szpp->wait(); progress.close(); progress.remove(); qDebug() << m_sevenz.exitStatus() << m_sevenz.exitCode(); return (m_sevenz.exitStatus() == QProcess::NormalExit) && (0 == m_sevenz.exitCode()); }
void tst_QTemporaryFile::removeAndReOpen() { QString fileName; { QTemporaryFile file; file.open(); fileName = file.fileName(); QVERIFY(QFile::exists(fileName)); file.remove(); QVERIFY(!QFile::exists(fileName)); QVERIFY(file.open()); QCOMPARE(QFileInfo(file.fileName()).path(), QFileInfo(fileName).path()); fileName = file.fileName(); QVERIFY(QFile::exists(fileName)); } QVERIFY(!QFile::exists(fileName)); }
void ArchivBuilder::build( QByteArray stubData, QString fileName ) { QTemporaryFile tmpArchiv; tmpArchiv.open(); qDebug() << "Will create temporarty file: " << tmpArchiv.fileName(); QDataStream ds( &tmpArchiv ); ds.writeRawData( stubData, stubData.size() ); // Set dataMarker for( uint i = 0; i < ArchivBuilder::DATA_MARKER_LENGTH - 1; i++ ) { ds.writeRawData( ArchivBuilder::DATA_MARKER + i , 1 ); } // qDebug() << "Marker size: " << ArchivBuilder::DATA_MARKER_LENGTH; ds.writeRawData( ArchivBuilder::DATA_MARKER_REPLACECHAR + 0 , 1 ); QByteArray indexData = _index->compressedIndexData(); int indexSize = indexData.size(); qDebug() << "Index size: " << indexSize; QString indexSizeString; indexSizeString.setNum( indexSize ); ds.writeRawData( indexSizeString.toAscii(), indexSizeString.toAscii().size() ); ds.writeRawData( "\n", 1 ); // qDebug() << "Wrote size string: " << indexSizeString.toAscii(); ds.writeRawData( indexData, indexData.size() ); QByteArray archivData = _data->data(); ds.writeRawData( archivData, archivData.size() ); qDebug() << "Wrote data section of size: " << archivData.size(); if ( QFileInfo( fileName ).exists() ) { QFile( fileName ).remove(); // QFile( fileName ).rename( QString( "%1_back_%2" ).arg( fileName ).arg( RedBullPlayer::Tools::UuidCreator::create() ) ); } if( tmpArchiv.copy( fileName ) ) { qDebug() << "Created Archive at: " << QFileInfo( fileName ) .absoluteFilePath(); } else { qWarning() << "Could not copy archiv file to: " << QFileInfo( fileName ) .absoluteFilePath(); } qDebug() << "Will create temporarty file: " << tmpArchiv.fileName(); tmpArchiv.close(); tmpArchiv.remove(); }
QString System::serializeEntryToOutbox (Entry * entry) { if (entry == 0) { qWarning() << "Null entry not accepted"; return ""; } // Create path if needed QDir dir; if(!(dir.exists(entryOutputPath ()))) { if(!dir.mkpath(entryOutputPath ())) { qCritical() << "Could not create path" << dir.absolutePath(); return ""; } } // Start with template QString entryPath = entryOutputPath () + "/entry_XXXXXX.xml"; // Make temp file QTemporaryFile tempFile (entryPath); tempFile.setAutoRemove (false); if (tempFile.open()) { entryPath = tempFile.fileName(); tempFile.close(); } else { qWarning() << "Can't create temp file" << tempFile.fileName(); return ""; } // Try to serialize if (entry->serialize(entryPath)) { qDebug() << "Entry serialized to" << entryPath; return entryPath; } else { qCritical() << "Failed to serialize entry to" << entryPath; // Clean out temp file left behind tempFile.remove (); return ""; } }
QString KCExecutor::getNewConsole() { /* * For more information about xTerm, please visit: * http://publib.boulder.ibm.com/infocenter/pseries/v5r3/index.jsp?topic=/com.ibm.aix.cmds/doc/aixcmds6/xterm.htm * * Use a temp file to receive tty destination. * */ QTemporaryFile ttyReceiver; if(ttyReceiver.open()) { QStringList args; //Reset console. QSharedPointer<QProcess> console; console.reset(new QProcess); //Get default terminal. Terminal terminal=KCRunner::getDefaultTerminal(); args<<"-hold"<<"-e"<<"tty>" + ttyReceiver.fileName() +"; while :;do sleep 3600;done"; console->start(QLatin1String(terminal.terminal_name), args); QTextStream _textIn(&ttyReceiver); QString tty; tty.clear(); while(tty.length()==0) { tty=QString(_textIn.readAll()); } tty.remove("\n"); ttyReceiver.close(); ttyReceiver.remove(); //Save console. KCExecutor::getInstance()->consoles[tty]=QSharedPointer<QProcess>(console); return QString(tty); } return QString(""); }
void ExportThread::run() { QList< QStringList > archived_books; QHash<QString, QList<QStringList> > archive_map; // archive_name => book_info QStringList books_ids; QPair<QString, QString> pair; QStringList bi; QString basename; foreach (int book_id, p->books) { pair = Eclibrus::Db::archivedBookFile(book_id); basename = Eclibrus::Plain::bookFileName(book_id); if (!archive_map.contains(pair.first)) { archive_map[pair.first] = QList<QStringList>(); } bi.clear(); bi << pair.second << basename; archive_map[pair.first] << bi; } int total_books = p->books.size(); QString library_path = Eclibrus::Config::librusecLibraryPath() + QDir::separator(); QString archive_path; QString output_path; QFileInfo fi; const int INITIAL_PROGRESS = 2; emit progress(INITIAL_PROGRESS); float ppf = (100 - INITIAL_PROGRESS) / total_books; int n = 0; int percent = 0; switch (p->di.devType) { case Eclibrus::DeviceInfo::MSD: { // copy books to mass storage devuce foreach (const QString & archive, archive_map.keys()) { archive_path = library_path + archive; foreach (const QStringList & book_info, archive_map[archive]) { ++n; output_path = p->outputDir + QDir::separator() + book_info[1] + ".fb2.zip"; fi.setFile(output_path); if (true/*!fi.exists()*/) { FB2::exportBookToArchive(archive_path, book_info[0], output_path); } else { qDebug() << "file already exists:" << output_path; } percent = (int)(ppf*n); emit progress(percent+INITIAL_PROGRESS); } } break; } case Eclibrus::DeviceInfo::WEBDAV: { QWebDav wd; QUrl uri(p->di.uri); QString host = uri.host(); int port = uri.port(); if (port == -1) { port = 80; } wd.connectToHost(host, port, uri.path(), uri.userName(), uri.password()); if (QWebDav::NoError != wd.lastError()) { qWarning() << "Failed to init WebDav link: " << p->di.uri; return; } // upload books to WEBDAV device // p->outputDir is a collection path on webdav device, files should be placed there foreach (const QString & archive, archive_map.keys()) { archive_path = library_path + archive; foreach (const QStringList & book_info, archive_map[archive]) { ++n; // export to temporary file QTemporaryFile tf; tf.setAutoRemove(false); tf.open(); output_path = tf.fileName(); qDebug() << "filename:" << output_path; tf.close(); FB2::exportBookToArchive(archive_path, book_info[0], output_path); // now copy file "output_path" to the device QString webdavName = p->outputDir + "/" + book_info[1] + ".fb2.zip"; qDebug() << "webdav name" << webdavName; wd.put(output_path, webdavName); if (QWebDav::NoError != wd.lastError()) { qWarning() << "Failed to copy local file to WebDav device"; } tf.remove(); } } break; }
// Convienence function to send notifications. This function does some processing // of the arguments. In these functions: // expire_timeout: The amount of time in milliseconds the message is shown. // A value of -1 means timeout is based on server's settings. // overwrite : Will overwrite the previous message sent from this function. // It will not overwrite notifications sent by other programs. // // // Show notification with summary, app_name, and body text void NotifyClient::sendNotification () { // make sure we have a connection we can send the notification to. if (! b_validconnection) return; // variables QString app_name = s_app_name; quint32 replaces_id = 0; QString app_icon = ""; QString body = ""; QString summary = s_summary; QStringList actions = QStringList(); QVariantMap hints; int expire_timeout = i_expire_timeout; // set replaces_id if (b_overwrite) replaces_id = current_id; // assemble the hints hints.clear(); hints.insert("urgency", QVariant::fromValue(static_cast<uchar>(i_urgency)) ); //if (! app_icon.isEmpty() ) hints.insert("image-path", QVariant::fromValue(app_icon)); // make sure we can display the text on this server if (sl_capabilities.contains("body", Qt::CaseInsensitive) ) { body = s_body; if (! sl_capabilities.contains ("body-markup", Qt::CaseInsensitive) ) { QTextDocument td; td.setHtml(body); body = td.toPlainText(); } // if server cannot display markup } // if capabilities contains body // process the icon, if we are using a fallback icon create a temporary file to hold it QTemporaryFile* tempfileicon = NULL; if (! s_icon.isEmpty() ) { if (QFile::exists(s_icon) ) { tempfileicon = new QTemporaryFile(this); tempfileicon->setAutoRemove(false); if (tempfileicon->open() ) { QPixmap px = QPixmap(s_icon); px.save(tempfileicon->fileName(),"PNG"); app_icon = tempfileicon->fileName().prepend("file://"); } // if tempfileicon could be opened } // if s_icon exists as a disk file // assume s_icon exists as a theme icon, don't check it here. That // check needs to be done in the calling program. else app_icon = s_icon; } // if s_icon is not empty QDBusReply<quint32> reply = notifyclient->call(QLatin1String("Notify"), app_name, replaces_id, app_icon, summary, body, actions, hints, expire_timeout); if (reply.isValid() ) { current_id = reply.value(); if (file_map.contains(current_id) && tempfileicon != NULL) { if (b_overwrite) { file_map.value(current_id)->remove(); delete file_map.value(current_id); file_map.remove(current_id); } // if else { tempfileicon->remove(); delete tempfileicon; tempfileicon = NULL; } // else } // if contains current_id and not NULL if (tempfileicon != NULL) file_map[current_id] = tempfileicon; } // if reply is valid else #if QT_VERSION >= 0x050400 qCritical("CMST - Error reply received to the Notify method: %s", qUtf8Printable(reply.error().message()) ); #else qCritical("CMST - Error reply received to the Notify method: %s", qPrintable(reply.error().message()) ); #endif return; }
ProcessHandler::ProcessHandler(const QString & projectPath, const NodePtr& writer) : _process(new QProcess) , _writer(writer) , _ipcServer(0) , _bgProcessOutputSocket(0) , _bgProcessInputSocket(0) , _earlyCancel(false) , _processLog() , _processArgs() { ///setup the server used to listen the output of the background process _ipcServer = new QLocalServer(); QObject::connect( _ipcServer, SIGNAL(newConnection()), this, SLOT(onNewConnectionPending()) ); QString tmpFileName; #if defined(Q_OS_WIN) tmpFileName += QString::fromUtf8("//./pipe"); tmpFileName += QLatin1Char('/'); tmpFileName += QString::fromUtf8(NATRON_APPLICATION_NAME); tmpFileName += QString::fromUtf8("_INPUT_SOCKET"); #endif { #if defined(Q_OS_UNIX) QTemporaryFile tmpf(tmpFileName); tmpf.open(); tmpFileName = tmpf.fileName(); tmpf.remove(); #else QTemporaryFile tmpf; tmpf.open(); QString tmpFilePath = tmpf.fileName(); QString baseName; int lastSlash = tmpFilePath.lastIndexOf( QLatin1Char('/') ); if ( (lastSlash != -1) && (lastSlash < tmpFilePath.size() - 1) ) { baseName = tmpFilePath.mid(lastSlash + 1); } else { baseName = tmpFilePath; } tmpFileName += baseName; tmpf.remove(); #endif } _ipcServer->listen(tmpFileName); _processArgs << QString::fromUtf8("-b") << QString::fromUtf8("-w") << QString::fromUtf8( writer->getScriptName_mt_safe().c_str() ); _processArgs << QString::fromUtf8("--IPCpipe") << tmpFileName; _processArgs << projectPath; ///connect the useful slots of the process QObject::connect( _process, SIGNAL(readyReadStandardOutput()), this, SLOT(onStandardOutputBytesWritten()) ); QObject::connect( _process, SIGNAL(readyReadStandardError()), this, SLOT(onStandardErrorBytesWritten()) ); QObject::connect( _process, SIGNAL(error(QProcess::ProcessError)), this, SLOT(onProcessError(QProcess::ProcessError)) ); QObject::connect( _process, SIGNAL(finished(int,QProcess::ExitStatus)), this, SLOT(onProcessEnd(int,QProcess::ExitStatus)) ); ///start the process _processLog.push_back( tr("Starting background rendering: %1 %2") .arg( QCoreApplication::applicationFilePath() ) .arg( _processArgs.join( QString::fromUtf8(" ") ) ) ); }
void BootloaderInstallHex::installStage2(void) { emit logItem(tr("Adding bootloader to firmware file"), LOGINFO); QCoreApplication::processEvents(); // local temp file QTemporaryFile tempbin; tempbin.open(); QString tempbinName = tempbin.fileName(); tempbin.close(); // get temporary files filenames -- external tools need this. m_descrambled.open(); QString descrambledName = m_descrambled.fileName(); m_descrambled.close(); m_tempfile.open(); QString tempfileName = m_tempfile.fileName(); m_tempfile.close(); int origin = 0; switch(m_model) { case 3: origin = 0x3f0000; break; case 2: case 1: origin = 0x1f0000; break; default: origin = 0; break; } // iriver decode already done in stage 1 int result; if((result = mkboot_iriver(descrambledName.toLocal8Bit().constData(), tempfileName.toLocal8Bit().constData(), tempbinName.toLocal8Bit().constData(), origin)) < 0) { QString error; switch(result) { case -1: error = tr("could not open input file"); break; case -2: error = tr("reading header failed"); break; case -3: error = tr("reading firmware failed"); break; case -4: error = tr("can't open bootloader file"); break; case -5: error = tr("reading bootloader file failed"); break; case -6: error = tr("can't open output file"); break; case -7: error = tr("writing output file failed"); break; } emit logItem(tr("Error in patching: %1").arg(error), LOGERROR); emit done(true); return; } QTemporaryFile targethex; targethex.open(); QString targethexName = targethex.fileName(); if((result = iriver_encode(tempbinName.toLocal8Bit().constData(), targethexName.toLocal8Bit().constData(), FALSE)) < 0) { emit logItem(tr("Error in scramble: %1").arg(scrambleError(result)), LOGERROR); targethex.close(); emit done(true); return; } // finally check the md5sum of the created file QByteArray filedata; filedata = targethex.readAll(); targethex.close(); QString hash = QCryptographicHash::hash(filedata, QCryptographicHash::Md5).toHex(); qDebug() << "[BootloaderInstallHex] created hexfile hash:" << hash; emit logItem(tr("Checking modified firmware file"), LOGINFO); if(hash != QString(md5sums[m_hashindex].patched)) { emit logItem(tr("Error: modified file checksum wrong"), LOGERROR); targethex.remove(); emit done(true); return; } // finally copy file to player targethex.copy(m_blfile); emit logItem(tr("Success: modified firmware file created"), LOGINFO); logInstall(LogAdd); emit done(false); return; }
int DNGWriter::convert() { d->cancel = false; try { if (inputFile().isEmpty()) { kDebug( 51000 ) << "DNGWriter: No input file to convert. Aborted..." << endl; return -1; } QFileInfo inputInfo(inputFile()); QString dngFilePath = outputFile(); if (dngFilePath.isEmpty()) { dngFilePath = QString(inputInfo.baseName() + QString(".dng")); } QFileInfo outputInfo(dngFilePath); QByteArray rawData; DcrawInfoContainer identify; // ----------------------------------------------------------------------------------------- kDebug( 51000 ) << "DNGWriter: Loading RAW data from " << inputInfo.fileName() << endl; KDcraw rawProcessor; if (!rawProcessor.extractRAWData(inputFile(), rawData, identify)) { kDebug( 51000 ) << "DNGWriter: Loading RAW data failed. Aborted..." << endl; return -1; } if (d->cancel) return -2; int width = identify.imageSize.width(); int height = identify.imageSize.height(); int pixelRange = 16; kDebug( 51000 ) << "DNGWriter: Raw data loaded:" << endl; kDebug( 51000 ) << "--- Data Size: " << rawData.size() << " bytes" << endl; kDebug( 51000 ) << "--- Date: " << identify.dateTime.toString(Qt::ISODate) << endl; kDebug( 51000 ) << "--- Make: " << identify.make << endl; kDebug( 51000 ) << "--- Model: " << identify.model << endl; kDebug( 51000 ) << "--- Size: " << width << "x" << height << endl; kDebug( 51000 ) << "--- Orientation: " << identify.orientation << endl; kDebug( 51000 ) << "--- Top margin: " << identify.topMargin << endl; kDebug( 51000 ) << "--- Left margin: " << identify.leftMargin << endl; kDebug( 51000 ) << "--- Filter: " << identify.filterPattern << endl; kDebug( 51000 ) << "--- Colors: " << identify.rawColors << endl; kDebug( 51000 ) << "--- Black: " << identify.blackPoint << endl; kDebug( 51000 ) << "--- White: " << identify.whitePoint << endl; kDebug( 51000 ) << "--- CAM->XYZ:" << endl; QString matrixVal; for(int i=0; i<12; i+=3) { kDebug( 51000 ) << " " << QString().sprintf("%03.4f %03.4f %03.4f", identify.cameraXYZMatrix[0][ i ], identify.cameraXYZMatrix[0][i+1], identify.cameraXYZMatrix[0][i+2]) << endl; } // Check if CFA layout is supported by DNG SDK. int bayerMosaic; if (identify.filterPattern == QString("GRBGGRBGGRBGGRBG")) { bayerMosaic = 0; } else if (identify.filterPattern == QString("RGGBRGGBRGGBRGGB")) { bayerMosaic = 1; } else if (identify.filterPattern == QString("BGGRBGGRBGGRBGGR")) { bayerMosaic = 2; } else if (identify.filterPattern == QString("GBRGGBRGGBRGGBRG")) { bayerMosaic = 3; } else { kDebug( 51000 ) << "DNGWriter: Bayer mosaic not supported. Aborted..." << endl; return -1; } // Check if number of Raw Color components is supported. if (identify.rawColors != 3) { kDebug( 51000 ) << "DNGWriter: Number of Raw color components not supported. Aborted..." << endl; return -1; } /* // NOTE: code to hack RAW data extraction QString rawdataFilePath(inputInfo.baseName() + QString(".dat")); QFileInfo rawdataInfo(rawdataFilePath); QFile rawdataFile(rawdataFilePath); if (!rawdataFile.open(QIODevice::WriteOnly)) { kDebug( 51000 ) << "DNGWriter: Cannot open file to write RAW data. Aborted..." << endl; return -1; } QDataStream rawdataStream(&rawdataFile); rawdataStream.writeRawData(rawData.data(), rawData.size()); rawdataFile.close(); */ // ----------------------------------------------------------------------------------------- kDebug( 51000 ) << "DNGWriter: Formating RAW data to memory" << endl; std::vector<unsigned short> raw_data; raw_data.resize(rawData.size()); const unsigned short* dp = (const unsigned short*)rawData.data(); for (uint i = 0; i < raw_data.size()/2; i++) { raw_data[i] = *dp; *dp++; } if (d->cancel) return -2; // ----------------------------------------------------------------------------------------- kDebug( 51000 ) << "DNGWriter: DNG memory allocation and initialization" << endl; dng_memory_allocator memalloc(gDefaultDNGMemoryAllocator); dng_memory_stream stream(memalloc); stream.Put(&raw_data.front(), raw_data.size()*sizeof(unsigned short)); dng_rect rect(height, width); DNGWriterHost host(d, &memalloc); // Unprocessed raw data. host.SetKeepStage1(true); // Linearized, tone curve processed data. host.SetKeepStage2(true); AutoPtr<dng_image> image(new dng_simple_image(rect, 1, ttShort, 1<<pixelRange, memalloc)); if (d->cancel) return -2; // ----------------------------------------------------------------------------------------- kDebug( 51000 ) << "DNGWriter: DNG IFD structure creation" << endl; dng_ifd ifd; ifd.fUsesNewSubFileType = true; ifd.fNewSubFileType = 0; ifd.fImageWidth = width; ifd.fImageLength = height; ifd.fBitsPerSample[0] = pixelRange; ifd.fBitsPerSample[1] = 0; ifd.fBitsPerSample[2] = 0; ifd.fBitsPerSample[3] = 0; ifd.fCompression = ccUncompressed; ifd.fPredictor = 1; ifd.fCFALayout = 1; // Rectangular (or square) layout. ifd.fPhotometricInterpretation = piCFA; ifd.fFillOrder = 1; ifd.fOrientation = identify.orientation; ifd.fSamplesPerPixel = 1; ifd.fPlanarConfiguration = 1; ifd.fXResolution = 0.0; ifd.fYResolution = 0.0; ifd.fResolutionUnit = 0; ifd.fUsesStrips = true; ifd.fUsesTiles = false; ifd.fTileWidth = width; ifd.fTileLength = height; ifd.fTileOffsetsType = 4; ifd.fTileOffsetsCount = 0; ifd.fSubIFDsCount = 0; ifd.fSubIFDsOffset = 0; ifd.fExtraSamplesCount = 0; ifd.fSampleFormat[0] = 1; ifd.fSampleFormat[1] = 1; ifd.fSampleFormat[2] = 1; ifd.fSampleFormat[3] = 1; ifd.fLinearizationTableType = 0; ifd.fLinearizationTableCount = 0; ifd.fLinearizationTableOffset = 0; ifd.fBlackLevelRepeatRows = 1; ifd.fBlackLevelRepeatCols = 1; ifd.fBlackLevel[0][0][0] = identify.blackPoint; ifd.fBlackLevelDeltaHType = 0; ifd.fBlackLevelDeltaHCount = 0; ifd.fBlackLevelDeltaHOffset = 0; ifd.fBlackLevelDeltaVType = 0; ifd.fBlackLevelDeltaVCount = 0; ifd.fBlackLevelDeltaVOffset = 0; ifd.fWhiteLevel[0] = identify.whitePoint; ifd.fWhiteLevel[1] = identify.whitePoint; ifd.fWhiteLevel[2] = identify.whitePoint; ifd.fWhiteLevel[3] = identify.whitePoint; ifd.fDefaultScaleH = dng_urational(1, 1); ifd.fDefaultScaleV = dng_urational(1, 1); ifd.fBestQualityScale = dng_urational(1, 1); ifd.fCFARepeatPatternRows = 0; ifd.fCFARepeatPatternCols = 0; ifd.fBayerGreenSplit = 0; ifd.fChromaBlurRadius = dng_urational(0, 0); ifd.fAntiAliasStrength = dng_urational(100, 100); ifd.fActiveArea = rect; ifd.fDefaultCropOriginH = dng_urational(0, 1); ifd.fDefaultCropOriginV = dng_urational(0, 1); ifd.fDefaultCropSizeH = dng_urational(width, 1); ifd.fDefaultCropSizeV = dng_urational(height, 1); ifd.fMaskedAreaCount = 0; ifd.fLosslessJPEGBug16 = false; ifd.fSampleBitShift = 0; ifd.ReadImage(host, stream, *image.Get()); if (d->cancel) return -2; // ----------------------------------------------------------------------------------------- kDebug( 51000 ) << "DNGWriter: DNG Negative structure creation" << endl; AutoPtr<dng_negative> negative(host.Make_dng_negative()); negative->SetDefaultScale(ifd.fDefaultScaleH, ifd.fDefaultScaleV); negative->SetDefaultCropOrigin(ifd.fDefaultCropOriginH, ifd.fDefaultCropOriginV); negative->SetDefaultCropSize(ifd.fDefaultCropSizeH, ifd.fDefaultCropSizeV); negative->SetActiveArea(ifd.fActiveArea); negative->SetModelName(identify.model.toAscii()); negative->SetLocalName(QString("%1 %2").arg(identify.make).arg(identify.model).toAscii()); negative->SetOriginalRawFileName(inputInfo.fileName().toAscii()); negative->SetColorChannels(3); negative->SetColorKeys(colorKeyRed, colorKeyGreen, colorKeyBlue); negative->SetBayerMosaic(bayerMosaic); negative->SetWhiteLevel(identify.whitePoint, 0); negative->SetWhiteLevel(identify.whitePoint, 1); negative->SetWhiteLevel(identify.whitePoint, 2); negative->SetBlackLevel(identify.blackPoint, 0); negative->SetBlackLevel(identify.blackPoint, 1); negative->SetBlackLevel(identify.blackPoint, 2); negative->SetBaselineExposure(0.0); negative->SetBaselineNoise(1.0); negative->SetBaselineSharpness(1.0); dng_orientation orientation; switch (identify.orientation) { case DcrawInfoContainer::ORIENTATION_180: orientation = dng_orientation::Rotate180(); break; case DcrawInfoContainer::ORIENTATION_90CCW: orientation = dng_orientation::Rotate90CCW(); break; case DcrawInfoContainer::ORIENTATION_90CW: orientation = dng_orientation::Rotate90CW(); break; default: // ORIENTATION_NONE orientation = dng_orientation::Normal(); break; } negative->SetBaseOrientation(orientation); negative->SetAntiAliasStrength(dng_urational(100, 100)); negative->SetLinearResponseLimit(1.0); negative->SetShadowScale( dng_urational(1, 1) ); negative->SetAnalogBalance(dng_vector_3(1.0, 1.0, 1.0)); // ------------------------------------------------------------------------------- // Set Camera->XYZ Color matrix as profile. dng_matrix_3by3 matrix(1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0); dng_matrix_3by3 camXYZ; AutoPtr<dng_camera_profile> prof(new dng_camera_profile); prof->SetName(QString("%1 %2").arg(identify.make).arg(identify.model).toAscii()); camXYZ[0][0] = identify.cameraXYZMatrix[0][0]; camXYZ[0][1] = identify.cameraXYZMatrix[0][1]; camXYZ[0][2] = identify.cameraXYZMatrix[0][2]; camXYZ[1][0] = identify.cameraXYZMatrix[0][3]; camXYZ[1][1] = identify.cameraXYZMatrix[1][0]; camXYZ[1][2] = identify.cameraXYZMatrix[1][1]; camXYZ[2][0] = identify.cameraXYZMatrix[1][2]; camXYZ[2][1] = identify.cameraXYZMatrix[1][3]; camXYZ[2][2] = identify.cameraXYZMatrix[2][0]; if (camXYZ.MaxEntry() == 0.0) kDebug( 51000 ) << "DNGWriter: Warning, camera XYZ Matrix is null" << endl; else matrix = camXYZ; prof->SetColorMatrix1((dng_matrix) matrix); prof->SetCalibrationIlluminant1(lsD65); negative->AddProfile(prof); // ------------------------------------------------------------------------------- // Clear "Camera WhiteXY" negative->SetCameraWhiteXY(dng_xy_coord()); // This settings break color on preview and thumbnail //negative->SetCameraNeutral(dng_vector_3(1.0, 1.0, 1.0)); if (d->cancel) return -2; // ----------------------------------------------------------------------------------------- kDebug( 51000 ) << "DNGWriter: Updating metadata to DNG Negative" << endl; dng_exif *exif = negative->GetExif(); exif->fModel.Set_ASCII(identify.model.toAscii()); exif->fMake.Set_ASCII(identify.make.toAscii()); // Time from original shot dng_date_time dt; dt.fYear = identify.dateTime.date().year(); dt.fMonth = identify.dateTime.date().month(); dt.fDay = identify.dateTime.date().day(); dt.fHour = identify.dateTime.time().hour(); dt.fMinute = identify.dateTime.time().minute(); dt.fSecond = identify.dateTime.time().second(); dng_date_time_info dti; dti.SetDateTime(dt); exif->fDateTimeOriginal = dti; exif->fDateTimeDigitized = dti; negative->UpdateDateTime(dti); long int num, den; long val; QString str; KExiv2 meta; if (meta.load(inputFile())) { // String Tags str = meta.getExifTagString("Exif.Image.Software"); if (!str.isEmpty()) exif->fSoftware.Set_ASCII(str.toAscii()); str = meta.getExifTagString("Exif.Image.ImageDescription"); if (!str.isEmpty()) exif->fImageDescription.Set_ASCII(str.toAscii()); str = meta.getExifTagString("Exif.Image.Artist"); if (!str.isEmpty()) exif->fArtist.Set_ASCII(str.toAscii()); str = meta.getExifTagString("Exif.Image.Copyright"); if (!str.isEmpty()) exif->fCopyright.Set_ASCII(str.toAscii()); str = meta.getExifTagString("Exif.Photo.UserComment"); if (!str.isEmpty()) exif->fUserComment.Set_ASCII(str.toAscii()); str = meta.getExifTagString("Exif.Image.CameraSerialNumber"); if (!str.isEmpty()) exif->fCameraSerialNumber.Set_ASCII(str.toAscii()); str = meta.getExifTagString("Exif.GPSInfo.GPSLatitudeRef"); if (!str.isEmpty()) exif->fGPSLatitudeRef.Set_ASCII(str.toAscii()); str = meta.getExifTagString("Exif.GPSInfo.GPSLongitudeRef"); if (!str.isEmpty()) exif->fGPSLongitudeRef.Set_ASCII(str.toAscii()); str = meta.getExifTagString("Exif.GPSInfo.GPSSatellites"); if (!str.isEmpty()) exif->fGPSSatellites.Set_ASCII(str.toAscii()); str = meta.getExifTagString("Exif.GPSInfo.GPSStatus"); if (!str.isEmpty()) exif->fGPSStatus.Set_ASCII(str.toAscii()); str = meta.getExifTagString("Exif.GPSInfo.GPSMeasureMode"); if (!str.isEmpty()) exif->fGPSMeasureMode.Set_ASCII(str.toAscii()); str = meta.getExifTagString("Exif.GPSInfo.GPSSpeedRef"); if (!str.isEmpty()) exif->fGPSSpeedRef.Set_ASCII(str.toAscii()); str = meta.getExifTagString("Exif.GPSInfo.GPSTrackRef"); if (!str.isEmpty()) exif->fGPSTrackRef.Set_ASCII(str.toAscii()); str = meta.getExifTagString("Exif.GPSInfo.GPSSpeedRef"); if (!str.isEmpty()) exif->fGPSSpeedRef.Set_ASCII(str.toAscii()); str = meta.getExifTagString("Exif.GPSInfo.GPSImgDirectionRef"); if (!str.isEmpty()) exif->fGPSSpeedRef.Set_ASCII(str.toAscii()); str = meta.getExifTagString("Exif.GPSInfo.GPSMapDatum"); if (!str.isEmpty()) exif->fGPSMapDatum.Set_ASCII(str.toAscii()); str = meta.getExifTagString("Exif.GPSInfo.GPSDestLatitudeRef"); if (!str.isEmpty()) exif->fGPSDestLatitudeRef.Set_ASCII(str.toAscii()); str = meta.getExifTagString("Exif.GPSInfo.GPSDestLongitudeRef"); if (!str.isEmpty()) exif->fGPSDestLongitudeRef.Set_ASCII(str.toAscii()); str = meta.getExifTagString("Exif.GPSInfo.GPSDestBearingRef"); if (!str.isEmpty()) exif->fGPSDestBearingRef.Set_ASCII(str.toAscii()); str = meta.getExifTagString("Exif.GPSInfo.GPSDestDistanceRef"); if (!str.isEmpty()) exif->fGPSDestDistanceRef.Set_ASCII(str.toAscii()); str = meta.getExifTagString("Exif.GPSInfo.GPSProcessingMethod"); if (!str.isEmpty()) exif->fGPSProcessingMethod.Set_ASCII(str.toAscii()); str = meta.getExifTagString("Exif.GPSInfo.GPSAreaInformation"); if (!str.isEmpty()) exif->fGPSAreaInformation.Set_ASCII(str.toAscii()); str = meta.getExifTagString("Exif.GPSInfo.GPSDateStamp"); if (!str.isEmpty()) exif->fGPSDateStamp.Set_ASCII(str.toAscii()); // Rational Tags if (meta.getExifTagRational("Exif.Photo.ExposureTime", num, den)) exif->fExposureTime = dng_urational(num, den); if (meta.getExifTagRational("Exif.Photo.FNumber", num, den)) exif->fFNumber = dng_urational(num, den); if (meta.getExifTagRational("Exif.Photo.ShutterSpeedValue", num, den)) exif->fShutterSpeedValue = dng_srational(num, den); if (meta.getExifTagRational("Exif.Photo.ApertureValue", num, den)) exif->fApertureValue = dng_urational(num, den); if (meta.getExifTagRational("Exif.Photo.BrightnessValue", num, den)) exif->fBrightnessValue = dng_srational(num, den); if (meta.getExifTagRational("Exif.Photo.ExposureBiasValue", num, den)) exif->fExposureBiasValue = dng_srational(num, den); if (meta.getExifTagRational("Exif.Photo.MaxApertureValue", num, den)) exif->fMaxApertureValue = dng_urational(num, den); if (meta.getExifTagRational("Exif.Photo.FocalLength", num, den)) exif->fFocalLength = dng_urational(num, den); if (meta.getExifTagRational("Exif.Photo.DigitalZoomRatio", num, den)) exif->fDigitalZoomRatio = dng_urational(num, den); if (meta.getExifTagRational("Exif.Photo.SubjectDistance", num, den)) exif->fSubjectDistance = dng_urational(num, den); if (meta.getExifTagRational("Exif.Image.BatteryLevel", num, den)) exif->fBatteryLevelR = dng_urational(num, den); if (meta.getExifTagRational("Exif.Photo.FocalPlaneXResolution", num, den)) exif->fFocalPlaneXResolution = dng_urational(num, den); if (meta.getExifTagRational("Exif.Photo.FocalPlaneYResolution", num, den)) exif->fFocalPlaneYResolution = dng_urational(num, den); if (meta.getExifTagRational("Exif.GPSInfo.GPSAltitude", num, den)) exif->fGPSAltitude = dng_urational(num, den); if (meta.getExifTagRational("Exif.GPSInfo.GPSDOP", num, den)) exif->fGPSDOP = dng_urational(num, den); if (meta.getExifTagRational("Exif.GPSInfo.GPSSpeed", num, den)) exif->fGPSSpeed = dng_urational(num, den); if (meta.getExifTagRational("Exif.GPSInfo.GPSTrack", num, den)) exif->fGPSTrack = dng_urational(num, den); if (meta.getExifTagRational("Exif.GPSInfo.GPSImgDirection", num, den)) exif->fGPSImgDirection = dng_urational(num, den); if (meta.getExifTagRational("Exif.GPSInfo.GPSDestBearing", num, den)) exif->fGPSDestBearing = dng_urational(num, den); if (meta.getExifTagRational("Exif.GPSInfo.GPSDestDistance", num, den)) exif->fGPSDestDistance = dng_urational(num, den); if (meta.getExifTagRational("Exif.GPSInfo.GPSLatitude", num, den)) exif->fGPSLatitude[0] = dng_urational(num, den); if (meta.getExifTagRational("Exif.GPSInfo.GPSLongitude", num, den)) exif->fGPSLongitude[0] = dng_urational(num, den); if (meta.getExifTagRational("Exif.GPSInfo.GPSTimeStamp", num, den)) exif->fGPSTimeStamp[0] = dng_urational(num, den); if (meta.getExifTagRational("Exif.GPSInfo.GPSDestLatitude", num, den)) exif->fGPSDestLatitude[0] = dng_urational(num, den); if (meta.getExifTagRational("Exif.GPSInfo.GPSDestLongitude", num, den)) exif->fGPSDestLongitude[0] = dng_urational(num, den); // Integer Tags if (meta.getExifTagLong("Exif.Photo.ExposureProgram", val)) exif->fExposureProgram = (uint32)val; if (meta.getExifTagLong("Exif.Photo.MeteringMode", val)) exif->fMeteringMode = (uint32)val; if (meta.getExifTagLong("Exif.Photo.LightSource", val)) exif->fLightSource = (uint32)val; if (meta.getExifTagLong("Exif.Photo.Flash", val)) exif->fFlash = (uint32)val; if (meta.getExifTagLong("Exif.Photo.SensingMethod", val)) exif->fSensingMethod = (uint32)val; if (meta.getExifTagLong("Exif.Photo.FileSource", val)) exif->fFileSource = (uint32)val; if (meta.getExifTagLong("Exif.Photo.SceneType", val)) exif->fSceneType = (uint32)val; if (meta.getExifTagLong("Exif.Photo.CustomRendered", val)) exif->fCustomRendered = (uint32)val; if (meta.getExifTagLong("Exif.Photo.ExposureMode", val)) exif->fExposureMode = (uint32)val; if (meta.getExifTagLong("Exif.Photo.WhiteBalance", val)) exif->fWhiteBalance = (uint32)val; if (meta.getExifTagLong("Exif.Photo.SceneCaptureType", val)) exif->fSceneCaptureType = (uint32)val; if (meta.getExifTagLong("Exif.Photo.GainControl", val)) exif->fGainControl = (uint32)val; if (meta.getExifTagLong("Exif.Photo.Contrast", val)) exif->fContrast = (uint32)val; if (meta.getExifTagLong("Exif.Photo.Saturation", val)) exif->fSaturation = (uint32)val; if (meta.getExifTagLong("Exif.Photo.Sharpness", val)) exif->fSharpness = (uint32)val; if (meta.getExifTagLong("Exif.Photo.SubjectDistanceRange", val)) exif->fSubjectDistanceRange = (uint32)val; if (meta.getExifTagLong("Exif.Photo.FocalLengthIn35mmFilm", val)) exif->fFocalLengthIn35mmFilm = (uint32)val; if (meta.getExifTagLong("Exif.Photo.ComponentsConfiguration", val)) exif->fComponentsConfiguration = (uint32)val; if (meta.getExifTagLong("Exif.Photo.PixelXDimension", val)) exif->fPixelXDimension = (uint32)val; if (meta.getExifTagLong("Exif.Photo.PixelYDimension", val)) exif->fPixelYDimension = (uint32)val; if (meta.getExifTagLong("Exif.Photo.FocalPlaneResolutionUnit", val)) exif->fFocalPlaneResolutionUnit = (uint32)val; if (meta.getExifTagLong("Exif.GPSInfo.GPSVersionID", val)) exif->fGPSVersionID = (uint32)val; if (meta.getExifTagLong("Exif.GPSInfo.GPSAltitudeRef", val)) exif->fGPSAltitudeRef = (uint32)val; if (meta.getExifTagLong("Exif.GPSInfo.GPSDifferential", val)) exif->fGPSDifferential = (uint32)val; } // Markernote backup. QByteArray mkrnts = meta.getExifTagData("Exif.Photo.MakerNote"); if (!mkrnts.isEmpty()) { kDebug( 51000 ) << "DNGWriter: Backup Makernote (" << mkrnts.size() << " bytes)" << endl; dng_memory_allocator memalloc(gDefaultDNGMemoryAllocator); dng_memory_stream stream(memalloc); stream.Put(mkrnts.data(), mkrnts.size()); AutoPtr<dng_memory_block> block(host.Allocate(mkrnts.size())); stream.SetReadPosition(0); stream.Get(block->Buffer(), mkrnts.size()); negative->SetMakerNote(block); negative->SetMakerNoteSafety(true); } if (d->backupOriginalRawFile) { kDebug( 51000 ) << "DNGWriter: Backup Original RAW file (" << inputInfo.size() << " bytes)" << endl; // Compress Raw file data to Zip archive. QTemporaryFile zipFile; if (!zipFile.open()) { kDebug( 51000 ) << "DNGWriter: Cannot open temporary file to write Zip Raw file. Aborted..." << endl; return -1; } KZip zipArchive(zipFile.fileName()); zipArchive.open(QIODevice::WriteOnly); zipArchive.setCompression(KZip::DeflateCompression); zipArchive.addLocalFile(inputFile(), inputFile()); zipArchive.close(); // Load Zip Archive in a byte array QFileInfo zipFileInfo(zipFile.fileName()); QByteArray zipRawFileData; zipRawFileData.resize(zipFileInfo.size()); QDataStream dataStream(&zipFile); dataStream.readRawData(zipRawFileData.data(), zipRawFileData.size()); kDebug( 51000 ) << "DNGWriter: Zipped RAW file size " << zipRawFileData.size() << " bytes" << endl; // Pass byte array to DNG sdk and compute MD5 fingerprint. dng_memory_allocator memalloc(gDefaultDNGMemoryAllocator); dng_memory_stream stream(memalloc); stream.Put(zipRawFileData.data(), zipRawFileData.size()); AutoPtr<dng_memory_block> block(host.Allocate(zipRawFileData.size())); stream.SetReadPosition(0); stream.Get(block->Buffer(), zipRawFileData.size()); dng_md5_printer md5; md5.Process(block->Buffer(), block->LogicalSize()); negative->SetOriginalRawFileData(block); negative->SetOriginalRawFileDigest(md5.Result()); negative->ValidateOriginalRawFileDigest(); zipFile.remove(); } if (d->cancel) return -2; // ----------------------------------------------------------------------------------------- kDebug( 51000 ) << "DNGWriter: Build DNG Negative" << endl; // Assign Raw image data. negative->SetStage1Image(image); // Compute linearized and range mapped image negative->BuildStage2Image(host); // Compute demosaiced image (used by preview and thumbnail) negative->BuildStage3Image(host); negative->SynchronizeMetadata(); negative->RebuildIPTC(); if (d->cancel) return -2; // ----------------------------------------------------------------------------------------- dng_preview_list previewList; // NOTE: something is wrong with Qt < 4.4.0 to import TIFF data as stream in QImage. #if QT_VERSION >= 0x40400 if (d->previewMode != DNGWriter::NONE) { kDebug( 51000 ) << "DNGWriter: DNG preview image creation" << endl; // Construct a preview image as TIFF format. AutoPtr<dng_image> tiffImage; dng_render tiff_render(host, *negative); tiff_render.SetFinalSpace(dng_space_sRGB::Get()); tiff_render.SetFinalPixelType(ttByte); tiff_render.SetMaximumSize(d->previewMode == MEDIUM ? 1280 : width); tiffImage.Reset(tiff_render.Render()); dng_image_writer tiff_writer; AutoPtr<dng_memory_stream> dms(new dng_memory_stream(gDefaultDNGMemoryAllocator)); tiff_writer.WriteTIFF(host, *dms, *tiffImage.Get(), piRGB, ccUncompressed, negative.Get(), &tiff_render.FinalSpace()); // Write TIFF preview image data to a temp JPEG file std::vector<char> tiff_mem_buffer(dms->Length()); dms->SetReadPosition(0); dms->Get(&tiff_mem_buffer.front(), tiff_mem_buffer.size()); dms.Reset(); QImage pre_image; if (!pre_image.loadFromData((uchar*)&tiff_mem_buffer.front(), tiff_mem_buffer.size(), "TIFF")) { kDebug( 51000 ) << "DNGWriter: Cannot load TIFF preview data in memory. Aborted..." << endl; return -1; } QTemporaryFile previewFile; if (!previewFile.open()) { kDebug( 51000 ) << "DNGWriter: Cannot open temporary file to write JPEG preview. Aborted..." << endl; return -1; } if (!pre_image.save(previewFile.fileName(), "JPEG", 90)) { kDebug( 51000 ) << "DNGWriter: Cannot save file to write JPEG preview. Aborted..." << endl; return -1; } // Load JPEG preview file data in DNG preview container. AutoPtr<dng_jpeg_preview> jpeg_preview; jpeg_preview.Reset(new dng_jpeg_preview); jpeg_preview->fPhotometricInterpretation = piYCbCr; jpeg_preview->fPreviewSize.v = pre_image.height(); jpeg_preview->fPreviewSize.h = pre_image.width(); jpeg_preview->fCompressedData.Reset(host.Allocate(previewFile.size())); QDataStream previewStream( &previewFile ); previewStream.readRawData(jpeg_preview->fCompressedData->Buffer_char(), previewFile.size()); AutoPtr<dng_preview> pp( dynamic_cast<dng_preview*>(jpeg_preview.Release()) ); previewList.Append(pp); previewFile.remove(); } #endif /* QT_VERSION >= 0x40400 */ if (d->cancel) return -2; // ----------------------------------------------------------------------------------------- kDebug( 51000 ) << "DNGWriter: DNG thumbnail creation" << endl; dng_image_preview thumbnail; dng_render thumbnail_render(host, *negative); thumbnail_render.SetFinalSpace(dng_space_sRGB::Get()); thumbnail_render.SetFinalPixelType(ttByte); thumbnail_render.SetMaximumSize(256); thumbnail.fImage.Reset(thumbnail_render.Render()); if (d->cancel) return -2; // ----------------------------------------------------------------------------------------- kDebug( 51000 ) << "DNGWriter: Creating DNG file " << outputInfo.fileName() << endl; dng_image_writer writer; dng_file_stream filestream(QFile::encodeName(dngFilePath), true); writer.WriteDNG(host, filestream, *negative.Get(), thumbnail, d->jpegLossLessCompression ? ccJPEG : ccUncompressed, &previewList); } catch (const dng_exception &exception) { int ret = exception.ErrorCode(); kDebug( 51000 ) << "DNGWriter: DNG SDK exception code (" << ret << ")" << endl; return ret; } catch (...) { kDebug( 51000 ) << "DNGWriter: DNG SDK exception code unknow" << endl; return dng_error_unknown; } kDebug( 51000 ) << "DNGWriter: DNG conversion complete..." << endl; return dng_error_none; }
NS_IMETHODIMP nsDeviceContextSpecQt::GetSurfaceForPrinter( gfxASurface** aSurface) { NS_ENSURE_ARG_POINTER(aSurface); *aSurface = nsnull; double width, height; mPrintSettings->GetEffectivePageSize(&width, &height); // If we're in landscape mode, we'll be rotating the output -- // need to swap width & height. PRInt32 orientation; mPrintSettings->GetOrientation(&orientation); if (nsIPrintSettings::kLandscapeOrientation == orientation) { double tmp = width; width = height; height = tmp; } // convert twips to points width /= TWIPS_PER_POINT_FLOAT; height /= TWIPS_PER_POINT_FLOAT; DO_PR_DEBUG_LOG(("\"%s\", %f, %f\n", mPath, width, height)); QTemporaryFile file; if(!file.open()) { return NS_ERROR_GFX_PRINTER_COULD_NOT_OPEN_FILE; } file.setAutoRemove(false); nsresult rv = NS_NewNativeLocalFile( nsDependentCString(file.fileName().toAscii().constData()), PR_FALSE, getter_AddRefs(mSpoolFile)); if (NS_FAILED(rv)) { file.remove(); return NS_ERROR_GFX_PRINTER_COULD_NOT_OPEN_FILE; } mSpoolName = file.fileName().toUtf8().constData(); mSpoolFile->SetPermissions(0600); nsCOMPtr<nsIFileOutputStream> stream = do_CreateInstance("@mozilla.org/network/file-output-stream;1"); rv = stream->Init(mSpoolFile, -1, -1, 0); if (NS_FAILED(rv)) return rv; PRInt16 format; mPrintSettings->GetOutputFormat(&format); nsRefPtr<gfxASurface> surface; gfxSize surfaceSize(width, height); if (format == nsIPrintSettings::kOutputFormatNative) { if (mIsPPreview) { // There is nothing to detect on Print Preview, use PS. // TODO: implement for Qt? //format = nsIPrintSettings::kOutputFormatPS; return NS_ERROR_NOT_IMPLEMENTED; } format = nsIPrintSettings::kOutputFormatPDF; } if (format == nsIPrintSettings::kOutputFormatPDF) { surface = new gfxPDFSurface(stream, surfaceSize); } else { return NS_ERROR_NOT_IMPLEMENTED; } NS_ABORT_IF_FALSE(surface, "valid address expected"); surface.swap(*aSurface); return NS_OK; }
int process( const QDir &input, const QDir &output, const QString &xml ) { QSqlDatabase database = QSqlDatabase::addDatabase( "QSQLITE" ); database.setDatabaseName( input.filePath( "speakers.db" ) ); if ( !database.open() ) { qDebug() << "Failed to connect to database " << input.filePath( "speakers.db" ); return 3; } output.mkdir( "files.kde.org" ); QSqlQuery query( "SELECT * FROM speakers ORDER BY Id" ); QFile xmlFile( xml ); if ( !xmlFile.open( QFile::WriteOnly | QFile::Truncate ) ) { qDebug() << "Failed to write to " << xmlFile.fileName(); return 3; } QTextStream xmlOut( &xmlFile ); xmlOut << "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"; xmlOut << "<!DOCTYPE knewstuff SYSTEM \"knewstuff.dtd\">\n"; xmlOut << "<?xml-stylesheet type=\"text/xsl\" href=\"speakers.xsl\" ?>\n"; xmlOut << "<knewstuff>\n"; int index = 71; while (query.next()) { QString const name = query.value(1).toString(); QString const email = query.value(2).toString(); QString const nick = query.value(3).toString(); QString const gender = query.value(4).toString(); QString const language = query.value(5).toString(); QString const lang = language.mid(0, language.indexOf(QLatin1Char('(')) - 1).replace(QLatin1Char(' '), QLatin1Char('-')); QString const description = query.value(6).toString(); QString const token = query.value(7).toString(); QString const date = query.value(8).toString(); QString const zip = input.filePath( token ); QTemporaryFile tmpFile; tmpFile.open(); QString const extracted = tmpFile.fileName(); tmpFile.remove(); QDir::root().mkdir( extracted ); qDebug() << "Name: " << name; QString const simpleNick = QString( nick ).replace( QLatin1Char(' '), QLatin1Char('-') ); QString const nickDir = output.filePath("files.kde.org") + QLatin1Char('/') + simpleNick; QDir::root().mkdir( nickDir ); extract( zip, extracted ); normalize( extracted ); createLegalFiles( extracted, name, email ); QFile::copy(extracted + QLatin1String("/Marble.ogg"), nickDir + QLatin1Char('/') + lang + QLatin1Char('-') + simpleNick + QLatin1String(".ogg")); convertToMarbleFormat(extracted, nickDir + QLatin1Char('/') + lang + QLatin1Char('-') + simpleNick + QLatin1String(".zip")); convertToTomTomFormat(extracted, nickDir, nick, simpleNick, index, gender == QLatin1String("male"), lang); convertToNewStuffFormat(extracted, nickDir + QLatin1Char('/') + lang + QLatin1Char('-') + simpleNick + QLatin1String(".tar.gz")); xmlOut << " <stuff category=\"marble/data/audio\">\n"; xmlOut << " <name lang=\"en\">" << language << " - " << nick << " (" << gender << ")" << "</name>\n"; xmlOut << " <author>" << name << "</author>\n"; xmlOut << " <licence>CC-By-SA 3.0</licence>\n"; xmlOut << " <summary lang=\"en\">" << description << "</summary>\n"; xmlOut << " <version>0.1</version>\n"; xmlOut << " <releasedate>" << date << "</releasedate>\n"; xmlOut << " <preview lang=\"en\">http://edu.kde.org/marble/speaker-" << gender << ".png</preview>\n"; xmlOut << " <payload lang=\"en\">http://files.kde.org/marble/audio/speakers/" << simpleNick << "/" << lang << "-" << simpleNick << ".tar.gz</payload>\n"; xmlOut << " <payload lang=\"ogg\">http://files.kde.org/marble/audio/speakers/" << simpleNick << "/" << lang << "-" << simpleNick << ".ogg</payload>\n"; xmlOut << " <payload lang=\"zip\">http://files.kde.org/marble/audio/speakers/" << simpleNick << "/" << lang << "-" << simpleNick << ".zip</payload>\n"; xmlOut << " <payload lang=\"tomtom\">http://files.kde.org/marble/audio/speakers/" << simpleNick << "/" << lang << "-" << simpleNick << "-TomTom.zip</payload>\n"; xmlOut << " </stuff>\n"; ++index; } xmlOut << "</knewstuff>\n"; xmlFile.close(); return 0; }