মনে রাখবেন: এই পৃষ্ঠা Camera2 প্যাকেজকে রেফার করে। আপনার অ্যাপের জন্য Camera2 থেকে নির্দিষ্ট, লো-লেভেল ফিচারের প্রয়োজন না হলে, আমরা CameraX ব্যবহার করার সাজেশন দিই। CameraX এবং Camera2, দুটিই Android 5.0 (API লেভেল ২১) এবং তার পরবর্তী যেকোনও ভার্সনে কাজ করে।
Camera2, এক্সটেনশন অ্যাক্সেস করার জন্য একটি এক্সটেনশন API প্রদান করে যা ডিভাইস প্রস্তুতকারকরা বিভিন্ন Android ডিভাইসে প্রয়োগ করেছেন। কাজ করে এমন এক্সটেনশন মোডের তালিকা দেখতে, ক্যামেরা এক্সটেনশন দেখুন।
এক্সটেনশন কাজ করে এমন ডিভাইসের তালিকা দেখতে, কাজ করে এমন ডিভাইস দেখুন।
এক্সটেনশন আর্কিটেকচার
নিচের ছবিতে ক্যামেরা এক্সটেনশন আর্কিটেকচার দেখানো হয়েছে।
Camera2 অ্যাপ্লিকেশন Camera2 API-এর মাধ্যমে এক্সটেনশন ব্যবহার করতে পারে। Camera2 API উপলভ্য এক্সটেনশন কোয়েরি করা, এক্সটেনশন ক্যামেরা সেশন কনফিগার করা এবং Camera Extensions OEM লাইব্রেরির সাথে যোগাযোগ করার উপায় প্রদান করে। এটি আপনার অ্যাপ্লিকেশনকে নাইট, HDR, অটো, বোকে বা ফেস রিটাচ করার মতো এক্সটেনশন ব্যবহার করার অনুমতি দেয়।
Camera2 Extensions API-এর সাথে মানানসই কিনা তা দেখার জন্য ক্যামেরা ডিভাইস পরীক্ষা করা
নিম্নলিখিত কোড স্নিপেট চেক করে যে ডিভাইস Camera2 Extensions API সাপোর্ট করে কিনা। সব ডিভাইসে এক্সটেনশন কাজ করে না অথবা ডিভাইসে এক্সটেনশনের সাবসেট কাজ করতে পারে। স্নিপেটটি মানানসই ক্যামেরা আইডির একটি তালিকা প্রদান করে যা ক্যামেরা এক্সটেনশনকে সমর্থন করে।
Kotlin
private fun getExtensionCameraIds(cameraManager: CameraManager): List<String> = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { cameraManager.cameraIdList.filter { cameraId -> val characteristics = cameraManager.getCameraCharacteristics(cameraId) val extensionCharacteristics = cameraManager.getCameraExtensionCharacteristics(cameraId) val capabilities = characteristics.get(CameraCharacteristics.REQUEST_AVAILABLE_CAPABILITIES) extensionCharacteristics.supportedExtensions.isNotEmpty() && capabilities?.contains( CameraCharacteristics.REQUEST_AVAILABLE_CAPABILITIES_BACKWARD_COMPATIBLE ) ?: false } } else emptyList()
জাভা
private List<String> getExtensionCameraIds(CameraManager cameraManager) throws CameraAccessException { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { return Arrays.stream(cameraManager.getCameraIdList()).filter(cameraId -> { try { CameraCharacteristics characteristics = cameraManager.getCameraCharacteristics(cameraId); CameraExtensionCharacteristics extensionCharacteristics = cameraManager.getCameraExtensionCharacteristics(cameraId); IntStream capabilities = Arrays.stream( characteristics.get( CameraCharacteristics.REQUEST_AVAILABLE_CAPABILITIES ) ); return !extensionCharacteristics.getSupportedExtensions().isEmpty() && capabilities.anyMatch(capability -> capability == CameraCharacteristics .REQUEST_AVAILABLE_CAPABILITIES_BACKWARD_COMPATIBLE ); } catch (CameraAccessException e) { throw new RuntimeException(e); } }).collect(Collectors.toList()); } else { return Collections.emptyList(); } }
Camera2 Extensions API-এর সাহায্যে CameraExtensionSession তৈরি করুন
Camera2 Extensions API, মানানসই ডিভাইসের সাথে ব্যবহার করা হলে, আপনাকে নির্দিষ্ট কিছু ক্যামেরা এক্সটেনশন অ্যাক্সেস করতে দেয়। নিম্নলিখিত কোড স্নিপেট থেকে উদাহরণ সহ দেখানো হয়েছে যে
কীভাবে আগে থেকে থাকা Camera2 অ্যাপ্লিকেশনের জন্য নাইট ক্যাপচার মোড ব্যবহার করতে CameraExtensionSession
তৈরি করতে হয়।
Kotlin
private val captureCallbacks = object : CameraExtensionSession.ExtensionCaptureCallback() { // Implement Capture Callbacks } private val extensionSessionStateCallback = object : CameraExtensionSession.StateCallback() { override fun onConfigured(session: CameraExtensionSession) { cameraExtensionSession = session try { val captureRequest = cameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW).apply { addTarget(previewSurface) }.build() session.setRepeatingRequest( captureRequest, Dispatchers.IO.asExecutor(), captureCallbacks ) } catch (e: CameraAccessException) { Snackbar.make( previewView, "Failed to preview capture request", Snackbar.LENGTH_SHORT ).show() requireActivity().finish() } } override fun onClosed(session: CameraExtensionSession) { super.onClosed(session) cameraDevice.close() } override fun onConfigureFailed(session: CameraExtensionSession) { Snackbar.make( previewView, "Failed to start camera extension preview", Snackbar.LENGTH_SHORT ).show() requireActivity().finish() } } private fun startExtensionSession() { val outputConfig = arrayListOf( OutputConfiguration(stillImageReader.surface), OutputConfiguration(previewSurface) ) val extensionConfiguration = ExtensionSessionConfiguration( CameraExtensionCharacteristics.EXTENSION_NIGHT, outputConfig, Dispatchers.IO.asExecutor(), extensionSessionStateCallback ) cameraDevice.createExtensionSession(extensionConfiguration) }
জাভা
private CameraExtensionSession.ExtensionCaptureCallback captureCallbacks = new CameraExtensionSession.ExtensionCaptureCallback() { // Implement Capture Callbacks }; private CameraExtensionSession.StateCallback extensionSessionStateCallback = new CameraExtensionSession.StateCallback() { @Override public void onConfigured(@NonNull CameraExtensionSession session) { cameraExtensionSession = session; try { CaptureRequest.Builder captureRequestBuilder = cameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW); captureRequestBuilder.addTarget(previewSurface); CaptureRequest captureRequest = captureRequestBuilder.build(); session.setRepeatingRequest(captureRequest, backgroundExecutor, captureCallbacks); } catch (CameraAccessException e) { Snackbar.make( previewView, "Failed to preview capture request", Snackbar.LENGTH_SHORT ).show(); requireActivity().finish(); } } @Override public void onClosed(@NonNull CameraExtensionSession session) { super.onClosed(session); cameraDevice.close(); } @Override public void onConfigureFailed(@NonNull CameraExtensionSession session) { Snackbar.make( previewView, "Failed to start camera extension preview", Snackbar.LENGTH_SHORT ).show(); requireActivity().finish(); } }; private void startExtensionSession() { ArrayList<OutputConfiguration> outputConfig = new ArrayList<>(); outputConfig.add(new OutputConfiguration(stillImageReader.getSurface())); outputConfig.add(new OutputConfiguration(previewSurface)); ExtensionSessionConfiguration extensionConfiguration = new ExtensionSessionConfiguration( CameraExtensionCharacteristics.EXTENSION_NIGHT, outputConfig, backgroundExecutor, extensionSessionStateCallback ); }
অতিরিক্ত রিসোর্স
আরও তথ্যের জন্য, CameraExtensionCharacteristics
দেখুন এবং আরও জানতে পাবলিক Camera2 Extensions API স্যাম্পেল
দেখুন।