[FFmpeg-cvslog] avcodec/avcodec: Update check for identical colorspace/primaries/trc names

Andreas Rheinhardt git at videolan.org
Sat Apr 3 01:18:02 EEST 2021


ffmpeg | branch: release/4.4 | Andreas Rheinhardt <andreas.rheinhardt at gmail.com> | Sun Mar 21 07:26:17 2021 +0100| [b4b3af795c678b1e34972910ba2357ca74a21280] | committer: Andreas Rheinhardt

avcodec/avcodec: Update check for identical colorspace/primaries/trc names

If the numerical constants for colorspace, transfer characteristics
and color primaries coincide, the current code presumes the
corresponding names to be identical and prints only one of them obtained
via av_get_colorspace_name(). There are two issues with this: The first
is that the underlying assumption is wrong: The names only coincide in
the 0-7 range, they differ for more recent additions. The second is that
av_get_colorspace_name() is outdated itself; it has not been updated
with the names of the newly defined colorspaces.

Fix both of this by using the names from
av_color_(space|primaries|transfer)_name() and comparing them via
strcmp; don't use av_get_colorspace_name() at all.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt at gmail.com>
(cherry picked from commit e65a5df4faf60f08b39381651b61ace6998eee3d)

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=b4b3af795c678b1e34972910ba2357ca74a21280
---

 libavcodec/avcodec.c | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/libavcodec/avcodec.c b/libavcodec/avcodec.c
index c6b8afe1c7..e572e9533d 100644
--- a/libavcodec/avcodec.c
+++ b/libavcodec/avcodec.c
@@ -706,15 +706,15 @@ void avcodec_string(char *buf, int buf_size, AVCodecContext *enc, int encode)
             if (enc->colorspace != AVCOL_SPC_UNSPECIFIED ||
                 enc->color_primaries != AVCOL_PRI_UNSPECIFIED ||
                 enc->color_trc != AVCOL_TRC_UNSPECIFIED) {
-                if (enc->colorspace != (int)enc->color_primaries ||
-                    enc->colorspace != (int)enc->color_trc) {
+                const char *col = unknown_if_null(av_color_space_name(enc->colorspace));
+                const char *pri = unknown_if_null(av_color_primaries_name(enc->color_primaries));
+                const char *trc = unknown_if_null(av_color_transfer_name(enc->color_trc));
+                if (strcmp(col, pri) || strcmp(col, trc)) {
                     new_line = 1;
                     av_strlcatf(detail, sizeof(detail), "%s/%s/%s, ",
-                                unknown_if_null(av_color_space_name(enc->colorspace)),
-                                unknown_if_null(av_color_primaries_name(enc->color_primaries)),
-                                unknown_if_null(av_color_transfer_name(enc->color_trc)));
-                 } else if (str = av_get_colorspace_name(enc->colorspace))
-                       av_strlcatf(detail, sizeof(detail), "%s, ", str);
+                                col, pri, trc);
+                } else
+                    av_strlcatf(detail, sizeof(detail), "%s, ", col);
             }
 
             if (enc->field_order != AV_FIELD_UNKNOWN) {



More information about the ffmpeg-cvslog mailing list