Önceki Genişletilmiş Görünüm Sistemi (EVS) 1.0 sürümünde kamera cihazları cihazlar olarak kabul edilir ve bu nedenle, uygulamanın zum veya parlaklık gibi kamera kontrol parametrelerini değiştirmesini sağlar.
Bu durum EVS uygulamalarının kapasitesini kısıtlayabileceğinden, yeni EVS 1.1
Yeni yöntemler sunar ve uygulamanın birden fazla kamera programlamasını sağlar
tümü enum CameraParam
içinde tanımlanmış olan kontrol parametreleri:
/** * EVS Camera Parameter */ enum CameraParam : uint32_t { /** * The brightness of image frames */ BRIGHTNESS, /** * The contrast of image frames */ CONTRAST, /** * Automatic gain/exposure control */ AUTOGAIN, /** * Gain control */ GAIN, /** * Automatic Whitebalance */ AUTO_WHITE_BALANCE, /** * Manual white balance setting as a color temperature in Kelvin. */ WHITE_BALANCE_TEMPERATURE, /** * Image sharpness adjustment */ SHARPNESS, /** * Auto Exposure Control modes; auto, manual, shutter priority, or * aperture priority. */ AUTO_EXPOSURE, /** * Manual exposure time of the camera */ ABSOLUTE_EXPOSURE, /** * Set the focal point of the camera to the specified position. This * parameter may not be effective when auto focus is enabled. */ ABSOLUTE_FOCUS, /** * Enables continuous automatic focus adjustments. */ AUTO_FOCUS, /** * Specify the objective lens focal length as an absolute value. */ ABSOLUTE_ZOOM, };
Yöntemler şu şekilde tanımlanır:
/** * Requests to be a master client. * * When multiple clients subscribe to a single camera hardware and one of * them adjusts a camera parameter such as the contrast, it may disturb * other clients' operations. Therefore, the client must call this method * to be a master client. When it becomes a master, it can * change camera parameters until either it dies or explicitly gives up the * role. * * @return result EvsResult::OK if a master role is granted. * EvsResult::OWNERSHIP_LOST if there is already a * master client. */ setMaster() generates (EvsResult result); /** * Sets to be a master client forcibly. * * The client, which owns the display, has a high priority and can take over * a master role from other clients without the display. * * @param display IEvsDisplay handle. If this is valid, the calling client * is considered as the high priority client and therefore * it would take over a master role. * * @return result EvsResult::OK if a master role is granted. * EvsResult::OWNERSHIP_LOST if there is already a * master client with the display. */ forceMaster(IEvsDisplay display) generates (EvsResult result); /** * Retires from a master client role. * * @return result EvsResult::OK if this call is successful. * EvsResult::INVALID_ARG if the caller client is not a * master client. */ unsetMaster() generates (EvsResult result); /** * Retrieves a list of parameters this camera supports. * * @return params A list of CameraParam that this camera supports. */ getParameterList() generates (vec<CameraParam> params); /** * Requests a valid value range of a camera parameter * * @param id The identifier of camera parameter, CameraParam enum. * * @return min The lower bound of the valid parameter value range. * @return max The upper bound of the valid parameter value range. * @return step The resolution of values in valid range. */ getIntParameterRange(CameraParam id) generates (int32_t min, int32_t max, int32_t step); /** * Requests to set a camera parameter. * * @param id The identifier of camera parameter, * CameraParam enum. * value A desired parameter value. * @return result EvsResult::OK if it succeeds to set a parameter. * EvsResult::INVALID_ARG if either a requested * parameter is not supported or a given value is out * of bounds. * effectiveValue A programmed parameter value. This may differ * from what the client gives if, for example, the * driver does not support a target parameter. */ setIntParameter(CameraParam id, int32_t value) generates (EvsResult result, int32_t effectiveValue); /** * Retrieves a value of given camera parameter. * * @param id The identifier of camera parameter, CameraParam enum. * @return result EvsResult::OK if it succeeds to read a parameter. * EvsResult::INVALID_ARG if either a requested parameter is * not supported. * value A value of requested camera parameter. */ getIntParameter(CameraParam id) generates(EvsResult result, int32_t value);
getParameterList()
, bir parametre listesi döndürür
(CameraParam
sıralaması) bir istemcinin okuma ve yazma yetkisi vardır (istemci ana makineyse),
ve getIntParameterRange()
, geçerli değer aralığını ve çözünürlüğü belirtir.
Ana istemci bir kamera parametresini değiştirdiğinde aynı kameradaki diğer tüm istemciler
donanımına sahip bir PARAMETER_CHANGED
etkinliği alındığında
parametre kimliği ve yeni değer.
Not: Sensör sürücüsü, geçersiz parametreyi işleyebilir.
farklı değerler katar. Bir hata kodu döndürebilir veya
geçerli bir aralık belirtin ve uygulayın. Dolayısıyla, setIntParameter()
yöntemi,
etkili bir değer belirleyebilir ve müşteri bu değeri kullanarak isteğin nasıl
ele alınır.
Birden fazla kamera istemcisi arasında tahkim isteğinde bulunma
Önceki EVS tasarımı, aynı anda birden fazla uygulamanın tek bir kamera donanımına abone olunduğunda, bir uygulamanın Bir kamera parametresini değiştirerek diğer uygulamaların işlemlerini bozamaz. Ayrıca, Birden fazla müşteri aynı parametreyi farklı şekilde ayarlamak isteyebilir kamera hizmetlerinin çalışmasında beklenmeyen davranışlara neden olabilir.
EVS yöneticisi bu tür sorunların önüne geçmek için sadece ana istemciye izin verir.
bir kamera parametresi programlamak istiyorum. Herhangi bir kamera parametresini ayarlamaya çalışmadan önce istemci,
setMaster()
numaralı telefonu çağırarak ana müşteri olması ZORUNLUDUR
yöntemidir. Bu başarısız olursa zaten etkin bir ana istemci var demektir
kameranın donanımını kullanıyor. Geçerli ana müşteri ölünceye kadar veya
ana rolden unsetMaster()
üzerinden ayrılırsa başka hiçbir müşteri
bir kamera parametresini değiştirme izni bulunmaktadır. Ana istemci, ayrıcalığını geri verdiğinde
diğer tüm uygulamalar bir MASTER_RELEASED
etkinliğiyle bildirilir.
Yüksek önceliğe sahip müşteriler
EVS yöneticisi, yüksek seviyeli ekranın sahibi olan müşteriyi ele alır. öncelikte bulunur ve mevcut bir ana rolden ana rol çalmasına izin verir. Çünkü EVS sahipliğin yeniliğe dayalı olduğuna göre, yeni müşteri, sahip olduğumuz yeni göstermenizi sağlar.
Yüksek öncelikli müşteriler IEvsCamera::forceMaster(sp<IEvsDisplay>& display)
numarasını aramalıdır
size yardımcı olacağım. EVS yöneticisi belirli bir ekranın durumunu inceler
işleyicisi ve durumu geçerliyse (ve yalnızca buysa)
DisplayState::NOT_OPEN
veya DisplayState::DEAD
yerini alır. Ana rolü kaybeden müşteri ise
bir MASTER_RELEASED
etkinliği tarafından bildirilen ve herkese açık kullanıcı adı ZORUNLUDUR
inceleyeceğiz.