diff --git a/java/src/org/linphone/mediastream/video/capture/AndroidVideoApi5JniWrapper.java b/java/src/org/linphone/mediastream/video/capture/AndroidVideoApi5JniWrapper.java index 42142c2e..b8778e17 100644 --- a/java/src/org/linphone/mediastream/video/capture/AndroidVideoApi5JniWrapper.java +++ b/java/src/org/linphone/mediastream/video/capture/AndroidVideoApi5JniWrapper.java @@ -26,9 +26,13 @@ import org.linphone.mediastream.video.AndroidVideoWindowImpl; import org.linphone.mediastream.video.capture.hwconf.AndroidCameraConfiguration; import org.linphone.mediastream.video.capture.hwconf.AndroidCameraConfiguration.AndroidCamera; +import android.graphics.Canvas; +import android.graphics.Rect; import android.graphics.SurfaceTexture; import android.hardware.Camera; import android.hardware.Camera.Parameters; +import android.view.Surface; +import android.view.SurfaceHolder; import android.view.SurfaceView; import android.view.TextureView; @@ -137,6 +141,8 @@ public class AndroidVideoApi5JniWrapper { camera.setPreviewTexture(((TextureView) surf).getSurfaceTexture()); } else if (surf instanceof SurfaceTexture) { camera.setPreviewTexture((SurfaceTexture) surf); + } else if (surf instanceof Surface) { + camera.setPreviewDisplay(new SimpleSurfaceHolder((Surface) surf)); } else { AndroidVideoWindowImpl avw = (AndroidVideoWindowImpl) surf; camera.setPreviewDisplay(avw.getPreviewSurfaceView().getHolder()); @@ -254,4 +260,30 @@ public class AndroidVideoApi5JniWrapper { camera.setParameters(params); } + + private static class SimpleSurfaceHolder implements SurfaceHolder { + private Surface mSurface; + + public SimpleSurfaceHolder(Surface surface) { + mSurface = surface; + } + + @Override public void addCallback(SurfaceHolder.Callback callback) {} + @Override public Rect getSurfaceFrame() { return null; } + @Override public boolean isCreating() { return false; } + @Override public Canvas lockCanvas() { return null; } + @Override public Canvas lockCanvas(Rect dirty) { return null; } + @Override public void removeCallback(SurfaceHolder.Callback callback) {} + @Override public void setFixedSize(int width, int height) {} + @Override public void setFormat(int format) {} + @Override public void setKeepScreenOn(boolean screenOn) {} + @Override public void setSizeFromLayout() {} + @Override public void setType(int type) {} + @Override public void unlockCanvasAndPost(Canvas canvas) {} + + @Override + public Surface getSurface() { + return mSurface; + } + } } diff --git a/src/voip/videostream.c b/src/voip/videostream.c index adf1499c..18ed45b6 100644 --- a/src/voip/videostream.c +++ b/src/voip/videostream.c @@ -1114,9 +1114,9 @@ static int video_stream_start_with_source_and_output(VideoStream *stream, RtpPro } ms_filter_call_method(stream->ms.encoder, MS_VIDEO_ENCODER_ENABLE_AVPF, &avpf_enabled); if (stream->use_preview_window){ - if (stream->rendercb==NULL){ - stream->output2=ms_factory_create_filter_from_name(stream->ms.factory, stream->display_name); - } + //if (stream->rendercb==NULL){ + // stream->output2=ms_factory_create_filter_from_name(stream->ms.factory, stream->display_name); + //} } configure_video_source(stream, FALSE, TRUE); }