[Armadillo:09150] Re: Armadillo800EVAでの音声ストリーミング再生がすぐに止まります
Takeshi Inoue
email@hidden
2013年 8月 29日 (木) 14:14:36 JST
nakaiさん、コメントありがとうございます。
--buffer-time=2000000 や -buffer-size=20
などを試してみましたが、音が止まる状況は変わりません。
(ただし、buffer-sizeを指定すると、実行開始から継続して
underrun!!!の表示は出ます)。
そもそも、--buffer-time=2000000 をすると
aplayで2秒分バッファリングしてから再生開始という
動作を期待できると思うんですが、コマンド実行後
即再生が始まります。
なお、-start-time=1000000 なども試してみましたが
カーネルパニックして以下の様なログが出ました。
SH4周りも絡んでるとなると厳しいですね…
---
Unable to handle kernel NULL pointer dereference at virtual address 00000060
pgd = c0004000
[00000060] *pgd=00000000
Internal error: Oops: 17 [#1] PREEMPT
last sysfs file: /sys/devices/platform/soc-audio.1/sound/card1/uevent
Modules linked in: bc_example shmobilelfb pvrsrvkm dmamem rtapi(P)
CPU: 0 Tainted: P (2.6.35-a800eva-at2 #4)
PC is at fsi_process_dma+0x44/0x2e0
LR is at sh_dmae_tx_status+0x1c/0x168
pc : [<c024dc80>] lr : [<c021a09c>] psr: 60000013
sp : cf033f40 ip : cf14dbc4 fp : 000118cd
r10: c045174c r9 : 00000000 r8 : cf19740c
r7 : 00001588 r6 : cf638c00 r5 : c04326c8 r4 : cf197430
r3 : 00000000 r2 : 00000000 r1 : d0832020 r0 : 00000000
Flags: nZCv IRQs on FIQs on Mode SVC_32 ISA ARM Segment kernel
Control: 10c53c7d Table: 4f7c4059 DAC: 00000017
PC: 0xc024dc00:
dc00 03a05a01 13a05c01 e59431dc e1a00004 e1a02005 e593100c e1a03005 ebffffe9
dc20 e59431dc e1a00004 e1a02005 e5931008 e1a03005 e8bd4070 eaffffe2 e92d4ff0
dc40 e1a04000 e5900038 e24dd024 e3500000 0a0000a9 e5906060 ebfffe32 e59fa2a0
dc60 e1a08000 ea000093 e5943040 e5949038 e3530000 15840040 12433001 15843044
dc80 e5997060 e5945044 e597b040 e1a00005 e1a0100b ebfc74ba e061300b e5991030
dca0 e3510000 e5971098 e5911000 1a000005 e1510005 3a00000b e0830005 e1500001
dcc0 80653001 ea000007 e1550001 20611005 35970078 30850000 30611000 e0810003
dce0 e15b0000 3061300b e5971038 e597004c e1530081 30030390 20010190 31a031a3
LR: 0xc021a01c:
a01c 05870000 e1560005 e5805048 e5801018 e5806038 e59c1000 e0641001 e58c1000
a03c 95931000 90811004 95831000 e3d63002 05923000 00834004 05824000 e8bd85f8
a05c e3a00000 e8bd85f8 e594000c e240000c eaffffd2 c03b24b9 00100100 00200200
a07c c03b24cd e92d41f0 e1a04000 e1a06001 e2400014 e3a01000 e1a05002 ebffff01
a09c e5143014 f57ff05f e3530000 e5942004 aa000002 e59f012c e30013e3 ebf83fda
a0bc e3550000 15853000 15852004 13a01000 15851008 e10f0000 f10c0080 e1a0c00d
a0dc e3cc1d7f e3c1103f e591c004 e28cc001 e581c004 e1530002 ca000006 e1560003
a0fc c3a03000 d3a03001 e1560002 d1a02003 c3832001 ea000004 e1560002 d3a02000
SP: 0xcf033ec0:
3ec0 000118cd c004372c 00000000 c002606c 60000013 ffffffff f2000000 c0026a0c
3ee0 a0000013 ffffffff cf033f2c cf638c00 00001588 c00269ac 00000000 d0832020
3f00 00000000 00000000 cf197430 c04326c8 cf638c00 00001588 cf19740c 00000000
3f20 c045174c 000118cd cf14dbc4 cf033f40 c021a09c c024dc80 60000013 ffffffff
3f40 00000003 cf14dbd4 c0430c3c cf5b8914 000118cc 000118cd 00000551 4f0e0000
3f60 c0404a1c cf197458 ffffffff cf0018e0 c024df1c cf197458 00000000 00000000
3f80 00000000 c024dfc8 cf0018e8 00000200 c018db3c cf2fb0a4 00000000 cf032000
3fa0 cf19745c c004ff78 cf033fd4 00000000 cf01b320 c0053f50 cf033fb8 cf033fb8
2013年8月29日 12:56 nakai <email@hidden>:
> nakaiです。
>
>> ●問題
>> parec --device="bt device name" | aplay -f cd -V mono
>
> 状況から推測すると、パイプした場合にデータが間に合っていない(underrun)ようですね。
> パイプのところを数フレーム分バッファリングできれば解決しそうな感じだと思います。
>
> aplayの下記のオプションなどを利用すると状況は変わりますか?
>
> -B, --buffer-time=# buffer duration is # microseconds
> --buffer-size=# buffer duration is # frames
>
>
> (2013年08月28日 22:32), Takeshi Inoue wrote:
>> 井上と申します。
>>
>> Armadillo800EVAにUSB Bluetoothドングルを指し、
>> Android携帯の音楽を、BluetoothのA2DPにてArmadilloを
>> 経由して再生させようとしていますが、音がすぐ途切れます。
>>
>> どうも、fsi-wm8978のサウンドドライバに問題がある可能性が
>> あるのではと考えています。
>>
>> ●確認できていること
>>
>> カーネルはat2 (+マルチメディア評価パッケージ)ベースで
>> Bluetooth周りを有効にし、
>>
>> 1) hciconfig で、Bluetooth USBドングルの認識を確認
>> 2) bluetooth-agentを起動してAndorid携帯(Galaxy Nexus)とのペアリングを確認
>>
>> また、pulseaudioを使用し
>> 3) parec --device="bluetooth device name" > audio.dat
>> で、Android携帯側のミュージックプレイヤーで再生した音声をファイルに録音
>> 4) aplay -f cd -V mono audio.dat にて、上記録音データのArmadilloでの再生を確認
>> (30秒程度録音して確認)
>>
>> 以上より、単体レベルでの動作は確認できています。
>>
>> ●問題
>>
>> 上記3)4)をパイプでつなげて
>> parec --device="bt device name" | aplay -f cd -V mono
>> を実行すると、1〜2秒で再生が停止し、しばらくして
>> aplay: pcm_write:1609: write error: Input/output error
>> のエラーが出ます。
>>
>> ●確認したこと
>>
>> a) alsa-utilsのaplay.cを修正し、libalsaのsnd_pcm_writei()を呼び出している部分に
>> printfを仕込んで動作を確認したところ、
>>
>> 耳に聞こえるレベルでの音声停止が発生
>> -> snd_pcm_writei()で2KB単位の音声データ書き込みはその後も数回正常終了
>> -> snd_pcm_writei()がブロックされる
>> -> 数秒して-5 (-EIO)が返される。
>>
>> という状況でした。EIOを返すまではsnd_pcm_writei()は全て正常終了です。
>>
>> b) また、aplayに-Nオプションを追加して、non blocking modeでも
>> 試してみましたが、この場合はEIOの代わりにEAGAINが返され続ける状況です。
>>
>> c) parec --device="bt device name" | aplay -f cd -V mono -r 24000
>> と、aplayの再生レートだけを試しに無理やり半分にしてみたのですが
>> (もちろん)再生速度は半分になるものの途中で止まらず再生が続きます。
>>
>> d) aplayで再生に指定するデバイスを、HDMI側にしてみたところ
>> 止まらずに再生できています(ただし、当方の環境では、モニタ側が
>> HDMI信号を認識せず、実際に音が出るかは確認できていません。
>> aplayの-V monoオプションで再生レベルをリアルタイム表示させて
>> 動作確認しています)。
>> また、再生デバイスをnullデバイスにした場合も正常です。
>>
>> c)alsa周りのソースを目視でちょっとだけ追ってみましたが、
>> sound/core/pcm_lib.c: snd_pcm_lib_write1()中の
>> snd_pcm_playback_avail()でバッファ空きを待っているのが
>> タイムアウトすると、a)で見られたようにEIOのエラーコードを返すようです。
>>
>> 以上から、fsi-wm8978のサウンドドライバに何らかの問題
>> (上記 cから考えると、underrunが起きた場合の処理?)がある
>> 可能性を考えていますがいかがでしょうか。
>> _______________________________________________
>> armadillo mailing list
>> email@hidden
>> http://lists.atmark-techno.com/cgi-bin/mailman/listinfo/armadillo
>>
>
> _______________________________________________
> armadillo mailing list
> email@hidden
> http://lists.atmark-techno.com/cgi-bin/mailman/listinfo/armadillo
armadillo メーリングリストの案内