Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
 help / color / mirror / Atom feed
* [FFmpeg-devel] 3 more dithering mode in paletteuse
@ 2022-12-30 11:34 Clément Bœsch
  2022-12-30 11:34 ` [FFmpeg-devel] [PATCH 1/4] avfilter/paletteuse: add sierra3 dithering Clément Bœsch
                   ` (5 more replies)
  0 siblings, 6 replies; 7+ messages in thread
From: Clément Bœsch @ 2022-12-30 11:34 UTC (permalink / raw)
  To: ffmpeg-devel

Hi,

This patchset is to be applied on top of the previous one.

Here are some demonstrations of all the dithering with 2bpp:
https://imgur.com/a/2a1p4R8

Source images:
1. https://unsplash.com/photos/P4epudldYMU
2. https://unsplash.com/photos/iDNvparRZ2Q

Note: both got resized to fit within a 1024x1024 bounding box.

I personally find the Atkinson dithering to pretty nice.


_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [FFmpeg-devel] [PATCH 1/4] avfilter/paletteuse: add sierra3 dithering
  2022-12-30 11:34 [FFmpeg-devel] 3 more dithering mode in paletteuse Clément Bœsch
@ 2022-12-30 11:34 ` Clément Bœsch
  2022-12-30 11:34 ` [FFmpeg-devel] [PATCH 2/4] avfilter/paletteuse: add burkes dithering Clément Bœsch
                   ` (4 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: Clément Bœsch @ 2022-12-30 11:34 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: Clément Bœsch

Sierra3 according to
https://bisqwit.iki.fi/jutut/kuvat/ordered_dither/error_diffusion.txt:

          *  5  3
    2  4  5  4  2
       2  3  2      / 32
---
 doc/filters.texi            |  2 ++
 libavfilter/vf_paletteuse.c | 30 ++++++++++++++++++++++++++++++
 2 files changed, 32 insertions(+)

diff --git a/doc/filters.texi b/doc/filters.texi
index f51623d16a..84034072be 100644
--- a/doc/filters.texi
+++ b/doc/filters.texi
@@ -18516,6 +18516,8 @@ Floyd and Steingberg dithering (error diffusion)
 Frankie Sierra dithering v2 (error diffusion)
 @item sierra2_4a
 Frankie Sierra dithering v2 "Lite" (error diffusion)
+@item sierra3
+Frankie Sierra dithering v3 (error diffusion)
 @end table
 
 Default is @var{sierra2_4a}.
diff --git a/libavfilter/vf_paletteuse.c b/libavfilter/vf_paletteuse.c
index 67e065da7f..902bf5d82f 100644
--- a/libavfilter/vf_paletteuse.c
+++ b/libavfilter/vf_paletteuse.c
@@ -42,6 +42,7 @@ enum dithering_mode {
     DITHERING_FLOYD_STEINBERG,
     DITHERING_SIERRA2,
     DITHERING_SIERRA2_4A,
+    DITHERING_SIERRA3,
     NB_DITHERING
 };
 
@@ -113,6 +114,7 @@ static const AVOption paletteuse_options[] = {
         { "floyd_steinberg", "Floyd and Steingberg dithering (error diffusion)",                       0, AV_OPT_TYPE_CONST, {.i64=DITHERING_FLOYD_STEINBERG}, INT_MIN, INT_MAX, FLAGS, "dithering_mode" },
         { "sierra2",         "Frankie Sierra dithering v2 (error diffusion)",                          0, AV_OPT_TYPE_CONST, {.i64=DITHERING_SIERRA2},         INT_MIN, INT_MAX, FLAGS, "dithering_mode" },
         { "sierra2_4a",      "Frankie Sierra dithering v2 \"Lite\" (error diffusion)",                 0, AV_OPT_TYPE_CONST, {.i64=DITHERING_SIERRA2_4A},      INT_MIN, INT_MAX, FLAGS, "dithering_mode" },
+        { "sierra3",         "Frankie Sierra dithering v3 (error diffusion)",                          0, AV_OPT_TYPE_CONST, {.i64=DITHERING_SIERRA3},         INT_MIN, INT_MAX, FLAGS, "dithering_mode" },
     { "bayer_scale", "set scale for bayer dithering", OFFSET(bayer_scale), AV_OPT_TYPE_INT, {.i64=2}, 0, 5, FLAGS },
     { "diff_mode",   "set frame difference mode",     OFFSET(diff_mode),   AV_OPT_TYPE_INT, {.i64=DIFF_MODE_NONE}, 0, NB_DIFF_MODE-1, FLAGS, "diff_mode" },
         { "rectangle", "process smallest different rectangle", 0, AV_OPT_TYPE_CONST, {.i64=DIFF_MODE_RECTANGLE}, INT_MIN, INT_MAX, FLAGS, "diff_mode" },
@@ -368,6 +370,32 @@ static av_always_inline int set_frame(PaletteUseContext *s, AVFrame *out, AVFram
                 if (left  && down) src[src_linesize + x - 1] = dither_color(src[src_linesize + x - 1], er, eg, eb, 1, 2);
                 if (         down) src[src_linesize + x    ] = dither_color(src[src_linesize + x    ], er, eg, eb, 1, 2);
 
+            } else if (dither == DITHERING_SIERRA3) {
+                const int right  = x < w - 1, down  = y < h - 1, left  = x > x_start;
+                const int right2 = x < w - 2, down2 = y < h - 2, left2 = x > x_start + 1;
+                const int color = get_dst_color_err(s, src[x], &er, &eg, &eb);
+
+                if (color < 0)
+                    return color;
+                dst[x] = color;
+
+                if (right)         src[                 x + 1] = dither_color(src[                 x + 1], er, eg, eb, 5, 5);
+                if (right2)        src[                 x + 2] = dither_color(src[                 x + 2], er, eg, eb, 3, 5);
+
+                if (down) {
+                    if (left2)     src[src_linesize   + x - 2] = dither_color(src[src_linesize   + x - 2], er, eg, eb, 2, 5);
+                    if (left)      src[src_linesize   + x - 1] = dither_color(src[src_linesize   + x - 1], er, eg, eb, 4, 5);
+                    if (1)         src[src_linesize   + x    ] = dither_color(src[src_linesize   + x    ], er, eg, eb, 5, 5);
+                    if (right)     src[src_linesize   + x + 1] = dither_color(src[src_linesize   + x + 1], er, eg, eb, 4, 5);
+                    if (right2)    src[src_linesize   + x + 2] = dither_color(src[src_linesize   + x + 2], er, eg, eb, 2, 5);
+
+                    if (down2) {
+                        if (left)  src[src_linesize*2 + x - 1] = dither_color(src[src_linesize*2 + x - 1], er, eg, eb, 2, 5);
+                        if (1)     src[src_linesize*2 + x    ] = dither_color(src[src_linesize*2 + x    ], er, eg, eb, 3, 5);
+                        if (right) src[src_linesize*2 + x + 1] = dither_color(src[src_linesize*2 + x + 1], er, eg, eb, 2, 5);
+                    }
+                }
+
             } else {
                 const int color = color_get(s, src[x]);
 
@@ -842,6 +870,7 @@ DEFINE_SET_FRAME(heckbert,        DITHERING_HECKBERT)
 DEFINE_SET_FRAME(floyd_steinberg, DITHERING_FLOYD_STEINBERG)
 DEFINE_SET_FRAME(sierra2,         DITHERING_SIERRA2)
 DEFINE_SET_FRAME(sierra2_4a,      DITHERING_SIERRA2_4A)
+DEFINE_SET_FRAME(sierra3,         DITHERING_SIERRA3)
 
 static const set_frame_func set_frame_lut[NB_DITHERING] = {
     set_frame_none,
@@ -850,6 +879,7 @@ static const set_frame_func set_frame_lut[NB_DITHERING] = {
     set_frame_floyd_steinberg,
     set_frame_sierra2,
     set_frame_sierra2_4a,
+    set_frame_sierra3,
 };
 
 static int dither_value(int p)
-- 
2.39.0

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [FFmpeg-devel] [PATCH 2/4] avfilter/paletteuse: add burkes dithering
  2022-12-30 11:34 [FFmpeg-devel] 3 more dithering mode in paletteuse Clément Bœsch
  2022-12-30 11:34 ` [FFmpeg-devel] [PATCH 1/4] avfilter/paletteuse: add sierra3 dithering Clément Bœsch
