Kamerasteuerungsparameter programmieren,Kamerasteuerungsparameter programmieren

In der vorherigen Version des Extended View System (EVS) 1.0 galten Kamerageräte als schreibgeschützte Geräte und daher gab es keine Methode, mit der die App Kamerasteuerungsparameter wie Zoom oder Helligkeit ändern konnte.

Da dies die Leistungsfähigkeit von EVS-Apps einschränken könnte, führt das neue EVS 1.1 neue Methoden ein und ermöglicht der App die Programmierung mehrerer Kamerasteuerungsparameter, die alle im enum CameraParam definiert sind:

/**
 * 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,
};

Methoden sind definiert als:

/**
 * 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() gibt eine Liste von Parametern ( CameraParam Enum) zurück, die ein Client lesen und schreiben kann (wenn der Client ein Master ist), und getIntParameterRange() gibt den gültigen Wertebereich und die gültige Auflösung weiter. Wenn ein Master-Client einen Kameraparameter ändert, werden alle anderen Clients auf derselben Kamera-Hardware benachrichtigt, indem sie ein PARAMETER_CHANGED Ereignis mit einer Parameter-ID und einem neuen Wert erhalten.

Hinweis: Der Sensortreiber behandelt ungültige Parameterwerte möglicherweise unterschiedlich. Es kann einfach einen Fehlercode zurückgeben oder den Wert im gültigen Bereich beschneiden und anwenden. Daher gibt die Methode setIntParameter() einen effektiven Wert zurück und der Client kann diesen Wert verwenden, um zu bestätigen, wie die Anfrage behandelt wurde.

Fordern Sie eine Schlichtung zwischen mehreren Kamera-Clients an

Da das vorherige EVS-Design es mehreren Apps ermöglichte, gleichzeitig eine einzelne Kamera-Hardware zu abonnieren, ist es möglich, dass eine App den Betrieb anderer Apps durch die Änderung eines Kameraparameters stören kann. Außerdem möchten mehrere Clients möglicherweise denselben Parameter unterschiedlich anpassen und verursachen dadurch unerwartetes Verhalten bei der Ausführung von Kameradiensten.

Um solche Probleme zu vermeiden, erlaubt der EVS-Manager nur dem Master- Client, einen Kameraparameter zu programmieren. Bevor versucht wird, Kameraparameter anzupassen, MUSS der Client durch Aufrufen der setMaster() Methode zum Master-Client werden. Wenn dies fehlschlägt, bedeutet dies, dass auf dieser Kamerahardware bereits ein aktiver Master-Client vorhanden ist. Bis der aktuelle Master-Client stirbt oder durch unsetMaster() explizit seine Master-Rolle aufgibt, ist es keinem anderen Client gestattet, einen Kameraparameter zu ändern. Wenn ein Master-Client seine Berechtigung zurückgibt, werden alle anderen Apps durch ein MASTER_RELEASED -Ereignis benachrichtigt.

Kunden mit hoher Priorität

Der EVS-Manager verwaltet den Client, der die Anzeige mit hoher Priorität besitzt, und ermöglicht ihm, einem aktuellen Master eine Master-Rolle zu stehlen. Da die Eigentümerschaft der EVS-Anzeige auf der Aktualität basiert, kann der neue Client mit der Anzeige sogar den aktuellen Client ersetzen.

Clients mit hoher Priorität müssen IEvsCamera::forceMaster(sp<IEvsDisplay>& display) aufrufen, um eine Masterrolle zu erhalten. Der EVS-Manager untersucht den Status eines bestimmten Anzeigehandles und nur dann , wenn sein Status gültig ist und weder DisplayState::NOT_OPEN noch DisplayState::DEAD einen Master ersetzen. Der Client, der gerade die Master-Rolle verliert, wird durch ein MASTER_RELEASED Ereignis benachrichtigt und MUSS damit ordnungsgemäß umgehen.

,

In der vorherigen Version des Extended View System (EVS) 1.0 galten Kamerageräte als schreibgeschützte Geräte und daher gab es keine Methode, mit der die App Kamerasteuerungsparameter wie Zoom oder Helligkeit ändern konnte.

Da dies die Leistungsfähigkeit von EVS-Apps einschränken könnte, führt das neue EVS 1.1 neue Methoden ein und ermöglicht der App die Programmierung mehrerer Kamerasteuerungsparameter, die alle im enum CameraParam definiert sind:

/**
 * 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,
};

Methoden sind definiert als:

/**
 * 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() gibt eine Liste von Parametern ( CameraParam Enum) zurück, die ein Client lesen und schreiben kann (wenn der Client ein Master ist), und getIntParameterRange() gibt den gültigen Wertebereich und die gültige Auflösung weiter. Wenn ein Master-Client einen Kameraparameter ändert, werden alle anderen Clients auf derselben Kamera-Hardware benachrichtigt, indem sie ein PARAMETER_CHANGED Ereignis mit einer Parameter-ID und einem neuen Wert erhalten.

Hinweis: Der Sensortreiber behandelt ungültige Parameterwerte möglicherweise unterschiedlich. Es kann einfach einen Fehlercode zurückgeben oder den Wert im gültigen Bereich beschneiden und anwenden. Daher gibt die Methode setIntParameter() einen effektiven Wert zurück und der Client kann diesen Wert verwenden, um zu bestätigen, wie die Anfrage behandelt wurde.

Fordern Sie eine Schlichtung zwischen mehreren Kamera-Clients an

Da das vorherige EVS-Design es mehreren Apps ermöglichte, gleichzeitig eine einzelne Kamera-Hardware zu abonnieren, ist es möglich, dass eine App den Betrieb anderer Apps durch die Änderung eines Kameraparameters stören kann. Außerdem möchten mehrere Clients möglicherweise denselben Parameter unterschiedlich anpassen und verursachen dadurch unerwartetes Verhalten bei der Ausführung von Kameradiensten.

Um solche Probleme zu vermeiden, erlaubt der EVS-Manager nur dem Master- Client, einen Kameraparameter zu programmieren. Bevor versucht wird, Kameraparameter anzupassen, MUSS der Client durch Aufruf der setMaster() Methode zum Master-Client werden. Wenn dies fehlschlägt, bedeutet dies, dass auf dieser Kamerahardware bereits ein aktiver Master-Client vorhanden ist. Bis der aktuelle Master-Client stirbt oder durch unsetMaster() explizit seine Master-Rolle aufgibt, ist es keinem anderen Client gestattet, einen Kameraparameter zu ändern. Wenn ein Master-Client seine Berechtigung zurückgibt, werden alle anderen Apps durch ein MASTER_RELEASED -Ereignis benachrichtigt.

Kunden mit hoher Priorität

Der EVS-Manager verwaltet den Client, der die Anzeige mit hoher Priorität besitzt, und ermöglicht ihm, einem aktuellen Master eine Master-Rolle zu stehlen. Da die Eigentümerschaft der EVS-Anzeige auf der Aktualität basiert, kann der neue Client mit der Anzeige sogar den aktuellen Client ersetzen.

Clients mit hoher Priorität müssen IEvsCamera::forceMaster(sp<IEvsDisplay>& display) aufrufen, um eine Masterrolle zu erhalten. Der EVS-Manager untersucht den Status eines bestimmten Anzeigehandles und nur dann , wenn sein Status gültig ist und weder DisplayState::NOT_OPEN noch DisplayState::DEAD einen Master ersetzen. Der Client, der gerade die Master-Rolle verliert, wird durch ein MASTER_RELEASED Ereignis benachrichtigt und MUSS damit ordnungsgemäß umgehen.