void *ptrs[] = { (void*)data };
img = vxCreateImageFromHandle(ctx.ctx, VX_Traits<T>::ImgType, &addr, ptrs, VX_MEMORY_TYPE_HOST);
vxErr::check(img);
+ swapMemory = true;
+ }
+ template <typename T>
+ vxImage(vxContext &ctx, T value, int w, int h)
+ {
+#if VX_VERSION > VX_VERSION_1_0
+ vx_pixel_value_t pixel;
+ switch ((int)(VX_Traits<T>::DataType))
+ {
+ case VX_TYPE_UINT8:pixel.U8 = value; break;
+ case VX_TYPE_UINT16:pixel.U16 = value; break;
+ case VX_TYPE_INT16:pixel.S16 = value; break;
+ default:vxErr(VX_ERROR_INVALID_PARAMETERS, "uniform image creation").check();
+ }
+ img = vxCreateUniformImage(ctx.ctx, w, h, VX_Traits<T>::ImgType, &pixel);
+#else
+ img = vxCreateUniformImage(ctx.ctx, w, h, VX_Traits<T>::ImgType, &value);
+#endif
+ vxErr::check(img);
+ swapMemory = false;
}
vxImage(vxContext &ctx, int imgType, const uchar *data, size_t step, int w, int h)
{
}
img = vxCreateImageFromHandle(ctx.ctx, imgType, addr, ptrs, VX_MEMORY_TYPE_HOST);
vxErr::check(img);
+ swapMemory = true;
}
~vxImage()
{
#if VX_VERSION > VX_VERSION_1_0
- vxErr::check(vxSwapImageHandle(img, NULL, NULL, 1));
+ if (swapMemory)
+ vxErr::check(vxSwapImageHandle(img, NULL, NULL, 1));
#endif
vxReleaseImage(&img);
}
+private:
+ bool swapMemory;
};
struct vxMatrix
return CV_HAL_ERROR_OK;
}
+inline int ovx_hal_cvtGraytoBGR(const uchar * a, size_t astep, uchar * b, size_t bstep, int w, int h, int depth, int bcn)
+{
+ if(dimTooBig(w) || dimTooBig(h))
+ return CV_HAL_ERROR_NOT_IMPLEMENTED;
+ if (depth != CV_8U || (bcn != 3 && bcn != 4))
+ return CV_HAL_ERROR_NOT_IMPLEMENTED;
+
+ try
+ {
+ vxContext * ctx = vxContext::getContext();
+ vxImage ia(*ctx, a, astep, w, h);
+ vxImage ib(*ctx, bcn == 3 ? VX_DF_IMAGE_RGB : VX_DF_IMAGE_RGBX, b, bstep, w, h);
+ vxErr::check(vxuChannelCombine(ctx->ctx, ia.img, ia.img, ia.img,
+ bcn == 4 ? vxImage(*ctx, uchar(255), w, h).img : NULL,
+ ib.img));
+ }
+ catch (vxErr & e)
+ {
+ e.print();
+ return CV_HAL_ERROR_UNKNOWN;
+ }
+ return CV_HAL_ERROR_OK;
+}
+
inline int ovx_hal_cvtTwoPlaneYUVtoBGR(const uchar * a, size_t astep, uchar * b, size_t bstep, int w, int h, int bcn, bool swapBlue, int uIdx)
{
if(dimTooBig(w) || dimTooBig(h))
#undef cv_hal_cvtBGRtoBGR
#define cv_hal_cvtBGRtoBGR ovx_hal_cvtBGRtoBGR
+#undef cv_hal_cvtGraytoBGR
+#define cv_hal_cvtGraytoBGR ovx_hal_cvtGraytoBGR
#undef cv_hal_cvtTwoPlaneYUVtoBGR
#define cv_hal_cvtTwoPlaneYUVtoBGR ovx_hal_cvtTwoPlaneYUVtoBGR
#undef cv_hal_cvtThreePlaneYUVtoBGR