Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Added options for renderer specific file name formats.

  • Loading branch information...
commit c56f3de59bffb8579897893bef419d9ff49fd6bd 1 parent 9decd5f
@Raptor399 Raptor399 authored
Showing with 359 additions and 37 deletions.
  1. +1 −0  CHANGELOG.txt
  2. +31 −0 src/main/external-resources/renderers/PS3.conf
  3. +27 −1 src/main/java/net/pms/configuration/RendererConfiguration.java
  4. +206 −36 src/main/java/net/pms/dlna/DLNAResource.java
  5. +5 −0 src/main/java/net/pms/encoders/FFMpegAudio.java
  6. +5 −0 src/main/java/net/pms/encoders/FFMpegAviSynthVideo.java
  7. +6 −0 src/main/java/net/pms/encoders/FFMpegDVRMSRemux.java
  8. +5 −0 src/main/java/net/pms/encoders/FFMpegVideo.java
  9. +5 −0 src/main/java/net/pms/encoders/FFMpegWebVideo.java
  10. +5 −0 src/main/java/net/pms/encoders/MEncoderAviSynth.java
  11. +5 −0 src/main/java/net/pms/encoders/MEncoderVideo.java
  12. +5 −0 src/main/java/net/pms/encoders/MEncoderWebVideo.java
  13. +5 −0 src/main/java/net/pms/encoders/MPlayerAudio.java
  14. +5 −0 src/main/java/net/pms/encoders/MPlayerWebAudio.java
  15. +5 −0 src/main/java/net/pms/encoders/MPlayerWebVideoDump.java
  16. +8 −0 src/main/java/net/pms/encoders/Player.java
  17. +5 −0 src/main/java/net/pms/encoders/RAWThumbnailer.java
  18. +5 −0 src/main/java/net/pms/encoders/TSMuxerVideo.java
  19. +5 −0 src/main/java/net/pms/encoders/TsMuxerAudio.java
  20. +5 −0 src/main/java/net/pms/encoders/VideoLanAudioStreaming.java
  21. +5 −0 src/main/java/net/pms/encoders/VideoLanVideoStreaming.java
  22. +5 −0 src/main/java/net/pms/messages.properties
