Apache Lisansı, Sürüm 2.0 ("Lisans") ile lisanslıdır; bu dosyayı Lisans koşulları dışında kullanamazsınız. Lisansın bir kopyasını şu adresten edinebilirsiniz:
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. -->
Android platformu, standart Android Camera2 API ve kamera HAL arayüzünü kullanarak tak-çalıştır USB kameraların (yani web kameralarının) kullanımını destekler. Web kameraları genellikle USB video sınıfı (UVC) sürücülerini destekler ve Linux'ta UVC kameraları kontrol etmek için standart Video4Linux (V4L) sürücüsü kullanılır.
Web kamerası desteği sayesinde cihazlar, görüntülü sohbet ve fotoğraf kioskları gibi basit kullanım alanlarında kullanılabilir. Bu özellik, Android telefonlardaki tipik dahili kamera HAL'lerinin yerini almaz ve yüksek çözünürlüklü ve yüksek hızlı akış, AR ve manuel ISP/sensör/lens kontrolü içeren performans açısından yoğun, karmaşık görevleri desteklemek için tasarlanmamıştır.
USB kamera HAL işlemi, USB cihaz kullanılabilirliğini dinleyen ve harici kamera cihazlarını buna göre listeleyen harici kamera sağlayıcının bir parçasıdır. İşlem, yerleşik kamera HAL işlemine benzer izinlere ve SE politikasına sahiptir. USB cihazlarla doğrudan iletişim kuran üçüncü taraf web kamerası uygulamaları, UVC cihazlara erişmek için normal kamera uygulamalarıyla aynı kamera izinlerini gerektirir.
Örnekler ve kaynaklar
USB kameraların nasıl uygulanacağı hakkında daha fazla bilgi için ExternalCameraProvider adresindeki harici kamera sağlayıcı referans uygulamasına bakın.
Harici kamera cihazı ve oturum uygulamaları, ExternalCameraDevice ve ExternalCameraDeviceSession dosyalarında yer alır.
API düzeyi 28'den itibaren Java istemci API'si, EXTERNAL donanım düzeyini içerir.
Uygulama
Uygulama, android.hardware.usb.host sistem özelliğini desteklemelidir.
UVC cihazlar için çekirdek desteği de etkinleştirilmelidir. Bu özelliği etkinleştirmek için ilgili çekirdek defconfig dosyalarına aşağıdakileri ekleyebilirsiniz.
+CONFIG_USB_VIDEO_CLASS=y
+CONFIG_MEDIA_USB_SUPPORT=y
Gerekli SELinux izinlerini, harici kamera yapılandırmasını ve harici kamera sağlayıcı bağımlılığını ekleyen harici kamera sağlayıcıyı ilgili cihaz derlemesinde etkinleştirmek için aşağıdaki adımları tamamlayın:
Harici kamera yapılandırma dosyasını ve harici kamera kitaplığını
device.mkdizinine ekleyin.+PRODUCT_PACKAGES += android.hardware.camera.provider-V1-external-service +PRODUCT_COPY_FILES += \ +device/manufacturerX/productY/external_camera_config.xml:$(TARGET_COPY_OUT_VENDOR)/etc/external_camera_config.xmlHarici kamera sağlayıcı adını cihazın Treble HAL manifestine ekleyin.
<hal format="aidl"> <name>android.hardware.camera.provider</name> <version>1</version> <interface> <name>ICameraProvider</name> <instance>internal/0</instance> + <instance>external/0</instance> </interface> </hal>Cihazın
sepolicy/service_contextsdosyasındaexternal/0AIDL kamera sağlayıcı örneğinihal_camera_servicehizmetine bağlayın. Daha fazla bilgi için AIDL HAL'leri için SEPolicy başlıklı makaleyi inceleyin.android.hardware.camera.provider.ICameraProvider/external/0 u:object_r:hal_camera_service:s0(İsteğe bağlı) Cihaz, Treble geçiş modunda çalışıyorsa
sepolicyöğesini güncelleyin. Böylececameraserver, UVC kameraya erişebilir.+# for external camera +allow cameraserver device:dir r_dir_perms; +allow cameraserver video_device:dir r_dir_perms; +allow cameraserver video_device:chr_file rw_file_perms;
external_camera_config.xml örneğini aşağıda bulabilirsiniz (telif hakkı satırları çıkarılmıştır).
<ExternalCamera> <Provider> <ignore> <!-- Internal video devices to be ignored by external camera HAL --> <id>0</id> <!-- No leading/trailing spaces --> <id>1</id> </ignore> </Provider> <!-- See ExternalCameraUtils.cpp for default values of Device configurations below --> <Device> <!-- Max JPEG buffer size in bytes--> <MaxJpegBufferSize bytes="3145728"/> <!-- 3MB (~= 1080p YUV420) --> <!-- Size of v4l2 buffer queue when streaming >= 30fps --> <!-- Larger value: more request can be cached pipeline (less janky) --> <!-- Smaller value: use less memory --> <NumVideoBuffers count="4"/> <!-- Size of v4l2 buffer queue when streaming < 30fps --> <NumStillBuffers count="2"/> <!-- List of maximum fps for various output sizes --> <!-- Any image size smaller than the size listed in Limit row will report fps (as minimum frame duration) up to the fpsBound value. --> <FpsList> <!-- width/height must be increasing, fpsBound must be decreasing--> <Limit width="640" height="480" fpsBound="30.0"/> <Limit width="1280" height="720" fpsBound="15.0"/> <Limit width="1920" height="1080" fpsBound="10.0"/> <!-- image size larger than the last entry will not be supported--> </FpsList> </Device> </ExternalCamera>
Özelleştirme
Android kamerayı genel özelleştirme seçenekleri veya cihaza özel optimizasyonlarla geliştirebilirsiniz.
Genel özelleştirmeler
external_camera_config.xml dosyasını değiştirerek harici kamera sağlayıcıyı özelleştirebilirsiniz. Müşteriler özellikle aşağıdaki parametreleri özelleştirebilir:
- Dahili kameraların video düğümleri hariçtir.
- Desteklenen resim boyutu ve kare hızı üst sınırı
- Aktif arabellek sayısı (takılma ve bellek dengesi)
Bu parametrelere ek olarak kendi parametrelerinizi ekleyebilir veya kendi yapılandırmalarınızı geliştirebilirsiniz.
Cihaza özel optimizasyonlar
Cihaza özel optimizasyonlar ekleyerek de performansı artırabilirsiniz.
Arabellek kopyalama/ölçeklendirme ve JPEG kod çözme/kodlama
Genel uygulamalar CPU (libyuv/libjpeg) kullanır ancak bunu cihaza özel optimizasyonlarla değiştirebilirsiniz.
HAL çıkış biçimi
Genel uygulamalarda aşağıdaki çıkış biçimleri kullanılır:
YUV_420_888içinIMPLEMENTATION_DEFINEDvideo arabelleğe alınıyor- Diğer tüm
IMPLEMENTATION_DEFINEDtamponları içinYUV12
Performansı artırmak için çıkış biçimlerini cihaza özel verimli biçimlerle değiştirebilirsiniz. Özelleştirilmiş bir uygulamada ek biçimleri de destekleyebilirsiniz.
Doğrulama
Harici kamera desteği olan cihazlar kamera CTS'sini geçmelidir. Harici USB web kamerasının, test çalıştırılırken ilgili cihaza takılı kalması gerekir. Aksi takdirde bazı test durumları başarısız olur.