Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

added features to nv_transform module #332

Open
wants to merge 11 commits into
base: main
Choose a base branch
from
170 changes: 163 additions & 7 deletions base/include/NvTransform.h
kushaljain-apra marked this conversation as resolved.
Show resolved Hide resolved
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,32 @@

#include "Module.h"

class CropRect : public ModuleProps
{
public:
CropRect(int _top, int _left, int _width, int _height) : top(_top), left(_left), width(_width), height(_height) {}

int top;
int left;
int width;
int height;

size_t getSerializeSize()
{
return ModuleProps::getSerializeSize() + sizeof(int) * 4;
}

private:
friend class boost::serialization::access;

template <class Archive>
void serialize(Archive &ar, const unsigned int version)
{
ar &boost::serialization::base_object<ModuleProps>(*this);
ar &top &left &width &height ;
}
};

class NvTransformProps : public ModuleProps
{
public:
Expand All @@ -15,46 +41,171 @@ class NvTransformProps : public ModuleProps
NICEST // transform filter nicest.
};

NvTransformProps(ImageMetadata::ImageType _imageType) : top(0) , left(0) , width(0) , height(0)
enum NvTransformRotate
{
ROTATE_0 = 0, // rotate 0 degress
ANTICLOCKWISE_ROTATE_90, // rotate 90 degrees anticlockwise
ANTICLOCKWISE_ROTATE_180, // rotate 180 degrees anticlockwise
ANTICLOCKWISE_ROTATE_270, // rotate 270 degrees anticlockwise
CLOCKWISE_ROTATE_90, // rotate 90 degrees clockwise
CLOCKWISE_ROTATE_180, // rotate 180 degrees clockwise
CLOCKWISE_ROTATE_270, // rotate 270 degrees clockwise
};

NvTransformProps(ImageMetadata::ImageType _imageType) : output_width(0), output_height(0), src_rect({0,0,0,0}), dst_rect({0,0,0,0})
{
imageType = _imageType;
scaleHeight = 1;
scaleWidth = 1;
filterType = NvTransformFilter::SMART;
rotateType = NvTransformRotate::ROTATE_0;
}

NvTransformProps(ImageMetadata::ImageType _imageType, NvTransformRotate _rotateType) : output_width(0), output_height(0), src_rect({0,0,0,0}), dst_rect({0,0,0,0})
{
imageType = _imageType;
scaleHeight = 1;
scaleWidth = 1;
filterType = NvTransformFilter::SMART;
rotateType = _rotateType;
}
NvTransformProps(ImageMetadata::ImageType _imageType, int _width, int _height) : top(0) , left(0) , width(_width) , height(_height)

NvTransformProps(ImageMetadata::ImageType _imageType, int _width, int _height) : output_width(_width) , output_height(_height), src_rect({0,0,0,0}), dst_rect({0,0,0,0})
{
imageType = _imageType;
scaleHeight = 1;
scaleWidth = 1;
filterType = NvTransformFilter::SMART;
rotateType = NvTransformRotate::ROTATE_0;
}
NvTransformProps(ImageMetadata::ImageType _imageType, int _width, int _height, float _scaleWidth, float _scaleHeight, NvTransformFilter _filterType) : top(0) , left(0) , width(_width) , height(_height)

NvTransformProps(ImageMetadata::ImageType _imageType, int _width, int _height, NvTransformRotate _rotateType) : output_width(_width), output_height(_height), src_rect({0,0,0,0}), dst_rect({0,0,0,0})
{
imageType = _imageType;
scaleHeight = 1;
scaleWidth = 1;
filterType = NvTransformFilter::SMART;
rotateType = _rotateType;
}

NvTransformProps(ImageMetadata::ImageType _imageType, int _width, int _height, NvTransformFilter _filterType, NvTransformRotate _rotateType) : output_width(_width) , output_height(_height), src_rect({0,0,0,0}), dst_rect({0,0,0,0})
{
imageType = _imageType;
scaleHeight = 1;
scaleWidth = 1;
filterType = _filterType;
rotateType = _rotateType;
}

NvTransformProps(ImageMetadata::ImageType _imageType, int _width, int _height, float _scaleWidth, float _scaleHeight, NvTransformFilter _filterType) : output_width(_width) , output_height(_height), src_rect({0,0,0,0}), dst_rect({0,0,0,0})
{
imageType = _imageType;
filterType = _filterType;
scaleHeight = _scaleHeight;
scaleWidth = _scaleWidth;
rotateType = NvTransformRotate::ROTATE_0;
}
NvTransformProps(ImageMetadata::ImageType _imageType, int _width, int _height, int _top , int _left) : top(_top) , left(_left) , width(_width) , height(_height)

NvTransformProps(ImageMetadata::ImageType _imageType, int _width, int _height, float _scaleWidth, float _scaleHeight, NvTransformFilter _filterType, NvTransformRotate _rotateType) : output_width(_width) , output_height(_height), src_rect({0,0,0,0}), dst_rect({0,0,0,0})
{
imageType = _imageType;
filterType = _filterType;
scaleHeight = _scaleHeight;
scaleWidth = _scaleWidth;
rotateType = _rotateType;
}

