Blame lib/bitmapdata.cpp

rpm-build d2b433
/*
rpm-build d2b433
 * libopenraw - bitmapdata.cpp
rpm-build d2b433
 *
rpm-build d2b433
 * Copyright (C) 2007-2017 Hubert Figuière
rpm-build d2b433
 *
rpm-build d2b433
 * This library is free software: you can redistribute it and/or
rpm-build d2b433
 * modify it under the terms of the GNU Lesser General Public License
rpm-build d2b433
 * as published by the Free Software Foundation, either version 3 of
rpm-build d2b433
 * the License, or (at your option) any later version.
rpm-build d2b433
 *
rpm-build d2b433
 * This library is distributed in the hope that it will be useful,
rpm-build d2b433
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
rpm-build d2b433
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
rpm-build d2b433
 * Lesser General Public License for more details.
rpm-build d2b433
 *
rpm-build d2b433
 * You should have received a copy of the GNU Lesser General Public
rpm-build d2b433
 * License along with this library.  If not, see
rpm-build d2b433
 * <http://www.gnu.org/licenses/>.
rpm-build d2b433
 */
rpm-build d2b433
rpm-build d2b433
#include <stddef.h>
rpm-build d2b433
#include <stdint.h>
rpm-build d2b433
#include <algorithm>
rpm-build d2b433
#include <cstdlib>
rpm-build d2b433
rpm-build d2b433
#include <libopenraw/consts.h>
rpm-build d2b433
#include <libopenraw/debug.h>
rpm-build d2b433
rpm-build d2b433
#include "trace.hpp"
rpm-build d2b433
#include "bitmapdata.hpp"
rpm-build d2b433
rpm-build d2b433
using namespace Debug;
rpm-build d2b433
rpm-build d2b433
namespace OpenRaw {
rpm-build d2b433
rpm-build d2b433
class BitmapData::Private {
rpm-build d2b433
public:
rpm-build d2b433
    /** raw data */
rpm-build d2b433
    void *data;
rpm-build d2b433
    /** size in bytes of raw data */
rpm-build d2b433
    size_t data_size;
rpm-build d2b433
    /** type of thumbnail data */
rpm-build d2b433
    DataType data_type;
rpm-build d2b433
    /** width dimension in pixels of image data */
rpm-build d2b433
    uint32_t width;
rpm-build d2b433
    /** height dimension in pixels of image data */
rpm-build d2b433
    uint32_t height;
rpm-build d2b433
    /** bpc bit per channel. 0 is not a valid value */
rpm-build d2b433
    uint32_t bpc;
rpm-build d2b433
    /** region of interest */
rpm-build d2b433
    uint32_t roi_x;
rpm-build d2b433
    uint32_t roi_y;
rpm-build d2b433
    uint32_t roi_w;
rpm-build d2b433
    uint32_t roi_h;
rpm-build d2b433
rpm-build d2b433
    Private()
rpm-build d2b433
        : data(nullptr)
rpm-build d2b433
        , data_size(0)
rpm-build d2b433
        , data_type(OR_DATA_TYPE_NONE)
rpm-build d2b433
        , width(0)
rpm-build d2b433
        , height(0)
rpm-build d2b433
        , bpc(0)
rpm-build d2b433
        , roi_x(0)
rpm-build d2b433
        , roi_y(0)
rpm-build d2b433
        , roi_w(0)
rpm-build d2b433
        , roi_h(0)
rpm-build d2b433
    {
rpm-build d2b433
    }
rpm-build d2b433
rpm-build d2b433
    ~Private()
rpm-build d2b433
    {
rpm-build d2b433
        if (data) {
rpm-build d2b433
            free(data);
rpm-build d2b433
        }
rpm-build d2b433
    }
rpm-build d2b433
rpm-build d2b433
    Private(const Private &) = delete;
rpm-build d2b433
    Private &operator=(const Private &) = delete;
rpm-build d2b433
};
rpm-build d2b433
rpm-build d2b433
BitmapData::BitmapData() : d(new BitmapData::Private())
rpm-build d2b433
{
rpm-build d2b433
}
rpm-build d2b433
rpm-build d2b433
BitmapData::~BitmapData()
rpm-build d2b433
{
rpm-build d2b433
    delete d;
rpm-build d2b433
}
rpm-build d2b433
rpm-build d2b433
void BitmapData::swap(BitmapData &with)
rpm-build d2b433
{
rpm-build d2b433
    std::swap(this->d, with.d);
rpm-build d2b433
}
rpm-build d2b433
rpm-build d2b433
BitmapData::DataType BitmapData::dataType() const
rpm-build d2b433
{
rpm-build d2b433
    return d->data_type;
rpm-build d2b433
}
rpm-build d2b433
rpm-build d2b433
void BitmapData::setDataType(BitmapData::DataType _type)
rpm-build d2b433
{
rpm-build d2b433
    d->data_type = _type;
rpm-build d2b433
    if (d->bpc == 0) {
rpm-build d2b433
        switch (_type) {
rpm-build d2b433
        case OR_DATA_TYPE_NONE:
rpm-build d2b433
            d->bpc = 0;
rpm-build d2b433
            break;
rpm-build d2b433
        case OR_DATA_TYPE_COMPRESSED_RAW:
rpm-build d2b433
        case OR_DATA_TYPE_RAW:
rpm-build d2b433
            d->bpc = 16;
rpm-build d2b433
            break;
rpm-build d2b433
        case OR_DATA_TYPE_PIXMAP_8RGB:
rpm-build d2b433
        case OR_DATA_TYPE_JPEG:
rpm-build d2b433
        default:
rpm-build d2b433
            d->bpc = 8;
rpm-build d2b433
        }
rpm-build d2b433
    }
rpm-build d2b433
}
rpm-build d2b433
rpm-build d2b433
void *BitmapData::allocData(const size_t s)
rpm-build d2b433
{
rpm-build d2b433
    LOGDBG1("allocate s=%lu data =%p\n", s, d->data);
rpm-build d2b433
    d->data = calloc(s, 1);
rpm-build d2b433
    LOGDBG1(" data =%p\n", d->data);
rpm-build d2b433
    d->data_size = s;
rpm-build d2b433
    return d->data;
rpm-build d2b433
}
rpm-build d2b433
rpm-build d2b433
size_t BitmapData::size() const
rpm-build d2b433
{
rpm-build d2b433
    return d->data_size;
rpm-build d2b433
}
rpm-build d2b433
rpm-build d2b433
void *BitmapData::data() const
rpm-build d2b433
{
rpm-build d2b433
    return d->data;
rpm-build d2b433
}
rpm-build d2b433
rpm-build d2b433
uint32_t BitmapData::x() const
rpm-build d2b433
{
rpm-build d2b433
    return d->width;
rpm-build d2b433
}
rpm-build d2b433
rpm-build d2b433
uint32_t BitmapData::width() const
rpm-build d2b433
{
rpm-build d2b433
    return d->width;
rpm-build d2b433
}
rpm-build d2b433
rpm-build d2b433
uint32_t BitmapData::y() const
rpm-build d2b433
{
rpm-build d2b433
    return d->height;
rpm-build d2b433
}
rpm-build d2b433
rpm-build d2b433
uint32_t BitmapData::height() const
rpm-build d2b433
{
rpm-build d2b433
    return d->height;
rpm-build d2b433
}
rpm-build d2b433
rpm-build d2b433
uint32_t BitmapData::bpc() const
rpm-build d2b433
{
rpm-build d2b433
    return d->bpc;
rpm-build d2b433
}
rpm-build d2b433
rpm-build d2b433
void BitmapData::setBpc(uint32_t _bpc)
rpm-build d2b433
{
rpm-build d2b433
    d->bpc = _bpc;
rpm-build d2b433
}
rpm-build d2b433
rpm-build d2b433
void BitmapData::setDimensions(uint32_t _width, uint32_t _height)
rpm-build d2b433
{
rpm-build d2b433
    d->width = _width;
rpm-build d2b433
    d->height = _height;
rpm-build d2b433
    if (d->roi_w == 0) {
rpm-build d2b433
        d->roi_w = _width;
rpm-build d2b433
    }
rpm-build d2b433
    if (d->roi_h == 0) {
rpm-build d2b433
        d->roi_h = _height;
rpm-build d2b433
    }
rpm-build d2b433
}
rpm-build d2b433
rpm-build d2b433
uint32_t BitmapData::roi_x() const
rpm-build d2b433
{
rpm-build d2b433
    return d->roi_x;
rpm-build d2b433
}
rpm-build d2b433
rpm-build d2b433
uint32_t BitmapData::roi_y() const
rpm-build d2b433
{
rpm-build d2b433
    return d->roi_y;
rpm-build d2b433
}
rpm-build d2b433
rpm-build d2b433
uint32_t BitmapData::roi_width() const
rpm-build d2b433
{
rpm-build d2b433
    return d->roi_w;
rpm-build d2b433
}
rpm-build d2b433
rpm-build d2b433
uint32_t BitmapData::roi_height() const
rpm-build d2b433
{
rpm-build d2b433
    return d->roi_h;
rpm-build d2b433
}
rpm-build d2b433
rpm-build d2b433
void BitmapData::setRoi(uint32_t _x, uint32_t _y, uint32_t w, uint32_t h)
rpm-build d2b433
{
rpm-build d2b433
    d->roi_x = _x;
rpm-build d2b433
    d->roi_y = _y;
rpm-build d2b433
    d->roi_w = w;
rpm-build d2b433
    d->roi_h = h;
rpm-build d2b433
}
rpm-build d2b433
}