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?