gc2093.c ドライバーを変更して、カメラ プレビューのミラー効果を変更します。

原理

ここに画像の説明を挿入します
gc2093 チップのマニュアルを確認し、レジスタ 0x0017 の値を変更すると、カメラ プレビューのミラー効果を変更できます。次のように:

#define GC2093_MIRROR_FLIP_REG 0x0017
#define MIRROR_MASK BIT(0)
#define FLIP_MASK BIT(1)

方法

ドライバーを修正することでgc2093.cカメラプレビューのミラー効果を変更できます。このドライバーでは、ミラー効果に関連するコードの後に​​、コントロール ID に関連する操作がV4L2_CID_HFLIP続く必要があります。V4L2_CID_VFLIP

V4L2_CID_HFLIPコントロール ID は水平ミラーリングの制御に使用され、V4L2_CID_VFLIPコントロール ID は垂直ミラーリングの制御に使用されます。これら 2 つのcaseブランチで変更を加え、適切なビットを設定することでさまざまなミラーリング効果を実現します。一般的なアプローチは、ビット操作とマスクを使用して、対応するビットを設定またはクリアすることです。

たとえば、水平ミラーリングを有効にしたい場合は、case V4L2_CID_HFLIP次のようにブランチを変更できます。

case V4L2_CID_HFLIP:
    regmap_update_bits(gc2093->regmap, GC2093_MIRROR_FLIP_REG, MIRROR_MASK, MIRROR_MASK);
    break;

これは、regmap_update_bits関数を使用してMIRROR_MASKビットを 1 に設定し、水平ミラーリングをオンにします。

case V4L2_CID_VFLIP同様に、垂直ミラーリングを有効にする場合は、次のようにブランチを変更できます。

case V4L2_CID_VFLIP:
    regmap_update_bits(gc2093->regmap, GC2093_MIRROR_FLIP_REG, FLIP_MASK, FLIP_MASK);
    break;

これは、regmap_update_bits関数を使用してFLIP_MASKビットを 1 に設定し、垂直ミラーリングをオンにします。

以下のように修正するためにここにいます

ここに画像の説明を挿入します

regmap_update_bits解析

regmap_update_bitsLinux カーネルでレジスタの特定のビットを更新するために使用される関数です。regmapインターフェースを介してレジスタに対するビット操作を実行するためのユーティリティ関数です。

この関数のプロトタイプは次のとおりです。

int regmap_update_bits(struct regmap *map, unsigned int reg,
                       unsigned int mask, unsigned int val);

パラメータの説明:

  • map:struct regmap演算対象のレジスタマップを示す構造体へのポインタ。
  • reg:更新するレジスタアドレスを示します。
  • mask: 更新するレジスタ ビットを表すマスク。マスクに対応するビットのみが変更され、他のビットは変更されません。
  • val:書き込む値を示します。対応するビットに値を書き込みます。

regmap_update_bitsこの関数の機能は、指定されたマスクと値に従ってレジスタの特定のビットを更新することです。この関数はレジスタの現在の値を読み取り、更新するビットをマスクに従って指定された値に設定し、他のビットは変更しないままにし、更新された値をレジスタに書き込みます。このようにして、他のビットの値に影響を与えることなく、レジスタビットの選択的な更新を実現できます。

この関数を使用する場合は、最初にオブジェクトをregmap_update_bits初期化し、レジスタ マップが適切に構成されていることを確認する必要があります。regmapこの関数を呼び出すと、レジスタの特定のビットの読み取り、変更、書き込みが便利になり、レジスタの正確な制御と構成を実現できます。

おすすめ

転載: blog.csdn.net/weixin_37787043/article/details/132686653