ブログ

Armadillo-840 + USBカメラ 動画/静止画保存サンプルアプリ

at_takuya.sasaki
2015年11月1日 18時39分

概要

Armadillo-840に接続したUSBカメラからの画像を動画としてLCDに表示しつつ、ボタン押下時の静止画をLCDに表示するデモです。 一定時間内の動画を avi形式の動画ファイルに保存することもできます。

機能説明

Armadillo-840にUSBカメラを接続してArmadillo-840を起動すると、液晶画面の左側に352×288サイズで動画表示を行います。

イメージ図:

------------------------------------------------
  動画表示               静止画表示
 +------------------+   +------------------+
 |                  |   |                  |
 |                  |   |                  |
 |                  |   |                  |
 |                  |   |                  |
 |                  |   |                  |
 |                  |   |                  |
 +------------------+   +------------------+
 
------------------------------------------------

Armadillo-840液晶拡張ボードのスイッチを押すと、それぞれ以下の機能が実行されます。

SW1 :  静止画キャプチャ
    ボタン押下時の静止画を右側に表示しつつ、/home/ftp/pubに JPEGファイルを保存します。
    最大10枚までのJPEGファイルを保存できます。
 
SW2 :  過去に撮影したJPEGファイルを参照できます。
 
SW3 :  録画を開始します。
    SW4を押すまでの間、/home/ftp/pubにJPEGファイルを連続して保存し続けます。
    *どのくらい録画し続けられるかはRAMの容量に依存します。(未検証)
 
SW4 :  録画を停止します。
       JPEGファイルの保存を終了し、ffmegを使ってavi形式のファイルに変換します。(フレームレートは25fps)
       変換後はJPEGファイルを削除します。

イメージファイル/ソースコード

以下にアップロードしております。

 URL        | http://www.atmark-techno.com/~fae/demo/a840/Camera/
 ユーザ名   | 840camera
 パスワード | helloarmadillo

実行方法

1. 上記からlinux.bin.gz/romfs.img.gzをダウンロードしてUSBメモリに保存してください。
2. Armadillo-840を起動します
3. ログインしてUSBメモリを差します。
[root@armadillo840-0 (ttySC2) ~]# usb 1-1: new high-speed USB device number 3 using rmobile-ehci-driver
scsi0 : usb-storage 1-1:1.0
scsi 0:0:0:0: Direct-Access     UFD 2.0  Silicon-Power8G  1.00 PQ: 0 ANSI: 4
sd 0:0:0:0: [sda] 15308799 512-byte logical blocks: (7.83 GB/7.29 GiB)
sd 0:0:0:0: [sda] Write Protect is off
sd 0:0:0:0: [sda] No Caching mode page found
sd 0:0:0:0: [sda] Assuming drive cache: write through
sd 0:0:0:0: [sda] No Caching mode page found
sd 0:0:0:0: [sda] Assuming drive cache: write through
 sda: sda1
sd 0:0:0:0: [sda] No Caching mode page found
sd 0:0:0:0: [sda] Assuming drive cache: write through
sd 0:0:0:0: [sda] Attached SCSI removable disk
4. Enterを押してから、moutします。
[root@armadillo840-0 (ttySC2) ~]# mount -t vfat /dev/sda1 /mnt
FAT-fs (sda1): utf8 is not a recommended IO charset for FAT filesystems, filesystem will be case sensitive!
5. netflashでイメージを書き換えます
[root@armadillo840-0 (ttySC2) ~]# netflash -bknusr /dev/flash/kernel /mnt/linux.bin.gz
[root@armadillo840-0 (ttySC2) ~]# netflash -bknusr /dev/flash/userland /mnt/romfs.img.gz
6. Armadillo-840にUSBカメラを接続した後、rebootします
[root@armadillo840-0 (ttySC2) ~]# reboot
7. ログイン後に、デフォルトのQMLサンプルアプリを停止します。

その後、/etc/configの内容を、上書き更新します。

[root@armadillo840-0 (ttySC2) ~]# killall qmlscene
[root@armadillo840-0 (ttySC2) ~]# flatfsd -w
8. 以下のコマンドでサンプルを起動できます。
[root@armadillo840-0 (ttySC2) ~]# export QT_QPA_EGLFS_DISPLAY=1
[root@armadillo840-0 (ttySC2) ~]# export QT_QPA_EGLFS_WIDTH=800
[root@armadillo840-0 (ttySC2) ~]# export QT_QPA_EGLFS_HEIGHT=480
[root@armadillo840-0 (ttySC2) ~]# export QT_QPA_EGLFS_HIDECURSOR=1
[root@armadillo840-0 (ttySC2) ~]# camera_widget &

ビルド方法

1. パッチについて
1.1. SWとキーの関連付け

以下のフォーラムにある各SWとキーとの関連付けを修正したパッチを適用しています。
https://users.atmark-techno.com/node/1116

パッチの適用方法は以下の通りです。

atmark@atde5:~/atmark-dist$ patch -p1 < ~/atmark-dist-20150223-a840-geninput-fixed.patch 
atmark@atde5:~/linux-3.4-at12$ patch -p1 < ~/linux-3.4-at12-a840-sw-key-change.patch 
1.2 ffmpeg

ffmpegをAtmark Distに入れるために、以下のブログの手順を実行しています。
https://users.atmark-techno.com/blog/750/1218

ただしSW3、SW4に割り当てている動画保存の機能が必要なければ、標準イメージに1.1のパッチを適用しただけでも問題ありません。

以上