diff options
Diffstat (limited to 'webrtc/examples/android/media_demo/src')
12 files changed, 0 insertions, 1228 deletions
diff --git a/webrtc/examples/android/media_demo/src/org/webrtc/webrtcdemo/AudioMenuFragment.java b/webrtc/examples/android/media_demo/src/org/webrtc/webrtcdemo/AudioMenuFragment.java deleted file mode 100644 index 94e23c2465..0000000000 --- a/webrtc/examples/android/media_demo/src/org/webrtc/webrtcdemo/AudioMenuFragment.java +++ /dev/null @@ -1,156 +0,0 @@ -/* - * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. - * - * Use of this source code is governed by a BSD-style license - * that can be found in the LICENSE file in the root of the source - * tree. An additional intellectual property rights grant can be found - * in the file PATENTS. All contributing project authors may - * be found in the AUTHORS file in the root of the source tree. - */ - -package org.webrtc.webrtcdemo; - -import android.app.Activity; -import android.app.Fragment; -import android.os.Bundle; -import android.util.Log; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.AdapterView; -import android.widget.AdapterView.OnItemSelectedListener; -import android.widget.CheckBox; -import android.widget.EditText; -import android.widget.Spinner; -import android.widget.TextView; -import java.lang.Integer; - -public class AudioMenuFragment extends Fragment { - - private String TAG; - private MenuStateProvider stateProvider; - - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { - View v = inflater.inflate(R.layout.audiomenu, container, false); - - TAG = getResources().getString(R.string.tag); - - String[] audioCodecsStrings = getEngine().audioCodecsAsString(); - Spinner spAudioCodecType = (Spinner) v.findViewById(R.id.spAudioCodecType); - spAudioCodecType.setAdapter(new SpinnerAdapter(getActivity(), - R.layout.dropdownitems, - audioCodecsStrings, - inflater)); - spAudioCodecType.setSelection(getEngine().audioCodecIndex()); - spAudioCodecType.setOnItemSelectedListener(new OnItemSelectedListener() { - public void onItemSelected(AdapterView<?> adapterView, View view, - int position, long id) { - getEngine().setAudioCodec(position); - } - public void onNothingSelected(AdapterView<?> arg0) { - Log.d(TAG, "No setting selected"); - } - }); - - EditText etATxPort = (EditText) v.findViewById(R.id.etATxPort); - etATxPort.setText(Integer.toString(getEngine().audioTxPort())); - etATxPort.setOnClickListener(new View.OnClickListener() { - public void onClick(View editText) { - EditText etATxPort = (EditText) editText; - getEngine() - .setAudioTxPort(Integer.parseInt(etATxPort.getText().toString())); - etATxPort.setText(Integer.toString(getEngine().audioTxPort())); - } - }); - EditText etARxPort = (EditText) v.findViewById(R.id.etARxPort); - etARxPort.setText(Integer.toString(getEngine().audioRxPort())); - etARxPort.setOnClickListener(new View.OnClickListener() { - public void onClick(View editText) { - EditText etARxPort = (EditText) editText; - getEngine() - .setAudioRxPort(Integer.parseInt(etARxPort.getText().toString())); - etARxPort.setText(Integer.toString(getEngine().audioRxPort())); - - } - }); - - CheckBox cbEnableAecm = (CheckBox) v.findViewById(R.id.cbAecm); - cbEnableAecm.setChecked(getEngine().aecmEnabled()); - cbEnableAecm.setOnClickListener(new View.OnClickListener() { - public void onClick(View checkBox) { - CheckBox cbEnableAecm = (CheckBox) checkBox; - getEngine().setEc(cbEnableAecm.isChecked()); - cbEnableAecm.setChecked(getEngine().aecmEnabled()); - } - }); - CheckBox cbEnableNs = (CheckBox) v.findViewById(R.id.cbNoiseSuppression); - cbEnableNs.setChecked(getEngine().nsEnabled()); - cbEnableNs.setOnClickListener(new View.OnClickListener() { - public void onClick(View checkBox) { - CheckBox cbEnableNs = (CheckBox) checkBox; - getEngine().setNs(cbEnableNs.isChecked()); - cbEnableNs.setChecked(getEngine().nsEnabled()); - } - }); - CheckBox cbEnableAgc = (CheckBox) v.findViewById(R.id.cbAutoGainControl); - cbEnableAgc.setChecked(getEngine().agcEnabled()); - cbEnableAgc.setOnClickListener(new View.OnClickListener() { - public void onClick(View checkBox) { - CheckBox cbEnableAgc = (CheckBox) checkBox; - getEngine().setAgc(cbEnableAgc.isChecked()); - cbEnableAgc.setChecked(getEngine().agcEnabled()); - } - }); - CheckBox cbEnableSpeaker = (CheckBox) v.findViewById(R.id.cbSpeaker); - cbEnableSpeaker.setChecked(getEngine().speakerEnabled()); - cbEnableSpeaker.setOnClickListener(new View.OnClickListener() { - public void onClick(View checkBox) { - CheckBox cbEnableSpeaker = (CheckBox) checkBox; - getEngine().setSpeaker(cbEnableSpeaker.isChecked()); - cbEnableSpeaker.setChecked(getEngine().speakerEnabled()); - } - }); - CheckBox cbEnableDebugAPM = - (CheckBox) v.findViewById(R.id.cbDebugRecording); - cbEnableDebugAPM.setChecked(getEngine().apmRecord()); - cbEnableDebugAPM.setOnClickListener(new View.OnClickListener() { - public void onClick(View checkBox) { - CheckBox cbEnableDebugAPM = (CheckBox) checkBox; - getEngine().setDebuging(cbEnableDebugAPM.isChecked()); - cbEnableDebugAPM.setChecked(getEngine().apmRecord()); - } - }); - CheckBox cbEnableAudioRTPDump = - (CheckBox) v.findViewById(R.id.cbAudioRTPDump); - cbEnableAudioRTPDump.setChecked(getEngine().audioRtpDump()); - cbEnableAudioRTPDump.setOnClickListener(new View.OnClickListener() { - public void onClick(View checkBox) { - CheckBox cbEnableAudioRTPDump = (CheckBox) checkBox; - getEngine().setIncomingVoeRtpDump(cbEnableAudioRTPDump.isChecked()); - cbEnableAudioRTPDump.setChecked(getEngine().audioRtpDump()); - } - }); - return v; - } - - @Override - public void onAttach(Activity activity) { - super.onAttach(activity); - - // This makes sure that the container activity has implemented - // the callback interface. If not, it throws an exception. - try { - stateProvider = (MenuStateProvider) activity; - } catch (ClassCastException e) { - throw new ClassCastException(activity + - " must implement MenuStateProvider"); - } - } - - private MediaEngine getEngine() { - return stateProvider.getEngine(); - } - -}
\ No newline at end of file diff --git a/webrtc/examples/android/media_demo/src/org/webrtc/webrtcdemo/CodecInst.java b/webrtc/examples/android/media_demo/src/org/webrtc/webrtcdemo/CodecInst.java deleted file mode 100644 index 133d63926b..0000000000 --- a/webrtc/examples/android/media_demo/src/org/webrtc/webrtcdemo/CodecInst.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. - * - * Use of this source code is governed by a BSD-style license - * that can be found in the LICENSE file in the root of the source - * tree. An additional intellectual property rights grant can be found - * in the file PATENTS. All contributing project authors may - * be found in the AUTHORS file in the root of the source tree. - */ - -package org.webrtc.webrtcdemo; - -public class CodecInst { - private final long nativeCodecInst; - - // CodecInst can only be created from the native layer. - private CodecInst(long nativeCodecInst) { - this.nativeCodecInst = nativeCodecInst; - } - - public String toString() { - return name() + " " + - "PlType: " + plType() + " " + - "PlFreq: " + plFrequency() + " " + - "Size: " + pacSize() + " " + - "Channels: " + channels() + " " + - "Rate: " + rate(); - } - - // Dispose must be called before all references to CodecInst are lost as it - // will free memory allocated in the native layer. - public native void dispose(); - public native int plType(); - public native String name(); - public native int plFrequency(); - public native int pacSize(); - public native int channels(); - public native int rate(); -}
\ No newline at end of file diff --git a/webrtc/examples/android/media_demo/src/org/webrtc/webrtcdemo/MainMenuFragment.java b/webrtc/examples/android/media_demo/src/org/webrtc/webrtcdemo/MainMenuFragment.java deleted file mode 100644 index 793d784043..0000000000 --- a/webrtc/examples/android/media_demo/src/org/webrtc/webrtcdemo/MainMenuFragment.java +++ /dev/null @@ -1,123 +0,0 @@ -/* - * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. - * - * Use of this source code is governed by a BSD-style license - * that can be found in the LICENSE file in the root of the source - * tree. An additional intellectual property rights grant can be found - * in the file PATENTS. All contributing project authors may - * be found in the AUTHORS file in the root of the source tree. - */ - -package org.webrtc.webrtcdemo; - -import android.app.Activity; -import android.app.Fragment; -import android.os.Bundle; -import android.util.Log; -import android.view.LayoutInflater; -import android.view.SurfaceView; -import android.view.View; -import android.view.ViewGroup; -import android.widget.Button; -import android.widget.LinearLayout; -import android.widget.TextView; - -public class MainMenuFragment extends Fragment implements MediaEngineObserver { - - private String TAG; - private MenuStateProvider stateProvider; - - private Button btStartStopCall; - private TextView tvStats; - - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { - View v = inflater.inflate(R.layout.mainmenu, container, false); - - TAG = getResources().getString(R.string.tag); - - Button btStats = (Button) v.findViewById(R.id.btStats); - boolean stats = getResources().getBoolean(R.bool.stats_enabled_default); - enableStats(btStats, stats); - btStats.setOnClickListener(new View.OnClickListener() { - public void onClick(View button) { - boolean turnOnStats = ((Button) button).getText().equals( - getResources().getString(R.string.statsOn)); - enableStats((Button) button, turnOnStats); - } - }); - tvStats = (TextView) v.findViewById(R.id.tvStats); - - btStartStopCall = (Button) v.findViewById(R.id.btStartStopCall); - btStartStopCall.setText(getEngine().isRunning() ? - R.string.stopCall : - R.string.startCall); - btStartStopCall.setOnClickListener(new View.OnClickListener() { - public void onClick(View button) { - toggleStart(); - } - }); - return v; - } - - @Override - public void onAttach(Activity activity) { - super.onAttach(activity); - - // This makes sure that the container activity has implemented - // the callback interface. If not, it throws an exception. - try { - stateProvider = (MenuStateProvider) activity; - } catch (ClassCastException e) { - throw new ClassCastException(activity + - " must implement MenuStateProvider"); - } - } - - // tvStats need to be updated on the UI thread. - public void newStats(final String stats) { - getActivity().runOnUiThread(new Runnable() { - public void run() { - tvStats.setText(stats); - } - }); - } - - private MediaEngine getEngine() { - return stateProvider.getEngine(); - } - - private void enableStats(Button btStats, boolean enable) { - if (enable) { - getEngine().setObserver(this); - } else { - getEngine().setObserver(null); - // Clear old stats text by posting empty stats. - newStats(""); - } - // If stats was true it was just turned on. This means that - // clicking the button again should turn off stats. - btStats.setText(enable ? R.string.statsOff : R.string.statsOn); - } - - - public void toggleStart() { - if (getEngine().isRunning()) { - stopAll(); - } else { - startCall(); - } - btStartStopCall.setText(getEngine().isRunning() ? - R.string.stopCall : - R.string.startCall); - } - - public void stopAll() { - getEngine().stop(); - } - - private void startCall() { - getEngine().start(); - } -}
\ No newline at end of file diff --git a/webrtc/examples/android/media_demo/src/org/webrtc/webrtcdemo/MediaEngine.java b/webrtc/examples/android/media_demo/src/org/webrtc/webrtcdemo/MediaEngine.java deleted file mode 100644 index a7036914ff..0000000000 --- a/webrtc/examples/android/media_demo/src/org/webrtc/webrtcdemo/MediaEngine.java +++ /dev/null @@ -1,321 +0,0 @@ -/* - * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. - * - * Use of this source code is governed by a BSD-style license - * that can be found in the LICENSE file in the root of the source - * tree. An additional intellectual property rights grant can be found - * in the file PATENTS. All contributing project authors may - * be found in the AUTHORS file in the root of the source tree. - */ - -package org.webrtc.webrtcdemo; - -import android.app.AlertDialog; -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.DialogInterface; -import android.content.Intent; -import android.content.IntentFilter; -import android.media.AudioManager; -import android.os.Environment; -import android.util.Log; -import android.view.OrientationEventListener; -import java.io.File; - -public class MediaEngine { - private static final String LOG_DIR = "webrtc"; - - // Checks for and communicate failures to user (logcat and popup). - private void check(boolean value, String message) { - if (value) { - return; - } - Log.e("WEBRTC-CHECK", message); - AlertDialog alertDialog = new AlertDialog.Builder(context).create(); - alertDialog.setTitle("WebRTC Error"); - alertDialog.setMessage(message); - alertDialog.setButton(DialogInterface.BUTTON_POSITIVE, - "OK", - new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - return; - } - } - ); - alertDialog.show(); - } - - - // Shared Audio/Video members. - private final Context context; - private String remoteIp; - private boolean enableTrace; - - // Audio - private VoiceEngine voe; - private int audioChannel; - private boolean audioEnabled; - private boolean voeRunning; - private int audioCodecIndex; - private int audioTxPort; - private int audioRxPort; - - private boolean speakerEnabled; - private boolean headsetPluggedIn; - private boolean enableAgc; - private boolean enableNs; - private boolean enableAecm; - - private BroadcastReceiver headsetListener; - - private boolean audioRtpDump; - private boolean apmRecord; - - private int inFps; - private int inKbps; - private int outFps; - private int outKbps; - private int inWidth; - private int inHeight; - - public MediaEngine(Context context) { - this.context = context; - voe = new VoiceEngine(); - check(voe.init() == 0, "Failed voe Init"); - audioChannel = voe.createChannel(); - check(audioChannel >= 0, "Failed voe CreateChannel"); - check(audioChannel >= 0, "Failed voe CreateChannel"); - - check(voe.setAecmMode(VoiceEngine.AecmModes.SPEAKERPHONE, false) == 0, - "VoE set Aecm speakerphone mode failed"); - - // Set audio mode to communication - AudioManager audioManager = - ((AudioManager) context.getSystemService(Context.AUDIO_SERVICE)); - audioManager.setMode(AudioManager.MODE_IN_COMMUNICATION); - // Listen to headset being plugged in/out. - IntentFilter receiverFilter = new IntentFilter(Intent.ACTION_HEADSET_PLUG); - headsetListener = new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - if (intent.getAction().compareTo(Intent.ACTION_HEADSET_PLUG) == 0) { - headsetPluggedIn = intent.getIntExtra("state", 0) == 1; - updateAudioOutput(); - } - } - }; - context.registerReceiver(headsetListener, receiverFilter); - } - - public void dispose() { - check(!voeRunning && !voeRunning, "Engines must be stopped before dispose"); - context.unregisterReceiver(headsetListener); - check(voe.deleteChannel(audioChannel) == 0, "VoE delete channel failed"); - voe.dispose(); - } - - public void start() { - if (audioEnabled) { - startVoE(); - } - } - - public void stop() { - stopVoe(); - } - - public boolean isRunning() { - return voeRunning; - } - - public void setRemoteIp(String remoteIp) { - this.remoteIp = remoteIp; - UpdateSendDestination(); - } - - public String remoteIp() { return remoteIp; } - - private String getDebugDirectory() { - // Should create a folder in /scard/|LOG_DIR| - return Environment.getExternalStorageDirectory().toString() + "/" + - LOG_DIR; - } - - private boolean createDebugDirectory() { - File webrtc_dir = new File(getDebugDirectory()); - if (!webrtc_dir.exists()) { - return webrtc_dir.mkdir(); - } - return webrtc_dir.isDirectory(); - } - - public void startVoE() { - check(!voeRunning, "VoE already started"); - check(voe.startListen(audioChannel) == 0, "Failed StartListen"); - check(voe.startPlayout(audioChannel) == 0, "VoE start playout failed"); - check(voe.startSend(audioChannel) == 0, "VoE start send failed"); - voeRunning = true; - } - - private void stopVoe() { - check(voeRunning, "VoE not started"); - check(voe.stopSend(audioChannel) == 0, "VoE stop send failed"); - check(voe.stopPlayout(audioChannel) == 0, "VoE stop playout failed"); - check(voe.stopListen(audioChannel) == 0, "VoE stop listen failed"); - voeRunning = false; - } - - public void setAudio(boolean audioEnabled) { - this.audioEnabled = audioEnabled; - } - - public boolean audioEnabled() { return audioEnabled; } - - public int audioCodecIndex() { return audioCodecIndex; } - - public void setAudioCodec(int codecNumber) { - audioCodecIndex = codecNumber; - CodecInst codec = voe.getCodec(codecNumber); - check(voe.setSendCodec(audioChannel, codec) == 0, "Failed setSendCodec"); - codec.dispose(); - } - - public String[] audioCodecsAsString() { - String[] retVal = new String[voe.numOfCodecs()]; - for (int i = 0; i < voe.numOfCodecs(); ++i) { - CodecInst codec = voe.getCodec(i); - retVal[i] = codec.toString(); - codec.dispose(); - } - return retVal; - } - - private CodecInst[] defaultAudioCodecs() { - CodecInst[] retVal = new CodecInst[voe.numOfCodecs()]; - for (int i = 0; i < voe.numOfCodecs(); ++i) { - retVal[i] = voe.getCodec(i); - } - return retVal; - } - - public int getIsacIndex() { - CodecInst[] codecs = defaultAudioCodecs(); - for (int i = 0; i < codecs.length; ++i) { - if (codecs[i].name().contains("ISAC")) { - return i; - } - } - return 0; - } - - public void setAudioTxPort(int audioTxPort) { - this.audioTxPort = audioTxPort; - UpdateSendDestination(); - } - - public int audioTxPort() { return audioTxPort; } - - public void setAudioRxPort(int audioRxPort) { - check(voe.setLocalReceiver(audioChannel, audioRxPort) == 0, - "Failed setLocalReceiver"); - this.audioRxPort = audioRxPort; - } - - public int audioRxPort() { return audioRxPort; } - - public boolean agcEnabled() { return enableAgc; } - - public void setAgc(boolean enable) { - enableAgc = enable; - VoiceEngine.AgcConfig agc_config = - new VoiceEngine.AgcConfig(3, 9, true); - check(voe.setAgcConfig(agc_config) == 0, "VoE set AGC Config failed"); - check(voe.setAgcStatus(enableAgc, VoiceEngine.AgcModes.FIXED_DIGITAL) == 0, - "VoE set AGC Status failed"); - } - - public boolean nsEnabled() { return enableNs; } - - public void setNs(boolean enable) { - enableNs = enable; - check(voe.setNsStatus(enableNs, - VoiceEngine.NsModes.MODERATE_SUPPRESSION) == 0, - "VoE set NS Status failed"); - } - - public boolean aecmEnabled() { return enableAecm; } - - public void setEc(boolean enable) { - enableAecm = enable; - check(voe.setEcStatus(enable, VoiceEngine.EcModes.AECM) == 0, - "voe setEcStatus"); - } - - public boolean speakerEnabled() { - return speakerEnabled; - } - - public void setSpeaker(boolean enable) { - speakerEnabled = enable; - updateAudioOutput(); - } - - // Debug helpers. - public boolean apmRecord() { return apmRecord; } - - public boolean audioRtpDump() { return audioRtpDump; } - - public void setDebuging(boolean enable) { - apmRecord = enable; - if (!enable) { - check(voe.stopDebugRecording() == 0, "Failed stopping debug"); - return; - } - if (!createDebugDirectory()) { - check(false, "Unable to create debug directory."); - return; - } - String debugDirectory = getDebugDirectory(); - check(voe.startDebugRecording(debugDirectory + String.format("/apm_%d.dat", - System.currentTimeMillis())) == 0, - "Failed starting debug"); - } - - public void setIncomingVoeRtpDump(boolean enable) { - audioRtpDump = enable; - if (!enable) { - check(voe.stopRtpDump(audioChannel, - VoiceEngine.RtpDirections.INCOMING) == 0, - "voe stopping rtp dump"); - return; - } - String debugDirectory = getDebugDirectory(); - check(voe.startRtpDump(audioChannel, debugDirectory + - String.format("/voe_%d.rtp", System.currentTimeMillis()), - VoiceEngine.RtpDirections.INCOMING) == 0, - "voe starting rtp dump"); - } - - private void updateAudioOutput() { - boolean useSpeaker = !headsetPluggedIn && speakerEnabled; - AudioManager audioManager = - ((AudioManager) context.getSystemService(Context.AUDIO_SERVICE)); - audioManager.setSpeakerphoneOn(useSpeaker); - } - - private void UpdateSendDestination() { - if (remoteIp == null) { - return; - } - if (audioTxPort != 0) { - check(voe.setSendDestination(audioChannel, audioTxPort, - remoteIp) == 0, "VoE set send destination failed"); - } - } - - MediaEngineObserver observer; - public void setObserver(MediaEngineObserver observer) { - this.observer = observer; - } -} diff --git a/webrtc/examples/android/media_demo/src/org/webrtc/webrtcdemo/MediaEngineObserver.java b/webrtc/examples/android/media_demo/src/org/webrtc/webrtcdemo/MediaEngineObserver.java deleted file mode 100644 index 3ea91b5e92..0000000000 --- a/webrtc/examples/android/media_demo/src/org/webrtc/webrtcdemo/MediaEngineObserver.java +++ /dev/null @@ -1,15 +0,0 @@ -/* - * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. - * - * Use of this source code is governed by a BSD-style license - * that can be found in the LICENSE file in the root of the source - * tree. An additional intellectual property rights grant can be found - * in the file PATENTS. All contributing project authors may - * be found in the AUTHORS file in the root of the source tree. - */ - -package org.webrtc.webrtcdemo; - -public interface MediaEngineObserver { - void newStats(String stats); -}
\ No newline at end of file diff --git a/webrtc/examples/android/media_demo/src/org/webrtc/webrtcdemo/MenuStateProvider.java b/webrtc/examples/android/media_demo/src/org/webrtc/webrtcdemo/MenuStateProvider.java deleted file mode 100644 index 08cb508667..0000000000 --- a/webrtc/examples/android/media_demo/src/org/webrtc/webrtcdemo/MenuStateProvider.java +++ /dev/null @@ -1,15 +0,0 @@ -/* - * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. - * - * Use of this source code is governed by a BSD-style license - * that can be found in the LICENSE file in the root of the source - * tree. An additional intellectual property rights grant can be found - * in the file PATENTS. All contributing project authors may - * be found in the AUTHORS file in the root of the source tree. - */ - -package org.webrtc.webrtcdemo; - -public interface MenuStateProvider { - public MediaEngine getEngine(); -}
\ No newline at end of file diff --git a/webrtc/examples/android/media_demo/src/org/webrtc/webrtcdemo/NativeWebRtcContextRegistry.java b/webrtc/examples/android/media_demo/src/org/webrtc/webrtcdemo/NativeWebRtcContextRegistry.java deleted file mode 100644 index 3d4f00a4f6..0000000000 --- a/webrtc/examples/android/media_demo/src/org/webrtc/webrtcdemo/NativeWebRtcContextRegistry.java +++ /dev/null @@ -1,22 +0,0 @@ -/* - * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. - * - * Use of this source code is governed by a BSD-style license - * that can be found in the LICENSE file in the root of the source - * tree. An additional intellectual property rights grant can be found - * in the file PATENTS. All contributing project authors may - * be found in the AUTHORS file in the root of the source tree. - */ - -package org.webrtc.webrtcdemo; - -import android.content.Context; - -public class NativeWebRtcContextRegistry { - static { - System.loadLibrary("webrtcdemo-jni"); - } - - public native void register(Context context); - public native void unRegister(); -}
\ No newline at end of file diff --git a/webrtc/examples/android/media_demo/src/org/webrtc/webrtcdemo/RtcpStatistics.java b/webrtc/examples/android/media_demo/src/org/webrtc/webrtcdemo/RtcpStatistics.java deleted file mode 100644 index dbe817b1af..0000000000 --- a/webrtc/examples/android/media_demo/src/org/webrtc/webrtcdemo/RtcpStatistics.java +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. - * - * Use of this source code is governed by a BSD-style license - * that can be found in the LICENSE file in the root of the source - * tree. An additional intellectual property rights grant can be found - * in the file PATENTS. All contributing project authors may - * be found in the AUTHORS file in the root of the source tree. - */ - -package org.webrtc.webrtcdemo; - -public class RtcpStatistics { - // Definition of fraction lost can be found in RFC3550. - // It is equivalent to taking the integer part after multiplying the loss - // fraction by 256. - public final int fractionLost; - public final int cumulativeLost; - public final int extendedMax; - public final int jitter; - public final int rttMs; - - // Only allowed to be created by the native layer. - private RtcpStatistics(int fractionLost, int cumulativeLost, int extendedMax, - int jitter, int rttMs) { - this.fractionLost = fractionLost; - this.cumulativeLost = cumulativeLost; - this.extendedMax = extendedMax; - this.jitter = jitter; - this.rttMs = rttMs; - } -}
\ No newline at end of file diff --git a/webrtc/examples/android/media_demo/src/org/webrtc/webrtcdemo/SettingsMenuFragment.java b/webrtc/examples/android/media_demo/src/org/webrtc/webrtcdemo/SettingsMenuFragment.java deleted file mode 100644 index 761f96ce29..0000000000 --- a/webrtc/examples/android/media_demo/src/org/webrtc/webrtcdemo/SettingsMenuFragment.java +++ /dev/null @@ -1,129 +0,0 @@ -/* - * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. - * - * Use of this source code is governed by a BSD-style license - * that can be found in the LICENSE file in the root of the source - * tree. An additional intellectual property rights grant can be found - * in the file PATENTS. All contributing project authors may - * be found in the AUTHORS file in the root of the source tree. - */ - -package org.webrtc.webrtcdemo; - -import android.app.Activity; -import android.app.Fragment; -import android.os.Bundle; -import android.util.Log; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.CheckBox; -import android.widget.EditText; -import android.widget.RadioGroup; -import android.widget.TextView; -import java.net.InetAddress; -import java.net.NetworkInterface; -import java.net.SocketException; -import java.util.Enumeration; - -public class SettingsMenuFragment extends Fragment - implements RadioGroup.OnCheckedChangeListener { - - private String TAG; - private MenuStateProvider stateProvider; - - EditText etRemoteIp; - - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { - View v = inflater.inflate(R.layout.settingsmenu, container, false); - - TAG = getResources().getString(R.string.tag); - - CheckBox cbAudio = (CheckBox) v.findViewById(R.id.cbAudio); - cbAudio.setChecked(getEngine().audioEnabled()); - cbAudio.setOnClickListener(new View.OnClickListener() { - public void onClick(View checkBox) { - CheckBox cbAudio = (CheckBox) checkBox; - getEngine().setAudio(cbAudio.isChecked()); - cbAudio.setChecked(getEngine().audioEnabled()); - } - }); - boolean loopback = - getResources().getBoolean(R.bool.loopback_enabled_default); - CheckBox cbLoopback = (CheckBox) v.findViewById(R.id.cbLoopback); - cbLoopback.setChecked(loopback); - cbLoopback.setOnClickListener(new View.OnClickListener() { - public void onClick(View checkBox) { - loopbackChanged((CheckBox) checkBox); - } - }); - etRemoteIp = (EditText) v.findViewById(R.id.etRemoteIp); - etRemoteIp.setOnFocusChangeListener(new View.OnFocusChangeListener() { - public void onFocusChange(View editText, boolean hasFocus) { - if (!hasFocus) { - getEngine().setRemoteIp(etRemoteIp.getText().toString()); - } - } - }); - // Has to be after remote IP as loopback changes it. - loopbackChanged(cbLoopback); - return v; - } - - @Override - public void onAttach(Activity activity) { - super.onAttach(activity); - - // This makes sure that the container activity has implemented - // the callback interface. If not, it throws an exception. - try { - stateProvider = (MenuStateProvider) activity; - } catch (ClassCastException e) { - throw new ClassCastException(activity + - " must implement MenuStateProvider"); - } - } - - private void loopbackChanged(CheckBox cbLoopback) { - boolean loopback = cbLoopback.isChecked(); - etRemoteIp.setText(loopback ? getLoopbackIPString() : getLocalIpAddress()); - getEngine().setRemoteIp(etRemoteIp.getText().toString()); - } - - private String getLoopbackIPString() { - return getResources().getString(R.string.loopbackIp); - } - - private String getLocalIpAddress() { - String localIp = ""; - try { - for (Enumeration<NetworkInterface> en = NetworkInterface - .getNetworkInterfaces(); en.hasMoreElements();) { - NetworkInterface intf = en.nextElement(); - for (Enumeration<InetAddress> enumIpAddr = - intf.getInetAddresses(); - enumIpAddr.hasMoreElements(); ) { - InetAddress inetAddress = enumIpAddr.nextElement(); - if (!inetAddress.isLoopbackAddress()) { - // Set the remote ip address the same as - // the local ip address of the last netif - localIp = inetAddress.getHostAddress().toString(); - } - } - } - } catch (SocketException e) { - Log.e(TAG, "Unable to get local IP address. Not the end of the world", e); - } - return localIp; - } - - private MediaEngine getEngine() { - return stateProvider.getEngine(); - } - - @Override - public void onCheckedChanged(RadioGroup group, int checkedId) { - } -}
\ No newline at end of file diff --git a/webrtc/examples/android/media_demo/src/org/webrtc/webrtcdemo/SpinnerAdapter.java b/webrtc/examples/android/media_demo/src/org/webrtc/webrtcdemo/SpinnerAdapter.java deleted file mode 100644 index fb04a7aac3..0000000000 --- a/webrtc/examples/android/media_demo/src/org/webrtc/webrtcdemo/SpinnerAdapter.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. - * - * Use of this source code is governed by a BSD-style license - * that can be found in the LICENSE file in the root of the source - * tree. An additional intellectual property rights grant can be found - * in the file PATENTS. All contributing project authors may - * be found in the AUTHORS file in the root of the source tree. - */ - -package org.webrtc.webrtcdemo; - -import android.widget.ArrayAdapter; -import android.content.Context; -import android.widget.TextView; -import android.view.View; -import android.view.ViewGroup; -import android.view.LayoutInflater; - -public class SpinnerAdapter extends ArrayAdapter<String> { - private String[] menuItems; - LayoutInflater inflater; - int textViewResourceId; - - public SpinnerAdapter(Context context, int textViewResourceId, - String[] objects, LayoutInflater inflater) { - super(context, textViewResourceId, objects); - menuItems = objects; - this.inflater = inflater; - this.textViewResourceId = textViewResourceId; - } - - @Override public View getDropDownView(int position, View convertView, - ViewGroup parent) { - return getCustomView(position, convertView, parent); - } - - @Override public View getView(int position, View convertView, - ViewGroup parent) { - return getCustomView(position, convertView, parent); - } - - private View getCustomView(int position, View v, ViewGroup parent) { - View row = inflater.inflate(textViewResourceId, parent, false); - TextView label = (TextView) row.findViewById(R.id.spinner_row); - label.setText(menuItems[position]); - return row; - } -}
\ No newline at end of file diff --git a/webrtc/examples/android/media_demo/src/org/webrtc/webrtcdemo/VoiceEngine.java b/webrtc/examples/android/media_demo/src/org/webrtc/webrtcdemo/VoiceEngine.java deleted file mode 100644 index 900355ad8e..0000000000 --- a/webrtc/examples/android/media_demo/src/org/webrtc/webrtcdemo/VoiceEngine.java +++ /dev/null @@ -1,117 +0,0 @@ -/* - * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. - * - * Use of this source code is governed by a BSD-style license - * that can be found in the LICENSE file in the root of the source - * tree. An additional intellectual property rights grant can be found - * in the file PATENTS. All contributing project authors may - * be found in the AUTHORS file in the root of the source tree. - */ - -package org.webrtc.webrtcdemo; - -public class VoiceEngine { - private final long nativeVoiceEngine; - - // Keep in sync (including this comment) with - // webrtc/common_types.h:NsModes - public enum NsModes { - UNCHANGED, DEFAULT, CONFERENCE, LOW_SUPPRESSION, - MODERATE_SUPPRESSION, HIGH_SUPPRESSION, VERY_HIGH_SUPPRESSION - } - - // Keep in sync (including this comment) with - // webrtc/common_types.h:AgcModes - public enum AgcModes { - UNCHANGED, DEFAULT, ADAPTIVE_ANALOG, ADAPTIVE_DIGITAL, - FIXED_DIGITAL - } - - // Keep in sync (including this comment) with - // webrtc/common_types.h:AecmModes - public enum AecmModes { - QUIET_EARPIECE_OR_HEADSET, EARPIECE, LOUD_EARPIECE, - SPEAKERPHONE, LOUD_SPEAKERPHONE - } - - // Keep in sync (including this comment) with - // webrtc/common_types.h:EcModes - public enum EcModes { UNCHANGED, DEFAULT, CONFERENCE, AEC, AECM } - - // Keep in sync (including this comment) with - // webrtc/common_types.h:RtpDirections - public enum RtpDirections { INCOMING, OUTGOING } - - public static class AgcConfig { - AgcConfig(int targetLevelDbOv, int digitalCompressionGaindB, - boolean limiterEnable) { - this.targetLevelDbOv = targetLevelDbOv; - this.digitalCompressionGaindB = digitalCompressionGaindB; - this.limiterEnable = limiterEnable; - } - private final int targetLevelDbOv; - private final int digitalCompressionGaindB; - private final boolean limiterEnable; - } - - public VoiceEngine() { - nativeVoiceEngine = create(); - } - private static native long create(); - public native int init(); - public native void dispose(); - public native int createChannel(); - public native int deleteChannel(int channel); - public native int setLocalReceiver(int channel, int port); - public native int setSendDestination(int channel, int port, String ipaddr); - public native int startListen(int channel); - public native int startPlayout(int channel); - public native int startSend(int channel); - public native int stopListen(int channel); - public native int stopPlayout(int channel); - public native int stopSend(int channel); - public native int setSpeakerVolume(int volume); - public native int setLoudspeakerStatus(boolean enable); - public native int startPlayingFileLocally( - int channel, - String fileName, - boolean loop); - public native int stopPlayingFileLocally(int channel); - public native int startPlayingFileAsMicrophone( - int channel, - String fileName, - boolean loop); - public native int stopPlayingFileAsMicrophone(int channel); - public native int numOfCodecs(); - public native CodecInst getCodec(int index); - public native int setSendCodec(int channel, CodecInst codec); - public int setEcStatus(boolean enable, EcModes mode) { - return setEcStatus(enable, mode.ordinal()); - } - private native int setEcStatus(boolean enable, int ec_mode); - public int setAecmMode(AecmModes aecm_mode, boolean cng) { - return setAecmMode(aecm_mode.ordinal(), cng); - } - private native int setAecmMode(int aecm_mode, boolean cng); - public int setAgcStatus(boolean enable, AgcModes agc_mode) { - return setAgcStatus(enable, agc_mode.ordinal()); - } - private native int setAgcStatus(boolean enable, int agc_mode); - public native int setAgcConfig(AgcConfig agc_config); - public int setNsStatus(boolean enable, NsModes ns_mode) { - return setNsStatus(enable, ns_mode.ordinal()); - } - private native int setNsStatus(boolean enable, int ns_mode); - public native int startDebugRecording(String file); - public native int stopDebugRecording(); - public int startRtpDump(int channel, String file, - RtpDirections direction) { - return startRtpDump(channel, file, direction.ordinal()); - } - private native int startRtpDump(int channel, String file, - int direction); - public int stopRtpDump(int channel, RtpDirections direction) { - return stopRtpDump(channel, direction.ordinal()); - } - private native int stopRtpDump(int channel, int direction); -}
\ No newline at end of file diff --git a/webrtc/examples/android/media_demo/src/org/webrtc/webrtcdemo/WebRTCDemo.java b/webrtc/examples/android/media_demo/src/org/webrtc/webrtcdemo/WebRTCDemo.java deleted file mode 100644 index 3b972cf126..0000000000 --- a/webrtc/examples/android/media_demo/src/org/webrtc/webrtcdemo/WebRTCDemo.java +++ /dev/null @@ -1,210 +0,0 @@ -/* - * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. - * - * Use of this source code is governed by a BSD-style license - * that can be found in the LICENSE file in the root of the source - * tree. An additional intellectual property rights grant can be found - * in the file PATENTS. All contributing project authors may - * be found in the AUTHORS file in the root of the source tree. - */ - -package org.webrtc.webrtcdemo; - -import android.app.ActionBar.Tab; -import android.app.ActionBar.TabListener; -import android.app.ActionBar; -import android.app.Activity; -import android.app.Fragment; -import android.app.FragmentTransaction; -import android.content.pm.ActivityInfo; -import android.media.AudioManager; -import android.os.Bundle; -import android.os.Handler; -import android.view.KeyEvent; -import android.view.Menu; -import android.view.MenuInflater; -import android.view.MenuItem; -import android.view.WindowManager; - -public class WebRTCDemo extends Activity implements MenuStateProvider { - - // From http://developer.android.com/guide/topics/ui/actionbar.html - public static class TabListener<T extends Fragment> - implements ActionBar.TabListener { - private Fragment fragment; - private final Activity activity; - private final String tag; - private final Class<T> instance; - private final Bundle args; - - public TabListener(Activity activity, String tag, Class<T> clz) { - this(activity, tag, clz, null); - } - - public TabListener(Activity activity, String tag, Class<T> clz, - Bundle args) { - this.activity = activity; - this.tag = tag; - this.instance = clz; - this.args = args; - } - - public void onTabSelected(Tab tab, FragmentTransaction ft) { - // Check if the fragment is already initialized - if (fragment == null) { - // If not, instantiate and add it to the activity - fragment = Fragment.instantiate(activity, instance.getName(), args); - ft.add(android.R.id.content, fragment, tag); - } else { - // If it exists, simply attach it in order to show it - ft.attach(fragment); - } - } - - public void onTabUnselected(Tab tab, FragmentTransaction ft) { - if (fragment != null) { - // Detach the fragment, because another one is being attached - ft.detach(fragment); - } - } - - public void onTabReselected(Tab tab, FragmentTransaction ft) { - // User selected the already selected tab. Do nothing. - } - } - - private NativeWebRtcContextRegistry contextRegistry = null; - private MediaEngine mediaEngine = null; - private Handler handler; - public MediaEngine getEngine() { return mediaEngine; } - - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - // Global settings. - getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); - getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); - - // State. - // Must be instantiated before MediaEngine. - contextRegistry = new NativeWebRtcContextRegistry(); - contextRegistry.register(this); - - // Load all settings dictated in xml. - mediaEngine = new MediaEngine(this); - mediaEngine.setRemoteIp(getResources().getString(R.string.loopbackIp)); - - mediaEngine.setAudio(getResources().getBoolean( - R.bool.audio_enabled_default)); - mediaEngine.setAudioCodec(mediaEngine.getIsacIndex()); - mediaEngine.setAudioRxPort(getResources().getInteger( - R.integer.aRxPortDefault)); - mediaEngine.setAudioTxPort(getResources().getInteger( - R.integer.aTxPortDefault)); - mediaEngine.setSpeaker(getResources().getBoolean( - R.bool.speaker_enabled_default)); - mediaEngine.setDebuging(getResources().getBoolean( - R.bool.apm_debug_enabled_default)); - - // Create action bar with all tabs. - ActionBar actionBar = getActionBar(); - actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); - actionBar.setDisplayShowTitleEnabled(false); - - Tab tab = actionBar.newTab() - .setText("Main") - .setTabListener(new TabListener<MainMenuFragment>( - this, "main", MainMenuFragment.class)); - actionBar.addTab(tab); - - tab = actionBar.newTab() - .setText("Settings") - .setTabListener(new TabListener<SettingsMenuFragment>( - this, "Settings", SettingsMenuFragment.class)); - actionBar.addTab(tab); - - tab = actionBar.newTab() - .setText("Audio") - .setTabListener(new TabListener<AudioMenuFragment>( - this, "Audio", AudioMenuFragment.class)); - actionBar.addTab(tab); - - enableTimedStartStop(); - - // Hint that voice call audio stream should be used for hardware volume - // controls. - setVolumeControlStream(AudioManager.STREAM_VOICE_CALL); - } - - @Override - public boolean onCreateOptionsMenu(Menu menu) { - MenuInflater inflater = getMenuInflater(); - inflater.inflate(R.menu.main_activity_actions, menu); - return super.onCreateOptionsMenu(menu); - } - - @Override - public boolean onOptionsItemSelected(MenuItem item) { - // Handle presses on the action bar items - switch (item.getItemId()) { - case R.id.action_exit: - MainMenuFragment main = (MainMenuFragment)getFragmentManager() - .findFragmentByTag("main"); - main.stopAll(); - finish(); - return true; - default: - return super.onOptionsItemSelected(item); - } - } - - @Override - public void onDestroy() { - disableTimedStartStop(); - mediaEngine.dispose(); - contextRegistry.unRegister(); - super.onDestroy(); - } - - @Override - public boolean onKeyDown(int keyCode, KeyEvent event) { - if (keyCode == KeyEvent.KEYCODE_BACK) { - // Prevent app from running in the background. - MainMenuFragment main = (MainMenuFragment)getFragmentManager() - .findFragmentByTag("main"); - main.stopAll(); - finish(); - return true; - } - return super.onKeyDown(keyCode, event); - } - - private int getCallRestartPeriodicity() { - return getResources().getInteger(R.integer.call_restart_periodicity_ms); - } - - // Thread repeatedly calling start/stop. - void enableTimedStartStop() { - if (getCallRestartPeriodicity() > 0) { - // Periodicity == 0 <-> Disabled. - handler = new Handler(); - handler.postDelayed(startOrStopCallback, getCallRestartPeriodicity()); - } - } - - void disableTimedStartStop() { - if (handler != null) { - handler.removeCallbacks(startOrStopCallback); - } - } - - private Runnable startOrStopCallback = new Runnable() { - public void run() { - MainMenuFragment main = (MainMenuFragment)getFragmentManager() - .findFragmentByTag("main"); - main.toggleStart(); - handler.postDelayed(startOrStopCallback, getCallRestartPeriodicity()); - } - }; -} |