From 6888bb502fcc28cb2b99148f0363f3b6253d3f97 Mon Sep 17 00:00:00 2001 From: Jonathan Cobb Date: Sun, 27 Dec 2020 12:05:21 -0500 Subject: [PATCH] rename JFileExtension -> JStreamType, fix remove-track handling of data/other tracks --- docs/jvc_js.md | 5 ++++- src/main/java/jvc/model/JAsset.java | 4 ++-- src/main/java/jvc/model/JFormat.java | 6 ++--- .../{JFileExtension.java => JStreamType.java} | 7 +++--- src/main/java/jvc/model/info/JMediaInfo.java | 20 ++++++++--------- src/main/java/jvc/model/info/JTrackType.java | 21 +++++++++--------- src/main/java/jvc/model/js/JAssetJs.java | 5 ++++- .../operation/JMultiOperationContext.java | 6 ++--- .../operation/JMultiSourceOperation.java | 6 ++--- .../operation/JOperationContextBase.java | 4 ++-- .../operation/JSingleOperationContext.java | 6 ++--- .../operation/JSingleSourceOperation.java | 18 +++++++-------- .../jvc/operation/RemoveTrackOperation.java | 16 +++++++------- .../java/jvc/operation/exec/ConcatExec.java | 6 ++--- .../java/jvc/operation/exec/ExecBase.java | 6 ++--- .../java/jvc/operation/exec/KenBurnsExec.java | 6 ++--- .../jvc/operation/exec/MergeAudioExec.java | 6 ++--- .../java/jvc/operation/exec/OverlayExec.java | 6 ++--- .../exec/SingleOrMultiSourceExecBase.java | 18 ++++++++++----- .../java/jvc/operation/exec/SplitExec.java | 14 ++++++------ src/main/java/jvc/service/AssetManager.java | 22 +++++++++---------- 21 files changed, 111 insertions(+), 97 deletions(-) rename src/main/java/jvc/model/{JFileExtension.java => JStreamType.java} (88%) diff --git a/docs/jvc_js.md b/docs/jvc_js.md index 43b97e7..fc64a2b 100644 --- a/docs/jvc_js.md +++ b/docs/jvc_js.md @@ -68,7 +68,10 @@ Ratio of width / height (video or image). Sampling rate in Hz (audio). #### `tracks` -An array of the tracks in a video. Only includes audio and video tracks. +An array of the A/V tracks in a video. Only includes audio and video tracks. + +#### `allTracks` +An array of **all** the tracks in a video. Includes subtitles/data/other tracks. #### `audioTracks` An array of the audio tracks in a video. diff --git a/src/main/java/jvc/model/JAsset.java b/src/main/java/jvc/model/JAsset.java index 6ec0d63..2037274 100644 --- a/src/main/java/jvc/model/JAsset.java +++ b/src/main/java/jvc/model/JAsset.java @@ -181,8 +181,8 @@ public class JAsset implements JsObjectView { @JsonIgnore public String getChannelLayout() { return channelLayout(); } public boolean hasChannelLayout() { return channelLayout() != null; } - public JFileExtension audioExtension() { return hasInfo() ? getInfo().audioExtension() : null; } - @JsonIgnore public JFileExtension getAudioExtension() { return audioExtension(); } + public JStreamType audioExtension() { return hasInfo() ? getInfo().audioExtension() : null; } + @JsonIgnore public JStreamType getAudioExtension() { return audioExtension(); } public boolean hasAudioExtension() { return audioExtension() != null; } public JAsset init(AssetManager assetManager, Toolbox toolbox) { diff --git a/src/main/java/jvc/model/JFormat.java b/src/main/java/jvc/model/JFormat.java index afeae8e..6bfd138 100644 --- a/src/main/java/jvc/model/JFormat.java +++ b/src/main/java/jvc/model/JFormat.java @@ -16,15 +16,15 @@ public class JFormat { @Getter @Setter private Integer width; public boolean hasWidth () { return width != null; } - @Getter @Setter private JFileExtension fileExtension; - public boolean hasFileExtension() { return fileExtension != null; } + @Getter @Setter private JStreamType streamType; + public boolean hasFileExtension() { return streamType != null; } public JFormat(JFormat format) { copy(this, format); } public void merge(JFormat other) { if (!hasHeight()) setHeight(other.getHeight()); if (!hasWidth()) setWidth(other.getWidth()); - if (!hasFileExtension()) setFileExtension(other.getFileExtension()); + if (!hasFileExtension()) setStreamType(other.getStreamType()); } } diff --git a/src/main/java/jvc/model/JFileExtension.java b/src/main/java/jvc/model/JStreamType.java similarity index 88% rename from src/main/java/jvc/model/JFileExtension.java rename to src/main/java/jvc/model/JStreamType.java index 81033fb..3a39719 100644 --- a/src/main/java/jvc/model/JFileExtension.java +++ b/src/main/java/jvc/model/JStreamType.java @@ -10,10 +10,11 @@ import static jvc.model.info.JTrackType.*; import static org.cobbzilla.util.daemon.ZillaRuntime.die; @AllArgsConstructor @Slf4j -public enum JFileExtension { +public enum JStreamType { avc (".mp4", video), mp4 (".mp4", video), + hevc (".mp4", video), mkv (".mkv", video), mp3 (".mp3", audio), mpeg_audio (".mp3", audio), @@ -26,7 +27,7 @@ public enum JFileExtension { dat (".dat", data), txt (".txt", data); - @JsonCreator public static JFileExtension fromString(String v) { return valueOf(v.toLowerCase()); } + @JsonCreator public static JStreamType fromString(String v) { return valueOf(v.toLowerCase()); } public static boolean isValid(String v) { try { fromString(v); return true; } catch (Exception ignored) {} @@ -39,7 +40,7 @@ public enum JFileExtension { private final JTrackType mediaType; public JTrackType mediaType() { return mediaType; } - public static JFileExtension fromTrack(JTrack track) { + public static JStreamType fromTrack(JTrack track) { if (track.hasFileExtension()) { try { return fromString(track.getFileExtension()); diff --git a/src/main/java/jvc/model/info/JMediaInfo.java b/src/main/java/jvc/model/info/JMediaInfo.java index c53c786..5065427 100644 --- a/src/main/java/jvc/model/info/JMediaInfo.java +++ b/src/main/java/jvc/model/info/JMediaInfo.java @@ -1,6 +1,6 @@ package jvc.model.info; -import jvc.model.JFileExtension; +import jvc.model.JStreamType; import jvc.model.JFormat; import lombok.Getter; import lombok.NoArgsConstructor; @@ -65,19 +65,19 @@ public class JMediaInfo { final JFormat format = new JFormat(); if (video != null) { - format.setFileExtension(video.hasFormat() - ? JFileExtension.fromTrack(video) - : JFileExtension.fromString(general.getFileExtension())) + format.setStreamType(video.hasFormat() + ? JStreamType.fromTrack(video) + : JStreamType.fromString(general.getFileExtension())) .setHeight(video.height()) .setWidth(video.width()); } else if (audio != null) { - format.setFileExtension(audio.hasFormat() - ? JFileExtension.fromTrack(audio) - : JFileExtension.fromString(general.getFileExtension())); + format.setStreamType(audio.hasFormat() + ? JStreamType.fromTrack(audio) + : JStreamType.fromString(general.getFileExtension())); } else if (image != null) { - format.setFileExtension(JFileExtension.fromString(general.getFileExtension())) + format.setStreamType(JStreamType.fromString(general.getFileExtension())) .setHeight(image.height()) .setWidth(image.width()); @@ -120,9 +120,9 @@ public class JMediaInfo { return null; } - public JFileExtension audioExtension() { + public JStreamType audioExtension() { final JTrack audio = firstTrack(JTrackType.audio); - return audio == null ? null : JFileExtension.fromTrack(audio); + return audio == null ? null : JStreamType.fromTrack(audio); } public BigDecimal width() { diff --git a/src/main/java/jvc/model/info/JTrackType.java b/src/main/java/jvc/model/info/JTrackType.java index a016063..236a7eb 100644 --- a/src/main/java/jvc/model/info/JTrackType.java +++ b/src/main/java/jvc/model/info/JTrackType.java @@ -1,24 +1,25 @@ package jvc.model.info; import com.fasterxml.jackson.annotation.JsonCreator; -import jvc.model.JFileExtension; +import jvc.model.JStreamType; import lombok.AllArgsConstructor; @AllArgsConstructor public enum JTrackType { - general (null, null), - audio (JFileExtension.flac, "a"), - video (JFileExtension.mp4, "v"), - image (JFileExtension.png, null), - subtitle(JFileExtension.png, "s"), - data (JFileExtension.png, "d"), - other (null, null); + general (null, null), + audio (JStreamType.flac, "a"), + video (JStreamType.mp4, "v"), + image (JStreamType.png, null), + subtitle (JStreamType.sub, "s"), + other (JStreamType.dat, "d"), + data (JStreamType.dat, "d"), + attachment(null, "t"); @JsonCreator public static JTrackType fromString(String val) { return valueOf(val.toLowerCase()); } - private final JFileExtension ext; - public JFileExtension ext() { return ext; } + private final JStreamType streamType; + public JStreamType streamType() { return streamType; } private final String ffmpegType; public String ffmpegType() { return ffmpegType; } diff --git a/src/main/java/jvc/model/js/JAssetJs.java b/src/main/java/jvc/model/js/JAssetJs.java index 4a1951e..6ffdaa9 100644 --- a/src/main/java/jvc/model/js/JAssetJs.java +++ b/src/main/java/jvc/model/js/JAssetJs.java @@ -18,6 +18,7 @@ public class JAssetJs { public Integer height; public Double aspectRatio; public Integer samplingRate; + public JTrackJs[] allTracks = EMPTY_TRACKS; public JTrackJs[] tracks = EMPTY_TRACKS; public JTrackJs[] videoTracks = EMPTY_TRACKS; public JTrackJs[] audioTracks = EMPTY_TRACKS; @@ -40,9 +41,11 @@ public class JAssetJs { final JMediaInfo info = asset.getInfo(); for (JTrack track : info.getMedia().getTrack()) { + final JTrackJs trackJs = new JTrackJs(track.type().name()); + allTracks = ArrayUtil.append(allTracks, trackJs); + if (!track.audioOrVideo()) continue; - final JTrackJs trackJs = new JTrackJs(track.type().name()); tracks = ArrayUtil.append(tracks, trackJs); switch (track.type()) { case audio: diff --git a/src/main/java/jvc/model/operation/JMultiOperationContext.java b/src/main/java/jvc/model/operation/JMultiOperationContext.java index 798699f..f7cfda7 100644 --- a/src/main/java/jvc/model/operation/JMultiOperationContext.java +++ b/src/main/java/jvc/model/operation/JMultiOperationContext.java @@ -1,7 +1,7 @@ package jvc.model.operation; import jvc.model.JAsset; -import jvc.model.JFileExtension; +import jvc.model.JStreamType; import jvc.service.AssetManager; import jvc.service.Toolbox; import lombok.NoArgsConstructor; @@ -15,10 +15,10 @@ public class JMultiOperationContext extends JOperationContextBase { public JMultiOperationContext(List sources, JAsset output, - JFileExtension formatType, + JStreamType streamType, AssetManager assetManager, Toolbox toolbox) { - super(output, formatType, assetManager, toolbox); + super(output, streamType, assetManager, toolbox); this.sources = sources; } } diff --git a/src/main/java/jvc/model/operation/JMultiSourceOperation.java b/src/main/java/jvc/model/operation/JMultiSourceOperation.java index 3e43cee..71e9b03 100644 --- a/src/main/java/jvc/model/operation/JMultiSourceOperation.java +++ b/src/main/java/jvc/model/operation/JMultiSourceOperation.java @@ -1,7 +1,7 @@ package jvc.model.operation; import jvc.model.JAsset; -import jvc.model.JFileExtension; +import jvc.model.JStreamType; import jvc.service.AssetManager; import jvc.service.Toolbox; import lombok.Getter; @@ -30,8 +30,8 @@ public abstract class JMultiSourceOperation extends JOperation { output.mergeFormat(sources.get(0).getFormat()); // set the path, check if output asset already exists - final JFileExtension formatType = output.getFormat().getFileExtension(); + final JStreamType streamType = output.getFormat().getStreamType(); - return new JMultiOperationContext(sources, output, formatType, assetManager, toolbox); + return new JMultiOperationContext(sources, output, streamType, assetManager, toolbox); } } diff --git a/src/main/java/jvc/model/operation/JOperationContextBase.java b/src/main/java/jvc/model/operation/JOperationContextBase.java index 01a243b..9615c09 100644 --- a/src/main/java/jvc/model/operation/JOperationContextBase.java +++ b/src/main/java/jvc/model/operation/JOperationContextBase.java @@ -1,7 +1,7 @@ package jvc.model.operation; import jvc.model.JAsset; -import jvc.model.JFileExtension; +import jvc.model.JStreamType; import jvc.service.AssetManager; import jvc.service.Toolbox; import lombok.AllArgsConstructor; @@ -11,7 +11,7 @@ import lombok.NoArgsConstructor; public class JOperationContextBase { public JAsset output; - public JFileExtension formatType; + public JStreamType streamType; public AssetManager assetManager; public Toolbox toolbox; diff --git a/src/main/java/jvc/model/operation/JSingleOperationContext.java b/src/main/java/jvc/model/operation/JSingleOperationContext.java index f2ccf4c..986944e 100644 --- a/src/main/java/jvc/model/operation/JSingleOperationContext.java +++ b/src/main/java/jvc/model/operation/JSingleOperationContext.java @@ -1,7 +1,7 @@ package jvc.model.operation; import jvc.model.JAsset; -import jvc.model.JFileExtension; +import jvc.model.JStreamType; import jvc.service.AssetManager; import jvc.service.Toolbox; import lombok.AllArgsConstructor; @@ -14,10 +14,10 @@ public class JSingleOperationContext extends JOperationContextBase { public JSingleOperationContext(JAsset source, JAsset output, - JFileExtension formatType, + JStreamType streamType, AssetManager assetManager, Toolbox toolbox) { - super(output, formatType, assetManager, toolbox); + super(output, streamType, assetManager, toolbox); this.source = source; } diff --git a/src/main/java/jvc/model/operation/JSingleSourceOperation.java b/src/main/java/jvc/model/operation/JSingleSourceOperation.java index 227f6d7..efffbb4 100644 --- a/src/main/java/jvc/model/operation/JSingleSourceOperation.java +++ b/src/main/java/jvc/model/operation/JSingleSourceOperation.java @@ -1,7 +1,7 @@ package jvc.model.operation; import jvc.model.JAsset; -import jvc.model.JFileExtension; +import jvc.model.JStreamType; import jvc.model.JFormat; import jvc.model.info.JTrackType; import jvc.service.AssetManager; @@ -27,20 +27,20 @@ public class JSingleSourceOperation extends JOperation { // ensure output is in the correct format final JFormat format = output.getFormat(); final JTrackType type = outputMediaType(); - if (!format.hasFileExtension() || format.getFileExtension().mediaType() != type) { - final JFileExtension ext = type.ext(); - if (ext == null) { + if (!format.hasFileExtension() || format.getStreamType().mediaType() != type) { + final JStreamType streamType = type.streamType(); + if (streamType == null) { return die("getSingleInputContext: no file extension found for output media type: " + type); } - format.setFileExtension(ext); + format.setStreamType(streamType); } - final JFileExtension formatType = getFileExtension(source, output); + final JStreamType streamType = getStreamType(source, output); - return new JSingleOperationContext(source, output, formatType, assetManager, toolbox); + return new JSingleOperationContext(source, output, streamType, assetManager, toolbox); } - protected JFileExtension getFileExtension(JAsset source, JAsset output) { - return output.getFormat().getFileExtension(); + protected JStreamType getStreamType(JAsset source, JAsset output) { + return output.getFormat().getStreamType(); } } diff --git a/src/main/java/jvc/operation/RemoveTrackOperation.java b/src/main/java/jvc/operation/RemoveTrackOperation.java index c8ceb63..6b5d453 100644 --- a/src/main/java/jvc/operation/RemoveTrackOperation.java +++ b/src/main/java/jvc/operation/RemoveTrackOperation.java @@ -3,7 +3,7 @@ package jvc.operation; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.databind.JsonNode; import jvc.model.JAsset; -import jvc.model.JFileExtension; +import jvc.model.JStreamType; import jvc.model.JFormat; import jvc.model.JTrackId; import jvc.model.info.JMediaInfo; @@ -28,25 +28,25 @@ public class RemoveTrackOperation extends JSingleSourceOperation { return trackId; } - @Override protected JFileExtension getFileExtension(JAsset source, JAsset output) { + @Override protected JStreamType getStreamType(JAsset source, JAsset output) { final JTrackId trackId = getTrackId(); final JTrackType trackType = trackId.getType(); // if we are removing all video tracks, the output will be an audio asset final int trackCount = source.numTracks(trackType); - if (trackCount == 0) return die("getFileExtension: no tracks of type "+ trackType +" found in source: "+source); + if (trackCount == 0) return die("getStreamType: no tracks of type "+ trackType +" found in source: "+source); if (wouldRemoveAllVideoTracks(trackId, trackCount)) { // find the format of the first audio track final JTrack audio = source.firstTrack(JTrackType.audio); - if (audio == null) return die("getFileExtension: no audio tracks found!"); - final JFileExtension ext = JFileExtension.fromTrack(audio); - source.setInfo(new JMediaInfo(source.getInfo(), new JFormat().setFileExtension(ext))); - return ext; + if (audio == null) return die("getStreamType: no audio tracks found!"); + final JStreamType streamType = JStreamType.fromTrack(audio); + source.setInfo(new JMediaInfo(source.getInfo(), new JFormat().setStreamType(streamType))); + return streamType; } - return super.getFileExtension(source, output); + return super.getStreamType(source, output); } private boolean wouldRemoveAllVideoTracks(JTrackId trackId, int trackCount) { diff --git a/src/main/java/jvc/operation/exec/ConcatExec.java b/src/main/java/jvc/operation/exec/ConcatExec.java index 6b6bdfd..d3ec3a9 100644 --- a/src/main/java/jvc/operation/exec/ConcatExec.java +++ b/src/main/java/jvc/operation/exec/ConcatExec.java @@ -1,7 +1,7 @@ package jvc.operation.exec; import jvc.model.JAsset; -import jvc.model.JFileExtension; +import jvc.model.JStreamType; import jvc.model.operation.JMultiOperationContext; import jvc.operation.ConcatOperation; import jvc.service.AssetManager; @@ -36,9 +36,9 @@ public class ConcatExec extends ExecBase { final JMultiOperationContext opCtx = op.getMultiInputContext(assetManager, toolbox); final List sources = opCtx.sources; final JAsset output = opCtx.output; - final JFileExtension formatType = opCtx.formatType; + final JStreamType streamType = opCtx.streamType; - final File defaultOutfile = assetManager.assetPath(op, sources, formatType); + final File defaultOutfile = assetManager.assetPath(op, sources, streamType); final File path = resolveOutputPath(output, defaultOutfile); if (path == null) return null; output.setPath(abs(path)); diff --git a/src/main/java/jvc/operation/exec/ExecBase.java b/src/main/java/jvc/operation/exec/ExecBase.java index 46e5acf..31a0499 100644 --- a/src/main/java/jvc/operation/exec/ExecBase.java +++ b/src/main/java/jvc/operation/exec/ExecBase.java @@ -1,7 +1,7 @@ package jvc.operation.exec; import jvc.model.JAsset; -import jvc.model.JFileExtension; +import jvc.model.JStreamType; import jvc.model.operation.JOperation; import jvc.service.AssetManager; import jvc.service.Toolbox; @@ -79,8 +79,8 @@ public abstract class ExecBase { if (!asset.hasChannelLayout()) return die("createSilence: no channel layout could be determined: "+asset); ctx.put("channelLayout", asset.channelLayout()); - final JFileExtension ext = asset.audioExtension(); - final File silenceFile = assetManager.assetPath(op, asset, ext, new Object[]{duration}); + final JStreamType streamType = asset.audioExtension(); + final File silenceFile = assetManager.assetPath(op, asset, streamType, new Object[]{duration}); final JAsset silence = new JAsset().setPath(abs(silenceFile)); ctx.put("silence", silence); diff --git a/src/main/java/jvc/operation/exec/KenBurnsExec.java b/src/main/java/jvc/operation/exec/KenBurnsExec.java index 922d89b..bd9fa01 100644 --- a/src/main/java/jvc/operation/exec/KenBurnsExec.java +++ b/src/main/java/jvc/operation/exec/KenBurnsExec.java @@ -2,7 +2,7 @@ package jvc.operation.exec; import jvc.model.JAsset; -import jvc.model.JFileExtension; +import jvc.model.JStreamType; import jvc.model.operation.JSingleOperationContext; import jvc.operation.KenBurnsOperation; import jvc.service.AssetManager; @@ -49,9 +49,9 @@ public class KenBurnsExec extends ExecBase { final JSingleOperationContext opCtx = op.getSingleInputContext(assetManager, toolbox); final JAsset source = opCtx.source; final JAsset output = opCtx.output; - final JFileExtension formatType = opCtx.formatType; + final JStreamType streamType = opCtx.streamType; - final File defaultOutfile = assetManager.assetPath(op, source, formatType); + final File defaultOutfile = assetManager.assetPath(op, source, streamType); final File path = resolveOutputPath(output, defaultOutfile); if (path == null) return null; output.setPath(abs(path)); diff --git a/src/main/java/jvc/operation/exec/MergeAudioExec.java b/src/main/java/jvc/operation/exec/MergeAudioExec.java index 4436ace..11708fe 100644 --- a/src/main/java/jvc/operation/exec/MergeAudioExec.java +++ b/src/main/java/jvc/operation/exec/MergeAudioExec.java @@ -1,7 +1,7 @@ package jvc.operation.exec; import jvc.model.JAsset; -import jvc.model.JFileExtension; +import jvc.model.JStreamType; import jvc.model.operation.JSingleOperationContext; import jvc.operation.MergeAudioOperation; import jvc.service.AssetManager; @@ -57,8 +57,8 @@ public class MergeAudioExec extends SingleOrMultiSourceExecBase ctx = new HashMap<>(); ctx.put("ffmpeg", toolbox.getFfmpeg()); - final JFileExtension ext = audio.getFormat().getFileExtension(); - final JAsset padded = new JAsset().setPath(abs(assetManager.assetPath(op, audio, ext))); + final JStreamType streamType = audio.getFormat().getStreamType(); + final JAsset padded = new JAsset().setPath(abs(assetManager.assetPath(op, audio, streamType))); final String paddedName = basename(padded.getPath()); ctx.put("padded", paddedName); diff --git a/src/main/java/jvc/operation/exec/OverlayExec.java b/src/main/java/jvc/operation/exec/OverlayExec.java index 71b828e..a7d68fe 100644 --- a/src/main/java/jvc/operation/exec/OverlayExec.java +++ b/src/main/java/jvc/operation/exec/OverlayExec.java @@ -1,7 +1,7 @@ package jvc.operation.exec; import jvc.model.JAsset; -import jvc.model.JFileExtension; +import jvc.model.JStreamType; import jvc.model.operation.JSingleOperationContext; import jvc.operation.OverlayOperation; import jvc.service.AssetManager; @@ -29,12 +29,12 @@ public class OverlayExec extends ExecBase { final JSingleOperationContext opCtx = op.getSingleInputContext(assetManager, toolbox); final JAsset source = opCtx.source; final JAsset output = opCtx.output; - final JFileExtension formatType = opCtx.formatType; + final JStreamType streamType = opCtx.streamType; final OverlayOperation.OverlayConfig overlay = op.getOverlay(); final JAsset overlaySource = assetManager.resolve(overlay.getSource()); - final File defaultOutfile = assetManager.assetPath(op, source, formatType); + final File defaultOutfile = assetManager.assetPath(op, source, streamType); final File path = resolveOutputPath(output, defaultOutfile); if (path == null) return null; output.setPath(abs(path)); diff --git a/src/main/java/jvc/operation/exec/SingleOrMultiSourceExecBase.java b/src/main/java/jvc/operation/exec/SingleOrMultiSourceExecBase.java index d64da9a..4a70b4e 100644 --- a/src/main/java/jvc/operation/exec/SingleOrMultiSourceExecBase.java +++ b/src/main/java/jvc/operation/exec/SingleOrMultiSourceExecBase.java @@ -1,7 +1,7 @@ package jvc.operation.exec; import jvc.model.JAsset; -import jvc.model.JFileExtension; +import jvc.model.JStreamType; import jvc.model.operation.JSingleOperationContext; import jvc.model.operation.JSingleSourceOperation; import jvc.service.AssetManager; @@ -21,15 +21,21 @@ public abstract class SingleOrMultiSourceExecBase ctx = initialContext(toolbox, source); addCommandContext(op, opCtx, ctx); - return operate(op, toolbox, assetManager, source, output, formatType, ctx); + return operate(op, toolbox, assetManager, source, output, streamType, ctx); } protected void addCommandContext(OP op, JSingleOperationContext opCtx, Map ctx) {} - protected Map operate(OP op, Toolbox toolbox, AssetManager assetManager, JAsset source, JAsset output, JFileExtension formatType, Map ctx) { + protected Map operate(OP op, + Toolbox toolbox, + AssetManager assetManager, + JAsset source, + JAsset output, + JStreamType streamType, + Map ctx) { if (source.hasList()) { if (output.hasDest()) { if (!output.destIsDirectory()) die("operate: dest is not a directory: "+output.getDest()); @@ -37,7 +43,7 @@ public abstract class SingleOrMultiSourceExecBase { final JSingleOperationContext opCtx = op.getSingleInputContext(assetManager, toolbox); final JAsset source = opCtx.source; final JAsset output = opCtx.output; - final JFileExtension formatType = opCtx.formatType; + final JStreamType streamType = opCtx.streamType; final JsEngine js = toolbox.getJs(); final Map ctx = initialContext(toolbox, source); @@ -43,16 +43,16 @@ public class SplitExec extends ExecBase { final File outfile; if (output.hasDest()) { if (!output.destExists()) { - outfile = sliceFile(output, formatType, i, incr); + outfile = sliceFile(output, streamType, i, incr); } else { if (output.destIsDirectory()) { - outfile = sliceFile(output, formatType, i, incr); + outfile = sliceFile(output, streamType, i, incr); } else { return die("dest exists and is not a directory: "+output.getDest()); } } } else { - outfile = assetManager.assetPath(op, source, formatType, new Object[]{i, incr}); + outfile = assetManager.assetPath(op, source, streamType, new Object[]{i, incr}); } final JAsset slice = new JAsset(output, outfile); @@ -81,8 +81,8 @@ public class SplitExec extends ExecBase { return ctx; } - private File sliceFile(JAsset output, JFileExtension formatType, BigDecimal i, BigDecimal incr) { - return new File(output.destDirectory(), output.getName() + "_" + i + "_" + incr + formatType.ext()); + private File sliceFile(JAsset output, JStreamType streamType, BigDecimal i, BigDecimal incr) { + return new File(output.destDirectory(), output.getName() + "_" + i + "_" + incr + streamType.ext()); } } diff --git a/src/main/java/jvc/service/AssetManager.java b/src/main/java/jvc/service/AssetManager.java index 9f94abb..92fdffd 100644 --- a/src/main/java/jvc/service/AssetManager.java +++ b/src/main/java/jvc/service/AssetManager.java @@ -1,7 +1,7 @@ package jvc.service; import jvc.model.JAsset; -import jvc.model.JFileExtension; +import jvc.model.JStreamType; import jvc.model.operation.JOperation; import lombok.Getter; import org.cobbzilla.util.handlebars.HandlebarsUtil; @@ -34,27 +34,27 @@ public class AssetManager { public File sourcePath(String name) { return new File(scratchDir, OUTFILE_PREFIX + "source." + name); } - public File assetPath(JOperation op, JAsset source, JFileExtension formatType) { - return assetPath(op, source, formatType, null); + public File assetPath(JOperation op, JAsset source, JStreamType streamType) { + return assetPath(op, source, streamType, null); } - public File assetPath(JOperation op, JAsset source, JFileExtension formatType, Object[] args) { - return assetPath(op, new JAsset[]{source}, formatType, args); + public File assetPath(JOperation op, JAsset source, JStreamType streamType, Object[] args) { + return assetPath(op, new JAsset[]{source}, streamType, args); } - public File assetPath(JOperation op, JAsset[] sources, JFileExtension formatType) { - return assetPath(op, sources, formatType, null); + public File assetPath(JOperation op, JAsset[] sources, JStreamType streamType) { + return assetPath(op, sources, streamType, null); } - public File assetPath(JOperation op, List sources, JFileExtension formatType) { - return assetPath(op, sources.toArray(JAsset[]::new), formatType, null); + public File assetPath(JOperation op, List sources, JStreamType streamType) { + return assetPath(op, sources.toArray(JAsset[]::new), streamType, null); } - public File assetPath(JOperation op, JAsset[] sources, JFileExtension formatType, Object[] args) { + public File assetPath(JOperation op, JAsset[] sources, JStreamType streamType, Object[] args) { return new File(scratchDir, OUTFILE_PREFIX + op.hash(sources, args) + (!empty(args) ? "_" + args[0] + (args.length > 1 ? "_" + args[1] : "") : "") - + formatType.ext()); + + streamType.ext()); } public Map getAssets () {