This patch adds a "frame" argument to the text filter. It generates the
text "Frame: %06d", ptr->id. It also revamps the positional argument to
make it more intuitive (keypad navigation).
Allan
diff -ru old/filter/filter_text.c new/filter/filter_text.c
--- old/filter/filter_text.c 2007-11-03 05:02:34.000000000 -0400
+++ new/filter/filter_text.c 2009-01-27 00:52:45.000000000 -0500
@@ -21,8 +21,16 @@
*
*/
+/*
+ * v0.1.4 -> v0.1.5: (Allan Snider)
+ * - change posdef to keypad location
+ * - changed default font path, new standard location
+ * - add "frame" option, similar to tstamp, but just
+ * writes a frame number (ptr->id)
+ */
+
#define MOD_NAME "filter_text.so"
-#define MOD_VERSION "v0.1.4 (2004-02-14)"
+#define MOD_VERSION "v0.1.5 (2007-02-14)"
#define MOD_CAP "write text in the image"
#define MOD_AUTHOR "Tilmann Bitterberg"
@@ -41,7 +49,11 @@
// basic parameter
-enum POS { NONE, TOP_LEFT, TOP_RIGHT, BOT_LEFT, BOT_RIGHT, CENTER, BOT_CENTER
};
+/* use keypad naviation */
+enum POS { NONE=0,
+ TOP_LEFT=7, TOP_CENTER=8, TOP_RIGHT=9,
+ CTR_LEFT=4, CTR_CENTER=5, CTR_RIGHT=6,
+ BOT_LEFT=1, BOT_CENTER=2, BOT_RIGHT=3 };
#define MAX_OPACITY 100
@@ -80,6 +92,7 @@
int fade; /* fade in/out (speed) */
int transparent; /* do not draw a black bounding box */
int tstamp; /* */
+ int frame; /* string is "Frame: %06d", ptr->id */
int antialias; /* do sub frame anti-aliasing (not done) */
int R, G, B; /* color to apply in RGB */
int Y, U, V; /* color to apply in YUV */
@@ -94,7 +107,6 @@
int boundX, boundY;
int fade_in, fade_out;
-
FT_Library library;
FT_Face face;
FT_GlyphSlot slot;
@@ -117,8 +129,9 @@
" 'fade' Fade in and/or fade out [0=off, 1=slow, 10=fast]\n"
" 'notransparent' disable transparency\n"
" 'pos' Position (0-width x 0-height) [0x0]\n"
-" 'posdef' Position (0=None 1=TopL 2=TopR 3=BotL 4=BotR 5=Cent
6=BotCent) [0]\n"
-" 'tstamp' add timestamp to each frame (overrides string)\n"
+" 'posdef' Position (keypad number, 0=None) [0]\n"
+" 'tstamp' add timestamp to each frame (overridden by string)\n"
+" 'frame' add frame number to each frame (overridden by string)\n"
, MOD_CAP);
}
@@ -219,7 +232,7 @@
static float elapsed_ss;
static uint8_t *buf = NULL;
static uint8_t *p, *q;
- char *default_font = "/usr/X11R6/lib/X11/fonts/TrueType/arial.ttf";
+ char *default_font = "/usr/share/fonts/corefonts/arial.ttf";
extern int flip; // transcode.c
if (ptr->tag & TC_AUDIO)
@@ -258,10 +271,17 @@
optstr_param (options, "pos", "Position (0-width x 0-height)",
"%dx%d", "0x0", "0", "width", "0", "height");
- optstr_param (options, "posdef", "Position (0=None 1=TopL 2=TopR 3=BotL
4=BotR 5=Cent 6=BotCent)", "%d", "0", "0", "5");
+ optstr_param (options, "posdef", "Position (keypad number, 0=None)",
+ "%d", "0", "0", "9");
- optstr_param (options, "notransparent", "disable transparency (enables
block box)", "", "0");
- optstr_param (options, "tstamp", "add timestamp to each frame (overrides
string)", "", "0");
+ optstr_param (options, "notransparent", "disable transparency (enables
block box)",
+ "", "0");
+
+ optstr_param (options, "tstamp", "add timestamps (overridden by string)",
+ "", "0");
+
+ optstr_param (options, "frame", "add frame numbers (overridden by
string)",
+ "", "0");
return 0;
}
@@ -300,6 +320,7 @@
mfd->do_time=1;
mfd->tstamp=0;
+ mfd->frame=0;
mfd->opaque=MAX_OPACITY;
mfd->fade_in = 0;
mfd->fade_out = 0;
@@ -349,6 +370,10 @@
mfd->string = "[ timestamp ]";
mfd->do_time = 0;
mfd->tstamp = 1;
+ } else if (optstr_lookup (options, "frame") ) {
+ mfd->string=strdup("Frame: dddddd");
+ mfd->do_time = 0;
+ mfd->frame = 1;
} else {
// do `date` as default
mytime = time(NULL);
@@ -456,36 +481,66 @@
switch (mfd->pos) {
case NONE: /* 0 */
break;
+
case TOP_LEFT:
mfd->posx = 0;
mfd->posy = 0;
break;
+
+ case TOP_CENTER:
+ mfd->posx = (width - mfd->boundX)/2;
+ mfd->posy = 0;
+ if (mfd->posx&1)
+ mfd->posx++;
+ break;
+
case TOP_RIGHT:
mfd->posx = width - mfd->boundX;
mfd->posy = 0;
break;
- case BOT_LEFT:
+
+ case CTR_LEFT:
mfd->posx = 0;
- mfd->posy = height - mfd->boundY;
- break;
- case BOT_RIGHT:
- mfd->posx = width - mfd->boundX;
- mfd->posy = height - mfd->boundY;
+ mfd->posy = (height- mfd->boundY)/2;
+ if (mfd->posy&1)
+ mfd->posy++;
break;
- case CENTER:
+
+ case CTR_CENTER:
mfd->posx = (width - mfd->boundX)/2;
mfd->posy = (height- mfd->boundY)/2;
+
/* align to not cause color disruption */
- if (mfd->posx&1) mfd->posx++;
- if (mfd->posy&1) mfd->posy++;
+ if (mfd->posx&1)
+ mfd->posx++;
+ if (mfd->posy&1)
+ mfd->posy++;
+ break;
+
+ case CTR_RIGHT:
+ mfd->posx = width - mfd->boundX;
+ mfd->posy = (height- mfd->boundY)/2;
+ if (mfd->posy&1)
+ mfd->posy++;
+ break;
+
+ case BOT_LEFT:
+ mfd->posx = 0;
+ mfd->posy = height - mfd->boundY;
break;
+
case BOT_CENTER:
mfd->posx = (width - mfd->boundX)/2;
mfd->posy = height - mfd->boundY;
- if (mfd->posx&1) mfd->posx++;
+ if (mfd->posx&1)
+ mfd->posx++;
break;
- }
+ case BOT_RIGHT:
+ mfd->posx = width - mfd->boundX;
+ mfd->posy = height - mfd->boundY;
+ break;
+ }
if ( mfd->posy < 0 || mfd->posx < 0 ||
mfd->posx+mfd->boundX > width ||
@@ -566,6 +621,11 @@
font_render(width,height,codec,w,h,i,p,q,buf);
}
+ else if (mfd->frame) {
+ sprintf(mfd->string, "Frame: %06d", ptr->id);
+ font_render(width,height,codec,w,h,i,p,q,buf);
+ }
+
if (mfd->start == ptr->id && mfd->fade) {
mfd->fade_in = 1;
mfd->fade_out= 0;