Hello All,
In one of our application, we need to capture the video, re size it and rotates the video at 90 degree. For that we have used CSI parallel port and ov5642 camera sensor, captures the video using this camera. Then we used View finder prepossessing task and directly fed the CSI data in to IC as destination and used channel 21 to get the re-size data in to buffer. We feed this buffer in to View finder rotation task and enables VF rotation bit. It rotates the video correctly but it flickers the screen very much.we used channel 46 and 49 as rotation view finder task DMA channel. If we disable the Rotation task flickers does not happen. We are capturing the video of size 1024*768 and re-sized it to 640*480 and rotates it to 90 degree.
We are using Platform SDK V1.1 driver code of IPU. We are not using V4L2 driver for above application.
Is rotation of View finder task introduce flickering of the screen? How to resolve this issue.
Please help..
Thanks,
J.
Hi John,
I'm developing an i.MX53 BSP now, and I need to rotate the display at 90 degree, now I'm trying to use the PRP to implement this, too, but my system is wince7, could you be kindly to share some experience with me? And here are some of my questions:
1. Does your original BSP support use PRP in the display driver? I mean, you just need to enable that function or you need to develop it by yourself.
2. Does the PRP task use the IC&IRT unit to rotate the display?
Thank you very much.
Hi
I can see that somehow when marking as ready both the in and out re-sizing buffers is what is causing the flicker
//enable resize idma channel
ipu_channel_buf_ready(ipu_index, res_chnl_out, 0);
ipu_channel_buf_ready(ipu_index, res_chnl_in, 0);
If you comment out one of the above lines, you will not see the flicker but obviously the re-sizing is not performed.
I checked in linux kernel and the way the do the re-sizing + rotation usecase is by linking the output of the re-sizing channel to the input of the rotation channel, so they only need to mark the readiness of res_chnl_out. So, maybe this approach might help.
Below is some code (I have not tested) that I copied and semi-ported from linux to link the channels. In this way you can link the res_chnl_out with rot_chnl_in and you can ommit the "ipu_channel_buf_ready(ipu_index, res_chnl_in, 0)" call since the linking will do it for you automatically.
ipu_link_channels(int32_t src_ch, int32_t dest_ch)
{
switch (src_ch) {
case MEM_PRP_VF_MEM:
ipu_write_field(ipu_index, IPU_IPU_FS_PROC_FLOW2__PRPVF_DEST_SEL, proc_dest_sel[dest_ch]);
break;
default: break;
switch (dest_ch) {
case MEM_ROT_VF_MEM:
ipu_write_field(ipu_index,IPU_IPU_FS_PROC_FLOW1__PRPVF_ROT_SRC_SEL, proc_src_sel[src_ch]);
break;
default: break;
}
nt proc_dest_sel[] = {
0, 1, 1, 3, 5, 5, 4, 7, 8, 9, 10, 11, 12, 14, 15, 16,
0, 1, 1, 5, 5, 5, 5, 5, 7, 8, 9, 10, 11, 12, 14, 31 };
static int proc_src_sel[] = { 0, 6, 7, 6, 7, 8, 5, NA, NA, NA,
NA, NA, NA, NA, NA, 1, 2, 3, 4, 7, 8, NA, 8, NA };
Would you make a try and let us know if that fixes the flicker?