ESP32 esp-idf bluetooth a2dp_sink への aptx decode 実装の考察 #2

ESP32 esp-idf bluetooth a2dp_sink への aptx decode 実装の考察 の続き、 #2 です。

それでは、SBC データのデコード場所は、と言うと、
どうやら、 esp-idf/components/bt/bludroid/external/sbc/decoder/src/decoder-sbc.c の
OI_CODEC_SBC_DecodeFrame() ようです。
注) これ以降は、esp-idf/components/bt は, bt と表記します。

bt/bludroid/external/sbc/decoder/src/decoder-sbc.c

では、OI_CODEC_SBC_DecodeFrame() は、どこでコールされているか、逆にトレースしてみましょう。

bt/bludorid/btc/profile/std/a2dp/btc_a2dp_sink.c の btc_a2dp_sink_handle_inc_media() にありました。

bt/bludorid/btc/profile/std/a2dp/btc_a2dp_sink.c

同じように、コール元を逆に辿ってみます。
やり方は、esp-idf/components/ ディレクトリーで
$grep -rnH xxxx ./
か、eclipse で、esp-idf/components/ をインポートして、検索します。

最終的には、テーブルでのスタティックな定義になります。

ここで、aptx,aptx-hd decode 実装の方法を、考えてみましょう。

大雑把に言えば、bt/bludorid/btc/profile/std/a2dp/btc_a2dp_sink.c の
line 629 static void btc_a2dp_sink_handle_inc_media(tBT_SBC_HDR *p_msg)
で、コーデックを SBC decode から、APTX(-HD) decode に変えれば、なんとなくできそうです。

bt/bludorid/btc/profile/std/a2dp/btc_a2dp_sink.c


655 OI_CODEC_SBC_DecodeFrame() コール を、aptx,aptx-hd コーデックの場合は APTX Decodeルーチンコールに変える。

もし、aptx decode を、esp-idf (フレームワークみたい) に組み込むとすれば、SBC に習って、
bt/bludroid/external/aptx/decoder/src/
あたりに、組み込む構成になるのか。

残された問題は、Bluetooth A2DP SOURCE から送られてくる、コーデックの判定方法になります。

これは、 Andoriod スマホとペアリングした時、または、スマホで、bluetooth スピーカ のコーデックを変更したときに、ソースとシンクで、構成情報のネゴシエーションを行うと思うので、
ESP32(a2dp_sink プログラムを書き込んた) を USB Serial で PC と繋げて、シリアルターミナルにログが吐き出される状態にして、実際にAndoroid スマホとペアリングしてみます。
その時のログをチェックしてみて、構成情報のネゴシエーション処理している場所の当たりを付けてみることにします。

では、早速確認してみます。と言いたい所ですが、それをするには、Andoroid Version8.0 以降のスマホが必要ぞね。

じゃが、生憎、おんちゃんのスマホは、Andoroid Version5.0 ぞね。
と言うわけで、これから先は、新しいスマホを買う迄、しばらくお預けじゃ。

じゃが、しかし。google で、色々検索していたら、Bluetooth 4.0 USBアダプタ(class1) MM-BTUD43 なるものがありました。
これだと、1,482円 で買えそうなので、こちらでも大丈夫か。

早速購入して、Windows10 で試してみましたが、残念ながら、Windows10 の Bluetooth のデバイス一覧に出てこないので、ペアリングも出来ませんでした。
その後、使えるようになりました。
Windows10 の "Bluetooth と その他のデバイス" > +Bluetooth またはその他のデバイスを追加する
で、追加しないといけなかったみたいです。

CentOS7 の方では、問題なくペアリングできました。
但し、選べるプロファイルには、High Fidelity Playback(A2DP Sink) だけ表示されます。
どうやら、esp32 の a2dp_sink の方から、APTX のプロファイル情報を返さないとだめのようです。

このブログ記事について

このページは、おんちゃんが2018年12月19日 13:35に書いたブログ記事です。

ひとつ前のブログ記事は「ESP32 esp-idf bluetooth a2dp_sink への aptx decode 実装の考察」です。

次のブログ記事は「ESP32 esp-idf bluetooth a2dp_sink への aptx decode 実装の考察 #3」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

カテゴリ

ウェブページ

サイトナビ