This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

How can configure of Resizer On dm368

Buffer_Handles:

This is in buffer  handle:

[1] @ 0x433a2000 (0x8ac74000 phys) numBytes 3523584 (3523584) useMask 1 (1) ref no vSize 0
Width 352 (1920) Height 288 (1088) Pos 24x48 LineLength 416 (1920)

This is in buffer  handle:

[0] @ 0x44248000 (0x8bb1a000 phys) numBytes 608256 (608256) useMask 0 (1) ref no vSize 0
Width 704, Height 576, LineLength 704

ERROR:
videodec: linux/dm365/Resize.c:677: Resize_yuv420sp_execute: Assertion `(rsz.in_buff.offset & 0x1F) == 0' failed.

SOURCE CODE:

/******************************************************************************
* Resize_yuv420sp_execute
******************************************************************************/
Int Resize_yuv420sp_execute(Resize_Handle hResize,
Buffer_Handle hSrcBuf, Buffer_Handle hDstBuf)
{
struct imp_convert rsz;
struct rsz_channel_config rsz_chan_config;
struct rsz_single_shot_config rsz_ss_config;
BufferGfx_Dimensions srcDim, dstDim;
UInt32 srcOffset,dstOffset;

assert(hResize);
assert(hSrcBuf);
assert(hDstBuf);

/* default configuration setting in Resizer successfull */
Dmai_clear(rsz_ss_config);
rsz_chan_config.oper_mode = IMP_MODE_SINGLE_SHOT;
rsz_chan_config.chain = 0;
rsz_chan_config.len = sizeof(struct rsz_single_shot_config);
rsz_chan_config.config = &rsz_ss_config;
if (ioctl(hResize->fd, RSZ_G_CONFIG, &rsz_chan_config) < 0) {
Dmai_err0("Error in getting resizer channel configuration from driver\n");
return Dmai_EFAIL;
}

/* Get src- and dst- dimension */
BufferGfx_getDimensions(hSrcBuf, &srcDim);
BufferGfx_getDimensions(hDstBuf, &dstDim);

/* For Y */

/* input params are set at the resizer */
rsz_ss_config.input.image_width = srcDim.width;
rsz_ss_config.input.image_height = srcDim.height;
rsz_ss_config.input.ppln = rsz_ss_config.input.image_width + 8;
rsz_ss_config.input.lpfr = rsz_ss_config.input.image_height + 10;
rsz_ss_config.input.pix_fmt = IPIPE_420SP_Y;
rsz_ss_config.output1.pix_fmt = IPIPE_YUV420SP;
rsz_ss_config.output1.enable = 1;
rsz_ss_config.output1.width = dstDim.width;
rsz_ss_config.output1.height = dstDim.height;
rsz_ss_config.output2.enable = 0;
rsz_chan_config.oper_mode = IMP_MODE_SINGLE_SHOT;
rsz_chan_config.chain = 0;
rsz_chan_config.len = sizeof(struct rsz_single_shot_config);
if (ioctl(hResize->fd, RSZ_S_CONFIG, &rsz_chan_config) < 0) {
Dmai_err0("1.Error in setting default configuration for single shot mode\n");
return Dmai_EFAIL;
}

/* Y */
Dmai_clear(rsz);
srcOffset = 0;//CANN'T BE srcDim.y * srcDim.lineLength + srcDim.x;
dstOffset = 0;//CANN'T BE dstDim.y * dstDim.lineLength + dstDim.x;

srcOffset = (srcDim.y * srcDim.lineLength) + (srcDim.x * (8 >> 3));
dstOffset = (dstDim.y * dstDim.lineLength) + (dstDim.x * (8 >> 3));

rsz.in_buff.index = -1;
rsz.in_buff.buf_type = IMP_BUF_IN;
rsz.in_buff.offset = Buffer_getPhysicalPtr(hSrcBuf) + srcOffset;
rsz.in_buff.size = srcDim.width * srcDim.height;
rsz.out_buff1.index = -1;
rsz.out_buff1.buf_type = IMP_BUF_OUT1;
rsz.out_buff1.offset = Buffer_getPhysicalPtr(hDstBuf) + dstOffset;
rsz.out_buff1.size = dstDim.lineLength * dstDim.height;

/* 
* The IPIPE requires that the memory offsets of the input and output
* buffers start on 32-byte boundaries.
*/
assert((rsz.in_buff.offset & 0x1F) == 0);
assert((rsz.out_buff1.offset & 0x1F) == 0);

/* Start IPIPE operation */
if (ioctl(hResize->fd, RSZ_RESIZE, &rsz) == -1) {
Dmai_err0("Failed RSZ_RESIZE\n");
return Dmai_EFAIL;
}

/* For UV */

/* input params are set at the resizer */
rsz_ss_config.input.image_width = srcDim.lineLength;
rsz_ss_config.input.image_height =(srcDim.height)/2;
rsz_ss_config.input.ppln = rsz_ss_config.input.image_width + 8;
rsz_ss_config.input.lpfr = rsz_ss_config.input.image_height + 10;
rsz_ss_config.input.pix_fmt = IPIPE_420SP_C;
rsz_ss_config.output1.pix_fmt = IPIPE_YUV420SP;
rsz_ss_config.output1.enable = 1;
rsz_ss_config.output1.width = dstDim.lineLength;
rsz_ss_config.output1.height = dstDim.height;//NOT dstDim.height/2!!!
rsz_ss_config.output2.enable = 0;
rsz_chan_config.oper_mode = IMP_MODE_SINGLE_SHOT;
rsz_chan_config.chain = 0;
rsz_chan_config.len = sizeof(struct rsz_single_shot_config);
if (ioctl(hResize->fd, RSZ_S_CONFIG, &rsz_chan_config) < 0) {
Dmai_err0("2.Error in setting default configuration for single shot mode\n");
return Dmai_EFAIL;
}

/* UV */
srcOffset = srcDim.y * srcDim.lineLength / 2 + \
srcDim.x * (8 >> 3) + (Buffer_getSize(hSrcBuf) * 2 / 3);
dstOffset = dstDim.y * dstDim.lineLength / 2 + 
dstDim.x * (8 >> 3) + (Buffer_getSize(hDstBuf) * 2 / 3);
rsz.in_buff.index = -1;
rsz.in_buff.buf_type = IMP_BUF_IN;
rsz.in_buff.offset = Buffer_getPhysicalPtr(hSrcBuf) + srcOffset;
rsz.in_buff.size = srcDim.width * srcDim.height / 2;
rsz.out_buff1.index = -1;
rsz.out_buff1.buf_type = IMP_BUF_OUT1;
rsz.out_buff1.offset = Buffer_getPhysicalPtr(hDstBuf) + dstOffset;
rsz.out_buff1.size = dstDim.width * dstDim.height / 2;

/* 
* The IPIPE requires that the memory offsets of the input and output
* buffers start on 32-byte boundaries.
*/
assert((rsz.in_buff.offset & 0x1F) == 0);
assert((rsz.out_buff1.offset & 0x1F) == 0);

/* Start IPIPE operation */
if (ioctl(hResize->fd, RSZ_RESIZE, &rsz) == -1) {
Dmai_err0("Failed RSZ_RESIZE\n");
return Dmai_EFAIL;
}
Buffer_setNumBytesUsed(hDstBuf, Buffer_getSize(hDstBuf));

return Dmai_EOK;
}