summaryrefslogtreecommitdiffstats
path: root/libao2
diff options
context:
space:
mode:
authorUoti Urpala <uau@glyph.nonexistent.invalid>2008-09-03 10:16:30 +0300
committerUoti Urpala <uau@glyph.nonexistent.invalid>2008-09-03 10:16:30 +0300
commitb56858342fdbe48489618107df75e5bd0451eb0b (patch)
tree5d41ef858502bae99dcbebdd728d42a6040adb03 /libao2
parent8ea7eb77fc7ba8bd0b596ea32ee60909a012828f (diff)
parentbae94777d7ddaa2d4763507fdb93b9520327c9d1 (diff)
downloadmpv-b56858342fdbe48489618107df75e5bd0451eb0b.tar.bz2
mpv-b56858342fdbe48489618107df75e5bd0451eb0b.tar.xz
Merge svn changes up to r27514
Diffstat (limited to 'libao2')
-rw-r--r--libao2/ao_mpegpes.c20
-rw-r--r--libao2/ao_nas.c50
-rw-r--r--libao2/ao_oss.c2
3 files changed, 42 insertions, 30 deletions
diff --git a/libao2/ao_mpegpes.c b/libao2/ao_mpegpes.c
index c6c66cd5ff..583ca44cf5 100644
--- a/libao2/ao_mpegpes.c
+++ b/libao2/ao_mpegpes.c
@@ -10,8 +10,8 @@
#include "config.h"
-#ifdef HAVE_DVB
-#include <sys/poll.h>
+#ifdef CONFIG_DVB
+#include <poll.h>
#include <sys/ioctl.h>
#endif
@@ -25,8 +25,8 @@
#include "mp_msg.h"
#include "help_mp.h"
-#ifdef HAVE_DVB
-#ifndef HAVE_DVB_HEAD
+#ifdef CONFIG_DVB
+#ifndef CONFIG_DVB_HEAD
#include <ost/audio.h>
audioMixer_t dvb_mixer={255,255};
#else
@@ -45,7 +45,7 @@ int vo_mpegpes_fd2 = -1;
static ao_info_t info =
{
-#ifdef HAVE_DVB
+#ifdef CONFIG_DVB
"DVB audio output",
#else
"MPEG-PES audio output",
@@ -60,7 +60,7 @@ LIBAO_EXTERN(mpegpes)
// to set/get/query special features/parameters
static int control(int cmd,void *arg){
-#ifdef HAVE_DVB
+#ifdef CONFIG_DVB
switch(cmd){
case AOCONTROL_GET_VOLUME:
if(vo_mpegpes_fd2>=0){
@@ -92,11 +92,11 @@ static int control(int cmd,void *arg){
static int freq=0;
static int freq_id=0;
-#ifdef HAVE_DVB
+#ifdef CONFIG_DVB
static int init_device(int card)
{
char ao_file[30];
-#ifndef HAVE_DVB_HEAD
+#ifndef CONFIG_DVB_HEAD
mp_msg(MSGT_VO,MSGL_INFO, "Opening /dev/ost/audio\n");
sprintf(ao_file, "/dev/ost/audio");
#else
@@ -171,7 +171,7 @@ static int preinit(const char *arg)
}
card--;
-#ifdef HAVE_DVB
+#ifdef CONFIG_DVB
if(!ao_file)
return init_device(card);
#else
@@ -190,7 +190,7 @@ static int preinit(const char *arg)
static int my_ao_write(const unsigned char* data,int len){
int orig_len = len;
-#ifdef HAVE_DVB
+#ifdef CONFIG_DVB
#define NFD 1
struct pollfd pfd[NFD];
diff --git a/libao2/ao_nas.c b/libao2/ao_nas.c
index 4888cfc366..5428c7489f 100644
--- a/libao2/ao_nas.c
+++ b/libao2/ao_nas.c
@@ -41,6 +41,7 @@
#include "audio_out_internal.h"
#include "libaf/af_format.h"
+/* NAS_FRAG_SIZE must be a power-of-two value */
#define NAS_FRAG_SIZE 4096
static char *nas_event_types[] = {
@@ -116,8 +117,8 @@ struct ao_nas_data {
unsigned int state;
int expect_underrun;
- void *client_buffer;
- void *server_buffer;
+ char *client_buffer;
+ char *server_buffer;
unsigned int client_buffer_size;
unsigned int client_buffer_used;
unsigned int server_buffer_size;
@@ -139,7 +140,7 @@ static void nas_print_error(AuServer *aud, const char *prefix, AuStatus as)
mp_msg(MSGT_AO, MSGL_ERR, "ao_nas: %s: returned status %d (%s)\n", prefix, as, s);
}
-static int nas_readBuffer(struct ao_nas_data *nas_data, int num)
+static int nas_readBuffer(struct ao_nas_data *nas_data, unsigned int num)
{
AuStatus as;
@@ -187,7 +188,7 @@ static int nas_readBuffer(struct ao_nas_data *nas_data, int num)
return num;
}
-static int nas_writeBuffer(struct ao_nas_data *nas_data, void *data, int len)
+static int nas_writeBuffer(struct ao_nas_data *nas_data, void *data, unsigned int len)
{
pthread_mutex_lock(&nas_data->buffer_mutex);
mp_msg(MSGT_AO, MSGL_DBG2, "ao_nas: nas_writeBuffer(): len=%d client=%d/%d server=%d/%d\n",
@@ -260,7 +261,7 @@ static AuBool nas_event_handler(AuServer *aud, AuEvent *ev, AuEventHandlerRec *h
nas_state(event->prev_state),
nas_state(event->cur_state),
nas_reason(event->reason),
- event->num_bytes,
+ (int)event->num_bytes,
nas_data->expect_underrun);
if (event->num_bytes > INT_MAX) {
@@ -301,7 +302,7 @@ static AuBool nas_event_handler(AuServer *aud, AuEvent *ev, AuEventHandlerRec *h
}
mp_msg(MSGT_AO, MSGL_DBG2,
"ao_nas: Can't refill buffer, stopping flow.\n");
- AuStopFlow(nas_data->aud, nas_data->flow, NULL);
+ AuStopFlow(aud, nas_data->flow, NULL);
break;
default:
break;
@@ -361,7 +362,7 @@ static int control(int cmd, void *arg)
vol->right = (float)nas_data->gain/AU_FIXED_POINT_SCALE*50;
vol->left = vol->right;
- mp_msg(MSGT_AO, MSGL_DBG2, "ao_nas: AOCONTROL_GET_VOLUME: %08x\n", nas_data->gain);
+ mp_msg(MSGT_AO, MSGL_DBG2, "ao_nas: AOCONTROL_GET_VOLUME: %.2f\n", vol->right);
retval = CONTROL_OK;
break;
@@ -372,7 +373,7 @@ static int control(int cmd, void *arg)
* so i take the mean of both values.
*/
nas_data->gain = AU_FIXED_POINT_SCALE*((vol->left+vol->right)/2)/50;
- mp_msg(MSGT_AO, MSGL_DBG2, "ao_nas: AOCONTROL_SET_VOLUME: %08x\n", nas_data->gain);
+ mp_msg(MSGT_AO, MSGL_DBG2, "ao_nas: AOCONTROL_SET_VOLUME: %.2f\n", (vol->left+vol->right)/2);
aep.parameters[AuParmsMultiplyConstantConstant]=nas_data->gain;
aep.flow = nas_data->flow;
@@ -402,6 +403,8 @@ static int init(int rate,int channels,int format,int flags)
int buffer_size;
char *server;
+ (void)flags; /* shut up 'unused parameter' warning */
+
nas_data=malloc(sizeof(struct ao_nas_data));
memset(nas_data, 0, sizeof(struct ao_nas_data));
@@ -564,7 +567,7 @@ static int get_space(void)
// return: number of bytes played
static int play(void* data,int len,int flags)
{
- int maxbursts, playbursts, writelen;
+ int written, maxbursts = 0, playbursts = 0;
AuStatus as;
mp_msg(MSGT_AO, MSGL_DBG3,
@@ -574,18 +577,27 @@ static int play(void* data,int len,int flags)
if (len == 0)
return 0;
- pthread_mutex_lock(&nas_data->buffer_mutex);
- maxbursts = (nas_data->client_buffer_size -
- nas_data->client_buffer_used) / ao_data.outburst;
- playbursts = len / ao_data.outburst;
- writelen = (playbursts > maxbursts ? maxbursts : playbursts) *
- ao_data.outburst;
- pthread_mutex_unlock(&nas_data->buffer_mutex);
+ if (!(flags & AOPLAY_FINAL_CHUNK)) {
+ pthread_mutex_lock(&nas_data->buffer_mutex);
+ maxbursts = (nas_data->client_buffer_size -
+ nas_data->client_buffer_used) / ao_data.outburst;
+ playbursts = len / ao_data.outburst;
+ len = (playbursts > maxbursts ? maxbursts : playbursts) *
+ ao_data.outburst;
+ pthread_mutex_unlock(&nas_data->buffer_mutex);
+ }
- writelen = nas_writeBuffer(nas_data, data, writelen);
+ /*
+ * If AOPLAY_FINAL_CHUNK is set, we did not actually check len fits
+ * into the available buffer space, but mplayer.c shouldn't give us
+ * more to play than we report to it by get_space(), so this should be
+ * fine.
+ */
+ written = nas_writeBuffer(nas_data, data, len);
if (nas_data->state != AuStateStart &&
- maxbursts == playbursts) {
+ (maxbursts == playbursts ||
+ flags & AOPLAY_FINAL_CHUNK)) {
mp_msg(MSGT_AO, MSGL_DBG2, "ao_nas: play(): Starting flow.\n");
nas_data->expect_underrun = 1;
AuStartFlow(nas_data->aud, nas_data->flow, &as);
@@ -593,7 +605,7 @@ static int play(void* data,int len,int flags)
nas_print_error(nas_data->aud, "play(): AuStartFlow", as);
}
- return writelen;
+ return written;
}
// return: delay in seconds between first and last sample in buffer
diff --git a/libao2/ao_oss.c b/libao2/ao_oss.c
index b9939de8b7..ed70152077 100644
--- a/libao2/ao_oss.c
+++ b/libao2/ao_oss.c
@@ -166,7 +166,7 @@ static int control(int cmd,void *arg){
{
int format;
if (!ioctl(audio_fd, SNDCTL_DSP_GETFMTS, &format))
- if (format & (int)arg)
+ if ((unsigned int)format & (unsigned long)arg)
return CONTROL_TRUE;
return CONTROL_FALSE;
}