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