Explorar o código

avfilter/vf_drawtext: fix text width measurement

yethie %!s(int64=2) %!d(string=hai) anos
pai
achega
aeff5bcba0
Modificáronse 1 ficheiros con 11 adicións e 3 borrados
  1. 11 3
      libavfilter/vf_drawtext.c

+ 11 - 3
libavfilter/vf_drawtext.c

@@ -1757,9 +1757,17 @@ continue_on_failed2:
                     first_min_x64 = FFMIN(glyph->bbox.xMin, first_min_x64);
                     first_min_x64 = FFMIN(glyph->bbox.xMin, first_min_x64);
                 }
                 }
                 if (t == hb->glyph_count - 1) {
                 if (t == hb->glyph_count - 1) {
-                    w64 += glyph->bbox.xMax;
-                    last_max_x64 = FFMAX(glyph->bbox.xMax, last_max_x64);
-                    cur_line->offset_right64 = glyph->bbox.xMax;
+                    // The following code measures the width of the line up to the last
+                    // character's horizontal advance
+                    int last_char_width = hb->glyph_pos[t].x_advance;
+
+                    // The following code measures the width of the line up to the rightmost
+                    // visible pixel of the last character
+                    // int last_char_width = glyph->bbox.xMax;
+
+                    w64 += last_char_width;
+                    last_max_x64 = FFMAX(last_char_width, last_max_x64);
+                    cur_line->offset_right64 = last_char_width;
                 } else {
                 } else {
                     if (is_tab) {
                     if (is_tab) {
                         int size = s->blank_advance64 * s->tabsize;
                         int size = s->blank_advance64 * s->tabsize;