[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 メーリングリストの案内