diff --git a/app/src/main/java/xdsopl/robot36/Decoder.java b/app/src/main/java/xdsopl/robot36/Decoder.java index 1c71eec..a8fdf48 100644 --- a/app/src/main/java/xdsopl/robot36/Decoder.java +++ b/app/src/main/java/xdsopl/robot36/Decoder.java @@ -26,6 +26,7 @@ import android.support.v8.renderscript.RenderScript; public class Decoder { private boolean drawImage = true, quitThread = false; + private boolean enableAnalyzer = true; private final MainActivity activity; private final ImageView image; private final SpectrumView spectrum; @@ -134,6 +135,7 @@ public class Decoder { void sharper_image() { rsDecoder.invoke_decr_blur(); } void toggle_debug() { rsDecoder.invoke_toggle_debug(); } void toggle_auto() { rsDecoder.invoke_toggle_auto(); } + void enable_analyzer(boolean enable) { rsDecoder.invoke_enable_analyzer((enableAnalyzer = enable) ? 1 : 0); } void raw_mode() { rsDecoder.invoke_raw_mode(); } void robot36_mode() { rsDecoder.invoke_robot36_mode(); } void robot72_mode() { rsDecoder.invoke_robot72_mode(); } @@ -243,7 +245,9 @@ public class Decoder { activity.storeBitmap(Bitmap.createBitmap(savedBuffer, savedWidth[0], savedHeight[0], Bitmap.Config.ARGB_8888)); } - rsDecoderSpectrumBuffer.copyTo(spectrumBuffer); - spectrum.bitmap.setPixels(spectrumBuffer, 0, spectrum.bitmap.getWidth(), 0, 0, spectrum.bitmap.getWidth(), spectrum.bitmap.getHeight()); + if (enableAnalyzer) { + rsDecoderSpectrumBuffer.copyTo(spectrumBuffer); + spectrum.bitmap.setPixels(spectrumBuffer, 0, spectrum.bitmap.getWidth(), 0, 0, spectrum.bitmap.getWidth(), spectrum.bitmap.getHeight()); + } } } \ No newline at end of file diff --git a/app/src/main/java/xdsopl/robot36/MainActivity.java b/app/src/main/java/xdsopl/robot36/MainActivity.java index f93c1bf..fbc0948 100644 --- a/app/src/main/java/xdsopl/robot36/MainActivity.java +++ b/app/src/main/java/xdsopl/robot36/MainActivity.java @@ -35,6 +35,7 @@ import android.provider.MediaStore; import android.support.v4.app.NotificationCompat; import android.view.Menu; import android.view.MenuItem; +import android.view.View; import android.widget.LinearLayout; import android.widget.ShareActionProvider; @@ -51,6 +52,7 @@ public class MainActivity extends Activity { private NotificationManager manager; private ShareActionProvider share; private int notifyID = 1; + private boolean enableAnalyzer = true; private void showNotification() { Intent intent = new Intent(this, MainActivity.class); @@ -163,7 +165,9 @@ public class MainActivity extends Activity { private void changeLayoutOrientation(Configuration config) { boolean horizontal = config.orientation == Configuration.ORIENTATION_LANDSCAPE; - findViewById(R.id.spectrum).setLayoutParams( + View spectrum = findViewById(R.id.spectrum); + spectrum.setVisibility(enableAnalyzer ? View.VISIBLE : View.GONE); + spectrum.setLayoutParams( new LinearLayout.LayoutParams( LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT, horizontal ? 1.0f : 10.0f)); @@ -189,6 +193,10 @@ public class MainActivity extends Activity { case R.id.action_toggle_auto: decoder.toggle_auto(); return true; + case R.id.action_toggle_analyzer: + decoder.enable_analyzer(enableAnalyzer ^= true); + changeLayoutOrientation(getResources().getConfiguration()); + return true; case R.id.action_raw_mode: decoder.raw_mode(); return true; diff --git a/app/src/main/res/menu/menu_main.xml b/app/src/main/res/menu/menu_main.xml index 3f74203..a913342 100644 --- a/app/src/main/res/menu/menu_main.xml +++ b/app/src/main/res/menu/menu_main.xml @@ -18,6 +18,8 @@ android:orderInCategory="100" android:showAsAction="never" /> + "decoder is running Toggle Auto Mode Toggle Debug Mode + Toggle Analyzer Raw Mode Robot36 Mode Robot72 Mode diff --git a/app/src/main/rs/state.rsh b/app/src/main/rs/state.rsh index d148af8..6107099 100644 --- a/app/src/main/rs/state.rsh +++ b/app/src/main/rs/state.rsh @@ -20,6 +20,7 @@ limitations under the License. static ema_t avg_amplitude, leader_lowpass; static ddc_t cnt_ddc, dat_ddc; static fmd_t cnt_fmd, dat_fmd; +static int disable_analyzer; static int automatic_mode_detection; static int debug_mode; static int current_decoder; diff --git a/app/src/main/rs/stft.rsh b/app/src/main/rs/stft.rsh index 80388d4..fda090b 100644 --- a/app/src/main/rs/stft.rsh +++ b/app/src/main/rs/stft.rsh @@ -39,15 +39,36 @@ static void freq_marker(int freq) spectrum_buffer[i] = rgb(255, 255, 255); } -static void init_analyzer(int sw, int sh) +static void show_rainbow() { - spectrum_width = sw; - spectrum_height = sh; for (int j = 0; j < spectrum_height; ++j) for (int i = 0; i < spectrum_width; ++i) spectrum_buffer[spectrum_width * j + i] = rainbow((float)i / spectrum_width); } +static void clear_spectrum() +{ + for (int i = 0; i < spectrum_height * spectrum_width; ++i) + spectrum_buffer[i] = 0; +} + +static void init_analyzer(int sw, int sh) +{ + disable_analyzer = 0; + spectrum_width = sw; + spectrum_height = sh; + show_rainbow(); +} + +void enable_analyzer(int enable) +{ + disable_analyzer = !enable; + if (disable_analyzer) + clear_spectrum(); + else + show_rainbow(); +} + static void spectrum_analyzer(int amplitude) { const int M = 7; @@ -56,6 +77,9 @@ static void spectrum_analyzer(int amplitude) static complex_t input[radix2_N]; static complex_t output[radix2_N]; + if (disable_analyzer) + return; + #if 1 const int order = 5; const int gain = pown(M, order);