mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-07 19:30:30 +09:00
drm/rockchip: vop2: add more sdr2hdr scene
maybe appear the following scene for sdr2hdr:
1. one sdr layer -> vop[sdr2hdr] -> hdr output
2. one hdr layer -> vop[bypass] |
| -> hdr output
one/more sdr layer -> vop[sdr2hdr] |
Signed-off-by: Sandy Huang <hjc@rock-chips.com>
Change-Id: I042baf68d36f6f9a089d81928c783e52a2b21499
This commit is contained in:
@@ -4385,6 +4385,9 @@ static void vop2_setup_hdr10(struct vop2_video_port *vp, uint8_t win_phys_id)
|
||||
bool sdr2hdr_tf = 0;
|
||||
bool hdr2sdr_tf_update = 1;
|
||||
bool sdr2hdr_tf_update = 1;
|
||||
unsigned long win_mask = vp->win_mask;
|
||||
int phys_id;
|
||||
bool have_sdr_layer = false;
|
||||
|
||||
/*
|
||||
* Check whether this video port support hdr or not
|
||||
@@ -4410,14 +4413,28 @@ static void vop2_setup_hdr10(struct vop2_video_port *vp, uint8_t win_phys_id)
|
||||
*/
|
||||
if (vp->hdr_in && !vp->hdr_out)
|
||||
hdr2sdr_en = 1;
|
||||
|
||||
if (!vp->hdr_in && vp->hdr_out)
|
||||
sdr2hdr_en = 1;
|
||||
|
||||
vp->sdr2hdr_en = sdr2hdr_en;
|
||||
vpstate->hdr_in = hdr_en;
|
||||
vpstate->hdr2sdr_en = hdr2sdr_en;
|
||||
|
||||
/*
|
||||
* To confirm whether need to enable sdr2hdr.
|
||||
*/
|
||||
for_each_set_bit(phys_id, &win_mask, ROCKCHIP_MAX_LAYER) {
|
||||
win = vop2_find_win_by_phys_id(vop2, phys_id);
|
||||
plane = &win->base;
|
||||
pstate = plane->state;
|
||||
vpstate = to_vop2_plane_state(pstate);
|
||||
|
||||
if (vpstate->eotf != SMPTE_ST2084) {
|
||||
have_sdr_layer = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (have_sdr_layer && vp->hdr_out)
|
||||
sdr2hdr_en = 1;
|
||||
vp->sdr2hdr_en = sdr2hdr_en;
|
||||
|
||||
if (sdr2hdr_en) {
|
||||
sdr2hdr_r2r_mode = BT709_TO_BT2020;
|
||||
if (vp->hdr_out)
|
||||
@@ -4945,8 +4962,8 @@ static void vop2_crtc_atomic_begin(struct drm_crtc *crtc, struct drm_crtc_state
|
||||
|
||||
sort(vop2_zpos, nr_layers, sizeof(vop2_zpos[0]), vop2_zpos_cmp, NULL);
|
||||
|
||||
vop2_setup_hdr10(vp, vop2_zpos[0].win_phys_id);
|
||||
vop2_setup_layer_mixer_for_vp(vp, vop2_zpos);
|
||||
vop2_setup_hdr10(vp, vop2_zpos[0].win_phys_id);
|
||||
vop2_setup_alpha(vp, vop2_zpos);
|
||||
vop2_setup_dly_for_vp(vp);
|
||||
vop2_setup_dly_for_window(vp, vop2_zpos);
|
||||
|
||||
Reference in New Issue
Block a user