예제 #1
0
/**
    \fn writeLegacyIndex
*/
bool aviIndexOdml::writeLegacyIndex()
{
   
    // 3-write legacy index
    uint64_t pos;
    pos=_masterList->Tell();
    ADM_info("Writting legacy index at %" PRIx64"\n",pos);
    //---
    AviListAvi lst("idx1",_masterList->getFile());
    lst.Begin();

    int n=legacyIndexCount;
    ADMMemio memIo(4*4);
    #define ix32(a)  memIo.write32(legacyIndex[i].a)
    uint32_t base=LMovie->TellBegin()+8; // movi tag
    for(int i=0;i<n;i++)
    {
        memIo.reset();
        ix32(fcc);ix32(flags);memIo.write32(legacyIndex[i].offset-base);ix32(len);
        lst.WriteMem (memIo);
    }
    lst.End();    
    delete [] legacyIndex;
    legacyIndex=NULL;
    return true;
}
예제 #2
0
파일: metacopy.cpp 프로젝트: obklar/exiv2
// *****************************************************************************
// Main
int main(int argc, char* const argv[])
{
try {
    // Handle command line arguments
    Params params;
    if (params.getopt(argc, argv)) {
        params.usage();
        return 1;
    }
    if (params.help_) {
        params.help();
        return 2;
    }

    // Use MemIo to increase test coverage.
    Exiv2::BasicIo::AutoPtr fileIo(new Exiv2::FileIo(params.read_));
    Exiv2::BasicIo::AutoPtr memIo(new Exiv2::MemIo);
    memIo->transfer(*fileIo);

    Exiv2::Image::AutoPtr readImg = Exiv2::ImageFactory::open(memIo);
    assert(readImg.get() != 0);
    readImg->readMetadata();

    Exiv2::Image::AutoPtr writeImg = Exiv2::ImageFactory::open(params.write_);
    assert(writeImg.get() != 0);
    if (params.preserve_) writeImg->readMetadata();
    if (params.iptc_) {
        writeImg->setIptcData(readImg->iptcData());
    }
    if (params.exif_) {
        writeImg->setExifData(readImg->exifData());
    }
    if (params.comment_) {
        writeImg->setComment(readImg->comment());
    }
    if (params.xmp_) {
        writeImg->setXmpData(readImg->xmpData());
    }

    try {
        writeImg->writeMetadata();
    }
    catch (const Exiv2::AnyError&) {
        std::cerr << params.progname() <<
            ": Could not write metadata to (" << params.write_ << ")\n";
        return 8;
    }

    return 0;
}
catch (Exiv2::AnyError& e) {
    std::cerr << "Caught Exiv2 exception '" << e << "'\n";
    return 10;
}
}
예제 #3
0
int ImageFactory::getType(const byte* data, long size)
{
    MemIo memIo(data, size);
    return getType(memIo);
}