RDK Documentation (Open Sourced RDK Components)
btrMgr_streamOut.c
Go to the documentation of this file.
1 /*
2  * If not stated otherwise in this file or this component's Licenses.txt file the
3  * following copyright and licenses apply:
4  *
5  * Copyright 2016 RDK Management
6  *
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  * http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18 */
19 /**
20  * @file btrMgr_streamOut.c
21  *
22  * @description This file implements bluetooth manager's Generic streaming interface to external BT devices
23  *
24  */
25 
26 #ifdef HAVE_CONFIG_H
27 #include <config.h>
28 #endif
29 
30 /* System Headers */
31 #include <stdlib.h>
32 #include <string.h>
33 
34 /* Ext lib Headers */
35 #include <glib.h>
36 
37 /* Interface lib Headers */
38 #include "btrMgr_logger.h" //for rdklogger
39 
40 /* Local Headers */
41 #include "btrMgr_Types.h"
42 #include "btrMgr_mediaTypes.h"
43 #include "btrMgr_streamOut.h"
44 
45 #ifdef USE_GST1
46 #include "btrMgr_streamOutGst.h"
47 #endif
48 
49 /* Local types */
50 typedef struct _stBTRMgrSOHdl {
51  stBTRMgrMediaStatus lstBtrMgrSoStatus;
52  eBTRMgrState leBtrMgrSoInState;
53  fPtr_BTRMgr_SO_StatusCb fpcBSoStatus;
54  void* pvcBUserData;
55 #ifdef USE_GST1
56  tBTRMgrSoGstHdl hBTRMgrSoGstHdl;
57 #endif
59 
60 
61 /* Static Function Prototypes */
62 
63 /* Local Op Threads */
64 
65 /* Incoming Callbacks */
66 #ifdef USE_GST1
67 static eBTRMgrSOGstRet btrMgr_SO_GstStatusCb (eBTRMgrSOGstStatus aeBtrMgrSoGstStatus, void* apvUserData);
68 #endif
69 
70 
71 /* Static Function Definition */
72 
73 /* Local Op Threads */
74 
75 /* Interfaces */
78  tBTRMgrSoHdl* phBTRMgrSoHdl,
79  fPtr_BTRMgr_SO_StatusCb afpcBSoStatus,
80  void* apvUserData
81 ) {
82  eBTRMgrRet leBtrMgrSoRet = eBTRMgrSuccess;
83  stBTRMgrSOHdl* pstBtrMgrSoHdl = NULL;
84 
85 #ifdef USE_GST1
86  eBTRMgrSOGstRet leBtrMgrSoGstRet = eBTRMgrSOGstSuccess;
87 #endif
88 
89  if ((pstBtrMgrSoHdl = (stBTRMgrSOHdl*)g_malloc0 (sizeof(stBTRMgrSOHdl))) == NULL) {
90  BTRMGRLOG_ERROR ("Unable to allocate memory\n");
91  return eBTRMgrInitFailure;
92  }
93 
94 #ifdef USE_GST1
95  if ((leBtrMgrSoGstRet = BTRMgr_SO_GstInit(&(pstBtrMgrSoHdl->hBTRMgrSoGstHdl), btrMgr_SO_GstStatusCb, pstBtrMgrSoHdl)) != eBTRMgrSOGstSuccess) {
96  BTRMGRLOG_ERROR("Return Status = %d\n", leBtrMgrSoGstRet);
97  leBtrMgrSoRet = eBTRMgrInitFailure;
98  }
99 #else
100  // TODO: Implement Stream out functionality using generic libraries
101 #endif
102 
103  if (leBtrMgrSoRet != eBTRMgrSuccess) {
104  BTRMgr_SO_DeInit((tBTRMgrSoHdl)pstBtrMgrSoHdl);
105  return leBtrMgrSoRet;
106  }
107 
108  pstBtrMgrSoHdl->lstBtrMgrSoStatus.ui8Volume = 128;
109  pstBtrMgrSoHdl->lstBtrMgrSoStatus.eBtrMgrState = eBTRMgrStateInitialized;
110  pstBtrMgrSoHdl->lstBtrMgrSoStatus.eBtrMgrSFreq = eBTRMgrSFreq48K;
111  pstBtrMgrSoHdl->lstBtrMgrSoStatus.eBtrMgrSFmt = eBTRMgrSFmt16bit;
112  pstBtrMgrSoHdl->lstBtrMgrSoStatus.eBtrMgrAChan = eBTRMgrAChanJStereo;
113  pstBtrMgrSoHdl->leBtrMgrSoInState = eBTRMgrStatePlaying;
114  pstBtrMgrSoHdl->fpcBSoStatus = afpcBSoStatus;
115  pstBtrMgrSoHdl->pvcBUserData = apvUserData;
116 
117 
118  *phBTRMgrSoHdl = (tBTRMgrSoHdl)pstBtrMgrSoHdl;
119 
120  return leBtrMgrSoRet;
121 }
122 
123 
126  tBTRMgrSoHdl hBTRMgrSoHdl
127 ) {
128  eBTRMgrRet leBtrMgrSoRet = eBTRMgrSuccess;
129  stBTRMgrSOHdl* pstBtrMgrSoHdl = (stBTRMgrSOHdl*)hBTRMgrSoHdl;
130 
131 #ifdef USE_GST1
132  eBTRMgrSOGstRet leBtrMgrSoGstRet = eBTRMgrSOGstSuccess;
133 #endif
134 
135  if (pstBtrMgrSoHdl == NULL) {
136  return eBTRMgrNotInitialized;
137  }
138 
139 #ifdef USE_GST1
140  if ((leBtrMgrSoGstRet = BTRMgr_SO_GstDeInit(pstBtrMgrSoHdl->hBTRMgrSoGstHdl)) != eBTRMgrSOGstSuccess) {
141  BTRMGRLOG_ERROR("Return Status = %d\n", leBtrMgrSoGstRet);
142  leBtrMgrSoRet = eBTRMgrFailure;
143  }
144  pstBtrMgrSoHdl->hBTRMgrSoGstHdl = NULL;
145 #else
146  // TODO: Implement Stream out functionality using generic libraries
147 #endif
148 
149  pstBtrMgrSoHdl->lstBtrMgrSoStatus.eBtrMgrState = eBTRMgrStateDeInitialized;
150 
151  g_free((void*)pstBtrMgrSoHdl);
152  pstBtrMgrSoHdl = NULL;
153 
154  BTRMGRLOG_DEBUG ("Return Status = %d\n", leBtrMgrSoRet);
155  return leBtrMgrSoRet;
156 }
157 
158 
161  tBTRMgrSoHdl hBTRMgrSoHdl
162 ) {
163  eBTRMgrRet leBtrMgrSoRet = eBTRMgrSuccess;
164  stBTRMgrSOHdl* pstBtrMgrSoHdl = (stBTRMgrSOHdl*)hBTRMgrSoHdl;
165 
166 #ifdef USE_GST1
167  eBTRMgrSOGstRet leBtrMgrSoGstRet = eBTRMgrSOGstSuccess;
168  (void)leBtrMgrSoGstRet;
169 #endif
170 
171  if (pstBtrMgrSoHdl == NULL) {
172  return eBTRMgrNotInitialized;
173  }
174 
175  return leBtrMgrSoRet;
176 }
177 
178 
181  tBTRMgrSoHdl hBTRMgrSoHdl
182 ) {
183  eBTRMgrRet leBtrMgrSoRet = eBTRMgrSuccess;
184  stBTRMgrSOHdl* pstBtrMgrSoHdl = (stBTRMgrSOHdl*)hBTRMgrSoHdl;
185 
186 #ifdef USE_GST1
187  eBTRMgrSOGstRet leBtrMgrSoGstRet = eBTRMgrSOGstSuccess;
188  (void)leBtrMgrSoGstRet;
189 #endif
190 
191  if (pstBtrMgrSoHdl == NULL) {
192  return eBTRMgrNotInitialized;
193  }
194 
195  return leBtrMgrSoRet;
196 }
197 
198 
201  tBTRMgrSoHdl hBTRMgrSoHdl,
202  stBTRMgrMediaStatus* apstBtrMgrSoStatus
203 ) {
204  eBTRMgrRet leBtrMgrSoRet = eBTRMgrSuccess;
205  stBTRMgrSOHdl* pstBtrMgrSoHdl = (stBTRMgrSOHdl*)hBTRMgrSoHdl;
206 
207 #ifdef USE_GST1
208  eBTRMgrSOGstRet leBtrMgrSoGstRet = eBTRMgrSOGstSuccess;
209  (void)leBtrMgrSoGstRet;
210 #endif
211 
212  if (pstBtrMgrSoHdl == NULL) {
213  return eBTRMgrNotInitialized;
214  }
215 
216  return leBtrMgrSoRet;
217 }
218 
219 
222  tBTRMgrSoHdl hBTRMgrSoHdl,
223  stBTRMgrMediaStatus* apstBtrMgrSoStatus
224 ) {
225  eBTRMgrRet leBtrMgrSoRet = eBTRMgrSuccess;
226  stBTRMgrSOHdl* pstBtrMgrSoHdl = (stBTRMgrSOHdl*)hBTRMgrSoHdl;
227 
228 #ifdef USE_GST1
229  eBTRMgrSOGstRet leBtrMgrSoGstRet = eBTRMgrSOGstSuccess;
230 #endif
231 
232  if (pstBtrMgrSoHdl == NULL) {
233  return eBTRMgrNotInitialized;
234  }
235 
236  if (apstBtrMgrSoStatus == NULL) {
237  return eBTRMgrFailInArg;
238  }
239 
240 #ifdef USE_GST1
241  if (pstBtrMgrSoHdl->leBtrMgrSoInState != apstBtrMgrSoStatus->eBtrMgrState) {
242  pstBtrMgrSoHdl->leBtrMgrSoInState = apstBtrMgrSoStatus->eBtrMgrState;
243  BTRMGRLOG_WARN("Stream Out Paused = %d\n", apstBtrMgrSoStatus->eBtrMgrState);
244 
245  if (pstBtrMgrSoHdl->leBtrMgrSoInState == eBTRMgrStatePaused) {
246  if ((leBtrMgrSoGstRet = BTRMgr_SO_GstSetInputPaused(pstBtrMgrSoHdl->hBTRMgrSoGstHdl, 1)) != eBTRMgrSOGstSuccess) {
247  BTRMGRLOG_ERROR("Return Status = %d - Failed to set Paused\n", leBtrMgrSoGstRet);
248  leBtrMgrSoRet = eBTRMgrFailure;
249  }
250  }
251  else if (pstBtrMgrSoHdl->leBtrMgrSoInState == eBTRMgrStatePlaying) {
252  if ((leBtrMgrSoGstRet = BTRMgr_SO_GstSetInputPaused(pstBtrMgrSoHdl->hBTRMgrSoGstHdl, 0)) != eBTRMgrSOGstSuccess) {
253  BTRMGRLOG_ERROR("Return Status = %d - Failed to set Playing\n", leBtrMgrSoGstRet);
254  leBtrMgrSoRet = eBTRMgrFailure;
255  }
256  }
257  }
258 
259  if (pstBtrMgrSoHdl->lstBtrMgrSoStatus.ui8Volume != apstBtrMgrSoStatus->ui8Volume) {
260  pstBtrMgrSoHdl->lstBtrMgrSoStatus.ui8Volume = apstBtrMgrSoStatus->ui8Volume;
261  if (apstBtrMgrSoStatus->ui8Volume != 128) {
262  if ((leBtrMgrSoGstRet = BTRMgr_SO_GstSetVolume(pstBtrMgrSoHdl->hBTRMgrSoGstHdl, apstBtrMgrSoStatus->ui8Volume)) != eBTRMgrSOGstSuccess) {
263  BTRMGRLOG_ERROR("Return Status = %d - Failed to set volume\n", leBtrMgrSoGstRet);
264  leBtrMgrSoRet = eBTRMgrFailure;
265  }
266  }
267  }
268 #else
269  // TODO: Implement Stream out functionality using generic libraries
270 #endif
271 
272  return leBtrMgrSoRet;
273 }
274 
275 
278  tBTRMgrSoHdl hBTRMgrSoHdl,
279  unsigned char ui8Volume
280 ) {
281  eBTRMgrRet leBtrMgrSoRet = eBTRMgrSuccess;
282  stBTRMgrSOHdl* pstBtrMgrSoHdl = (stBTRMgrSOHdl*)hBTRMgrSoHdl;
283  eBTRMgrSOGstRet leBtrMgrSoGstRet = eBTRMgrSOGstSuccess;
284 
285  if ((leBtrMgrSoGstRet = BTRMgr_SO_GstSetVolume(pstBtrMgrSoHdl->hBTRMgrSoGstHdl, ui8Volume)) != eBTRMgrSOGstSuccess) {
286  BTRMGRLOG_ERROR("Return Status = %d - Failed to set volume\n", leBtrMgrSoGstRet);
287  leBtrMgrSoRet = eBTRMgrFailure;
288  } else {
289  pstBtrMgrSoHdl->lstBtrMgrSoStatus.ui8Volume = ui8Volume;
290  BTRMGRLOG_DEBUG("Volume set %d success \n", ui8Volume);
291  }
292 
293  return leBtrMgrSoRet;
294 }
295 
296 
299  tBTRMgrSoHdl hBTRMgrSoHdl,
300  unsigned char* ui8Volume
301 ) {
302  eBTRMgrRet leBtrMgrSoRet = eBTRMgrSuccess;
303  stBTRMgrSOHdl* pstBtrMgrSoHdl = (stBTRMgrSOHdl*)hBTRMgrSoHdl;
304  eBTRMgrSOGstRet leBtrMgrSoGstRet = eBTRMgrSOGstSuccess;
305  unsigned char ui8GstVolume;
306 
307  if(!ui8Volume || !pstBtrMgrSoHdl) {
308  leBtrMgrSoRet = eBTRMgrFailure;
309  return leBtrMgrSoRet;
310  }
311 
312  if ((leBtrMgrSoGstRet = BTRMgr_SO_GstGetVolume(pstBtrMgrSoHdl->hBTRMgrSoGstHdl, &ui8GstVolume)) != eBTRMgrSOGstSuccess) {
313  BTRMGRLOG_ERROR("Return Status = %d - Failed to get volume\n", leBtrMgrSoGstRet);
314  leBtrMgrSoRet = eBTRMgrFailure;
315  } else {
316  *ui8Volume = ui8GstVolume;
317  BTRMGRLOG_DEBUG("Volume get %d success \n", ui8GstVolume);
318  }
319 
320  return leBtrMgrSoRet;
321 }
322 
323 
326  tBTRMgrSoHdl hBTRMgrSoHdl,
327  gboolean Mute
328 ) {
329  eBTRMgrRet leBtrMgrSoRet = eBTRMgrSuccess;
330  stBTRMgrSOHdl* pstBtrMgrSoHdl = (stBTRMgrSOHdl*)hBTRMgrSoHdl;
331  eBTRMgrSOGstRet leBtrMgrSoGstRet = eBTRMgrSOGstSuccess;
332 
333  if ((leBtrMgrSoGstRet = BTRMgr_SO_GstSetMute(pstBtrMgrSoHdl->hBTRMgrSoGstHdl, Mute)) != eBTRMgrSOGstSuccess) {
334  BTRMGRLOG_ERROR("Return Status = %d - Failed to set volume\n", leBtrMgrSoGstRet);
335  leBtrMgrSoRet = eBTRMgrFailure;
336  } else {
337  BTRMGRLOG_DEBUG("Mute set success \n");
338  }
339  return leBtrMgrSoRet;
340 
341 }
344  tBTRMgrSoHdl hBTRMgrSoHdl,
345  gboolean * mute
346 ) {
347  eBTRMgrRet leBtrMgrSoRet = eBTRMgrSuccess;
348  stBTRMgrSOHdl* pstBtrMgrSoHdl = (stBTRMgrSOHdl*)hBTRMgrSoHdl;
349  eBTRMgrSOGstRet leBtrMgrSoGstRet = eBTRMgrSOGstSuccess;
350  gboolean gmute;
351 
352  if(!mute || !pstBtrMgrSoHdl) {
353  leBtrMgrSoRet = eBTRMgrFailure;
354  return leBtrMgrSoRet;
355  }
356 
357  if ((leBtrMgrSoGstRet = BTRMgr_SO_GstGetMute(pstBtrMgrSoHdl->hBTRMgrSoGstHdl, &gmute)) != eBTRMgrSOGstSuccess) {
358  BTRMGRLOG_ERROR("Return Status = %d - Failed to get mute\n", leBtrMgrSoGstRet);
359  leBtrMgrSoRet = eBTRMgrFailure;
360  } else {
361  *mute = gmute;
362  BTRMGRLOG_DEBUG("mute get %d success \n", gmute);
363  }
364 
365  return leBtrMgrSoRet;
366 }
369  tBTRMgrSoHdl hBTRMgrSoHdl,
370  stBTRMgrInASettings* apstBtrMgrSoInASettings,
371  stBTRMgrOutASettings* apstBtrMgrSoOutASettings
372 ) {
373  eBTRMgrRet leBtrMgrSoRet = eBTRMgrSuccess;
374  stBTRMgrSOHdl* pstBtrMgrSoHdl = (stBTRMgrSOHdl*)hBTRMgrSoHdl;
375 
376  stBTRMgrPCMInfo* pstBtrMgrSoInPcmInfo = NULL;
377  stBTRMgrSBCInfo* pstBtrMgrSoOutSbcInfo = NULL;
378 
379  unsigned int lui32InBitsPerSample = 0;
380  unsigned int lui32InNumAChan = 0;
381  unsigned int lui32InSamplingFreq = 0;
382 
383  unsigned short lui16OutFrameLen = 0;
384  unsigned short lui16OutBitrateKbps = 0;
385  unsigned short lui16OutMtu = 0;
386 
387  unsigned int lui32InByteRate = 0;
388  unsigned int lui32OutByteRate = 0;
389  float lfOutMtuTimemSec = 0.0;
390 
391  if (pstBtrMgrSoHdl == NULL) {
392  return eBTRMgrNotInitialized;
393  }
394 
395  if ((apstBtrMgrSoInASettings == NULL) || (apstBtrMgrSoOutASettings == NULL) ||
396  (apstBtrMgrSoInASettings->pstBtrMgrInCodecInfo == NULL) || (apstBtrMgrSoOutASettings->pstBtrMgrOutCodecInfo == NULL)) {
397  return eBTRMgrFailInArg;
398  }
399 
400  if (apstBtrMgrSoInASettings->eBtrMgrInAType == eBTRMgrATypePCM) {
401  pstBtrMgrSoInPcmInfo = (stBTRMgrPCMInfo*)(apstBtrMgrSoInASettings->pstBtrMgrInCodecInfo);
402 
403  switch (pstBtrMgrSoInPcmInfo->eBtrMgrSFreq) {
404  case eBTRMgrSFreq8K:
405  lui32InSamplingFreq = 8000;
406  break; //CID:23383 - Missing break
407  case eBTRMgrSFreq16K:
408  lui32InSamplingFreq = 16000;
409  break;
410  case eBTRMgrSFreq32K:
411  lui32InSamplingFreq = 32000;
412  break;
413  case eBTRMgrSFreq44_1K:
414  lui32InSamplingFreq = 44100;
415  break;
416  case eBTRMgrSFreq48K:
417  lui32InSamplingFreq = 48000;
418  break;
419  case eBTRMgrSFreqUnknown:
420  default:
421  lui32InSamplingFreq = 48000;
422  break;
423  }
424 
425  switch (pstBtrMgrSoInPcmInfo->eBtrMgrSFmt) {
426  case eBTRMgrSFmt8bit:
427  lui32InBitsPerSample = 8;
428  break;
429  case eBTRMgrSFmt16bit:
430  lui32InBitsPerSample = 16;
431  break;
432  case eBTRMgrSFmt24bit:
433  lui32InBitsPerSample = 24;
434  break;
435  case eBTRMgrSFmt32bit:
436  lui32InBitsPerSample = 32;
437  break;
438  case eBTRMgrSFmtUnknown:
439  default:
440  lui32InBitsPerSample = 16;
441  break;
442  }
443 
444  switch (pstBtrMgrSoInPcmInfo->eBtrMgrAChan) {
445  case eBTRMgrAChanMono:
446  lui32InNumAChan = 1;
447  break;
448  case eBTRMgrAChanDualChannel:
449  lui32InNumAChan = 2;
450  break;
451  case eBTRMgrAChanStereo:
452  lui32InNumAChan = 2;
453  break;
454  case eBTRMgrAChanJStereo:
455  lui32InNumAChan = 2;
456  break;
457  case eBTRMgrAChan5_1:
458  lui32InNumAChan = 6;
459  break;
460  case eBTRMgrAChan7_1:
461  lui32InNumAChan = 8;
462  break;
463  case eBTRMgrAChanUnknown:
464  default:
465  lui32InNumAChan = 2;
466  break;
467  }
468 
469  }
470 
471  if (apstBtrMgrSoOutASettings->eBtrMgrOutAType == eBTRMgrATypeSBC) {
472  pstBtrMgrSoOutSbcInfo = (stBTRMgrSBCInfo*)(apstBtrMgrSoOutASettings->pstBtrMgrOutCodecInfo);
473  lui16OutFrameLen = pstBtrMgrSoOutSbcInfo->ui16SbcFrameLen;
474  lui16OutBitrateKbps = pstBtrMgrSoOutSbcInfo->ui16SbcBitrate;
475  lui16OutMtu = apstBtrMgrSoOutASettings->i32BtrMgrDevMtu;
476  }
477 
478 
479  if ((!lui16OutFrameLen) || (!lui16OutBitrateKbps) || (!lui16OutMtu)) {
480  return eBTRMgrFailInArg;
481  }
482 
483 
484  lui16OutMtu = lui16OutMtu - 20; // 12 byte RTP packet + 8 byte UDP - (54 Byte - 12 byte RTP packet + 8 byte UDP + 20 byte IP + 18 byte Ethernet headers)
485  lui32OutByteRate = (lui16OutBitrateKbps * 1024) / 8;
486  lfOutMtuTimemSec = (lui16OutMtu * 1000.0) / lui32OutByteRate;
487  lui32InByteRate = (lui32InBitsPerSample/8) * lui32InNumAChan * lui32InSamplingFreq;
488  apstBtrMgrSoInASettings->i32BtrMgrInBufMaxSize = (lui32InByteRate * lfOutMtuTimemSec)/1000;
489 
490  // Align to multiple of 256
491  apstBtrMgrSoInASettings->i32BtrMgrInBufMaxSize = (apstBtrMgrSoInASettings->i32BtrMgrInBufMaxSize >> 8);
492  apstBtrMgrSoInASettings->i32BtrMgrInBufMaxSize = apstBtrMgrSoInASettings->i32BtrMgrInBufMaxSize << 8;
493 
494 
495  BTRMGRLOG_DEBUG ("Effective MTU = %d\n", lui16OutMtu);
496  BTRMGRLOG_DEBUG ("OutByteRate = %d\n", lui32OutByteRate);
497  BTRMGRLOG_DEBUG ("OutMtuTimemSec = %f\n", lfOutMtuTimemSec);
498  BTRMGRLOG_DEBUG ("InByteRate = %d\n", lui32InByteRate);
499  BTRMGRLOG_DEBUG ("InBufMaxSize = %d\n", apstBtrMgrSoInASettings->i32BtrMgrInBufMaxSize);
500 
501 
502  return leBtrMgrSoRet;
503 }
504 
505 
508  tBTRMgrSoHdl hBTRMgrSoHdl,
509  stBTRMgrInASettings* apstBtrMgrSoInASettings,
510  stBTRMgrOutASettings* apstBtrMgrSoOutASettings
511 ) {
512  eBTRMgrRet leBtrMgrSoRet = eBTRMgrSuccess;
513  stBTRMgrSOHdl* pstBtrMgrSoHdl = (stBTRMgrSOHdl*)hBTRMgrSoHdl;
514 
515  eBTRMgrSFmt leBtrMgrSoInSFmt = eBTRMgrSFmtUnknown;
516  eBTRMgrAChan leBtrMgrSoInAChan = eBTRMgrAChanUnknown;
517  eBTRMgrSFreq leBtrMgrSoInSFreq = eBTRMgrSFreqUnknown;
518 
519  eBTRMgrAChan leBtrMgrSoOutAChan = eBTRMgrAChanUnknown;
520  eBTRMgrSFreq leBtrMgrSoOutSFreq = eBTRMgrSFreqUnknown;
521 
522  const char* lpcBtrMgrInSoSFmt = NULL;
523  unsigned int lui32BtrMgrInSoAChan;
524  unsigned int lui32BtrMgrInSoSFreq;
525 
526  const char* lpcBtrMgrOutSoAChanMode = NULL;
527  unsigned int lui32BtrMgrOutSoAChan;
528  unsigned int lui32BtrMgrOutSoSFreq;
529 
530  unsigned char lui8SbcAllocMethod = 0;
531  unsigned char lui8SbcSubbands = 0;
532  unsigned char lui8SbcBlockLength = 0;
533  unsigned char lui8SbcMinBitpool = 0;
534  unsigned char lui8SbcMaxBitpool = 0;
535 
536 
537 #ifdef USE_GST1
538  eBTRMgrSOGstRet leBtrMgrSoGstRet = eBTRMgrSOGstSuccess;
539 #endif
540 
541  if (pstBtrMgrSoHdl == NULL) {
542  return eBTRMgrNotInitialized;
543  }
544 
545  if ((apstBtrMgrSoInASettings == NULL) || (apstBtrMgrSoOutASettings == NULL) ||
546  (apstBtrMgrSoInASettings->pstBtrMgrInCodecInfo == NULL) || (apstBtrMgrSoOutASettings->pstBtrMgrOutCodecInfo == NULL)) {
547  return eBTRMgrFailInArg;
548  }
549 
550  if (apstBtrMgrSoInASettings->eBtrMgrInAType == eBTRMgrATypePCM) {
551  stBTRMgrPCMInfo* pstBtrMgrSoInPcmInfo = (stBTRMgrPCMInfo*)(apstBtrMgrSoInASettings->pstBtrMgrInCodecInfo);
552  leBtrMgrSoInSFmt = pstBtrMgrSoInPcmInfo->eBtrMgrSFmt;
553  leBtrMgrSoInAChan = pstBtrMgrSoInPcmInfo->eBtrMgrAChan;
554  leBtrMgrSoInSFreq = pstBtrMgrSoInPcmInfo->eBtrMgrSFreq;
555  }
556 
557  if (apstBtrMgrSoOutASettings->eBtrMgrOutAType == eBTRMgrATypeSBC) {
558  stBTRMgrSBCInfo* pstBtrMgrSoOutSbcInfo = (stBTRMgrSBCInfo*)(apstBtrMgrSoOutASettings->pstBtrMgrOutCodecInfo);
559 
560  leBtrMgrSoOutAChan = pstBtrMgrSoOutSbcInfo->eBtrMgrSbcAChan;
561  leBtrMgrSoOutSFreq = pstBtrMgrSoOutSbcInfo->eBtrMgrSbcSFreq;
562  lui8SbcAllocMethod = pstBtrMgrSoOutSbcInfo->ui8SbcAllocMethod;
563  lui8SbcSubbands = pstBtrMgrSoOutSbcInfo->ui8SbcSubbands;
564  lui8SbcBlockLength = pstBtrMgrSoOutSbcInfo->ui8SbcBlockLength;
565  lui8SbcMinBitpool = pstBtrMgrSoOutSbcInfo->ui8SbcMinBitpool;
566  lui8SbcMaxBitpool = pstBtrMgrSoOutSbcInfo->ui8SbcMaxBitpool;
567  }
568 
569 
570  switch (leBtrMgrSoInSFreq) {
571  case eBTRMgrSFreq8K:
572  lui32BtrMgrInSoSFreq = 8000;
573  break; //CID:23360 - Missing break
574  case eBTRMgrSFreq16K:
575  lui32BtrMgrInSoSFreq = 16000;
576  break;
577  case eBTRMgrSFreq32K:
578  lui32BtrMgrInSoSFreq = 32000;
579  break;
580  case eBTRMgrSFreq44_1K:
581  lui32BtrMgrInSoSFreq = 44100;
582  break;
583  case eBTRMgrSFreq48K:
584  lui32BtrMgrInSoSFreq = 48000;
585  break;
586  case eBTRMgrSFreqUnknown:
587  default:
588  lui32BtrMgrInSoSFreq = 48000;
589  break;
590  }
591 
592  switch (leBtrMgrSoInSFmt) {
593  case eBTRMgrSFmt8bit:
594  lpcBtrMgrInSoSFmt = BTRMGR_AUDIO_SFMT_SIGNED_8BIT;
595  break;
596  case eBTRMgrSFmt16bit:
597  lpcBtrMgrInSoSFmt = BTRMGR_AUDIO_SFMT_SIGNED_LE_16BIT;
598  break;
599  case eBTRMgrSFmt24bit:
600  lpcBtrMgrInSoSFmt = BTRMGR_AUDIO_SFMT_SIGNED_LE_24BIT;
601  break;
602  case eBTRMgrSFmt32bit:
603  lpcBtrMgrInSoSFmt = BTRMGR_AUDIO_SFMT_SIGNED_LE_32BIT;
604  break;
605  case eBTRMgrSFmtUnknown:
606  default:
607  lpcBtrMgrInSoSFmt = BTRMGR_AUDIO_SFMT_SIGNED_LE_16BIT;
608  break;
609  }
610 
611  switch (leBtrMgrSoInAChan) {
612  case eBTRMgrAChanMono:
613  lui32BtrMgrInSoAChan = 1;
614  break;
615  case eBTRMgrAChanDualChannel:
616  lui32BtrMgrInSoAChan = 2;
617  break;
618  case eBTRMgrAChanStereo:
619  lui32BtrMgrInSoAChan = 2;
620  break;
621  case eBTRMgrAChanJStereo:
622  lui32BtrMgrInSoAChan = 2;
623  break;
624  case eBTRMgrAChan5_1:
625  lui32BtrMgrInSoAChan = 6;
626  break;
627  case eBTRMgrAChan7_1:
628  lui32BtrMgrInSoAChan = 8;
629  break;
630  case eBTRMgrAChanUnknown:
631  default:
632  lui32BtrMgrInSoAChan = 2;
633  break;
634  }
635 
636 
637  switch (leBtrMgrSoOutAChan) {
638  case eBTRMgrAChanMono:
639  lui32BtrMgrOutSoAChan = 1;
640  lpcBtrMgrOutSoAChanMode = BTRMGR_AUDIO_CHANNELMODE_MONO;
641  break;
642  case eBTRMgrAChanDualChannel:
643  lui32BtrMgrOutSoAChan = 2;
644  lpcBtrMgrOutSoAChanMode = BTRMGR_AUDIO_CHANNELMODE_DUAL;
645  break;
646  case eBTRMgrAChanStereo:
647  lui32BtrMgrOutSoAChan = 2;
648  lpcBtrMgrOutSoAChanMode = BTRMGR_AUDIO_CHANNELMODE_STEREO;
649  break;
650  case eBTRMgrAChanJStereo:
651  lui32BtrMgrOutSoAChan = 2;
652  lpcBtrMgrOutSoAChanMode = BTRMGR_AUDIO_CHANNELMODE_JSTEREO;
653  break;
654  case eBTRMgrAChan5_1:
655  lui32BtrMgrOutSoAChan = 6;
656  break;
657  case eBTRMgrAChan7_1:
658  lui32BtrMgrOutSoAChan = 8;
659  break;
660  case eBTRMgrAChanUnknown:
661  default:
662  lui32BtrMgrOutSoAChan = 2;
663  lpcBtrMgrOutSoAChanMode = BTRMGR_AUDIO_CHANNELMODE_STEREO;
664  break;
665  }
666 
667  switch (leBtrMgrSoOutSFreq) {
668  case eBTRMgrSFreq8K:
669  lui32BtrMgrOutSoSFreq = 8000;
670  break;
671  case eBTRMgrSFreq16K:
672  lui32BtrMgrOutSoSFreq = 16000;
673  break;
674  case eBTRMgrSFreq32K:
675  lui32BtrMgrOutSoSFreq = 32000;
676  break;
677  case eBTRMgrSFreq44_1K:
678  lui32BtrMgrOutSoSFreq = 44100;
679  break;
680  case eBTRMgrSFreq48K:
681  lui32BtrMgrOutSoSFreq = 48000;
682  break;
683  case eBTRMgrSFreqUnknown:
684  default:
685  lui32BtrMgrOutSoSFreq = 48000;
686  break;
687  }
688 
689 #ifdef USE_GST1
690  if ((leBtrMgrSoGstRet = BTRMgr_SO_GstStart( pstBtrMgrSoHdl->hBTRMgrSoGstHdl,
691  apstBtrMgrSoInASettings->i32BtrMgrInBufMaxSize,
692  lpcBtrMgrInSoSFmt,
693  lui32BtrMgrInSoSFreq,
694  lui32BtrMgrInSoAChan,
695  lui32BtrMgrOutSoSFreq,
696  lui32BtrMgrOutSoAChan,
697  lpcBtrMgrOutSoAChanMode,
698  lui8SbcAllocMethod,
699  lui8SbcSubbands,
700  lui8SbcBlockLength,
701  lui8SbcMinBitpool,
702  lui8SbcMaxBitpool,
703  apstBtrMgrSoOutASettings->i32BtrMgrDevFd,
704  apstBtrMgrSoOutASettings->i32BtrMgrDevMtu)) != eBTRMgrSOGstSuccess) {
705  BTRMGRLOG_ERROR("Return Status = %d\n", leBtrMgrSoGstRet);
706  leBtrMgrSoRet = eBTRMgrFailure;
707  }
708 #else
709  // TODO: Implement Stream out functionality using generic libraries
710 #endif
711 
712  pstBtrMgrSoHdl->lstBtrMgrSoStatus.eBtrMgrState = eBTRMgrStatePlaying;
713  pstBtrMgrSoHdl->lstBtrMgrSoStatus.ui32OverFlowCnt = 0;
714  pstBtrMgrSoHdl->lstBtrMgrSoStatus.ui32UnderFlowCnt= 0;
715 
716  return leBtrMgrSoRet;
717 }
718 
719 
722  tBTRMgrSoHdl hBTRMgrSoHdl
723 ) {
724  eBTRMgrRet leBtrMgrSoRet = eBTRMgrSuccess;
725  stBTRMgrSOHdl* pstBtrMgrSoHdl = (stBTRMgrSOHdl*)hBTRMgrSoHdl;
726 
727 #ifdef USE_GST1
728  eBTRMgrSOGstRet leBtrMgrSoGstRet = eBTRMgrSOGstSuccess;
729 #endif
730 
731  if (pstBtrMgrSoHdl == NULL) {
732  return eBTRMgrNotInitialized;
733  }
734 
735 #ifdef USE_GST1
736  if ((leBtrMgrSoGstRet = BTRMgr_SO_GstStop(pstBtrMgrSoHdl->hBTRMgrSoGstHdl)) != eBTRMgrSOGstSuccess) {
737  BTRMGRLOG_ERROR("Return Status = %d\n", leBtrMgrSoGstRet);
738  leBtrMgrSoRet = eBTRMgrFailure;
739  }
740 #else
741  // TODO: Implement Stream out functionality using generic libraries
742 #endif
743 
744  pstBtrMgrSoHdl->lstBtrMgrSoStatus.eBtrMgrState = eBTRMgrStateStopped;
745  pstBtrMgrSoHdl->lstBtrMgrSoStatus.ui32OverFlowCnt = 0;
746  pstBtrMgrSoHdl->lstBtrMgrSoStatus.ui32UnderFlowCnt= 0;
747 
748  return leBtrMgrSoRet;
749 }
750 
751 
754  tBTRMgrSoHdl hBTRMgrSoHdl
755 ) {
756  eBTRMgrRet leBtrMgrSoRet = eBTRMgrSuccess;
757  stBTRMgrSOHdl* pstBtrMgrSoHdl = (stBTRMgrSOHdl*)hBTRMgrSoHdl;
758 
759 #ifdef USE_GST1
760  eBTRMgrSOGstRet leBtrMgrSoGstRet = eBTRMgrSOGstSuccess;
761 #endif
762 
763  if (pstBtrMgrSoHdl == NULL) {
764  return eBTRMgrNotInitialized;
765  }
766 
767 #ifdef USE_GST1
768  if ((leBtrMgrSoGstRet = BTRMgr_SO_GstPause(pstBtrMgrSoHdl->hBTRMgrSoGstHdl)) != eBTRMgrSOGstSuccess) {
769  BTRMGRLOG_ERROR("Return Status = %d\n", leBtrMgrSoGstRet);
770  leBtrMgrSoRet = eBTRMgrFailure;
771  }
772 #else
773  // TODO: Implement Stream out functionality using generic libraries
774 #endif
775 
776  pstBtrMgrSoHdl->lstBtrMgrSoStatus.eBtrMgrState = eBTRMgrStatePaused;
777 
778  return leBtrMgrSoRet;
779 }
780 
781 
784  tBTRMgrSoHdl hBTRMgrSoHdl
785 ) {
786  eBTRMgrRet leBtrMgrSoRet = eBTRMgrSuccess;
787  stBTRMgrSOHdl* pstBtrMgrSoHdl = (stBTRMgrSOHdl*)hBTRMgrSoHdl;
788 
789 #ifdef USE_GST1
790  eBTRMgrSOGstRet leBtrMgrSoGstRet = eBTRMgrSOGstSuccess;
791 #endif
792 
793  if (pstBtrMgrSoHdl == NULL) {
794  return eBTRMgrNotInitialized;
795  }
796 
797 #ifdef USE_GST1
798  if ((leBtrMgrSoGstRet = BTRMgr_SO_GstResume(pstBtrMgrSoHdl->hBTRMgrSoGstHdl)) != eBTRMgrSOGstSuccess) {
799  BTRMGRLOG_ERROR("Return Status = %d\n", leBtrMgrSoGstRet);
800  leBtrMgrSoRet = eBTRMgrFailure;
801  }
802 #else
803  // TODO: Implement Stream out functionality using generic libraries
804 #endif
805 
806  pstBtrMgrSoHdl->lstBtrMgrSoStatus.eBtrMgrState = eBTRMgrStatePlaying;
807 
808  return leBtrMgrSoRet;
809 }
810 
811 
814  tBTRMgrSoHdl hBTRMgrSoHdl,
815  char* pcInBuf,
816  int aiInBufSize
817 ) {
818  eBTRMgrRet leBtrMgrSoRet = eBTRMgrSuccess;
819  stBTRMgrSOHdl* pstBtrMgrSoHdl = (stBTRMgrSOHdl*)hBTRMgrSoHdl;
820 
821 #ifdef USE_GST1
822  eBTRMgrSOGstRet leBtrMgrSoGstRet = eBTRMgrSOGstSuccess;
823 #endif
824 
825  if (pstBtrMgrSoHdl == NULL) {
826  return eBTRMgrNotInitialized;
827  }
828 
829  //TODO: Implement ping-pong/triple/circular buffering if needed
830 #ifdef USE_GST1
831  if ((leBtrMgrSoGstRet = BTRMgr_SO_GstSendBuffer(pstBtrMgrSoHdl->hBTRMgrSoGstHdl, pcInBuf, aiInBufSize)) != eBTRMgrSOGstSuccess) {
832  BTRMGRLOG_ERROR("Return Status = %d\n", leBtrMgrSoGstRet);
833  leBtrMgrSoRet = eBTRMgrFailure;
834  }
835 #else
836  // TODO: Implement Stream out functionality using generic libraries
837 #endif
838 
839  return leBtrMgrSoRet;
840 }
841 
842 
845  tBTRMgrSoHdl hBTRMgrSoHdl
846 ) {
847  eBTRMgrRet leBtrMgrSoRet = eBTRMgrSuccess;
848  stBTRMgrSOHdl* pstBtrMgrSoHdl = (stBTRMgrSOHdl*)hBTRMgrSoHdl;
849 
850 #ifdef USE_GST1
851  eBTRMgrSOGstRet leBtrMgrSoGstRet = eBTRMgrSOGstSuccess;
852 #endif
853 
854  if (pstBtrMgrSoHdl == NULL) {
855  return eBTRMgrNotInitialized;
856  }
857 
858 #ifdef USE_GST1
859  if ((leBtrMgrSoGstRet = BTRMgr_SO_GstSendEOS(pstBtrMgrSoHdl->hBTRMgrSoGstHdl)) != eBTRMgrSOGstSuccess) {
860  BTRMGRLOG_ERROR("Return Status = %d\n", leBtrMgrSoGstRet);
861  leBtrMgrSoRet = eBTRMgrFailure;
862  }
863 #else
864  // TODO: Implement Stream out functionality using generic libraries
865 #endif
866 
867  pstBtrMgrSoHdl->lstBtrMgrSoStatus.eBtrMgrState = eBTRMgrStateCompleted;
868 
869  return leBtrMgrSoRet;
870 }
871 
872 
873 // Outgoing callbacks Registration Interfaces
874 
875 
876 /* Incoming Callbacks Definitions */
877 #ifdef USE_GST1
878 static eBTRMgrSOGstRet
879 btrMgr_SO_GstStatusCb (
880  eBTRMgrSOGstStatus aeBtrMgrSoGstStatus,
881  void* apvUserData
882 ) {
883  stBTRMgrSOHdl* pstBtrMgrSoHdl = (stBTRMgrSOHdl*)apvUserData;
884  eBTRMgrRet leBtrMgrSoRet = eBTRMgrSuccess;
885  gboolean bTriggerCb = FALSE;
886 
887  if (pstBtrMgrSoHdl) {
888 
889  switch (aeBtrMgrSoGstStatus) {
890  case eBTRMgrSOGstStInitialized:
891  case eBTRMgrSOGstStDeInitialized:
892  case eBTRMgrSOGstStPaused:
893  case eBTRMgrSOGstStPlaying:
894  break;
895  case eBTRMgrSOGstStUnderflow:
896  pstBtrMgrSoHdl->lstBtrMgrSoStatus.ui32UnderFlowCnt++;
897  break;
898  case eBTRMgrSOGstStOverflow:
899  pstBtrMgrSoHdl->lstBtrMgrSoStatus.ui32OverFlowCnt++;
900  break;
901  case eBTRMgrSOGstStCompleted:
902  case eBTRMgrSOGstStStopped:
903  break;
904  case eBTRMgrSOGstStWarning:
905  pstBtrMgrSoHdl->lstBtrMgrSoStatus.eBtrMgrState = eBTRMgrStateWarning;
906  bTriggerCb = TRUE;
907  break;
908  case eBTRMgrSOGstStError:
909  pstBtrMgrSoHdl->lstBtrMgrSoStatus.eBtrMgrState = eBTRMgrStateError;
910  bTriggerCb = TRUE;
911  break;
912  case eBTRMgrSOGstStUnknown:
913  default:
914  pstBtrMgrSoHdl->lstBtrMgrSoStatus.eBtrMgrState = eBTRMgrStateUnknown;
915  break;
916  }
917 
918  //TODO: Move to a local static function, which, if possible, can trigger the callback in the context
919  // of a task thread.
920  if ((pstBtrMgrSoHdl->fpcBSoStatus) && (bTriggerCb == TRUE)) {
921  stBTRMgrMediaStatus lstBtrMgrSoMediaStatus;
922 
923  memcpy (&lstBtrMgrSoMediaStatus, &(pstBtrMgrSoHdl->lstBtrMgrSoStatus), sizeof(stBTRMgrMediaStatus));
924 
925  leBtrMgrSoRet = pstBtrMgrSoHdl->fpcBSoStatus(&lstBtrMgrSoMediaStatus, pstBtrMgrSoHdl->pvcBUserData);
926  BTRMGRLOG_TRACE("Return Status = %d\n", leBtrMgrSoRet);
927  }
928  }
929 
930  return eBTRMgrSOGstSuccess;
931 }
932 #endif
933 
_stBTRMgrSBCInfo::eBtrMgrSbcSFreq
eBTRMgrSFreq eBtrMgrSbcSFreq
frequency
Definition: btrMgr_mediaTypes.h:115
BTRMgr_SO_GstDeInit
eBTRMgrSOGstRet BTRMgr_SO_GstDeInit(tBTRMgrSoGstHdl hBTRMgrSoGstHdl)
This API performs the cleanup operations.
Definition: btrMgr_streamOutGst.c:463
_stBTRMgrSBCInfo
Represents the Subband coding (SBC) audio codec information.
Definition: btrMgr_mediaTypes.h:114
BTRMgr_SO_GstResume
eBTRMgrSOGstRet BTRMgr_SO_GstResume(tBTRMgrSoGstHdl hBTRMgrSoGstHdl)
This API resumes the current operation and listens to the events.
Definition: btrMgr_streamOutGst.c:796
BTRMgr_SO_GstSendEOS
eBTRMgrSOGstRet BTRMgr_SO_GstSendEOS(tBTRMgrSoGstHdl hBTRMgrSoGstHdl)
This API is used to push EOS(End of Stream) to the queue.
Definition: btrMgr_streamOutGst.c:1102
btrMgr_Types.h
BTRMgr_SO_SetMute
eBTRMgrRet BTRMgr_SO_SetMute(tBTRMgrSoHdl hBTRMgrSoHdl, gboolean Mute)
This API will set the Mute used by this interface.
Definition: btrMgr_streamOut.c:325
BTRMgr_SO_GetDefaultSettings
eBTRMgrRet BTRMgr_SO_GetDefaultSettings(tBTRMgrSoHdl hBTRMgrSoHdl)
This API is used to load the default settings used by this interface.
Definition: btrMgr_streamOut.c:160
btrMgr_mediaTypes.h
BTRMgr_SO_GstSetVolume
eBTRMgrSOGstRet BTRMgr_SO_GstSetVolume(tBTRMgrSoGstHdl hBTRMgrSoGstHdl, unsigned char ui8Volume)
This API Sets the volume of current operation and listens to the events.
Definition: btrMgr_streamOutGst.c:884
_stBTRMgrInASettings
Represents the audio input settings.
Definition: btrMgr_mediaTypes.h:142
_stBTRMgrSBCInfo::ui8SbcSubbands
unsigned char ui8SbcSubbands
subbands
Definition: btrMgr_mediaTypes.h:118
_stBTRMgrSBCInfo::ui16SbcBitrate
unsigned short ui16SbcBitrate
bitrate
Definition: btrMgr_mediaTypes.h:123
BTRMgr_SO_Pause
eBTRMgrRet BTRMgr_SO_Pause(tBTRMgrSoHdl hBTRMgrSoHdl)
This API uses BTRMgr_SO_GstPause() for pausing the current operation.
Definition: btrMgr_streamOut.c:753
_stBTRMgrSBCInfo::ui16SbcFrameLen
unsigned short ui16SbcFrameLen
frameLength
Definition: btrMgr_mediaTypes.h:122
_stBTRMgrSBCInfo::ui8SbcAllocMethod
unsigned char ui8SbcAllocMethod
allocation_method
Definition: btrMgr_mediaTypes.h:117
BTRMgr_SO_SetVolume
eBTRMgrRet BTRMgr_SO_SetVolume(tBTRMgrSoHdl hBTRMgrSoHdl, unsigned char ui8Volume)
This API will set the current volume used by this interface.
Definition: btrMgr_streamOut.c:277
BTRMgr_SO_GstGetMute
eBTRMgrSOGstRet BTRMgr_SO_GstGetMute(tBTRMgrSoGstHdl hBTRMgrSoGstHdl, gboolean *mute)
This API Gets the Mute of current operation and listens to the events.
Definition: btrMgr_streamOutGst.c:951
BTRMgr_SO_GstSetInputPaused
eBTRMgrSOGstRet BTRMgr_SO_GstSetInputPaused(tBTRMgrSoGstHdl hBTRMgrSoGstHdl, unsigned char ui8InputPaused)
This API Sets whether the input of current Buffers is Paused.
Definition: btrMgr_streamOutGst.c:828
BTRMgr_SO_Init
eBTRMgrRet BTRMgr_SO_Init(tBTRMgrSoHdl *phBTRMgrSoHdl, fPtr_BTRMgr_SO_StatusCb afpcBSoStatus, void *apvUserData)
This API invokes BTRMgr_SO_GstInit() and also set the state as initialized.
Definition: btrMgr_streamOut.c:77
BTRMgr_SO_Resume
eBTRMgrRet BTRMgr_SO_Resume(tBTRMgrSoHdl hBTRMgrSoHdl)
This API uses BTRMgr_SO_GstResume() to resume the status.
Definition: btrMgr_streamOut.c:783
_stBTRMgrMediaStatus
Represents the media file status.
Definition: btrMgr_mediaTypes.h:165
BTRMgr_SO_SendEOS
eBTRMgrRet BTRMgr_SO_SendEOS(tBTRMgrSoHdl hBTRMgrSoHdl)
This API is used to indicate the End of stream.
Definition: btrMgr_streamOut.c:844
_stBTRMgrSOHdl
Definition: btrMgr_streamOut.c:50
BTRMgr_SO_GstInit
eBTRMgrSOGstRet BTRMgr_SO_GstInit(tBTRMgrSoGstHdl *phBTRMgrSoGstHdl, fPtr_BTRMgr_SO_GstStatusCb afpcBSoGstStatus, void *apvUserData)
This API initializes the streaming interface.
Definition: btrMgr_streamOutGst.c:300
BTRMgr_SO_GetStatus
eBTRMgrRet BTRMgr_SO_GetStatus(tBTRMgrSoHdl hBTRMgrSoHdl, stBTRMgrMediaStatus *apstBtrMgrSoStatus)
This API fetches the media file status.
Definition: btrMgr_streamOut.c:200
_stBTRMgrOutASettings
Represents the audio output settings.
Definition: btrMgr_mediaTypes.h:153
btrMgr_streamOutGst.h
eBTRMgrSFreq
enum _eBTRMgrSFreq eBTRMgrSFreq
Represents the frequency supported.
eBTRMgrRet
enum _eBTRMgrRet eBTRMgrRet
Represents the bluetooth manager return values.
BTRMgr_SO_GstPause
eBTRMgrSOGstRet BTRMgr_SO_GstPause(tBTRMgrSoGstHdl hBTRMgrSoGstHdl)
This API pauses the current playback and listens to the events.
Definition: btrMgr_streamOutGst.c:764
eBTRMgrAChan
enum _eBTRMgrAChan eBTRMgrAChan
Represents the Audio channel supported.
BTRMgr_SO_Start
eBTRMgrRet BTRMgr_SO_Start(tBTRMgrSoHdl hBTRMgrSoHdl, stBTRMgrInASettings *apstBtrMgrSoInASettings, stBTRMgrOutASettings *apstBtrMgrSoOutASettings)
This API uses BTRMgr_SO_GstStart(), starts the pipeline.
Definition: btrMgr_streamOut.c:507
btrMgr_streamOut.h
BTRMgr_SO_GstGetVolume
eBTRMgrSOGstRet BTRMgr_SO_GstGetVolume(tBTRMgrSoGstHdl hBTRMgrSoGstHdl, unsigned char *ui8Volume)
This API Gets the volume of current operation and listens to the events.
Definition: btrMgr_streamOutGst.c:907
_stBTRMgrSBCInfo::ui8SbcMaxBitpool
unsigned char ui8SbcMaxBitpool
max_bitpool
Definition: btrMgr_mediaTypes.h:121
_stBTRMgrPCMInfo
Represents the PCM codec details.
Definition: btrMgr_mediaTypes.h:103
_stBTRMgrSBCInfo::ui8SbcBlockLength
unsigned char ui8SbcBlockLength
block_length
Definition: btrMgr_mediaTypes.h:119
BTRMgr_SO_Stop
eBTRMgrRet BTRMgr_SO_Stop(tBTRMgrSoHdl hBTRMgrSoHdl)
This API uses BTRMgr_SO_GstStop() for closing the pipeline.
Definition: btrMgr_streamOut.c:721
BTRMgr_SO_SetStatus
eBTRMgrRet BTRMgr_SO_SetStatus(tBTRMgrSoHdl hBTRMgrSoHdl, stBTRMgrMediaStatus *apstBtrMgrSoStatus)
This API will set the current settings used by this interface.
Definition: btrMgr_streamOut.c:221
_stBTRMgrSBCInfo::ui8SbcMinBitpool
unsigned char ui8SbcMinBitpool
min_bitpool
Definition: btrMgr_mediaTypes.h:120
BTRMgr_SO_GetEstimatedInABufSize
eBTRMgrRet BTRMgr_SO_GetEstimatedInABufSize(tBTRMgrSoHdl hBTRMgrSoHdl, stBTRMgrInASettings *apstBtrMgrSoInASettings, stBTRMgrOutASettings *apstBtrMgrSoOutASettings)
This API fetches the maximum transmission rate.
Definition: btrMgr_streamOut.c:368
_stBTRMgrSBCInfo::eBtrMgrSbcAChan
eBTRMgrAChan eBtrMgrSbcAChan
channel_mode
Definition: btrMgr_mediaTypes.h:116
BTRMgr_SO_GstStart
eBTRMgrSOGstRet BTRMgr_SO_GstStart(tBTRMgrSoGstHdl hBTRMgrSoGstHdl, int ai32InBufMaxSize, const char *apcInFmt, int ai32InRate, int ai32InChannels, int ai32OutRate, int ai32OutChannels, const char *apcOutChannelMode, unsigned char aui8SbcAllocMethod, unsigned char aui8SbcSubbands, unsigned char aui8SbcBlockLength, unsigned char aui8SbcMinBitpool, unsigned char aui8SbcMaxBitpool, int ai32BTDevFd, int ai32BTDevMTU)
This API starts the playback and listens to the events associated with it.
Definition: btrMgr_streamOutGst.c:547
BTRMgr_SO_GstSetMute
eBTRMgrSOGstRet BTRMgr_SO_GstSetMute(tBTRMgrSoGstHdl hBTRMgrSoGstHdl, gboolean mute)
This API Sets the Mute of current operation and listens to the events.
Definition: btrMgr_streamOutGst.c:930
BTRMgr_SO_SendBuffer
eBTRMgrRet BTRMgr_SO_SendBuffer(tBTRMgrSoHdl hBTRMgrSoHdl, char *pcInBuf, int aiInBufSize)
Invokes BTRMgr_SO_GstSendBuffer() to add the buffer to the queue.
Definition: btrMgr_streamOut.c:813
BTRMgr_SO_DeInit
eBTRMgrRet BTRMgr_SO_DeInit(tBTRMgrSoHdl hBTRMgrSoHdl)
This API invokes BTRMgr_SO_GstDeInit() for the deinitializations.
Definition: btrMgr_streamOut.c:125
BTRMgr_SO_GetCurrentSettings
eBTRMgrRet BTRMgr_SO_GetCurrentSettings(tBTRMgrSoHdl hBTRMgrSoHdl)
This API will fetch the current settings used by this interface.
Definition: btrMgr_streamOut.c:180
eBTRMgrSFmt
enum _eBTRMgrSFmt eBTRMgrSFmt
Represents the PCM bits supported.
BTRMgr_SO_GstStop
eBTRMgrSOGstRet BTRMgr_SO_GstStop(tBTRMgrSoGstHdl hBTRMgrSoGstHdl)
This API stops the current playback and sets the state as NULL.
Definition: btrMgr_streamOutGst.c:721
TRUE
#define TRUE
Defines for TRUE/FALSE/ENABLE flags.
Definition: wifi_common_hal.h:199
eBTRMgrState
enum _eBTRMgrState eBTRMgrState
Represents the status of media player.
BTRMgr_SO_GetVolume
eBTRMgrRet BTRMgr_SO_GetVolume(tBTRMgrSoHdl hBTRMgrSoHdl, unsigned char *ui8Volume)
This API will fetches the current volume used by this interface.
Definition: btrMgr_streamOut.c:298
BTRMgr_SO_GetMute
eBTRMgrRet BTRMgr_SO_GetMute(tBTRMgrSoHdl hBTRMgrSoHdl, gboolean *mute)
This API will fetches the Mute used by this interface.
Definition: btrMgr_streamOut.c:343
BTRMgr_SO_GstSendBuffer
eBTRMgrSOGstRet BTRMgr_SO_GstSendBuffer(tBTRMgrSoGstHdl hBTRMgrSoGstHdl, char *pcInBuf, int aiInBufSize)
This API pushes the buffer to the queue.
Definition: btrMgr_streamOutGst.c:974