Armadilloフォーラム

スタートアップガイドのMP4再生で、gstreamerがエラー

tomoyuki

2014年8月4日 18時44分

基本的なことを教えてください。

スタートアップガイドの「5.5. AVコーデックミドルウェア」にある mp4 のLCD画面での再生で
gstreamerがエラーになります。

[root@armadillo840-0 (ttySC2) ~]# gst-launch-1.0 filesrc location=/mnt/big-buck-bunny-30sec-800x480.mp4 \                                                       
>  ! qtdemux name=demux0 \                                                      
>  demux0.audio_0 ! queue ! acmaacdec ! audioresample ! audio/x-raw,rate=48000,channels=2 \                                                                     
>  ! alsasink device=hw:1 \                                                     
>  demux0.video_0 ! queue ! acmh264dec ! acmfbdevsink device=/dev/fb1           
Setting pipeline to PAUSED ...                                                  
ERROR: Pipeline doesn't want to pause.                                          
ERROR: from element /GstPipeline:pipeline0/GstAcmH264Dec:acmh264dec0: Resource not found.                                                                       
Additional debug info:                                                          
gstacmh264dec.c(581): gst_acm_h264_dec_open (): /GstPipeline:pipeline0/GstAcmH264Dec:acmh264dec0:                                                               
Failed open device (null). (Bad address)                                        
Setting pipeline to NULL ...                                                    
Freeing pipeline ...  

現在のarmadilloの環境は以下です。
・linux-a840-v1.04.bin.gz
・romfs-a840-v1.03.img.gz

コメント

at_daisuke.sasaki

2014年8月6日 21時17分

佐々木大輔です。

以下のコマンドを実行した結果はどうなっていますか?

[armadillo ~]# cat /sys/devices/platform/acm.0/codec 
[decoder] encoder none

H.264デコーダを使用する場合は、この設定がdecoderになっている必要があります。
設定が異っている場合、記載していただいたエラーメッセージが出力されます。
※別の原因もあるかもしれません。

以下のようにするとdecoderに変更する事ができます。

[armadillo ~]# echo decoder > /sys/devices/platform/acm.0/codec
[decoder] encoder none

上記の原因で正しい場合ですが、
Armadillo-840を使用している場合には、通常起動時に「/etc/config/rc.local」により
decoderに設定されるはずです。
rc.localは変更していますか?

ACM_CODEC=decoder
ACM_CODEC_SYSFS=/sys/devices/platform/acm.0/codec
if [ -e $ACM_CODEC_SYSFS ]; then
        if [ "${ACM_CODEC}" = "encoder" -o "${ACM_CODEC}" = "decoder" ]; then
                echo -n "load ${ACM_CODEC} firmware: "
                echo "${ACM_CODEC}" > $ACM_CODEC_SYSFS
                for i in 1 2 3 4 5; do
                        sleep 1
                        grep "\[${ACM_CODEC}\]" $ACM_CODEC_SYSFS > /dev/null
                        if [ $? -eq 0 ]; then
                                break
                        else
                                false
                        fi
                done
                check_status
        fi
fi

佐々木さん

rc.localは編集していません。

https://armadillo.atmark-techno.com/forum/armadillo/801 に同様の症状を見つけました。
ただし、ここの記載されている対策では解決しておりません。

■もともとの状態
 ・linux-3.4-at8
 ・atmark-dist-20140602.tar.gz

[root@armadillo840-0 (ttySC2) ~]# cat /sys/devices/platform/acm.0/codec 
decoder encoder [none]
 
[root@armadillo840-0 (ttySC2) ~]# echo decoder > /sys/devices/platform/acm.0/codec                                                                              
[root@armadillo840-0 (ttySC2) ~]# acm acm.0: failed to request firmware         

■ACMデバドラが入っている(はず)のパッケージ linux-3.4-at6 をビルド

[root@armadillo840-0 (ttySC2) ~]# cat /proc/version                             
Linux version 3.4-at6 (atmark@atde5) (gcc version 4.6.3 (Debian 4.6.3-14atmark1)
 ) #1 PREEMPT Thu Aug 7 15:50:43 JST 2014

dmesg見ると、起動時にdecoderのロードを失敗している。

load decoder firmware: acm acm.0: failed to request firmware

■標準イメージを使用
 http://armadillo.atmark-techno.com/armadillo-840/downloads
 ・linux-a840-v1.05.bin.gz
 ・romfs-a840-v1.03.img.gz

やはり起動時にdecoderのロード失敗。

[root@armadillo840-0 (ttySC2) ~]# zcat /proc/config.gz | grep ACM               
CONFIG_VIDEO_ACM=y                                                              
CONFIG_VIDEO_ACM_DECODER=y                                                      
CONFIG_VIDEO_ACM_ENCODER=y                                                      
# CONFIG_FB_MACMODES is not set                                                 
# CONFIG_USB_ACM is not set                                                     
# CONFIG_USB_G_ACM_MS is not set                                                
# CONFIG_USB_G_UVC_ACM_ETHER is not set                                         
[root@armadillo840-0 (ttySC2) ~]# cat /sys/devices/platform/acm.0/codec         
decoder encoder [none] 
 
[root@armadillo840-0 (ttySC2) ~]# echo decoder > /sys/devices/platform/acm.0/codec                                                                              
[root@armadillo840-0 (ttySC2) ~]# acm acm.0: failed to request firmware         

--
たなか

佐々木さま

たなかです。お世話になっております。

Firmware を再度書き換えた所 (squashfs-a800-firmware-v3.00.img)、
codecがロードされ、gst-launchが動作しました。

お手数をお掛けしました。

ファイル ファイルの説明
dmesg.20140812.txt

at_daisuke.sasaki

2014年8月12日 18時39分

佐々木大輔です。

> Firmware を再度書き換えた所 (squashfs-a800-firmware-v3.00.img)、
> codecがロードされ、gst-launchが動作しました。

問題が解決されたとの事で安心しました。

現在出荷されているArmadillo-800シリーズを使用し、
AVコーデックミドルウェアを使った製品マニュアルの手順を行う場合は、
ファームウェアを更新する必要があります。
#すぐに気付かずすみません。。。

他の方も同様の問題に当たる可能性があるので、
本スレッドにファームウェアの更新手順を記載しておきます。

1. ATDE5にファームウェアをダウンロードする。
ATDE5のブラウザで以下にアクセスし、ファームウェアをダウンロードしておく。
https://users.atmark-techno.com/download/armadillo-840
→Armadillo-800シリーズ Firmwareパーティション用イメージファイル
 ダウンロードファイル:squashfs-a800-firmware-v3.00.img

ファイルはATDE5の/var/www/に格納してください。

※本ファイルをダウンロードするためには、購入製品登録が必要です。
 購入製品登録の方法については、以下のマニュアルを参照ください。
 http://manual.atmark-techno.com/armadillo-840/armadillo-840_product_man…

2. Armadillo-810/Armadillo-840のnetflashコマンドによりファームウェアを書き込む

 Armadillo上で以下のコマンドを実施しファームウェアを更新する。

[armadillo ~]# echo 0 > /sys/class/mtd/mtd3/ro
[armadillo ~]# netflash -b -k -n -u -s -r /dev/flash/firmware http://{ATDE5のIPアドレス}/squashfs-a800-firmware-v3.00.img

 ファームウェアの更新が完了したらArmadilloを再起動し、ファームウェアがマウントされる事を確認してください。

 ファームウェアを含むFlashの書き換え方法の詳細については、以下を参照してください。
 http://manual.atmark-techno.com/armadillo-810/armadillo-810_product_man…