提交 b0d2217c 编写于 作者: V Vadim Pisarevsky

Merge pull request #7515 from terfendail:ovxhal_graytobgr

......@@ -225,6 +225,26 @@ struct vxImage
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)
{
......@@ -295,14 +315,18 @@ struct vxImage
}
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
......@@ -999,6 +1023,30 @@ inline int ovx_hal_cvtBGRtoBGR(const uchar * a, size_t astep, uchar * b, size_t
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))
......@@ -1183,6 +1231,8 @@ inline int ovx_hal_cvtOnePlaneYUVtoBGR(const uchar * a, size_t astep, uchar * b,
#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
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册