[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [26314] trunk/blender/source/blender: support for #'s for output animation paths
Campbell Barton
ideasman42 at gmail.com
Tue Jan 26 22:41:38 CET 2010
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");
}
}
More information about the Bf-blender-cvs
mailing list