Fawkes API Fawkes Development Version

mini_image_producer.cpp

00001 
00002 /***************************************************************************
00003  *  mini_image_producer.cpp - mini image producer
00004  *
00005  *  Created: Tue May 17 09:21:41 2006 (Automatica 2006)
00006  *  Copyright  2005-2006  Tim Niemueller [www.niemueller.de]
00007  *
00008  ****************************************************************************/
00009 
00010 /*  This program is free software; you can redistribute it and/or modify
00011  *  it under the terms of the GNU General Public License as published by
00012  *  the Free Software Foundation; either version 2 of the License, or
00013  *  (at your option) any later version.
00014  *
00015  *  This program is distributed in the hope that it will be useful,
00016  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
00017  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00018  *  GNU Library General Public License for more details.
00019  *
00020  *  Read the full text in the LICENSE.GPL file in the doc directory.
00021  */
00022 
00023 #include "mini_image_producer.h"
00024 
00025 #include <utils/system/console_colors.h>
00026 #include <utils/logging/logger.h>
00027 #include <fvutils/scalers/scaler.h>
00028 #include <fvutils/ipc/shm_image.h>
00029 
00030 using namespace firevision;
00031 
00032 /** @class MiniImageProducer "mini_image_producer.h"
00033  * Mini image producer.
00034  * Uses a scaler to create small version of an image.
00035  * @author Tim Niemueller
00036  */
00037 
00038 /** Constructor.
00039  * @param orig_id original image ID
00040  * @param mini_id mini image ID
00041  * @param scaler Scaler
00042  * @param logger Logger
00043  */
00044 MiniImageProducer::MiniImageProducer(const char *orig_id, const char *mini_id,
00045                                      Scaler *scaler, fawkes::Logger *logger)
00046 {
00047   scale_factor = 0.25;
00048 
00049   this->scaler = scaler;
00050   scaler->set_scale_factor( scale_factor );
00051 
00052   logger->log_debug("MiniImageProducer", "Opening original image shmem segment for id %s", orig_id);
00053   orig_shmem = new SharedMemoryImageBuffer( orig_id );
00054 
00055   if ( ! orig_shmem->is_valid() ) {
00056     logger->log_error("MiniImageProducer", "Could not open original image");
00057     delete orig_shmem;
00058     orig_shmem = NULL;
00059     mini_shmem = NULL;
00060   } else {
00061 
00062     scaler->set_original_dimensions( orig_shmem->width(), orig_shmem->height() );
00063 
00064     logger->log_debug("MiniImageProducer", "Opening mini image shmem segment for id %s"
00065                                            ", w=%u, h=%u",
00066                       mini_id, scaler->needed_scaled_width(), scaler->needed_scaled_height());
00067 
00068     mini_shmem = new SharedMemoryImageBuffer( mini_id, YUV422_PLANAR,
00069                                               scaler->needed_scaled_width(),
00070                                               scaler->needed_scaled_height() );
00071 
00072     if ( ! mini_shmem->is_valid() ) {
00073       logger->log_error("MiniImageProducer", "Could not open mini image");
00074       delete orig_shmem;
00075       delete mini_shmem;
00076       orig_shmem = NULL;
00077       mini_shmem = NULL;
00078     }
00079   }
00080 }
00081 
00082 
00083 /** Destructor. */
00084 MiniImageProducer::~MiniImageProducer()
00085 {
00086   delete orig_shmem;
00087   delete mini_shmem;
00088 }
00089 
00090 
00091 /** Check if all data is valid.
00092  * @return true if shared memory images have been openened successfully and a scaler is
00093  * set, false otherwise
00094  */
00095 bool
00096 MiniImageProducer::isValid()
00097 {
00098   return ( (orig_shmem != NULL) &&
00099            (mini_shmem != NULL) &&
00100            (scaler != NULL) );
00101 }
00102 
00103 
00104 /** Produce mini image. */
00105 void
00106 MiniImageProducer::produce()
00107 {
00108   if ( orig_shmem == NULL ) {
00109     logger->log_warn("MiniImageProducer", "Original shmem image not opened");
00110     return;
00111   }
00112   if ( mini_shmem == NULL ) {
00113     logger->log_warn("MiniImageProducer", "Mini shmem image not opened");
00114     return;
00115   }
00116 
00117   scaler->set_scale_factor( scale_factor );
00118   scaler->set_original_dimensions( orig_shmem->width(), orig_shmem->height() );
00119   scaler->set_scaled_dimensions( mini_shmem->width(), mini_shmem->height() );
00120   scaler->set_original_buffer( orig_shmem->buffer() );
00121   scaler->set_scaled_buffer( mini_shmem->buffer() );
00122   scaler->scale();
00123 }
00124 
 All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Friends