24 #include <fvutils/colormap/yuvcm.h> 26 #include <fvutils/colormap/cmfile.h> 27 #include <fvutils/colormap/cmfile_yuvblock.h> 28 #include <fvutils/ipc/shm_lut.h> 29 #include <core/exceptions/software.h> 64 YuvColormap::YuvColormap(
unsigned int depth,
unsigned int width,
unsigned int height)
66 constructor(depth, width, height);
77 YuvColormap::YuvColormap(
const char *shmem_lut_id,
unsigned int depth,
unsigned int width,
unsigned int height)
79 constructor(depth, width, height, shmem_lut_id);
91 YuvColormap::YuvColormap(
const char *shmem_lut_id,
bool destroy_on_free,
unsigned int depth,
unsigned int width,
unsigned int height)
93 constructor(depth, width, height, shmem_lut_id, destroy_on_free);
104 YuvColormap::YuvColormap(
YuvColormap *cm,
const char *shmem_lut_id,
bool destroy_on_free)
106 constructor(cm->
depth(), cm->
width(), cm->
height(), shmem_lut_id, destroy_on_free);
107 memcpy(__lut, cm->__lut, __lut_size);
119 YuvColormap::constructor(
unsigned int depth,
unsigned int width,
unsigned int height,
120 const char *shmem_lut_id,
bool destroy_on_free)
125 if ( (depth != 1) && (depth != 2) && (depth != 4) && (depth != 8) && (depth != 16) &&
126 (depth != 32) && (depth != 64) && (depth != 128) && (depth != 256) ) {
133 if ( (width != 1) && (width != 2) && (width != 4) && (width != 8) && (width != 16) &&
134 (width != 32) && (width != 64) && (width != 128) && (width != 256) ) {
138 if ( height > 256 ) {
141 if ( (height != 1) && (height != 2) && (height != 4) && (height != 8) && (height != 16) &&
142 (height != 32) && (height != 64) && (height != 128) && (height != 256) ) {
149 __depth_div = 256 / __depth;
150 __width_div = 256 / __width;
151 __height_div = 256 / __height;
152 __plane_size = __width * __height;
154 if ( shmem_lut_id != NULL ) {
156 __shm_lut->set_destroy_on_delete( destroy_on_free );
157 __lut = __shm_lut->buffer();
158 __lut_size = __shm_lut->data_size();
161 __lut_size = __width * __height * __depth;
162 __lut = (
unsigned char *)malloc( __lut_size );
164 memset(__lut, C_OTHER, __lut_size);
169 YuvColormap::~YuvColormap()
182 YuvColormap::set(
unsigned int y,
unsigned int u,
unsigned int v, color_t c)
184 *(__lut + (y / __depth_div) * __plane_size + (v / __height_div) * __width + (u / __width_div)) = c;
191 memset(__lut, C_OTHER, __lut_size);
196 YuvColormap::set(
unsigned char *buffer)
198 memcpy(__lut, buffer, __lut_size);
209 std::list<ColormapFileBlock *>
210 YuvColormap::get_blocks()
212 std::list<ColormapFileBlock *> rv;
214 for (
unsigned int i = 0; i < __depth; ++i) {
224 YuvColormap::get_buffer()
const 237 YuvColormap::copy_uvplane(
unsigned char *uvplane,
unsigned int level)
239 if ( level > __depth ) {
243 memcpy(__lut + level * __plane_size, uvplane, __plane_size);
262 if ( (__width != tc->__width) || (__height != tc->__height) || (__depth != tc->__depth) ) {
266 unsigned char *this_lut = __lut;
267 unsigned char *other_lut = tc->__lut;
269 for (
unsigned int i = 0; i < __plane_size * __depth; ++i) {
270 if ( (*this_lut == C_OTHER) || (*this_lut == C_BACKGROUND) ) {
272 if ( (*other_lut != C_OTHER) && (*other_lut != C_BACKGROUND) ) {
274 *this_lut = *other_lut;
294 if ( __lut_size != yuvcm.__lut_size ) {
298 memcpy(__lut, yuvcm.__lut, __lut_size);
305 YuvColormap::operator+=(
const char *filename)
322 YuvColormap::width()
const 329 YuvColormap::height()
const 336 YuvColormap::depth()
const 343 YuvColormap::deepness()
const 353 YuvColormap::plane_size()
const 364 YuvColormap::replace_color(color_t from, color_t to)
366 unsigned char *this_lut = __lut;
368 for (
unsigned int i = 0; i < __plane_size * __depth; ++i, ++this_lut) {
369 if (*this_lut == from) *this_lut = to;
virtual unsigned int width() const
Get width of colormap.
Fawkes library namespace.
YUV block for colormap file.
Colormap * get_colormap()
Get a freshly generated colormap based on current file content.
virtual void read(const char *file_name)
Read file.
virtual unsigned int depth() const
Get depth of colormap.
Expected parameter is missing.
virtual unsigned int height() const
Get height of colormap.
Shared memory lookup table.