@ 2022-12-30 11:34 ` Clément Bœsch
  2022-12-30 11:34 ` [FFmpeg-devel] [PATCH 3/4] avfilter/paletteuse: add atkinson dithering Clément Bœsch
                   ` (3 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: Clément Bœsch @ 2022-12-30 11:34 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: Clément Bœsch

Burkes according to
https://bisqwit.iki.fi/jutut/kuvat/ordered_dither/error_diffusion.txt:

          *  8  4
    2  4  8  4  2   / 32
---
 doc/filters.texi            |  2 ++
 libavfilter/vf_paletteuse.c | 24 ++++++++++++++++++++++++
 2 files changed, 26 insertions(+)

diff --git a/doc/filters.texi b/doc/filters.texi
index 84034072be..16a8dde4f3 100644
--- a/doc/filters.texi
+++ b/doc/filters.texi
@@ -18518,6 +18518,8 @@ Frankie Sierra dithering v2 (error diffusion)
 Frankie Sierra dithering v2 "Lite" (error diffusion)
 @item sierra3
 Frankie Sierra dithering v3 (error diffusion)
+@item burkes
+Burkes dithering (error diffusion)
 @end table
 
 Default is @var{sierra2_4a}.
diff --git a/libavfilter/vf_paletteuse.c b/libavfilter/vf_paletteuse.c
index 902bf5d82f..3c3b6b3ef8 100644
--- a/libavfilter/vf_paletteuse.c
+++ b/libavfilter/vf_paletteuse.c
@@ -43,6 +43,7 @@ enum dithering_mode {
     DITHERING_SIERRA2,
     DITHERING_SIERRA2_4A,
     DITHERING_SIERRA3,
+    DITHERING_BURKES,
     NB_DITHERING
 };
 
@@ -115,6 +116,7 @@ static const AVOption paletteuse_options[] = {
         { "sierra2",         "Frankie Sierra dithering v2 (error diffusion)",                          0, AV_OPT_TYPE_CONST, {.i64=DITHERING_SIERRA2},         INT_MIN, INT_MAX, FLAGS, "dithering_mode" },
         { "sierra2_4a",      "Frankie Sierra dithering v2 \"Lite\" (error diffusion)",                 0, AV_OPT_TYPE_CONST, {.i64=DITHERING_SIERRA2_4A},      INT_MIN, INT_MAX, FLAGS, "dithering_mode" },
         { "sierra3",         "Frankie Sierra dithering v3 (error diffusion)",                          0, AV_OPT_TYPE_CONST, {.i64=DITHERING_SIERRA3},         INT_MIN, INT_MAX, FLAGS, "dithering_mode" },
+        { "burkes",          "Burkes dithering (error diffusion)",                                     0, AV_OPT_TYPE_CONST, {.i64=DITHERING_BURKES},          INT_MIN, INT_MAX, FLAGS, "dithering_mode" },
     { "bayer_scale", "set scale for bayer dithering", OFFSET(bayer_scale), AV_OPT_TYPE_INT, {.i64=2}, 0, 5, FLAGS },
     { "diff_mode",   "set frame difference mode",     OFFSET(diff_mode),   AV_OPT_TYPE_INT, {.i64=DIFF_MODE_NONE}, 0, NB_DIFF_MODE-1, FLAGS, "diff_mode" },
         { "rectangle", "process smallest different rectangle", 0, AV_OPT_TYPE_CONST, {.i64=DIFF_MODE_RECTANGLE}, INT_MIN, INT_MAX, FLAGS, "diff_mode" },
@@ -396,6 +398,26 @@ static av_always_inline int set_frame(PaletteUseContext *s, AVFrame *out, AVFram
                     }
                 }
 
+            } else if (dither == DITHERING_BURKES) {
+                const int right  = x < w - 1, down  = y < h - 1, left  = x > x_start;
+                const int right2 = x < w - 2,                    left2 = x > x_start + 1;
+                const int color = get_dst_color_err(s, src[x], &er, &eg, &eb);
+
+                if (color < 0)
+                    return color;
+                dst[x] = color;
+
+                if (right)      src[                 x + 1] = dither_color(src[                 x + 1], er, eg, eb, 8, 5);
+                if (right2)     src[                 x + 2] = dither_color(src[                 x + 2], er, eg, eb, 4, 5);
+
+                if (down) {
+                    if (left2)  src[src_linesize   + x - 2] = dither_color(src[src_linesize   + x - 2], er, eg, eb, 2, 5);
+                    if (left)   src[src_linesize   + x - 1] = dither_color(src[src_linesize   + x - 1], er, eg, eb, 4, 5);
+                    if (1)      src[src_linesize   + x    ] = dither_color(src[src_linesize   + x    ], er, eg, eb, 8, 5);
+                    if (right)  src[src_linesize   + x + 1] = dither_color(src[src_linesize   + x + 1], er, eg, eb, 4, 5);
+                    if (right2) src[src_linesize   + x + 2] = dither_color(src[src_linesize   + x + 2], er, eg, eb, 2, 5);
+                }
+
             } else {
                 const int color = color_get(s, src[x]);
 
@@ -871,6 +893,7 @@ DEFINE_SET_FRAME(floyd_steinberg, DITHERING_FLOYD_STEINBERG)
 DEFINE_SET_FRAME(sierra2,         DITHERING_SIERRA2)
 DEFINE_SET_FRAME(sierra2_4a,      DITHERING_SIERRA2_4A)
 DEFINE_SET_FRAME(sierra3,         DITHERING_SIERRA3)
+DEFINE_SET_FRAME(burkes,          DITHERING_BURKES)
 
 static const set_frame_func set_frame_lut[NB_DITHERING] = {
     set_frame_none,
@@ -880,6 +903,7 @@ static const set_frame_func set_frame_lut[NB_DITHERING] = {
     set_frame_sierra2,
     set_frame_sierra2_4a,
     set_frame_sierra3,
+    set_frame_burkes,
 };
 
 static int dither_value(int p)
-- 
2.39.0

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [FFmpeg-devel] [PATCH 3/4] avfilter/paletteuse: add atkinson dithering
  2022-12-30 11:34 [FFmpeg-devel] 3 more dithering mode in paletteuse Clément Bœsch
  2022-12-30 11:34 ` [FFmpeg-devel] [PATCH 1/4] avfilter/paletteuse: add sierra3 dithering Clément Bœsch
  2022-12-30 11:34 ` [FFmpeg-devel] [PATCH 2/4] avfilter/paletteuse: add burkes dithering Clément Bœsch
@ 2022-12-30 11:34 ` Clément Bœsch
  2022-12-30 11:34 ` [FFmpeg-devel] [PATCH 4/4] avfilter/paletteuse: use explicit key indexes in set_frame_lut Clément Bœsch
                   ` (2 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: Clément Bœsch @ 2022-12-30 11:34 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: Clément Bœsch

Atkinson according to
https://bisqwit.iki.fi/jutut/kuvat/ordered_dither/error_diffusion.txt:

        *   1   1    / 8
    1   1   1
        1
---
 doc/filters.texi            |  2 ++
 libavfilter/vf_paletteuse.c | 23 +++++++++++++++++++++++
 2 files changed, 25 insertions(+)

diff --git a/doc/filters.texi b/doc/filters.texi
index 16a8dde4f3..2672ae6ee7 100644
--- a/doc/filters.texi
+++ b/doc/filters.texi
@@ -18520,6 +18520,8 @@ Frankie Sierra dithering v2 "Lite" (error diffusion)
 Frankie Sierra dithering v3 (error diffusion)
 @item burkes
 Burkes dithering (error diffusion)
+@item atkinson
+Atkinson dithering by Bill Atkinson at Apple Computer (error diffusion)
 @end table
 
 Default is @var{sierra2_4a}.
diff --git a/libavfilter/vf_paletteuse.c b/libavfilter/vf_paletteuse.c
index 3c3b6b3ef8..252ad746f0 100644
--- a/libavfilter/vf_paletteuse.c
+++ b/libavfilter/vf_paletteuse.c
@@ -44,6 +44,7 @@ enum dithering_mode {
     DITHERING_SIERRA2_4A,
     DITHERING_SIERRA3,
     DITHERING_BURKES,
+    DITHERING_ATKINSON,
     NB_DITHERING
 };
 
@@ -117,6 +118,7 @@ static const AVOption paletteuse_options[] = {
         { "sierra2_4a",      "Frankie Sierra dithering v2 \"Lite\" (error diffusion)",                 0, AV_OPT_TYPE_CONST, {.i64=DITHERING_SIERRA2_4A},      INT_MIN, INT_MAX, FLAGS, "dithering_mode" },
         { "sierra3",         "Frankie Sierra dithering v3 (error diffusion)",                          0, AV_OPT_TYPE_CONST, {.i64=DITHERING_SIERRA3},         INT_MIN, INT_MAX, FLAGS, "dithering_mode" },
         { "burkes",          "Burkes dithering (error diffusion)",                                     0, AV_OPT_TYPE_CONST, {.i64=DITHERING_BURKES},          INT_MIN, INT_MAX, FLAGS, "dithering_mode" },
+        { "atkinson",        "Atkinson dithering by Bill Atkinson at Apple Computer (error diffusion)",0, AV_OPT_TYPE_CONST, {.i64=DITHERING_ATKINSON},        INT_MIN, INT_MAX, FLAGS, "dithering_mode" },
     { "bayer_scale", "set scale for bayer dithering", OFFSET(bayer_scale), AV_OPT_TYPE_INT, {.i64=2}, 0, 5, FLAGS },
     { "diff_mode",   "set frame difference mode",     OFFSET(diff_mode),   AV_OPT_TYPE_INT, {.i64=DIFF_MODE_NONE}, 0, NB_DIFF_MODE-1, FLAGS, "diff_mode" },
         { "rectangle", "process smallest different rectangle", 0, AV_OPT_TYPE_CONST, {.i64=DIFF_MODE_RECTANGLE}, INT_MIN, INT_MAX, FLAGS, "diff_mode" },
@@ -418,6 +420,25 @@ static av_always_inline int set_frame(PaletteUseContext *s, AVFrame *out, AVFram
                     if (right2) src[src_linesize   + x + 2] = dither_color(src[src_linesize   + x + 2], er, eg, eb, 2, 5);
                 }
 
+            } else if (dither == DITHERING_ATKINSON) {
+                const int right  = x < w - 1, down  = y < h - 1, left = x > x_start;
+                const int right2 = x < w - 2, down2 = y < h - 2;
+                const int color = get_dst_color_err(s, src[x], &er, &eg, &eb);
+
+                if (color < 0)
+                    return color;
+                dst[x] = color;
+
+                if (right)     src[                 x + 1] = dither_color(src[                 x + 1], er, eg, eb, 1, 3);
+                if (right2)    src[                 x + 2] = dither_color(src[                 x + 2], er, eg, eb, 1, 3);
+
+                if (down) {
+                    if (left)  src[src_linesize   + x - 1] = dither_color(src[src_linesize   + x - 1], er, eg, eb, 1, 3);
+                    if (1)     src[src_linesize   + x    ] = dither_color(src[src_linesize   + x    ], er, eg, eb, 1, 3);
+                    if (right) src[src_linesize   + x + 1] = dither_color(src[src_linesize   + x + 1], er, eg, eb, 1, 3);
+                    if (down2) src[src_linesize*2 + x    ] = dither_color(src[src_linesize*2 + x    ], er, eg, eb, 1, 3);
+                }
+
             } else {
                 const int color = color_get(s, src[x]);
 
@@ -894,6 +915,7 @@ DEFINE_SET_FRAME(sierra2,         DITHERING_SIERRA2)
 DEFINE_SET_FRAME(sierra2_4a,      DITHERING_SIERRA2_4A)
 DEFINE_SET_FRAME(sierra3,         DITHERING_SIERRA3)
 DEFINE_SET_FRAME(burkes,          DITHERING_BURKES)
+DEFINE_SET_FRAME(atkinson,        DITHERING_ATKINSON)
 
 static const set_frame_func set_frame_lut[NB_DITHERING] = {
     set_frame_none,
@@ -904,6 +926,7 @@ static const set_frame_func set_frame_lut[NB_DITHERING] = {
     set_frame_sierra2_4a,
     set_frame_sierra3,
     set_frame_burkes,
+    set_frame_atkinson,
 };
 
 static int dither_value(int p)
-- 
2.39.0

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [FFmpeg-devel] [PATCH 4/4] avfilter/paletteuse: use explicit key indexes in set_frame_lut
  2022-12-30 11:34 [FFmpeg-devel] 3 more dithering mode in paletteuse Clément Bœsch
                   ` (2 preceding siblings ...)
  2022-12-30 11:34 ` [FFmpeg-devel] [PATCH 3/4] avfilter/paletteuse: add atkinson dithering Clément Bœsch
@ 2022-12-30 11:34 ` Clément Bœsch
  2022-12-30 11:49 ` [FFmpeg-devel] 3 more dithering mode in paletteuse Clément Bœsch
  2023-01-03 16:31 ` Clément Bœsch
  5 siblings, 0 replies; 7+ messages in thread
From: Clément Bœsch @ 2022-12-30 11:34 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: Clément Bœsch

---
 libavfilter/vf_paletteuse.c | 18 +++++++++---------
 1 file changed, 9 insertions(+), 9 deletions(-)

diff --git a/libavfilter/vf_paletteuse.c b/libavfilter/vf_paletteuse.c
index 252ad746f0..944ff5c74d 100644
--- a/libavfilter/vf_paletteuse.c
+++ b/libavfilter/vf_paletteuse.c
@@ -918,15 +918,15 @@ DEFINE_SET_FRAME(burkes,          DITHERING_BURKES)
 DEFINE_SET_FRAME(atkinson,        DITHERING_ATKINSON)
 
 static const set_frame_func set_frame_lut[NB_DITHERING] = {
-    set_frame_none,
-    set_frame_bayer,
-    set_frame_heckbert,
-    set_frame_floyd_steinberg,
-    set_frame_sierra2,
-    set_frame_sierra2_4a,
-    set_frame_sierra3,
-    set_frame_burkes,
-    set_frame_atkinson,
+    [DITHERING_NONE]            = set_frame_none,
+    [DITHERING_BAYER]           = set_frame_bayer,
+    [DITHERING_HECKBERT]        = set_frame_heckbert,
+    [DITHERING_FLOYD_STEINBERG] = set_frame_floyd_steinberg,
+    [DITHERING_SIERRA2]         = set_frame_sierra2,
+    [DITHERING_SIERRA2_4A]      = set_frame_sierra2_4a,
+    [DITHERING_SIERRA3]         = set_frame_sierra3,
+    [DITHERING_BURKES]          = set_frame_burkes,
+    [DITHERING_ATKINSON]        = set_frame_atkinson,
 };
 
 static int dither_value(int p)
-- 
2.39.0

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [FFmpeg-devel] 3 more dithering mode in paletteuse
  2022-12-30 11:34 [FFmpeg-devel] 3 more dithering mode in paletteuse Clément Bœsch
                   ` (3 preceding siblings ...)
  2022-12-30 11:34 ` [FFmpeg-devel] [PATCH 4/4] avfilter/paletteuse: use explicit key indexes in set_frame_lut Clément Bœsch
@ 2022-12-30 11:49 ` Clément Bœsch
  2023-01-03 16:31 ` Clément Bœsch
  5 siblings, 0 replies; 7+ messages in thread
From: Clément Bœsch @ 2022-12-30 11:49 UTC (permalink / raw)
  To: FFmpeg development discussions and patches

On Fri, Dec 30, 2022 at 12:34:51PM +0100, Clément Bœsch wrote:
[...]
> Here are some demonstrations of all the dithering with 2bpp:
> https://imgur.com/a/2a1p4R8

Sorry, this is obviously 1bpp

-- 
Clément B.
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [FFmpeg-devel] 3 more dithering mode in paletteuse
  2022-12-30 11:34 [FFmpeg-devel] 3 more dithering mode in paletteuse Clément Bœsch
                   ` (4 preceding siblings ...)
  2022-12-30 11:49 ` [FFmpeg-devel] 3 more dithering mode in paletteuse Clément Bœsch
@ 2023-01-03 16:31 ` Clément Bœsch
  5 siblings, 0 replies; 7+ messages in thread
From: Clément Bœsch @ 2023-01-03 16:31 UTC (permalink / raw)
  To: FFmpeg development discussions and patches

On Fri, Dec 30, 2022 at 12:34:51PM +0100, Clément Bœsch wrote:
[...]

Patchset applied

-- 
Clément B.
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2023-01-03 16:31 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-12-30 11:34 [FFmpeg-devel] 3 more dithering mode in paletteuse Clément Bœsch
2022-12-30 11:34 ` [FFmpeg-devel] [PATCH 1/4] avfilter/paletteuse: add sierra3 dithering Clément Bœsch
2022-12-30 11:34 ` [FFmpeg-devel] [PATCH 2/4] avfilter/paletteuse: add burkes dithering Clément Bœsch
2022-12-30 11:34 ` [FFmpeg-devel] [PATCH 3/4] avfilter/paletteuse: add atkinson dithering Clément Bœsch
2022-12-30 11:34 ` [FFmpeg-devel] [PATCH 4/4] avfilter/paletteuse: use explicit key indexes in set_frame_lut Clément Bœsch
2022-12-30 11:49 ` [FFmpeg-devel] 3 more dithering mode in paletteuse Clément Bœsch
2023-01-03 16:31 ` Clément Bœsch

Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

This inbox may be cloned and mirrored by anyone:

	git clone --mirror https://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 ffmpegdev ffmpegdev/ https://master.gitmailbox.com/ffmpegdev \
		ffmpegdev@gitmailbox.com
	public-inbox-index ffmpegdev

Example config snippet for mirrors.


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git