diff --git a/hairtunes.c b/hairtunes.c index 063438ab..28b49069 100644 --- a/hairtunes.c +++ b/hairtunes.c @@ -52,12 +52,9 @@ int debug = 0; #include "alac.h" -// default buffer size -#define BUFFER_FRAMES 320 // and how full it needs to be to begin (must be ready = 1; } - if (ab_buffering && buf_fill >= START_FILL) { + if (ab_buffering && buf_fill >= buffer_start_fill) { ab_buffering = 0; pthread_cond_signal(&ab_buffer_ready); } diff --git a/hairtunes.h b/hairtunes.h index 171c8d83..5b256ad4 100644 --- a/hairtunes.h +++ b/hairtunes.h @@ -2,4 +2,8 @@ #define _HAIRTUNES_H_ int hairtunes_init(char *pAeskey, char *pAesiv, char *pFmtpstr, int pCtrlPort, int pTimingPort, int pDataPort, char *pRtpHost, char*pPipeName, char *pLibaoDriver, char *pLibaoDeviceName, char *pLibaoDeviceId); + +// default buffer size +#define BUFFER_FRAMES 320 + #endif diff --git a/shairport.c b/shairport.c index 6a58b4b4..d7fca7e3 100644 --- a/shairport.c +++ b/shairport.c @@ -39,6 +39,7 @@ // TEMP int kCurrentLogLevel = LOG_INFO; +extern int buffer_start_fill; #ifdef _WIN32 #define DEVNULL "nul" @@ -94,6 +95,15 @@ int main(int argc, char **argv) { tPort = atoi(arg+14); } + else if(!strcmp(arg, "-b")) + { + buffer_start_fill = atoi(*++argv); + argc--; + } + else if(!strncmp(arg, "--buffer=", 9)) + { + buffer_start_fill = atoi(arg + 9); + } else if(!strcmp(arg, "-k")) { tUseKnownHWID = TRUE; @@ -126,6 +136,7 @@ int main(int argc, char **argv) slog(LOG_INFO, " -a, --apname=AirPort Sets Airport name\n"); slog(LOG_INFO, " -p, --password=secret Sets Password (not working)\n"); slog(LOG_INFO, " -o, --server_port=5000 Sets Port for Avahi/dns-sd\n"); + slog(LOG_INFO, " -b, --buffer=282 Sets Number of frames to buffer before beginning playback\n"); slog(LOG_INFO, " -d Daemon mode\n"); slog(LOG_INFO, " -q, --quiet Supresses all output.\n"); slog(LOG_INFO, " -v,-v2,-v3,-vv Various debugging levels\n"); @@ -134,6 +145,11 @@ int main(int argc, char **argv) } } + if ( buffer_start_fill < 30 || buffer_start_fill > BUFFER_FRAMES ) { + fprintf(stderr, "buffer value must be > 30 and < %d\n", BUFFER_FRAMES); + return(0); + } + if(tDaemonize) { int tPid = fork();