public static void shift(MovieBox movie, TrakBox track, long tvMv) { track.getEdits().add(0, new Edit(tvMv, -1, 1.0f)); }
public static void spread(MovieBox movie, TrakBox track, long tvMv, long durationMv) { Pair<List<Edit>> split = split(movie, track, tvMv); track.getEdits().add(split.getA().size(), new Edit(durationMv, -1, 1.0f)); }
/** * Converts edited timevalue to media timevalue * * @param trak * @param mediaTv * @param movieTimescale * @return */ public static long editedToMedia(TrakBox trak, long editedTv, int movieTimescale) { if (trak.getEdits() == null) return editedTv; long accum = 0; for (Edit edit : trak.getEdits()) { long duration = trak.rescale(edit.getDuration(), movieTimescale); if (accum + duration > editedTv) { return edit.getMediaTime() + editedTv - accum; } accum += duration; } return accum; }
public static void appendTo(MovieBox movie, TrakBox dest, TrakBox src) { appendToInternal(movie, dest, src); appendEdits(dest, src, dest.getEdits().size()); updateDuration(dest, src); }
/** * Calculates track duration considering edits * * @param track * @return */ public static long getEditedDuration(TrakBox track) { List<Edit> edits = track.getEdits(); if (edits == null) return track.getDuration(); long duration = 0; for (Edit edit : edits) { duration += edit.getDuration(); } return duration; }
/** * Calculates track duration considering edits * * @param track * @return */ public static long getEditedDuration(TrakBox track) { List<Edit> edits = track.getEdits(); if (edits == null) return track.getDuration(); long duration = 0; for (Edit edit : edits) { duration += edit.getDuration(); } return duration; } }
/** * Calculates track duration considering edits * * @param track * @return */ public static long getEditedDuration(TrakBox track) { List<Edit> edits = track.getEdits(); if (edits == null) return track.getDuration(); long duration = 0; for (Edit edit : edits) { duration += edit.getDuration(); } return duration; }
/** * Calculates track duration considering edits * * @param track * @return */ public static long getEditedDuration(TrakBox track) { List<Edit> edits = track.getEdits(); if (edits == null) return track.getDuration(); long duration = 0; for (Edit edit : edits) { duration += edit.getDuration(); } return duration; }
public static void forceEditList(MovieBox movie, TrakBox trakBox) { List<Edit> edits = trakBox.getEdits(); if (edits == null || edits.size() == 0) { MovieHeaderBox mvhd = NodeBox.findFirst(movie, MovieHeaderBox.class, "mvhd"); edits = new ArrayList<Edit>(); trakBox.setEdits(edits); edits.add(new Edit((int) mvhd.getDuration(), 0, 1.0f)); trakBox.setEdits(edits); } }
/** * Splits track on the timevalue specified * * @param movie * @param track * @param tvMv * @return */ public static Pair<List<Edit>> split(MovieBox movie, TrakBox track, long tvMv) { return splitEdits(track.getEdits(), new Rational(track.getTimescale(), movie.getTimescale()), tvMv); }
public TrakBox importTrack(MovieBox movie, TrakBox track) { TrakBox newTrack = (TrakBox) MP4Util.cloneBox(track, 1024 * 1024); List<Edit> edits = newTrack.getEdits(); ArrayList<Edit> result = new ArrayList<Edit>(); if (edits != null) { for (Edit edit : edits) { result.add(new Edit(rescale(edit.getDuration(), movie.getTimescale()), edit.getMediaTime(), edit .getRate())); } } newTrack.setEdits(result); return newTrack; }
public TrakBox importTrack(MovieBox movie, TrakBox track) { TrakBox newTrack = (TrakBox) NodeBox.cloneBox(track, 1024 * 1024, factory); List<Edit> edits = newTrack.getEdits(); ArrayList<Edit> result = new ArrayList<Edit>(); if (edits != null) { for (Edit edit : edits) { result.add(new Edit(rescale(edit.getDuration(), movie.getTimescale()), edit.getMediaTime(), edit .getRate())); } } newTrack.setEdits(result); return newTrack; }
public TrakBox importTrack(MovieBox movie, TrakBox track) { TrakBox newTrack = (TrakBox) MP4Util.cloneBox(track, 1024 * 1024); List<Edit> edits = newTrack.getEdits(); ArrayList<Edit> result = new ArrayList<Edit>(); if (edits != null) { for (Edit edit : edits) { result.add(new Edit(rescale(edit.getDuration(), movie.getTimescale()), edit.getMediaTime(), edit .getRate())); } } newTrack.setEdits(result); return newTrack; }
public void fixTimescale(int newTs) { int oldTs = getTimescale(); setTimescale(newTs); for (TrakBox trakBox : getTracks()) { trakBox.setDuration(rescale(trakBox.getDuration(), oldTs)); List<Edit> edits = trakBox.getEdits(); if (edits == null) continue; ListIterator<Edit> lit = edits.listIterator(); while (lit.hasNext()) { Edit edit = lit.next(); lit.set(new Edit(rescale(edit.getDuration(), oldTs), edit.getMediaTime(), edit.getRate())); } } setDuration(rescale(getDuration(), oldTs)); }
public void fixTimescale(int newTs) { int oldTs = getTimescale(); setTimescale(newTs); for (TrakBox trakBox : getTracks()) { trakBox.setDuration(rescale(trakBox.getDuration(), oldTs)); List<Edit> edits = trakBox.getEdits(); if (edits == null) continue; ListIterator<Edit> lit = edits.listIterator(); while (lit.hasNext()) { Edit edit = lit.next(); lit.set(new Edit(rescale(edit.getDuration(), oldTs), edit.getMediaTime(), edit.getRate())); } } setDuration(rescale(getDuration(), oldTs)); }
public void fixTimescale(int newTs) { int oldTs = getTimescale(); setTimescale(newTs); TrakBox[] tracks = getTracks(); for (int i = 0; i < tracks.length; i++) { TrakBox trakBox = tracks[i]; trakBox.setDuration(rescale(trakBox.getDuration(), oldTs)); List<Edit> edits = trakBox.getEdits(); if (edits == null) continue; ListIterator<Edit> lit = edits.listIterator(); while (lit.hasNext()) { Edit edit = lit.next(); lit.set(new Edit(rescale(edit.getDuration(), oldTs), edit.getMediaTime(), edit.getRate())); } } setDuration(rescale(getDuration(), oldTs)); }
public void fixMediaTimescale(int ts) { MediaHeaderBox mdhd = Box.findFirst(this, MediaHeaderBox.class, "mdia", "mdhd"); int oldTs = mdhd.getTimescale(); mdhd.setTimescale(ts); mdhd.setDuration((ts * mdhd.getDuration()) / oldTs); List<Edit> edits = getEdits(); if (edits != null) { for (Edit edit : edits) { edit.setMediaTime((ts * edit.getMediaTime()) / oldTs); } } TimeToSampleBox tts = Box.findFirst(this, TimeToSampleBox.class, "mdia", "minf", "stbl", "stts"); TimeToSampleEntry[] entries = tts.getEntries(); for (TimeToSampleEntry tte : entries) { tte.setSampleDuration((ts * tte.getSampleDuration()) / oldTs); } }
public void fixMediaTimescale(int ts) { MediaHeaderBox mdhd = Box.findFirst(this, MediaHeaderBox.class, "mdia", "mdhd"); int oldTs = mdhd.getTimescale(); mdhd.setTimescale(ts); mdhd.setDuration((ts * mdhd.getDuration()) / oldTs); List<Edit> edits = getEdits(); if (edits != null) { for (Edit edit : edits) { edit.setMediaTime((ts * edit.getMediaTime()) / oldTs); } } TimeToSampleBox tts = Box.findFirst(this, TimeToSampleBox.class, "mdia", "minf", "stbl", "stts"); TimeToSampleEntry[] entries = tts.getEntries(); for (TimeToSampleEntry tte : entries) { tte.setSampleDuration((ts * tte.getSampleDuration()) / oldTs); } }
public void fixMediaTimescale(int ts) { MediaHeaderBox mdhd = NodeBox.findFirstPath(this, MediaHeaderBox.class, Box.path("mdia.mdhd")); int oldTs = mdhd.getTimescale(); mdhd.setTimescale(ts); mdhd.setDuration((ts * mdhd.getDuration()) / oldTs); List<Edit> edits = getEdits(); if (edits != null) { for (Edit edit : edits) { edit.setMediaTime((ts * edit.getMediaTime()) / oldTs); } } TimeToSampleBox tts = NodeBox.findFirstPath(this, TimeToSampleBox.class, Box.path("mdia.minf.stbl.stts")); TimeToSampleEntry[] entries = tts.getEntries(); for (int i = 0; i < entries.length; i++) { TimeToSampleEntry tte = entries[i]; tte.setSampleDuration((ts * tte.getSampleDuration()) / oldTs); } }