Java Code Examples for android.graphics.SurfaceTexture#setDefaultBufferSize()
The following examples show how to use
android.graphics.SurfaceTexture#setDefaultBufferSize() .
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: WindowWidget.java From FirefoxReality with Mozilla Public License 2.0 | 6 votes |
@Override public void setSurfaceTexture(SurfaceTexture aTexture, final int aWidth, final int aHeight, Runnable aFirstDrawCallback) { mFirstDrawCallback = aFirstDrawCallback; if (mView != null) { super.setSurfaceTexture(aTexture, aWidth, aHeight, aFirstDrawCallback); } else { GeckoSession session = mSession.getGeckoSession(); if (session == null) { return; } if (aTexture == null) { setWillNotDraw(true); return; } mWidth = aWidth; mHeight = aHeight; mTexture = aTexture; aTexture.setDefaultBufferSize(aWidth, aHeight); mSurface = new Surface(aTexture); callSurfaceChanged(); } }
Example 2
Source File: SurfaceDrawable.java From libcommon with Apache License 2.0 | 6 votes |
/** * 映像入力用SurfaceTexture/Surfaceを再生成する */ @SuppressLint("NewApi") @WorkerThread protected void handleReCreateInputSurface() { if (DEBUG) Log.v(TAG, "handleReCreateInputSurface:"); synchronized (mSync) { mEglTask.makeCurrent(); handleReleaseInputSurface(); mEglTask.makeCurrent(); if (isOES3()) { mTexId = com.serenegiant.glutils.es3.GLHelper.initTex( GL_TEXTURE_EXTERNAL_OES, GLES30.GL_TEXTURE0, GLES30.GL_NEAREST); } else { mTexId = com.serenegiant.glutils.es2.GLHelper.initTex( GL_TEXTURE_EXTERNAL_OES, GLES20.GL_TEXTURE0, GLES20.GL_NEAREST); } mInputTexture = new SurfaceTexture(mTexId); mInputSurface = new Surface(mInputTexture); if (BuildCheck.isAndroid4_1()) { // XXX getIntrinsicWidth/getIntrinsicHeightの代わりにmImageWidth/mImageHeightを使うべきかも? mInputTexture.setDefaultBufferSize(getIntrinsicWidth(), getIntrinsicHeight()); } mInputTexture.setOnFrameAvailableListener(mOnFrameAvailableListener); } onCreateSurface(mInputSurface); }
Example 3
Source File: MediaScreenEncoder.java From ScreenRecordingSample with Apache License 2.0 | 6 votes |
@Override protected void onStart() { if (DEBUG) Log.d(TAG,"mScreenCaptureTask#onStart:"); mDrawer = new GLDrawer2D(true); mTexId = mDrawer.initTex(); mSourceTexture = new SurfaceTexture(mTexId); mSourceTexture.setDefaultBufferSize(mWidth, mHeight); // これを入れないと映像が取れない mSourceSurface = new Surface(mSourceTexture); mSourceTexture.setOnFrameAvailableListener(mOnFrameAvailableListener, mHandler); mEncoderSurface = getEgl().createFromSurface(mSurface); if (DEBUG) Log.d(TAG,"setup VirtualDisplay"); intervals = (long)(1000f / fps); display = mMediaProjection.createVirtualDisplay( "Capturing Display", mWidth, mHeight, mDensity, DisplayManager.VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR, mSourceSurface, mCallback, mHandler); if (DEBUG) Log.v(TAG, "screen capture loop:display=" + display); // 録画タスクを起床 queueEvent(mDrawTask); }
Example 4
Source File: SimpleCameraRender.java From rtmp-rtsp-stream-client-java with Apache License 2.0 | 6 votes |
/** * Initializes GL state. Call this after the EGL surface has been created and made current. */ public void initGl(Context context, int streamWidth, int streamHeight) { isPortrait = CameraHelper.isPortrait(context); this.streamWidth = streamWidth; this.streamHeight = streamHeight; GlUtil.checkGlError("initGl start"); String vertexShader = GlUtil.getStringFromRaw(context, R.raw.simple_vertex); String fragmentShader = GlUtil.getStringFromRaw(context, R.raw.camera_fragment); program = GlUtil.createProgram(vertexShader, fragmentShader); aPositionHandle = GLES20.glGetAttribLocation(program, "aPosition"); aTextureCoordHandle = GLES20.glGetAttribLocation(program, "aTextureCoord"); uMVPMatrixHandle = GLES20.glGetUniformLocation(program, "uMVPMatrix"); uSTMatrixHandle = GLES20.glGetUniformLocation(program, "uSTMatrix"); //camera texture GlUtil.createExternalTextures(1, texturesID, 0); textureID = texturesID[0]; surfaceTexture = new SurfaceTexture(textureID); surfaceTexture.setDefaultBufferSize(streamWidth, streamHeight); surface = new Surface(surfaceTexture); GlUtil.checkGlError("initGl end"); }
Example 5
Source File: CameraRender.java From rtmp-rtsp-stream-client-java with Apache License 2.0 | 6 votes |
@Override public void initGl(int width, int height, Context context, int previewWidth, int previewHeight) { this.width = width; this.height = height; GlUtil.checkGlError("initGl start"); String vertexShader = GlUtil.getStringFromRaw(context, R.raw.simple_vertex); String fragmentShader = GlUtil.getStringFromRaw(context, R.raw.camera_fragment); program = GlUtil.createProgram(vertexShader, fragmentShader); aPositionHandle = GLES20.glGetAttribLocation(program, "aPosition"); aTextureCameraHandle = GLES20.glGetAttribLocation(program, "aTextureCoord"); uMVPMatrixHandle = GLES20.glGetUniformLocation(program, "uMVPMatrix"); uSTMatrixHandle = GLES20.glGetUniformLocation(program, "uSTMatrix"); uSTMatrixHandle = GLES20.glGetUniformLocation(program, "uSTMatrix"); //camera texture GlUtil.createExternalTextures(1, textureID, 0); surfaceTexture = new SurfaceTexture(textureID[0]); surfaceTexture.setDefaultBufferSize(width, height); surface = new Surface(surfaceTexture); initFBO(width, height); GlUtil.checkGlError("initGl end"); }
Example 6
Source File: SurfaceFilterRender.java From rtmp-rtsp-stream-client-java with Apache License 2.0 | 6 votes |
@Override protected void initGlFilter(Context context) { String vertexShader = GlUtil.getStringFromRaw(context, R.raw.object_vertex); String fragmentShader = GlUtil.getStringFromRaw(context, R.raw.surface_fragment); program = GlUtil.createProgram(vertexShader, fragmentShader); aPositionHandle = GLES20.glGetAttribLocation(program, "aPosition"); aTextureHandle = GLES20.glGetAttribLocation(program, "aTextureCoord"); aTextureObjectHandle = GLES20.glGetAttribLocation(program, "aTextureObjectCoord"); uMVPMatrixHandle = GLES20.glGetUniformLocation(program, "uMVPMatrix"); uSTMatrixHandle = GLES20.glGetUniformLocation(program, "uSTMatrix"); uSamplerHandle = GLES20.glGetUniformLocation(program, "uSampler"); uSamplerSurfaceHandle = GLES20.glGetUniformLocation(program, "uSamplerSurface"); uAlphaHandle = GLES20.glGetUniformLocation(program, "uAlpha"); GlUtil.createExternalTextures(1, surfaceId, 0); surfaceTexture = new SurfaceTexture(surfaceId[0]); surfaceTexture.setDefaultBufferSize(getWidth(), getHeight()); surface = new Surface(surfaceTexture); if (surfaceReadyCallback != null) surfaceReadyCallback.surfaceReady(surfaceTexture); }
Example 7
Source File: ResizingTextureView.java From ExoMedia with Apache License 2.0 | 6 votes |
/** * Updates the stored videoSize and updates the default buffer size * in the backing texture view. * * @param width The width for the video * @param height The height for the video * @return True if the surfaces DefaultBufferSize was updated */ protected boolean updateVideoSize(int width, int height) { matrixManager.setIntrinsicVideoSize(width, height); updateMatrixOnLayout(); videoSize.x = width; videoSize.y = height; if (width == 0 || height == 0) { return false; } if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1) { SurfaceTexture surfaceTexture = getSurfaceTexture(); if(surfaceTexture != null) { surfaceTexture.setDefaultBufferSize(width, height); } else { return false; } } return true; }
Example 8
Source File: Camera2Session.java From VideoCRE with MIT License | 6 votes |
@Override public void onOpened(CameraDevice camera) { checkIsOnCameraThread(); Logging.d(TAG, "Camera opened."); cameraDevice = camera; final SurfaceTexture surfaceTexture = surfaceTextureHelper.getSurfaceTexture(); surfaceTexture.setDefaultBufferSize(captureFormat.width, captureFormat.height); surface = new Surface(surfaceTexture); List<Surface> surfaces = new ArrayList<Surface>(); surfaces.add(surface); if (mediaRecorderSurface != null) { Logging.d(TAG, "Add MediaRecorder surface to capture session."); surfaces.add(mediaRecorderSurface); } try { camera.createCaptureSession(surfaces, new CaptureSessionCallback(), cameraThreadHandler); } catch (CameraAccessException e) { reportError("Failed to create capture session. " + e); return; } }
Example 9
Source File: GPUCameraRecorder.java From GPUVideo-android with MIT License | 5 votes |
private synchronized void startPreview(SurfaceTexture surfaceTexture) { if (cameraHandler == null) { final CameraThread thread = new CameraThread(cameraRecordListener, new CameraThread.OnStartPreviewListener() { @Override public void onStart(Size previewSize, boolean flash) { Log.d(TAG, "previewSize : width " + previewSize.getWidth() + " height = " + previewSize.getHeight()); if (glPreviewRenderer != null) { glPreviewRenderer.setCameraResolution(new Size(previewSize.getWidth(), previewSize.getHeight())); } flashSupport = flash; if (cameraRecordListener != null) { cameraRecordListener.onGetFlashSupport(flashSupport); } final float previewWidth = previewSize.getWidth(); final float previewHeight = previewSize.getHeight(); glSurfaceView.post(new Runnable() { @Override public void run() { if (glPreviewRenderer != null) { glPreviewRenderer.setAngle(degrees); glPreviewRenderer.onStartPreview(previewWidth, previewHeight, isLandscapeDevice); } } }); if (glPreviewRenderer != null) { final SurfaceTexture st = glPreviewRenderer.getPreviewTexture().getSurfaceTexture(); st.setDefaultBufferSize(previewSize.getWidth(), previewSize.getHeight()); } } }, surfaceTexture, cameraManager, lensFacing); thread.start(); cameraHandler = thread.getHandler(); } cameraHandler.startPreview(cameraWidth, cameraHeight); }
Example 10
Source File: BurstFacadeImpl.java From Camera2 with Apache License 2.0 | 5 votes |
@Override public void initialize(SurfaceTexture surfaceTexture) { MainThread.checkMainThread(); // TODO: Use preview sizes from Camera API here instead of using the // default. surfaceTexture.setDefaultBufferSize(DEFAULT_PREVIEW_WIDTH, DEFAULT_PREVIEW_HEIGHT); // Detach from GL context, to allow frame distributor to attach to the // GL context. surfaceTexture.detachFromGLContext(); mSurfaceTextureContainer.set(new SurfaceTextureContainer(surfaceTexture)); }
Example 11
Source File: CameraRecorder.java From CameraRecorder-android with MIT License | 5 votes |
private synchronized void startPreview(SurfaceTexture surfaceTexture) { if (cameraHandler == null) { final CameraThread thread = new CameraThread(cameraRecordListener, new CameraThread.OnStartPreviewListener() { @Override public void onStart(Size previewSize, boolean flash) { Log.d(TAG, "previewSize : width " + previewSize.getWidth() + " height = " + previewSize.getHeight()); if (glPreviewRenderer != null) { glPreviewRenderer.setCameraResolution(new Resolution(previewSize.getWidth(), previewSize.getHeight())); } flashSupport = flash; if (cameraRecordListener != null) { cameraRecordListener.onGetFlashSupport(flashSupport); } final float previewWidth = previewSize.getWidth(); final float previewHeight = previewSize.getHeight(); glSurfaceView.post(new Runnable() { @Override public void run() { if (glPreviewRenderer != null) { glPreviewRenderer.setAngle(degrees); glPreviewRenderer.onStartPreview(previewWidth, previewHeight, isLandscapeDevice); } } }); if (glPreviewRenderer != null) { final SurfaceTexture st = glPreviewRenderer.getPreviewTexture().getSurfaceTexture(); st.setDefaultBufferSize(previewSize.getWidth(), previewSize.getHeight()); } } }, surfaceTexture, cameraManager, lensFacing); thread.start(); cameraHandler = thread.getHandler(); } cameraHandler.startPreview(cameraWidth, cameraHeight); }
Example 12
Source File: SurfaceVideoEncoder.java From DeviceConnect-Android with MIT License | 5 votes |
/** * SurfaceTextureManager を作成します. */ private synchronized void createStManager() { if (mStManager != null) { return; } mStManager = new SurfaceTextureManager(); // SurfaceTexture に解像度を設定 VideoQuality quality = getVideoQuality(); SurfaceTexture st = mStManager.getSurfaceTexture(); st.setDefaultBufferSize(quality.getVideoWidth(), quality.getVideoHeight()); }
Example 13
Source File: MixRendererHolder.java From libcommon with Apache License 2.0 | 4 votes |
/** * internalOnStartの下請け、GLES3用 */ @SuppressLint("NewApi") @WorkerThread private void internalOnStartES3() { if (DEBUG) Log.v(TAG, String.format("internalOnStartES3:init mix texture(%dx%d)", width(), height())); mDrawer.updateShader(MY_FRAGMENT_SHADER_EXT_ES3); final int uTex1 = mDrawer.glGetUniformLocation("sTexture"); GLES30.glUniform1i(uTex1, 0); // アルファブレンド用テクスチャ/SurfaceTexture/Surfaceを生成 final int uTex2 = mDrawer.glGetUniformLocation("sTexture2"); mTexId2 = GLHelper.initTex( GL_TEXTURE_EXTERNAL_OES, GLES30.GL_TEXTURE1, GLES30.GL_LINEAR, GLES30.GL_LINEAR, GLES30.GL_CLAMP_TO_EDGE); mMasterTexture2 = new SurfaceTexture(mTexId2); mMasterTexture2.setDefaultBufferSize(width(), height()); mMasterSurface2 = new Surface(mMasterTexture2); if (BuildCheck.isAndroid5()) { mMasterTexture2.setOnFrameAvailableListener( mOnFrameAvailableListener, mAsyncHandler); } else { mMasterTexture2.setOnFrameAvailableListener( mOnFrameAvailableListener); } GLES30.glActiveTexture(GLES30.GL_TEXTURE1); GLES30.glBindTexture(GL_TEXTURE_EXTERNAL_OES, mTexId2); GLES30.glUniform1i(uTex2, 1); // マスク用テクスチャ/SurfaceTexture/Surfaceを生成 final int uTex3 = mDrawer.glGetUniformLocation("sTexture3"); mMaskTexId = GLHelper.initTex( GL_TEXTURE_EXTERNAL_OES, GLES30.GL_TEXTURE2, GLES30.GL_LINEAR, GLES30.GL_LINEAR, GLES30.GL_CLAMP_TO_EDGE); mMaskTexture = new SurfaceTexture(mMaskTexId); mMaskTexture.setDefaultBufferSize(width(), height()); mMaskSurface = new Surface(mMaskTexture); GLES30.glActiveTexture(GLES30.GL_TEXTURE2); GLES30.glBindTexture(GL_TEXTURE_EXTERNAL_OES, mMaskTexId); GLES30.glUniform1i(uTex3, 2); }
Example 14
Source File: MixRendererHolder.java From libcommon with Apache License 2.0 | 4 votes |
/** * internalOnStartの下請け、GLES2用 */ @SuppressLint("NewApi") @WorkerThread private void internalOnStartES2() { if (DEBUG) Log.v(TAG, String.format("internalOnStartES2:init mix texture(%dx%d)", width(), height())); mDrawer.updateShader(MY_FRAGMENT_SHADER_EXT_ES2); final int uTex1 = mDrawer.glGetUniformLocation("sTexture"); GLES20.glUniform1i(uTex1, 0); // アルファブレンド用テクスチャ/SurfaceTexture/Surfaceを生成 final int uTex2 = mDrawer.glGetUniformLocation("sTexture2"); mTexId2 = GLHelper.initTex( GL_TEXTURE_EXTERNAL_OES, GLES20.GL_TEXTURE1, GLES20.GL_LINEAR, GLES20.GL_LINEAR, GLES20.GL_CLAMP_TO_EDGE); mMasterTexture2 = new SurfaceTexture(mTexId2); mMasterTexture2.setDefaultBufferSize(width(), height()); mMasterSurface2 = new Surface(mMasterTexture2); if (BuildCheck.isAndroid5()) { mMasterTexture2.setOnFrameAvailableListener( mOnFrameAvailableListener, mAsyncHandler); } else { mMasterTexture2.setOnFrameAvailableListener( mOnFrameAvailableListener); } GLES20.glActiveTexture(GLES20.GL_TEXTURE1); GLES20.glBindTexture(GL_TEXTURE_EXTERNAL_OES, mTexId2); GLES20.glUniform1i(uTex2, 1); // マスク用テクスチャ/SurfaceTexture/Surfaceを生成 final int uTex3 = mDrawer.glGetUniformLocation("sTexture3"); mMaskTexId = GLHelper.initTex( GL_TEXTURE_EXTERNAL_OES, GLES20.GL_TEXTURE2, GLES20.GL_LINEAR, GLES20.GL_LINEAR, GLES20.GL_CLAMP_TO_EDGE); mMaskTexture = new SurfaceTexture(mMaskTexId); mMaskTexture.setDefaultBufferSize(width(), height()); mMaskSurface = new Surface(mMaskTexture); GLES20.glActiveTexture(GLES20.GL_TEXTURE2); GLES20.glBindTexture(GL_TEXTURE_EXTERNAL_OES, mMaskTexId); GLES20.glUniform1i(uTex3, 2); }
Example 15
Source File: SurfaceTexturePlatformWrapper.java From android-chromium with BSD 2-Clause "Simplified" License | 4 votes |
@CalledByNative private static void setDefaultBufferSize(SurfaceTexture surfaceTexture, int width, int height) { surfaceTexture.setDefaultBufferSize(width, height); }
Example 16
Source File: SurfaceTexturePlatformWrapper.java From 365browser with Apache License 2.0 | 4 votes |
@CalledByNative private static void setDefaultBufferSize(SurfaceTexture surfaceTexture, int width, int height) { surfaceTexture.setDefaultBufferSize(width, height); }
Example 17
Source File: CameraView.java From Telegram-FOSS with GNU General Public License v2.0 | 4 votes |
public void initCamera() { CameraInfo info = null; ArrayList<CameraInfo> cameraInfos = CameraController.getInstance().getCameras(); if (cameraInfos == null) { return; } for (int a = 0; a < cameraInfos.size(); a++) { CameraInfo cameraInfo = cameraInfos.get(a); if (isFrontface && cameraInfo.frontCamera != 0 || !isFrontface && cameraInfo.frontCamera == 0) { info = cameraInfo; break; } } if (info == null) { return; } float size4to3 = 4.0f / 3.0f; float size16to9 = 16.0f / 9.0f; float screenSize = (float) Math.max(AndroidUtilities.displaySize.x, AndroidUtilities.displaySize.y) / Math.min(AndroidUtilities.displaySize.x, AndroidUtilities.displaySize.y); org.telegram.messenger.camera.Size aspectRatio; int wantedWidth; int wantedHeight; if (initialFrontface) { aspectRatio = new Size(16, 9); wantedWidth = 480; wantedHeight = 270; } else { if (Math.abs(screenSize - size4to3) < 0.1f) { aspectRatio = new Size(4, 3); wantedWidth = 1280; wantedHeight = 960; } else { aspectRatio = new Size(16, 9); wantedWidth = 1280; wantedHeight = 720; } } if (textureView.getWidth() > 0 && textureView.getHeight() > 0) { int width; if (useMaxPreview) { width = Math.max(AndroidUtilities.displaySize.x, AndroidUtilities.displaySize.y); } else { width = Math.min(AndroidUtilities.displaySize.x, AndroidUtilities.displaySize.y); } int height = width * aspectRatio.getHeight() / aspectRatio.getWidth(); previewSize = CameraController.chooseOptimalSize(info.getPreviewSizes(), width, height, aspectRatio); } org.telegram.messenger.camera.Size pictureSize = CameraController.chooseOptimalSize(info.getPictureSizes(), wantedWidth, wantedHeight, aspectRatio); if (pictureSize.getWidth() >= 1280 && pictureSize.getHeight() >= 1280) { if (Math.abs(screenSize - size4to3) < 0.1f) { aspectRatio = new Size(3, 4); } else { aspectRatio = new Size(9, 16); } org.telegram.messenger.camera.Size pictureSize2 = CameraController.chooseOptimalSize(info.getPictureSizes(), wantedHeight, wantedWidth, aspectRatio); if (pictureSize2.getWidth() < 1280 || pictureSize2.getHeight() < 1280) { pictureSize = pictureSize2; } } SurfaceTexture surfaceTexture = textureView.getSurfaceTexture(); if (previewSize != null && surfaceTexture != null) { surfaceTexture.setDefaultBufferSize(previewSize.getWidth(), previewSize.getHeight()); cameraSession = new CameraSession(info, previewSize, pictureSize, ImageFormat.JPEG); if (optimizeForBarcode) { cameraSession.setOptimizeForBarcode(optimizeForBarcode); } CameraController.getInstance().open(cameraSession, surfaceTexture, () -> { if (cameraSession != null) { cameraSession.setInitied(); } checkPreviewMatrix(); }, () -> { if (delegate != null) { delegate.onCameraCreated(cameraSession.cameraInfo.camera); } }); } }
Example 18
Source File: Camera2ApiManager.java From rtmp-rtsp-stream-client-java with Apache License 2.0 | 4 votes |
public void prepareCamera(SurfaceTexture surfaceTexture, int width, int height) { surfaceTexture.setDefaultBufferSize(width, height); this.surfaceEncoder = new Surface(surfaceTexture); prepared = true; }
Example 19
Source File: SurfaceTexturePlatformWrapper.java From android-chromium with BSD 2-Clause "Simplified" License | 4 votes |
@CalledByNative private static void setDefaultBufferSize(SurfaceTexture surfaceTexture, int width, int height) { surfaceTexture.setDefaultBufferSize(width, height); }
Example 20
Source File: CameraView.java From TelePlus-Android with GNU General Public License v2.0 | 4 votes |
private void initCamera() { CameraInfo info = null; ArrayList<CameraInfo> cameraInfos = CameraController.getInstance().getCameras(); if (cameraInfos == null) { return; } for (int a = 0; a < cameraInfos.size(); a++) { CameraInfo cameraInfo = cameraInfos.get(a); if (isFrontface && cameraInfo.frontCamera != 0 || !isFrontface && cameraInfo.frontCamera == 0) { info = cameraInfo; break; } } if (info == null) { return; } float size4to3 = 4.0f / 3.0f; float size16to9 = 16.0f / 9.0f; float screenSize = (float) Math.max(AndroidUtilities.displaySize.x, AndroidUtilities.displaySize.y) / Math.min(AndroidUtilities.displaySize.x, AndroidUtilities.displaySize.y); org.telegram.messenger.camera.Size aspectRatio; int wantedWidth; int wantedHeight; if (initialFrontface) { aspectRatio = new Size(16, 9); wantedWidth = 480; wantedHeight = 270; } else { if (Math.abs(screenSize - size4to3) < 0.1f) { aspectRatio = new Size(4, 3); wantedWidth = 1280; wantedHeight = 960; } else { aspectRatio = new Size(16, 9); wantedWidth = 1280; wantedHeight = 720; } } if (textureView.getWidth() > 0 && textureView.getHeight() > 0) { int width = Math.min(AndroidUtilities.displaySize.x, AndroidUtilities.displaySize.y); int height = width * aspectRatio.getHeight() / aspectRatio.getWidth(); previewSize = CameraController.chooseOptimalSize(info.getPreviewSizes(), width, height, aspectRatio); } org.telegram.messenger.camera.Size pictureSize = CameraController.chooseOptimalSize(info.getPictureSizes(), wantedWidth, wantedHeight, aspectRatio); if (pictureSize.getWidth() >= 1280 && pictureSize.getHeight() >= 1280) { if (Math.abs(screenSize - size4to3) < 0.1f) { aspectRatio = new Size(3, 4); } else { aspectRatio = new Size(9, 16); } org.telegram.messenger.camera.Size pictureSize2 = CameraController.chooseOptimalSize(info.getPictureSizes(), wantedHeight, wantedWidth, aspectRatio); if (pictureSize2.getWidth() < 1280 || pictureSize2.getHeight() < 1280) { pictureSize = pictureSize2; } } SurfaceTexture surfaceTexture = textureView.getSurfaceTexture(); if (previewSize != null && surfaceTexture != null) { surfaceTexture.setDefaultBufferSize(previewSize.getWidth(), previewSize.getHeight()); cameraSession = new CameraSession(info, previewSize, pictureSize, ImageFormat.JPEG); CameraController.getInstance().open(cameraSession, surfaceTexture, new Runnable() { @Override public void run() { if (cameraSession != null) { cameraSession.setInitied(); } checkPreviewMatrix(); } }, new Runnable() { @Override public void run() { if (delegate != null) { delegate.onCameraCreated(cameraSession.cameraInfo.camera); } } }); } }