Camera3_device_ops Yapı Referansı

Camera3_device_ops Yapı Referansı

#include < camera3.h >

Veri alanları

int(* başlat )(const struct kamera3_device *, const kamera3_callback_ops_t *callback_ops)
int(* yapılandırma_akımları )(const struct kamera3_device *, kamera3_akım_yapılandırma_t *akış_listesi)
int(* Register_stream_buffers )(const struct kamera3_device *, const kamera3_stream_buffer_set_t *buffer_set)
const kamera_metadata_t *(* build_default_request_settings )(const struct kamera3_device *, int tipi)
int(* proses_capture_request )(const struct kamera3_device *, kamera3_capture_request_t *istek)
geçersiz(* get_metadata_vendor_tag_ops )(const struct kamera3_device *, seller_tag_query_ops_t *ops)
geçersiz(* dump )(const struct kamera3_device *, int fd)
int(* yıkama )(const struct kamera3_device *)
geçersiz * ayrılmış [8]

Detaylı Açıklama

Camera3.h dosyasının 2509. satırındaki tanım.

Saha Dokümantasyonu

int(*configure_streams)(const struct kamera3_device *, kamera3_stream_configuration_t *stream_list)

yapılandırma_akımları:

Yalnızca CAMERA_DEVICE_API_VERSION_3_0:

HAL kamera cihazı işleme hattını sıfırlayın ve yeni giriş ve çıkış akışlarını ayarlayın. Bu çağrı, mevcut herhangi bir akış yapılandırmasını, akış_listesinde tanımlanan akışlarla değiştirir. Bu yöntem , launchize() işleminden sonra, Process_capture_request() ile bir istek gönderilmeden önce en az bir kez çağrılacaktır.

Stream_list, en az bir çıkış özellikli akış içermelidir ve birden fazla giriş özellikli akış içeremez.

