From 5576cf97efd727348d57d144d9835c5dff449901 Mon Sep 17 00:00:00 2001 From: Guillaume Beraudo Date: Thu, 4 Aug 2011 16:13:16 +0200 Subject: [PATCH 1/4] Don't load Camera Manager on video uncapable devices. --- src/org/linphone/BandwidthManager.java | 3 ++- src/org/linphone/DialerActivity.java | 18 +++++++++++------- src/org/linphone/LinphoneManager.java | 18 +++++++++++++----- .../linphone/LinphonePreferencesActivity.java | 6 +++--- .../core/video/AndroidCameraRecordManager.java | 3 +++ 5 files changed, 32 insertions(+), 16 deletions(-) diff --git a/src/org/linphone/BandwidthManager.java b/src/org/linphone/BandwidthManager.java index 830823c5b..f5df85e87 100644 --- a/src/org/linphone/BandwidthManager.java +++ b/src/org/linphone/BandwidthManager.java @@ -23,6 +23,7 @@ import java.util.List; import org.linphone.core.LinphoneCallParams; import org.linphone.core.LinphoneCore; import org.linphone.core.Log; +import org.linphone.core.Version; import org.linphone.core.VideoSize; import org.linphone.core.video.AndroidCameraRecordManager; @@ -83,7 +84,7 @@ public class BandwidthManager { public void updateWithProfileSettings(LinphoneCore lc, LinphoneCallParams callParams) { // Setting Linphone Core Preferred Video Size boolean bandwidthOKForVideo = isVideoPossible(); - if (bandwidthOKForVideo) { + if (bandwidthOKForVideo && Version.isVideoCapable()) { AndroidCameraRecordManager acrm = AndroidCameraRecordManager.getInstance(); boolean isPortrait=acrm.isFrameToBeShownPortrait(); VideoSize targetVideoSize=maxSupportedVideoSize(isPortrait, getMaximumVideoSize(isPortrait), diff --git a/src/org/linphone/DialerActivity.java b/src/org/linphone/DialerActivity.java index c7e248e64..f92e6a6ec 100644 --- a/src/org/linphone/DialerActivity.java +++ b/src/org/linphone/DialerActivity.java @@ -24,6 +24,7 @@ import org.linphone.core.CallDirection; import org.linphone.core.LinphoneCall; import org.linphone.core.LinphoneCore; import org.linphone.core.Log; +import org.linphone.core.Version; import org.linphone.core.LinphoneCall.State; import org.linphone.core.video.AndroidCameraRecordManager; import org.linphone.ui.AddVideoButton; @@ -314,15 +315,18 @@ public class DialerActivity extends SoftVolumeActivity implements LinphoneGuiLis ((CallButton) incomingCallView.findViewById(R.id.Call)).setExternalClickListener(new OnClickListener() { public void onClick(View v) { dialog.dismiss(); - LinphoneManager.getInstance().resetCameraFromPreferences(); + if (Version.isVideoCapable()) { + LinphoneManager.getInstance().resetCameraFromPreferences(); - // Privacy setting to not share the user camera by default - boolean prefVideoEnable = LinphoneManager.getInstance().isVideoEnabled(); - boolean prefAutoShareMyCamera = mPref.getBoolean(getString(R.string.pref_video_automatically_share_my_video_key), false); - boolean videoMuted = !(prefVideoEnable && prefAutoShareMyCamera); - AndroidCameraRecordManager.getInstance().setMuted(videoMuted); + // Privacy setting to not share the user camera by default + boolean prefVideoEnable = LinphoneManager.getInstance().isVideoEnabled(); + int key = R.string.pref_video_automatically_share_my_video_key; + boolean prefAutoShareMyCamera = mPref.getBoolean(getString(key), false); + boolean videoMuted = !(prefVideoEnable && prefAutoShareMyCamera); + AndroidCameraRecordManager.getInstance().setMuted(videoMuted); - LinphoneManager.getLc().getCurrentCall().enableCamera(prefAutoShareMyCamera); + LinphoneManager.getLc().getCurrentCall().enableCamera(prefAutoShareMyCamera); + } } }); ((HangCallButton) incomingCallView.findViewById(R.id.Decline)).setExternalClickListener(new OnClickListener() { diff --git a/src/org/linphone/LinphoneManager.java b/src/org/linphone/LinphoneManager.java index 107bbb9e7..6c2178d8b 100644 --- a/src/org/linphone/LinphoneManager.java +++ b/src/org/linphone/LinphoneManager.java @@ -130,7 +130,9 @@ public final class LinphoneManager implements LinphoneCoreListener { mPowerManager = (PowerManager) c.getSystemService(Context.POWER_SERVICE); mR = c.getResources(); - AndroidCameraRecordManager.getInstance().startOrientationSensor(c.getApplicationContext()); + if (Version.isVideoCapable()) { + AndroidCameraRecordManager.getInstance().startOrientationSensor(c.getApplicationContext()); + } } private static final int LINPHONE_VOLUME_STREAM = STREAM_VOICE_CALL; @@ -241,10 +243,16 @@ public final class LinphoneManager implements LinphoneCoreListener { lAddress.setDisplayName(address.getDisplayedName()); try { - boolean prefVideoEnable = isVideoEnabled(); - boolean prefInitiateWithVideo = mPref.getBoolean(mR.getString(R.string.pref_video_initiate_call_with_video_key), false); - resetCameraFromPreferences(); - CallManager.getInstance().inviteAddress(lAddress, prefVideoEnable && prefInitiateWithVideo); + if (Version.isVideoCapable()) { + boolean prefVideoEnable = isVideoEnabled(); + int key = R.string.pref_video_initiate_call_with_video_key; + boolean prefInitiateWithVideo = mPref.getBoolean(mR.getString(key), false); + resetCameraFromPreferences(); + CallManager.getInstance().inviteAddress(lAddress, prefVideoEnable && prefInitiateWithVideo); + } else { + CallManager.getInstance().inviteAddress(lAddress, false); + } + } catch (LinphoneCoreException e) { serviceListener.tryingNewOutgoingCallButCannotGetCallParameters(); diff --git a/src/org/linphone/LinphonePreferencesActivity.java b/src/org/linphone/LinphonePreferencesActivity.java index ea2084c65..92dc31205 100644 --- a/src/org/linphone/LinphonePreferencesActivity.java +++ b/src/org/linphone/LinphonePreferencesActivity.java @@ -98,6 +98,8 @@ public class LinphonePreferencesActivity extends PreferenceActivity implements E // No video if (!Version.isVideoCapable()) { uncheckAndDisableCheckbox(pref_video_enable_key); + } else if (!AndroidCameraRecordManager.getInstance().hasFrontCamera()) { + uncheckDisableAndHideCheckbox(R.string.pref_video_use_front_camera_key); } if (prefs().getBoolean(LinphoneActivity.PREF_FIRST_LAUNCH,true)) { if (fastCpu) { @@ -110,9 +112,7 @@ public class LinphonePreferencesActivity extends PreferenceActivity implements E detectVideoCodec(R.string.pref_video_codec_h264_key, "H264"); - if (!AndroidCameraRecordManager.getInstance().hasFrontCamera()) { - uncheckDisableAndHideCheckbox(R.string.pref_video_use_front_camera_key); - } + if (Hacks.needSoftvolume()) checkAndDisableCheckbox(R.string.pref_audio_soft_volume_key); } diff --git a/src/org/linphone/core/video/AndroidCameraRecordManager.java b/src/org/linphone/core/video/AndroidCameraRecordManager.java index 22f437d21..7e8e8b613 100644 --- a/src/org/linphone/core/video/AndroidCameraRecordManager.java +++ b/src/org/linphone/core/video/AndroidCameraRecordManager.java @@ -67,6 +67,9 @@ public class AndroidCameraRecordManager { // singleton private AndroidCameraRecordManager() { + if (!Version.isVideoCapable()) { // imply sdk>=5 + throw new RuntimeException("AndroidCameraRecordManager: hardware is not video capable"); + } cc = Version.sdkAboveOrEqual(9) ? new AndroidCameraConf9() : new AndroidCameraConf5(); Log.i("=== Detected " + cc.getFoundCameras()+ " ==="); cameraId = cc.getFoundCameras().defaultC; From 93fb9392456012415117bdfedb2a1b7fecbf2033 Mon Sep 17 00:00:00 2001 From: Guillaume Beraudo Date: Fri, 5 Aug 2011 10:02:32 +0200 Subject: [PATCH 2/4] Fix test of video capability --- src/org/linphone/LinphoneManager.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/org/linphone/LinphoneManager.java b/src/org/linphone/LinphoneManager.java index 6c2178d8b..6a2f14cef 100644 --- a/src/org/linphone/LinphoneManager.java +++ b/src/org/linphone/LinphoneManager.java @@ -129,10 +129,6 @@ public final class LinphoneManager implements LinphoneCoreListener { mPref = PreferenceManager.getDefaultSharedPreferences(c); mPowerManager = (PowerManager) c.getSystemService(Context.POWER_SERVICE); mR = c.getResources(); - - if (Version.isVideoCapable()) { - AndroidCameraRecordManager.getInstance().startOrientationSensor(c.getApplicationContext()); - } } private static final int LINPHONE_VOLUME_STREAM = STREAM_VOICE_CALL; @@ -205,6 +201,9 @@ public final class LinphoneManager implements LinphoneCoreListener { instance = new LinphoneManager(c); instance.serviceListener = listener; instance.startLibLinphone(c); + if (Version.isVideoCapable()) { + AndroidCameraRecordManager.getInstance().startOrientationSensor(c.getApplicationContext()); + } return instance; } From 8432509fae6feb54f896cb8ece10b75777a4d3b7 Mon Sep 17 00:00:00 2001 From: Guillaume Beraudo Date: Fri, 5 Aug 2011 16:15:24 +0200 Subject: [PATCH 3/4] Conventien method to sleep. --- src/org/linphone/core/Hacks.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/org/linphone/core/Hacks.java b/src/org/linphone/core/Hacks.java index fd9342827..ceca9ee80 100644 --- a/src/org/linphone/core/Hacks.java +++ b/src/org/linphone/core/Hacks.java @@ -89,7 +89,7 @@ public final class Hacks { sleep(200); } - private static final void sleep(int time) { + public static final void sleep(int time) { try { Thread.sleep(time); } catch(InterruptedException ie){} From 54ef1fce4a71b1a9a5f669e67491ff0d8844a2f8 Mon Sep 17 00:00:00 2001 From: Guillaume Beraudo Date: Fri, 5 Aug 2011 16:15:59 +0200 Subject: [PATCH 4/4] Fix hack to workaround Galaxy S speaker/mic issue. --- src/org/linphone/LinphoneManager.java | 28 ++++++++++++++------------- submodules/linphone | 2 +- 2 files changed, 16 insertions(+), 14 deletions(-) diff --git a/src/org/linphone/LinphoneManager.java b/src/org/linphone/LinphoneManager.java index 6a2f14cef..20fa2897f 100644 --- a/src/org/linphone/LinphoneManager.java +++ b/src/org/linphone/LinphoneManager.java @@ -144,15 +144,12 @@ public final class LinphoneManager implements LinphoneCoreListener { private BroadcastReceiver mKeepAliveReceiver = new KeepAliveReceiver(); - private synchronized void routeAudioToSpeakerHelper(boolean speakerOn) { - LinphoneCall call = mLc.getCurrentCall(); - boolean paused = false; - if (call != null && call.getState() == State.StreamsRunning && Hacks.needPausingCallForSpeakers()) { - Log.d("Hack pausing call to have speaker=",speakerOn); - mLc.pauseCall(call); - paused = true; - } - + private native void hackSpeakerState(boolean speakerOn); + @SuppressWarnings("unused") + private static void sRouteAudioToSpeakerHelperHelper(boolean speakerOn) { + getInstance().routeAudioToSpeakerHelperHelper(speakerOn); + } + private void routeAudioToSpeakerHelperHelper(boolean speakerOn) { if (Hacks.needGalaxySAudioHack() || lpm.useGalaxySHack()) setAudioModeIncallForGalaxyS(); @@ -167,12 +164,17 @@ public final class LinphoneManager implements LinphoneCoreListener { } else { mAudioManager.setSpeakerphoneOn(speakerOn); } - - if (paused) { - Log.d("Hack resuming call to have speaker=",speakerOn); - mLc.resumeCall(call); + } + private synchronized void routeAudioToSpeakerHelper(boolean speakerOn) { + final LinphoneCall call = mLc.getCurrentCall(); + if (call != null && call.getState() == State.StreamsRunning && Hacks.needPausingCallForSpeakers()) { + Log.d("Hack to have speaker=",speakerOn," while on call"); + hackSpeakerState(speakerOn); + } else { + routeAudioToSpeakerHelperHelper(speakerOn); } } + public void routeAudioToSpeaker() { routeAudioToSpeakerHelper(true); diff --git a/submodules/linphone b/submodules/linphone index 743ef7d0c..68df42b29 160000 --- a/submodules/linphone +++ b/submodules/linphone @@ -1 +1 @@ -Subproject commit 743ef7d0cf511161ff4c2300315df775e601bae3 +Subproject commit 68df42b2924930043bbf466b0c6eab1409fb6c3e