TCameraComponentとTVideoCaptureDeviceはWin32で初期化されません

asd-tm

標準コードを使用してTVideoCaptureDeviceを初期化し、キ​​ャプチャを開始します。

const  M_LAUNCH_CAMERA = WM_APP + 450;
type
  TCamSF1 = class(TForm)
...
  protected
    procedure LaunchCamera(var Message: TMessage); message M_LAUNCH_CAMERA;
...
end;
...
procedure TCamSF1.LaunchCamera(var Message: TMessage);
begin
if VideoCamera = nil then
    begin
      VideoCamera := TCaptureDeviceManager.Current.DefaultVideoCaptureDevice;
      if VideoCamera <> nil then
      begin
        VideoCamera.OnSampleBufferReady := CameraReady;
        VideoCamera.StartCapture;
      end
      else
      begin
        Caption := 'Video capture devices not available.';
      end;
    end
    else
    begin
      VideoCamera.StartCapture;
    end;
end;

procedure TCamSF1.IdTCPServer1Execute(AContext: TIdContext);
var
  S: AnsiString;
  Command: TAnsiStrings;
  Msg: TMessage;
begin
  if (AContext <> nil) and (AContext.Connection.Socket.Connected) and
    (not AContext.Connection.Socket.InputBufferIsEmpty) then
    S := AContext.Connection.Socket.ReadLn;
  if S = '' then
    exit;
  Memo1.Lines.Add(S);
  Command := ParseCommandString(S, '#');
  if Command[0] = 'camresol' then
  begin
    CamShotParams := Command;
    Msg.Msg := M_LAUNCH_CAMERA;
    Dispatch(Msg);
  end;
end;

ボタンのOnClickイベントからメッセージをディスパッチするとコードは正しく機能しますが、メッセージがTIdTCPServer OnExecuteからディスパッチされると、カメラが起動せずにCaption := 'Video capture devices not available.'実行されます。さらに、この後、カメラはButtonOnClickイベントからでも初期化されません。

を直接呼び出す場合もコードは機能しません

VideoCamera := TCaptureDeviceManager.Current.DefaultVideoCaptureDevice;
if VideoCamera <> nil then
  begin 
    VideoCamera.OnSampleBufferReady := CameraReady;
    VideoCamera.StartCapture;
  end;

ServerOnExecuteイベント内から。ButtonOnClickから実行すると正常に動作しますが。TCameraComponentを使用すると、同じ問題が発生します。この問題は、カメラの初期化がForm OnCreateイベントで処理される場合に解決される可能性がありますが、2つ以上のアプリケーションでカメラの同時使用が許可されていないため、これは適切ではありません。

セルゲイ・クラシルニコフ

キャプチャデバイスは、メインスレッドから初期化して操作する必要があるようです。TThread.Synchronizeクラスプロシージャで操作するキャプチャをラップしてみてください。次のようになります。

procedure TMyForm.IdTCPServer1Execute(AContext: TIdContext);
...
begin
...
TThread.Synchronize(nil,
  procedure
  begin
    DoSmthWithCamera();
  end;
);
...
end;

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

dlldata.cはwin32で生成されませんか?

分類Dev

win32でstdoutをリダイレクトしても、stdoutはリダイレクトされません

分類Dev

win32プログラムはGCCでコンパイルされますが、G ++ HDCエラーではコンパイルされません

分類Dev

HDDは「データなし」と表示され、Windowsで初期化できません

分類Dev

NestJSWebSocketGatewayは初期化されません

分類Dev

createHTMLDocument()は初期化されません

分類Dev

createHTMLDocument()は初期化されません

分類Dev

Angularjsは初期化されません

分類Dev

Exeは有効なwin32アプリケーションではありませんが、64ビットで実行されています

分類Dev

perl:Win32 :: OLEでブックを保存することはできません

分類Dev

C ++ Win32でURLまたはIDをSysLinkに設定できません

分類Dev

mmenuはangularjsで初期化されません

分類Dev

「Lateinitは初期化されませんでした」が、実際にはListenerForSingleValueEvent内で初期化されています

分類Dev

NASMで記述されたWin32アプリを実行すると、「このアプリはPCで実行できません」というエラーが発生します。

分類Dev

Nuitkaを使用してPythonプログラムをコンパイルした後、「有効なwin32アプリケーションではありません」というエラーが表示されます。

分類Dev

Win32 :: Daemon :: State()は状態を返しません

分類Dev

フォームが初期化されると、Reduxフォームは新しい値を更新できません

分類Dev

初期化された変数は変更されませんか?

分類Dev

静的ブロックは初期化なしでは実行されません

分類Dev

パラメータ 'imagePath'はここでは初期化されていません

分類Dev

JavaFXTableViewは初期化メソッドの外部では更新されません

分類Dev

テスト-FirebaseAppはこのプロセスで初期化されません

分類Dev

迅速; 不変値の初期化は使用されませんでした

分類Dev

SharepointフィールドはC#で初期化されていません

分類Dev

MVVMで「インスタンスが初期化されていません」と理解できません

分類Dev

Windows2000ではアプリケーションをWIN32モードで実行することはできません

分類Dev

静的変数はすぐには初期化されません

分類Dev

Win32 C ++の「HelloWorldプログラム」がコンパイルされません

分類Dev

Android AudioRecordが初期化されません

Related 関連記事

  1. 1

    dlldata.cはwin32で生成されませんか?

  2. 2

    win32でstdoutをリダイレクトしても、stdoutはリダイレクトされません

  3. 3

    win32プログラムはGCCでコンパイルされますが、G ++ HDCエラーではコンパイルされません

  4. 4

    HDDは「データなし」と表示され、Windowsで初期化できません

  5. 5

    NestJSWebSocketGatewayは初期化されません

  6. 6

    createHTMLDocument()は初期化されません

  7. 7

    createHTMLDocument()は初期化されません

  8. 8

    Angularjsは初期化されません

  9. 9

    Exeは有効なwin32アプリケーションではありませんが、64ビットで実行されています

  10. 10

    perl:Win32 :: OLEでブックを保存することはできません

  11. 11

    C ++ Win32でURLまたはIDをSysLinkに設定できません

  12. 12

    mmenuはangularjsで初期化されません

  13. 13

    「Lateinitは初期化されませんでした」が、実際にはListenerForSingleValueEvent内で初期化されています

  14. 14

    NASMで記述されたWin32アプリを実行すると、「このアプリはPCで実行できません」というエラーが発生します。

  15. 15

    Nuitkaを使用してPythonプログラムをコンパイルした後、「有効なwin32アプリケーションではありません」というエラーが表示されます。

  16. 16

    Win32 :: Daemon :: State()は状態を返しません

  17. 17

    フォームが初期化されると、Reduxフォームは新しい値を更新できません

  18. 18

    初期化された変数は変更されませんか?

  19. 19

    静的ブロックは初期化なしでは実行されません

  20. 20

    パラメータ 'imagePath'はここでは初期化されていません

  21. 21

    JavaFXTableViewは初期化メソッドの外部では更新されません

  22. 22

    テスト-FirebaseAppはこのプロセスで初期化されません

  23. 23

    迅速; 不変値の初期化は使用されませんでした

  24. 24

    SharepointフィールドはC#で初期化されていません

  25. 25

    MVVMで「インスタンスが初期化されていません」と理解できません

  26. 26

    Windows2000ではアプリケーションをWIN32モードで実行することはできません

  27. 27

    静的変数はすぐには初期化されません

  28. 28

    Win32 C ++の「HelloWorldプログラム」がコンパイルされません

  29. 29

    Android AudioRecordが初期化されません

ホットタグ

アーカイブ