Merge branch 'feature/texture_view' into 'master'
Feature/texture view See merge request BC/public/linphone-android!2
This commit is contained in:
commit
f2c05495ce
6 changed files with 29 additions and 66 deletions
|
@ -12,6 +12,7 @@ Group changes to describe their impact on the project, as follows:
|
||||||
|
|
||||||
## [Incomming]
|
## [Incomming]
|
||||||
- feature: support of H265 codec.
|
- feature: support of H265 codec.
|
||||||
|
- feature: use TextureView instead of GL2JNIView, easier to use and will fix issues
|
||||||
|
|
||||||
## [4.0.1] - 2018-06-26
|
## [4.0.1] - 2018-06-26
|
||||||
|
|
||||||
|
|
|
@ -1,20 +1,27 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:id="@+id/video_frame"
|
android:id="@+id/video_frame"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent">
|
android:layout_height="match_parent"
|
||||||
|
android:background="@color/colorB">
|
||||||
|
|
||||||
<org.linphone.mediastream.video.display.GL2JNIView
|
<TextureView
|
||||||
android:visibility="visible"
|
android:visibility="visible"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:id="@+id/videoSurface" />
|
android:id="@+id/videoSurface" />
|
||||||
|
|
||||||
|
<RelativeLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent">
|
||||||
|
|
||||||
<SurfaceView
|
<TextureView
|
||||||
android:id="@+id/videoCaptureSurface"
|
android:id="@+id/videoCaptureSurface"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="300dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="200dp"
|
||||||
android:layout_alignParentBottom="true"
|
android:layout_alignParentBottom="true"
|
||||||
android:layout_alignParentRight="true" />
|
android:layout_alignParentRight="true" />
|
||||||
|
|
||||||
</RelativeLayout>
|
</RelativeLayout>
|
||||||
|
|
||||||
|
</FrameLayout>
|
|
@ -32,7 +32,6 @@ playback_dev_id=
|
||||||
ringer_dev_id=
|
ringer_dev_id=
|
||||||
capture_dev_id=
|
capture_dev_id=
|
||||||
dtmf_player_amp=0.1
|
dtmf_player_amp=0.1
|
||||||
|
|
||||||
#remove this property for any application that is not Linphone public version itself
|
#remove this property for any application that is not Linphone public version itself
|
||||||
ec_calibrator_cool_tones=1
|
ec_calibrator_cool_tones=1
|
||||||
|
|
||||||
|
|
|
@ -27,8 +27,8 @@ import android.view.GestureDetector.OnDoubleTapListener;
|
||||||
import android.view.GestureDetector.OnGestureListener;
|
import android.view.GestureDetector.OnGestureListener;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.MotionEvent;
|
import android.view.MotionEvent;
|
||||||
import android.view.SurfaceHolder;
|
import android.view.Surface;
|
||||||
import android.view.SurfaceView;
|
import android.view.TextureView;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.View.OnTouchListener;
|
import android.view.View.OnTouchListener;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
|
@ -46,12 +46,10 @@ import org.linphone.core.Call;
|
||||||
import org.linphone.core.Core;
|
import org.linphone.core.Core;
|
||||||
import org.linphone.core.VideoDefinition;
|
import org.linphone.core.VideoDefinition;
|
||||||
import org.linphone.mediastream.Log;
|
import org.linphone.mediastream.Log;
|
||||||
import org.linphone.mediastream.video.AndroidVideoWindowImpl;
|
|
||||||
|
|
||||||
public class CallVideoFragment extends Fragment implements OnGestureListener, OnDoubleTapListener, CompatibilityScaleGestureListener {
|
public class CallVideoFragment extends Fragment implements OnGestureListener, OnDoubleTapListener, CompatibilityScaleGestureListener {
|
||||||
private SurfaceView mVideoView;
|
private TextureView mVideoView;
|
||||||
private SurfaceView mCaptureView;
|
private TextureView mCaptureView;
|
||||||
private AndroidVideoWindowImpl androidVideoWindowImpl;
|
|
||||||
private GestureDetector mGestureDetector;
|
private GestureDetector mGestureDetector;
|
||||||
private float mZoomFactor = 1.f;
|
private float mZoomFactor = 1.f;
|
||||||
private float mZoomCenterX, mZoomCenterY;
|
private float mZoomCenterX, mZoomCenterY;
|
||||||
|
@ -73,30 +71,9 @@ public class CallVideoFragment extends Fragment implements OnGestureListener, On
|
||||||
|
|
||||||
mVideoView = view.findViewById(R.id.videoSurface);
|
mVideoView = view.findViewById(R.id.videoSurface);
|
||||||
mCaptureView = view.findViewById(R.id.videoCaptureSurface);
|
mCaptureView = view.findViewById(R.id.videoCaptureSurface);
|
||||||
mCaptureView.getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); // Warning useless because value is ignored and automatically set by new APIs.
|
|
||||||
|
LinphoneManager.getLc().setNativeVideoWindowId(mVideoView);
|
||||||
fixZOrder(mVideoView, mCaptureView);
|
LinphoneManager.getLc().setNativePreviewWindowId(mCaptureView);
|
||||||
|
|
||||||
androidVideoWindowImpl = new AndroidVideoWindowImpl(mVideoView, mCaptureView, new AndroidVideoWindowImpl.VideoWindowListener() {
|
|
||||||
public void onVideoRenderingSurfaceReady(AndroidVideoWindowImpl vw, SurfaceView surface) {
|
|
||||||
mVideoView = surface;
|
|
||||||
LinphoneManager.getLc().setNativeVideoWindowId(vw);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void onVideoRenderingSurfaceDestroyed(AndroidVideoWindowImpl vw) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public void onVideoPreviewSurfaceReady(AndroidVideoWindowImpl vw, SurfaceView surface) {
|
|
||||||
mCaptureView = surface;
|
|
||||||
LinphoneManager.getLc().setNativePreviewWindowId(mCaptureView);
|
|
||||||
resizePreview();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void onVideoPreviewSurfaceDestroyed(AndroidVideoWindowImpl vw) {
|
|
||||||
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
mVideoView.setOnTouchListener(new OnTouchListener() {
|
mVideoView.setOnTouchListener(new OnTouchListener() {
|
||||||
public boolean onTouch(View v, MotionEvent event) {
|
public boolean onTouch(View v, MotionEvent event) {
|
||||||
|
@ -178,17 +155,15 @@ public class CallVideoFragment extends Fragment implements OnGestureListener, On
|
||||||
Log.e("mCaptureView is null !");
|
Log.e("mCaptureView is null !");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
mCaptureView.getHolder().setFixedSize(width, height);
|
|
||||||
|
RelativeLayout.LayoutParams newLp = new RelativeLayout.LayoutParams(width, height);
|
||||||
|
newLp.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM, 1); // Clears the rule, as there is no removeRule until API 17.
|
||||||
|
newLp.addRule(RelativeLayout.ALIGN_PARENT_RIGHT, 1);
|
||||||
|
mCaptureView.setLayoutParams(newLp);
|
||||||
Log.d("Video preview size set to " + width + "x" + height);
|
Log.d("Video preview size set to " + width + "x" + height);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void fixZOrder(SurfaceView video, SurfaceView preview) {
|
|
||||||
video.setZOrderOnTop(false);
|
|
||||||
preview.setZOrderOnTop(true);
|
|
||||||
preview.setZOrderMediaOverlay(true); // Needed to be able to display control layout over
|
|
||||||
}
|
|
||||||
|
|
||||||
public void switchCamera() {
|
public void switchCamera() {
|
||||||
try {
|
try {
|
||||||
String currentDevice = LinphoneManager.getLc().getVideoDevice();
|
String currentDevice = LinphoneManager.getLc().getVideoDevice();
|
||||||
|
@ -223,11 +198,6 @@ public class CallVideoFragment extends Fragment implements OnGestureListener, On
|
||||||
if (LinphonePreferences.instance().isOverlayEnabled()) {
|
if (LinphonePreferences.instance().isOverlayEnabled()) {
|
||||||
LinphoneService.instance().destroyOverlay();
|
LinphoneService.instance().destroyOverlay();
|
||||||
}
|
}
|
||||||
if (androidVideoWindowImpl != null) {
|
|
||||||
synchronized (androidVideoWindowImpl) {
|
|
||||||
LinphoneManager.getLc().setNativeVideoWindowId(androidVideoWindowImpl);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
mGestureDetector = new GestureDetector(inCallActivity, this);
|
mGestureDetector = new GestureDetector(inCallActivity, this);
|
||||||
mScaleDetector = Compatibility.getScaleGestureDetector(inCallActivity, this);
|
mScaleDetector = Compatibility.getScaleGestureDetector(inCallActivity, this);
|
||||||
|
@ -237,15 +207,6 @@ public class CallVideoFragment extends Fragment implements OnGestureListener, On
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onPause() {
|
public void onPause() {
|
||||||
if (androidVideoWindowImpl != null) {
|
|
||||||
synchronized (androidVideoWindowImpl) {
|
|
||||||
/*
|
|
||||||
* this call will destroy native opengl renderer which is used by
|
|
||||||
* androidVideoWindowImpl
|
|
||||||
*/
|
|
||||||
LinphoneManager.getLc().setNativeVideoWindowId(null);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (LinphonePreferences.instance().isOverlayEnabled()) {
|
if (LinphonePreferences.instance().isOverlayEnabled()) {
|
||||||
LinphoneService.instance().createOverlay();
|
LinphoneService.instance().createOverlay();
|
||||||
}
|
}
|
||||||
|
@ -338,11 +299,6 @@ public class CallVideoFragment extends Fragment implements OnGestureListener, On
|
||||||
mVideoView.setOnTouchListener(null);
|
mVideoView.setOnTouchListener(null);
|
||||||
mVideoView = null;
|
mVideoView = null;
|
||||||
}
|
}
|
||||||
if (androidVideoWindowImpl != null) {
|
|
||||||
// Prevent linphone from crashing if correspondent hang up while you are rotating
|
|
||||||
androidVideoWindowImpl.release();
|
|
||||||
androidVideoWindowImpl = null;
|
|
||||||
}
|
|
||||||
if (mGestureDetector != null) {
|
if (mGestureDetector != null) {
|
||||||
mGestureDetector.setOnDoubleTapListener(null);
|
mGestureDetector.setOnDoubleTapListener(null);
|
||||||
mGestureDetector = null;
|
mGestureDetector = null;
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
Subproject commit c452cbe61ae875ae6833153760e681f8beb384ed
|
Subproject commit 3792f8c5cffc991425d4664d12873c8b60b3d934
|
|
@ -1 +1 @@
|
||||||
Subproject commit 14739e69fd85078f94d8a431d76ad0e8fbcab4ae
|
Subproject commit b44b9fcacb6db7948092ef107055b092f53b0def
|
Loading…
Reference in a new issue