FILE *stream = fopen(asset->path, "w");
if( !stream ) return 1;
// Use sprintf instead of fprintf for VFS.
- char string[BCTEXTLEN];
- sprintf(string, "%s\n", list_prefix);
- fwrite(string, strlen(string), 1, stream);
- sprintf(string, "# First line is always %s\n", list_prefix);
- fwrite(string, strlen(string), 1, stream);
- sprintf(string, "# Frame rate:\n");
- fwrite(string, strlen(string), 1, stream);
- sprintf(string, "%f\n", asset->frame_rate);
- fwrite(string, strlen(string), 1, stream);
- sprintf(string, "# Width:\n");
- fwrite(string, strlen(string), 1, stream);
- sprintf(string, "%d\n", asset->width);
- fwrite(string, strlen(string), 1, stream);
- sprintf(string, "# Height:\n");
- fwrite(string, strlen(string), 1, stream);
- sprintf(string, "%d\n", asset->height);
- fwrite(string, strlen(string), 1, stream);
- sprintf(string, "# List of image files follows\n");
- fwrite(string, strlen(string), 1, stream);
-
- for(int i = 0; i < path_list.total; i++)
- {
+ fprintf(stream, "%s\n", list_prefix);
+ fprintf(stream, "# First line is always %s\n", list_prefix);
+ fprintf(stream, "# Frame rate:\n");
+ fprintf(stream, "%f\n", asset->frame_rate);
+ fprintf(stream, "# Width:\n");
+ fprintf(stream, "%d\n", asset->width);
+ fprintf(stream, "# Height:\n");
+ fprintf(stream, "%d\n", asset->height);
+ fprintf(stream, "# List of image files follows\n");
+
+ char *cp = strrchr(asset->path, '/');
+ int dir_len = !cp ? 0 : cp - asset->path;
+
+ for(int i = 0; i < path_list.total; i++) {
+ const char *path = path_list.values[i];
// Fix path for VFS but leave leading slash
- if(!strncmp(path_list.values[i], RENDERFARM_FS_PREFIX, strlen(RENDERFARM_FS_PREFIX)))
- sprintf(string, "%s\n", path_list.values[i] + strlen(RENDERFARM_FS_PREFIX));
- else
- sprintf(string, "%s\n", path_list.values[i]);
- fwrite(string, strlen(string), 1, stream);
+ if( !strncmp(path, RENDERFARM_FS_PREFIX, strlen(RENDERFARM_FS_PREFIX)) )
+ path += strlen(RENDERFARM_FS_PREFIX);
+// ./path for relative list access
+ else if( dir_len > 0 && !strncmp(path, asset->path, dir_len) ) {
+ fprintf(stream, "."); path += dir_len;
+ }
+ fprintf(stream, "%s\n", path);
}
fclose(stream);
return 0;
asset->audio_data = 0;
asset->video_data = 1;
-// Get all the paths
+ char prefix[BCTEXTLEN], *bp = prefix, *cp = strrchr(asset->path, '/');
+ for( int i=0, n=!cp ? 0 : cp-asset->path; i<n; ++i ) *bp++ = asset->path[i];
+ *bp = 0;
+
+// Get all the paths, expand relative paths
int missing = 0;
- while(!feof(stream) && fgets(string, BCTEXTLEN, stream) ) {
+ while( !feof(stream) && fgets(string, BCTEXTLEN, stream) ) {
int len = strlen(string);
- if( !len || string[0] == '#' || string[0] == ' ') continue;
- string[len-1] = 0;
- if( access(string,R_OK) && !missing++ )
- eprintf(_("%s:no such file"), string);
- path_list.append(cstrdup(string));
+ if( !len || string[0] == '#' || string[0] == ' ' ) continue;
+ if( string[len-1] == '\n' ) string[len-1] = 0;
+ char path[BCTEXTLEN], *pp = path, *ep = pp + sizeof(path)-1;
+ if( string[0] == '.' && string[1] == '/' && prefix[0] )
+ pp += snprintf(pp, ep-pp, "%s/", prefix);
+ snprintf(pp, ep-pp, "%s", string);
+ if( access(path, R_OK) && !missing++ )
+ eprintf(_("%s:no such file"), path);
+ path_list.append(cstrdup(path));
}
//for(int i = 0; i < path_list.total; i++) printf("%s\n", path_list.values[i]);
data->allocate_compressed_data(ostat.st_size);
data->set_compressed_size(ostat.st_size);
(void)fread(data->get_data(), ostat.st_size, 1, fd);
- temp = new VFrame(0,
- -1,
- asset->width,
- asset->height,
- frame->get_color_model(),
- -1);
+ temp = new VFrame(asset->width, asset->height,
+ frame->get_color_model(), 0);
read_frame(temp, data);
break;
}
}
else
{
- temp = new VFrame(0,
- -1,
- asset->width,
- asset->height,
- frame->get_color_model(),
- -1);
+ temp = new VFrame(asset->width, asset->height, frame->get_color_model(), 0);
read_frame(temp, asset->path);
}
}