Merge branch 'video' of git.linphone.org:linphone-android-private into video

This commit is contained in:
Simon Morlat 2010-11-29 15:07:15 +01:00
commit 29fb96f6a0
9 changed files with 47 additions and 47 deletions

View file

@ -25,13 +25,13 @@
android:layout_width="fill_parent"></EditText> android:layout_width="fill_parent"></EditText>
<org.linphone.component.ToggleImageButton <org.linphone.component.ToggleImageButton
android:id="@+id/mic_mute_button" android:layout_height="wrap_content" android:id="@+id/mic_mute_button" android:layout_height="wrap_content"
android:layout_width="wrap_content" toggled="@drawable/mic_muted" android:layout_width="wrap_content" android:layout_weight="0.5"
untoggled="@drawable/mic_active" android:layout_weight="0.5" checked="@drawable/mic_muted" unchecked="@drawable/mic_active"
android:layout_gravity="left|center_vertical" /> android:layout_gravity="left|center_vertical" />
<org.linphone.component.ToggleImageButton <org.linphone.component.ToggleImageButton
android:id="@+id/speaker_button" android:layout_height="wrap_content" android:id="@+id/speaker_button" android:layout_height="wrap_content"
android:layout_width="wrap_content" toggled="@drawable/speaker_32_on" android:layout_width="wrap_content" android:layout_weight="0.5"
untoggled="@drawable/speaker_32_off" android:layout_weight="0.5" checked="@drawable/speaker_32_on" unchecked="@drawable/speaker_32_off"
android:layout_gravity="right|center_vertical" /> android:layout_gravity="right|center_vertical" />
</FrameLayout> </FrameLayout>
</LinearLayout> </LinearLayout>

View file

@ -26,11 +26,11 @@
></EditText> ></EditText>
<org.linphone.component.ToggleImageButton android:id="@+id/mic_mute_button" <org.linphone.component.ToggleImageButton android:id="@+id/mic_mute_button"
android:layout_height="wrap_content" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_width="wrap_content"
toggled="@drawable/mic_muted" untoggled="@drawable/mic_active" checked="@drawable/mic_muted" unchecked="@drawable/mic_active"
android:layout_gravity="left|center_vertical"/> android:layout_gravity="left|center_vertical"/>
<org.linphone.component.ToggleImageButton android:id="@+id/speaker_button" <org.linphone.component.ToggleImageButton android:id="@+id/speaker_button"
android:layout_height="wrap_content" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_width="wrap_content"
toggled="@drawable/speaker_32_on" untoggled="@drawable/speaker_32_off" checked="@drawable/speaker_32_on" unchecked="@drawable/speaker_32_off"
android:layout_gravity="right|center_vertical"/> android:layout_gravity="right|center_vertical"/>
</FrameLayout> </FrameLayout>

View file

