From 3ed37dba16e251504a771db8ae44f512e9530305 Mon Sep 17 00:00:00 2001 From: xufuji456 Date: Mon, 17 Oct 2022 15:26:09 +0800 Subject: [PATCH] Feature: record video when camera previewing --- .../camerafilter/widget/BeautyCameraView.java | 10 ++++++ .../camerafilter/widget/CameraRender.java | 4 +++ .../ffmpeg/activity/CameraFilterActivity.kt | 16 ++++++++-- .../res/drawable-xhdpi/ic_camera_filter.png | Bin 0 -> 8487 bytes .../res/drawable-xhdpi/ic_video_record.png | Bin 0 -> 3771 bytes .../res/layout/activity_camera_filter.xml | 29 ++++++++++++++++-- 6 files changed, 54 insertions(+), 5 deletions(-) create mode 100644 app/src/main/res/drawable-xhdpi/ic_camera_filter.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_video_record.png diff --git a/CameraFilter/src/main/java/com/frank/camerafilter/widget/BeautyCameraView.java b/CameraFilter/src/main/java/com/frank/camerafilter/widget/BeautyCameraView.java index e7d1181..a3a4add 100644 --- a/CameraFilter/src/main/java/com/frank/camerafilter/widget/BeautyCameraView.java +++ b/CameraFilter/src/main/java/com/frank/camerafilter/widget/BeautyCameraView.java @@ -40,11 +40,21 @@ public class BeautyCameraView extends GLSurfaceView { } public void setFilter(BeautyFilterType type) { + if (mCameraRender == null) + return; mCameraRender.setFilter(type); } public void setRecording(boolean isRecording) { + if (mCameraRender == null) + return; mCameraRender.setRecording(isRecording); } + public boolean isRecording() { + if (mCameraRender == null) + return false; + return mCameraRender.isRecording(); + } + } diff --git a/CameraFilter/src/main/java/com/frank/camerafilter/widget/CameraRender.java b/CameraFilter/src/main/java/com/frank/camerafilter/widget/CameraRender.java index 464c588..9b989a4 100644 --- a/CameraFilter/src/main/java/com/frank/camerafilter/widget/CameraRender.java +++ b/CameraFilter/src/main/java/com/frank/camerafilter/widget/CameraRender.java @@ -216,6 +216,10 @@ public class CameraRender implements GLSurfaceView.Renderer, SurfaceTexture.OnFr recordEnable = isRecording; } + public boolean isRecording() { + return recordEnable; + } + public void setFilter(final BeautyFilterType type) { mCameraView.queueEvent(new Runnable() { @Override diff --git a/app/src/main/java/com/frank/ffmpeg/activity/CameraFilterActivity.kt b/app/src/main/java/com/frank/ffmpeg/activity/CameraFilterActivity.kt index ae5bfb3..0cdb44b 100644 --- a/app/src/main/java/com/frank/ffmpeg/activity/CameraFilterActivity.kt +++ b/app/src/main/java/com/frank/ffmpeg/activity/CameraFilterActivity.kt @@ -1,10 +1,8 @@ package com.frank.ffmpeg.activity import android.os.Bundle -import android.view.SurfaceView import android.view.View import com.frank.camerafilter.widget.BeautyCameraView -import com.frank.ffmpeg.FFMediaPlayer import com.frank.ffmpeg.R class CameraFilterActivity : BaseActivity() { @@ -22,10 +20,22 @@ class CameraFilterActivity : BaseActivity() { fun initView() { cameraView = getView(R.id.surface_camera_filter) + initViewsWithClick(R.id.btn_video_recorder) + initViewsWithClick(R.id.btn_camera_filter) } override fun onViewClick(view: View) { - + if (view.id == R.id.btn_video_recorder) { + val isRecording = cameraView!!.isRecording + cameraView!!.isRecording = !isRecording + if (!isRecording) { + showToast("start recording...") + } else { + showToast("stop recording...") + } + } else if (view.id == R.id.btn_camera_filter) { + + } } override fun onSelectedFile(filePath: String) { diff --git a/app/src/main/res/drawable-xhdpi/ic_camera_filter.png b/app/src/main/res/drawable-xhdpi/ic_camera_filter.png new file mode 100644 index 0000000000000000000000000000000000000000..b14d201d6a5f47fa9dbcdfc987295d7b1c09d4e0 GIT binary patch literal 8487 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xhdpi/ic_video_record.png b/app/src/main/res/drawable-xhdpi/ic_video_record.png new file mode 100644 index 0000000000000000000000000000000000000000..fec7e59e900d40dded3c61971042270876eacab5 GIT binary patch literal 3771 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 + android:layout_marginTop="30dp" + android:layout_marginBottom="30dp"> + + + + + + + + \ No newline at end of file