if(control->handles[i].mode == AVSYS_AUDIO_MODE_OUTPUT ||
control->handles[i].mode == AVSYS_AUDIO_MODE_OUTPUT_CLOCK ||
control->handles[i].mode == AVSYS_AUDIO_MODE_OUTPUT_VIDEO ||
- control->handles[i].mode == AVSYS_AUDIO_MODE_OUTPUT_LOW_LATENCY ) {
+ control->handles[i].mode == AVSYS_AUDIO_MODE_OUTPUT_LOW_LATENCY ||
+ control->handles[i].mode == AVSYS_AUDIO_MODE_OUTPUT_DSP ) {
used_table[vol_conf_type] = 1;
}
else if(control->handles[i].mode == AVSYS_AUDIO_MODE_INPUT ||
mode = control->handles[i].mode;
if (mode != AVSYS_AUDIO_MODE_OUTPUT && mode != AVSYS_AUDIO_MODE_OUTPUT_CLOCK
&& mode != AVSYS_AUDIO_MODE_OUTPUT_VIDEO && mode != AVSYS_AUDIO_MODE_OUTPUT_LOW_LATENCY
- && mode != AVSYS_AUDIO_MODE_OUTPUT_AP_CALL) {
+ && mode != AVSYS_AUDIO_MODE_OUTPUT_AP_CALL && mode != AVSYS_AUDIO_MODE_OUTPUT_DSP) {
continue;
}
#define MEDIA_POLICY_AUTO "auto"
#define MEDIA_POLICY_PHONE "phone"
#define MEDIA_POLICY_ALL "all"
+#define MEDIA_ROLE_FILTER "filter"
int avsys_audio_pasimple_open_device(const int mode, const unsigned int format, const unsigned int channel, const unsigned int samplerate, avsys_audio_handle_t *handle, int policy)
{
s = pa_simple_new_proplist(NULL, "AVSYSTEM", PA_STREAM_PLAYBACK, NULL, "PLAYBACK", &ss, &channel_map, &attr, proplist, &err);
break;
+ case AVSYS_AUDIO_MODE_OUTPUT_DSP: /* audio dsp hw decoding case. */
+ avsys_info(AVAUDIO, ": set media role to filter\n");
+ pa_proplist_sets(proplist, PA_PROP_MEDIA_ROLE, MEDIA_ROLE_FILTER);
+
+ s = pa_simple_new_proplist(NULL, "AVSYSTEM", PA_STREAM_PLAYBACK, NULL, "DSP PLAYBACK", &ss, &channel_map, &attr, proplist, &err);
+ break;
+
case AVSYS_AUDIO_MODE_OUTPUT_LOW_LATENCY: /* This is special case for touch sound playback */
SET_PA_ATTR(PA_SIMPLE_PERIOD_TIME_FOR_LOW_LATENCY_MSEC,
MSEC_TO_SAMPLE(samplerate,period_time),
goto error;
}
- if (p->mode == AVSYS_AUDIO_MODE_OUTPUT || p->mode == AVSYS_AUDIO_MODE_OUTPUT_CLOCK ||
+ if (p->mode == AVSYS_AUDIO_MODE_OUTPUT || p->mode == AVSYS_AUDIO_MODE_OUTPUT_CLOCK || p->mode == AVSYS_AUDIO_MODE_OUTPUT_DSP ||
p->mode == AVSYS_AUDIO_MODE_OUTPUT_LOW_LATENCY || p->mode == AVSYS_AUDIO_MODE_OUTPUT_AP_CALL || p->mode == AVSYS_AUDIO_MODE_OUTPUT_VIDEO) {
/* set volume table */
err = avsys_audio_path_set_volume(handle);
case AVSYS_AUDIO_MODE_OUTPUT_LOW_LATENCY:
case AVSYS_AUDIO_MODE_OUTPUT_VIDEO:
case AVSYS_AUDIO_MODE_OUTPUT_AP_CALL:
+ case AVSYS_AUDIO_MODE_OUTPUT_DSP:
if (AVSYS_FAIL(avsys_audio_pasimple_set_volume(p, p->working_vol.level[AVSYS_AUDIO_CHANNEL_LEFT]))) {
avsys_error(AVAUDIO, "can not set volume in %s\n", __func__);
}
if (p->mode == AVSYS_AUDIO_MODE_OUTPUT || p->mode == AVSYS_AUDIO_MODE_OUTPUT_CLOCK
|| p->mode == AVSYS_AUDIO_MODE_OUTPUT_LOW_LATENCY || p->mode == AVSYS_AUDIO_MODE_OUTPUT_AP_CALL
- || p->mode == AVSYS_AUDIO_MODE_OUTPUT_VIDEO) {
+ || p->mode == AVSYS_AUDIO_MODE_OUTPUT_VIDEO || p->mode == AVSYS_AUDIO_MODE_OUTPUT_DSP) {
p->gain_setting.volume_config = volume_config;
/* update volume by type */
err = avsys_audio_handle_update_volume(p, p->gain_setting.volume_config);
AVSYS_AUDIO_MODE_OUTPUT_CLOCK, /**< Output mode of gst audio only mode */
AVSYS_AUDIO_MODE_OUTPUT_VIDEO, /**< Output mode of gst video mode */
AVSYS_AUDIO_MODE_OUTPUT_LOW_LATENCY, /**< Output mode for low latency play mode. typically for game */
+ AVSYS_AUDIO_MODE_OUTPUT_DSP, /**< Output mode for audio dsp hardware decoding */
AVSYS_AUDIO_MODE_INPUT, /**< Input mode of handle */
AVSYS_AUDIO_MODE_INPUT_HIGH_LATENCY, /**< Input mode for high latency capture mode. */
AVSYS_AUDIO_MODE_INPUT_LOW_LATENCY, /**< Input mode for low latency capture mode. typically for VoIP */