@ -249,17 +249,14 @@ public class DialerActivity extends Activity implements LinphoneCoreListener {
mInCallControlRow.setVisibility(View.VISIBLE); mInCallControlRow.setVisibility(View.VISIBLE);
mAddressLayout.setVisibility(View.GONE); mAddressLayout.setVisibility(View.GONE);
mInCallAddressLayout.setVisibility(View.VISIBLE); mInCallAddressLayout.setVisibility(View.VISIBLE);
mMute.setChecked(!lLinphoneCore.isMicMuted());
String DisplayName = lLinphoneCore.getRemoteAddress().getDisplayName(); String DisplayName = lLinphoneCore.getRemoteAddress().getDisplayName();
if (DisplayName!=null) { if (DisplayName!=null) {
mDisplayNameView.setText(DisplayName); mDisplayNameView.setText(DisplayName);
} else { } else {
mDisplayNameView.setText(lLinphoneCore.getRemoteAddress().getUserName()); mDisplayNameView.setText(lLinphoneCore.getRemoteAddress().getUserName());
} }
if ((Integer.parseInt(Build.VERSION.SDK) <=4 && mAudioManager.getMode() == AudioManager.MODE_NORMAL) configureMuteButtons();
|| Integer.parseInt(Build.VERSION.SDK) >4 &&mAudioManager.isSpeakerphoneOn()) {
mSpeaker.setChecked(true);
}
mWakeLock.acquire(); mWakeLock.acquire();
} }
} }
@ -271,9 +268,9 @@ public class DialerActivity extends Activity implements LinphoneCoreListener {
public void onCheckedChanged(ToggleImageButton button, boolean isChecked) { public void onCheckedChanged(ToggleImageButton button, boolean isChecked) {
LinphoneCore lc = LinphoneService.instance().getLinphoneCore(); LinphoneCore lc = LinphoneService.instance().getLinphoneCore();
if (isChecked) { if (isChecked) {
lc.muteMic(false);
} else {
lc.muteMic(true); lc.muteMic(true);
} else {
lc.muteMic(false);
} }
} }
}); });
@ -497,6 +494,8 @@ public class DialerActivity extends Activity implements LinphoneCoreListener {
mDisplayNameView.setText(lc.getRemoteAddress().toString()); mDisplayNameView.setText(lc.getRemoteAddress().toString());
} }
} }
configureMuteButtons();
if (mSpeaker.isChecked()) { if (mSpeaker.isChecked()) {
routeAudioToSpeaker(); routeAudioToSpeaker();
} else { } else {
@ -504,6 +503,15 @@ public class DialerActivity extends Activity implements LinphoneCoreListener {
} }
setVolumeControlStream(AudioManager.STREAM_VOICE_CALL); setVolumeControlStream(AudioManager.STREAM_VOICE_CALL);
} }
private void configureMuteButtons() {
mMute.setChecked(LinphoneService.instance().getLinphoneCore().isMicMuted());
if ((Integer.parseInt(Build.VERSION.SDK) <=4 && mAudioManager.getMode() == AudioManager.MODE_NORMAL)
|| Integer.parseInt(Build.VERSION.SDK) >4 &&mAudioManager.isSpeakerphoneOn()) {
mSpeaker.setChecked(true);
} else {
mSpeaker.setChecked(false);
}
}
private void exitCallMode() { private void exitCallMode() {
mCallControlRow.setVisibility(View.VISIBLE); mCallControlRow.setVisibility(View.VISIBLE);
mInCallControlRow.setVisibility(View.GONE); mInCallControlRow.setVisibility(View.GONE);
@ -512,13 +520,13 @@ public class DialerActivity extends Activity implements LinphoneCoreListener {
mCall.setEnabled(true); mCall.setEnabled(true);
mHangup.setEnabled(false); mHangup.setEnabled(false);
setVolumeControlStream(AudioManager.USE_DEFAULT_STREAM_TYPE); setVolumeControlStream(AudioManager.USE_DEFAULT_STREAM_TYPE);
mMute.setChecked(true);
mSpeaker.setChecked(false);
mDecline.setEnabled(false); mDecline.setEnabled(false);
if (LinphoneService.instance().getLinphoneCore().isVideoEnabled()) { if (LinphoneService.instance().getLinphoneCore().isVideoEnabled()) {
finishActivity(VIDEO_VIEW_ACTIVITY); finishActivity(VIDEO_VIEW_ACTIVITY);
} }
if (mWakeLock.isHeld())mWakeLock.release(); if (mWakeLock.isHeld())mWakeLock.release();
mSpeaker.setChecked(false);
routeAudioToReceiver();
} }
private void routeAudioToSpeaker() { private void routeAudioToSpeaker() {
if (Integer.parseInt(Build.VERSION.SDK) <= 4 /*<donut*/) { if (Integer.parseInt(Build.VERSION.SDK) <= 4 /*<donut*/) {

View file

@ -55,9 +55,9 @@ public class VideoCallActivity extends Activity {
private void rewriteToggleCameraItem(MenuItem item) { private void rewriteToggleCameraItem(MenuItem item) {
if (recordManager.isRecording()) { if (recordManager.isRecording()) {
item.setTitle(getString(R.string.menu_videocall_toggle_camera_enable));
} else {
item.setTitle(getString(R.string.menu_videocall_toggle_camera_disable)); item.setTitle(getString(R.string.menu_videocall_toggle_camera_disable));
} else {
item.setTitle(getString(R.string.menu_videocall_toggle_camera_enable));
} }
} }

View file

@ -29,8 +29,8 @@ import android.widget.ImageButton;
/** /**
* Image button storing a checked state to display alternating drawables. * Image button storing a checked state to display alternating drawables.
* The "toggled" drawable is displayed when button is down / checked. * The "checked" drawable is displayed when button is down / checked.
* The "untoggled" drawable is displayed when button is up / unchecked. * The "unchecked" drawable is displayed when button is up / unchecked.
* *
* @author Guillaume Beraudo * @author Guillaume Beraudo
* *
@ -38,14 +38,14 @@ import android.widget.ImageButton;
public class ToggleImageButton extends ImageButton implements OnClickListener { public class ToggleImageButton extends ImageButton implements OnClickListener {
private static final String namespace = null; private static final String namespace = null;
private boolean checked; private boolean checked;
private Drawable on; private Drawable stateChecked;
private Drawable off; private Drawable stateUnChecked;
private OnCheckedChangeListener onCheckedChangeListener; private OnCheckedChangeListener onCheckedChangeListener;
public ToggleImageButton(Context context, AttributeSet attrs) { public ToggleImageButton(Context context, AttributeSet attrs) {
super(context, attrs); super(context, attrs);
on = getResources().getDrawable(attrs.getAttributeResourceValue(namespace, "toggled", -1)); stateChecked = getResources().getDrawable(attrs.getAttributeResourceValue(namespace, "checked", -1));
off = getResources().getDrawable(attrs.getAttributeResourceValue(namespace, "untoggled", -1)); stateUnChecked = getResources().getDrawable(attrs.getAttributeResourceValue(namespace, "unchecked", -1));
setBackgroundColor(Color.TRANSPARENT); setBackgroundColor(Color.TRANSPARENT);
setOnClickListener(this); setOnClickListener(this);
@ -65,7 +65,7 @@ public class ToggleImageButton extends ImageButton implements OnClickListener {
private void handleCheckChanged() { private void handleCheckChanged() {
setImageDrawable(checked?on:off); setImageDrawable(checked?stateChecked:stateUnChecked);
requestLayout(); requestLayout();
invalidate(); invalidate();
if (onCheckedChangeListener != null) onCheckedChangeListener.onCheckedChanged(this, checked); if (onCheckedChangeListener != null) onCheckedChangeListener.onCheckedChanged(this, checked);

View file

@ -52,7 +52,8 @@ public abstract class AndroidCameraRecord {
public void startPreview() { // FIXME throws exception? public void startPreview() { // FIXME throws exception?
if (previewStarted) { if (previewStarted) {
Log.w(tag, "Already started"); Log.w(tag, "Already started");
return; throw new RuntimeException("Video recorder already started");
// return
} }
if (params.surfaceView.getVisibility() != SurfaceView.VISIBLE) { if (params.surfaceView.getVisibility() != SurfaceView.VISIBLE) {
@ -91,7 +92,7 @@ public abstract class AndroidCameraRecord {
} }
} }
onSettingParameters(parameters); onSettingCameraParameters(parameters);
camera.setParameters(parameters); camera.setParameters(parameters);
@ -114,33 +115,28 @@ public abstract class AndroidCameraRecord {
previewStarted = true; previewStarted = true;
// Register callback to get capture buffer // Register callback to get capture buffer
if (storedPreviewCallback != null) { lowLevelSetPreviewCallback(camera, storedPreviewCallback);
lowLevelSetPreviewCallback(camera, storedPreviewCallback);
}
onCameraStarted(camera); onPreviewStarted(camera);
} }
protected void onSettingParameters(Parameters parameters) { protected void onSettingCameraParameters(Parameters parameters) {}
}
/** /**
* Hook. * Hook.
* @param camera * @param camera
*/ */
public void onCameraStarted(Camera camera) {} public void onPreviewStarted(Camera camera) {}
public void storePreviewCallBack(PreviewCallback cb) { public void storePreviewCallBack(PreviewCallback cb) {
this.storedPreviewCallback = cb;
if (camera == null) { if (camera == null) {
Log.w(tag, "Capture camera not ready, storing callback"); Log.w(tag, "Capture camera not ready, storing callback");
this.storedPreviewCallback = cb;
return; return;
} }

View file

@ -46,18 +46,14 @@ public class AndroidCameraRecordBufferedImpl extends AndroidCameraRecordImpl {
} }
@Override @Override
public void onCameraStarted(Camera camera) { public void onPreviewStarted(Camera camera) {
super.onCameraStarted(camera); super.onPreviewStarted(camera);
Size s = camera.getParameters().getPreviewSize(); Size s = camera.getParameters().getPreviewSize();
int wishedBufferSize = s.height * s.width * 3 / 2; int wishedBufferSize = s.height * s.width * 3 / 2;
camera.addCallbackBuffer(new byte[wishedBufferSize]); camera.addCallbackBuffer(new byte[wishedBufferSize]);
camera.addCallbackBuffer(new byte[wishedBufferSize]); camera.addCallbackBuffer(new byte[wishedBufferSize]);
/*
for (int i=1; i < 30; i++) {
camera.addCallbackBuffer(new byte[wishedBufferSize]);
}*/
} }
@Override @Override
@ -67,8 +63,8 @@ public class AndroidCameraRecordBufferedImpl extends AndroidCameraRecordImpl {
} }
@Override @Override
protected void onSettingParameters(Parameters parameters) { protected void onSettingCameraParameters(Parameters parameters) {
super.onSettingParameters(parameters); super.onSettingCameraParameters(parameters);
// Only on v8 hardware // Only on v8 hardware
camera.setDisplayOrientation(90 * orientationCode); camera.setDisplayOrientation(90 * orientationCode);
} }

View file

@ -34,11 +34,11 @@ public class AndroidCameraRecordImpl extends AndroidCameraRecord implements Prev
private long filterCtxPtr; private long filterCtxPtr;
private double timeElapsedBetweenFrames = 0; private double timeElapsedBetweenFrames = 0;
private long lastFrameTime = 0; private long lastFrameTime = 0;
private final long expectedTimeBetweenFrames; private final double expectedTimeBetweenFrames;
public AndroidCameraRecordImpl(RecorderParams parameters) { public AndroidCameraRecordImpl(RecorderParams parameters) {
super(parameters); super(parameters);
expectedTimeBetweenFrames = 1l / Math.round(parameters.fps); expectedTimeBetweenFrames = 1d / Math.round(parameters.fps);
filterCtxPtr = parameters.filterDataNativePtr; filterCtxPtr = parameters.filterDataNativePtr;
storePreviewCallBack(this); storePreviewCallBack(this);

View file

@ -138,7 +138,7 @@ public class AndroidCameraRecordManager {
parameters.rotation = rotation; parameters.rotation = rotation;
parameters.surfaceView = surfaceView; parameters.surfaceView = surfaceView;
if (version > 8) { if (version >= 8) {
recorder = new AndroidCameraRecordBufferedImpl(parameters); recorder = new AndroidCameraRecordBufferedImpl(parameters);
} else { } else {
recorder = new AndroidCameraRecordImpl(parameters); recorder = new AndroidCameraRecordImpl(parameters);