diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index cc53340..a695856 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -13,6 +13,7 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/app/src/main/java/com/frank/ffmpeg/FFmpegApplication.java b/app/src/main/java/com/frank/ffmpeg/FFmpegApplication.java
new file mode 100644
index 0000000..95e41af
--- /dev/null
+++ b/app/src/main/java/com/frank/ffmpeg/FFmpegApplication.java
@@ -0,0 +1,19 @@
+package com.frank.ffmpeg;
+
+import android.app.Application;
+
+public class FFmpegApplication extends Application {
+
+ private static FFmpegApplication context;
+
+ @Override
+ public void onCreate() {
+ super.onCreate();
+ context = this;
+ }
+
+ public static FFmpegApplication getInstance() {
+ return context;
+ }
+
+}
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 338d847..907929d 100644
--- a/app/src/main/java/com/frank/ffmpeg/activity/FilterActivity.java
+++ b/app/src/main/java/com/frank/ffmpeg/activity/FilterActivity.java
@@ -4,8 +4,10 @@ import android.annotation.SuppressLint;
import android.os.Handler;
import android.os.Message;
import android.os.Bundle;
+
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
+
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
@@ -13,6 +15,7 @@ import android.widget.Button;
import android.widget.CompoundButton;
import android.widget.ToggleButton;
+import com.frank.ffmpeg.FFmpegApplication;
import com.frank.ffmpeg.R;
import com.frank.ffmpeg.VideoPlayer;
import com.frank.ffmpeg.adapter.HorizontalAdapter;
@@ -24,23 +27,21 @@ import java.util.Arrays;
import java.util.List;
/**
- * 使用ffmpeg进行滤镜
+ * Using ffmpeg to filter
* Created by frank on 2018/6/5.
*/
-public class FilterActivity extends BaseActivity implements SurfaceHolder.Callback{
+public class FilterActivity extends BaseActivity implements SurfaceHolder.Callback {
- //本地视频路径
private String videoPath = "";
private VideoPlayer videoPlayer;
private SurfaceView surfaceView;
private SurfaceHolder surfaceHolder;
- //surface是否已经创建
private boolean surfaceCreated;
- //是否正在播放
+ //is playing or not
private boolean isPlaying;
- //滤镜数组
+ //the array of filter
private String[] filters = new String[]{
"lutyuv='u=128:v=128'",
"hue='h=60:s=-3'",
@@ -52,20 +53,20 @@ public class FilterActivity extends BaseActivity implements SurfaceHolder.Callba
"vflip",
"unsharp"
};
+ //vflip is up and down, hflip is left and right
private String[] txtArray = new String[]{
- "素描",
- "鲜明",//hue
- "暖蓝",
- "边缘",
- "九宫格",
- "均衡",
- "矩形",
- "翻转",//vflip上下翻转,hflip是左右翻转
- "锐化"
+ FFmpegApplication.getInstance().getString(R.string.filter_sketch),
+ FFmpegApplication.getInstance().getString(R.string.filter_distinct),
+ FFmpegApplication.getInstance().getString(R.string.filter_warming),
+ FFmpegApplication.getInstance().getString(R.string.filter_edge),
+ FFmpegApplication.getInstance().getString(R.string.filter_division),
+ FFmpegApplication.getInstance().getString(R.string.filter_equalize),
+ FFmpegApplication.getInstance().getString(R.string.filter_rectangle),
+ FFmpegApplication.getInstance().getString(R.string.filter_flip),
+ FFmpegApplication.getInstance().getString(R.string.filter_sharpening)
};
private HorizontalAdapter horizontalAdapter;
private RecyclerView recyclerView;
- //是否播放音频
private boolean playAudio = true;
private ToggleButton btnSound;
private Button btnSelect;
@@ -73,11 +74,11 @@ public class FilterActivity extends BaseActivity implements SurfaceHolder.Callba
private final static int MSG_HIDE = 222;
private final static int DELAY_TIME = 5000;
@SuppressLint("HandlerLeak")
- private Handler mHandler = new Handler(){
+ private Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
- if (msg.what == MSG_HIDE){//无操作5s后隐藏滤镜操作栏
+ if (msg.what == MSG_HIDE) { //after idle 5s, hide the controller view
recyclerView.setVisibility(View.GONE);
btnSound.setVisibility(View.GONE);
btnSelect.setVisibility(View.GONE);
@@ -85,12 +86,13 @@ public class FilterActivity extends BaseActivity implements SurfaceHolder.Callba
}
};
- private class HideRunnable implements Runnable{
+ private class HideRunnable implements Runnable {
@Override
public void run() {
mHandler.obtainMessage(MSG_HIDE).sendToTarget();
}
}
+
private HideRunnable hideRunnable;
@Override
@@ -110,7 +112,7 @@ public class FilterActivity extends BaseActivity implements SurfaceHolder.Callba
mHandler.postDelayed(hideRunnable, DELAY_TIME);
}
- private void initView(){
+ private void initView() {
surfaceView = getView(R.id.surface_filter);
surfaceHolder = surfaceView.getHolder();
surfaceHolder.addCallback(this);
@@ -129,14 +131,13 @@ public class FilterActivity extends BaseActivity implements SurfaceHolder.Callba
initViewsWithClick(R.id.btn_select_file);
}
- //注册监听器
- private void registerLister(){
+ private void registerLister() {
horizontalAdapter.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(int position) {
- if(!surfaceCreated)
+ if (!surfaceCreated)
return;
- if (!FileUtil.checkFileExist(videoPath)){
+ if (!FileUtil.checkFileExist(videoPath)) {
showSelectFile();
return;
}
@@ -149,8 +150,8 @@ public class FilterActivity extends BaseActivity implements SurfaceHolder.Callba
public void onClick(View v) {
btnSelect.setVisibility(View.VISIBLE);
btnSound.setVisibility(View.VISIBLE);
- recyclerView.setVisibility(View.VISIBLE);//按下SurfaceView,弹出滤镜操作栏
- mHandler.postDelayed(hideRunnable, DELAY_TIME);//5s后发消息通知隐藏滤镜操作栏
+ recyclerView.setVisibility(View.VISIBLE);
+ mHandler.postDelayed(hideRunnable, DELAY_TIME);
}
});
@@ -162,12 +163,15 @@ public class FilterActivity extends BaseActivity implements SurfaceHolder.Callba
});
}
+ /**
+ * switch filter
+ * @param position position in the array of filters
+ */
private void doFilterPlay(final int position) {
new Thread(new Runnable() {
@Override
public void run() {
- //切换播放
- if(isPlaying){
+ if (isPlaying) {
videoPlayer.again();
}
isPlaying = true;
@@ -176,8 +180,7 @@ public class FilterActivity extends BaseActivity implements SurfaceHolder.Callba
}).start();
}
- //设置是否静音
- private void setPlayAudio(){
+ private void setPlayAudio() {
playAudio = !playAudio;
videoPlayer.playAudio(playAudio);
}
@@ -201,7 +204,7 @@ public class FilterActivity extends BaseActivity implements SurfaceHolder.Callba
protected void onDestroy() {
super.onDestroy();
isPlaying = false;
- //暂时注释
+ //FIXME
// videoPlayer.release();
videoPlayer = null;
horizontalAdapter = null;
@@ -217,9 +220,8 @@ public class FilterActivity extends BaseActivity implements SurfaceHolder.Callba
@Override
void onSelectedFile(String filePath) {
videoPath = filePath;
- //选择滤镜模式
doFilterPlay(5);
- //默认关闭声音
+ //sound off by default
btnSound.setChecked(true);
}
diff --git a/app/src/main/res/layout/activity_filter.xml b/app/src/main/res/layout/activity_filter.xml
index 8e46f79..7aa0b56 100644
--- a/app/src/main/res/layout/activity_filter.xml
+++ b/app/src/main/res/layout/activity_filter.xml
@@ -20,8 +20,8 @@
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_centerVertical="true"
- android:textOff="@string/sound_close"
- android:textOn="@string/sound_open"/>
+ android:textOff="@string/sound_off"
+ android:textOn="@string/sound_on"/>