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 <utils/system/console_colors.h>
26 #include <utils/logging/logger.h>
27 #include <fvutils/scalers/scaler.h>
28 #include <fvutils/ipc/shm_image.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  */
44 MiniImageProducer::MiniImageProducer(const char *orig_id, const char *mini_id,
45  Scaler *scaler, fawkes::Logger *logger)
46 {
47  scale_factor = 0.25;
48 
49  this->scaler = scaler;
50  scaler->set_scale_factor( scale_factor );
51 
52  logger->log_debug("MiniImageProducer", "Opening original image shmem segment for id %s", orig_id);
53  orig_shmem = new SharedMemoryImageBuffer( orig_id );
54 
55  if ( ! orig_shmem->is_valid() ) {
56  logger->log_error("MiniImageProducer", "Could not open original image");
57  delete orig_shmem;
58  orig_shmem = NULL;
59  mini_shmem = NULL;
60  } else {
61 
62  scaler->set_original_dimensions( orig_shmem->width(), orig_shmem->height() );
63 
64  logger->log_debug("MiniImageProducer", "Opening mini image shmem segment for id %s"
65  ", w=%u, h=%u",
66  mini_id, scaler->needed_scaled_width(), scaler->needed_scaled_height());
67 
68  mini_shmem = new SharedMemoryImageBuffer( mini_id, YUV422_PLANAR,
69  scaler->needed_scaled_width(),
70  scaler->needed_scaled_height() );
71 
72  if ( ! mini_shmem->is_valid() ) {
73  logger->log_error("MiniImageProducer", "Could not open mini image");
74  delete orig_shmem;
75  delete mini_shmem;
76  orig_shmem = NULL;
77  mini_shmem = NULL;
78  }
79  }
80 }
81 
82 
83 /** Destructor. */
85 {
86  delete orig_shmem;
87  delete mini_shmem;
88 }
89 
90 
91 /** Check if all data is valid.
92  * @return true if shared memory images have been openened successfully and a scaler is
93  * set, false otherwise
94  */
95 bool
97 {
98  return ( (orig_shmem != NULL) &&
99  (mini_shmem != NULL) &&
100  (scaler != NULL) );
101 }
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 }
124 
virtual unsigned int needed_scaled_height()=0
Minimum needed height of scaled image depending on factor and original image height.
bool isValid()
Check if all data is valid.
virtual void set_scale_factor(float factor)=0
Set scale factor.
void produce()
Produce mini image.
virtual void log_warn(const char *component, const char *format,...)
Log warning message.
Definition: multi.cpp:227
Shared memory image buffer.
Definition: shm_image.h:181
Image scaler interface.
Definition: scaler.h:32
virtual void log_error(const char *component, const char *format,...)=0
Log error message.
~MiniImageProducer()
Destructor.
virtual void set_original_dimensions(unsigned int width, unsigned int height)=0
Set original image dimensions.
virtual void log_debug(const char *component, const char *format,...)=0
Log debug message.
MiniImageProducer(const char *orig_id, const char *mini_id, firevision::Scaler *scaler, fawkes::Logger *logger)
Constructor.
virtual unsigned int needed_scaled_width()=0
Minimum needed width of scaled image depending on factor and original image width.
Interface for logging.
Definition: logger.h:34