Skip to content

Commit 4171cb4

Browse files
authored
Merge pull request #2045 from pedroSG94/async-record
change record controller to async mode
2 parents 04f3fdf + 12f9502 commit 4171cb4

19 files changed

Lines changed: 864 additions & 742 deletions

common/src/main/java/com/pedro/common/Extensions.kt

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,16 @@ fun Throwable.validMessage(): String {
149149
return (message ?: "").ifEmpty { javaClass.simpleName }
150150
}
151151

152-
fun MediaCodec.BufferInfo.toMediaFrameInfo() = MediaFrame.Info(offset, size, presentationTimeUs, isKeyframe())
152+
fun MediaCodec.BufferInfo.toMediaFrameInfo() = MediaFrame.Info(offset, size, presentationTimeUs, isKeyframe(), flags)
153+
154+
fun MediaFrame.Info.toMediaCodecBufferInfo() = MediaCodec.BufferInfo().apply {
155+
set(
156+
this@toMediaCodecBufferInfo.offset,
157+
this@toMediaCodecBufferInfo.size,
158+
this@toMediaCodecBufferInfo.timestamp,
159+
this@toMediaCodecBufferInfo.flags
160+
)
161+
}
153162

154163
fun ByteBuffer.clone(): ByteBuffer = ByteBuffer.wrap(toByteArray())
155164

common/src/main/java/com/pedro/common/frame/MediaFrame.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,8 @@ data class MediaFrame(
1111
val offset: Int,
1212
val size: Int,
1313
val timestamp: Long,
14-
val isKeyFrame: Boolean
14+
val isKeyFrame: Boolean,
15+
val flags: Int = 0
1516
)
1617

1718
enum class Type {

library/src/main/java/com/pedro/library/base/Camera1Base.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,6 @@
5353
import com.pedro.encoder.video.FormatVideoEncoder;
5454
import com.pedro.encoder.video.GetVideoData;
5555
import com.pedro.encoder.video.VideoEncoder;
56-
import com.pedro.library.base.recording.BaseRecordController;
5756
import com.pedro.library.base.recording.RecordController;
5857
import com.pedro.library.util.AndroidMuxerRecordController;
5958
import com.pedro.library.util.FpsListener;
@@ -93,7 +92,7 @@ public abstract class Camera1Base {
9392
private boolean streaming = false;
9493
protected boolean audioInitialized = false;
9594
private boolean onPreview = false;
96-
protected BaseRecordController recordController;
95+
protected RecordController recordController;
9796
private int previewWidth, previewHeight;
9897
private final FpsListener fpsListener = new FpsListener();
9998

@@ -955,9 +954,9 @@ public RecordController.Status getRecordStatus() {
955954

956955
protected abstract void getVideoDataImp(ByteBuffer videoBuffer, MediaCodec.BufferInfo info);
957956

958-
public void setRecordController(BaseRecordController recordController) {
957+
public void setRecordController(RecordController recordController) {
959958
if (!isRecording()) {
960-
recordController.updateInfo(this.recordController);
959+
recordController.updateInfo(this.recordController.getVideoCodec(), this.recordController.getAudioCodec());
961960
this.recordController = recordController;
962961
}
963962
}

library/src/main/java/com/pedro/library/base/Camera2Base.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,6 @@
5353
import com.pedro.encoder.video.FormatVideoEncoder;
5454
import com.pedro.encoder.video.GetVideoData;
5555
import com.pedro.encoder.video.VideoEncoder;
56-
import com.pedro.library.base.recording.BaseRecordController;
5756
import com.pedro.library.base.recording.RecordController;
5857
import com.pedro.library.util.AndroidMuxerRecordController;
5958
import com.pedro.library.util.FpsListener;
@@ -95,7 +94,7 @@ public abstract class Camera2Base {
9594
protected boolean audioInitialized = false;
9695
private boolean onPreview = false;
9796
private boolean isBackground = false;
98-
protected BaseRecordController recordController;
97+
protected RecordController recordController;
9998
private int previewWidth, previewHeight;
10099
private final FpsListener fpsListener = new FpsListener();
101100

@@ -1051,9 +1050,9 @@ public boolean isOnPreview() {
10511050

10521051
protected abstract void getVideoDataImp(ByteBuffer videoBuffer, MediaCodec.BufferInfo info);
10531052

1054-
public void setRecordController(BaseRecordController recordController) {
1053+
public void setRecordController(RecordController recordController) {
10551054
if (!isRecording()) {
1056-
recordController.updateInfo(this.recordController);
1055+
recordController.updateInfo(this.recordController.getVideoCodec(), this.recordController.getAudioCodec());
10571056
this.recordController = recordController;
10581057
}
10591058
}

library/src/main/java/com/pedro/library/base/DisplayBase.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,6 @@
4949
import com.pedro.encoder.video.FormatVideoEncoder;
5050
import com.pedro.encoder.video.GetVideoData;
5151
import com.pedro.encoder.video.VideoEncoder;
52-
import com.pedro.library.base.recording.BaseRecordController;
5352
import com.pedro.library.base.recording.RecordController;
5453
import com.pedro.library.util.AndroidMuxerRecordController;
5554
import com.pedro.library.util.FpsListener;
@@ -85,7 +84,7 @@ public abstract class DisplayBase {
8584
private int resultCode = -1;
8685
private Intent data;
8786
private MediaProjection.Callback mediaProjectionCallback = new MediaProjection.Callback() { };
88-
protected BaseRecordController recordController;
87+
protected RecordController recordController;
8988
private final FpsListener fpsListener = new FpsListener();
9089
private boolean videoInitialized = false;
9190
private boolean audioInitialized = false;
@@ -576,9 +575,9 @@ public RecordController.Status getRecordStatus() {
576575

577576
protected abstract void getVideoDataImp(ByteBuffer videoBuffer, MediaCodec.BufferInfo info);
578577

579-
public void setRecordController(BaseRecordController recordController) {
578+
public void setRecordController(RecordController recordController) {
580579
if (!isRecording()) {
581-
recordController.updateInfo(this.recordController);
580+
recordController.updateInfo(this.recordController.getVideoCodec(), this.recordController.getAudioCodec());
582581
this.recordController = recordController;
583582
}
584583
}

library/src/main/java/com/pedro/library/base/FromFileBase.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,6 @@
4848
import com.pedro.encoder.video.FormatVideoEncoder;
4949
import com.pedro.encoder.video.GetVideoData;
5050
import com.pedro.encoder.video.VideoEncoder;
51-
import com.pedro.library.base.recording.BaseRecordController;
5251
import com.pedro.library.base.recording.RecordController;
5352
import com.pedro.library.util.AndroidMuxerRecordController;
5453
import com.pedro.library.util.FpsListener;
@@ -81,7 +80,7 @@ public abstract class FromFileBase {
8180
private AudioEncoder audioEncoder;
8281
private GlInterface glInterface;
8382
private boolean streaming = false;
84-
protected BaseRecordController recordController;
83+
protected RecordController recordController;
8584
private final FpsListener fpsListener = new FpsListener();
8685

8786
private VideoDecoder videoDecoder;
@@ -732,9 +731,9 @@ public void setAudioExtractor(Extractor extractor) {
732731

733732
protected abstract void getAudioDataImp(ByteBuffer audioBuffer, MediaCodec.BufferInfo info);
734733

735-
public void setRecordController(BaseRecordController recordController) {
734+
public void setRecordController(RecordController recordController) {
736735
if (!isRecording()) {
737-
recordController.updateInfo(this.recordController);
736+
recordController.updateInfo(this.recordController.getVideoCodec(), this.recordController.getAudioCodec());
738737
this.recordController = recordController;
739738
}
740739
}

library/src/main/java/com/pedro/library/base/OnlyAudioBase.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@
3535
import com.pedro.encoder.input.audio.GetMicrophoneData;
3636
import com.pedro.encoder.input.audio.MicrophoneManager;
3737
import com.pedro.encoder.utils.CodecUtil;
38-
import com.pedro.library.base.recording.BaseRecordController;
3938
import com.pedro.library.base.recording.RecordController;
4039
import com.pedro.library.util.AacMuxerRecordController;
4140
import com.pedro.library.util.streamclient.StreamBaseClient;
@@ -51,7 +50,7 @@
5150
*/
5251
public abstract class OnlyAudioBase {
5352

54-
protected BaseRecordController recordController;
53+
protected RecordController recordController;
5554
private final MicrophoneManager microphoneManager;
5655
private AudioEncoder audioEncoder;
5756
private boolean streaming = false;
@@ -283,9 +282,9 @@ public boolean resetAudioEncoder() {
283282

284283
protected abstract void getAudioDataImp(ByteBuffer audioBuffer, MediaCodec.BufferInfo info);
285284

286-
public void setRecordController(BaseRecordController recordController) {
285+
public void setRecordController(RecordController recordController) {
287286
if (!isRecording()) {
288-
recordController.updateInfo(this.recordController);
287+
recordController.updateInfo(this.recordController.getVideoCodec(), this.recordController.getAudioCodec());
289288
this.recordController = recordController;
290289
}
291290
}

library/src/main/java/com/pedro/library/base/StreamBase.kt

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,6 @@ import com.pedro.encoder.utils.CodecUtil
4444
import com.pedro.encoder.video.FormatVideoEncoder
4545
import com.pedro.encoder.video.GetVideoData
4646
import com.pedro.encoder.video.VideoEncoder
47-
import com.pedro.library.base.recording.BaseRecordController
4847
import com.pedro.library.base.recording.RecordController
4948
import com.pedro.library.util.AndroidMuxerRecordController
5049
import com.pedro.library.util.FpsListener
@@ -83,14 +82,14 @@ abstract class StreamBase(
8382
//video render
8483
private val glInterface = GlStreamInterface(context)
8584
//video/audio record
86-
private var recordController: BaseRecordController = AndroidMuxerRecordController()
85+
private var recordController: RecordController = AndroidMuxerRecordController()
8786
private val fpsListener = FpsListener()
8887
var isStreaming = false
8988
private set
9089
var isOnPreview = false
9190
private set
9291
val isRecording: Boolean
93-
get() = recordController.isRunning
92+
get() = recordController.isRunning()
9493
var videoSource: VideoSource = vSource
9594
private set
9695
var audioSource: AudioSource = aSource
@@ -486,9 +485,9 @@ abstract class StreamBase(
486485
* Replace the current BaseRecordController.
487486
* This method allow record in other format or even create your custom implementation and record in a new format.
488487
*/
489-
fun setRecordController(recordController: BaseRecordController) {
488+
fun setRecordController(recordController: RecordController) {
490489
if (!isRecording) {
491-
recordController.updateInfo(this.recordController)
490+
recordController.updateInfo(this.recordController.getVideoCodec(), this.recordController.getAudioCodec())
492491
this.recordController = recordController
493492
}
494493
}

0 commit comments

Comments
 (0)