mirror of https://github.com/odrling/Aegisub
Better error reporting
Originally committed to SVN as r1123.
This commit is contained in:
parent
e4051efbf0
commit
470f8d05c6
|
@ -129,6 +129,10 @@ public:
|
||||||
///////////////
|
///////////////
|
||||||
// Constructor
|
// Constructor
|
||||||
PulseAudioPlayer::PulseAudioPlayer()
|
PulseAudioPlayer::PulseAudioPlayer()
|
||||||
|
: context_notify(0, 1)
|
||||||
|
, context_success(0, 1)
|
||||||
|
, stream_notify(0, 1)
|
||||||
|
, stream_success(0, 1)
|
||||||
{
|
{
|
||||||
volume = 1.0f;
|
volume = 1.0f;
|
||||||
paerror = 0;
|
paerror = 0;
|
||||||
|
@ -219,7 +223,7 @@ void PulseAudioPlayer::OpenStream()
|
||||||
//printf("Connecting playback stream\n");
|
//printf("Connecting playback stream\n");
|
||||||
paerror = pa_stream_connect_playback(stream, NULL, NULL, PA_STREAM_INTERPOLATE_TIMING|PA_STREAM_NOT_MONOTONOUS|PA_STREAM_AUTO_TIMING_UPDATE, NULL, NULL);
|
paerror = pa_stream_connect_playback(stream, NULL, NULL, PA_STREAM_INTERPOLATE_TIMING|PA_STREAM_NOT_MONOTONOUS|PA_STREAM_AUTO_TIMING_UPDATE, NULL, NULL);
|
||||||
if (paerror) {
|
if (paerror) {
|
||||||
printf("PulseAudio reported error: %s\n", pa_strerror(paerror));
|
printf("PulseAudio reported error: %s (%d)\n", pa_strerror(paerror), paerror);
|
||||||
wxString s(pa_strerror(paerror), wxConvUTF8);
|
wxString s(pa_strerror(paerror), wxConvUTF8);
|
||||||
throw s.c_str();
|
throw s.c_str();
|
||||||
}
|
}
|
||||||
|
@ -228,7 +232,8 @@ void PulseAudioPlayer::OpenStream()
|
||||||
if (sstate == PA_STREAM_READY) {
|
if (sstate == PA_STREAM_READY) {
|
||||||
break;
|
break;
|
||||||
} else if (sstate == PA_STREAM_FAILED) {
|
} else if (sstate == PA_STREAM_FAILED) {
|
||||||
printf("Stream connection failed for some reason\n");
|
paerror = pa_context_errno(context);
|
||||||
|
printf("Stream connection failed: %s (%d)\n", pa_strerror(paerror), paerror);
|
||||||
throw _T("Something went wrong connecting the stream");
|
throw _T("Something went wrong connecting the stream");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -268,7 +273,19 @@ void PulseAudioPlayer::Play(__int64 start,__int64 count)
|
||||||
{
|
{
|
||||||
//printf("Starting PulseAudio playback\n");
|
//printf("Starting PulseAudio playback\n");
|
||||||
if (!open) OpenStream();
|
if (!open) OpenStream();
|
||||||
if (is_playing) Stop();
|
|
||||||
|
if (is_playing) {
|
||||||
|
// If we're already playing, do a quick "reset"
|
||||||
|
is_playing = false;
|
||||||
|
|
||||||
|
pa_operation *op = pa_stream_flush(stream, (pa_stream_success_cb_t)pa_stream_success, this);
|
||||||
|
stream_success.Wait();
|
||||||
|
pa_operation_unref(op);
|
||||||
|
if (!stream_success_val) {
|
||||||
|
paerror = pa_context_errno(context);
|
||||||
|
printf("Error flushing stream: %s (%d)\n", pa_strerror(paerror), paerror);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
start_frame = start;
|
start_frame = start;
|
||||||
cur_frame = start;
|
cur_frame = start;
|
||||||
|
@ -278,13 +295,20 @@ void PulseAudioPlayer::Play(__int64 start,__int64 count)
|
||||||
is_playing = true;
|
is_playing = true;
|
||||||
|
|
||||||
play_start_time = 0;
|
play_start_time = 0;
|
||||||
pa_stream_get_time(stream, &play_start_time);
|
paerror = pa_stream_get_time(stream, &play_start_time);
|
||||||
|
if (paerror) {
|
||||||
|
printf("Error getting stream time: %s (%d)\n", pa_strerror(paerror), paerror);
|
||||||
|
}
|
||||||
|
|
||||||
PulseAudioPlayer::pa_stream_write(stream, pa_stream_writable_size(stream), this);
|
PulseAudioPlayer::pa_stream_write(stream, pa_stream_writable_size(stream), this);
|
||||||
|
|
||||||
pa_operation *op = pa_stream_trigger(stream, (pa_stream_success_cb_t)pa_stream_success, this);
|
pa_operation *op = pa_stream_trigger(stream, (pa_stream_success_cb_t)pa_stream_success, this);
|
||||||
stream_success.Wait();
|
stream_success.Wait();
|
||||||
pa_operation_unref(op);
|
pa_operation_unref(op);
|
||||||
|
if (!stream_success_val) {
|
||||||
|
paerror = pa_context_errno(context);
|
||||||
|
printf("Error triggering stream: %s (%d)\n", pa_strerror(paerror), paerror);
|
||||||
|
}
|
||||||
|
|
||||||
// Update timer
|
// Update timer
|
||||||
if (displayTimer && !displayTimer->IsRunning()) displayTimer->Start(15);
|
if (displayTimer && !displayTimer->IsRunning()) displayTimer->Start(15);
|
||||||
|
@ -309,6 +333,10 @@ void PulseAudioPlayer::Stop(bool timerToo)
|
||||||
pa_operation *op = pa_stream_flush(stream, (pa_stream_success_cb_t)pa_stream_success, this);
|
pa_operation *op = pa_stream_flush(stream, (pa_stream_success_cb_t)pa_stream_success, this);
|
||||||
stream_success.Wait();
|
stream_success.Wait();
|
||||||
pa_operation_unref(op);
|
pa_operation_unref(op);
|
||||||
|
if (!stream_success_val) {
|
||||||
|
paerror = pa_context_errno(context);
|
||||||
|
printf("Error flushing stream: %s (%d)\n", pa_strerror(paerror), paerror);
|
||||||
|
}
|
||||||
|
|
||||||
// And unref it
|
// And unref it
|
||||||
//printf("Stopped stream\n\n");
|
//printf("Stopped stream\n\n");
|
||||||
|
|
Loading…
Reference in New Issue