Ignore:
Timestamp:
08/28/19 16:12:11 (2 years ago)
Author:
Sanahuja Guillaume
Message:

using pimpl

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/sanscv/lib/FlairVisionFilter/src/CvtColor.cpp

    r324 r325  
    1313
    1414#include "CvtColor.h"
     15#include "VisionFilter.h"
    1516#include <Image.h>
     17//#include <dspcv_gpp.h>
    1618#include <typeinfo>
    1719
     
    1921using namespace flair::core;
    2022
     23class CvtColor_impl {
     24public:
     25    CvtColor_impl(flair::filter::CvtColor *self,flair::filter::CvtColor::Conversion_t conversion):output(0) {
     26        this->conversion=conversion;
     27        this->self=self;
     28
     29        switch(conversion) {
     30        case flair::filter::CvtColor::Conversion_t::ToGray:
     31            try{
     32                Image::Type const &imageType=dynamic_cast<Image::Type const &>(((IODevice*)(self->Parent()))->GetOutputDataType());
     33                output=new Image(self,imageType.GetWidth(),imageType.GetHeight(),Image::Type::Format::Gray,"conversion",true,2);
     34                //inIplImage = (IplImage*)AllocFunction(sizeof(IplImage));
     35                //outIplImage = (IplImage*)AllocFunction(sizeof(IplImage));
     36            } catch(std::bad_cast& bc) {
     37                self->Err("io type mismatch\n");
     38            }
     39            break;
     40        default:
     41            self->Err("conversion not supported\n");
     42        }
     43    }
     44
     45    ~CvtColor_impl() {
     46        //FreeFunction((char*)(inIplImage));
     47        //FreeFunction((char*)(outIplImage));
     48    }
     49   
     50    void UpdateFrom(const io_data *data){
     51        Image *img=(Image*)data;
     52
     53        if(output!=NULL) {
     54            data->GetMutex();/*
     55            inIplImage->width=img->GetDataType().GetWidth();
     56            inIplImage->height=img->GetDataType().GetHeight();
     57            inIplImage->imageData=img->buffer;
     58            */
     59            output->GetMutex();/*
     60            outIplImage->width=output->GetDataType().GetWidth();
     61            outIplImage->height=output->GetDataType().GetHeight();
     62            outIplImage->imageData=output->buffer;
     63*/
     64            switch(conversion) {
     65            case flair::filter::CvtColor::Conversion_t::ToGray:
     66                switch(((Image*)data)->GetDataType().GetFormat()) {
     67                case Image::Type::Format::YUYV:
     68                    //dspCvtColor(inIplImage,outIplImage,DSP_YUYV2GRAY);
     69                    break;
     70                case Image::Type::Format::UYVY:
     71                    //dspCvtColor(inIplImage,outIplImage,DSP_UYVY2GRAY);
     72                    break;
     73                case Image::Type::Format::BGR:
     74                    //dspCvtColor(inIplImage,outIplImage,DSP_BGR2GRAY);
     75                    break;
     76                default:
     77                    self->Err("input format not supported\n");
     78                }
     79                break;
     80            default:
     81                self->Err("conversion not supported\n");
     82            }
     83
     84            output->ReleaseMutex();
     85            data->ReleaseMutex();
     86
     87            output->SetDataTime(data->DataTime());
     88        }
     89    };
     90   
     91    Image *output;
     92
     93private:
     94    flair::filter::CvtColor::Conversion_t conversion;
     95    //IplImage *inIplImage,*outIplImage;
     96    flair::filter::CvtColor *self;
     97};
     98
     99
    21100namespace flair { namespace filter {
    22101
    23 CvtColor::CvtColor(const core::IODevice* parent,std::string name,Conversion_t conversion) : IODevice(parent,name),output(0) {
    24     this->conversion=conversion;
    25 
    26     switch(conversion) {
    27     case Conversion_t::ToGray:
    28         try{
    29             Image::Type const &imageType=dynamic_cast<Image::Type const &>(parent->GetOutputDataType());
    30             output=new Image(this,imageType.GetWidth(),imageType.GetHeight(),Image::Type::Format::Gray,"conversion",true,2);
    31 
    32         } catch(std::bad_cast& bc) {
    33             Err("io type mismatch\n");
    34         }
    35         break;
    36     default:
    37         Err("conversion not supported\n");
    38     }
    39    
    40     SetIsReady(true);
     102CvtColor::CvtColor(const core::IODevice* parent,std::string name,Conversion_t conversion) : IODevice(parent,name) {
     103    pimpl_=new CvtColor_impl(this,conversion);
    41104}
    42105
    43 CvtColor::~CvtColor(void) {}
     106CvtColor::~CvtColor(void) {
     107    delete pimpl_;
     108}
    44109
    45110Image* CvtColor::Output(void) {
    46     return output;
     111    return pimpl_->output;
    47112
    48113}
    49114
    50115DataType const &CvtColor::GetOutputDataType() const {
    51     if(output!=NULL) {
    52         return output->GetDataType();
     116    if(pimpl_->output!=NULL) {
     117        return pimpl_->output->GetDataType();
    53118    } else {
    54119        return dummyType;
     
    57122
    58123void CvtColor::UpdateFrom(const io_data *data) {
    59     Image *img=(Image*)data;
    60 
    61     data->GetMutex();
    62     output->GetMutex();
    63 
    64     switch(conversion) {
    65     case Conversion_t::ToGray:
    66         switch(img->GetDataType().GetFormat()) {
    67         case Image::Type::Format::YUYV:
    68             //dspCvtColor(img,output->img,DSP_YUYV2GRAY);
    69             break;
    70         case Image::Type::Format::UYVY:
    71             //dspCvtColor(img,output->img,DSP_UYVY2GRAY);
    72             break;
    73         case Image::Type::Format::BGR:
    74             //dspCvtColor(img,output->img,DSP_BGR2GRAY);
    75             break;
    76         default:
    77             Err("input format not supported\n");
    78         }
    79         break;
    80     default:
    81         Err("conversion not supported\n");
    82     }
    83 
    84     output->ReleaseMutex();
    85     data->ReleaseMutex();
    86 
    87     output->SetDataTime(data->DataTime());
    88     ProcessUpdate(output);
     124    pimpl_->UpdateFrom(data);
     125    if(pimpl_->output!=NULL) ProcessUpdate(pimpl_->output);
     126   
    89127}
    90128
Note: See TracChangeset for help on using the changeset viewer.