package com.castlabs.dash.dashfragmenter;
import com.coremedia.iso.boxes.TrackBox;
import java.io.File;
import java.util.HashMap;
import java.util.Map;
import java.util.logging.Logger;
public class FileAndTrackSelector {
private static Map<String, String> handlerToType = new HashMap<>();
static {
handlerToType.put("soun", "audio");
handlerToType.put("vide", "video");
}
private static Logger LOG = Logger.getLogger(FileAndTrackSelector.class.getName());
public File file;
public int trackId = -1;
public String language = null;
public String type = null;
public boolean isSelected(TrackBox trackBox) {
if (trackId >= 0 && trackBox.getTrackHeaderBox().getTrackId() != trackId) {
LOG.fine("Excluding track " + trackBox.getTrackHeaderBox().getTrackId() + " of " + file + " from processing as trackId is not " + trackId);
return false;
}
if (language != null && !trackBox.getMediaBox().getMediaHeaderBox().getLanguage().equals(language)) {
LOG.fine("Excluding track " + trackBox.getTrackHeaderBox().getTrackId() + " of " + file + " from processing as language is " + trackBox.getMediaBox().getMediaHeaderBox().getLanguage() + " but not " + language + ".");
return false;
}
if (type != null) {
String handler = trackBox.getMediaBox().getHandlerBox().getHandlerType();
if (!handlerToType.computeIfAbsent(handler, e -> e).equals(type)) {
LOG.fine("Excluding track " + trackBox.getTrackHeaderBox().getTrackId() + " of " + file + " from processing as ^type is " + handlerToType.computeIfAbsent(handler, e -> e) + " but not " + type + ".");
return false;
}
}
return true;
}
@Override
public String toString() {
return "FileAndTrackSelector{" +
"file=" + file +
", trackId=" + trackId +
", language='" + language + '\'' +
", type='" + type + '\'' +
'}';
}
}