[FFmpeg-cvslog] avcodec/imgconvert: fix nb_components and depth for PAL8 in get_pix_fmt_score()

Michael Niedermayer git at videolan.org
Thu Apr 10 20:05:45 CEST 2014


ffmpeg | branch: master | Michael Niedermayer <michaelni at gmx.at> | Thu Apr 10 18:38:39 2014 +0200| [c486cfab792e53de3f5fc9f5082909ce687a3fe8] | committer: Michael Niedermayer

avcodec/imgconvert: fix nb_components and depth for PAL8 in get_pix_fmt_score()

This causes us to favor RGB8 over PAL8 when FF_LOSS_COLORQUANT is used

It probably makes sense to reinvestigate the exact scoring of pal8 when
our pal8 support improves to be supperior to rgb8

Signed-off-by: Michael Niedermayer <michaelni at gmx.at>

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

 libavcodec/imgconvert.c |   15 ++++++++++-----
 tests/ref/lavf/gif      |    4 ++--
 2 files changed, 12 insertions(+), 7 deletions(-)

diff --git a/libavcodec/imgconvert.c b/libavcodec/imgconvert.c
index b830961..cabd3fd 100644
--- a/libavcodec/imgconvert.c
+++ b/libavcodec/imgconvert.c
@@ -130,13 +130,18 @@ static int get_pix_fmt_score(enum AVPixelFormat dst_pix_fmt,
 
     src_color = get_color_type(src_desc);
     dst_color = get_color_type(dst_desc);
-    nb_components = FFMIN(src_desc->nb_components, dst_desc->nb_components);
-
-    for (i = 0; i < nb_components; i++)
-        if (src_desc->comp[i].depth_minus1 > dst_desc->comp[i].depth_minus1 && (consider & FF_LOSS_DEPTH)) {
+    if (dst_pix_fmt == AV_PIX_FMT_PAL8)
+        nb_components = FFMIN(src_desc->nb_components, 4);
+    else
+        nb_components = FFMIN(src_desc->nb_components, dst_desc->nb_components);
+
+    for (i = 0; i < nb_components; i++) {
+        int depth_minus1 = (dst_pix_fmt == AV_PIX_FMT_PAL8) ? 7/nb_components : dst_desc->comp[i].depth_minus1;
+        if (src_desc->comp[i].depth_minus1 > depth_minus1 && (consider & FF_LOSS_DEPTH)) {
             loss |= FF_LOSS_DEPTH;
-            score -= 65536 >> dst_desc->comp[i].depth_minus1;
+            score -= 65536 >> depth_minus1;
         }
+    }
 
     if (consider & FF_LOSS_RESOLUTION) {
         if (dst_desc->log2_chroma_w > src_desc->log2_chroma_w) {
diff --git a/tests/ref/lavf/gif b/tests/ref/lavf/gif
index 4d90abe..531cd1e 100644
--- a/tests/ref/lavf/gif
+++ b/tests/ref/lavf/gif
@@ -1,3 +1,3 @@
-8aef8081e8afa445f63f320f4a1c5edb *./tests/data/lavf/lavf.gif
-2030198 ./tests/data/lavf/lavf.gif
+e35f5ea283bbcb249818e0078ec72664 *./tests/data/lavf/lavf.gif
+2011766 ./tests/data/lavf/lavf.gif
 ./tests/data/lavf/lavf.gif CRC=0x0dc5477c



More information about the ffmpeg-cvslog mailing list