#endif
-}//namespace cv
-
#ifdef HAVE_IPP
-namespace cv
-{
-static bool ipp_cvtColor( InputArray _src, OutputArray _dst, int code, int dcn )
+static bool ipp_cvtColor( Mat &src, OutputArray _dst, int code, int dcn )
{
- int stype = _src.type();
+ int stype = src.type();
int scn = CV_MAT_CN(stype), depth = CV_MAT_DEPTH(stype);
- Mat src = _src.getMat(), dst;
+ Mat dst;
Size sz = src.size();
switch( code )
return false;
}
}
-}
#endif
+}
//////////////////////////////////////////////////////////////////////////////////////////
// The main function //
Mat src = _src.getMat(), dst;
Size sz = src.size();
+ CV_Assert( depth == CV_8U || depth == CV_16U || depth == CV_32F );
- CV_IPP_RUN(true, ipp_cvtColor(_src, _dst, code, dcn));
+ CV_IPP_RUN(true, ipp_cvtColor(src, _dst, code, dcn));
switch( code )
{
_dst.create( sz, CV_MAKETYPE(depth, dcn));
dst = _dst.getMat();
-
if( depth == CV_8U )
{
#ifdef HAVE_TEGRA_OPTIMIZATION
- if(!tegra::cvtBGR2RGB(src, dst, bidx))
+ if(tegra::useTegra() && tegra::cvtBGR2RGB(src, dst, bidx))
+ break;
#endif
- CvtColorLoop(src, dst, RGB2RGB<uchar>(scn, dcn, bidx));
+ CvtColorLoop(src, dst, RGB2RGB<uchar>(scn, dcn, bidx));
}
else if( depth == CV_16U )
CvtColorLoop(src, dst, RGB2RGB<ushort>(scn, dcn, bidx));
_dst.create(sz, CV_8UC2);
dst = _dst.getMat();
-
#ifdef HAVE_TEGRA_OPTIMIZATION
if(code == CV_BGR2BGR565 || code == CV_BGRA2BGR565 || code == CV_RGB2BGR565 || code == CV_RGBA2BGR565)
- if(tegra::cvtRGB2RGB565(src, dst, code == CV_RGB2BGR565 || code == CV_RGBA2BGR565 ? 0 : 2))
+ if(tegra::useTegra() && tegra::cvtRGB2RGB565(src, dst, code == CV_RGB2BGR565 || code == CV_RGBA2BGR565 ? 0 : 2))
break;
#endif
_dst.create(sz, CV_MAKETYPE(depth, 1));
dst = _dst.getMat();
-
bidx = code == CV_BGR2GRAY || code == CV_BGRA2GRAY ? 0 : 2;
if( depth == CV_8U )
{
#ifdef HAVE_TEGRA_OPTIMIZATION
- if(!tegra::cvtRGB2Gray(src, dst, bidx))
+ if(tegra::useTegra() && tegra::cvtRGB2Gray(src, dst, bidx))
+ break;
#endif
CvtColorLoop(src, dst, RGB2Gray<uchar>(scn, bidx, 0));
}
_dst.create(sz, CV_MAKETYPE(depth, dcn));
dst = _dst.getMat();
-
if( depth == CV_8U )
{
#ifdef HAVE_TEGRA_OPTIMIZATION
- if(!tegra::cvtGray2RGB(src, dst))
+ if(tegra::useTegra() && tegra::cvtGray2RGB(src, dst))
+ break;
#endif
CvtColorLoop(src, dst, Gray2RGB<uchar>(dcn));
}
if( depth == CV_8U )
{
#ifdef HAVE_TEGRA_OPTIMIZATION
- if((code == CV_RGB2YCrCb || code == CV_BGR2YCrCb) && tegra::cvtRGB2YCrCb(src, dst, bidx))
+ if((code == CV_RGB2YCrCb || code == CV_BGR2YCrCb) && tegra::useTegra() && tegra::cvtRGB2YCrCb(src, dst, bidx))
break;
#endif
CvtColorLoop(src, dst, RGB2YCrCb_i<uchar>(scn, bidx, coeffs_i));
_dst.create(sz, CV_MAKETYPE(depth, dcn));
dst = _dst.getMat();
-
if( depth == CV_8U )
CvtColorLoop(src, dst, YCrCb2RGB_i<uchar>(dcn, bidx, coeffs_i));
else if( depth == CV_16U )
_dst.create(sz, CV_MAKETYPE(depth, 3));
dst = _dst.getMat();
-
if( code == CV_BGR2HSV || code == CV_RGB2HSV ||
code == CV_BGR2HSV_FULL || code == CV_RGB2HSV_FULL )
{
#ifdef HAVE_TEGRA_OPTIMIZATION
- if(tegra::cvtRGB2HSV(src, dst, bidx, hrange))
+ if(tegra::useTegra() && tegra::cvtRGB2HSV(src, dst, bidx, hrange))
break;
#endif
if( depth == CV_8U )
_dst.create(sz, CV_MAKETYPE(depth, dcn));
dst = _dst.getMat();
-
if( code == CV_HSV2BGR || code == CV_HSV2RGB ||
code == CV_HSV2BGR_FULL || code == CV_HSV2RGB_FULL )
{
_dst.create(sz, CV_MAKETYPE(depth, 3));
dst = _dst.getMat();
-
if( code == CV_BGR2Lab || code == CV_RGB2Lab ||
code == CV_LBGR2Lab || code == CV_LRGB2Lab )
{
_dst.create(sz, CV_MAKETYPE(depth, dcn));
dst = _dst.getMat();
-
if( code == CV_Lab2BGR || code == CV_Lab2RGB ||
code == CV_Lab2LBGR || code == CV_Lab2LRGB )
{