/** * 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; }
/** * 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; }
/** * 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; }
/** * Converts media timevalue to edited timevalue * * @param trak * @param mediaTv * @param movieTimescale * @return */ public static long mediaToEdited(TrakBox trak, long mediaTv, int movieTimescale) { if (trak.getEdits() == null) return mediaTv; long accum = 0; for (Edit edit : trak.getEdits()) { if (mediaTv < edit.getMediaTime()) return accum; long duration = trak.rescale(edit.getDuration(), movieTimescale); if (edit.getMediaTime() != -1 && (mediaTv >= edit.getMediaTime() && mediaTv < edit.getMediaTime() + duration)) { accum += mediaTv - edit.getMediaTime(); break; } accum += duration; } return accum; }
/** * Converts media timevalue to edited timevalue * * @param trak * @param mediaTv * @param movieTimescale * @return */ public static long mediaToEdited(TrakBox trak, long mediaTv, int movieTimescale) { if (trak.getEdits() == null) return mediaTv; long accum = 0; for (Edit edit : trak.getEdits()) { if (mediaTv < edit.getMediaTime()) return accum; long duration = trak.rescale(edit.getDuration(), movieTimescale); if (edit.getMediaTime() != -1 && (mediaTv >= edit.getMediaTime() && mediaTv < edit.getMediaTime() + duration)) { accum += mediaTv - edit.getMediaTime(); break; } accum += duration; } return accum; }
/** * Converts media timevalue to edited timevalue * * @param trak * @param mediaTv * @param movieTimescale * @return */ public static long mediaToEdited(TrakBox trak, long mediaTv, int movieTimescale) { if (trak.getEdits() == null) return mediaTv; long accum = 0; for (Edit edit : trak.getEdits()) { if (mediaTv < edit.getMediaTime()) return accum; long duration = trak.rescale(edit.getDuration(), movieTimescale); if (edit.getMediaTime() != -1 && (mediaTv >= edit.getMediaTime() && mediaTv < edit.getMediaTime() + duration)) { accum += mediaTv - edit.getMediaTime(); break; } accum += duration; } return accum; }
public MP4Packet getTimecode(MP4Packet pkt) throws IOException { long tv = QTTimeUtil.editedToMedia(box, box.rescale(pkt.getPts(), pkt.getTimescale()), movie.getTimescale()); int sample; int ttsInd = 0, ttsSubInd = 0; for (sample = 0; sample < sampleCache.length - 1; sample++) { int dur = timeToSamples[ttsInd].getSampleDuration(); if (tv < dur) break; tv -= dur; ttsSubInd++; if (ttsInd < timeToSamples.length - 1 && ttsSubInd >= timeToSamples[ttsInd].getSampleCount()) ttsInd++; } int frameNo = (int) ((((2 * tv * tse.getTimescale()) / box.getTimescale()) / tse.getFrameDuration()) + 1) / 2; return new MP4Packet(pkt, getTimecode(getTimecodeSample(sample), frameNo, tse)); }
public MP4Packet getTimecode(MP4Packet pkt) throws IOException { long tv = QTTimeUtil.editedToMedia(box, box.rescale(pkt.getPts(), pkt.getTimescale()), movie.getTimescale()); int sample; int ttsInd = 0, ttsSubInd = 0; for (sample = 0; sample < sampleCache.length - 1; sample++) { int dur = timeToSamples[ttsInd].getSampleDuration(); if (tv < dur) break; tv -= dur; ttsSubInd++; if (ttsInd < timeToSamples.length - 1 && ttsSubInd >= timeToSamples[ttsInd].getSampleCount()) ttsInd++; } int frameNo = (int) ((((2 * tv * tse.getTimescale()) / box.getTimescale()) / tse.getFrameDuration()) + 1) / 2; return MP4Packet.createMP4PacketWithTimecode(pkt, _getTimecode(getTimecodeSample(sample), frameNo, tse)); }
public MP4Packet getTimecode(MP4Packet pkt) throws IOException { long tv = QTTimeUtil.editedToMedia(box, box.rescale(pkt.getPts(), pkt.getTimescale()), movie.getTimescale()); int sample; int ttsInd = 0, ttsSubInd = 0; for (sample = 0; sample < sampleCache.length - 1; sample++) { int dur = timeToSamples[ttsInd].getSampleDuration(); if (tv < dur) break; tv -= dur; ttsSubInd++; if (ttsInd < timeToSamples.length - 1 && ttsSubInd >= timeToSamples[ttsInd].getSampleCount()) ttsInd++; } int frameNo = (int) ((((2 * tv * tse.getTimescale()) / box.getTimescale()) / tse.getFrameDuration()) + 1) / 2; return new MP4Packet(pkt, getTimecode(getTimecodeSample(sample), frameNo, tse)); }
continue; // track offset, not real edit long editS = edit.getMediaTime(); long editE = edit.getMediaTime() + track.rescale(edit.getDuration(), movie.getTimescale()); long chunkS = chunk.getStartTv(); long chunkE = chunk.getStartTv() + chunk.getDuration();