1/******************************************************************************
2 *
3 *  Copyright (C) 2003-2012 Broadcom Corporation
4 *
5 *  Licensed under the Apache License, Version 2.0 (the "License");
6 *  you may not use this file except in compliance with the License.
7 *  You may obtain a copy of the License at:
8 *
9 *  http://www.apache.org/licenses/LICENSE-2.0
10 *
11 *  Unless required by applicable law or agreed to in writing, software
12 *  distributed under the License is distributed on an "AS IS" BASIS,
13 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 *  See the License for the specific language governing permissions and
15 *  limitations under the License.
16 *
17 ******************************************************************************/
18
19/******************************************************************************
20 *
21 *  This is the interface file for advanced audio/video call-out functions.
22 *
23 ******************************************************************************/
24#ifndef BTA_AV_CO_H
25#define BTA_AV_CO_H
26
27#include "l2c_api.h"
28#include "bta_av_api.h"
29
30/*****************************************************************************
31**  Constants and data types
32*****************************************************************************/
33
34/* TRUE to use SCMS-T content protection */
35#ifndef BTA_AV_CO_CP_SCMS_T
36#define BTA_AV_CO_CP_SCMS_T     FALSE
37#endif
38
39/* the content protection IDs assigned by BT SIG */
40#define BTA_AV_CP_SCMS_T_ID     0x0002
41#define BTA_AV_CP_DTCP_ID       0x0001
42
43#define BTA_AV_CP_LOSC                  2
44#define BTA_AV_CP_INFO_LEN              3
45
46#define BTA_AV_CP_SCMS_COPY_MASK        3
47#define BTA_AV_CP_SCMS_COPY_FREE        2
48#define BTA_AV_CP_SCMS_COPY_ONCE        1
49#define BTA_AV_CP_SCMS_COPY_NEVER       0
50
51#define BTA_AV_CO_DEFAULT_AUDIO_OFFSET      AVDT_MEDIA_OFFSET
52
53enum
54{
55    BTA_AV_CO_ST_INIT,
56    BTA_AV_CO_ST_IN,
57    BTA_AV_CO_ST_OUT,
58    BTA_AV_CO_ST_OPEN,
59    BTA_AV_CO_ST_STREAM
60};
61
62
63/* data type for the Audio Codec Information*/
64typedef struct
65{
66    UINT16  bit_rate;       /* SBC encoder bit rate in kbps */
67    UINT16  bit_rate_busy;  /* SBC encoder bit rate in kbps */
68    UINT16  bit_rate_swampd;/* SBC encoder bit rate in kbps */
69    UINT8   busy_level;     /* Busy level indicating the bit-rate to be used */
70    UINT8   codec_info[AVDT_CODEC_SIZE];
71    UINT8   codec_type;     /* Codec type */
72} tBTA_AV_AUDIO_CODEC_INFO;
73
74/*******************************************************************************
75**
76** Function         bta_av_co_audio_init
77**
78** Description      This callout function is executed by AV when it is
79**                  started by calling BTA_AvEnable().  This function can be
80**                  used by the phone to initialize audio paths or for other
81**                  initialization purposes.
82**
83**
84** Returns          Stream codec and content protection capabilities info.
85**
86*******************************************************************************/
87BTA_API extern BOOLEAN bta_av_co_audio_init(UINT8 *p_codec_type, UINT8 *p_codec_info,
88                                   UINT8 *p_num_protect, UINT8 *p_protect_info, UINT8 index);
89
90/*******************************************************************************
91**
92** Function         bta_av_co_audio_disc_res
93**
94** Description      This callout function is executed by AV to report the
95**                  number of stream end points (SEP) were found during the
96**                  AVDT stream discovery process.
97**
98**
99** Returns          void.
100**
101*******************************************************************************/
102BTA_API extern void bta_av_co_audio_disc_res(tBTA_AV_HNDL hndl, UINT8 num_seps,
103                    UINT8 num_snk, UINT8 num_src, BD_ADDR addr, UINT16 uuid_local);
104
105/*******************************************************************************
106**
107** Function         bta_av_co_video_disc_res
108**
109** Description      This callout function is executed by AV to report the
110**                  number of stream end points (SEP) were found during the
111**                  AVDT stream discovery process.
112**
113**
114** Returns          void.
115**
116*******************************************************************************/
117BTA_API extern void bta_av_co_video_disc_res(tBTA_AV_HNDL hndl, UINT8 num_seps,
118                                             UINT8 num_snk, BD_ADDR addr);
119
120/*******************************************************************************
121**
122** Function         bta_av_co_audio_getconfig
123**
124** Description      This callout function is executed by AV to retrieve the
125**                  desired codec and content protection configuration for the
126**                  audio stream.
127**
128**
129** Returns          Stream codec and content protection configuration info.
130**
131*******************************************************************************/
132BTA_API extern UINT8 bta_av_co_audio_getconfig(tBTA_AV_HNDL hndl, tBTA_AV_CODEC codec_type,
133                                         UINT8 *p_codec_info, UINT8 *p_sep_info_idx, UINT8 seid,
134                                         UINT8 *p_num_protect, UINT8 *p_protect_info);
135
136/*******************************************************************************
137**
138** Function         bta_av_co_video_getconfig
139**
140** Description      This callout function is executed by AV to retrieve the
141**                  desired codec and content protection configuration for the
142**                  video stream.
143**
144**
145** Returns          Stream codec and content protection configuration info.
146**
147*******************************************************************************/
148BTA_API extern UINT8 bta_av_co_video_getconfig(tBTA_AV_HNDL hndl, tBTA_AV_CODEC codec_type,
149                                         UINT8 *p_codec_info, UINT8 *p_sep_info_idx, UINT8 seid,
150                                         UINT8 *p_num_protect, UINT8 *p_protect_info);
151
152/*******************************************************************************
153**
154** Function         bta_av_co_audio_setconfig
155**
156** Description      This callout function is executed by AV to set the
157**                  codec and content protection configuration of the audio stream.
158**
159**
160** Returns          void
161**
162*******************************************************************************/
163BTA_API extern void bta_av_co_audio_setconfig(tBTA_AV_HNDL hndl, tBTA_AV_CODEC codec_type,
164                                        UINT8 *p_codec_info, UINT8 seid, BD_ADDR addr,
165                                        UINT8 num_protect, UINT8 *p_protect_info,UINT8 t_local_sep, UINT8 avdt_handle);
166
167/*******************************************************************************
168**
169** Function         bta_av_co_video_setconfig
170**
171** Description      This callout function is executed by AV to set the
172**                  codec and content protection configuration of the video stream.
173**
174**
175** Returns          void
176**
177*******************************************************************************/
178BTA_API extern void bta_av_co_video_setconfig(tBTA_AV_HNDL hndl, tBTA_AV_CODEC codec_type,
179                                        UINT8 *p_codec_info, UINT8 seid, BD_ADDR addr,
180                                        UINT8 num_protect, UINT8 *p_protect_info);
181
182/*******************************************************************************
183**
184** Function         bta_av_co_audio_open
185**
186** Description      This function is called by AV when the audio stream connection
187**                  is opened.
188**                  BTA-AV maintains the MTU of A2DP streams.
189**                  If this is the 2nd audio stream, mtu is the smaller of the 2
190**                  streams.
191**
192** Returns          void
193**
194*******************************************************************************/
195BTA_API extern void bta_av_co_audio_open(tBTA_AV_HNDL hndl,
196                                         tBTA_AV_CODEC codec_type, UINT8 *p_codec_info,
197                                         UINT16 mtu);
198
199/*******************************************************************************
200**
201** Function         bta_av_co_video_open
202**
203** Description      This function is called by AV when the video stream connection
204**                  is opened.
205**
206**
207** Returns          void
208**
209*******************************************************************************/
210BTA_API extern void bta_av_co_video_open(tBTA_AV_HNDL hndl,
211                                         tBTA_AV_CODEC codec_type, UINT8 *p_codec_info,
212                                         UINT16 mtu);
213
214/*******************************************************************************
215**
216** Function         bta_av_co_audio_close
217**
218** Description      This function is called by AV when the audio stream connection
219**                  is closed.
220**                  BTA-AV maintains the MTU of A2DP streams.
221**                  When one stream is closed and no other audio stream is open,
222**                  mtu is reported as 0.
223**                  Otherwise, the MTU remains open is reported.
224**
225** Returns          void
226**
227*******************************************************************************/
228BTA_API extern void bta_av_co_audio_close(tBTA_AV_HNDL hndl, tBTA_AV_CODEC codec_type,
229                                          UINT16 mtu);
230
231/*******************************************************************************
232**
233** Function         bta_av_co_video_close
234**
235** Description      This function is called by AV when the video stream connection
236**                  is closed.
237**
238**
239** Returns          void
240**
241*******************************************************************************/
242BTA_API extern void bta_av_co_video_close(tBTA_AV_HNDL hndl, tBTA_AV_CODEC codec_type,
243                                          UINT16 mtu);
244
245/*******************************************************************************
246**
247** Function         bta_av_co_audio_start
248**
249** Description      This function is called by AV when the audio streaming data
250**                  transfer is started.
251**
252**
253** Returns          void
254**
255*******************************************************************************/
256BTA_API extern void bta_av_co_audio_start(tBTA_AV_HNDL hndl, tBTA_AV_CODEC codec_type,
257        UINT8 *p_codec_info, BOOLEAN *p_no_rtp_hdr);
258
259/*******************************************************************************
260**
261** Function         bta_av_co_video_start
262**
263** Description      This function is called by AV when the video streaming data
264**                  transfer is started.
265**
266**
267** Returns          void
268**
269*******************************************************************************/
270BTA_API extern void bta_av_co_video_start(tBTA_AV_HNDL hndl, tBTA_AV_CODEC codec_type,
271        UINT8 *p_codec_info, BOOLEAN *p_no_rtp_hdr);
272
273/*******************************************************************************
274**
275** Function         bta_av_co_audio_stop
276**
277** Description      This function is called by AV when the audio streaming data
278**                  transfer is stopped.
279**
280**
281** Returns          void
282**
283*******************************************************************************/
284BTA_API extern void bta_av_co_audio_stop(tBTA_AV_HNDL hndl, tBTA_AV_CODEC codec_type);
285
286/*******************************************************************************
287**
288** Function         bta_av_co_video_stop
289**
290** Description      This function is called by AV when the video streaming data
291**                  transfer is stopped.
292**
293**
294** Returns          void
295**
296*******************************************************************************/
297BTA_API extern void bta_av_co_video_stop(tBTA_AV_HNDL hndl, tBTA_AV_CODEC codec_type);
298
299/*******************************************************************************
300**
301** Function         bta_av_co_audio_src_data_path
302**
303** Description      This function is called to get the next data buffer from
304**                  the audio codec
305**
306** Returns          NULL if data is not ready.
307**                  Otherwise, a GKI buffer (BT_HDR*) containing the audio data.
308**
309*******************************************************************************/
310BTA_API extern void * bta_av_co_audio_src_data_path(tBTA_AV_CODEC codec_type,
311                                                    UINT32 *p_len, UINT32 *p_timestamp);
312
313/*******************************************************************************
314**
315** Function         bta_av_co_video_src_data_path
316**
317** Description      This function is called to get the next data buffer from
318**                  the video codec.
319**
320** Returns          NULL if data is not ready.
321**                  Otherwise, a video data buffer (UINT8*).
322**
323*******************************************************************************/
324BTA_API extern void * bta_av_co_video_src_data_path(tBTA_AV_CODEC codec_type,
325                                                    UINT32 *p_len, UINT32 *p_timestamp);
326
327/*******************************************************************************
328**
329** Function         bta_av_co_audio_drop
330**
331** Description      An Audio packet is dropped. .
332**                  It's very likely that the connected headset with this handle
333**                  is moved far away. The implementation may want to reduce
334**                  the encoder bit rate setting to reduce the packet size.
335**
336** Returns          void
337**
338*******************************************************************************/
339BTA_API extern void bta_av_co_audio_drop(tBTA_AV_HNDL hndl);
340
341/*******************************************************************************
342**
343** Function         bta_av_co_video_report_conn
344**
345** Description      This function is called by AV when the reporting channel is
346**                  opened (open=TRUE) or closed (open=FALSE).
347**
348** Returns          void
349**
350*******************************************************************************/
351BTA_API extern void bta_av_co_video_report_conn (BOOLEAN open, UINT8 avdt_handle);
352
353/*******************************************************************************
354**
355** Function         bta_av_co_video_report_rr
356**
357** Description      This function is called by AV when a Receiver Report is
358**                  received
359**
360** Returns          void
361**
362*******************************************************************************/
363BTA_API extern void bta_av_co_video_report_rr (UINT32 packet_lost);
364
365/*******************************************************************************
366**
367** Function         bta_av_co_audio_delay
368**
369** Description      This function is called by AV when the audio stream connection
370**                  needs to send the initial delay report to the connected SRC.
371**
372**
373** Returns          void
374**
375*******************************************************************************/
376BTA_API extern void bta_av_co_audio_delay(tBTA_AV_HNDL hndl, UINT16 delay);
377
378/*******************************************************************************
379**
380** Function         bta_av_co_video_delay
381**
382** Description      This function is called by AV when the video stream connection
383**                  needs to send the initial delay report to the connected SRC.
384**
385**
386** Returns          void
387**
388*******************************************************************************/
389BTA_API extern void bta_av_co_video_delay(tBTA_AV_HNDL hndl, UINT16 delay);
390
391#endif /* BTA_AV_CO_H */
392
393