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;

Reply via email to