summaryrefslogtreecommitdiff
authorGan Zhang <gan.zhang@amlogic.com>2020-04-16 08:29:01 (GMT)
committer Gan Zhang <gan.zhang@amlogic.com>2020-04-28 05:15:04 (GMT)
commitf7a807582fff33856fdf41cccd16433794bb719e (patch)
tree1fc4dffc52de98e2fd9ef69513f0d901e7ffa939
parentdc929430403db3f6048715cc459cfa9463aa02f8 (diff)
downloadmedia_modules-f7a807582fff33856fdf41cccd16433794bb719e.zip
media_modules-f7a807582fff33856fdf41cccd16433794bb719e.tar.gz
media_modules-f7a807582fff33856fdf41cccd16433794bb719e.tar.bz2
decoder: vp9 and av1 format cann't keep yuv data. [2/2]
PD#SWPL-21296 Problem: When double write is 3, because the keep in mem_head_handle is the compressed data header and there is no keep to yuv data,the display before starting to play is dirty data. Solution: Add mem_vf_handle to keep display yuv data. Verify: U212 Change-Id: I982fb1e7fd593abf11a94837a15d632a578edd1a Signed-off-by: Gan Zhang <gan.zhang@amlogic.com>
Diffstat
-rw-r--r--drivers/frame_provider/decoder/vav1/vav1.c10
-rw-r--r--drivers/frame_provider/decoder/vp9/vvp9.c9
2 files changed, 19 insertions, 0 deletions
diff --git a/drivers/frame_provider/decoder/vav1/vav1.c b/drivers/frame_provider/decoder/vav1/vav1.c
index c523f92..e84ee3e 100644
--- a/drivers/frame_provider/decoder/vav1/vav1.c
+++ b/drivers/frame_provider/decoder/vav1/vav1.c
@@ -5492,6 +5492,7 @@ static void update_vf_memhandle(struct AV1HW_s *hw,
if (pic->index < 0) {
vf->mem_handle = NULL;
vf->mem_head_handle = NULL;
+ vf->mem_dw_handle = NULL;
} else if (vf->type & VIDTYPE_SCATTER) {
#ifdef AOM_AV1_MMU_DW
if (pic->double_write_mode & 0x20 &&
@@ -5503,6 +5504,7 @@ static void update_vf_memhandle(struct AV1HW_s *hw,
decoder_bmmu_box_get_mem_handle(
hw->bmmu_box,
DW_HEADER_BUFFER_IDX(pic->BUF_index));
+ vf->mem_dw_handle = NULL;
} else
#endif
{
@@ -5513,6 +5515,13 @@ static void update_vf_memhandle(struct AV1HW_s *hw,
decoder_bmmu_box_get_mem_handle(
hw->bmmu_box,
HEADER_BUFFER_IDX(pic->BUF_index));
+ if (hw->double_write_mode == 3)
+ vf->mem_dw_handle =
+ decoder_bmmu_box_get_mem_handle(
+ hw->bmmu_box,
+ VF_BUFFER_IDX(pic->BUF_index));
+ else
+ vf->mem_dw_handle = NULL;
}
#ifdef USE_SPEC_BUF_FOR_MMU_HEAD
vf->mem_head_handle = NULL;
@@ -5522,6 +5531,7 @@ static void update_vf_memhandle(struct AV1HW_s *hw,
decoder_bmmu_box_get_mem_handle(
hw->bmmu_box, VF_BUFFER_IDX(pic->BUF_index));
vf->mem_head_handle = NULL;
+ vf->mem_dw_handle = NULL;
/*vf->mem_head_handle =
*decoder_bmmu_box_get_mem_handle(
*hw->bmmu_box, VF_BUFFER_IDX(BUF_index));
diff --git a/drivers/frame_provider/decoder/vp9/vvp9.c b/drivers/frame_provider/decoder/vp9/vvp9.c
index 1f7bd6c..2f4eb08 100644
--- a/drivers/frame_provider/decoder/vp9/vvp9.c
+++ b/drivers/frame_provider/decoder/vp9/vvp9.c
@@ -7034,6 +7034,7 @@ static void update_vf_memhandle(struct VP9Decoder_s *pbi,
if (pic->index < 0) {
vf->mem_handle = NULL;
vf->mem_head_handle = NULL;
+ vf->mem_dw_handle = NULL;
} else if (vf->type & VIDTYPE_SCATTER) {
vf->mem_handle =
decoder_mmu_box_get_mem_handle(
@@ -7042,11 +7043,19 @@ static void update_vf_memhandle(struct VP9Decoder_s *pbi,
decoder_bmmu_box_get_mem_handle(
pbi->bmmu_box,
HEADER_BUFFER_IDX(pic->BUF_index));
+ if (pbi->double_write_mode == 3)
+ vf->mem_dw_handle =
+ decoder_bmmu_box_get_mem_handle(
+ pbi->bmmu_box,
+ VF_BUFFER_IDX(pic->BUF_index));
+ else
+ vf->mem_dw_handle = NULL;
} else {
vf->mem_handle =
decoder_bmmu_box_get_mem_handle(
pbi->bmmu_box, VF_BUFFER_IDX(pic->BUF_index));
vf->mem_head_handle = NULL;
+ vf->mem_dw_handle = NULL;
/*vf->mem_head_handle =
*decoder_bmmu_box_get_mem_handle(
*hevc->bmmu_box, VF_BUFFER_IDX(BUF_index));