ce3be8b79d
- Fixed some bugs which caused xine to segfault under certain conditions, and a long-standing issue that would make xine hang with the NPTL implementation in Linux kernel 2.6. - Stabilized core engine and much improved subtitles. - Built-in VCD navigation, XvMC support and better handling of funny filenames. - A security hole regarding the "#save" MRL option has been closed. - Added a feature: append "#save:filename" to an MRL to save the stream during playback. - Lots of bugfixes.
118 lines
2.7 KiB
Text
118 lines
2.7 KiB
Text
$NetBSD: patch-ac,v 1.2 2004/03/11 17:26:02 jmmv Exp $
|
|
|
|
--- src/audio_out/audio_sun_out.c.orig 2003-12-14 23:13:22.000000000 +0100
|
|
+++ src/audio_out/audio_sun_out.c
|
|
@@ -41,6 +41,11 @@
|
|
#ifdef __svr4__
|
|
#include <stropts.h>
|
|
#endif
|
|
+#include <sys/param.h>
|
|
+
|
|
+#if (defined(BSD) && BSD >= 199306)
|
|
+typedef unsigned uint_t;
|
|
+#endif
|
|
|
|
#include "xine_internal.h"
|
|
#include "xineutils.h"
|
|
@@ -89,7 +94,9 @@ typedef struct sun_driver_s {
|
|
uint32_t num_channels;
|
|
int bytes_per_frame;
|
|
|
|
+#ifndef __NetBSD__
|
|
uint32_t frames_in_buffer; /* number of frames writen to audio hardware */
|
|
+#endif
|
|
|
|
enum {
|
|
RTSC_UNKNOWN = 0,
|
|
@@ -113,12 +120,14 @@ typedef struct sun_driver_s {
|
|
unsigned buf_len;
|
|
#endif
|
|
|
|
+#ifndef __NetBSD__
|
|
#if SW_SAMPLE_COUNT
|
|
struct timeval tv0;
|
|
uint_t sample0;
|
|
#endif
|
|
|
|
uint_t last_samplecnt;
|
|
+#endif
|
|
} sun_driver_t;
|
|
|
|
|
|
@@ -128,6 +137,7 @@ typedef struct sun_driver_s {
|
|
*/
|
|
static int realtime_samplecounter_available(xine_t *xine, char *dev)
|
|
{
|
|
+#ifndef __NetBSD__
|
|
int fd = -1;
|
|
audio_info_t info;
|
|
int rtsc_ok = RTSC_DISABLED;
|
|
@@ -246,6 +256,9 @@ error:
|
|
}
|
|
|
|
return rtsc_ok;
|
|
+#else
|
|
+ return RTSC_ENABLED;
|
|
+#endif
|
|
}
|
|
|
|
|
|
@@ -429,7 +442,9 @@ static int ao_sun_open(ao_driver_t *this
|
|
|
|
this->mode = mode;
|
|
this->input_sample_rate = rate;
|
|
+#ifndef __NetBSD__
|
|
this->frames_in_buffer = 0;
|
|
+#endif
|
|
|
|
/*
|
|
* open audio device
|
|
@@ -461,6 +476,9 @@ static int ao_sun_open(ao_driver_t *this
|
|
info.play.sample_rate = this->input_sample_rate;
|
|
info.play.eof = 0;
|
|
info.play.samples = 0;
|
|
+#ifdef __NetBSD__
|
|
+ info.blocksize = 1024;
|
|
+#endif
|
|
|
|
this->convert_u8_s8 = 0;
|
|
|
|
@@ -522,7 +540,9 @@ static int ao_sun_open(ao_driver_t *this
|
|
return 0;
|
|
}
|
|
|
|
+#ifndef __NetBSD__
|
|
this->last_samplecnt = 0;
|
|
+#endif
|
|
|
|
this->output_sample_rate = info.play.sample_rate;
|
|
this->num_channels = info.play.channels;
|
|
@@ -563,6 +583,7 @@ static int ao_sun_delay(ao_driver_t *thi
|
|
sun_driver_t *this = (sun_driver_t *) this_gen;
|
|
audio_info_t info;
|
|
|
|
+#ifndef __NetBSD__
|
|
if (ioctl(this->audio_fd, AUDIO_GETINFO, &info) == 0 &&
|
|
(this->frames_in_buffer == 0 || info.play.samples > 0)) {
|
|
|
|
@@ -609,6 +630,10 @@ static int ao_sun_delay(ao_driver_t *thi
|
|
}
|
|
#endif
|
|
}
|
|
+#else
|
|
+ if (ioctl(this->audio_fd, AUDIO_GETINFO, &info) == 0)
|
|
+ return info.play.seek / this->bytes_per_frame;
|
|
+#endif
|
|
return NOT_REAL_TIME;
|
|
}
|
|
|
|
@@ -717,7 +742,9 @@ static int ao_sun_write(ao_driver_t *thi
|
|
if (num_written > 0) {
|
|
int buffered_samples;
|
|
|
|
+#ifndef __NetBSD__
|
|
this->frames_in_buffer += num_written / this->bytes_per_frame;
|
|
+#endif
|
|
|
|
/*
|
|
* Avoid storing too much data in the sound driver's buffers.
|