if (!sjsd->num_ports) {
message(GETTEXT("audio-jack: "
"no physical ports available."));
+ jack_client_close(client);
xfree(sjsd);
return NULL;
}
if (!sjsd->ports[i]) {
message(GETTEXT("audio-jack: "
"not enough ports available."));
+ jack_client_close(client);
xfree(sjsd);
return NULL;
}
sound_jack_data_t *sjd = NULL;
sound_jack_aj_data_t *sjsd = NULL;
int i;
+ int code = 1;
SOUND_UNPACK_MT(aj, device, ms, mss, lad, sjd, mtap);
}
JACK_DEBUG("SEMAPHORE WAIT: 0x%x@0x%x@0x%x\n",
- (unsigned int)sem, (unsigned int)sjsd, (unsigned int)aj);
+ (unsigned int)&(sjsd->sem),
+ (unsigned int)sjsd,
+ (unsigned int)aj);
SXE_SEMAPH_SYNCH(&(sjsd->sem));
-
+ code = 0;
/* close and shutdown */
finish:
JACK_DEBUG("finish.\n");
sjsd = NULL;
aj->state = MTSTATE_FINISHED;
+ audio_job_device_data(aj) = NULL;
SXE_MUTEX_UNLOCK(&aj->mtx);
- return 1;
+ return code;
}
\f
break;
case aj_start:
JACK_DEBUG_AJ("->start state\n");
+ aj->play_state = MTPSTATE_RUN;
break;
case aj_stop:
JACK_DEBUG_AJ("->stop state\n");
case no_audio_job_event_kinds:
default:
- JACK_CRITICAL("unknown event\n");
+ JACK_CRITICAL("unknown event %d\n", audio_job_event_kind(ev));
break;
}
free_audio_job_event(ev);
int curvol;
aj = userdata;
+ SXE_MUTEX_LOCK(&aj->mtx);
mss = aj->substream;
sjsd = audio_job_device_data(aj);
buffer = aj->buffer;
if ((curvol = aj->volume) != sjsd->volume) {
sjsd->fvol = (float)curvol / MEDIA_SAMPLE_VOLUME_NORM;
sjsd->volume = curvol;
- }
+ }
if (aj->ratetrafo != sjsd->ratetrafo) {
sjsd->ratetrafo = aj->ratetrafo;
case MTPSTATE_STOP:
case NUMBER_OF_MEDIA_THREAD_PLAY_STATES:
default:
- JACK_DEBUG_S("DRAIN.\n");
+ JACK_DEBUG_S("DRAIN. MTP state:%d\n", mtp);
SXE_SEMAPH_TRIGGER(&(sjsd->sem));
break;
}
+ SXE_MUTEX_UNLOCK(&aj->mtx);
return 0;
}