[Armadillo:09151] Re: Armadillo800EVAでの音声ストリーミング再生がすぐに止まります

Takeshi Inoue email@hidden
2013年 8月 29日 (木) 14:53:12 JST


> --buffer-time=2000000 や -buffer-size=20

--buffer-size=20は不適切でした。
中村さんのコメントも合わせて、 --buffer-size=65536 --period-size=2048 など
試してみましたが、状況は特に変わらず、途中でエラー終了します。

井上

2013年8月29日 14:14 Takeshi Inoue <email@hidden>:
> 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 メーリングリストの案内