38 #include "btrMgr_logger.h"
51 fPtr_BTRMgr_SI_StatusCb fpcBSiStatus;
54 tBTRMgrSiGstHdl hBTRMgrSiGstHdl;
65 static eBTRMgrSIGstRet btrMgr_SI_GstStatusCb (eBTRMgrSIGstStatus aeBtrMgrSiGstStatus,
void* apvUserData);
76 tBTRMgrSiHdl* phBTRMgrSiHdl,
77 fPtr_BTRMgr_SI_StatusCb afpcBSiStatus,
84 eBTRMgrSIGstRet leBtrMgrSiGstRet = eBTRMgrSIGstSuccess;
88 BTRMGRLOG_ERROR (
"Unable to allocate memory\n");
89 return eBTRMgrInitFailure;
93 if ((leBtrMgrSiGstRet =
BTRMgr_SI_GstInit(&(pstBtrMgrSiHdl->hBTRMgrSiGstHdl), btrMgr_SI_GstStatusCb, pstBtrMgrSiHdl)) != eBTRMgrSIGstSuccess) {
94 BTRMGRLOG_ERROR(
"Return Status = %d\n", leBtrMgrSiGstRet);
95 leBtrMgrSiRet = eBTRMgrInitFailure;
101 if (leBtrMgrSiRet != eBTRMgrSuccess) {
103 return leBtrMgrSiRet;
106 pstBtrMgrSiHdl->lstBtrMgrSiStatus.eBtrMgrState = eBTRMgrStateInitialized;
107 pstBtrMgrSiHdl->lstBtrMgrSiStatus.eBtrMgrSFreq = eBTRMgrSFreq44_1K;
108 pstBtrMgrSiHdl->lstBtrMgrSiStatus.eBtrMgrSFmt = eBTRMgrSFmt16bit;
109 pstBtrMgrSiHdl->lstBtrMgrSiStatus.eBtrMgrAChan = eBTRMgrAChanStereo;
110 pstBtrMgrSiHdl->fpcBSiStatus = afpcBSiStatus;
111 pstBtrMgrSiHdl->pvcBUserData = apvUserData;
114 *phBTRMgrSiHdl = (tBTRMgrSiHdl)pstBtrMgrSiHdl;
116 return leBtrMgrSiRet;
122 tBTRMgrSiHdl hBTRMgrSiHdl
128 eBTRMgrSIGstRet leBtrMgrSiGstRet = eBTRMgrSIGstSuccess;
131 if (pstBtrMgrSiHdl == NULL) {
132 return eBTRMgrNotInitialized;
136 if ((leBtrMgrSiGstRet =
BTRMgr_SI_GstDeInit(pstBtrMgrSiHdl->hBTRMgrSiGstHdl)) != eBTRMgrSIGstSuccess) {
137 BTRMGRLOG_ERROR(
"Return Status = %d\n", leBtrMgrSiGstRet);
138 leBtrMgrSiRet = eBTRMgrFailure;
140 pstBtrMgrSiHdl->hBTRMgrSiGstHdl = NULL;
145 pstBtrMgrSiHdl->lstBtrMgrSiStatus.eBtrMgrState = eBTRMgrStateDeInitialized;
147 g_free((
void*)pstBtrMgrSiHdl);
148 pstBtrMgrSiHdl = NULL;
150 return leBtrMgrSiRet;
156 tBTRMgrSiHdl hBTRMgrSiHdl
162 eBTRMgrSIGstRet leBtrMgrSiGstRet = eBTRMgrSIGstSuccess;
163 (void)leBtrMgrSiGstRet;
166 if (pstBtrMgrSiHdl == NULL) {
167 return eBTRMgrNotInitialized;
170 return leBtrMgrSiRet;
176 tBTRMgrSiHdl hBTRMgrSiHdl
182 eBTRMgrSIGstRet leBtrMgrSiGstRet = eBTRMgrSIGstSuccess;
183 (void)leBtrMgrSiGstRet;
186 if (pstBtrMgrSiHdl == NULL) {
187 return eBTRMgrNotInitialized;
190 return leBtrMgrSiRet;
196 tBTRMgrSiHdl hBTRMgrSiHdl,
203 eBTRMgrSIGstRet leBtrMgrSiGstRet = eBTRMgrSIGstSuccess;
204 (void)leBtrMgrSiGstRet;
207 if (pstBtrMgrSiHdl == NULL) {
208 return eBTRMgrNotInitialized;
211 return leBtrMgrSiRet;
217 tBTRMgrSiHdl hBTRMgrSiHdl,
224 eBTRMgrSIGstRet leBtrMgrSiGstRet = eBTRMgrSIGstSuccess;
227 if (pstBtrMgrSiHdl == NULL) {
228 return eBTRMgrNotInitialized;
231 if (apstBtrMgrSiStatus == NULL) {
232 return eBTRMgrFailInArg;
237 if (apstBtrMgrSiStatus->eBtrMgrState != eBTRMgrStateUnknown) {
239 leBtrMgrSiRet = eBTRMgrFailure;
242 if (apstBtrMgrSiStatus->eBtrMgrSFreq != eBTRMgrSFreqUnknown) {
244 leBtrMgrSiRet = eBTRMgrFailure;
247 if (apstBtrMgrSiStatus->eBtrMgrSFmt != eBTRMgrSFmtUnknown) {
249 leBtrMgrSiRet = eBTRMgrFailure;
252 if (apstBtrMgrSiStatus->eBtrMgrAChan != eBTRMgrAChanUnknown) {
254 leBtrMgrSiRet = eBTRMgrFailure;
257 if (apstBtrMgrSiStatus->ui8Volume != 255) {
258 if ((leBtrMgrSiGstRet =
BTRMgr_SI_GstSetVolume(pstBtrMgrSiHdl->hBTRMgrSiGstHdl, apstBtrMgrSiStatus->ui8Volume)) != eBTRMgrSIGstSuccess) {
259 BTRMGRLOG_ERROR(
"Return Status = %d - Failed to set volume\n", leBtrMgrSiGstRet);
260 leBtrMgrSiRet = eBTRMgrFailure;
267 return leBtrMgrSiRet;
273 tBTRMgrSiHdl hBTRMgrSiHdl,
283 const char* lpcBtrMgrInSiAChanMode = NULL;
284 unsigned int lui32BtrMgrInSiAChan= 0;
285 unsigned int lui32BtrMgrInSiSFreq= 0;
287 unsigned char lui8SbcAllocMethod = 0;
288 unsigned char lui8SbcSubbands = 0;
289 unsigned char lui8SbcBlockLength = 0;
290 unsigned char lui8SbcMinBitpool = 0;
291 unsigned char lui8SbcMaxBitpool = 0;
293 unsigned char lui8MpegCrc = 0;
294 unsigned char lui8MpegLayer = 0;
295 unsigned char lui8MpegMpf = 0;
296 unsigned char lui8MpegRfa = 0;
297 unsigned short lui16MpegBitrate = 0;
300 eBTRMgrSIGstRet leBtrMgrSiGstRet = eBTRMgrSIGstSuccess;
301 const char* lpcAudioInType = NULL;
305 if (pstBtrMgrSiHdl == NULL) {
306 return eBTRMgrNotInitialized;
309 if ((apstBtrMgrSiInASettings == NULL) || (apstBtrMgrSiInASettings->pstBtrMgrInCodecInfo == NULL)) {
310 return eBTRMgrFailInArg;
314 if (apstBtrMgrSiInASettings->eBtrMgrInAType == eBTRMgrATypeSBC) {
325 lpcAudioInType = BTRMGR_AUDIO_INPUT_TYPE_SBC;
327 (void)lui8SbcAllocMethod;
328 (void)lui8SbcSubbands;
329 (void)lui8SbcBlockLength;
330 (void)lui8SbcMinBitpool;
331 (void)lui8SbcMaxBitpool;
333 else if (apstBtrMgrSiInASettings->eBtrMgrInAType == eBTRMgrATypeAAC) {
338 lui8MpegCrc = pstBtrMgrSiInAacInfo->
ui8MpegCrc;
340 lui8MpegMpf = pstBtrMgrSiInAacInfo->
ui8MpegMpf;
341 lui8MpegRfa = pstBtrMgrSiInAacInfo->
ui8MpegRfa;
344 lpcAudioInType = BTRMGR_AUDIO_INPUT_TYPE_AAC;
350 (void)lui16MpegBitrate;
354 switch (leBtrMgrSiInAChan) {
355 case eBTRMgrAChanMono:
356 lui32BtrMgrInSiAChan = 1;
357 lpcBtrMgrInSiAChanMode = BTRMGR_AUDIO_CHANNELMODE_MONO;
359 case eBTRMgrAChanDualChannel:
360 lui32BtrMgrInSiAChan = 2;
361 lpcBtrMgrInSiAChanMode = BTRMGR_AUDIO_CHANNELMODE_DUAL;
363 case eBTRMgrAChanStereo:
364 lui32BtrMgrInSiAChan = 2;
365 lpcBtrMgrInSiAChanMode = BTRMGR_AUDIO_CHANNELMODE_STEREO;
367 case eBTRMgrAChanJStereo:
368 lui32BtrMgrInSiAChan = 2;
369 lpcBtrMgrInSiAChanMode = BTRMGR_AUDIO_CHANNELMODE_JSTEREO;
371 case eBTRMgrAChan5_1:
372 lui32BtrMgrInSiAChan = 6;
374 case eBTRMgrAChan7_1:
375 lui32BtrMgrInSiAChan = 8;
377 case eBTRMgrAChanUnknown:
379 lui32BtrMgrInSiAChan = 2;
380 lpcBtrMgrInSiAChanMode = BTRMGR_AUDIO_CHANNELMODE_STEREO;
384 (void)lui32BtrMgrInSiAChan;
385 (void)lpcBtrMgrInSiAChanMode;
388 switch (leBtrMgrSiInSFreq) {
390 lui32BtrMgrInSiSFreq = 8000;
392 case eBTRMgrSFreq16K:
393 lui32BtrMgrInSiSFreq = 16000;
395 case eBTRMgrSFreq32K:
396 lui32BtrMgrInSiSFreq = 32000;
398 case eBTRMgrSFreq44_1K:
399 lui32BtrMgrInSiSFreq = 44100;
401 case eBTRMgrSFreq48K:
402 lui32BtrMgrInSiSFreq = 48000;
404 case eBTRMgrSFreqUnknown:
406 lui32BtrMgrInSiSFreq = 48000;
414 apstBtrMgrSiInASettings->i32BtrMgrDevFd,
415 apstBtrMgrSiInASettings->i32BtrMgrDevMtu,
416 lui32BtrMgrInSiSFreq,
417 lpcAudioInType)) != eBTRMgrSIGstSuccess) {
418 BTRMGRLOG_ERROR(
"Return Status = %d\n", leBtrMgrSiGstRet);
419 leBtrMgrSiRet = eBTRMgrFailure;
425 pstBtrMgrSiHdl->lstBtrMgrSiStatus.eBtrMgrState = eBTRMgrStatePlaying;
426 pstBtrMgrSiHdl->lstBtrMgrSiStatus.ui32OverFlowCnt = 0;
427 pstBtrMgrSiHdl->lstBtrMgrSiStatus.ui32UnderFlowCnt= 0;
429 return leBtrMgrSiRet;
435 tBTRMgrSiHdl hBTRMgrSiHdl
441 eBTRMgrSIGstRet leBtrMgrSiGstRet = eBTRMgrSIGstSuccess;
444 if (pstBtrMgrSiHdl == NULL) {
445 return eBTRMgrNotInitialized;
449 if ((leBtrMgrSiGstRet =
BTRMgr_SI_GstStop(pstBtrMgrSiHdl->hBTRMgrSiGstHdl)) != eBTRMgrSIGstSuccess) {
450 BTRMGRLOG_ERROR(
"Return Status = %d\n", leBtrMgrSiGstRet);
451 leBtrMgrSiRet = eBTRMgrFailure;
457 pstBtrMgrSiHdl->lstBtrMgrSiStatus.eBtrMgrState = eBTRMgrStateStopped;
458 pstBtrMgrSiHdl->lstBtrMgrSiStatus.ui32OverFlowCnt = 0;
459 pstBtrMgrSiHdl->lstBtrMgrSiStatus.ui32UnderFlowCnt= 0;
461 return leBtrMgrSiRet;
467 tBTRMgrSiHdl hBTRMgrSiHdl
473 eBTRMgrSIGstRet leBtrMgrSiGstRet = eBTRMgrSIGstSuccess;
476 if (pstBtrMgrSiHdl == NULL) {
477 return eBTRMgrNotInitialized;
481 if ((leBtrMgrSiGstRet =
BTRMgr_SI_GstPause(pstBtrMgrSiHdl->hBTRMgrSiGstHdl)) != eBTRMgrSIGstSuccess) {
482 BTRMGRLOG_ERROR(
"Return Status = %d\n", leBtrMgrSiGstRet);
483 leBtrMgrSiRet = eBTRMgrFailure;
489 pstBtrMgrSiHdl->lstBtrMgrSiStatus.eBtrMgrState = eBTRMgrStatePaused;
491 return leBtrMgrSiRet;
497 tBTRMgrSiHdl hBTRMgrSiHdl
503 eBTRMgrSIGstRet leBtrMgrSiGstRet = eBTRMgrSIGstSuccess;
506 if (pstBtrMgrSiHdl == NULL) {
507 return eBTRMgrNotInitialized;
511 if ((leBtrMgrSiGstRet =
BTRMgr_SI_GstResume(pstBtrMgrSiHdl->hBTRMgrSiGstHdl)) != eBTRMgrSIGstSuccess) {
512 BTRMGRLOG_ERROR(
"Return Status = %d\n", leBtrMgrSiGstRet);
513 leBtrMgrSiRet = eBTRMgrFailure;
519 pstBtrMgrSiHdl->lstBtrMgrSiStatus.eBtrMgrState = eBTRMgrStatePlaying;
521 return leBtrMgrSiRet;
527 tBTRMgrSiHdl hBTRMgrSiHdl,
535 eBTRMgrSIGstRet leBtrMgrSiGstRet = eBTRMgrSIGstSuccess;
538 if (pstBtrMgrSiHdl == NULL) {
539 return eBTRMgrNotInitialized;
544 if ((leBtrMgrSiGstRet =
BTRMgr_SI_GstSendBuffer(pstBtrMgrSiHdl->hBTRMgrSiGstHdl, pcInBuf, aiInBufSize)) != eBTRMgrSIGstSuccess) {
545 BTRMGRLOG_ERROR(
"Return Status = %d\n", leBtrMgrSiGstRet);
546 leBtrMgrSiRet = eBTRMgrFailure;
552 return leBtrMgrSiRet;
558 tBTRMgrSiHdl hBTRMgrSiHdl
564 eBTRMgrSIGstRet leBtrMgrSiGstRet = eBTRMgrSIGstSuccess;
567 if (pstBtrMgrSiHdl == NULL) {
568 return eBTRMgrNotInitialized;
572 if ((leBtrMgrSiGstRet =
BTRMgr_SI_GstSendEOS(pstBtrMgrSiHdl->hBTRMgrSiGstHdl)) != eBTRMgrSIGstSuccess) {
573 BTRMGRLOG_ERROR(
"Return Status = %d\n", leBtrMgrSiGstRet);
574 leBtrMgrSiRet = eBTRMgrFailure;
580 pstBtrMgrSiHdl->lstBtrMgrSiStatus.eBtrMgrState = eBTRMgrStateCompleted;
582 return leBtrMgrSiRet;
590 static eBTRMgrSIGstRet
591 btrMgr_SI_GstStatusCb (
592 eBTRMgrSIGstStatus aeBtrMgrSiGstStatus,
597 gboolean bTriggerCb = FALSE;
599 if (pstBtrMgrSiHdl) {
601 switch (aeBtrMgrSiGstStatus) {
602 case eBTRMgrSIGstStInitialized:
603 case eBTRMgrSIGstStDeInitialized:
604 case eBTRMgrSIGstStPaused:
605 case eBTRMgrSIGstStPlaying:
607 case eBTRMgrSIGstStUnderflow:
608 pstBtrMgrSiHdl->lstBtrMgrSiStatus.ui32UnderFlowCnt++;
610 case eBTRMgrSIGstStOverflow:
611 pstBtrMgrSiHdl->lstBtrMgrSiStatus.ui32OverFlowCnt++;
613 case eBTRMgrSIGstStCompleted:
614 case eBTRMgrSIGstStStopped:
616 case eBTRMgrSIGstStWarning:
617 pstBtrMgrSiHdl->lstBtrMgrSiStatus.eBtrMgrState = eBTRMgrStateWarning;
620 case eBTRMgrSIGstStError:
621 pstBtrMgrSiHdl->lstBtrMgrSiStatus.eBtrMgrState = eBTRMgrStateError;
624 case eBTRMgrSIGstStUnknown:
626 pstBtrMgrSiHdl->lstBtrMgrSiStatus.eBtrMgrState = eBTRMgrStateUnknown;
632 if ((pstBtrMgrSiHdl->fpcBSiStatus) && (bTriggerCb ==
TRUE)) {
635 memcpy (&lstBtrMgrSiMediaStatus, &(pstBtrMgrSiHdl->lstBtrMgrSiStatus),
sizeof(
stBTRMgrMediaStatus));
637 leBtrMgrSiRet = pstBtrMgrSiHdl->fpcBSiStatus(&lstBtrMgrSiMediaStatus, pstBtrMgrSiHdl->pvcBUserData);
638 BTRMGRLOG_TRACE(
"Return Status = %d\n", leBtrMgrSiRet);
642 return eBTRMgrSIGstSuccess;