if (log.isDebugEnabled()) { log.debug("getMediaObject("+req+")"); }
    public MediaObject getMediaObject (Request req)    throws ScillaException {	File ifile = new File(req.getInputFile());	// does source really exist	if (!ifile.exists()) {	    throw new ScillaNoInputException();	}	// does request need any conversion?	if (!req.needConverter()) {	    log.debug("get: original data");	    return new FileObject(req.getInputFile());	}	MediaObject obj = null;	String ofn = getCachedObjectFilename(req);	File ofile = new File(ofn);	// conversion still running?	obj = (RunnerObject) runners.get(ofn);	if (obj != null) {	    log.debug("get: catchup with runner");	    return new CachedObject(ofn, (RunnerObject) obj);	}	// output in cache and source not newer than cache	if (ofile.exists() && ifile.lastModified() < ofile.lastModified()) {	    log.debug("get: cached data");	    return new CachedObject(ofn);	}	// create new MediaObject	obj = MediaFactory.createObject(req, ofn);	if (obj instanceof RunnerObject) {	    RunnerObject ro = (RunnerObject) obj;	    // make sure output file can be writen	    ensureCacheDirectoryFor(ofn);	    // register change listener	    runners.put(ofn, ro);	    ro.addRunnerChangeListener(this);	    // add runner to list and start converter	    ro.start();	    if (log.isDebugEnabled()) {		log.debug("get: started runner: "+ro);	    }	    return obj;	}	// not a runner probably original	log.debug("get: passing object from media factory");	return obj;    }