Revision: 26314
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=26314
Author:   campbellbarton
Date:     2010-01-26 22:41:38 +0100 (Tue, 26 Jan 2010)

Log Message:
-----------
support for #'s for output animation paths

This was supported...
image: /tmp/foo_###_bar --> /tmp/foo_001_bar.png

But not this...
anim: /tmp/foo_###_bar --> /tmp/foo_001_250_bar.avi

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/writeavi.c
    trunk/blender/source/blender/blenkernel/intern/writeffmpeg.c
    trunk/blender/source/blender/blenlib/BLI_path_util.h
    trunk/blender/source/blender/blenlib/intern/path_util.c
    trunk/blender/source/blender/quicktime/apple/qtkit_export.m

Modified: trunk/blender/source/blender/blenkernel/intern/writeavi.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/writeavi.c   2010-01-26 
20:43:27 UTC (rev 26313)
+++ trunk/blender/source/blender/blenkernel/intern/writeavi.c   2010-01-26 
21:41:38 UTC (rev 26314)
@@ -121,18 +121,20 @@
 
 static void filepath_avi (char *string, RenderData *rd)
 {
-       char txt[64];
+       if (string==NULL) return;
 
-       if (string==0) return;
-
        strcpy(string, rd->pic);
        BLI_convertstringcode(string, G.sce);
 
        BLI_make_existing_file(string);
 
-       if (BLI_strcasecmp(string + strlen(string) - 4, ".avi")) {
-               sprintf(txt, "%04d_%04d.avi", (rd->sfra) , (rd->efra) );
-               strcat(string, txt);
+       if (!BLI_testextensie(string, ".avi")) {
+               /* if we dont have any #'s to insert numbers into, use 4 
numbers by default */
+               if (strchr(string, '#')==NULL)
+                       strcat(string, "####"); /* 4 numbers */
+
+               BLI_convertstringframe_range(string, rd->sfra, rd->efra);
+               strcat(string, ".avi");
        }
 }
 

Modified: trunk/blender/source/blender/blenkernel/intern/writeffmpeg.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/writeffmpeg.c        
2010-01-26 20:43:27 UTC (rev 26313)
+++ trunk/blender/source/blender/blenkernel/intern/writeffmpeg.c        
2010-01-26 21:41:38 UTC (rev 26314)
@@ -772,15 +772,6 @@
 
 /* Get the output filename-- similar to the other output formats */
 void filepath_ffmpeg(char* string, RenderData* rd) {
-
-       // XXX quick define, solve!
-#define FILE_MAXDIR 256
-#define FILE_MAXFILE 126
-               
-       char txt[FILE_MAXDIR+FILE_MAXFILE];
-       // XXX
-#undef FILE_MAXDIR
-#undef FILE_MAXFILE
        char autosplit[20];
 
        const char ** exts = get_file_extensions(rd->ffcodecdata.type);
@@ -810,9 +801,13 @@
 
        if (!*fe) {
                strcat(string, autosplit);
-               sprintf(txt, "%04d_%04d%s", (rd->sfra), 
-                       (rd->efra), *exts);
-               strcat(string, txt);
+
+               /* if we dont have any #'s to insert numbers into, use 4 
numbers by default */
+               if (strchr(string, '#')==NULL)
+                       strcat(string, "####"); /* 4 numbers */
+
+               BLI_convertstringframe_range(string, rd->sfra, rd->efra);
+               strcat(string, *exts);
        } else {
                *(string + strlen(string) - strlen(*fe)) = 0;
                strcat(string, autosplit);

Modified: trunk/blender/source/blender/blenlib/BLI_path_util.h
===================================================================
--- trunk/blender/source/blender/blenlib/BLI_path_util.h        2010-01-26 
20:43:27 UTC (rev 26313)
+++ trunk/blender/source/blender/blenlib/BLI_path_util.h        2010-01-26 
21:41:38 UTC (rev 26314)
@@ -98,6 +98,7 @@
         */
 int BLI_convertstringcode(char *path, const char *basepath);
 int BLI_convertstringframe(char *path, int frame);
+int BLI_convertstringframe_range(char *path, int sta, int end);
 int BLI_convertstringcwd(char *path);
 
 void BLI_makestringcode(const char *relfile, char *file);

Modified: trunk/blender/source/blender/blenlib/intern/path_util.c
===================================================================
--- trunk/blender/source/blender/blenlib/intern/path_util.c     2010-01-26 
20:43:27 UTC (rev 26313)
+++ trunk/blender/source/blender/blenlib/intern/path_util.c     2010-01-26 
21:41:38 UTC (rev 26314)
@@ -525,7 +525,7 @@
        }
 }
 
-int BLI_convertstringframe(char *path, int frame)
+static int stringframe_chars(char *path, int *char_start, int *char_end)
 {
        int ch_sta, ch_end, i;
        /* Insert current frame: file### -> file001 */
@@ -544,54 +544,44 @@
                        /* dont break, there may be a slash after this that 
invalidates the previous #'s */
                }
        }
