Le vendredi 17 juillet 2020 à 09:48 +0200, Philipp Zabel a écrit : > Hi Ezequiel, Nicolas, > > On Fri, 2020-07-17 at 00:49 -0300, Ezequiel Garcia wrote: > > From: Nicolas Dufresne <nicolas.dufresne@xxxxxxxxxxxxx> > > > > This add H264 level 4.1, 4.2 and 5.0 to the list of supported formats. > > While the hardware does not fully support these levels, it do support > > most of them. > > Could you clarify this? As far as I understand the hardware supports > maximum frame size requirement for up to level 4.2 (8704 macroblocks), > but not 5.0, and at least the implementation on i.MX6 does not support > the max encoding speed requirements for levels 4.1 and higher. > > I don't think the firmware ever produces any output with a level higher > than 4.0 either, so what is the purpose of pretending otherwise? Nothing is very explicit in the user manual, they speak in term of resolution and framerate. They claim 1080p 30fps for encoding, and 1080p 60fps for decoding. For the encoder, there is an auto selection for the level, and the documentation is maxed to 4.0, and so I would agree that 4.0 is the max encoding level. Wikipedia also list "1,920×1, 080@30.1 (4)" so 1080p30 with 4 frame references as being an example of 4.0 maximum. So V2 of this patchset should make sure that for the encoder this stays there. On the decoding side, what I found is that there is an error bit indicator called LEVELID (bit 19) that indicates that SPS level_idc wasn't accepted. The error is described as "Supported up to 51.". So basically there is some extra contraints that least to 4.2 as you describe, and above 5.1 is an hard failure. That imho creates a grey- zone. If we think of DASH/HLS, the information usually comes with Resolution/Framerate/Codec/Profile/Level, and in this context, you can enable 5.1 safely assuming the Resolition/Framerate/Profile are already verified. But if you only wanted to use the level, then you could prefer the driver to expose a max of 4.2. So do you have an opinion on the way forward ? Personally I like the idea of giving the list of level_idc that won't cause the parser to reject it, and leave it to the user to validate the Resolution/Framerate seperatly, we have the V4L2 API for that. Let me know, as we'll use that for V2. > > regards > Philipp >
Attachment:
signature.asc
Description: This is a digitally signed message part