NvTransformProps(ImageMetadata::ImageType _imageType, int _width, int _height, CropRect _src_rect) : output_width(_width) , output_height(_height), src_rect(_src_rect), dst_rect({0,0,0,0})
{
imageType = _imageType;
scaleHeight = 1;
scaleWidth = 1;
filterType = NvTransformFilter::SMART;
rotateType = NvTransformRotate::ROTATE_0;
}
NvTransformProps(ImageMetadata::ImageType _imageType, int _width, int _height, int _top , int _left, float _scaleWidth, float _scaleHeight, NvTransformFilter _filterType) : top(_top) , left(_left) , width(_width) , height(_height)

NvTransformProps(ImageMetadata::ImageType _imageType, int _width, int _height, CropRect _src_rect, NvTransformRotate _rotateType) : output_width(_width) , output_height(_height), src_rect(_src_rect), dst_rect({0,0,0,0})
{
imageType = _imageType;
scaleHeight = 1;
scaleWidth = 1;
filterType = NvTransformFilter::SMART;
rotateType = _rotateType;
}

NvTransformProps(ImageMetadata::ImageType _imageType, int _width, int _height, CropRect _src_rect, float _scaleWidth, float _scaleHeight, NvTransformFilter _filterType) : output_width(_width) , output_height(_height), src_rect(_src_rect), dst_rect({0,0,0,0})
{
imageType = _imageType;
filterType = _filterType;
scaleHeight = _scaleHeight;
scaleWidth = _scaleWidth;
rotateType = NvTransformRotate::ROTATE_0;
}

NvTransformProps(ImageMetadata::ImageType _imageType, CropRect _src_rect, float _scaleWidth, float _scaleHeight, NvTransformFilter _filterType, NvTransformRotate _rotateType) : output_width(0) , output_height(0), src_rect(_src_rect), dst_rect({0,0,0,0})
{
imageType = _imageType;
filterType = _filterType;
scaleHeight = _scaleHeight;
scaleWidth = _scaleWidth;
rotateType = _rotateType;
}

NvTransformProps(ImageMetadata::ImageType _imageType, CropRect _src_rect, NvTransformFilter _filterType, NvTransformRotate _rotateType) : output_width(0) , output_height(0), src_rect(_src_rect), dst_rect({0,0,0,0})
{
imageType = _imageType;
filterType = _filterType;
scaleHeight = 1;
scaleWidth = 1;
rotateType = _rotateType;
}

NvTransformProps(ImageMetadata::ImageType _imageType, int _width, int _height, CropRect _src_rect, float _scaleWidth, float _scaleHeight, NvTransformFilter _filterType, NvTransformRotate _rotateType) : output_width(_width) , output_height(_height), src_rect(_src_rect), dst_rect({0,0,0,0})
{
imageType = _imageType;
filterType = _filterType;
scaleHeight = _scaleHeight;
scaleWidth = _scaleWidth;
rotateType = _rotateType;
}

NvTransformProps(ImageMetadata::ImageType _imageType, int _width, int _height, CropRect _src_rect, NvTransformFilter _filterType, NvTransformRotate _rotateType) : output_width(_width) , output_height(_height), src_rect(_src_rect), dst_rect({0,0,0,0})
{
imageType = _imageType;
filterType = _filterType;
scaleHeight = 1;
scaleWidth = 1;
rotateType = _rotateType;
}

ImageMetadata::ImageType imageType;
int top,left,width,height;
int output_width, output_height;
NvTransformFilter filterType;
float scaleWidth, scaleHeight; // scaleWidth and scaleHeight are factor of width and height ,
//1 means no change 0.5 means half of actual dimension ,2 means twice of actual dimension
//1 means no change 0.5 means half of actual dimension ,2 means twice of actual dimension
kushaljain-apra marked this conversation as resolved.
Show resolved Hide resolved

NvTransformRotate rotateType;
CropRect src_rect, dst_rect;

size_t getSerializeSize()
{
return ModuleProps::getSerializeSize() + sizeof(int) * 2 + sizeof(float) * 2 + sizeof(src_rect) * 2 + sizeof(imageType) + sizeof(filterType) + sizeof(rotateType);
}

private:
friend class boost::serialization::access;

template <class Archive>
void serialize(Archive &ar, const unsigned int version)
{
ar &boost::serialization::base_object<ModuleProps>(*this);
ar &output_width &output_height ;
ar &scaleWidth &scaleHeight ;
ar &src_rect &dst_rect ;
ar& imageType;
ar& filterType;
ar& rotateType;
}
};

class NvTransform : public Module
Expand All @@ -66,6 +217,9 @@ class NvTransform : public Module
bool init();
bool term();

void setProps(NvTransformProps& props);
NvTransformProps getProps();

protected:
bool process(frame_container& frames);
bool processSOS(frame_sp& frame);
Expand All @@ -74,6 +228,8 @@ class NvTransform : public Module
void addInputPin(framemetadata_sp& metadata, string& pinId); // throws exception if validation fails
bool processEOS(string& pinId);

bool handlePropsChange(frame_sp& frame);

private:
void setMetadata(framemetadata_sp& metadata);
class Detail;
Expand Down
Loading
Loading