X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=synfig-core%2Ftrunk%2Fsrc%2Fsynfig%2Flistimporter.cpp;h=02680f02f8cf561eff2d3691b3640f58493c0c58;hb=8c959946a8e6cacbc91a42b468af71b399cf014c;hp=6245b997d5329995ce002f0b0f688de6b5b379a7;hpb=63e709f66d50c124cc0ece2325f4773ac4ae7b20;p=synfig.git diff --git a/synfig-core/trunk/src/synfig/listimporter.cpp b/synfig-core/trunk/src/synfig/listimporter.cpp index 6245b99..02680f0 100644 --- a/synfig-core/trunk/src/synfig/listimporter.cpp +++ b/synfig-core/trunk/src/synfig/listimporter.cpp @@ -6,6 +6,7 @@ ** ** \legal ** Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley +** Copyright (c) 2007, 2008 Chris Moore ** ** This package is free software; you can redistribute it and/or ** modify it under the terms of the GNU General Public License as @@ -64,6 +65,62 @@ ListImporter::ListImporter(const String &filename) } String line; String prefix=etl::dirname(filename)+ETL_DIRECTORY_SEPARATOR; + getline(stream,line); // read first line and check whether it is a Papagayo lip sync file + + if (line == "MohoSwitch1") // it is a Papagayo lipsync file + { + String phoneme, prevphoneme, prevext, ext(".jpg"); // default image format + int frame, prevframe = -1; // it means that the previous phoneme is not known + + while(!stream.eof()) + { + getline(stream,line); + + if(line.find(String("FPS ")) == 0) + { + float f = atof(String(line.begin()+4,line.end()).c_str()); + if (f) fps = f; + continue; + } + + if (line == "bmp" || + line == "gif" || + line == "jpg" || + line == "png" || + line == "ppm" || + line == "tiff" ) + { + ext = String(".") + line; + continue; + } + + size_t pos = line.find(String(" ")); // find space position. The format is "frame phoneme-name". + if(pos != String::npos) + { + frame = atoi(String(line.begin(),line.begin()+pos).c_str()); + phoneme = String(line.begin()+pos+1, line.end()); + + if (prevframe != -1) + while (prevframe < frame) + { + filename_list.push_back(prefix + prevphoneme + prevext); + synfig::info("frame %d, phoneme = %s, path = '%s'", prevframe, prevphoneme.c_str(), (prefix + prevphoneme + prevext).c_str()); + prevframe++; + } + + prevext = ext; + prevframe = frame; + prevphoneme = phoneme; + } + } + + filename_list.push_back(prefix + prevphoneme + prevext); // do it one more time for the last phoneme + synfig::info("finally, frame %d, phoneme = %s, path = '%s'", prevframe, prevphoneme.c_str(), (prefix + prevphoneme + prevext).c_str()); + + return; + } + + stream.seekg(ios_base::beg); while(!stream.eof()) { getline(stream,line);