[FFmpeg-cvslog] factor draw_glyphs out of drawtext filter
Michael Niedermayer
git
Tue Feb 22 01:51:47 CET 2011
ffmpeg | branch: master | Michael Niedermayer <michaelni at gmx.at> | Tue Feb 22 01:11:35 2011 +0100| [a64a2c5f98d3e2bdc75ac3f30db6d3fe84260436] | committer: Michael Niedermayer
factor draw_glyphs out of drawtext filter
Signed-off-by: Michael Niedermayer <michaelni at gmx.at>
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=a64a2c5f98d3e2bdc75ac3f30db6d3fe84260436
---
libavfilter/vf_drawtext.c | 68 +++++++++++++++++++++++++++------------------
1 files changed, 41 insertions(+), 27 deletions(-)
diff --git a/libavfilter/vf_drawtext.c b/libavfilter/vf_drawtext.c
index 95ee5e8..7802208 100644
--- a/libavfilter/vf_drawtext.c
+++ b/libavfilter/vf_drawtext.c
@@ -475,13 +475,51 @@ static inline void drawbox(AVFilterBufferRef *picref, unsigned int x, unsigned i
}
}
+static int draw_glyphs(DrawTextContext *dtext, AVFilterBufferRef *picref,
+ int width, int height)
+{
+ char *text = dtext->text;
+ uint32_t code = 0;
+ int i;
+ uint8_t *p;
+ Glyph *glyph = NULL;
+
+ for (i = 0, p = text; *p; i++) {
+ Glyph dummy = { 0 };
+ GET_UTF8(code, *p++, continue;);
+
+ /* skip new line chars, just go to new line */
+ if (code == '\n' || code == '\r' || code == '\t')
+ continue;
+
+ dummy.code = code;
+ glyph = av_tree_find(dtext->glyphs, &dummy, (void *)glyph_cmp, NULL);
+
+ if (glyph->bitmap.pixel_mode != FT_PIXEL_MODE_MONO &&
+ glyph->bitmap.pixel_mode != FT_PIXEL_MODE_GRAY)
+ return AVERROR(EINVAL);
+
+ if (dtext->is_packed_rgb) {
+ draw_glyph_rgb(picref, &glyph->bitmap,
+ dtext->positions[i].x, dtext->positions[i].y, width, height,
+ dtext->pixel_step[0], dtext->fontcolor_rgba, dtext->rgba_map);
+ } else {
+ draw_glyph_yuv(picref, &glyph->bitmap,
+ dtext->positions[i].x, dtext->positions[i].y, width, height,
+ dtext->fontcolor, dtext->hsub, dtext->vsub);
+ }
+ }
+
+ return 0;
+}
+
static int draw_text(AVFilterContext *ctx, AVFilterBufferRef *picref,
int width, int height)
{
DrawTextContext *dtext = ctx->priv;
char *text = dtext->text;
uint32_t code = 0, prev_code = 0;
- int x = 0, y = 0, i = 0;
+ int x = 0, y = 0, i = 0, ret;
int text_height, baseline;
uint8_t *p;
int str_w, str_w_max;
@@ -583,32 +621,8 @@ static int draw_text(AVFilterContext *ctx, AVFilterBufferRef *picref,
dtext->hsub, dtext->vsub, dtext->is_packed_rgb, dtext->rgba_map);
}
- /* draw glyphs */
- for (i = 0, p = text; *p; i++) {
- Glyph dummy = { 0 };
- GET_UTF8(code, *p++, continue;);
-
- /* skip new line chars, just go to new line */
- if (code == '\n' || code == '\r' || code == '\t')
- continue;
-
- dummy.code = code;
- glyph = av_tree_find(dtext->glyphs, &dummy, (void *)glyph_cmp, NULL);
-
- if (glyph->bitmap.pixel_mode != FT_PIXEL_MODE_MONO &&
- glyph->bitmap.pixel_mode != FT_PIXEL_MODE_GRAY)
- return AVERROR(EINVAL);
-
- if (dtext->is_packed_rgb) {
- draw_glyph_rgb(picref, &glyph->bitmap,
- dtext->positions[i].x, dtext->positions[i].y, width, height,
- dtext->pixel_step[0], dtext->fontcolor_rgba, dtext->rgba_map);
- } else {
- draw_glyph_yuv(picref, &glyph->bitmap,
- dtext->positions[i].x, dtext->positions[i].y, width, height,
- dtext->fontcolor, dtext->hsub, dtext->vsub);
- }
- }
+ if((ret=draw_glyphs(dtext, picref, width, height))<0)
+ return ret;
return 0;
}
More information about the ffmpeg-cvslog
mailing list