From afb5daa3616266272e0f4fa63c5e6fde3b8defb1 Mon Sep 17 00:00:00 2001
From: frank <839789740@qq.com>
Date: Sat, 28 Jul 2018 22:23:47 +0800
Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E8=AE=BE=E7=BD=AE=E9=9D=99?=
=?UTF-8?q?=E9=9F=B3=E5=BC=80=E5=85=B3=E3=80=815s=E6=97=A0=E6=93=8D?=
=?UTF-8?q?=E4=BD=9C=E5=90=8E=E9=9A=90=E8=97=8F=E6=93=8D=E4=BD=9C=E6=A0=8F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
增加设置静音开关、5s无操作后隐藏操作栏
---
app/src/main/cpp/video_filter.c | 7 +-
.../java/com/frank/ffmpeg/VideoPlayer.java | 11 +++-
.../frank/ffmpeg/activity/FilterActivity.java | 64 ++++++++++++++++++-
app/src/main/res/layout/activity_filter.xml | 9 +++
app/src/main/res/values/strings.xml | 2 +
5 files changed, 87 insertions(+), 6 deletions(-)
diff --git a/app/src/main/cpp/video_filter.c b/app/src/main/cpp/video_filter.c
index 24037eb..a54e8f3 100644
--- a/app/src/main/cpp/video_filter.c
+++ b/app/src/main/cpp/video_filter.c
@@ -62,6 +62,7 @@ enum AVSampleFormat out_sample_fmt;
int audio_stream_index = -1;
int got_frame;
AVCodecContext *audioCodecCtx;
+jboolean playAudio = JNI_TRUE;
//const char *filter_descr = "lutyuv='u=128:v=128'";//黑白
//const char *filter_descr = "hue='h=60:s=-3'";//hue滤镜
@@ -328,7 +329,7 @@ int play_audio(JNIEnv * env, AVPacket* packet, AVFrame* frame){
}
JNIEXPORT jint JNICALL Java_com_frank_ffmpeg_VideoPlayer_filter
- (JNIEnv * env, jclass clazz, jstring filePath, jobject surface, jstring filterDescr, jboolean playAudio){
+ (JNIEnv * env, jclass clazz, jstring filePath, jobject surface, jstring filterDescr){
int ret;
const char * file_name = (*env)->GetStringUTFChars(env, filePath, JNI_FALSE);
@@ -452,4 +453,8 @@ JNIEXPORT void JNICALL Java_com_frank_ffmpeg_VideoPlayer_again(JNIEnv * env, jcl
JNIEXPORT void JNICALL Java_com_frank_ffmpeg_VideoPlayer_release(JNIEnv * env, jclass clazz) {
release = 1;
+}
+
+JNIEXPORT void JNICALL Java_com_frank_ffmpeg_VideoPlayer_playAudio(JNIEnv * env, jclass clazz, jboolean play_audio) {
+ playAudio = play_audio;
}
\ No newline at end of file
diff --git a/app/src/main/java/com/frank/ffmpeg/VideoPlayer.java b/app/src/main/java/com/frank/ffmpeg/VideoPlayer.java
index ac83040..8eb090b 100644
--- a/app/src/main/java/com/frank/ffmpeg/VideoPlayer.java
+++ b/app/src/main/java/com/frank/ffmpeg/VideoPlayer.java
@@ -17,10 +17,17 @@ public class VideoPlayer {
public native int play(String filePath, Object surface);
public native int setPlayRate(float playRate);
- public native int filter(String filePath, Object surface, String filterType, boolean playAudio);
+ public native int filter(String filePath, Object surface, String filterType);
public native void again();
public native void release();
-
+ public native void playAudio(boolean play);
+
+ /**
+ * 创建AudioTrack对象,供JNI调用
+ * @param sampleRate sampleRate
+ * @param channels channels
+ * @return AudioTrack
+ */
public AudioTrack createAudioTrack(int sampleRate, int channels){
int audioFormat = AudioFormat.ENCODING_PCM_16BIT;
int channelConfig;
diff --git a/app/src/main/java/com/frank/ffmpeg/activity/FilterActivity.java b/app/src/main/java/com/frank/ffmpeg/activity/FilterActivity.java
index ee26b78..0e67370 100644
--- a/app/src/main/java/com/frank/ffmpeg/activity/FilterActivity.java
+++ b/app/src/main/java/com/frank/ffmpeg/activity/FilterActivity.java
@@ -1,12 +1,19 @@
package com.frank.ffmpeg.activity;
+import android.annotation.SuppressLint;
import android.os.Environment;
+import android.os.Handler;
+import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
+import android.view.View;
+import android.widget.CompoundButton;
+import android.widget.ToggleButton;
+
import com.frank.ffmpeg.R;
import com.frank.ffmpeg.VideoPlayer;
import com.frank.ffmpeg.adapter.HorizontalAdapter;
@@ -24,6 +31,7 @@ public class FilterActivity extends AppCompatActivity implements SurfaceHolder.C
private final static String VIDEO_PATH = PATH + File.separator + "Beyond.mp4";
private VideoPlayer videoPlayer;
+ private SurfaceView surfaceView;
private SurfaceHolder surfaceHolder;
//surface是否已经创建
private boolean surfaceCreated;
@@ -55,8 +63,32 @@ public class FilterActivity extends AppCompatActivity implements SurfaceHolder.C
"锐化"
};
private HorizontalAdapter horizontalAdapter;
+ private RecyclerView recyclerView;
//是否播放音频
private boolean playAudio = true;
+ private ToggleButton btnSound;
+
+ private final static int MSG_HIDE = 222;
+ private final static int DELAY_TIME = 5000;
+ @SuppressLint("HandlerLeak")
+ private Handler mHandler = new Handler(){
+ @Override
+ public void handleMessage(Message msg) {
+ super.handleMessage(msg);
+ if (msg.what == MSG_HIDE){//无操作5s后隐藏滤镜操作栏
+ recyclerView.setVisibility(View.GONE);
+ btnSound.setVisibility(View.GONE);
+ }
+ }
+ };
+
+ private class HideRunnable implements Runnable{
+ @Override
+ public void run() {
+ mHandler.obtainMessage(MSG_HIDE).sendToTarget();
+ }
+ }
+ private HideRunnable hideRunnable;
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -66,15 +98,19 @@ public class FilterActivity extends AppCompatActivity implements SurfaceHolder.C
initView();
registerLister();
+
+ hideRunnable = new HideRunnable();
+ mHandler.postDelayed(hideRunnable, DELAY_TIME);
}
private void initView(){
- SurfaceView surfaceView = (SurfaceView) findViewById(R.id.surface_filter);
+ surfaceView = (SurfaceView) findViewById(R.id.surface_filter);
surfaceHolder = surfaceView.getHolder();
surfaceHolder.addCallback(this);
videoPlayer = new VideoPlayer();
+ btnSound = (ToggleButton) findViewById(R.id.btn_sound);
- RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recycler_view);
+ recyclerView = (RecyclerView) findViewById(R.id.recycler_view);
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
linearLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
recyclerView.setLayoutManager(linearLayoutManager);
@@ -100,11 +136,33 @@ public class FilterActivity extends AppCompatActivity implements SurfaceHolder.C
videoPlayer.again();
}
isPlaying = true;
- videoPlayer.filter(VIDEO_PATH, surfaceHolder.getSurface(), filters[mPosition], playAudio);
+ videoPlayer.filter(VIDEO_PATH, surfaceHolder.getSurface(), filters[mPosition]);
}
}).start();
}
});
+
+ surfaceView.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ btnSound.setVisibility(View.VISIBLE);
+ recyclerView.setVisibility(View.VISIBLE);//按下SurfaceView,弹出滤镜操作栏
+ mHandler.postDelayed(hideRunnable, DELAY_TIME);//5s后发消息通知隐藏滤镜操作栏
+ }
+ });
+
+ btnSound.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
+ @Override
+ public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
+ setPlayAudio();
+ }
+ });
+ }
+
+ //设置是否静音
+ private void setPlayAudio(){
+ playAudio = !playAudio;
+ videoPlayer.playAudio(playAudio);
}
@Override
diff --git a/app/src/main/res/layout/activity_filter.xml b/app/src/main/res/layout/activity_filter.xml
index 8bebf7e..1ba8778 100644
--- a/app/src/main/res/layout/activity_filter.xml
+++ b/app/src/main/res/layout/activity_filter.xml
@@ -14,4 +14,13 @@
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"/>
+
+
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 9fef7be..81b3ae7 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -41,6 +41,8 @@
停止
静音
声音
+ 声音开
+ 声音关
素描
hue