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