Kamera kontrol parametrelerini programlama

Ö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.