模型撮影用カメラ(mc2)を作ってる 4

「ピントがあってるかわかりにくい」「カメラの設定ができない」「撮った写真を回収するのが面倒」といった問題点を解決するために、Webサーバーの機能を組み込んでみた

プレビューの実装

ピントがあってるかわかりにくいので、gstreamerでキャプチャした画像をjpeg圧縮してmjpegとして送りつけるように実装。ついでにAPIにPOSTすることで輝度とコンスタントを変えられるように修正。

サンプルをもとに実装したんだけど、どうも安定しない。Windowsで実行したときは動くんだけど、Raspberry PIに持っていったら、スマホから接続するとメモリエラーで落ちる。gdbで落ちた瞬間を拾ってみても、突然虚無から呼ばれて落ちたようにしか見えない……ちなみにPCから接続すると安定して動く。なんでや。

ここらへん、マルチスレッドで書いてるからなにかミスってるんだろうなとは思うんだけど、どこがまずいのかわからん。次の修正でいろいろいじってみるか

ファイルビュワー

「撮った写真の改修が面倒」を解決するためにファイルビュワーを実装。

といっても、javascriptから叩いたらファイルリストをJSONで返すAPI作ってあとはjavascripに全部お任せ。JSON作るのも

if (std::filesystem::is_directory(search_dir)) {
    for (const std::filesystem::directory_entry &entry: std::filesystem::directory_iterator(search_dir)) {
        ss << ", {\"name\": " << entry.path().filename() << ", \"directory\": ";
        if (entry.is_directory()) {
            ss << "true";
        } else {
            ss << "false";
        }
        ss << "}";
    }
}
mg_http_reply(
    connection,
    200,
    "Content-Type: application/json\r\n",
    "[{\"name\": \"..\", \"directory\": true}%s]", ss.str().c_str()
);

と、わりと力ずく。
こちらはスマホからの接続でも安定して動く。

次はコードの整理しながらスマホからプレビューすると落ちる原因が……わかるといいなぁ……

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です