diff --git a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/avi/AvcAviTrack.java b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/avi/AvcAviTrack.java index 0c9d88f380..86f2b94f88 100644 --- a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/avi/AvcAviTrack.java +++ b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/avi/AvcAviTrack.java @@ -21,7 +21,7 @@ public class AvcAviTrack extends AviTrack{ private NalUnitUtil.SpsData spsData; //The frame as a calculated from the picCount private int picFrame; - private int lastPicFrame; + private int lastPicCount; //Largest picFrame, used when we hit an I frame private int maxPicFrame =-1; private int maxPicCount; @@ -56,7 +56,7 @@ public class AvcAviTrack extends AviTrack{ } private void processIdr() { - lastPicFrame = 0; + lastPicCount = 0; picFrame = maxPicFrame + 1; } @@ -97,6 +97,13 @@ public class AvcAviTrack extends AviTrack{ return picFrame; } + @Override + void seekFrame(int frame) { + super.seekFrame(frame); + this.picFrame = frame; + lastPicCount = 0; + } + int getPicOrderCountLsb(byte[] peek) { if (peek[3] != 1) { return 0; @@ -136,15 +143,15 @@ public class AvcAviTrack extends AviTrack{ case 2: case 3: case 4: { - final int myPicCount = getPicOrderCountLsb(peek); - int delta = myPicCount - lastPicFrame; + final int picCount = getPicOrderCountLsb(peek); + int delta = picCount - lastPicCount; if (delta < negHalf) { delta += maxPicCount; } else if (delta > posHalf) { delta -= maxPicCount; } picFrame += delta / 2; - lastPicFrame = myPicCount; + lastPicCount = picCount; if (maxPicFrame < picFrame) { maxPicFrame = picFrame; } diff --git a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/avi/AviSeekMap.java b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/avi/AviSeekMap.java index 7577755069..33678c0976 100644 --- a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/avi/AviSeekMap.java +++ b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/avi/AviSeekMap.java @@ -63,7 +63,7 @@ public class AviSeekMap implements SeekMap { public void setFrames(final long position, final long timeUs, final SparseArray idTrackMap) { final int seekFrameIndex = getSeekFrameIndex(timeUs); - videoTrack.frame = seekFrameIndex * seekIndexFactor; + videoTrack.seekFrame(seekFrameIndex * seekIndexFactor); for (int i=0;i