Armadilloフォーラム

Armadillo-840 の Gstreamerについて

tsuchiya

2014年2月13日 10時33分

初めまして
土屋と申します。最近Armadillo-840を使用して動画、静止画の表示などを表示するアプリの作成中で色々とはまっております。
Linuxは不慣れなため初歩的な質問で申し訳ありませんが、ご教授ください。

1. gst-launch-1.0を子プロセスで繰り返し起動していると1日に1回程度ハングする。
  コンソールの出力は下記のようになっていました。

2014/02/13 00:54:10 gst-launch-1.0 -e filesrc location=/mnt/Video/OIOI_PB_Series_L_CM_960.mp4 ! qtdemux name=demux0 { demux0.audio_0 ! queue ! acmaacdec ! audioresample ! audioamplify amplification=1.000000 ! audio/x-raw,rate=48000,channels=2 ! alsasink } { demux0.video_0 ! queue ! acmh264dec ! video/x-raw,width=1152,height=864 ! acmfbdevsink device=/dev/fb0 }
2014/02/13 00:54:10 Setting pipeline to PAUSED ...
2014/02/13 00:54:11 Pipeline is PREROLLING ...
2014/02/13 00:54:11 Pipeline is PREROLLED ...
2014/02/13 00:54:11 Setting pipeline to PLAYING ...
2014/02/13 00:54:11 New clock: GstAudioSinkClock
2014/02/13 00:54:13 EOS on shutdown enabled -- waiting for EOS after Error
2014/02/13 00:54:13 Waiting for EOS...

 この時にコンソールから killall をすると実行は継続できるので、そんな対策でお茶を濁そうかと思ったのですが、社内でそもそもなぜハングするのかの対策が先と言われてしまいまして、どのあたりのソースを見ればよいか見当でも教えていただけばと思います。

2. 上とも関連するのですがgst-launch-1.0の子プロセスを親プロセスからkillすると以降にqmlsceneで画像を書き込んでも出力されず、動画の停止した状態のままになってしまいます。SIGKILL SIGINT SIGHUP SIGTERM のどれでも同じ現象になってしまいました。killせずに親プロセスから再生を停止できる方法か何かがあれば、ご教授ください。kill後に再度 gst-launch-1.0で動画を再生する時は正常に再生できます。

3. Gstreamer の再生でオリジナル動画の縦横比を維持したまま拡大縮小したいのですが、videoscaleをacmh264decの後に入れると下記エラーになってしまいます。

gst-launch-1.0 -e filesrc location=/mnt/Video/OIOI_PB_Series_L_CM_960.mp4 ! qtdemux name=demux0 { demux0.audio_0 ! queue ! acmaacdec ! audioresample ! audioamplify amplification=1.000000 ! audio/x-raw,rate=48000,channels=2 ! alsasink } { demux0.video_0 ! queue ! acmh264dec ! videoscale ! video/x-raw,width=1152 ! acmfbdevsink device=/dev/fb0 }

中略

ERROR: from element /GstPipeline:pipeline0/GstAcmH264Dec:acmh264dec0: Could not decode stream.
Additional debug info:
gstacmh264dec.c(2891): gst_acm_h264_dec_handle_out_frame (): /GstPipeline:pipeline0/GstAcmH264Dec:acmh264dec0:
failed gst_video_decoder_finish_frame()
ERROR: pipeline doesn't want to preroll.
Setting pipeline to NULL ...
Freeing pipeline ...

videoscaleとacmh264dec の間に何かはさめばよいのか皆目見当がつきません。そのあたりの情報等御座いましたらご教授ください。

環境はすべて ATDE5 amd64 20140131の物にすべて入れ替えました。Armadillo-840のフラッシュも同じものに更新してあります。
以上、よろしくお願いいたします。


コメント

at_takenoshita

2014年2月13日 14時02分

竹之下です。

> 1. gst-launch-1.0を子プロセスで繰り返し起動していると1日に1回程度ハングする。
>   コンソールの出力は下記のようになっていました。
カーネルメッセージには、何か表示されていないでしょうか?
シリアルコンソールへの表示か、dmesgコマンドで表示されるものを
コピペしていただけると、何か分かるかもしれません。

> 2. 上とも関連するのですがgst-launch-1.0の子プロセスを親プロセスからkillすると以降に
> qmlsceneで画像を書き込んでも出力されず、動画の停止した状態のままになってしまいます。
> SIGKILLSIGINT SIGHUP SIGTERMのどれでも同じ現象になってしまいました。killせずに
> 親プロセスから再生を停止できる方法か何かがあれば、ご教授ください。kill後に再度
> gst-launch-1.0で動画を再生する時は正常に再生できます。
-e オプションを付けないでgst-launcu-1.0を実行してからkillした場合でも、挙動は同じでしょうか?
(-e は、エンコードするときに、入力の最後にEOSを付けるためのオプションなので、
デコード時は不要なはずです)

> 3. Gstreamerの再生でオリジナル動画の縦横比を維持したまま拡大縮小したいのですが、
> videoscaleをacmh264decの後に入れると下記エラーになってしまいます。
acmh264decは、それ自身で出力画像を拡大/縮小する機能を持っています。

