📄 av_stream_control.c
字号:
/****************************************************************************
Copyright (C) Cambridge Silicon Radio Ltd. 2004-2006
Part of BlueLab 3.6.2-release
FILE NAME
av_stream_control.c
DESCRIPTION
Handles the actual AV streaming on Kalimba.
*/
/****************************************************************************
Header files
*/
#include "headset_private.h"
#include "av_stream_control.h"
#include "avrcp_handler.h"
#include "headset_codec.h"
#include "headset_common.h"
#include "headset_power.h"
#include "headset_tones.h"
#include "headset_volume.h"
#include <codec.h>
#include <file.h>
#include <kalimba.h>
#include <kalimba_standard_messages.h>
#include <panic.h>
#include <pcm.h>
#include <stdlib.h>
#include <string.h>
#include <transform.h>
#ifdef DEBUG_AVSTREAM
#define AVSTREAM_DEBUG(x) DEBUG(x)
#else
#define AVSTREAM_DEBUG(x)
#endif
/**************************************************************************/
void avHeadsetConnectKalimbaToPcm(a2dp_channel_mode chn_mode)
{
/* is it mono playback? */
if (chn_mode == a2dp_mono)
{
AVSTREAM_DEBUG(("AV: Mono\n"));
/* plug port 0 into both DACs */
(void) PanicFalse(StreamConnect(StreamKalimbaSource(0),StreamPcmSink(0)));
}
else
{
AVSTREAM_DEBUG(("AV: Stereo\n"));
/* plug port 0 into Left DAC */
(void) PanicFalse(StreamConnect(StreamKalimbaSource(0),StreamPcmSink(0)));
/* plug port 1 into Right DAC */
(void) PanicFalse(StreamConnect(StreamKalimbaSource(1),StreamPcmSink(1)));
}
}
/**************************************************************************/
void avHeadsetStartKalimba(headsetTaskData* app)
{
AVSTREAM_DEBUG(("AV: Start Kalimba\n"));
/* Start decode */
A2dpAudioCodecEnable(app->a2dp, app->media_sink);
app->av_stream_connected = TRUE;
avHeadsetConnectKalimbaToPcm(app->channel_mode);
/* Start decode */
if(!KalimbaSendMessage(KALIMBA_MSG_GO,0,0,0,0))
{
AVSTREAM_DEBUG(("AV: Message KALIMBA_MSG_GO failed!\n"));
Panic();
}
app->active_profile = av_active;
app->av_stream_stopped = FALSE;
}
/**************************************************************************/
void avHeadsetAvStreamStop(headsetTaskData* app, bool send_suspend)
{
if (app->av_stream_stopped || !app->media_sink)
return;
AVSTREAM_DEBUG(("AV: Stream Stop...\n"));
if (app->channel_mode == a2dp_mono)
{
AVSTREAM_DEBUG(("AV: Mono\n"));
/* plug port 0 into both DACs */
StreamDisconnect(StreamKalimbaSource(0),StreamPcmSink(0));
}
else
{
AVSTREAM_DEBUG(("AV: Stereo\n"));
/* disconnect port 0 from Left DAC */
StreamDisconnect(StreamKalimbaSource(0),StreamPcmSink(0));
/* Disconnect port 1 from Right DAC */
StreamDisconnect(StreamKalimbaSource(1),StreamPcmSink(1));
}
StreamDisconnect(StreamPcmSource(0),StreamKalimbaSink(0));
StreamDisconnect(StreamPcmSource(1),StreamKalimbaSink(1));
/* Stop decode */
A2dpAudioCodecDisable(app->a2dp, app->media_sink);
app->av_stream_connected = FALSE;
if (send_suspend)
{
A2dpSuspend(app->a2dp, app->media_sink);
if (!headsetIsA2dpSourceAnAg(app))
{
avHeadsetSendPause(app);
}
}
app->av_stream_stopped = TRUE;
headsetPowerAmp (app , FALSE ) ;
}
/**************************************************************************/
void avHeadsetAvStreamStart(headsetTaskData* app)
{
if (!app->av_stream_stopped || !app->media_sink || app->sco_sink)
return;
AVSTREAM_DEBUG(("AV: Stream Start...\n"));
/* Set the local volume to mute */
headsetUpdateVolume(app->codec_task, 0);
/* Make sure amp is powered on */
headsetPowerAmp(app, TRUE);
/* Configure the DACs for the codec configuration */
codec_configure_AvStream(app);
if (app->sent_suspend)
{
A2dpStart(app->a2dp, app->media_sink);
if (!headsetIsA2dpSourceAnAg(app))
{
avHeadsetSendPlay(app);
}
app->sent_suspend = FALSE;
}
else
avHeadsetStartKalimba(app);
/* Set the local volume back to what it was */
headsetUpdateVolume(app->codec_task, app->speaker_volume.av_volume);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -