diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/video/SnapshotVideoRecorder.java b/cameraview/src/main/java/com/otaliastudios/cameraview/video/SnapshotVideoRecorder.java index 92b43341..a2aba92c 100644 --- a/cameraview/src/main/java/com/otaliastudios/cameraview/video/SnapshotVideoRecorder.java +++ b/cameraview/src/main/java/com/otaliastudios/cameraview/video/SnapshotVideoRecorder.java @@ -118,22 +118,29 @@ public class SnapshotVideoRecorder extends VideoRecorder implements RendererFram case DEVICE_DEFAULT: type = "video/avc"; break; } LOG.w("Creating frame encoder. Rotation:", mResult.rotation); - TextureMediaEncoder.Config config = new TextureMediaEncoder.Config(width, height, - mResult.videoBitRate, - mResult.videoFrameRate, - mResult.rotation, - type, mTextureId, - scaleX, scaleY, - EGL14.eglGetCurrentContext(), - mHasOverlay ? mOverlayTextureId : TextureMediaEncoder.NO_TEXTURE, - mOverlayRotation - ); - TextureMediaEncoder videoEncoder = new TextureMediaEncoder(config); + TextureMediaEncoder.Config videoConfig = new TextureMediaEncoder.Config(); + videoConfig.width = width; + videoConfig.height = height; + videoConfig.bitRate = mResult.videoBitRate; + videoConfig.frameRate = mResult.videoFrameRate; + videoConfig.rotation = mResult.rotation; + videoConfig.mimeType = type; + videoConfig.textureId = mTextureId; + videoConfig.scaleX = scaleX; + videoConfig.scaleY = scaleY; + videoConfig.eglContext = EGL14.eglGetCurrentContext(); + if (mHasOverlay) { + videoConfig.overlayTextureId = mOverlayTextureId; + videoConfig.overlayRotation = mOverlayRotation; + } + TextureMediaEncoder videoEncoder = new TextureMediaEncoder(videoConfig); // Audio AudioMediaEncoder audioEncoder = null; if (mResult.audio == Audio.ON) { - audioEncoder = new AudioMediaEncoder(new AudioMediaEncoder.Config(mResult.audioBitRate)); + AudioMediaEncoder.Config audioConfig = new AudioMediaEncoder.Config(); + audioConfig.bitRate = mResult.audioBitRate; + audioEncoder = new AudioMediaEncoder(audioConfig); } // Engine diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/video/encoding/AudioMediaEncoder.java b/cameraview/src/main/java/com/otaliastudios/cameraview/video/encoding/AudioMediaEncoder.java index 076c43de..d10ae194 100644 --- a/cameraview/src/main/java/com/otaliastudios/cameraview/video/encoding/AudioMediaEncoder.java +++ b/cameraview/src/main/java/com/otaliastudios/cameraview/video/encoding/AudioMediaEncoder.java @@ -73,15 +73,19 @@ public class AudioMediaEncoder extends MediaEncoder { private Config mConfig; public static class Config { - int bitRate; - public Config(int bitRate) { - this.bitRate = bitRate; + public int bitRate; + + @NonNull + private Config copy() { + Config config = new Config(); + config.bitRate = this.bitRate; + return config; } } public AudioMediaEncoder(@NonNull Config config) { super("AudioEncoder"); - mConfig = config; + mConfig = config.copy(); } @EncoderThread @@ -111,10 +115,6 @@ public class AudioMediaEncoder extends MediaEncoder { mRecorder.start(); } - @EncoderThread - @Override - void onEvent(@NonNull String event, @Nullable Object data) { } - @EncoderThread @Override void onStop() { @@ -138,7 +138,7 @@ public class AudioMediaEncoder extends MediaEncoder { return mConfig.bitRate; } - class AudioRecordingThread extends Thread { + private class AudioRecordingThread extends Thread { private AudioRecord mAudioRecord; private ByteBuffer mCurrentBuffer; @@ -287,9 +287,11 @@ public class AudioMediaEncoder extends MediaEncoder { } void sendInputBuffer(ByteBuffer buffer, long presentationTimeUs, boolean endOfStream) { - int presentation1 = (int) (presentationTimeUs >> 32); - int presentation2 = (int) (presentationTimeUs); - sendMessage(obtainMessage(endOfStream ? 1 : 0, presentation1, presentation2, buffer)); + sendMessage(obtainMessage( + endOfStream ? 1 : 0, + (int) (presentationTimeUs >> 32), + (int) (presentationTimeUs), + buffer)); } @Override diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/video/encoding/MediaEncoder.java b/cameraview/src/main/java/com/otaliastudios/cameraview/video/encoding/MediaEncoder.java index 04831d9b..77f6fa55 100644 --- a/cameraview/src/main/java/com/otaliastudios/cameraview/video/encoding/MediaEncoder.java +++ b/cameraview/src/main/java/com/otaliastudios/cameraview/video/encoding/MediaEncoder.java @@ -256,7 +256,7 @@ abstract class MediaEncoder { * @param data object */ @EncoderThread - abstract void onEvent(@NonNull String event, @Nullable Object data); + void onEvent(@NonNull String event, @Nullable Object data) {}; /** * Stop recording. This involves signaling the end of stream and draining diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/video/encoding/TextureMediaEncoder.java b/cameraview/src/main/java/com/otaliastudios/cameraview/video/encoding/TextureMediaEncoder.java index e97d97c6..3744fe73 100644 --- a/cameraview/src/main/java/com/otaliastudios/cameraview/video/encoding/TextureMediaEncoder.java +++ b/cameraview/src/main/java/com/otaliastudios/cameraview/video/encoding/TextureMediaEncoder.java @@ -24,37 +24,31 @@ public class TextureMediaEncoder extends VideoMediaEncoder extends Med @SuppressWarnings("WeakerAccess") protected int mFrameNum = -1; - static class Config { - int width; - int height; - int bitRate; - int frameRate; - int rotation; - String mimeType; - - Config(int width, int height, int bitRate, int frameRate, int rotation, @NonNull String mimeType) { - this.width = width; - this.height = height; - this.bitRate = bitRate; - this.frameRate = frameRate; - this.rotation = rotation; - this.mimeType = mimeType; + protected static class Config { + public int width; + public int height; + public int bitRate; + public int frameRate; + public int rotation; + public String mimeType; + + protected void copy(@NonNull C output) { + output.width = this.width; + output.height = this.height; + output.bitRate = this.bitRate; + output.frameRate = this.frameRate; + output.rotation = this.rotation; + output.mimeType = this.mimeType; } }