bool ofxRGBDScene::loadFromFolder(string sourceMediaFolder, bool countFrames){
	
    
    clear();
        
    calibrationFolder = "";
    videoPath = "";
    alternativeHiResVideoPath = "";
    pairingsFile = "";
	
    mediaFolder = sourceMediaFolder;

    if(sourceMediaFolder.find("_calibration") != string::npos) {
        ofLogWarning("ofxRGBDScene::loadFromFolder -- Discarding _calibration folder");
        return false;
    }
    if(sourceMediaFolder.find("_Renderbin/") != string::npos){
    	ofLogWarning("ofxRGBDScene::loadFromFolder -- Discarding Render Bin");
        return false;
    }
    ofDirectory dataDirectory(mediaFolder);
    if(!dataDirectory.exists()){
        ofLogWarning("ofxRGBDScene::loadFromFolder -- folder " + mediaFolder + " -- Directory doesn't exist.");
        return false;
    }
    
    if(!dataDirectory.isDirectory()){
        ofLogWarning("ofxRGBDScene::loadFromFolder -- folder " + mediaFolder + " -- Isn't a directory!");
        return false;
    }
    
	dataDirectory.listDir();    
	int numFiles = dataDirectory.numFiles();
    if(numFiles == 0){
        ofLogWarning("ofxRGBDScene::loadFromFolder -- folder " + mediaFolder + " -- Directory is empty.");
        return false;        
    }

    vector<string> components = ofSplitString( mediaFolder, "/");
    name = components[components.size()-1];
    
    //////////////////////////////////////////////
    // DEPTH
    //////////////////////////////////////////////

    bool depthFolderFound = false;
    for(int i = 0; i < dataDirectory.numFiles(); i++){
        if(dataDirectory.getFile(i).isDirectory() && (dataDirectory.getName(i).find("depth") != string::npos || dataDirectory.getName(i).find("TAKE") != string::npos) ){
            depthFolder = dataDirectory.getPath(i);
            depthFolderFound = true;
        }
    }
    
    if(!depthFolderFound){
	    depthFolder = mediaFolder + "/depth/";
    }
    
    ofDirectory depthDirectory = ofDirectory(depthFolder);
    
    //potentially a legacy folder. check to see if there are +20 PNG or raws's 
    //indicating the files need to be moved
    ofDirectory mainDirectory(sourceMediaFolder);
    mainDirectory.allowExt("png");
    mainDirectory.allowExt("raw");
    mainDirectory.listDir();
    if(mainDirectory.numFiles() > 20){
        
        //create the depth directory if we haven't yet
        if(!depthDirectory.exists()){
             depthDirectory.create();
        }
         
         //move all the files from the main folder into the depth directory
        for(int i = 0; i < mainDirectory.numFiles(); i++){
            string destinationPath = ofFilePath::getEnclosingDirectory(mainDirectory.getPath(i)) + "depth/" + mainDirectory.getName(i);
            //cout << "ofxRGBDScene -- Legacy Format -- moved to " << destinationPath << endl;
        	//mainDirectory.getFile(i).moveTo( destinationPath );
        }
    }
    
    if(depthDirectory.exists()){
        if(countFrames){
            ofDirectory compresseDepthFrames(depthFolder);
            compresseDepthFrames.allowExt("png");
            compressedDepthFrameCount = compresseDepthFrames.listDir();
            
            ofDirectory uncompressedDepthFrames(depthFolder);
            uncompressedDepthFrames.allowExt("raw");
            uncompressedDepthFrameCount = uncompressedDepthFrames.listDir();
            
            totalDepthFrameCount = uncompressedDepthFrameCount + compressedDepthFrameCount;
            hasDepth = (totalDepthFrameCount > 0);
        }
        else {
            //guess it
            hasDepth = true;
        }
    }
    
    //////////////////////////////////////////////
    // END DEPTH
    //////////////////////////////////////////////

    //////////////////////////////////////////////
    // COLOR
    //////////////////////////////////////////////
    string colorFolder = mediaFolder + "/color/";
    ofDirectory colorDirectory = ofDirectory(colorFolder);
	ofDirectory mainDirectoryColor = ofDirectory(sourceMediaFolder);
    //TODO: make an xml file for video formats
    mainDirectoryColor.allowExt("mov");
    mainDirectoryColor.allowExt("mpg");
    mainDirectoryColor.allowExt("mepg");
    mainDirectoryColor.allowExt("mp4");
    mainDirectoryColor.listDir();
    
    //move the movies into the color/ dir if they are hanging outside
    if(mainDirectoryColor.numFiles() > 0){
        if(!colorDirectory.exists()){
            colorDirectory.create();
        }
        
        for(int i = 0; i < mainDirectoryColor.numFiles(); i++){
            string destinationPath = ofFilePath::getEnclosingDirectory(mainDirectoryColor.getPath(i)) + "color/" + mainDirectoryColor.getName(i);
//            cout << "ofxRGBDScene -- Legacy Format -- moved to " << destinationPath << endl;
//        	mainDirectoryColor.getFile(i).moveTo( destinationPath );
        }

    }

    if(colorDirectory.exists()){
        //TODO: make an xml file for video formats
        colorDirectory.allowExt("mpeg");
        colorDirectory.allowExt("mov");
        colorDirectory.allowExt("mpg");
        colorDirectory.allowExt("mp4");
		colorDirectory.listDir();
        
        if(colorDirectory.numFiles() == 0){
            hasColor = false;
        }
        else if(colorDirectory.numFiles() == 1){
            hasColor = true;
            videoPath = colorDirectory.getPath(0);
        }
        else {
	        int largestIndex = 0;  
            int smallestIndex = 0;
            uint64_t largestSize = colorDirectory.getFile(0).getSize();
            uint64_t smallestSize = colorDirectory.getFile(0).getSize();
            for(int i = 0; i < colorDirectory.numFiles(); i++){
                uint64_t size = colorDirectory.getFile(i).getSize();
                cout << colorDirectory.getName(i) << " size is " << size << endl;
                if(largestSize < size){
                    largestSize = size;
                    largestIndex = i;
                }
                if(size < smallestSize){                    
                    smallestSize = size;
                    smallestIndex = i;
                }
            }
            
            hasColor = true;
            hasAlternativeHiResVideo = true;
            alternativeHiResVideoPath = colorDirectory.getPath(largestIndex);
            videoPath = colorDirectory.getPath(smallestIndex); 
//            cout << "video path is " << videoPath << " alternative is " << alternativeHiResVideoPath << endl;
//            cout << "largest size is " << largestSize << " smallest size is " << smallestSize << endl;
        }
        
        if(hasColor){
            videoThumbsPath = ofFilePath::removeExt(videoPath);
            if(!ofDirectory(videoThumbsPath).exists()){
                ofDirectory(videoThumbsPath).create(true);
            }
        }
    }    
    //////////////////////////////////////////////
    // END COLOR
    //////////////////////////////////////////////

    //////////////////////////////////////////////
    // PAIRINGS FILE
    //////////////////////////////////////////////
    if(hasColor){
        ofDirectory mainDirectoryPairings = ofDirectory(sourceMediaFolder);
        mainDirectoryPairings.allowExt("xml");
        mainDirectoryPairings.listDir();
        for(int i = 0; i < mainDirectoryPairings.numFiles(); i++){
            if(mainDirectoryPairings.getName(i).find("pairings") != string::npos){
                pairingsFile = mainDirectoryPairings.getPath(i);
                hasPairings = true;
            }
            
            if(mainDirectoryPairings.getName(i).find("xyshift") != string::npos){
            	xyshiftFile = mainDirectoryPairings.getPath(i);
                hasXYShift = true;
            }
        }

        if(!hasPairings){
            pairingsFile = mediaFolder + "/pairings.xml";
        }
        if(!hasXYShift){
            xyshiftFile = mediaFolder + "/xyshift.xml";
        }
    }
    //////////////////////////////////////////////
    // END PAIRINGS FILE
    //////////////////////////////////////////////

    
    //////////////////////////////////////////////
    // CALIBRATION
    //////////////////////////////////////////////
	if(hasColor){
        vector<string> calibrationFolders;
        calibrationFolders.push_back(mediaFolder + "/_calibration/matrices/");
        calibrationFolders.push_back(mediaFolder + "/calibration/");
        calibrationFolders.push_back(mediaFolder + "/../_calibration/matrices/");
        
        for(int i = 0; i < calibrationFolders.size(); i++){
            ofDirectory calibrationDirectory = ofDirectory(calibrationFolders[i]);
            hasCalibration = calibrationDirectory.exists();
            if(hasCalibration){
                calibrationFolder = calibrationFolders[i];
                break;
            }
        }
    }
    //////////////////////////////////////////////
    // END CALIBRATION
    //////////////////////////////////////////////


    //////////////////////////////////////////////
    // REPORT
    //////////////////////////////////////////////
    bool debug = true;
    if(debug){
        cout << "REPORT FOR " << sourceMediaFolder << endl;
        cout << "has DEPTH? " << (hasDepth ? "YES" : "NO") << endl;
        if(hasDepth){
            cout << "	# COMPRESSED DEPTH FRAMES " << compressedDepthFrameCount << endl;
            if(uncompressedDepthFrameCount > 0){
                cout << "	# UNCOMPRESSED DEPTH FRAMES " << uncompressedDepthFrameCount << endl;                
            }
        }
        
        cout << "has COLOR? " << (hasColor ? "YES" : "NO") << endl;
        if(hasColor){
            cout << "has VIDEO " << (hasColor ? "YES" : "NO") << endl;
            cout << "has HI RES " << (hasAlternativeHiResVideo ? "YES" : "NO") << endl;
            cout << "has CALIBRATION " << (hasCalibration ? "YES" : "NO") << endl;
            cout << "has PAIRINGS " << (hasPairings ? "YES" : "NO") << endl;
            if(hasPairings){
                cout << "pairings! " << pairingsFile << endl;
            }
        }
    }
    //////////////////////////////////////////////
    // END REPORT
    //////////////////////////////////////////////

	return valid();
}
Beispiel #2
0
// A Bible's export directory.
string Export_Logic::bibleDirectory (string bible)
{
  return filter_url_create_path (mainDirectory (), bible);
}