GR-SAKURA
GR-KURUMI
GR-COTTON
GR-CITRUS
GR-PEACH
GR-KAEDE
GR-ADZUKI
GR-LYCHEE
GR-ROSE
GR-MANGO(*)
SNShield
Web Compiler
IDE for GR
TOPPERS関連
女子美コラボ
その他
※プロデューサミーティング中
作り方使い方資料
イベント関連
作品記事
体験記事
ライブラリ
ツール
その他・過去ファイル
一番簡単なサンプルで(camera_ifの)camera_start()の関数を呼びます。この関数はFrameBuffer_Videoを最初期した後、DisplayBaseのVideo_Write_Settingを呼びます。
他の場所にはFrameBuffer_Videoはアップデートされてないのでこのバーファは定期的にカメラから取得される画像でアップデートされてると思っている。 これは正しいですか?
どれぐらいのタイミング?mainのwhile(1)のループに毎回一回ではないでしょうか?
私はOpenCVではなくてこのフレームバーファそのままを利用して処理したいですが、これはOKでしょうか?それかデータの移動が必要でしょうか?
よろしくお願いします
はい、EasyAttach_CameraStart()実行後は定期的にカメラから取得される画像でアップデートされます。GR-LYCHEEの場合、カメラは60fpsで動作しているので、約16.7msに1回更新されます。以下のように割り込み関数を設定すると、画像のアップデートタイミングが分かります。
static void IntCallbackFunc_Vfield(DisplayBase::int_type_t int_type) { //カメラからの画像が更新されるとコールされる。}
Display.Graphics_Irq_Handler_Set(DisplayBase::INT_TYPE_S0_VFIELD, 0, IntCallbackFunc_Vfield);
~ご参考まで~こちらのサンプルで181行目でDisplay.Graphics_Irq_Handler_Set()を使用しています。画像アップデートのタイミングでJPEG変換を行っています。https://github.com/d-kato/GR-Boads_Camera_LCD_sample/blob/master/main.cpp#L181
> 私はOpenCVではなくてこのフレームバーファそのままを利用して処理したいですが、これはOKでしょうか?それかデータの移動が必要でしょうか?
可能ですが、処理中に画像が更新されてしまう可能性があります。上記のDisplay.Graphics_Irq_Handler_Set()などを使い、画像更新タイミングで処理を行うことをお勧めします。また、Display.Video_Write_Change()を使うことで、カメラから取得する画像の格納先を変更することもできます。
/* カメラ画像の格納先をNewBufferに変更する */Display.Video_Write_Change(DisplayBase::VIDEO_INPUT_CHANNEL_0, NewBuffer, FRAME_BUFFER_STRIDE);
~ご参考まで~こちらのサンプルの394行目でDisplay.Video_Write_Change()を使用しています。https://developer.mbed.org/users/dkato/code/GR-PEACH_Video_Display/file/95b92f2035dc/main.cpp
NCはNon-Cacheの略で、非キャッシュメモリを表しています。GR-LYCHEEは1MBの非キャッシュ領域(NC_BSS セクション)を用意しています。
メモリに対してCPUアクセスとDMAアクセスの両方を行う場合は非キャッシュにしておくとキャッシュ制御が不要になります。DMAで受信したデータをDMAで送信する場合はCPUアクセスが無い(キャッシュへアクセスしない)ので、キャッシュでも非キャッシュでも動作します。上の例ではDMAで受けたカメラ画像をDMAを使ってLCD転送しているため、非キャッシュにしていません。
キャッシュ制御についてはこちらも参照ください。https://github.com/d-kato/mbed-gr-libs#キャッシュ制御