Reference index count in VE_H264_PPS reg should come from PPS control.
However, this is not really important because reference index count is
in our case always overridden by that from slice header.

Cc: nico...@ndufresne.ca
Cc: boris.brezil...@collabora.com
Cc: jo...@kwiboo.se

Signed-off-by: Jernej Skrabec <jernej.skra...@siol.net>
---
We have to decide if we drop pps->num_ref_idx_l0_default_active_minus1
and pps->num_ref_idx_l1_default_active_minus1 fields or add
num_ref_idx_l0_active_override_flag and num_ref_idx_l0_active_override_flag
to slice control.

Current control doesn't have those two flags, so in Cedrus override flag is
always set and we rely on userspace to set slice->num_ref_idx_l0_active_minus1
and slice->num_ref_idx_l1_active_minus1 to correct values. This means that
values stored in PPS are not needed and always ignored by VPU.

If I understand correctly, algorithm is very simple:

ref_count = PPS->ref_count
if (override_flag)
        ref_count = slice->ref_count

It seems that VAAPI provides only final value. In my opinion we should do the
same - get rid of PPS default ref index count fields.

 drivers/staging/media/sunxi/cedrus/cedrus_h264.c | 8 ++------
 1 file changed, 2 insertions(+), 6 deletions(-)

diff --git a/drivers/staging/media/sunxi/cedrus/cedrus_h264.c 
b/drivers/staging/media/sunxi/cedrus/cedrus_h264.c
index a30bb283f69f..cc8d17f211a1 100644
--- a/drivers/staging/media/sunxi/cedrus/cedrus_h264.c
+++ b/drivers/staging/media/sunxi/cedrus/cedrus_h264.c
@@ -340,12 +340,8 @@ static void cedrus_set_params(struct cedrus_ctx *ctx,
 
        // picture parameters
        reg = 0;
-       /*
-        * FIXME: the kernel headers are allowing the default value to
-        * be passed, but the libva doesn't give us that.
-        */
-       reg |= (slice->num_ref_idx_l0_active_minus1 & 0x1f) << 10;
-       reg |= (slice->num_ref_idx_l1_active_minus1 & 0x1f) << 5;
+       reg |= (pps->num_ref_idx_l0_default_active_minus1 & 0x1f) << 10;
+       reg |= (pps->num_ref_idx_l1_default_active_minus1 & 0x1f) << 5;
        reg |= (pps->weighted_bipred_idc & 0x3) << 2;
        if (pps->flags & V4L2_H264_PPS_FLAG_ENTROPY_CODING_MODE)
                reg |= VE_H264_PPS_ENTROPY_CODING_MODE;
-- 
2.21.0

Reply via email to