media: allegro: correctly scale the bit rate in SPS
authorMichael Tretter <m.tretter@pengutronix.de>
Wed, 8 Sep 2021 13:03:51 +0000 (14:03 +0100)
committerMauro Carvalho Chehab <mchehab+huawei@kernel.org>
Wed, 20 Oct 2021 14:58:38 +0000 (15:58 +0100)
The bit rate in the SPS can be scaled by an exponent, which allows to
reduce the number of bits in the SPS in case of high bit rates.

The driver did not scale the bitrate, but used a scaling exponent of 0.
Fix this by properly calculating the scaling factor and writing the bit
rate as value and scaling factor into the SPS.

Signed-off-by: Michael Tretter <m.tretter@pengutronix.de>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
drivers/media/platform/allegro-dvt/allegro-core.c

index 52924ce142cc76cba32bc0636abd4d5f0ce0b214..777cbc526ae35ed566466cdb63d2cd90f38e7f9f 100644 (file)
@@ -1639,8 +1639,9 @@ static ssize_t allegro_h264_write_sps(struct allegro_channel *channel,
        sps->vui.nal_hrd_parameters_present_flag = 0;
        sps->vui.vcl_hrd_parameters_present_flag = 1;
        sps->vui.vcl_hrd_parameters.cpb_cnt_minus1 = 0;
-       sps->vui.vcl_hrd_parameters.bit_rate_scale = 0;
        /* See Rec. ITU-T H.264 (04/2017) p. 410 E-53 */
+       sps->vui.vcl_hrd_parameters.bit_rate_scale =
+               ffs(channel->bitrate_peak) - 6;
        sps->vui.vcl_hrd_parameters.bit_rate_value_minus1[0] =
                channel->bitrate_peak / (1 << (6 + sps->vui.vcl_hrd_parameters.bit_rate_scale)) - 1;
        /* See Rec. ITU-T H.264 (04/2017) p. 410 E-54 */