static int ao_opensl_get_parameter(ao_wrapper_t *ao, int cmd, unsigned long arg) { switch (cmd) { case DTP_AO_CMD_GET_LATENCY: *(int *)(arg) = ao_opensl_get_latency(ao); break; case DTP_AO_CMD_GET_LEVEL: *(int *)(arg) = ao_opensl_level(ao); break; case DTP_AO_CMD_GET_VOLUME: *(int *)(arg) = ao_opensl_get_volume(ao); break; } return 0; }
static int64_t ao_opensl_get_latency(dtaudio_output_t *aout) { int64_t latency; int ret = 0; int level = 0; aout_sys_t *sys = (aout_sys_t *) aout->ao_priv; #if 1 TimeGet(aout, &latency); if (latency == -1) return 0; latency = 9 * latency / 100; #else dtaudio_para_t *para = &aout->para; level = ao_opensl_level(aout); int sample_num; float pts_ratio = 0.0; pts_ratio = (double) 90000 / para->dst_samplerate; sample_num = level / bytesPerSample(aout); latency += (sample_num * pts_ratio); #endif //__android_log_print(ANDROID_LOG_DEBUG,TAG, "opensl latency, level:%d latency:%lld \n",level, latency); return latency; }