static List<CompositionTimeToSample.Entry> adjustCtts(List<CompositionTimeToSample.Entry> source, int timeScaleFactor) { if (source != null) { List<CompositionTimeToSample.Entry> entries2 = new ArrayList<CompositionTimeToSample.Entry>(source.size()); for (CompositionTimeToSample.Entry entry : source) { entries2.add(new CompositionTimeToSample.Entry(entry.getCount(), timeScaleFactor * entry.getOffset())); } return entries2; } else { return null; } }
/** * Adjusting the composition times is easy. Just scale it by the factor - that's it. There is no rounding * error summing up. * * @param source * @param timeScaleFactor * @return */ static List<CompositionTimeToSample.Entry> adjustCtts(List<CompositionTimeToSample.Entry> source, double timeScaleFactor) { if (source != null) { List<CompositionTimeToSample.Entry> entries2 = new ArrayList<CompositionTimeToSample.Entry>(source.size()); for (CompositionTimeToSample.Entry entry : source) { entries2.add(new CompositionTimeToSample.Entry(entry.getCount(), (int) Math.round(timeScaleFactor * entry.getOffset()))); } return entries2; } else { return null; } }
List<CompositionTimeToSample.Entry> adjustCtts() { List<CompositionTimeToSample.Entry> origCtts = this.source.getCompositionTimeEntries(); if (origCtts != null) { List<CompositionTimeToSample.Entry> entries2 = new ArrayList<CompositionTimeToSample.Entry>(origCtts.size()); for (CompositionTimeToSample.Entry entry : origCtts) { entries2.add(new CompositionTimeToSample.Entry(entry.getCount(), entry.getOffset() / timeScaleDivisor)); } return entries2; } else { return null; } }
entry.setSampleCompositionTimeOffset(compositionTimeQueue[compositionTimeQueueIndex].getOffset()); if (--compositionTimeEntriesLeft == 0 && (compositionTimeQueue.length - compositionTimeQueueIndex) > 1) { compositionTimeQueueIndex++;
entry.setSampleCompositionTimeOffset(compositionTimeQueue[compositionTimeQueueIndex].getOffset()); if (--compositionTimeEntriesLeft == 0 && (compositionTimeQueue.length - compositionTimeQueueIndex) > 1) { compositionTimeQueueIndex++;
static List<CompositionTimeToSample.Entry> getCompositionTimeEntries(List<CompositionTimeToSample.Entry> origSamples, long fromSample, long toSample) { if (origSamples != null && !origSamples.isEmpty()) { long current = 0; ListIterator<CompositionTimeToSample.Entry> e = origSamples.listIterator(); ArrayList<CompositionTimeToSample.Entry> nuList = new ArrayList<CompositionTimeToSample.Entry>(); // Skip while not yet reached: CompositionTimeToSample.Entry currentEntry; while ((currentEntry = e.next()).getCount() + current <= fromSample) { current += currentEntry.getCount(); } // Take just a bit from the next if (currentEntry.getCount() + current >= toSample) { nuList.add(new CompositionTimeToSample.Entry((int) (toSample - fromSample), currentEntry.getOffset())); return nuList; // done in one step } else { nuList.add(new CompositionTimeToSample.Entry((int) (currentEntry.getCount() + current - fromSample), currentEntry.getOffset())); } current += currentEntry.getCount(); while (e.hasNext() && (currentEntry = e.next()).getCount() + current < toSample) { nuList.add(currentEntry); current += currentEntry.getCount(); } nuList.add(new CompositionTimeToSample.Entry((int) (toSample - current), currentEntry.getOffset())); return nuList; } else { return null; } }
public List<CompositionTimeToSample.Entry> getCompositionTimeEntries() { if (tracks[0].getCompositionTimeEntries() != null && !tracks[0].getCompositionTimeEntries().isEmpty()) { List<int[]> lists = new LinkedList<int[]>(); for (Track track : tracks) { lists.add(CompositionTimeToSample.blowupCompositionTimes(track.getCompositionTimeEntries())); } LinkedList<CompositionTimeToSample.Entry> compositionTimeEntries = new LinkedList<CompositionTimeToSample.Entry>(); for (int[] list : lists) { for (int compositionTime : list) { if (compositionTimeEntries.isEmpty() || compositionTimeEntries.getLast().getOffset() != compositionTime) { CompositionTimeToSample.Entry e = new CompositionTimeToSample.Entry(1, compositionTime); compositionTimeEntries.add(e); } else { CompositionTimeToSample.Entry e = compositionTimeEntries.getLast(); e.setCount(e.getCount() + 1); } } } return compositionTimeEntries; } else { return null; } }
/** * Decompresses the list of entries and returns the list of composition times. * * @param entries composition time to sample entries in compressed form * @return decoding time per sample */ public static int[] blowupCompositionTimes(List<CompositionTimeToSample.Entry> entries) { long numOfSamples = 0; for (CompositionTimeToSample.Entry entry : entries) { numOfSamples += entry.getCount(); } assert numOfSamples <= Integer.MAX_VALUE; int[] decodingTime = new int[(int) numOfSamples]; int current = 0; for (CompositionTimeToSample.Entry entry : entries) { for (int i = 0; i < entry.getCount(); i++) { decodingTime[current++] = entry.getOffset(); } } return decodingTime; }
/** * Adjusting the composition times is easy. Just scale it by the factor - that's it. There is no rounding * error summing up. * * @param source * @param timeScaleFactor * @return */ static List<CompositionTimeToSample.Entry> adjustCtts(List<CompositionTimeToSample.Entry> source, double timeScaleFactor) { if (source != null) { List<CompositionTimeToSample.Entry> entries2 = new ArrayList<CompositionTimeToSample.Entry>(source.size()); for (CompositionTimeToSample.Entry entry : source) { entries2.add(new CompositionTimeToSample.Entry(entry.getCount(), (int) Math.round(timeScaleFactor * entry.getOffset()))); } return entries2; } else { return null; } }
@Override protected void getContent(ByteBuffer byteBuffer) { writeVersionAndFlags(byteBuffer); IsoTypeWriter.writeUInt32(byteBuffer, entries.size()); for (Entry entry : entries) { IsoTypeWriter.writeUInt32(byteBuffer, entry.getCount()); byteBuffer.putInt(entry.getOffset()); } }
List<CompositionTimeToSample.Entry> adjustCtts() { List<CompositionTimeToSample.Entry> origCtts = this.source.getCompositionTimeEntries(); if (origCtts != null) { List<CompositionTimeToSample.Entry> entries2 = new ArrayList<CompositionTimeToSample.Entry>(origCtts.size()); for (CompositionTimeToSample.Entry entry : origCtts) { entries2.add(new CompositionTimeToSample.Entry(entry.getCount(), entry.getOffset() / timeScaleDivisor)); } return entries2; } else { return null; } }
static List<CompositionTimeToSample.Entry> adjustCtts(List<CompositionTimeToSample.Entry> source, int timeScaleFactor) { if (source != null) { List<CompositionTimeToSample.Entry> entries2 = new ArrayList<CompositionTimeToSample.Entry>(source.size()); for (CompositionTimeToSample.Entry entry : source) { entries2.add(new CompositionTimeToSample.Entry(entry.getCount(), timeScaleFactor * entry.getOffset())); } return entries2; } else { return null; } }
compositionTimeEntries.get(compositionTimeEntries.size() - 1).getOffset() != entry.getSampleCompositionTimeOffset()) { compositionTimeEntries.add(new CompositionTimeToSample.Entry(1, l2i(entry.getSampleCompositionTimeOffset()))); } else {
streamingSample.addSampleExtension(sfse); if (compositionOffsets != null && !compositionOffsets.isEmpty()) { final long compositionOffset = compositionOffsets.get(0).getOffset(); if (compositionOffsets.get(0).getCount() == 1) { compositionOffsets.remove(0);
entry.setSampleCompositionTimeOffset(compositionTimeQueue[compositionTimeQueueIndex].getOffset()); if (--compositionTimeEntriesLeft == 0 && (compositionTimeQueue.length - compositionTimeQueueIndex) > 1) { compositionTimeQueueIndex++;
static List<CompositionTimeToSample.Entry> getCompositionTimeEntries(List<CompositionTimeToSample.Entry> origSamples, long fromSample, long toSample) { if (origSamples != null && !origSamples.isEmpty()) { long current = 0; ListIterator<CompositionTimeToSample.Entry> e = origSamples.listIterator(); ArrayList<CompositionTimeToSample.Entry> nuList = new ArrayList<CompositionTimeToSample.Entry>(); // Skip while not yet reached: CompositionTimeToSample.Entry currentEntry; while ((currentEntry = e.next()).getCount() + current <= fromSample) { current += currentEntry.getCount(); } // Take just a bit from the next if (currentEntry.getCount() + current >= toSample) { nuList.add(new CompositionTimeToSample.Entry((int) (toSample - fromSample), currentEntry.getOffset())); return nuList; // done in one step } else { nuList.add(new CompositionTimeToSample.Entry((int) (currentEntry.getCount() + current - fromSample), currentEntry.getOffset())); } current += currentEntry.getCount(); while (e.hasNext() && (currentEntry = e.next()).getCount() + current < toSample) { nuList.add(currentEntry); current += currentEntry.getCount(); } nuList.add(new CompositionTimeToSample.Entry((int) (toSample - current), currentEntry.getOffset())); return nuList; } else { return null; } }
public List<CompositionTimeToSample.Entry> getCompositionTimeEntries() { if (tracks[0].getCompositionTimeEntries() != null && !tracks[0].getCompositionTimeEntries().isEmpty()) { List<int[]> lists = new LinkedList<int[]>(); for (Track track : tracks) { lists.add(CompositionTimeToSample.blowupCompositionTimes(track.getCompositionTimeEntries())); } LinkedList<CompositionTimeToSample.Entry> compositionTimeEntries = new LinkedList<CompositionTimeToSample.Entry>(); for (int[] list : lists) { for (int compositionTime : list) { if (compositionTimeEntries.isEmpty() || compositionTimeEntries.getLast().getOffset() != compositionTime) { CompositionTimeToSample.Entry e = new CompositionTimeToSample.Entry(1, compositionTime); compositionTimeEntries.add(e); } else { CompositionTimeToSample.Entry e = compositionTimeEntries.getLast(); e.setCount(e.getCount() + 1); } } } return compositionTimeEntries; } else { return null; } }
/** * Decompresses the list of entries and returns the list of composition times. * * @param entries composition time to sample entries in compressed form * @return decoding time per sample */ public static int[] blowupCompositionTimes(List<CompositionTimeToSample.Entry> entries) { long numOfSamples = 0; for (CompositionTimeToSample.Entry entry : entries) { numOfSamples += entry.getCount(); } assert numOfSamples <= Integer.MAX_VALUE; int[] decodingTime = new int[(int) numOfSamples]; int current = 0; for (CompositionTimeToSample.Entry entry : entries) { for (int i = 0; i < entry.getCount(); i++) { decodingTime[current++] = entry.getOffset(); } } return decodingTime; }
@Override protected void getContent(ByteBuffer byteBuffer) { writeVersionAndFlags(byteBuffer); IsoTypeWriter.writeUInt32(byteBuffer, entries.size()); for (Entry entry : entries) { IsoTypeWriter.writeUInt32(byteBuffer, entry.getCount()); byteBuffer.putInt(entry.getOffset()); } }