acmh264decとacmfbdevsinkの間に、widthとheightのケイパビリティを
指定すると、指定した幅/高さに拡大/縮小して出力します。
demux0.video_0 ! queue ! acmh264dec ! video/x-raw,width=1152,height=864 ! acmfbdevsink device=/dev/fb0

参考:
http://manual.atmark-techno.com/armadillo-840/armadillo-840_product_man…

tsuchiya

2014年2月13日 14時58分

竹之下様

お忙しいところありがとうございます。

> > 1. gst-launch-1.0を子プロセスで繰り返し起動していると1日に1回程度ハングする。
中略
> シリアルコンソールへの表示か、dmesgコマンドで表示されるものを
> コピペしていただけると、何か分かるかもしれません。

dmesg の出力を添付いたします。

> > 2. 上とも関連するのですがgst-launch-1.0の子プロセスを親プロセスからkillすると以降に
中略
> (-e は、エンコードするときに、入力の最後にEOSを付けるためのオプションなので、
> デコード時は不要なはずです)

-e なしでも同じでした。
またこの状態で qmlscene を minicmo ではなく telnet のコンソールで実行して見たところ下記のエラーメッセージが出力されました。
何故か minicom だと何も出ません。

libEGL warning: DRI2: xcb_connect failed
libEGL warning: DRI2: xcb_connect failed
libEGL warning: GLX: failed to load GLX
Could not initialize egl display

EGL error
Aborted

> > 3. Gstreamerの再生でオリジナル動画の縦横比を維持したまま拡大縮小したいのですが、
中略
> 参考:
> http://manual.atmark-techno.com/armadillo-840/armadillo-840_product_man…

上記の video/x-raw の方法だと縦横比が維持されず画面いっぱいに出力されてしまいます。
例えば big-buck-bunny-30sec-fullhd.mp4 を1152x864のディスプレイで再生した場合に上限大体均等に黒い部分を出したいです。

以上、よろしくお願いいたします。

ファイル ファイルの説明
dmesg.txt dmesgです

tsuchiya

2014年2月13日 15時01分

竹之下様

土屋です。
すいません、先ほどの返信の「上限大体均等」は「上下に大体均等」の間違いです。
ご面倒をおかけいたしますが、よろしくお願いいたします。

tsuchiya

2014年2月13日 15時55分

竹之下様

土屋です。
たびたびすいません。
> > 3. Gstreamerの再生でオリジナル動画の縦横比を維持したまま拡大縮小したいのですが、
中略
> 参考:
> http://manual.atmark-techno.com/armadillo-840/armadillo-840_product_man…

について、仰っていただいた意味がやっと分かりました。申し訳ございませんでした。
acmh264dec y-offset=108として、video/x-raw,width=1152,height=648と指定したら上下に均等に再生されました。

1.と2.についても何か御座いましたらば、よろしくお願いいたします。

at_ohsawa

2014年2月17日 11時56分

大澤です。
1.についてですが、こちらでも同様のパイプラインを使って繰り返しデコードを行うと、
エラーが発生することを確認しました。
報告いただいたものとコンソールに表示されるエラーが少し異なるのですが、
下記と同じようなメッセージが出た事はあるでしょうか。


Setting pipeline to PAUSED ...
Pipeline is PREROLLING ...
Pipeline is PREROLLED ...
Setting pipeline to PLAYING ...
New clock: GstAudioSinkClock
ERROR: from element /GstPipeline:pipeline0/GstAcmH264Dec:acmh264dec0: Could not decode stream.
Additional debug info:
gstacmh264dec.c(1809): gst_acm_h264_dec_handle_frame (): /GstPipeline:pipeline0/GstAcmH264Dec:acmh264dec0:
timeout with select()
EOS on shutdown enabled -- waiting for EOS after Error
Waiting for EOS...
ERROR: from element /GstPipeline:pipeline0/GstQTDemux:demux0: GStreamer encountered a general stream error.
Additional debug info:
qtdemux.c(3952): gst_qtdemux_loop (): /GstPipeline:pipeline0/GstQTDemux:demux0:
streaming stopped, reason error

tsuchiya

2014年2月18日 8時46分

大澤様

お世話になっております。土屋です。
当方のエラーのログはプログラム上で出力をファイルにリダイレクトしていたので、一部( ERROR: Additional debug info:など )は抜けているかもしれません。と言うより抜けている可能性の方が大きいかもで、申し訳ありません・・・
残っているログでは同一のエラーはありませんでした。

以上、よろしくお願いいたします。

at_kojiro.yamada

2015年3月18日 15時20分

大変遅くなってしまい、申し訳ございません。
AVコーデックミドルウェア (ACM) デコーダーの異常停止する問題を修正しました。
最新のソフトウェアで試してみてください。

詳細は下記ページをご覧ください。

Armadillo 製品アップデートのお知らせ (2015年2月/Armadillo-800シリーズ対象)
http://armadillo.atmark-techno.com/news/20150225/software-update-a800