author | Gan 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) |
commit | f7a807582fff33856fdf41cccd16433794bb719e (patch) | |
tree | 1fc4dffc52de98e2fd9ef69513f0d901e7ffa939 | |
parent | dc929430403db3f6048715cc459cfa9463aa02f8 (diff) | |
download | media_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>
-rw-r--r-- | drivers/frame_provider/decoder/vav1/vav1.c | 10 | ||||
-rw-r--r-- | drivers/frame_provider/decoder/vp9/vvp9.c | 9 |
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)); |