From 4bdc7e4ff39d3d9e543990610ac5fdefd669a474 Mon Sep 17 00:00:00 2001 From: "shihong.zheng" Date: Wed, 5 Dec 2018 15:58:51 +0800 Subject: [PATCH] H265: fix output frame latancy [1/1] PD#IPTV-347 Problem: output frame latancy when run videophonetest. Solution: sps_max_dec_pic_buffering_minus1_0 to get buf num when sps_num_reorder_pics_0 is 0. ucode gerrit id: 56487 Verify: need verify by u212 iptv code Change-Id: I199c45ee48ba4c535d0303347af27f9a572ed2c8 Signed-off-by: shihong.zheng --- .../frame_provider/decoder/h265/vh265.c | 14 ++++++++++---- firmware/video/video_ucode.bin | Bin 957696 -> 957696 bytes 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/drivers/amlogic/media_modules/frame_provider/decoder/h265/vh265.c b/drivers/amlogic/media_modules/frame_provider/decoder/h265/vh265.c index d0a1d9241aeb..1a38a2946c81 100644 --- a/drivers/amlogic/media_modules/frame_provider/decoder/h265/vh265.c +++ b/drivers/amlogic/media_modules/frame_provider/decoder/h265/vh265.c @@ -814,6 +814,7 @@ union param_u { unsigned short aspect_ratio_idc; unsigned short sar_width; unsigned short sar_height; + unsigned short sps_max_dec_pic_buffering_minus1_0; } p; }; @@ -2556,8 +2557,15 @@ static int get_work_pic_num(struct hevc_state_s *hevc) { int used_buf_num = 0; if (get_dynamic_buf_num_margin(hevc) > 0) { - used_buf_num = hevc->sps_num_reorder_pics_0 - + get_dynamic_buf_num_margin(hevc); + if ((!hevc->sps_num_reorder_pics_0) && + (hevc->param.p.sps_max_dec_pic_buffering_minus1_0)) { + /* the range of sps_num_reorder_pics_0 is in + [0, sps_max_dec_pic_buffering_minus1_0] */ + used_buf_num = get_dynamic_buf_num_margin(hevc) + + hevc->param.p.sps_max_dec_pic_buffering_minus1_0; + } else + used_buf_num = hevc->sps_num_reorder_pics_0 + + get_dynamic_buf_num_margin(hevc); #ifdef MULTI_INSTANCE_SUPPORT /* need one more for multi instance, as @@ -8413,8 +8421,6 @@ pic_done: - ii]; } } - if (hevc->param.p.sps_num_reorder_pics_0 == 0) - hevc->param.p.sps_num_reorder_pics_0 = 7; #ifdef SEND_LMEM_WITH_RPM dma_sync_single_for_cpu( amports_get_dma_device(), diff --git a/firmware/video/video_ucode.bin b/firmware/video/video_ucode.bin index 48913232126597b290e9928c335e123c8801fa99..0216c70395e6505992e49f943b524f623d9abc28 100644 GIT binary patch delta 41626 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 bR(5=D@CCK}vdCF&TwbMFHNJI8r1bv)f@*%; delta 41829 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 Qod)`CT^bL(mRt7!0ilj7ssI20