-       if (ch_end) { /* warning, ch_end is the last # +1 */
-               /* Add the frame number? */
-               short numlen, hashlen;
-               char tmp[FILE_MAX];
-               
-               char format[16]; /* 6 is realistically the maxframe (300000), 
so 8 should be enough, but 16 to be safe. */
-               if (((ch_end-1)-ch_sta) >= 16) {
-                       ch_end = ch_sta+15; /* disallow values longer then 
'format' can hold */
-               }
-               
-               strcpy(tmp, path);
-               
-               numlen = 1 + (int)log10((double)frame); /* this is the number 
of chars in the number */
-               hashlen = ch_end - ch_sta;
-               
-               sprintf(format, "%d", frame);
-               
-               if (numlen==hashlen) { /* simple case */
-                       memcpy(tmp+ch_sta, format, numlen);
-               } else if (numlen < hashlen) {
-                       memcpy(tmp+ch_sta + (hashlen-numlen), format, numlen); 
/*dont copy the string terminator */
-                       memset(tmp+ch_sta, '0', hashlen-numlen);
-               } else {
-                       /* number is longer then number of #'s */
-                       if (tmp[ch_end] == '\0') { /* hashes are last, no need 
to move any string*/
-                               /* bad juju - not testing string length here :/ 
*/
-                               memcpy(tmp+ch_sta, format, numlen+1); /* add 1 
to get the string terminator \0 */
-                       } else {
-                               /* we need to move the end characters, reuse i 
*/
-                               int j;
-                               
-                               i = strlen(tmp); /* +1 to copy the string 
terminator */
-                               j = i + (numlen-hashlen); /* from/to */
-                               
-                               while (i >= ch_end) {
-                                       tmp[j] = tmp[i]; 
-                                       i--;
-                                       j--;
-                               }
-                               memcpy(tmp + ch_sta, format, numlen);
-                       }
-               }       
+
+       if(ch_end) {
+               *char_start= ch_sta;
+               *char_end= ch_end;
+               return 1;
+       }
+       else {
+               *char_start= -1;
+               *char_end= -1;
+               return 0;
+       }
+}
+
+int BLI_convertstringframe(char *path, int frame)
+{
+       int ch_sta, ch_end;
+       if (stringframe_chars(path, &ch_sta, &ch_end)) { /* warning, ch_end is 
the last # +1 */
+               char tmp[FILE_MAX], format[64];
+               sprintf(format, "%%.%ds%%.%dd%%s", ch_sta, ch_end-ch_sta); /* 
example result: "%.12s%.5d%s" */
+               sprintf(tmp, format, path, frame, path+ch_end);
                strcpy(path, tmp);
                return 1;
        }
        return 0;
 }
 
+int BLI_convertstringframe_range(char *path, int sta, int end)
+{
+       int ch_sta, ch_end;
+       if (stringframe_chars(path, &ch_sta, &ch_end)) { /* warning, ch_end is 
the last # +1 */
+               char tmp[FILE_MAX], format[64];
+               sprintf(format, "%%.%ds%%.%dd_%%.%dd%%s", ch_sta, 
ch_end-ch_sta, ch_end-ch_sta); /* example result: "%.12s%.5d-%.5d%s" */
+               sprintf(tmp, format, path, sta, end, path+ch_end);
+               strcpy(path, tmp);
+               return 1;
+       }
+       return 0;
+}
 
 int BLI_convertstringcode(char *path, const char *basepath)
 {

Modified: trunk/blender/source/blender/quicktime/apple/qtkit_export.m
===================================================================
--- trunk/blender/source/blender/quicktime/apple/qtkit_export.m 2010-01-26 
20:43:27 UTC (rev 26313)
+++ trunk/blender/source/blender/quicktime/apple/qtkit_export.m 2010-01-26 
21:41:38 UTC (rev 26314)
@@ -156,16 +156,20 @@
 void filepath_qt(char *string, RenderData *rd) {
        char txt[64];
        
-       if (string==0) return;
+       if (string==NULL) return;
        
        strcpy(string, rd->pic);
        BLI_convertstringcode(string, G.sce);
        
        BLI_make_existing_file(string);
        
-       if (BLI_strcasecmp(string + strlen(string) - 4, ".mov")) {
-               sprintf(txt, "%04d_%04d.mov", (rd->sfra) , (rd->efra) );
-               strcat(string, txt);
+       if (!BLI_testextensie(string, ".mov")) {
+               /* if we dont have any #'s to insert numbers into, use 4 
numbers by default */
+               if (strchr(string, '#')==NULL)
+                       strcat(string, "####"); /* 4 numbers */
+
+               BLI_convertstringframe_range(string, rd->sfra, rd->efra);
+               strcat(string, ".mov");
        }
 }
 


_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to