[FFmpeg-devel] [PATCH 2/4] h264_levels: Make get_level intra-profile friendly

Mark Thompson sw at jkqxz.net
Tue Nov 13 23:21:34 EET 2018


On 12/11/18 14:18, Andreas Rheinhardt wrote:
> Currently ff_h264_get_level does not provide the correct level for any
> of the High Intra profiles. Now only High Intra profiles with level 1.1
> get misdetected.
> 
> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt at googlemail.com>
> ---
>  libavcodec/h264_levels.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/libavcodec/h264_levels.c b/libavcodec/h264_levels.c
> index 7a55116773..02efaa38dc 100644
> --- a/libavcodec/h264_levels.c
> +++ b/libavcodec/h264_levels.c
> @@ -80,8 +80,8 @@ const H264LevelDescriptor *ff_h264_get_level(int level_idc,
>  {
>      int i;
>      for (i = 0; i < FF_ARRAY_ELEMS(h264_levels); i++) {
> -        if (h264_levels[i].level_idc            == level_idc &&
> -            h264_levels[i].constraint_set3_flag == constraint_set3_flag)
> +        if (h264_levels[i].level_idc == level_idc &&
> +            (constraint_set3_flag || !h264_levels[i].constraint_set3_flag))
>              return &h264_levels[i];
>      }
>      return NULL;
> 

We should be able to make it precisely correct here without that last caveat - if we know the profile is high, then we can ignore the line with cs3f set.

Since it's appearing in a few places, maybe a new function (macro?) identifying the older profiles (constrained baseline, baseline, main, extended - not sure exactly what the right name is...), and then check that here to decide which 1b case to use.

(If you feel like it then a few tests for these High Intra cases in libavcodec/tests/h264_levels.c wouldn't go amiss.  You can run just that test without needing the fate samples with "make fate-h264-levels".)

Thanks,

- Mark


More information about the ffmpeg-devel mailing list