Alien-FreeImage

 view release on metacpan or  search on metacpan

src/Source/OpenEXR/IlmImf/ImfDeepTiledOutputFile.cpp  view on Meta::CPAN

        THROW (IEX_NAMESPACE::ArgExc, "Quick pixel copy from image "
                             "file \"" << in.fileName() << "\" to image "
                             "file \"" << fileName() << "\" "
                             "failed.  The files have different channel "
                             "lists.");


    // Verify that no pixel data have been written to this file yet.
    //

    if (!_data->tileOffsets.isEmpty())
        THROW (IEX_NAMESPACE::LogicExc, "Quick pixel copy from image "
                              "file \"" << in.fileName() << "\" to image "
                              "file \"" << _data->_streamData->os->fileName() << "\" "
                              "failed. \"" << fileName() << "\" "
                              "already contains pixel data.");

 
    int numAllTiles = in.totalTiles();                              
                              
    Lock lock (*_data->_streamData);
    
    //
    // special handling for random tiles
    //
    
    vector<int> dx_list(_data->lineOrder==RANDOM_Y ? numAllTiles : 1);
    vector<int> dy_list(_data->lineOrder==RANDOM_Y ? numAllTiles : 1);
    vector<int> lx_list(_data->lineOrder==RANDOM_Y ? numAllTiles : 1);
    vector<int> ly_list(_data->lineOrder==RANDOM_Y ? numAllTiles : 1);
    
    if(_data->lineOrder==RANDOM_Y)
    {
        in.getTileOrder(&dx_list[0],&dy_list[0],&lx_list[0],&ly_list[0]);
        _data->nextTileToWrite.dx=dx_list[0];
        _data->nextTileToWrite.dy=dy_list[0];
        _data->nextTileToWrite.lx=lx_list[0];
        _data->nextTileToWrite.ly=ly_list[0];
    }
    

    vector<char> data(4096);
    for (int i = 0; i < numAllTiles; ++i)
    {

        int dx = _data->nextTileToWrite.dx;
        int dy = _data->nextTileToWrite.dy;
        int lx = _data->nextTileToWrite.lx;
        int ly = _data->nextTileToWrite.ly;

        Int64 dataSize = data.size();

        in.rawTileData (dx, dy, lx, ly, &data[0], dataSize);
        if(dataSize>data.size())
        {
            data.resize(dataSize);
            in.rawTileData (dx, dy, lx, ly, &data[0], dataSize);
        }
        Int64 sampleCountTableSize = *(Int64 *)(&data[0] + 16);
        Int64 pixelDataSize = *(Int64 *)(&data[0] + 24);
        Int64 unpackedPixelDataSize = *(Int64 *)(&data[0] + 32);
        char * sampleCountTable = &data[0]+40;
        char * pixelData = sampleCountTable + sampleCountTableSize;
        
        writeTileData (_data, dx, dy, lx, ly, pixelData, pixelDataSize,unpackedPixelDataSize,sampleCountTable,sampleCountTableSize);
        
        
        if(_data->lineOrder==RANDOM_Y)
        {
            if(i<numAllTiles-1)
            {
              _data->nextTileToWrite.dx=dx_list[i+1];
              _data->nextTileToWrite.dy=dy_list[i+1];
              _data->nextTileToWrite.lx=lx_list[i+1];
              _data->nextTileToWrite.ly=ly_list[i+1];
            }
        }else{   
          _data->nextTileToWrite = _data->nextTileCoord (_data->nextTileToWrite);
        }
        
    }
}


void
DeepTiledOutputFile::copyPixels (DeepTiledInputPart &in)
{
  copyPixels(*in.file);
}


unsigned int
DeepTiledOutputFile::tileXSize () const
{
    return _data->tileDesc.xSize;
}


unsigned int
DeepTiledOutputFile::tileYSize () const
{
    return _data->tileDesc.ySize;
}


LevelMode
DeepTiledOutputFile::levelMode () const
{
    return _data->tileDesc.mode;
}


LevelRoundingMode
DeepTiledOutputFile::levelRoundingMode () const
{
    return _data->tileDesc.roundingMode;
}


int
DeepTiledOutputFile::numLevels () const
{
    if (levelMode() == RIPMAP_LEVELS)
        THROW (IEX_NAMESPACE::LogicExc, "Error calling numLevels() on image "
                              "file \"" << fileName() << "\" "

 view all matches for this distribution
 view release on metacpan -  search on metacpan

( run in 5.665 seconds using v1.00-cache-2.02-grep-82fe00e-cpan-48ebf85a1963 )