Merge branch 'video' of git.linphone.org:linphone-android-private into video
This commit is contained in:
commit
29fb96f6a0
9 changed files with 47 additions and 47 deletions
|
@ -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>
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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*/) {
|
||||||
|
|
|
@ -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));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
|
|
Loading…
Reference in a new issue