View
1  CHANGELOG.txt
@@ -23,6 +23,7 @@ Changelog:
- Fixed possible error while loading iPhoto library (GC1523)
- Fixed bug where disabled engines could be selected in the #--TRANSCODE--# folder
- Fixed bug that prevented showing Galaxy Nexus pictures
+ - Added options for renderer specific file name formats
1.70.1 - 2012-08-31
View
31 src/main/external-resources/renderers/PS3.conf
@@ -90,6 +90,37 @@ Audio = true
# Image: Set to "true" if the renderer can display images.
Image = true
+# LongFileNameFormat: Determines how media file names in the regular folders
+# are formatted. The formatting string may contain several tokens, which will
+# be replaced by their respective values. If a token cannot be meaningfully
+# replaced, it (and its optional surrounding braces) will not be displayed.
+#
+# The following tokens can be used:
+#
+# %A Audio language full name (e.g. "Japanese")
+# %a Audio language short name (e.g. "jp")
+# %b Audio flavor (e.g. "ac3 5.1 @ 640 kbps")
+# %c Audio codec (e.g. "AC3")
+# %d DVD track duration (e.g. "3:27:15")
+# %E Engine full name (e.g. "MEncoder")
+# %e Engine short name (e.g. "MEnc")
+# %F File name with extension (e.g. "Big_Buck_Bunny.mov")
+# %f File name without extension (e.g. "Bug_Buck_Bunny")
+# %S Subtitle language full name (e.g. "English")
+# %s Subtitle language short name (e.g. "en")
+# %t Subtitle type (e.g. "Timed text")
+# %u Subtitle flavor (e.g. "TX3G")
+# %x External subtitles ("External Subtitles")
+#
+# Default value is "%F - %d [%E] {%x} {Sub: %t/%S (%u)}".
+#LongFileNameFormat = %F - %d [%E] {%x} {Sub: %t/%S (%u)}
+
+# ShortFileNameFormat: Determines how media file names in the transcoding
+# virtual folder are formatted. See LongFileNameFormat for the tokens that
+# can be used.
+# Default value is "[%E] {Audio: %c/%A (%b)} {Sub: %t/%S (%u)}".
+#ShortFileNameFormat = [%E] {Audio: %c/%A (%b)} {Sub: %t/%S (%u)}
+
#-----------------------------------------------------------------------------
# DLNA SETTINGS
#
View
28 src/main/java/net/pms/configuration/RendererConfiguration.java
@@ -48,7 +48,7 @@
private static final String AUDIO = "Audio";
private static final String IMAGE = "Image";
private static final String SEEK_BY_TIME = "SeekByTime";
-
+
private static final String DEPRECATED_MPEGPSAC3 = "MPEGAC3"; // XXX deprecated: old name with missing container
private static final String MPEGPSAC3 = "MPEGPSAC3";
private static final String MPEGTSAC3 = "MPEGTSAC3";
@@ -89,6 +89,8 @@
private static final String DLNA_TREE_HACK = "CreateDLNATreeFaster";
private static final String CHUNKED_TRANSFER = "ChunkedTransfer";
private static final String SUBTITLE_HTTP_HEADER = "SubtitleHttpHeader";
+ private static final String LONG_FILE_NAME_FORMAT = "LongFileNameFormat";
+ private static final String SHORT_FILE_NAME_FORMAT = "ShortFileNameFormat";
// Sony devices require JPG thumbnails
private static final String FORCE_JPG_THUMBNAILS = "ForceJPGThumbnails";
@@ -627,6 +629,30 @@ public String getRendererIcon() {
}
/**
+ * LongFileNameFormat: Determines how media file names are formatted in the
+ * regular folders. All supported formatting options are described in
+ * {@link net.pms.dlna.DLNAResource#getDisplayName(RendererConfiguration)
+ * getDisplayName(RendererConfiguration)}.
+ *
+ * @return The format for file names in the regular folders.
+ */
+ public String getLongFileNameFormat() {
+ return getString(LONG_FILE_NAME_FORMAT, Messages.getString("DLNAResource.4"));
+ }
+
+ /**
+ * ShortFileNameFormat: Determines how media file names are formatted in the
+ * transcoding virtual folder. All supported formatting options are described in
+ * {@link net.pms.dlna.DLNAResource#getDisplayName(RendererConfiguration)
+ * getDisplayName(RendererConfiguration)}.
+ *
+ * @return The format for file names in the transcoding virtual folder.
+ */
+ public String getShortFileNameFormat() {
+ return getString(SHORT_FILE_NAME_FORMAT, Messages.getString("DLNAResource.3"));
+ }
+
+ /**
* Returns the the name of an additional HTTP header whose value should
* be matched with the additional header search pattern. The header name
* must be an exact match (read: the header has to start with the exact
View
242 src/main/java/net/pms/dlna/DLNAResource.java
@@ -859,71 +859,241 @@ public void resolve() {
}
// Ditlew
- /**Returns the DisplayName for the default renderer.
+ /**
+ * Returns the DisplayName for the default renderer.
+ *
* @return The display name.
* @see #getDisplayName(RendererConfiguration)
*/
public String getDisplayName() {
- return getDisplayName(null);
+ return getDisplayName(getDefaultRenderer());
}
- // Ditlew - org
- //public String getDisplayName() {
- // Ditlew
- /**Returns the DisplayName that is shown to the Renderer. Depending on the settings,
- * extra info might be appended, like item duration.<p>
- * This is based on {@link #getName()}.
- * @param mediaRenderer Media Renderer for which to show information.
+ /**
+ * Returns the string for this resource that will be displayed on the
+ * renderer. The name is formatted based on the renderer configuration
+ * setting "FileNameFormat" to contain the information of the resource.
+ * This allows the same resource to be displayed with different display
+ * names on different renderers.
+ * <p>
+ * The following formatting options are accepted:
+ *
+ * <table>
+ * <tr><th>Option</th><th>Description</th></tr>
+ * <tr><td>%A</td><td>Audio language full name</td></tr>
+ * <tr><td>%a</td><td>Audio language short name</td></tr>
+ * <tr><td>%b</td><td>Audio flavor</td></tr>
+ * <tr><td>%c</td><td>Audio codec</td></tr>
+ * <tr><td>%d</td><td>DVD track duration</td></tr>
+ * <tr><td>%E</td><td>Engine full name</td></tr>
+ * <tr><td>%e</td><td>Engine short name</td></tr>
+ * <tr><td>%F</td><td>File name with extension</td></tr>
+ * <tr><td>%f</td><td>File name without extension</td></tr>
+ * <tr><td>%S</td><td>Subtitle language full name</td></tr>
+ * <tr><td>%s</td><td>Subtitle language short name</td></tr>
+ * <tr><td>%t</td><td>Subtitle type</td></tr>
+ * <tr><td>%u</td><td>Subtitle flavor</td></tr>
+ * <tr><td>%x</td><td>External subtitles</td></tr>
+ * </table>
+ *
+ * @param mediaRenderer
+ * Media Renderer for which to show information.
* @return String representing the item.
*/
public String getDisplayName(RendererConfiguration mediaRenderer) {
- String name = getName();
- if (this instanceof RealFile && PMS.getConfiguration().isHideExtensions() && !isFolder()) {
- name = FileUtil.getFileNameWithoutExtension(name);
+
+ // Chapter virtual folder ignores formats and only displays the start time
+ if (getSplitRange().isEndLimitAvailable()) {
+ return ">> " + DLNAMediaInfo.getDurationString(getSplitRange().getStart());
}
- if (getPlayer() != null) {
- if (isNoName()) {
- name = "[" + getPlayer().name() + "]";
+
+ // Is this still relevant? The player name already contains "AviSynth"
+ if (isAvisynth()) {
+ return (getPlayer() != null ? ("[" + getPlayer().name()) : "") + " + AviSynth]";
+ }
+
+ String result;
+ String format;
+ String audioLangFullName = "";
+ String audioLangShortName = "";
+ String audioFlavor = "";
+ String audioCodec = "";
+ String dvdTrackDuration = "";
+ String engineFullName = "";
+ String engineShortName = "";
+ String fileNameWithExtension = "";
+ String fileNameWithoutExtension = "";
+ String subLangFullName = "";
+ String subLangShortName = "";
+ String subType = "";
+ String subFlavor = "";
+ String externalSubs = "";
+
+ // Entries in the transcoding virtual folder get their audio details
+ // set. So if this is the case, use the short file name format.
+ boolean useShortFormat = (getMediaAudio() != null);
+
+ // Determine the format
+ if (mediaRenderer != null) {
+ if (useShortFormat) {
+ format = mediaRenderer.getShortFileNameFormat();
} else {
- // Ditlew - WDTV Live don't show durations otherwise, and this is useful for finding the main title
- if (mediaRenderer != null && mediaRenderer.isShowDVDTitleDuration() && getMedia().getDvdtrack() > 0) {
- name += " - " + getMedia().getDurationString();
- }
+ format = mediaRenderer.getLongFileNameFormat();
+ }
+ } else {
+ if (useShortFormat) {
+ format = Messages.getString("DLNAResource.3");
+ } else {
+ format = Messages.getString("DLNAResource.4");
+ }
+ }
- if (!PMS.getConfiguration().isHideEngineNames()) {
- name += " [" + getPlayer().name() + "]";
- }
+ // Handle file name
+ if (isNoName()) {
+ format = smartRemove(format, "%F", true);
+ format = smartRemove(format, "%f", true);
+ } else {
+ fileNameWithExtension = getName();
+ fileNameWithoutExtension = FileUtil.getFileNameWithoutExtension(fileNameWithExtension);
+
+ // Check if file extensions are configured to be hidden
+ if (this instanceof RealFile && PMS.getConfiguration().isHideExtensions() && !isFolder()) {
+ fileNameWithExtension = fileNameWithoutExtension;
}
+ }
+
+ // Handle engine name
+ if (PMS.getConfiguration().isHideEngineNames()) {
+ format = smartRemove(format, "%E", true);
+ format = smartRemove(format, "%e", true);
} else {
- if (isNoName()) {
- name = "[No encoding]";
- } else if (nametruncate > 0) {
- name = name.substring(0, nametruncate).trim();
+ if (getPlayer() != null) {
+ engineFullName = getPlayer().name();
+ engineShortName = getPlayer().getShortName();
+ } else {
+ if (isNoName()) {
+ engineFullName = Messages.getString("DLNAResource.1");
+ engineShortName = Messages.getString("DLNAResource.2");
+ } else {
+ format = smartRemove(format, "%E", true);
+ format = smartRemove(format, "%e", true);
+ }
}
}
+ // Handle DVD track duration
+ if (mediaRenderer != null && mediaRenderer.isShowDVDTitleDuration() && getMedia().getDvdtrack() > 0) {
+ dvdTrackDuration = getMedia().getDurationString();
+ } else {
+ format = smartRemove(format, "%d", false);
+ }
+
+ // Handle external subtitles
if (isSrtFile() && (getMediaAudio() == null && getMediaSubtitle() == null)
&& (getPlayer() == null || getPlayer().isExternalSubtitlesSupported())) {
- name += " {External Subtitles}";
+ externalSubs = Messages.getString("DLNAResource.0");
+ } else {
+ format = smartRemove(format, "%x", false);
}
+ // Handle audio
if (getMediaAudio() != null) {
- name = (getPlayer() != null ? ("[" + getPlayer().name() + "]") : "") + " {Audio: " + getMediaAudio().getAudioCodec() + "/" + getMediaAudio().getLangFullName() + ((getMediaAudio().getFlavor() != null && mediaRenderer != null && mediaRenderer.isShowAudioMetadata()) ? (" (" + getMediaAudio().getFlavor() + ")") : "") + "}";
- }
+ audioCodec = getMediaAudio().getAudioCodec();
+ audioLangFullName = getMediaAudio().getLangFullName();
+ audioLangShortName = getMediaAudio().getLang();
+ if ((getMediaAudio().getFlavor() != null && mediaRenderer != null && mediaRenderer.isShowAudioMetadata())) {
+ audioFlavor = getMediaAudio().getFlavor();
+ } else {
+ format = smartRemove(format, "%b", false);
+ }
+ } else {
+ format = smartRemove(format, "%b", false);
+ format = smartRemove(format, "%c", false);
+ format = smartRemove(format, "%A", true);
+ format = smartRemove(format, "%a", true);
+ }
+
+ // Handle subtitle
if (getMediaSubtitle() != null && getMediaSubtitle().getId() != -1) {
- name += " {Sub: " + getMediaSubtitle().getType().getDescription() + "/" + getMediaSubtitle().getLangFullName() + ((getMediaSubtitle().getFlavor() != null && mediaRenderer != null && mediaRenderer.isShowSubMetadata()) ? (" (" + getMediaSubtitle().getFlavor() + ")") : "") + "}";
+ subType = getMediaSubtitle().getType().getDescription();
+ subLangFullName = getMediaSubtitle().getLangFullName();
+ subLangShortName = getMediaSubtitle().getLang();
+
+ if (getMediaSubtitle().getFlavor() != null && mediaRenderer != null && mediaRenderer.isShowSubMetadata()) {
+ subFlavor = getMediaSubtitle().getFlavor();
+ } else {
+ format = smartRemove(format, "%u", false);
+ }
+ } else {
+ format = smartRemove(format, "%u", false);
+ format = smartRemove(format, "%t", false);
+ format = smartRemove(format, "%S", true);
+ format = smartRemove(format, "%s", true);
}
- if (isAvisynth()) {
- name = (getPlayer() != null ? ("[" + getPlayer().name()) : "") + " + AviSynth]";
+ // Finally, construct the result by replacing all tokens
+ result = format;
+ result = result.replaceAll("%A", audioLangFullName);
+ result = result.replaceAll("%a", audioLangShortName);
+ result = result.replaceAll("%b", audioFlavor);
+ result = result.replaceAll("%c", audioCodec);
+ result = result.replaceAll("%d", dvdTrackDuration);
+ result = result.replaceAll("%E", engineFullName);
+ result = result.replaceAll("%e", engineShortName);
+ result = result.replaceAll("%F", fileNameWithExtension);
+ result = result.replaceAll("%f", fileNameWithoutExtension);
+ result = result.replaceAll("%S", subLangFullName);
+ result = result.replaceAll("%s", subLangShortName);
+ result = result.replaceAll("%t", subType);
+ result = result.replaceAll("%u", subFlavor);
+ result = result.replaceAll("%x", externalSubs);
+ result = result.trim();
+
+ return result;
+ }
+
+ /**
+ * Removes the given token from the format string while trying to be smart
+ * about it. This means that optional surrounding braces, curly braces,
+ * brackets are removed as well, as are superfluous whitespace and
+ * separators. For example, removing "%E" from "%F - %d [%E] {%x}" results
+ * in "%F - %d {%x}". Removing "%d" from that will return "%F {%x}".
+ *
+ * @param format
+ * The format string to remove the token from.
+ * @param token
+ * The token to remove.
+ * @param aggressive
+ * Search aggressively for surrounding braces, i.e. also delete
+ * them if they are not directly adjacent to the token.
+ * @return The string with the token removed.
+ */
+ private String smartRemove(String format, String token, boolean aggressive) {
+ if (token == null) {
+ return format;
}
- if (getSplitRange().isEndLimitAvailable()) {
- name = ">> " + DLNAMediaInfo.getDurationString(getSplitRange().getStart());
+ String result = format;
+
+ if (aggressive) {
+ // Allow other characters between the token and the braces
+ result = result.replaceAll("\\([^\\(]*" + token + "[^\\)]*\\)", "");
+ result = result.replaceAll("\\[[^\\[]*" + token + "[^\\]]*\\]", "");
+ result = result.replaceAll("\\{[^\\{]*" + token + "[^\\}]*\\}", "");
+ result = result.replaceAll("<[^<]*" + token + "[^>]*>", "");
+ } else {
+ // Braces have to be around the token
+ result = result.replaceAll("[\\(\\[<\\{]" + token + "[\\)\\]>\\}]", "");
}
+ result = result.replaceAll("[-/,]\\s?" + token, "");
+ result = result.replaceAll(token, "");
+
+ // Collapse multiple spaces to a single space
+ result = result.replaceAll("\\s+", " ");
+ result = result.trim();
- return name;
+ return result;
}
/**Prototype for returning URLs.
@@ -1058,7 +1228,7 @@ public final String toString(RendererConfiguration mediaRenderer) {
//addXMLTagAndAttribute(sb, "dc:title", encodeXML((isFolder()||player==null)?getDisplayName():mediaRenderer.getUseSameExtension(getDisplayName())));
// Ditlew
{
- addXMLTagAndAttribute(sb, "dc:title", encodeXML((isFolder() || getPlayer() == null) ? getDisplayName() : mediaRenderer.getUseSameExtension(getDisplayName(mediaRenderer))));
+ addXMLTagAndAttribute(sb, "dc:title", encodeXML((isFolder() || getPlayer() == null) ? getDisplayName(mediaRenderer) : mediaRenderer.getUseSameExtension(getDisplayName(mediaRenderer))));
}
if (firstAudioTrack != null) {
View
5 src/main/java/net/pms/encoders/FFMpegAudio.java
@@ -101,6 +101,11 @@ public String name() {
}
@Override
+ public String getShortName() {
+ return "FFA";
+ }
+
+ @Override
public int type() {
return Format.AUDIO;
}
View
5 src/main/java/net/pms/encoders/FFMpegAviSynthVideo.java
@@ -55,6 +55,11 @@ public String name() {
}
@Override
+ public String getShortName() {
+ return "AVS/FF";
+ }
+
+ @Override
public boolean avisynth() {
return true;
}
View
6 src/main/java/net/pms/encoders/FFMpegDVRMSRemux.java
@@ -74,6 +74,12 @@ public String name() {
return "FFmpeg DVR-MS Remux";
}
+
+ @Override
+ public String getShortName() {
+ return "FFDVRMS";
+ }
+
@Override
public int type() {
return Format.VIDEO;
View
5 src/main/java/net/pms/encoders/FFMpegVideo.java
@@ -96,6 +96,11 @@ public String name() {
}
@Override
+ public String getShortName() {
+ return "FF";
+ }
+
+ @Override
public int type() {
return Format.VIDEO;
}
View
5 src/main/java/net/pms/encoders/FFMpegWebVideo.java
@@ -147,6 +147,11 @@ public String name() {
}
@Override
+ public String getShortName() {
+ return "FFWV";
+ }
+
+ @Override
// TODO remove this when it's removed from Player
public String[] args() {
return null;
View
5 src/main/java/net/pms/encoders/MEncoderAviSynth.java
@@ -141,6 +141,11 @@ public String name() {
return "AviSynth/MEncoder";
}
+ @Override
+ public String getShortName() {
+ return "AVS/MEnc";
+ }
+
/**
* {@inheritDoc}
*/
View
5 src/main/java/net/pms/encoders/MEncoderVideo.java
@@ -2560,6 +2560,11 @@ public String name() {
}
@Override
+ public String getShortName() {
+ return "MEnc";
+ }
+
+ @Override
public int type() {
return Format.VIDEO;
}
View
5 src/main/java/net/pms/encoders/MEncoderWebVideo.java
@@ -140,6 +140,11 @@ public String name() {
}
@Override
+ public String getShortName() {
+ return "MEnc-WV";
+ }
+
+ @Override
public String[] args() {
return getDefaultArgs();
}
View
5 src/main/java/net/pms/encoders/MPlayerAudio.java
@@ -154,6 +154,11 @@ public String name() {
}
@Override
+ public String getShortName() {
+ return "MP-A";
+ }
+
+ @Override
public int type() {
return Format.AUDIO;
}
View
5 src/main/java/net/pms/encoders/MPlayerWebAudio.java
@@ -65,6 +65,11 @@ public String name() {
}
@Override
+ public String getShortName() {
+ return "MP-WA";
+ }
+
+ @Override
public boolean isTimeSeekable() {
return false;
}
View
5 src/main/java/net/pms/encoders/MPlayerWebVideoDump.java
@@ -104,6 +104,11 @@ public String name() {
}
@Override
+ public String getShortName() {
+ return "MP-WV";
+ }
+
+ @Override
public int type() {
return Format.VIDEO;
}
View
8 src/main/java/net/pms/encoders/Player.java
@@ -59,6 +59,14 @@
public abstract JComponent config();
public abstract String id();
public abstract String name();
+
+ /**
+ * Returns a shortened version of the full name.
+ *
+ * @return The shortened name.
+ */
+ public abstract String getShortName();
+
public abstract int type();
// FIXME this is an implementation detail (and not a very good one).
View
5 src/main/java/net/pms/encoders/RAWThumbnailer.java
@@ -83,6 +83,11 @@ public String name() {
}
@Override
+ public String getShortName() {
+ return "DCraw";
+ }
+
+ @Override
public int purpose() {
return MISC_PLAYER;
}
View
5 src/main/java/net/pms/encoders/TSMuxerVideo.java
@@ -786,6 +786,11 @@ public String name() {
}
@Override
+ public String getShortName() {
+ return "tsMxR";
+ }
+
+ @Override
public int type() {
return Format.VIDEO;
}
View
5 src/main/java/net/pms/encoders/TsMuxerAudio.java
@@ -67,6 +67,11 @@ public String name() {
}
@Override
+ public String getShortName() {
+ return "AHF";
+ }
+
+ @Override
public int purpose() {
return AUDIO_SIMPLEFILE_PLAYER;
}
View
5 src/main/java/net/pms/encoders/VideoLanAudioStreaming.java
@@ -45,6 +45,11 @@ public String name() {
}
@Override
+ public String getShortName() {
+ return "VLC-A";
+ }
+
+ @Override
public int type() {
return Format.AUDIO;
}
View
5 src/main/java/net/pms/encoders/VideoLanVideoStreaming.java
@@ -62,6 +62,11 @@ public String name() {
}
@Override
+ public String getShortName() {
+ return "VLC-V";
+ }
+
+ @Override
public int type() {
return Format.VIDEO;
}
View
5 src/main/java/net/pms/messages.properties
@@ -4,6 +4,11 @@ DLNAMediaDatabase.2=Cleanup database...
DLNAMediaDatabase.3=Compacting database...
DLNAMediaDatabase.4=Scanning Folder:
DLNAMediaDatabase.5=Damaged cache has to be deleted but the program couldn't do it.\nStop the program and delete the folder %s manually.
+DLNAResource.0=External Subtitles
+DLNAResource.1=No Encoding
+DLNAResource.2=No Enc.
+DLNAResource.3=[%E] {Audio: %c/%A (%b)} {Sub: %t/%S (%u)}
+DLNAResource.4=%F - %d [%E] {%x} {Sub: %t/%S (%u)}
FFMpegDVRMSRemux.0=Alternative FFmpeg Path:
FFMpegDVRMSRemux.1=Settings for DVR-MS remuxing
FFMpegVideo.0=Encoder settings for AviSynth/FFmpeg engine only (Prefer AviSynth/MEncoder)

3 comments on commit c56f3de

@chocolateboy

I don't mind this if it's isolated (i.e. no contamination of engines with the getShortName method), but in its current state:

  • It's a hack (i.e. a workaround for renderer limitations), rather than a feature in its own right. As such I'd prefer to see a discussion/rationale before we commit ourselves to it. At the very least, we should know what the limits are.
  • It reinvents pms-mlx, which already implements a framework for file/folder name customization.
  • It contaminates internal (and external e.g. PMSEncoder) engines with something (getShortName) that is completely unrelated to their functionality.
@Raptor399
Owner

Shoot! This was intended as a non-breaking change, but I overlooked the fact that adding an abstract method to Player.java would break the current contract with existing players.

Thanks the notice, I will redesign that part.

@Raptor399
Owner

Addressed in fbe0226.

Please sign in to comment.
Something went wrong with that request. Please try again.