Stream_list, aynı zamanda o anda aktif olan akış kümesinde yer alan akışları da içerebilir (önceki çağrıdan,config_stream()'e yapılan çağrı). Bu akışlar zaten kullanım, max_buffers ve özel işaretçi için geçerli değerlere sahip olacaktır.

Böyle bir akışın arabellekleri zaten kayıtlıysa, akış için Register_stream_buffers() tekrar çağrılmayacak ve akıştan gelen arabellekler giriş isteklerine hemen dahil edilebilecektir.

HAL'in yeni yapılandırma nedeniyle mevcut bir akışın akış yapılandırmasını değiştirmesi gerekiyorsa, yapılandırma çağrısı sırasında kullanım ve/veya max_buffers değerlerini yeniden yazabilir.

Çerçeve böyle bir değişikliği algılayacak ve ardından akış arabelleklerini yeniden tahsis edecek ve bir istekte o akıştan gelen arabellekleri kullanmadan önce register_stream_buffers()' ı yeniden çağıracaktır.

Şu anda etkin olan bir akış akış_listesinde yer almıyorsa HAL, bu akışa yapılan tüm referansları güvenli bir şekilde kaldırabilir. Çerçeve tarafından daha sonraki bir yapılandırma() çağrısında yeniden kullanılmayacaktır ve bunun için tüm gralloc arabellekleri , yapılandırma_streams() çağrısı geri döndükten sonra serbest bırakılacaktır.

Stream_list yapısı çerçeveye aittir ve bu çağrı tamamlandıktan sonra bu yapıya erişilemeyebilir. Bireysel bir Camera3_stream_t yapısının adresi, artık Stream_list bağımsız değişkeninde o Camera3_stream_t'yi içermeyen ilk yapılandırma_stream() çağrısının sonuna kadar HAL tarafından erişim için geçerli kalacaktır. HAL ,config_streams() çağrısının kendisi sırasındaki kullanım ve max_buffers üyeleri dışında, akış yapısındaki değerleri özel işaretçi dışında değiştiremez.

Akış yeniyse, akış yapısının kullanım, max_buffer ve özel işaretçi alanlarının tümü 0'a ayarlanacaktır. HAL cihazının ,config_streams() çağrısı geri dönmeden önce bu alanları ayarlaması gerekir. Bu alanlar daha sonra çerçeve ve platform gralloc modülü tarafından her akış için gralloc arabelleklerini tahsis etmek üzere kullanılır.

Böyle yeni bir akışın arabelleklerinin bir yakalama isteğine dahil edilebilmesinden önce, çerçeve bu akışla birlikte Register_stream_buffers()' ı çağıracaktır. Ancak çerçevenin, bir istek göndermeden önce tüm akışlar için arabellekleri kaydetmesi gerekli değildir. Bu, (örneğin) bir önizleme akışının hızlı bir şekilde başlatılmasına olanak tanır ve diğer akışlar için tahsis daha sonra veya eşzamanlı olarak gerçekleşir.


Yalnızca CAMERA_DEVICE_API_VERSION_3_1:

HAL kamera cihazı işleme hattını sıfırlayın ve yeni giriş ve çıkış akışlarını ayarlayın. Bu çağrı, mevcut herhangi bir akış yapılandırmasını, akış_listesinde tanımlanan akışlarla değiştirir. Bu yöntem , launchize() işleminden sonra, Process_capture_request() ile bir istek gönderilmeden önce en az bir kez çağrılacaktır.

Stream_list, en az bir çıkış özellikli akış içermelidir ve birden fazla giriş özellikli akış içeremez.

Stream_list, aynı zamanda o anda aktif olan akış kümesinde yer alan akışları da içerebilir (önceki çağrıdan,config_stream()'e yapılan çağrı). Bu akışlar zaten kullanım, max_buffers ve özel işaretçi için geçerli değerlere sahip olacaktır.

Böyle bir akışın arabellekleri zaten kayıtlıysa, akış için Register_stream_buffers() tekrar çağrılmayacak ve akıştan gelen arabellekler giriş isteklerine hemen dahil edilebilecektir.

HAL'in yeni yapılandırma nedeniyle mevcut bir akışın akış yapılandırmasını değiştirmesi gerekiyorsa, yapılandırma çağrısı sırasında kullanım ve/veya max_buffers değerlerini yeniden yazabilir.

Çerçeve böyle bir değişikliği algılayacak ve ardından akış arabelleklerini yeniden tahsis edecek ve bir istekte o akıştan gelen arabellekleri kullanmadan önce register_stream_buffers()' ı yeniden çağıracaktır.

Şu anda etkin olan bir akış akış_listesinde yer almıyorsa HAL, bu akışa yapılan tüm referansları güvenli bir şekilde kaldırabilir. Çerçeve tarafından daha sonraki bir yapılandırma() çağrısında yeniden kullanılmayacaktır ve bunun için tüm gralloc arabellekleri , yapılandırma_streams() çağrısı geri döndükten sonra serbest bırakılacaktır.

Stream_list yapısı çerçeveye aittir ve bu çağrı tamamlandıktan sonra bu yapıya erişilemeyebilir. Bireysel bir Camera3_stream_t yapısının adresi, artık Stream_list bağımsız değişkeninde o Camera3_stream_t'yi içermeyen ilk yapılandırma_stream() çağrısının sonuna kadar HAL tarafından erişim için geçerli kalacaktır. HAL ,config_streams() çağrısının kendisi sırasındaki kullanım ve max_buffers üyeleri dışında, akış yapısındaki değerleri özel işaretçi dışında değiştiremez.

Akış yeniyse, akış yapısının max_buffer ve özel işaretçi alanlarının tümü 0'a ayarlanacaktır. Kullanım, tüketici kullanım bayraklarına ayarlanacaktır. HAL cihazının, config_streams() çağrısı geri dönmeden önce bu alanları ayarlaması gerekir. Bu alanlar daha sonra çerçeve ve platform gralloc modülü tarafından her akış için gralloc arabelleklerini tahsis etmek üzere kullanılır.

Böyle yeni bir akışın arabelleklerinin bir yakalama isteğine dahil edilebilmesinden önce, çerçeve bu akışla birlikte Register_stream_buffers()' ı çağıracaktır. Ancak çerçevenin, bir istek göndermeden önce tüm akışlar için arabellekleri kaydetmesi gerekli değildir. Bu, (örneğin) bir önizleme akışının hızlı bir şekilde başlatılmasına olanak tanır ve diğer akışlar için tahsis daha sonra veya eşzamanlı olarak gerçekleşir.


>= CAMERA_DEVICE_API_VERSION_3_2:

HAL kamera cihazı işleme hattını sıfırlayın ve yeni giriş ve çıkış akışlarını ayarlayın. Bu çağrı, mevcut herhangi bir akış yapılandırmasını, akış_listesinde tanımlanan akışlarla değiştirir. Bu yöntem , launchize() işleminden sonra, Process_capture_request() ile bir istek gönderilmeden önce en az bir kez çağrılacaktır.

Stream_list, en az bir çıkış özellikli akış içermelidir ve birden fazla giriş özellikli akış içeremez.

Stream_list, aynı zamanda o anda aktif olan akış kümesinde yer alan akışları da içerebilir (önceki çağrıdan,config_stream()'e yapılan çağrı). Bu akışlar zaten kullanım, max_buffers ve özel işaretçi için geçerli değerlere sahip olacaktır.

HAL'in yeni yapılandırma nedeniyle mevcut bir akışın akış yapılandırmasını değiştirmesi gerekiyorsa, yapılandırma çağrısı sırasında kullanım ve/veya max_buffers değerlerini yeniden yazabilir.

Çerçeve böyle bir değişikliği algılayacak ve daha sonra bir istekte o akıştan gelen arabellekleri kullanmadan önce akış arabelleklerini yeniden tahsis edebilir.

Şu anda etkin olan bir akış akış_listesinde yer almıyorsa HAL, bu akışa yapılan tüm referansları güvenli bir şekilde kaldırabilir. Çerçeve tarafından daha sonraki bir yapılandırma() çağrısında yeniden kullanılmayacaktır ve bunun için tüm gralloc arabellekleri , yapılandırma_streams() çağrısı geri döndükten sonra serbest bırakılacaktır.

Stream_list yapısı çerçeveye aittir ve bu çağrı tamamlandıktan sonra bu yapıya erişilemeyebilir. Bireysel bir Camera3_stream_t yapısının adresi, artık Stream_list bağımsız değişkeninde o Camera3_stream_t'yi içermeyen ilk yapılandırma_stream() çağrısının sonuna kadar HAL tarafından erişim için geçerli kalacaktır. HAL ,config_streams() çağrısının kendisi sırasındaki kullanım ve max_buffers üyeleri dışında, akış yapısındaki değerleri özel işaretçi dışında değiştiremez.

Akış yeniyse, akış yapısının max_buffer ve özel işaretçi alanlarının tümü 0'a ayarlanacaktır. Kullanım, tüketici kullanım bayraklarına ayarlanacaktır. HAL cihazının, config_streams() çağrısı geri dönmeden önce bu alanları ayarlaması gerekir. Bu alanlar daha sonra çerçeve ve platform gralloc modülü tarafından her akış için gralloc arabelleklerini tahsis etmek üzere kullanılır.

Yeni tahsis edilen arabellekler, çerçeve tarafından herhangi bir zamanda bir yakalama isteğine dahil edilebilir. Bir gralloc arabelleği, proses_capture_result ile çerçeveye döndürüldüğünde (ve ilgili yayın_fence'i sinyallendiğinde), çerçeve onu herhangi bir zamanda serbest bırakabilir veya yeniden kullanabilir.


Önkoşullar:

Çerçeve bu yöntemi yalnızca hiçbir yakalama işlenmediğinde çağırır. Yani, tüm sonuçlar çerçeveye döndürüldü ve tüm uçuş içi giriş ve çıkış arabellekleri döndürüldü ve bunların serbest bırakma senkronizasyon çitleri HAL tarafından sinyallendi. Yapılandırma_streams() çağrısı devam ederken çerçeve, yakalama için yeni istekler göndermeyecektir.

Son koşullar:

HAL cihazının, kamera cihazının statik meta verilerinde belgelendiği gibi, çıkış akışlarının boyutları ve formatları dikkate alındığında mümkün olan maksimum çıkış kare hızını sağlayacak şekilde kendisini yapılandırması gerekir.

Performans gereklilikleri:

Bu çağrının çok ağır olması ve görüntü sensörünün ve kamera işleme hattının sıfırlanmasını ve yeniden yapılandırılmasını gerektirebileceğinden tamamlanması muhtemelen birkaç yüz milisaniye sürmesi bekleniyor. Bununla birlikte, HAL cihazı, uygulamanın çalışma modu değişiklikleri (hareketsiz yakalamadan video kaydına geçiş gibi) sırasında kullanıcının görebileceği duraklamaları en aza indirmek için yeniden yapılandırma gecikmesini en aza indirmeye çalışmalıdır.

HAL bu çağrıdan 500 ms içinde, 1000 ms içinde ise bu çağrıdan dönmelidir.

Dönüş değerleri:

0: Başarılı akış yapılandırmasında

-EINVAL: İstenen akış yapılandırması geçersizse. Geçersiz akış yapılandırmalarının bazı örnekleri şunları içerir:

  • 1'den fazla giriş özellikli akış dahil (GİRİŞ veya ÇİFT YÖNLÜ)
  • Çıkış özellikli akışlar dahil değildir (ÇIKIŞ veya ÇİFT YÖNLÜ)
  • Desteklenmeyen formatlara sahip veya bu format için desteklenmeyen boyuta sahip akışlar dahil.
  • Belirli bir formatta çok fazla çıktı akışı dahil.
  • Desteklenmeyen döndürme yapılandırması (yalnızca sürümü >= CAMERA_DEVICE_API_VERSION_3_3 olan cihazlar için geçerlidir)
  • Akış boyutları/biçimleri, NORMAL olmayan mod için kamera3_akışı_yapılandırma_t->işlem_modu gereksinimlerini karşılamıyor veya talep edilen işlem_modu HAL tarafından desteklenmiyor. (yalnızca sürümü >= CAMERA_DEVICE_API_VERSION_3_3 olan cihazlar için geçerlidir)

Akış yapılandırmaları yapılandırmadan önce kontrol edildiğinden, geçersiz bir akış yapılandırması gönderen çerçevenin normal bir işlem olmadığını unutmayın. Geçersiz bir yapılandırma, çerçeve kodunda bir hatanın bulunduğu veya HAL'in statik meta verileri ile akışlardaki gereksinimler arasında bir uyumsuzluk olduğu anlamına gelir.

-ENODEV: Önemli bir hata oluştuysa ve cihaz artık çalışmıyorsa. Bu hata döndürüldükten sonra çerçeve tarafından yalnızca close() başarıyla çağrılabilir.

Camera3.h dosyasının 2769. satırındaki tanım.

const kamera_metadata_t *(* build_default_request_settings)(const struct kamera3_device *, int tipi)

build_default_request_settings:

Standart kamera kullanım durumları için yakalama ayarları oluşturun.

Cihazın, CAMERA3_TEMPLATE_* numaralandırmalarından biri olması gereken, istenen kullanım durumunu karşılayacak şekilde yapılandırılmış bir ayarlar arabelleği döndürmesi gerekir. Tüm istek kontrol alanları dahil edilmelidir.

HAL bu yapının sahipliğini korur ancak yapıya yönelik işaretçi, cihaz kapatılıncaya kadar geçerli olmalıdır. Çerçeve ve HAL, bu çağrı tarafından döndürüldükten sonra arabelleği değiştiremeyebilir. Aynı arabellek, aynı şablona veya diğer şablonlara yönelik sonraki çağrılar için döndürülebilir.

Performans gereklilikleri:

Bu, engellenmeyen bir çağrı olmalıdır. HAL bu çağrıdan 1 ms içinde, bu çağrıdan ise 5 ms içinde dönmelidir.

Dönüş değerleri:

Geçerli meta veriler: Varsayılan ayarlar arabelleğinin başarıyla oluşturulması durumunda.

NULL: Önemli bir hata durumunda. Bu döndürüldükten sonra, çerçeve tarafından yalnızca close() yöntemi başarıyla çağrılabilir.

Camera3.h dosyasının 2859. satırındaki tanım.

void(* dump)(const struct kamera3_device *, int fd)

çöplük:

Kamera cihazının hata ayıklama durumunu yazdırın. Bu, kamera hizmetinden dumpsys aracını kullanırken veya bir hata raporu yakalarken meydana gelen bir hata ayıklama dökümü istendiğinde çerçeve tarafından çağrılacaktır.

Aktarılan dosya tanımlayıcı, dprintf() veya write() kullanılarak hata ayıklama metni yazmak için kullanılabilir. Metin yalnızca ASCII kodlamasında olmalıdır.

Performans gereklilikleri:

Bu, engellenmeyen bir çağrı olmalıdır. HAL bu çağrıdan 1 ms içinde, 10 ms içinde bu çağrıdan dönmelidir. Bu çağrı, kameranın çalışması sırasında herhangi bir noktada çağrılabileceği için kilitlenmelerden kaçınmalıdır. Kullanılan tüm senkronizasyon temelleri (muteks kilitleri veya semaforlar gibi) bir zaman aşımı ile edinilmelidir.

Camera3.h dosyasının 2971. satırındaki tanım.

int(* floş)(const struct kamera3_device *)

floş:

Belirtilen cihazdaki işlemde olan tüm yakalamaları ve işlem hattındaki tüm arabellekleri temizleyin. Çerçeve , birconfigure_streams() çağrısına hazırlanmak amacıyla tüm durumu olabildiğince hızlı bir şekilde boşaltmak için bunu kullanacaktır.

Başarılı bir şekilde döndürülmesi için hiçbir arabelleğe gerek yoktur, bu nedenle , floş() sırasında tutulan her arabellek (başarılı bir şekilde doldurulup doldurulmadığına bakılmaksızın) CAMERA3_BUFFER_STATUS_ERROR ile döndürülebilir. Başarılı bir şekilde doldurulmaları koşuluyla, HAL'in bu çağrı sırasında geçerli (CAMERA3_BUFFER_STATUS_OK) arabellekleri döndürmesine izin verildiğini unutmayın.

Şu anda HAL'de bulunan tüm taleplerin mümkün olan en kısa sürede geri döndürülmesi bekleniyor. Süreçte olmayan istekler hemen hata döndürmelidir. Kesintiye uğrayan donanım blokları durdurulmalı, kesintisiz olan bloklar ise beklenmelidir.

floş() , proses_capture_request()' in hızlı bir şekilde geri döneceği ve bu proses_capture_request çağrısında gönderilen isteğin diğer tüm uçuş içi istekler gibi ele alınacağı beklentisiyle, proses_capture_request() ile eşzamanlı olarak çağrılabilir. Eşzamanlılık sorunları nedeniyle, HAL'in bakış açısından, bir proses_capture_request() çağrısının, temizleme başlatıldıktan ancak henüz geri dönmedikten sonra başlatılabilmesi mümkündür. Böyle bir çağrı, floş() geri dönmeden önce gerçekleşirse, HAL, yeni yakalama isteğini diğer hareket halindeki bekleyen istekler gibi ele almalıdır (aşağıdaki #4'e bakın).

Daha spesifik olarak HAL'in çeşitli durumlar için aşağıdaki gereksinimlere uyması gerekir:

  1. HAL'in iptal etmesi/durdurması için çok geç olan ve HAL tarafından normal şekilde tamamlanacak yakalamalar için; yani HAL normal şekilde deklanşör/bildirim ve proses_capture_result ve arabellekleri gönderebilir.
  2. Herhangi bir işlem yapmamış bekleyen istekler için HAL, notify CAMERA3_MSG_ERROR_REQUEST'i çağırmalı ve tüm çıktı arabelleklerini proses_capture_result ile hata durumunda (CAMERA3_BUFFER_STATUS_ERROR) döndürmelidir. HAL, serbest bırakma çitini bir hata durumuna sokmamalıdır; bunun yerine, serbest bırakma çitleri, çerçeve tarafından geçen edinme çitlerine veya HAL tarafından zaten beklenmişse -1'e ayarlanmalıdır. Bu aynı zamanda HAL'ın CAMERA3_MSG_SHUTTER ile notify() işlevini zaten çağırdığı ancak herhangi bir meta veri/geçerli arabellek üretmeyeceği yakalamalar için izlenecek yoldur. CAMERA3_MSG_ERROR_REQUEST'ten sonra, belirli bir çerçeve için yalnızca CAMERA3_BUFFER_STATUS_ERROR içinde arabellekleri olan proses_capture_results'a izin verilir. Boş olmayan meta verilere sahip başka bildirimlere veya proses_capture_result'a izin verilmez.
  3. Tüm çıktı arabelleklerine veya eksik meta verilere sahip olmayan, kısmen tamamlanmış beklemedeki istekler için HAL aşağıdakileri izlemelidir:

    3.1. Beklenen sonuç meta verilerinin bir kısmı (yani bir veya daha fazla kısmi meta veri) yakalama için kullanılamayacaksa CAMERA3_MSG_ERROR_RESULT ile bildirim gönderin.

    3.2. Yakalama için üretilmeyecek her arabellek için CAMERA3_MSG_ERROR_BUFFER ile bildirim çağırın.

    3.3 Process_capture_result ile herhangi bir arabellek/meta veri döndürülmeden önce yakalama zaman damgasını içeren CAMERA3_MSG_SHUTTER ile bildirimi çağırın.

    3.4 Bazı sonuçlar üretecek yakalamalar için HAL, CAMERA3_MSG_ERROR_REQUEST'i çağırmamalıdır çünkü bu tam bir arızayı gösterir.

    3.5. Geçerli arabellekler/meta veriler çerçeveye normal şekilde aktarılmalıdır.

    3.6. Başarısız arabellekler, durum 2'de açıklandığı gibi çerçeveye döndürülmelidir. Ancak başarısız arabelleklerin, geçerli arabelleklerin yaptığı katı sıralamayı takip etmesi gerekmez ve geçerli arabelleklere göre sıra dışı olabilir. Örneğin A, B, C, D, E tamponları gönderilirse, D ve E başarısız olursa A, E, B, D, C kabul edilebilir bir iade emridir.

    3.7. Tamamen eksik meta veriler için CAMERA3_MSG_ERROR_RESULT'u çağırmak yeterlidir; NULL meta veriler veya eşdeğeri ile proses_capture_result'u çağırmaya gerek yoktur.

  4. Process_capture_request() çağrısı etkinken bir floş() çağrılırsa, bu süreç çağrısının mümkün olan en kısa sürede geri dönmesi gerekir. Ayrıca, floş() çağrıldıktan sonra ancak floş() geri dönmeden önce bir proses_capture_request() çağrısı yapılırsa, geç proses_capture_request çağrısı tarafından sağlanan yakalama isteği, yukarıdaki 2 numaralı durumda bekleyen bir istek gibi ele alınmalıdır.

Flush() yalnızca HAL'de bekleyen arabellek veya istek kalmadığında geri dönmelidir. Çerçeve,config_streams'i çağırabilir (HAL durumu artık durdurulduğundan) veya yeni istekler yayınlayabilir.

Yalnızca tamamen başarılı ve tamamen başarısız sonuç durumlarını desteklemenin yeterli olduğunu unutmayın. Bununla birlikte, kısmi arıza durumlarının da desteklenmesi son derece arzu edilir, çünkü bu, çağrının genel performansının iyileştirilmesine yardımcı olabilir.

Performans gereklilikleri:

HAL bu çağrıdan 100ms içinde, bu çağrıdan ise 1000ms içinde dönmelidir. Ve bu çağrının boru hattı gecikmesinden daha uzun süre bloke edilmemesi gerekir (tanım için S7'ye bakın).

Versiyon bilgisi:

yalnızca cihaz sürümü >= CAMERA_DEVICE_API_VERSION_3_1 ise kullanılabilir.

Dönüş değerleri:

0: Kamera HAL'in başarılı bir şekilde yıkanması üzerine.

-EINVAL: Giriş hatalı biçimlendirilmişse (cihaz geçerli değildir).

-ENODEV: Kamera cihazı ciddi bir hatayla karşılaştıysa. Bu hata döndürüldükten sonra çerçeve tarafından yalnızca close() yöntemi başarıyla çağrılabilir.

Camera3.h dosyasının 3077. satırındaki tanım.

void(* get_metadata_vendor_tag_ops)(const struct kamera3_device *, seller_tag_query_ops_t *ops)

get_metadata_vendor_tag_ops:

Satıcı uzantısı meta veri etiketi bilgilerini sorgulamak için yöntemler alın. HAL, tüm satıcı etiketi işlem yöntemlerini doldurmalı veya herhangi bir satıcı etiketi tanımlanmamışsa işlemleri değiştirmeden bırakmalıdır.

Satıcı_tag_query_ops_t'nin tanımı system/media/camera/include/system/camera_metadata.h dosyasında bulunabilir.

>= CAMERA_DEVICE_API_VERSION_3_2: KULLANIMDAN KALDIRILDI. Bu işlev kullanımdan kaldırıldı ve HAL tarafından NULL olarak ayarlanmalıdır. Lütfen bunun yerine get_vendor_tag_ops'u Camera_common.h dosyasına uygulayın.

Camera3.h dosyasının 2950. satırındaki tanım.

int(* başlat)(const struct kamera3_device *, const kamera3_callback_ops_t *callback_ops)

başlat:

Çerçeve geri çağırma işlevi işaretçilerini HAL'a iletmek için tek seferlik başlatma. Başarılı bir open() çağrısından sonra, kamera3_device_ops yapısında başka işlevler çağrılmadan önce bir kez çağrılacaktır.

Performans gereklilikleri:

Bu, engellenmeyen bir çağrı olmalıdır. HAL bu çağrıdan 5 ms içinde, bu çağrıdan ise 10 ms içinde dönmelidir.

Dönüş değerleri:

0: Başarılı başlatmada

-ENODEV: Başlatma başarısız olursa. Bundan sonra çerçeve tarafından yalnızca close() başarıyla çağrılabilir.

Camera3.h dosyasının 2530. satırındaki tanım.

int(* proses_capture_request)(const struct kamera3_device *, kamera3_capture_request_t *istek)

proses_capture_request:

HAL'a yeni bir yakalama isteği gönderin. HAL, bir sonraki işleme isteğini kabul etmeye hazır olana kadar bu çağrıdan geri dönmemelidir. Çerçeve tarafından aynı anda yalnızca bir proses_capture_request() çağrısı yapılacaktır ve çağrıların tümü aynı iş parçacığından olacaktır. Process_capture_request() 'e bir sonraki çağrı, yeni bir istek ve ilgili arabellekler mevcut olur olmaz yapılacaktır. Normal bir önizleme senaryosunda bu, işlevin çerçeve tarafından neredeyse anında yeniden çağrılacağı anlamına gelir.

Gerçek istek işleme eş zamanlı değildir ve yakalama sonuçları, proses_capture_result() çağrısı aracılığıyla HAL tarafından döndürülür. Bu çağrı, sonuç meta verilerinin kullanılabilir olmasını gerektirir, ancak çıktı arabellekleri, beklenecek senkronizasyon çitleri sağlayabilir. Tam çıktı kare hızını korumak için birden fazla isteğin aynı anda yayında olması bekleniyor.

Çerçeve, istek yapısının sahipliğini korur. Yalnızca bu görüşme sırasında geçerli olacağı garanti edilir. HAL cihazı, yakalama işlemi için saklaması gereken bilgilerin kopyalarını oluşturmalıdır. HAL, tamponların çitlerini beklemekten, kapatmaktan ve tampon tutamaçlarını çerçeveye geri döndürmekten sorumludur.

Eğer input_buffer NULL değilse HAL, giriş arabelleğinin serbest bırakma senkronizasyon çiti için dosya tanımlayıcısını input_buffer->release_fence içine yazmalıdır. HAL, giriş arabelleği serbest bırakma senkronizasyon çiti için -1 değerini döndürürse, çerçeve, giriş arabelleğini hemen yeniden kullanmakta serbesttir. Aksi takdirde çerçeve, giriş arabelleğini yeniden doldurmadan ve yeniden kullanmadan önce senkronizasyon sınırında bekleyecektir.

>= CAMERA_DEVICE_API_VERSION_3_2:

Her istekte çerçeve tarafından sağlanan giriş/çıkış arabellekleri yepyeni olabilir (HAL tarafından daha önce hiç görülmemiş).


Performans hususları:

Yeni bir arabelleğin kullanılması son derece hafif olmalı ve kare hızında bozulma veya kare titremesi olmamalıdır.

Bu çağrının, özellikle akış durumları için (işleme sonrası kalite ayarları FAST olarak ayarlanmış) istenen kare hızının sürdürülebilmesini sağlayacak kadar hızlı geri dönmesi gerekir. HAL bu çağrıya 1 çerçeve aralığında geri dönmeli ve bu çağrıdan 4 çerçeve aralığında dönmelidir.

Dönüş değerleri:

0: Yakalama isteğinin işlenmesi başarılı bir şekilde başlatıldığında

-EINVAL: Giriş hatalı biçimlendirilmişse (izin verilmediğinde ayarlar NULL'dur, 0 çıkış arabelleği vardır, vb.) ve yakalama işlemi başlatılamaz. İstek işleme sırasındaki hatalar , Camera3_callback_ops_t.notify() çağrılarak ele alınmalıdır. Bu hata durumunda çerçeve, akış tamponlarının çitleri ve tampon tutamaçlarının sorumluluğunu üstlenecektir; HAL, çitleri kapatmamalı veya bu arabellekleri proses_capture_result ile döndürmemelidir.

-ENODEV: Kamera cihazı ciddi bir hatayla karşılaştıysa. Bu hata döndürüldükten sonra çerçeve tarafından yalnızca close() yöntemi başarıyla çağrılabilir.

Camera3.h dosyasının 2928. satırındaki tanım.

int(* Register_stream_buffers)(const struct kamera3_device *, const kamera3_stream_buffer_set_t *buffer_set)

Register_stream_buffers:

>= CAMERA_DEVICE_API_VERSION_3_2:

KULLANIMDAN KALDIRILDI. Bu çağrılmayacak ve NULL olarak ayarlanmalıdır.

<= CAMERA_DEVICE_API_VERSION_3_1:

Belirli bir akış için arabellekleri HAL aygıtıyla kaydedin. Bu yöntem,config_streams tarafından yeni bir akış tanımlandıktan sonra ve bu akıştan gelen arabellekler bir yakalama isteğine dahil edilmeden önce çerçeve tarafından çağrılır. Aynı akış sonraki birconfig_streams() çağrısında listeleniyorsa, bu akış için Register_stream_buffers yeniden çağrılmaz .

Çerçevenin, ilk yakalama isteğini göndermeden önce tüm yapılandırılmış akışlar için arabellekleri kaydetmesine gerek yoktur. Bu, diğer akışlar tahsis edilmeye devam ederken önizlemenin (veya benzer kullanım durumlarının) hızlı başlatılmasına olanak tanır.

Bu yöntemin amacı, HAL cihazının arabellekleri daha sonra kullanmak üzere eşlemesine veya başka şekilde hazırlamasına olanak sağlamaktır. Aktarılan arabellekler kullanım için zaten kilitlenecektir. Çağrının sonunda tüm arabelleklerin akışa döndürülmeye hazır olması gerekir. Buffer_set argümanı yalnızca bu çağrının süresi boyunca geçerlidir.

Akış formatı HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED olarak ayarlanmışsa, kamera HAL'si, platforma özel piksel formatı bilgilerini belirlemek için buraya aktarılan arabellekleri incelemelidir.

Performans gereklilikleri:

Bu, engellenmeyen bir çağrı olmalıdır. HAL bu çağrıdan 1 ms içinde, bu çağrıdan ise 5 ms içinde dönmelidir.

Dönüş değerleri:

0: Yeni akış arabelleklerinin başarıyla kaydedilmesi durumunda

-EINVAL: Stream_buffer_set geçerli bir etkin akışa başvurmuyorsa veya arabellek dizisi geçersizse.

-ENOMEM: Tamponların kaydedilmesinde bir hata oluştuysa. Çerçeve, tüm akış arabelleklerinin kayıtlı olmadığını dikkate almalıdır ve daha sonra yeniden kaydolmayı deneyebilir.

-ENODEV: Önemli bir hata varsa ve cihaz artık çalışmıyorsa. Bu hata döndürüldükten sonra çerçeve tarafından yalnızca close() başarıyla çağrılabilir.

Camera3.h dosyasının 2823. satırındaki tanım.

geçersiz* ayrılmış[8]

Camera3.h dosyasının 3080. satırındaki tanım.


Bu yapıya ilişkin belgeler aşağıdaki dosyadan oluşturulmuştur:
  • donanım/libdonanım/include/donanım/ kamera3.h