amvideo: fix black screen issue when provide reset [1/1]

PD#SWPL-17497

Problem:
When decode resets before first frame coming, vpp will
disable video layer.

Solution:
Only switch the dispbuf_mapping after available frame toggled

Verify:
Verifed on u212

Change-Id: I798997ac9355efd0c477a7c9c59513c82110748f
Signed-off-by: Brian Zhu <brian.zhu@amlogic.com>
This commit is contained in:
Brian Zhu
2019-11-28 14:06:09 +08:00
committed by Chris KIM
parent cb9997dac2
commit c4bdacb1b3
2 changed files with 16 additions and 12 deletions

View File

@@ -4120,7 +4120,8 @@ SET_FILTER:
new_frame = cur_pipbuf;
}
}
vd_layer[0].dispbuf_mapping = &cur_pipbuf;
if (new_frame || cur_pipbuf)
vd_layer[0].dispbuf_mapping = &cur_pipbuf;
cur_blackout = blackout_pip | force_blackout;
} else if (vd1_path_id != VFM_PATH_INVAILD) {
/* priamry display on VD1 */
@@ -4140,7 +4141,8 @@ SET_FILTER:
new_frame = cur_dispbuf;
}
}
vd_layer[0].dispbuf_mapping = &cur_dispbuf;
if (new_frame || cur_dispbuf)
vd_layer[0].dispbuf_mapping = &cur_dispbuf;
cur_blackout = blackout | force_blackout;
} else {
cur_blackout = 1;
@@ -4237,7 +4239,8 @@ SET_FILTER:
new_frame2 = cur_dispbuf;
}
}
vd_layer[1].dispbuf_mapping = &cur_dispbuf;
if (new_frame2 || cur_dispbuf)
vd_layer[1].dispbuf_mapping = &cur_dispbuf;
cur_blackout = blackout | force_blackout;
} else if (vd2_path_id != VFM_PATH_INVAILD) {
/* pip display in VD2 */
@@ -4256,7 +4259,8 @@ SET_FILTER:
new_frame2 = cur_pipbuf;
}
}
vd_layer[1].dispbuf_mapping = &cur_pipbuf;
if (new_frame2 || cur_pipbuf)
vd_layer[1].dispbuf_mapping = &cur_pipbuf;
cur_blackout = blackout_pip | force_blackout;
} else {
cur_blackout = 1;

View File

@@ -2329,10 +2329,10 @@ static void disable_vd1_blend(struct video_layer_s *layer)
if (layer->dispbuf &&
is_local_vf(layer->dispbuf))
layer->dispbuf = NULL;
if (layer->dispbuf_mapping &&
*layer->dispbuf_mapping &&
is_local_vf(*layer->dispbuf_mapping)) {
*layer->dispbuf_mapping = NULL;
if (layer->dispbuf_mapping) {
if (*layer->dispbuf_mapping &&
is_local_vf(*layer->dispbuf_mapping))
*layer->dispbuf_mapping = NULL;
layer->dispbuf_mapping = NULL;
layer->dispbuf = NULL;
}
@@ -2364,10 +2364,10 @@ static void disable_vd2_blend(struct video_layer_s *layer)
if (layer->dispbuf &&
is_local_vf(layer->dispbuf))
layer->dispbuf = NULL;
if (layer->dispbuf_mapping &&
*layer->dispbuf_mapping &&
is_local_vf(*layer->dispbuf_mapping)) {
*layer->dispbuf_mapping = NULL;
if (layer->dispbuf_mapping) {
if (*layer->dispbuf_mapping &&
is_local_vf(*layer->dispbuf_mapping))
*layer->dispbuf_mapping = NULL;
layer->dispbuf_mapping = NULL;
layer->dispbuf = NULL;
}