protected ParsableBox createEdts(Track track, Movie movie) { if (track.getEdits() != null && track.getEdits().size() > 0) { EditListBox elst = new EditListBox(); elst.setVersion(1); List<EditListBox.Entry> entries = new ArrayList<EditListBox.Entry>(); for (Edit edit : track.getEdits()) { entries.add(new EditListBox.Entry(elst, Math.round(edit.getSegmentDuration() * movie.getTimescale()), edit.getMediaTime() * track.getTrackMetaData().getTimescale() / edit.getTimeScale(), edit.getMediaRate())); } elst.setEntries(entries); EditBox edts = new EditBox(); edts.addBox(elst); return edts; } else { return null; } }
protected ParsableBox createEdts(Track track, Movie movie) { if (track.getEdits() != null && track.getEdits().size() > 0) { EditListBox elst = new EditListBox(); elst.setVersion(0); // quicktime won't play file when version = 1 List<EditListBox.Entry> entries = new ArrayList<EditListBox.Entry>(); for (Edit edit : track.getEdits()) { entries.add(new EditListBox.Entry(elst, Math.round(edit.getSegmentDuration() * movie.getTimescale()), edit.getMediaTime() * track.getTrackMetaData().getTimescale() / edit.getTimeScale(), edit.getMediaRate())); } elst.setEntries(entries); EditBox edts = new EditBox(); edts.addBox(elst); return edts; } else { return null; } }
boolean acceptEdit = true; for (Edit edit : alignTo.getEdits()) { if (edit.getMediaTime() == -1 && !acceptDwell) { throw new RuntimeException("Cannot accept edit list for processing (1)"); if (edit.getMediaTime() >= 0 && !acceptEdit) { throw new RuntimeException("Cannot accept edit list for processing (2)"); if (edit.getMediaTime() == -1) { earliestTrackPresentationTime += edit.getSegmentDuration(); } else /* if edit.getMediaTime() >= 0 */ { earliestTrackPresentationTime -= (double) edit.getMediaTime() / edit.getTimeScale(); acceptEdit = false; acceptDwell = false;
public static double getEarliestTrackPresentationTime(List<Edit> edits) { double earliestTrackPresentationTime = 0; boolean acceptEdit = true; boolean acceptDwell = true; for (Edit edit : edits) { if (edit.getMediaTime() == -1 && !acceptDwell) { throw new RuntimeException("Cannot accept edit list for processing (1)"); } if (edit.getMediaTime() >= 0 && !acceptEdit) { throw new RuntimeException("Cannot accept edit list for processing (2)"); } if (edit.getMediaTime() == -1) { earliestTrackPresentationTime += edit.getSegmentDuration(); } else /* if edit.getMediaTime() >= 0 */ { earliestTrackPresentationTime -= (double) edit.getMediaTime() / edit.getTimeScale(); acceptEdit = false; acceptDwell = false; } } return earliestTrackPresentationTime; }
protected ParsableBox createEdts(Track track, Movie movie) { if (track.getEdits() != null && track.getEdits().size() > 0) { EditListBox elst = new EditListBox(); elst.setVersion(1); List<EditListBox.Entry> entries = new ArrayList<EditListBox.Entry>(); for (Edit edit : track.getEdits()) { entries.add(new EditListBox.Entry(elst, Math.round(edit.getSegmentDuration() * movie.getTimescale()), edit.getMediaTime() * track.getTrackMetaData().getTimescale() / edit.getTimeScale(), edit.getMediaRate())); } elst.setEntries(entries); EditBox edts = new EditBox(); edts.addBox(elst); return edts; } else { return null; } }
protected ParsableBox createEdts(Track track, Movie movie) { if (track.getEdits() != null && track.getEdits().size() > 0) { EditListBox elst = new EditListBox(); elst.setVersion(0); // quicktime won't play file when version = 1 List<EditListBox.Entry> entries = new ArrayList<EditListBox.Entry>(); for (Edit edit : track.getEdits()) { entries.add(new EditListBox.Entry(elst, Math.round(edit.getSegmentDuration() * movie.getTimescale()), edit.getMediaTime() * track.getTrackMetaData().getTimescale() / edit.getTimeScale(), edit.getMediaRate())); } elst.setEntries(entries); EditBox edts = new EditBox(); edts.addBox(elst); return edts; } else { return null; } }
protected Box createEdts(Track track) { if (track.getEdits() != null && track.getEdits().size() > 0) { EditListBox elst = new EditListBox(); elst.setVersion(1); List<EditListBox.Entry> entries = new ArrayList<EditListBox.Entry>(); for (Edit edit : track.getEdits()) { entries.add(new EditListBox.Entry(elst, Math.round(edit.getSegmentDuration() * track.getTrackMetaData().getTimescale()), edit.getMediaTime() * track.getTrackMetaData().getTimescale() / edit.getTimeScale(), edit.getMediaRate())); } elst.setEntries(entries); EditBox edts = new EditBox(); edts.addBox(elst); return edts; } else { return null; } }
boolean acceptEdit = true; for (Edit edit : alignTo.getEdits()) { if (edit.getMediaTime() == -1 && !acceptDwell) { throw new RuntimeException("Cannot accept edit list for processing (1)"); if (edit.getMediaTime() >= 0 && !acceptEdit) { throw new RuntimeException("Cannot accept edit list for processing (2)"); if (edit.getMediaTime() == -1) { earliestTrackPresentationTime += edit.getSegmentDuration(); } else /* if edit.getMediaTime() >= 0 */ { earliestTrackPresentationTime -= (double) edit.getMediaTime() / edit.getTimeScale(); acceptEdit = false; acceptDwell = false;
protected Box createTkhd(Track track) { TrackHeaderBox tkhd = new TrackHeaderBox(); tkhd.setVersion(1); tkhd.setFlags(7); // enabled, in movie, in previe, in poster tkhd.setAlternateGroup(track.getTrackMetaData().getGroup()); tkhd.setCreationTime(track.getTrackMetaData().getCreationTime()); // We need to take edit list box into account in trackheader duration // but as long as I don't support edit list boxes it is sufficient to // just translate media duration to movie timescale if (track.getEdits().isEmpty()) { tkhd.setDuration(track.getDuration()); } else { long dur = 0; for (Edit edit : track.getEdits()) { dur += edit.getMediaTime() != -1 ? edit.getSegmentDuration() * track.getTrackMetaData().getTimescale() : 0; } tkhd.setDuration(dur); } tkhd.setHeight(track.getTrackMetaData().getHeight()); tkhd.setWidth(track.getTrackMetaData().getWidth()); tkhd.setLayer(track.getTrackMetaData().getLayer()); tkhd.setModificationTime(getDate()); tkhd.setTrackId(track.getTrackMetaData().getTrackId()); tkhd.setVolume(track.getTrackMetaData().getVolume()); return tkhd; }