3

前述のように、関心のあるポイントを変更してフォーカスを変更しようとしています。

関数は常にYESを返し、ゲッターを使用して関心のある新しいフォーカスポイントを読み取ると、変更されましたが、isFocusAdjusting = NOです

ご参考までに:

 focusMode: AVCaptureFocusModeContinuousAutoFocus

 newFocusPointOfInterest: Normalized CGPoint

フォーカスは(0.5f、0.5f)または基本的にオートフォーカスでロックされているようです

このコードは、iPhone 6 と iPhone 6+ を除くすべてのデバイスで機能しました。私が間違っていることはありますか?API 呼び出しに変更はありますか?

助けてください

- (BOOL)changeDeviceFocusPointOfInterest:(CGPoint)newFocusPointOfInterest
                               focusMode:(AVCaptureFocusMode)focusMode
{
    NSError *error;
    BOOL ret = NO;
    
    if([device lockForConfiguration:&error] )
    {
        if ([device isFocusModeSupported:focusMode] && [device isFocusPointOfInterestSupported])
        {
            [device setFocusPointOfInterest:newFocusPointOfInterest];
            [device setFocusMode:focusMode];
            
            ret = YES;
        }
        else
        {
            NSLog(@"focus point setting not supported:{%f,%f}", newFocusPointOfInterest.x, newFocusPointOfInterest.y);
            ret = NO;
        }
        [device unlockForConfiguration];
    }
    else
    {
        NSLog(@"cant lock hardware settings for changing focus point:{%f,%f}", newFocusPointOfInterest.x, newFocusPointOfInterest.y);
        ret = NO;
    }
    return ret;
}

**編集:追加の観察:**

Apple AVCam および AVCamManual が提供するサンプル アプリを確認しました - タップしてフォーカスすると AVCam で動作しますが、AVCamManualと同じデバイス では動作しません サンプル ワークスペースで手動制御に関連するコードを削除しようとしましたが、結果は得られませんでした。

  • Key Value 観察は、lensPosition または focusAdjusting プロパティに変更がないことを示しています

  • この問題に関するフォーラム投稿を 1 つだけ見つけましたが、提案された回避策はどれもうまくいかないようですhttps://devforums.apple.com/message/1073042#1073042

  • フォーカスを極端なカスタム値に設定してから、必要な focusPointOfInterest でモードを ContinousAuto に設定しようとしました。これはフォーカスの変更をトリガーしますが、必要な関心のあるポイントにフォーカスしません

4

1 に答える 1

1

これは回避策であるほど答えではありません。

観察から、AVCaptureFocusModeAutoFocus モードの場合、フォーカスはスキャンをトリガーし、必要な関心のあるポイントに焦点を合わせてから、フォーカスをロックします (AVCaptureFocusModeLocked)。

注視点を変更せずにモードを AVCaptureFocusModeContinuousAutoFocus に変更すると、カメラはフル フレーム フォーカスを実行するため、注視点は役に立たなくなります。(テストにより決定)

継続的なオート フォーカスの動作を模倣するために、AVCaptureDeviceSubjectAreaDidChangeNotification を使用して、フォーカス モードを AVCaptureFocusModeAutoFocus に変更して手動で監視します。

ただし、これは AVCaptureFocusModeContinuousAutoFocus ほど高速ではなく、連続する通知の間に約 2 ~ 3 秒の時間差があることがわかりました。

誰かがより良い解決策を見つけた場合は、ここで共有してください。

注: Apple のデフォルト カメラも同様に動作します。違いは、iPhone のデフォルトのカメラ アプリでカメラを移動すると、フォーカスが (0.5, 0.5) を対象のフォーカス ポイントとして AVCaptureFocusModeContinuousAutoFocus に設定されることです。

于 2015-04-26T06:35:00.650 に答える