2025 年 3 月 27 日より、AOSP のビルドとコントリビューションには aosp-main
ではなく android-latest-release
を使用することをおすすめします。詳細については、AOSP の変更をご覧ください。
カメラ コントロール パラメータのプログラミング
コレクションでコンテンツを整理
必要に応じて、コンテンツの保存と分類を行います。
以前の Extended View System(EVS)1.0 リリースでは、カメラデバイスは読み取り専用デバイスとみなされていました。そのため、アプリでズームや明るさなどのカメラ コントロール パラメータを変更できるようにするメソッドはありませんでした。
これにより、EVS アプリの機能が制限される可能性があるため、新しい EVS 1.1 では新しいメソッドが導入され、アプリで複数のカメラ コントロール パラメータをプログラムできるようになりました。パラメータはすべて enum CameraParam
で定義されています。
/**
* 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,
};
メソッドは次のように定義されます。
/**
* 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()
は、クライアントが読み書き可能なパラメータのリスト(CameraParam
列挙型)を返します(クライアントがマスターの場合)。getIntParameterRange()
は、有効な値の範囲と解像度をリレーします。マスター クライアントがカメラ パラメータを変更すると、同じカメラ ハードウェア上の他のすべてのクライアントが、パラメータ ID と新しい値を持つ PARAMETER_CHANGED
イベントを取得して、通知されます。
注: センサー ドライバは、無効なパラメータ値を異なる方法で処理することがあります。単にエラーコードを返すか、有効な範囲内の値をクリップして適用します。したがって、setIntParameter()
メソッドが有効な値を返し、クライアントはこの値を使用してリクエストがどのように処理されたかを確認できます。
複数のカメラ クライアント間での調整のリクエスト
以前の EVS 設計では、複数のアプリが 1 つのカメラ ハードウェアに同時に登録できたため、あるアプリがカメラ パラメータを変更することで、他のアプリの操作を妨げる可能性がありました。また、複数のクライアントで同じパラメータを異なる方法で調整すると、カメラサービスの実行時に予期しない動作が発生することもありました。
この問題を回避するため、EVS マネージャーでは、マスター クライアントのみがカメラ パラメータをプログラミングできます。カメラ パラメータを調整する前に、クライアントは setMaster()
メソッドを呼び出してマスター クライアントになる必要があります。これに失敗した場合、そのカメラ ハードウェアにアクティブなマスター クライアントがすでに存在することを意味します。現在のマスター クライアントが停止するまで、または unsetMaster()
を介してマスターロールが明示的に放棄されるまで、他のクライアントはカメラ パラメータを変更できません。マスター クライアントが権限を返すと、MASTER_RELEASED
イベントによって他のすべてのアプリに通知されます。
優先度の高いクライアント
EVS マネージャーは、ディスプレイを所有しているクライアントを高優先度で処理し、現在のマスターからマスターロールを取得できるようにします。EVS のディスプレイ所有権は新しい順に割り当てられるため、新しいクライアントが現在のクライアントからディスプレイを引き継ぐこともできます。
優先度の高いクライアントがマスターロールを取得するには、IEvsCamera::forceMaster(sp<IEvsDisplay>& display)
を呼び出す必要があります。EVS マネージャーは特定のディスプレイ ハンドルの状態を調べ、その状態が有効であって、DisplayState::NOT_OPEN
でも DisplayState::DEAD
でもない場合に限り、マスターを置き換えます。マスターロールを失ったクライアントは、MASTER_RELEASED
イベントによって通知され、適切な対処が必要になります。
このページのコンテンツやコードサンプルは、コンテンツ ライセンスに記載のライセンスに従います。Java および OpenJDK は Oracle および関連会社の商標または登録商標です。
最終更新日 2025-07-27 UTC。
[[["わかりやすい","easyToUnderstand","thumb-up"],["問題の解決に役立った","solvedMyProblem","thumb-up"],["その他","otherUp","thumb-up"]],[["必要な情報がない","missingTheInformationINeed","thumb-down"],["複雑すぎる / 手順が多すぎる","tooComplicatedTooManySteps","thumb-down"],["最新ではない","outOfDate","thumb-down"],["翻訳に関する問題","translationIssue","thumb-down"],["サンプル / コードに問題がある","samplesCodeIssue","thumb-down"],["その他","otherDown","thumb-down"]],["最終更新日 2025-07-27 UTC。"],[],[],null,["# Program camera control parameters\n\nIn the previous Extended View System (EVS) 1.0 release, camera devices were\nconsidered read-only devices and, therefore, no method existed that would enable\nthe app to change camera control parameters such as zoom or brightness.\n\nAs this could constrain the capability of EVS apps, the new EVS 1.1\nintroduces new methods and enables the app to program several camera\ncontrol parameters, all of which are defined in `enum CameraParam`: \n\n```gdscript\n/**\n * EVS Camera Parameter\n */\nenum CameraParam : uint32_t {\n /**\n * The brightness of image frames\n */\n BRIGHTNESS,\n /**\n * The contrast of image frames\n */\n CONTRAST,\n /**\n * Automatic gain/exposure control\n */\n AUTOGAIN,\n /**\n * Gain control\n */\n GAIN,\n /**\n * Automatic Whitebalance\n */\n AUTO_WHITE_BALANCE,\n /**\n * Manual white balance setting as a color temperature in Kelvin.\n */\n WHITE_BALANCE_TEMPERATURE,\n /**\n * Image sharpness adjustment\n */\n SHARPNESS,\n /**\n * Auto Exposure Control modes; auto, manual, shutter priority, or\n * aperture priority.\n */\n AUTO_EXPOSURE,\n /**\n * Manual exposure time of the camera\n */\n ABSOLUTE_EXPOSURE,\n /**\n * Set the focal point of the camera to the specified position. This\n * parameter may not be effective when auto focus is enabled.\n */\n ABSOLUTE_FOCUS,\n /**\n * Enables continuous automatic focus adjustments.\n */\n AUTO_FOCUS,\n /**\n * Specify the objective lens focal length as an absolute value.\n */\n ABSOLUTE_ZOOM,\n};\n```\n\nMethods are defined as: \n\n```gdscript\n/**\n * Requests to be a master client.\n *\n * When multiple clients subscribe to a single camera hardware and one of\n * them adjusts a camera parameter such as the contrast, it may disturb\n * other clients' operations. Therefore, the client must call this method\n * to be a master client. When it becomes a master, it can\n * change camera parameters until either it dies or explicitly gives up the\n * role.\n *\n * @return result EvsResult::OK if a master role is granted.\n * EvsResult::OWNERSHIP_LOST if there is already a\n * master client.\n */\nsetMaster() generates (EvsResult result);\n\n/**\n * Sets to be a master client forcibly.\n *\n * The client, which owns the display, has a high priority and can take over\n * a master role from other clients without the display.\n *\n * @param display IEvsDisplay handle. If this is valid, the calling client\n * is considered as the high priority client and therefore\n * it would take over a master role.\n *\n * @return result EvsResult::OK if a master role is granted.\n * EvsResult::OWNERSHIP_LOST if there is already a\n * master client with the display.\n */\nforceMaster(IEvsDisplay display) generates (EvsResult result);\n\n/**\n * Retires from a master client role.\n *\n * @return result EvsResult::OK if this call is successful.\n * EvsResult::INVALID_ARG if the caller client is not a\n * master client.\n */\nunsetMaster() generates (EvsResult result);\n\n/**\n * Retrieves a list of parameters this camera supports.\n *\n * @return params A list of CameraParam that this camera supports.\n */\ngetParameterList() generates (vec\u003cCameraParam\u003e params);\n\n/**\n * Requests a valid value range of a camera parameter\n *\n * @param id The identifier of camera parameter, CameraParam enum.\n *\n * @return min The lower bound of the valid parameter value range.\n * @return max The upper bound of the valid parameter value range.\n * @return step The resolution of values in valid range.\n */\ngetIntParameterRange(CameraParam id)\n generates (int32_t min, int32_t max, int32_t step);\n\n/**\n * Requests to set a camera parameter.\n *\n * @param id The identifier of camera parameter,\n * CameraParam enum.\n * value A desired parameter value.\n * @return result EvsResult::OK if it succeeds to set a parameter.\n * EvsResult::INVALID_ARG if either a requested\n * parameter is not supported or a given value is out\n * of bounds.\n * effectiveValue A programmed parameter value. This may differ\n * from what the client gives if, for example, the\n * driver does not support a target parameter.\n */\nsetIntParameter(CameraParam id, int32_t value)\n generates (EvsResult result, int32_t effectiveValue);\n\n/**\n * Retrieves a value of given camera parameter.\n *\n * @param id The identifier of camera parameter, CameraParam enum.\n * @return result EvsResult::OK if it succeeds to read a parameter.\n * EvsResult::INVALID_ARG if either a requested parameter is\n * not supported.\n * value A value of requested camera parameter.\n */\ngetIntParameter(CameraParam id) generates(EvsResult result, int32_t value);\n```\n\n`getParameterList()` returns a list of parameters\n(`CameraParam` enum) a client can read and write (if the client is a master),\nand `getIntParameterRange()` relays the valid value range and resolution.\nWhen a master client changes a camera parameter, all other clients on the same camera\nhardware are notified by getting a `PARAMETER_CHANGED` event with a\nparameter ID and new value.\n\n**Note:** The sensor driver may handle invalid parameter\nvalues differently. It may simply return an error code or clip the value in the\nvalid range and apply. Therefore, the `setIntParameter()` method returns\nan effective value and the client can use this value to confirm how the request was\nhandled.\n\nRequest arbitration between multiple camera clients\n---------------------------------------------------\n\nBecause the previous EVS design allowed multiple apps to simultaneously\nsubscribe to a single camera hardware, it is possible that one app can\ndisturb the operations of other apps by changing a camera parameter. Also,\nmultiple clients may want to adjust the same parameter differently and thereby\ncause unexpected behaviors in running camera services.\n\nTo avoid such problems, the EVS manager allows that only *master* client\nto program a camera parameter. Before trying to adjust any camera parameter, the client\n**MUST** become a master client by calling the `setMaster()`\nmethod. If this fails, then it means there is already an active master client\non that camera hardware. Until the current master client dies, or explicitly\ngives up a master role through `unsetMaster()`, no other client is\npermitted to change a camera parameter. When a master client returns its privilege,\nall other apps are notified by a `MASTER_RELEASED` event.\n\n### Clients with high priority\n\nThe EVS manager handles the client that owns the display with the high\npriority and allows it to steal a master role from a current master. Because EVS\ndisplay ownership is based on recency, the new client can even take over from the\ncurrent client with the display.\n\nHigh priority clients must call `IEvsCamera::forceMaster(sp\u003cIEvsDisplay\u003e& display)`\nto attain a master role. The EVS manager examines the state of a given display\nhandle and, if (*and only if* ) its state is valid and neither\n`DisplayState::NOT_OPEN` nor `DisplayState::DEAD`\nreplaces a master. The client, which just loses the master role, is\nnotified by a `MASTER_RELEASED` event and **MUST** handle\nthis properly."]]