private List<Tuple._2<Atom, ByteBuffer>> doTheFix(SeekableByteChannel fi, MP4Edit edit) throws IOException { Atom moovAtom = getMoov(fi); Assert.assertNotNull(moovAtom); ByteBuffer moovBuffer = fetchBox(fi, moovAtom); MovieBox moovBox = (MovieBox) parseBox(moovBuffer); List<Tuple._2<Atom, ByteBuffer>> fragments = new LinkedList<Tuple._2<Atom, ByteBuffer>>(); if (BoxUtil.containsBox(moovBox, "mvex")) { List<Tuple._2<ByteBuffer, MovieFragmentBox>> temp = new LinkedList<Tuple._2<ByteBuffer, MovieFragmentBox>>(); for (Atom fragAtom : getFragments(fi)) { ByteBuffer fragBuffer = fetchBox(fi, fragAtom); fragments.add(Tuple._2(fragAtom, fragBuffer)); MovieFragmentBox fragBox = (MovieFragmentBox) parseBox(fragBuffer); fragBox.setMovie(moovBox); temp.add(Tuple._2(fragBuffer, fragBox)); } edit.applyToFragment(moovBox, Tuple._2_project1(temp).toArray(new MovieFragmentBox[0])); for (Tuple._2<ByteBuffer, ? extends Box> frag : temp) { if (!rewriteBox(frag.v0, frag.v1)) return null; } } else edit.apply(moovBox); if (!rewriteBox(moovBuffer, moovBox)) return null; fragments.add(Tuple._2(moovAtom, moovBuffer)); return fragments; }