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; }