Fawkes API Fawkes Development Version
mini_image_producer.cpp
1
2/***************************************************************************
3 * mini_image_producer.cpp - mini image producer
4 *
5 * Created: Tue May 17 09:21:41 2006 (Automatica 2006)
6 * Copyright 2005-2006 Tim Niemueller [www.niemueller.de]
7 *
8 ****************************************************************************/
9
10/* This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License as published by
12 * the Free Software Foundation; either version 2 of the License, or
13 * (at your option) any later version.
14 *
15 * This program is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU Library General Public License for more details.
19 *
20 * Read the full text in the LICENSE.GPL file in the doc directory.
21 */
22
23#include "mini_image_producer.h"
24
25#include <fvutils/ipc/shm_image.h>
26#include <fvutils/scalers/scaler.h>
27#include <utils/logging/logger.h>
28#include <utils/system/console_colors.h>
29
30using namespace firevision;
31
32/** @class MiniImageProducer "mini_image_producer.h"
33 * Mini image producer.
34 * Uses a scaler to create small version of an image.
35 * @author Tim Niemueller
36 */
37
38/** Constructor.
39 * @param orig_id original image ID
40 * @param mini_id mini image ID
41 * @param scaler Scaler
42 * @param logger Logger
43 */
45 const char * mini_id,
46 Scaler * scaler,
47 fawkes::Logger *logger)
48{
49 scale_factor = 0.25;
50
51 this->scaler = scaler;
52 scaler->set_scale_factor(scale_factor);
53
54 logger->log_debug("MiniImageProducer", "Opening original image shmem segment for id %s", orig_id);
55 orig_shmem = new SharedMemoryImageBuffer(orig_id);
56
57 if (!orig_shmem->is_valid()) {
58 logger->log_error("MiniImageProducer", "Could not open original image");
59 delete orig_shmem;
60 orig_shmem = NULL;
61 mini_shmem = NULL;
62 } else {
63 scaler->set_original_dimensions(orig_shmem->width(), orig_shmem->height());
64
65 logger->log_debug("MiniImageProducer",
66 "Opening mini image shmem segment for id %s"
67 ", w=%u, h=%u",
68 mini_id,
69 scaler->needed_scaled_width(),
70 scaler->needed_scaled_height());
71
72 mini_shmem = new SharedMemoryImageBuffer(mini_id,
73 YUV422_PLANAR,
74 scaler->needed_scaled_width(),
75 scaler->needed_scaled_height());
76
77 if (!mini_shmem->is_valid()) {
78 logger->log_error("MiniImageProducer", "Could not open mini image");
79 delete orig_shmem;
80 delete mini_shmem;
81 orig_shmem = NULL;
82 mini_shmem = NULL;
83 }
84 }
85}
86
87/** Destructor. */
89{
90 delete orig_shmem;
91 delete mini_shmem;
92}
93
94/** Check if all data is valid.
95 * @return true if shared memory images have been openened successfully and a scaler is
96 * set, false otherwise
97 */
98bool
100{
101 return ((orig_shmem != NULL) && (mini_shmem != NULL) && (scaler != NULL));
102}
103
104/** Produce mini image. */
105void
107{
108 if (orig_shmem == NULL) {
109 logger->log_warn("MiniImageProducer", "Original shmem image not opened");
110 return;
111 }
112 if (mini_shmem == NULL) {
113 logger->log_warn("MiniImageProducer", "Mini shmem image not opened");
114 return;
115 }
116
117 scaler->set_scale_factor(scale_factor);
118 scaler->set_original_dimensions(orig_shmem->width(), orig_shmem->height());
119 scaler->set_scaled_dimensions(mini_shmem->width(), mini_shmem->height());
120 scaler->set_original_buffer(orig_shmem->buffer());
121 scaler->set_scaled_buffer(mini_shmem->buffer());
122 scaler->scale();
123}
void produce()
Produce mini image.
bool isValid()
Check if all data is valid.
~MiniImageProducer()
Destructor.
MiniImageProducer(const char *orig_id, const char *mini_id, firevision::Scaler *scaler, fawkes::Logger *logger)
Constructor.
Interface for logging.
Definition: logger.h:42
virtual void log_warn(const char *component, const char *format,...)=0
Log warning message.
virtual void log_debug(const char *component, const char *format,...)
Log debug message.
Definition: multi.cpp:174
virtual void log_error(const char *component, const char *format,...)
Log error message.
Definition: multi.cpp:237
bool is_valid() const
Check validity of shared memory segment.
Definition: shm.cpp:811
Image scaler interface.
Definition: scaler.h:30
virtual void set_scaled_dimensions(unsigned int width, unsigned int height)=0
Set dimenins of scaled image buffer.
virtual unsigned int needed_scaled_height()=0
Minimum needed height of scaled image depending on factor and original image height.
virtual void scale()=0
Scale image.
virtual unsigned int needed_scaled_width()=0
Minimum needed width of scaled image depending on factor and original image width.
virtual void set_scaled_buffer(unsigned char *buffer)=0
Set scaled image buffer.
virtual void set_original_dimensions(unsigned int width, unsigned int height)=0
Set original image dimensions.
virtual void set_original_buffer(unsigned char *buffer)=0
Set original image buffer.
virtual void set_scale_factor(float factor)=0
Set scale factor.
Shared memory image buffer.
Definition: shm_image.h:184
unsigned int height() const
Get image height.
Definition: shm_image.cpp:255
unsigned int width() const
Get image width.
Definition: shm_image.cpp:246
unsigned char * buffer() const
Get image buffer.
Definition: shm_image.cpp:228