package net.pms.formats;
import net.pms.PMS;
import net.pms.configuration.PmsConfiguration;
import net.pms.configuration.RendererConfiguration;
import net.pms.dlna.DLNAMediaInfo;
import net.pms.dlna.InputFile;
import net.pms.encoders.RAWThumbnailer;
import net.pms.io.OutputParams;
import net.pms.io.ProcessWrapperImpl;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.List;
public class RAW extends JPG {
private static final Logger logger = LoggerFactory.getLogger(RAW.class);
private static final PmsConfiguration configuration = PMS.getConfiguration();
/**
* {@inheritDoc}
*/
@Override
public Identifier getIdentifier() {
return Identifier.RAW;
}
/**
* {@inheritDoc}
*/
@Override
public String[] getSupportedExtensions() {
return new String[] {
"3fr",
"ari",
"arw",
"bay",
"cap",
"cr2",
"crw",
"dcr",
"dcs",
"dng",
"drf",
"eip",
"erf",
"fff",
"iiq",
"k25",
"kdc",
"mdc",
"mef",
"mos",
"mrw",
"nef",
"nrw",
"obm",
"orf",
"pef",
"ptx",
"pxn",
"r3d",
"raf",
"raw",
"rw2",
"rwl",
"rwz",
"sr2",
"srf",
"srw",
"x3f"
};
}
/**
* @deprecated Use {@link #isCompatible(DLNAMediaInfo, RendererConfiguration)} instead.
* <p>
* Returns whether or not a format can be handled by the PS3 natively.
* This means the format can be streamed to PS3 instead of having to be
* transcoded.
*
* @return True if the format can be handled by PS3, false otherwise.
*/
@Deprecated
@Override
public boolean ps3compatible() {
return false;
}
@Override
public boolean transcodable() {
return true;
}
@Override
public void parse(DLNAMediaInfo media, InputFile file, int type, RendererConfiguration renderer) {
try {
OutputParams params = new OutputParams(configuration);
params.waitbeforestart = 1;
params.minBufferSize = 1;
params.maxBufferSize = 5;
params.hidebuffer = true;
String cmdArray[] = new String[4];
cmdArray[0] = configuration.getDCRawPath();
cmdArray[1] = "-i";
cmdArray[2] = "-v";
if (file.getFile() != null) {
cmdArray[3] = file.getFile().getAbsolutePath();
}
params.log = true;
ProcessWrapperImpl pw = new ProcessWrapperImpl(cmdArray, params, true, false);
pw.runInSameThread();
List<String> list = pw.getOtherResults();
for (String s : list) {
if (s.startsWith("Thumb size: ")) {
String sz = s.substring(13);
media.setWidth(Integer.parseInt(sz.substring(0, sz.indexOf("x")).trim()));
media.setHeight(Integer.parseInt(sz.substring(sz.indexOf("x") + 1).trim()));
}
}
if (media.getWidth() > 0) {
media.setThumb(RAWThumbnailer.getThumbnail(params, file.getFile().getAbsolutePath()));
if (media.getThumb() != null) {
media.setSize(media.getThumb().length);
}
media.setCodecV("raw");
media.setContainer("raw");
}
media.finalize(type, file);
media.setMediaparsed(true);
} catch (Exception e) {
logger.debug("Caught exception", e);
}
}
}