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.rheinha...@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 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel