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 
30 using 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  */
98 bool
100 {
101  return ((orig_shmem != NULL) && (mini_shmem != NULL) && (scaler != NULL));
102 }
103 
104 /** Produce mini image. */
105 void
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,...)
Log warning message.
Definition: multi.cpp:216
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
Image scaler interface.
Definition: scaler.h:30
virtual unsigned int needed_scaled_height()=0
Minimum needed height of scaled image depending on factor and original image height.
virtual unsigned int needed_scaled_width()=0
Minimum needed width of scaled image depending on factor and original image width.
virtual void set_original_dimensions(unsigned int width, unsigned int height)=0
Set original image dimensions.
virtual void set_scale_factor(float factor)=0
Set scale factor.
Shared memory image buffer.
Definition: shm_image.h:184