mini_image_producer.cpp
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
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
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
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
00084 MiniImageProducer::~MiniImageProducer()
00085 {
00086 delete orig_shmem;
00087 delete mini_shmem;
00088 }
00089
00090
00091
00092
00093
00094
00095 bool
00096 MiniImageProducer::isValid()
00097 {
00098 return ( (orig_shmem != NULL) &&
00099 (mini_shmem != NULL) &&
00100 (scaler != NULL) );
00101 }
00102
00103
00104
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