From 03dae8f565c6df41b4ed173ea40c7d319b430ef5 Mon Sep 17 00:00:00 2001
From: Dustin Kerstein <dustin.kerstein@gmail.com>
Date: Tue, 17 Nov 2020 23:06:57 -0500
Subject: [PATCH] Add support for h.264 levels 5 and 5.1

For soon to be released firmware update by 6by9. See https://www.raspberrypi.org/forums/viewtopic.php?p=1762548#p1762548 for more details. Level specs based on https://www.itu.int/rec/T-REC-H.264-201906-I
---
 picamera/encoders.py | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/picamera/encoders.py b/picamera/encoders.py
index d8f04344..10ec046a 100644
--- a/picamera/encoders.py
+++ b/picamera/encoders.py
@@ -656,6 +656,9 @@ def _create_encoder(
                     '4.0': mmal.MMAL_VIDEO_LEVEL_H264_4,
                     '4.1': mmal.MMAL_VIDEO_LEVEL_H264_41,
                     '4.2': mmal.MMAL_VIDEO_LEVEL_H264_42,
+                    '5':   mmal.MMAL_VIDEO_LEVEL_H264_5,
+                    '5.0': mmal.MMAL_VIDEO_LEVEL_H264_5,
+                    '5.1': mmal.MMAL_VIDEO_LEVEL_H264_51,
                     }[level]
             except KeyError:
                 raise PiCameraValueError("Invalid H.264 level %s" % level)
@@ -677,6 +680,8 @@ def _create_encoder(
                 (mmal.MMAL_VIDEO_LEVEL_H264_4,  False): 20000000,
                 (mmal.MMAL_VIDEO_LEVEL_H264_41, False): 50000000,
                 (mmal.MMAL_VIDEO_LEVEL_H264_42, False): 50000000,
+                (mmal.MMAL_VIDEO_LEVEL_H264_5,  False): 135000000,
+                (mmal.MMAL_VIDEO_LEVEL_H264_51, False): 240000000,
                 (mmal.MMAL_VIDEO_LEVEL_H264_1,  True):  80000,
                 (mmal.MMAL_VIDEO_LEVEL_H264_1b, True):  160000,
                 (mmal.MMAL_VIDEO_LEVEL_H264_11, True):  240000,
@@ -691,6 +696,8 @@ def _create_encoder(
                 (mmal.MMAL_VIDEO_LEVEL_H264_4,  True):  25000000,
                 (mmal.MMAL_VIDEO_LEVEL_H264_41, True):  62500000,
                 (mmal.MMAL_VIDEO_LEVEL_H264_42, True):  62500000,
+                (mmal.MMAL_VIDEO_LEVEL_H264_5, True):  135000000,
+                (mmal.MMAL_VIDEO_LEVEL_H264_51, True):  240000000,
                 }[level, profile == mmal.MMAL_VIDEO_PROFILE_H264_HIGH]
             if bitrate > bitrate_limit:
                 raise PiCameraValueError(
@@ -717,6 +724,8 @@ def _create_encoder(
                 mmal.MMAL_VIDEO_LEVEL_H264_4:  (245760, 8192),
                 mmal.MMAL_VIDEO_LEVEL_H264_41: (245760, 8192),
                 mmal.MMAL_VIDEO_LEVEL_H264_42: (522240, 8704),
+                mmal.MMAL_VIDEO_LEVEL_H264_5:  (589824, 22080),
+                mmal.MMAL_VIDEO_LEVEL_H264_51: (983040, 36864),
                 }[level]
             w, h = self.output_port.framesize
             w = bcm_host.VCOS_ALIGN_UP(w, 16) >> 4