به روز رسانی CameraX دوربین دوگانه همزمان را آسان تر می کند



ارسال شده توسط Donovan McMurray – Developer Relations Engineer

CameraX، کتابخانه دوربین Jetpack اندروید، در حال دریافت به روز رس، هیجان انگیز برای ویژگی Dual Concurrent Camera خود است که ادغام این ویژگی را در برنامه شما آسان تر می کند. این ویژگی به شما امکان می دهد از 2 دوربین مختلف به طور همزمان استریم کنید. نسخه اصلی Dual Concurrent Camera در CameraX 1.3.0 منتشر شد و در حال حاضر یک جهش بزرگ در تسهیل اجرای این ویژگی بود.

شروع با 1.5.0-alpha01، CameraX اکنون ،یب دو جریان دوربین را نیز انجام خواهد داد. این به‌روزرس، یک عملکرد اضافی است و هیچ عملکرد قبلی را حذف نمی‌کند و تغییری قطعی در کد دوربین دوگانه همزمان فعلی شما نیست. برای اینکه به CameraX بگویید که ،یب را مدیریت کند، به سادگی از آن استفاده کنید جدید SingleCameraConfig سازنده که یک پارامتر جدید برای a دارد Composition Settings شی از آنجایی که شما 2 SingleCameraConfig ایجاد می کنید، باید با سازنده ای که استفاده می کنید سازگار باشید.

هیچ چیز در نحوه بررسی پشتیب، همزمان دوربین از نسخه قبلی این ویژگی تغییر نکرده است. به ،وان یادآوری، در اینجا این کد به نظر می رسد.

// Set up primary and secondary camera selectors if supported on device.
var primaryCameraSelector: CameraSelector? = null
var secondaryCameraSelector: CameraSelector? = null

for (cameraInfos in cameraProvider.availableConcurrentCameraInfos) {
    primaryCameraSelector = cameraInfos.first {
        it.lensFacing == CameraSelector.LENS_FACING_FRONT
    }.cameraSelector
    secondaryCameraSelector = cameraInfos.first {
        it.lensFacing == CameraSelector.LENS_FACING_BACK
    }.cameraSelector

    if (primaryCameraSelector == null || secondaryCameraSelector == null) {
        // If either a primary or secondary selector wasn't found, reset both
        // to move on to the next list of CameraInfos.
        primaryCameraSelector = null
        secondaryCameraSelector = null
    } else {
        // If both primary and secondary camera selectors were found, we can
        // conclude the search.
        break
    }
}

if (primaryCameraSelector == null || secondaryCameraSelector == null) {
    // Front and back concurrent camera not available. Handle accordingly.
}

در اینجا قطعه کد به روز شده ای است که نحوه اجرای تصویر در تصویر را نشان می دهد، با جریان دوربین جلوی کوچک شده تا در گوشه سمت راست پایین قرار گیرد. در این مثال، CameraX ،یب جریان های دوربین را مدیریت می کند.

// If 2 concurrent camera selectors were found, create 2 SingleCameraConfigs
// and compose them in a picture-in-picture layout.
val primary = SingleCameraConfig(
    cameraSelectorPrimary,
    useCaseGroup,
    CompositionSettings.Builder()
        .setAlpha(1.0f)
        .setOffset(0.0f, 0.0f)
        .setScale(1.0f, 1.0f)
        .build(),
    lifecycleOwner);
val secondary = SingleCameraConfig(
    cameraSelectorSecondary,
    useCaseGroup,
    CompositionSettings.Builder()
        .setAlpha(1.0f)
        .setOffset(2 / 3f - 0.1f, -2 / 3f + 0.1f)
        .setScale(1 / 3f, 1 / 3f)
        .build()
    lifecycleOwner);

// Bind to lifecycle
ConcurrentCamera concurrentCamera =
    cameraProvider.bindToLifecycle(listOf(primary, secondary));

شما محدود به طرح بندی تصویر در تصویر نیستید. برای مثال، می‌تو،د با تنظیم افست‌ها و فاکتورهای مقیاس‌بندی، یک طرح‌بندی کنار هم تعریف کنید. شما می‌خواهید هر دو بعد را به یک اندازه تغییر دهید تا از پیش‌نمایش کشیده جلوگیری کنید. در اینجا این است که چگونه ممکن است به نظر برسد.

// If 2 concurrent camera selectors were found, create 2 SingleCameraConfigs
// and compose them in a picture-in-picture layout.
val primary = SingleCameraConfig(
    cameraSelectorPrimary,
    useCaseGroup,
    CompositionSettings.Builder()
        .setAlpha(1.0f)
        .setOffset(0.0f, 0.25f)
        .setScale(0.5f, 0.5f)
        .build(),
    lifecycleOwner);
val secondary = SingleCameraConfig(
    cameraSelectorSecondary,
    useCaseGroup,
    CompositionSettings.Builder()
        .setAlpha(1.0f)
        .setOffset(0.5f, 0.25f)
        .setScale(0.5f, 0.5f)
        .build()
    lifecycleOwner);

// Bind to lifecycle
ConcurrentCamera concurrentCamera =
    cameraProvider.bindToLifecycle(listOf(primary, secondary));

ما هیجان زده هستیم که این بهبود را به یک ویژگی از قبل سازگار با توسعه دهندگان ارائه دهیم. واقعاً راه CameraX! Composition Settings در Dual Concurrent Camera در حال حاضر در حالت آلفا است، بنابراین اگر قبل از قفل شدن API درخواست ویژگی برای بهبود آن دارید، لطفاً بازخورد خود را در گروه بحث CameraX. و بررسی کنید کامل CameraX 1.5.0-alpha01 یادداشت ها را منتشر کنید تا ببینید چه چیزهای جدیدی در CameraX وجود دارد.


منبع: http://android-developers.googleblog.com/2024/10/camerax-update-makes-dual-concurrent-camera-easier.html