Example #1
0
void myosd_openSound(int rate,int stereo) {
	if( soundInit == 0 &&  myosd_sound_value!=-1)
	{
#ifdef ANDROID
		__android_log_print(ANDROID_LOG_DEBUG, "MAME4droid.so", "openSound rate:%d stereo:%d",rate,stereo);
#endif
	        if(sound_engine==1)
                {
 	           __android_log_print(ANDROID_LOG_DEBUG, "SOUND", "Open audioTrack");
                   if(openSound_callback!=NULL)
		     openSound_callback(rate,stereo);
                }
                else
                {
 	           __android_log_print(ANDROID_LOG_DEBUG, "SOUND", "Open openSL %d %d",myosd_sound_value,sound_frames);
                   p = opensl_open(myosd_sound_value,2,sound_frames);
                }

		soundInit = 1;
	}
}
audio_module_runner *ami_create(int version, int token, int index) {
  if (version != PATCHFIELD_PROTOCOL_VERSION) {
    LOGW("Protocol version mismatch.");
    return NULL;
  }
  audio_module_runner *amr = malloc(sizeof(audio_module_runner));
  if (amr) {
    amr->shm_fd = token;
    amr->shm_ptr = smi_map(token);
    smi_protect(amr->shm_ptr, get_protected_size());
    amr->index = index;
    amr->done = 0;
    amr->timed_out = 0;
    amr->process = NULL;
    amr->context = NULL;
    amr->launch_counter = 3;  // Make sure that this number stays current.

    audio_module *module = ami_get_audio_module(amr->shm_ptr, amr->index);
    // Clear barriers, just in case.
    sb_clobber(ami_get_barrier(amr->shm_ptr, module->report));
    sb_clobber(ami_get_barrier(amr->shm_ptr, module->wake));
    sb_clobber(ami_get_barrier(amr->shm_ptr, module->ready));

    OPENSL_STREAM *os = opensl_open(module->sample_rate, 0, 2,
        module->buffer_frames, launch_thread, amr);
    sb_clobber(&amr->launched);
    opensl_start(os);
    sb_wait(&amr->launched, NULL);
    opensl_close(os);

    struct sigaction act;
    act.sa_sigaction = signal_handler;
    act.sa_flags = SA_SIGINFO;
    sigfillset(&act.sa_mask);
    sigaction(AM_SIG_ALRM, &act, NULL);
  }
  return (audio_module_runner *) amr;
}