Now, In our project, we want to display 4 1080P video streams(YUV420P) on one monitor. The below pic shows it.
**************3840
±----------------±---------------+
|||
| 1920x1080(win A)|1920x1080(win B)|
|||
|-----------------±---------------+ 2160
|||
| 1920x1080(win C)|1920x1080(win D)|
|*||
±----------------±---------------+
*************Monitor(3840x2160)
We have trouble in realizing it. In our config, we modify file “kernel/driver/video/tegra/dc/dc.c”,
add three fb_mem resources to be mapped with win B, win C, win D. And modify file “kerne/driver/video/tegra/fb.c”,
modify tegra_fb_set_par function. Firstly, we add YUV420P support, beacuse only RGB format is supported
in Nvidia’s official Kernel. Secondly, we set tegar_fb->win.out_x, tegar_fb->win.out_y, tegar_fb->win.out.w,
tegar_fb->win.out_h according to the tegar_fb->win.idx. But it doesn’t work rightly.
********* win A ** win B ** win C ** win D
win.out_x ** 0 * 1920 * 0 * 1920
win.out_y ** 0 * 0 * 1080 * 1080
win.out_w * 1920 * 1920 * 1920 *1920
win.out_h * 1080 * 1080 * 1080 * 1080
Then we also set tegar_fb->win.stride, tegar_fb->win.stride_nv, tegra_fb->win.phys_addr_u, tegra_fb->win.phys_addr_v.
But it still doesn’t work rightly.
tegra_fb->win.stride = var->xres / 2 * var->bits_per_pixel / 8; (because win’s width is half of monitor’s width)
tegra_fb->win.stride_uv = tegra_fb->win.stride;
tegra_fb->win.phys_addr_u = tegar_fb->phys_start + tegar_fb->win.out_w * tegra_fb->win.out_h;
tegar_fb->win.phys_addr_v = tegar_fb->win.phys_addr_u + tegar_fb->win.out_w * tegra_fb->win.out_h / 4;
We could put different video frames to the win A, win B, win C, win D, but the image showed on monitor is not right.
Our problem is how to modify some driver source files to support 4 windows displaying ? Or is this usecase supported
by Nvidia Tgera X1 Display Controller ?