Source支持一拖二時codec配置的優化

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

XX  作       者:ZHS(文化人)

XX  聯繫方式:文章末尾Chat快問(或進羣:471144274聯繫我

XX  版權聲明:原創文章,歡迎評論和轉載~轉載時能告訴我一聲就最好了

XX  要說的話:作者水平有限,難免有不足之處,懇請指正!

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

寫在前面:CSR的平臺做Source,可以支持一拖二的場景;但在一拖二時兩個從機必須配置爲相同的codec,且只能爲SBC, FASTSTREAM和 APTX其中一種。侷限於平臺的資源,一拖二時兩個從機的聲音會有不一致,一快一慢。

1、參考文檔,第5章節有關dual stream的部分;

2、Source端會根據自身支持的codec,針對每一個從機協商出對應的codec類型,當兩個從機協商的codec不一致時,就需要reconfig;原生代碼中,重新配置時還是無法達到從機codec一致的結果,所以就會出現兩個從機都沒有聲音或者一個從機沒有聲音的問題。如圖

3、所以修改爲下面這樣,如圖

    此時配置過程和打印的log如下:

設備0:只能支持SBC
設備1:同時支持SBC、APTX、APTX-LL

                          設備0    設備1       狀態      結果
第一次配置:        1          4            不同    沒聲音
第二次配置:        1          3            不同    沒聲音
第三次配置:        1          1            相同    有聲音

bdaddr [0x2:0x5b:0xff04]
app  memory =14
    got free instance
A2DP: a2dp_start_connection bdaddr [0x2:0x5b:0xff04]
app  memory =15
A2DP_INTERNAL_SIGNALLING_CONNECT_REQ:
        inst[0x200f]
A2DP STATE: new state [Connecting Local]
A2DP_INTERNAL_MEDIA_SUSPEND_REQ:
        inst[0x2000]
A2DP STATE: new state [Media Suspending Local]
A2DP CL_SDP_SERVICE_SEARCH_CFM status = 0
A2DP SDP ok, issue connect
A2DP_SIGNALLING_CONNECT_CFM 0:
    instance from bdaddr
        inst[0x200f]
  device ID:[0x1]
A2DP STATE: new state [Connected Signalling]
 bdaddr [0x2:0x5b:0xff04]
PS: Write new device - addr already exists as main device
A2DP_SIGNALLING_CONNECT_CFM 0:
    instance from bdaddr
        inst[0x200f]
A2DP MSG Ignored; state[3] inst[0x200f]
app  memory =16
app  memory =16
A2DP a2dp_route_all_audio   Start ind = 0 ; statue1 
A2DP a2dp_route_all_audio   Start ind = 1 ; statue1 
    instance from bdaddr
A2DP SBC bitpool [48] bad_link_bitpool[48]
A2DP new role [0]
A2DP_INTERNAL_CONNECT_AUDIO_REQ:
        inst[0x2000]
suspend: send media start
A2DP_INTERNAL_CONNECT_AUDIO_REQ:
        inst[0x200f]
SetState conn_media_local
A2DP STATE: new state [Connecting Media Local]
A2DP: Preferred List:
    ID:[0x4] Pref:[0x1]
    ID:[0x3] Pref:[0x2]
    ID:[0x1] Pref:[0x3]
A2DP: A2dpMediaOpenRequest True:
A2DP CL_DM_REMOTE_FEATURES_CFM
A2DP SBC bitpool [48] bad_link_bitpool[48]
A2DP link quality [3]
app  memory =16
A2DP a2dp_route_all_audio   Start ind = 0 ; statue1 
A2DP a2dp_route_all_audio   Start ind = 1 ; statue1 
A2DP_INTERNAL_CONNECT_AUDIO_REQ:
        inst[0x2000]
suspend: send media start
A2DP_INTERNAL_CONNECT_AUDIO_REQ:
        inst[0x200f]
a2dp_msg_internal_connect_audio_req unhandled 4
A2DP MSG Ignored; state[4] inst[0x200f]
A2DP_MEDIA_OPEN_CFM 0:
    instance from deviceID 1
        inst[0x200f]
  device ID:[0x1]
  stream ID [0x0]
  stream end point ID [0x4]
AUDIO: audio_a2dp_set_plugin [4]
A2DP STATE: new state [Connected Media]
 &&&&&A2DP_INTERN 1 ,4:
 &&&&&A2DP_INTERN  xcscAL_MEDIA_CLOSE_REQ:
 &&&&&A2DP_INTERN  xcscAL_MEDIA_CLOSE_REQ:
A2DP_INTERNAL_MEDIA_CLOSE_REQ:
        inst[0x2000]
A2DP STATE: new state [Disconnecting Media]
A2DP_INTERNAL_MEDIA_CLOSE_REQ:
        inst[0x200f]
A2DP STATE: new state [Disconnecting Media]
A2DP_MEDIA_CLOSE_IND:
    instance from deviceID 1
        inst[0x200f]
A2DP STATE: new state [Connected Signalling]
A2DP_INTERNAL_MEDIA_OPEN_REQ:
        inst[0x200f]
A2DP STATE: new state [Connecting Media Local]
A2DP: Preferred List:
    ID:[0x3] Pref:[0x1]
    ID:[0x1] Pref:[0x2]
A2DP: A2dpMediaOpenRequest True:
A2DP_MEDIA_CLOSE_IND:
    instance from deviceID 0
        inst[0x2000]
A2DP STATE: new state [Connected Signalling]
A2DP_INTERNAL_MEDIA_START_REQ:
        inst[0x2000]
A2DP MSG Ignored; state[3] inst[0x2000]
A2DP_INTERNAL_MEDIA_START_REQ:
        inst[0x2000]
A2DP MSG Ignored; state[3] inst[0x2000]
A2DP_SIGNALLING_DISCONNECT_IND:
    instance from deviceID 0
        inst[0x2000]
A2DP: a2dp_init_instance inst[0x2000]
A2DP STATE: new state [Disconnected]
AUDIO: Switch Audio Mode
app  memory =16
app  memory =15
app  memory =16
 bdaddr [0x2:0x5b:0xff04]
A2DP_MEDIA_OPEN_CFM 0:
    instance from deviceID 1
        inst[0x200f]
  device ID:[0x1]
  stream ID [0x0]
  stream end point ID [0x3]
AUDIO: audio_a2dp_set_plugin [3]
A2DP STATE: new state [Connected Media]
A2DP_INTERNAL_MEDIA_START_REQ:
        inst[0x200f]
A2DP STATE: new state [Media Starting Local]
A2DP_MEDIA_START_CFM 0:
    instance from deviceID 1
        inst[0x200f]
A2DP STATE: new state [Media Streaming]
AUDIO: audio_a2dp_connect
  audio_routed [0] input_source [0x2ea5] input_sink [0x0] a2dp_sink_0 [0x0] a2dp_sink_1 [0xba7f]
  codec ; voice_rate[0x0] packet_size[0x29c] bitpool[0x0] format[0x0]
PS: Write new device - addr already exists as main device
 bdaddr [0xfc58:0xfa:0x3111b9]
 bdaddr [0xfc58:0xfa:0x3111b9]
PS: Write new device - addr already exists as 2nd device
app  memory =15
A2DP_SIGNALLING_CONNECT_IND:
    got free instance
        inst[0x2000]
 bdaddr [0xfc58:0xfa:0x3111b9]
A2DP STATE: new state [Connecting Remote]
 bdaddr [0xfc58:0xfa:0x3111b9]
  accept = 1
A2DP_SIGNALLING_CONNECT_CFM 0:
    instance from bdaddr
        inst[0x2000]
  device ID:[0x0]
A2DP STATE: new state [Connected Signalling]
 bdaddr [0xfc58:0xfa:0x3111b9]
PS: Write new device - addr already exists as 2nd device
app  memory =15
    instance from bdaddr
A2DP new role [1]
A2DP CL_DM_REMOTE_FEATURES_CFM
A2DP link quality [3]
app  memory =15
A2DP a2dp_route_all_audio   Start ind = 0 ; statue1 
A2DP a2dp_route_all_audio   Start ind = 1 ; statue1 
    instance from bdaddr
A2DP new role [0]
A2DP_INTERNAL_CONNECT_AUDIO_REQ:
        inst[0x2000]
SetState conn_media_local
A2DP STATE: new state [Connecting Media Local]
A2DP: Preferred List:
    ID:[0x4] Pref:[0x1]
    ID:[0x3] Pref:[0x2]
    ID:[0x1] Pref:[0x3]
A2DP: A2dpMediaOpenRequest True:
A2DP_INTERNAL_CONNECT_AUDIO_REQ:
        inst[0x200f]
media streaming
A2DP_MEDIA_OPEN_CFM 0:
    instance from deviceID 0
        inst[0x2000]
  device ID:[0x0]
  stream ID [0x0]
  stream end point ID [0x1]
AUDIO: audio_a2dp_set_plugin [1]
A2DP STATE: new state [Connected Media]
 &&&&&A2DP_INTERN 1 ,3:
 &&&&&A2DP_INTERN  xcscAL_MEDIA_CLOSE_REQ:
 &&&&&A2DP_INTERN  xcscAL_MEDIA_CLOSE_REQ:
A2DP_INTERNAL_MEDIA_CLOSE_REQ:
        inst[0x2000]
A2DP STATE: new state [Disconnecting Media]
A2DP_INTERNAL_MEDIA_CLOSE_REQ:
        inst[0x200f]
A2DP STATE: new state [Disconnecting Media]
 bdaddr [0xfc58:0xfa:0x3111b9]
A2DP_MEDIA_CLOSE_IND:
    instance from deviceID 0
        inst[0x2000]
A2DP STATE: new state [Connected Signalling]
A2DP_INTERNAL_MEDIA_OPEN_REQ:
        inst[0x2000]
A2DP STATE: new state [Connecting Media Local]
A2DP: Preferred List:
    ID:[0x3] Pref:[0x1]
    ID:[0x1] Pref:[0x2]
A2DP: A2dpMediaOpenRequest True:
A2DP_MEDIA_CLOSE_IND:
    instance from deviceID 1
        inst[0x200f]
A2DP STATE: new state [Connected Signalling]
A2DP_INTERNAL_MEDIA_OPEN_REQ:
        inst[0x200f]
A2DP STATE: new state [Connecting Media Local]
A2DP: Preferred List:
    ID:[0x1] Pref:[0x1]
A2DP: A2dpMediaOpenRequest True:
A2DP_MEDIA_OPEN_CFM 0:
    instance from deviceID 0
        inst[0x2000]
  device ID:[0x0]
  stream ID [0x0]
  stream end point ID [0x1]
AUDIO: audio_a2dp_set_plugin [1]
A2DP STATE: new state [Connected Media]
A2DP_INTERNAL_MEDIA_START_REQ:
        inst[0x2000]
A2DP STATE: new state [Media Starting Local]
A2DP_MEDIA_START_CFM 0:
    instance from deviceID 0
        inst[0x2000]
A2DP STATE: new state [Media Streaming]
AUDIO: audio_a2dp_connect
  audio_routed [0] input_source [0x2ea5] input_sink [0x0] a2dp_sink_0 [0xba72] a2dp_sink_1 [0x0]
  codec ; voice_rate[0x0] packet_size[0x29c] bitpool[0x30] format[0xfd]
A2DP SBC bitpool [48] bad_link_bitpool[48]
PS: Write new device - addr already exists as 2nd device
A2DP_MEDIA_OPEN_CFM 0:
    instance from deviceID 1
        inst[0x200f]
  device ID:[0x1]
  stream ID [0x0]
  stream end point ID [0x1]
AUDIO: audio_a2dp_set_plugin [1]
A2DP STATE: new state [Connected Media]
 &&&&&A2DP_INTERN 1 ,1:
A2DP_INTERNAL_MEDIA_START_REQ:
        inst[0x200f]
A2DP STATE: new state [Media Starting Local]
A2DP_MEDIA_START_CFM 0:
    instance from deviceID 1
        inst[0x200f]
A2DP STATE: new state [Media Streaming]
 &&&&&A2DP_INTERN 1 ,1:
AUDIO: audio_a2dp_connect
A2DP SBC bitpool [48] bad_link_bitpool[48]
  audio_routed [1] connect_sink [0xba6e] bitpool [48] bad_link_bitpool [48]
PS: Write new device - addr already exists as main device

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章