Skip to content

Commit 1706fb8

Browse files
authored
Merge pull request #2054 from pedroSG94/discard-frames-invalid-ts
Discard frames invalid ts
2 parents 880855b + ab2efc5 commit 1706fb8

File tree

3 files changed

+9
-18
lines changed

3 files changed

+9
-18
lines changed

encoder/src/main/java/com/pedro/encoder/BaseEncoder.java

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@
2727
import androidx.annotation.NonNull;
2828
import androidx.annotation.RequiresApi;
2929

30-
import com.pedro.common.ExtensionsKt;
3130
import com.pedro.common.TimeUtils;
3231
import com.pedro.encoder.audio.G711Codec;
3332
import com.pedro.encoder.utils.CodecUtil;
@@ -37,7 +36,6 @@
3736
import java.util.concurrent.BlockingQueue;
3837
import java.util.concurrent.ExecutorService;
3938
import java.util.concurrent.Executors;
40-
import java.util.concurrent.PriorityBlockingQueue;
4139

4240
/**
4341
* Created by pedro on 18/09/19.
@@ -132,12 +130,10 @@ private void initCodec() {
132130

133131
protected abstract void stopImp();
134132

135-
protected void fixTimeStamp(MediaCodec.BufferInfo info) {
136-
if (oldTimeStamp > info.presentationTimeUs) {
137-
final long currentTs = TimeUtils.getCurrentTimeMicro() - presentTimeUs;
138-
info.presentationTimeUs = Math.max(currentTs, oldTimeStamp + 1);
139-
}
133+
protected boolean checkValidTimeStamp(MediaCodec.BufferInfo info) {
134+
boolean valid = oldTimeStamp <= info.presentationTimeUs;
140135
oldTimeStamp = info.presentationTimeUs;
136+
return valid;
141137
}
142138

143139
private void reloadCodec(IllegalStateException e) {
@@ -252,16 +248,15 @@ private void processInput(@NonNull ByteBuffer byteBuffer, @NonNull MediaCodec me
252248
}
253249
}
254250

255-
protected abstract void checkBuffer(@NonNull ByteBuffer byteBuffer,
251+
protected abstract boolean checkBuffer(@NonNull ByteBuffer byteBuffer,
256252
@NonNull MediaCodec.BufferInfo bufferInfo);
257253

258254
protected abstract void sendBuffer(@NonNull ByteBuffer byteBuffer,
259255
@NonNull MediaCodec.BufferInfo bufferInfo);
260256

261257
private void processOutput(@NonNull ByteBuffer byteBuffer, @NonNull MediaCodec mediaCodec,
262258
int outBufferIndex, @NonNull MediaCodec.BufferInfo bufferInfo) throws IllegalStateException {
263-
checkBuffer(byteBuffer, bufferInfo);
264-
sendBuffer(byteBuffer, bufferInfo);
259+
if (checkBuffer(byteBuffer, bufferInfo)) sendBuffer(byteBuffer, bufferInfo);
265260
mediaCodec.releaseOutputBuffer(outBufferIndex, false);
266261
}
267262

encoder/src/main/java/com/pedro/encoder/audio/AudioEncoder.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -158,9 +158,9 @@ protected long calculatePts(Frame frame, long presentTimeUs) {
158158
}
159159

160160
@Override
161-
protected void checkBuffer(@NonNull ByteBuffer byteBuffer,
161+
protected boolean checkBuffer(@NonNull ByteBuffer byteBuffer,
162162
@NonNull MediaCodec.BufferInfo bufferInfo) {
163-
fixTimeStamp(bufferInfo);
163+
return checkValidTimeStamp(bufferInfo);
164164
}
165165

166166
@Override

encoder/src/main/java/com/pedro/encoder/video/VideoEncoder.java

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,6 @@
3030
import androidx.annotation.RequiresApi;
3131

3232
import com.pedro.common.TimeUtils;
33-
import com.pedro.common.av1.Av1Parser;
34-
import com.pedro.common.av1.Obu;
35-
import com.pedro.common.av1.ObuType;
3633
import com.pedro.encoder.BaseEncoder;
3734
import com.pedro.encoder.Frame;
3835
import com.pedro.encoder.TimestampMode;
@@ -43,7 +40,6 @@
4340
import com.pedro.encoder.utils.yuv.YUVUtil;
4441

4542
import java.nio.ByteBuffer;
46-
import java.util.ArrayList;
4743
import java.util.List;
4844

4945
/**
@@ -440,12 +436,11 @@ public void formatChanged(@NonNull MediaCodec mediaCodec, @NonNull MediaFormat m
440436
}
441437

442438
@Override
443-
protected void checkBuffer(@NonNull ByteBuffer byteBuffer, @NonNull MediaCodec.BufferInfo bufferInfo) {
439+
protected boolean checkBuffer(@NonNull ByteBuffer byteBuffer, @NonNull MediaCodec.BufferInfo bufferInfo) {
444440
if (forceKey && Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
445441
forceKey = false;
446442
requestKeyframe();
447443
}
448-
fixTimeStamp(bufferInfo);
449444
if (!spsPpsSetted && type.equals(CodecUtil.H264_MIME)) {
450445
Log.i(TAG, "formatChanged not called, doing manual sps/pps extraction...");
451446
Pair<ByteBuffer, ByteBuffer> buffers = VideoEncoderHelper.decodeSpsPpsFromBuffer(byteBuffer.duplicate(), bufferInfo.size);
@@ -498,6 +493,7 @@ protected void checkBuffer(@NonNull ByteBuffer byteBuffer, @NonNull MediaCodec.B
498493
if (firstTimestamp == 0) firstTimestamp = bufferInfo.presentationTimeUs;
499494
bufferInfo.presentationTimeUs -= firstTimestamp;
500495
}
496+
return checkValidTimeStamp(bufferInfo);
501497
}
502498

503499
@Override

0 commit comments

Comments
 (0)