summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--audio/mserv/Makefile5
-rw-r--r--audio/mserv/distinfo4
-rw-r--r--audio/mserv/patches/patch-ae148
3 files changed, 147 insertions, 10 deletions
diff --git a/audio/mserv/Makefile b/audio/mserv/Makefile
index f6ac95f5a12..91e9e5e135e 100644
--- a/audio/mserv/Makefile
+++ b/audio/mserv/Makefile
@@ -1,8 +1,8 @@
-# $NetBSD: Makefile,v 1.33 2009/05/19 06:54:51 abs Exp $
+# $NetBSD: Makefile,v 1.34 2009/09/26 21:16:57 martin Exp $
#
DISTNAME= mserv-0.35
-PKGREVISION= 12
+PKGREVISION= 13
CATEGORIES= audio
MASTER_SITES= http://www.mserv.org/download/
@@ -14,6 +14,7 @@ PKG_INSTALLATION_TYPES= overwrite pkgviews
GNU_CONFIGURE= yes
CONFIGURE_ARGS+= --datadir=${PREFIX}/share/mserv
+CONFIGURE_ENV+= COPTS="-g"
CONFIGURE_ENV+= MY_LIBS="-lvorbisfile -lvorbis"
USE_LIBTOOL= yes
USE_TOOLS+= perl:run
diff --git a/audio/mserv/distinfo b/audio/mserv/distinfo
index 6190b329ea1..0f0d800b156 100644
--- a/audio/mserv/distinfo
+++ b/audio/mserv/distinfo
@@ -1,4 +1,4 @@
-$NetBSD: distinfo,v 1.18 2005/02/23 20:39:49 agc Exp $
+$NetBSD: distinfo,v 1.19 2009/09/26 21:16:58 martin Exp $
SHA1 (mserv-0.35.tar.gz) = 850835946e4d5a0deccdd22a18f30170c0a7b57c
RMD160 (mserv-0.35.tar.gz) = 0665c1b1807da675486b58013715b737b8de606e
@@ -7,7 +7,7 @@ SHA1 (patch-aa) = 3756e6b338ad8501daa258237868e9ef2d96cb49
SHA1 (patch-ab) = 91d6840eae30182343db97d3f67d23d0c423dbe7
SHA1 (patch-ac) = 068b14b4a8a0ce4dcb19e0cd28fc6a7296f86dad
SHA1 (patch-ad) = 105edf313c2101f0961aab8a94022a5a0d07eb22
-SHA1 (patch-ae) = 559f2ecf11bcd25b5ea3423dff4b1a4bf4066b78
+SHA1 (patch-ae) = c46482ba78594d4fc22262c540d7356e1b651c0e
SHA1 (patch-af) = d92f0bf56a04cf3b2f7001c4f68c1bb1b5ea007f
SHA1 (patch-ag) = 7d5fae48c89db4b9bdccf371528c3b3e890455a9
SHA1 (patch-ah) = c089ae56f23c83291a1e9b5502b952cd58be4860
diff --git a/audio/mserv/patches/patch-ae b/audio/mserv/patches/patch-ae
index 901d5664b02..57a54bdea19 100644
--- a/audio/mserv/patches/patch-ae
+++ b/audio/mserv/patches/patch-ae
@@ -1,16 +1,26 @@
-$NetBSD: patch-ae,v 1.8 2004/02/20 00:41:16 abs Exp $
+$NetBSD: patch-ae,v 1.9 2009/09/26 21:16:58 martin Exp $
---- mserv/mp3info.c.orig Thu Feb 19 17:46:03 2004
-+++ mserv/mp3info.c
-@@ -27,6 +27,7 @@
+--- mserv/mp3info.c.orig 2003-07-29 02:17:48.000000000 +0200
++++ mserv/mp3info.c 2009-09-26 22:11:43.000000000 +0200
+@@ -26,7 +26,17 @@
+ #define h_id(val) ((val>>19)&1)
#define h_thing(val) ((val>>20)&0xfff)
++#ifdef STANDALONE
++#define VERBOSE
++#endif
++#ifdef VERBOSE
++#define LOGF(ARG) printf ARG
++#else
++#define LOGF(ARG)
++#endif
++
#define ID3V2HEADERLEN 10
+#define min(x,y) ((x)<(y)?(x):(y))
/* mp3 bit rate and sampling frequency tables */
-@@ -45,12 +46,14 @@ const int sampling_freq_table[2][3] =
+@@ -45,12 +55,14 @@ const int sampling_freq_table[2][3] =
/* structure of id3 tag in mp3 file */
typedef struct id3tag_disc_str
@@ -31,7 +41,100 @@ $NetBSD: patch-ae,v 1.8 2004/02/20 00:41:16 abs Exp $
unsigned char genre;
} id3tag_disc;
-@@ -312,38 +315,44 @@ int mserv_mp3info_readlen(const char *fn
+@@ -228,11 +240,28 @@ static int read_id3v2_frame(FILE *f, id3
+ if (fread(frame->data, 1, frame->datalen, f) != frame->datalen)
+ return -1;
+ if (frame->frameid[0] == 'T' && memcmp(frame->frameid + 1, "XXX", 3)) {
+- frame->data[frame->datalen] = 0;
+- if (frame->data[0] == 0) /* Only handle non unicode */
++ if (frame->data[0] == 0) {
++ /* ISO8859-1 */
++ frame->data[frame->datalen] = 0;
+ strcpy(frame->data, frame->data + 1);
+- else
+- frame->data[0] = 0;
++ } else if (frame->data[0] == 1 && frame->datalen >= 5) {
++ /* unicode, convert as long as it is 8 bit only */
++ int d = 0, i = 1, off0 = 0, off1 = 1;
++ /* check BOM vs. endianess */
++ if ((unsigned char)frame->data[i] == 0xff && (unsigned char)frame->data[i+1] == 0xfe) {
++ off0 = 1; off1 = 0;
++ } else if ((unsigned char)frame->data[i] == 0xfe && (unsigned char)frame->data[i+1] == 0xff) {
++ off1 = 1; off0 = 0;
++ } else {
++ return -1;
++ }
++ for (i=3; (i+1) < frame->datalen /* && frame->data[i] == 0 */; i+=2) {
++ frame->data[d++] = frame->data[i+off1];
++ if (frame->data[i] == 0 && frame->data[i+1] == 0)
++ break;
++ }
++ frame->data[d] = 0;
++ }
+ }
+ return 0;
+ }
+@@ -264,12 +293,12 @@ int mserv_mp3info_readlen(const char *fn
+ {
+ FILE *f;
+ int bitrate, fs, length, headerlen;
+- long int filelen;
++ long int filelen, skipped;
+ float mean_frame_size;
+ char tag[3];
+ unsigned char data[4];
+ unsigned long int flags;
+- int errnok;
++ int errnok, found;
+ char *e;
+
+ if (id3tag)
+@@ -281,15 +310,39 @@ int mserv_mp3info_readlen(const char *fn
+ if ((headerlen = mp3_id3v2head(f)) == -1)
+ goto error;
+
+- if (fseek(f, headerlen, SEEK_SET) == -1 || fread(&data, 4, 1, f) != 1)
++ if (fseek(f, headerlen, SEEK_SET) == -1 || fread(&data[0], 1, 1, f) != 1) {
++ LOGF(("%s: can't read after headerlen %d\n", fname, headerlen));
+ goto error;
++ }
+
+- /* endian independent to 32-bit flags */
+- flags = (data[0]<<24)+(data[1]<<16)+(data[2]<<8)+data[3];
+- if (!is_mp3(flags)) {
+- errno = EDOM;
++ found = skipped = 0;
++ for (;;) {
++ while (data[0] != 0xff) {
++ /* skip junk at beginning or after header - happens quite often */
++ if (fread(&data[0], 1, 1, f) != 1)
++ goto error;
++ skipped++;
++ if (headerlen < 1 && skipped > 4096)
++ break; /* we are not sure this even is a mp3 file */
++ }
++ if (fread(&data[1], 1, 3, f) != 3)
++ goto error;
++
++ /* endian independent to 32-bit flags */
++ flags = (data[0]<<24)+(data[1]<<16)+(data[2]<<8)+data[3];
++ if (is_mp3(flags)) {
++ found = 1;
++ break;
++ }
++ if (headerlen < 1 && skipped > 4096)
++ break; /* we are not sure this even is a mp3 file */
++ }
++ if (!found) {
++ LOGF(("%s: no header found within 4k\n", fname));
+ goto error;
+ }
++ if (skipped)
++ LOGF(("%s: skipped %ld bytes\n", fname, skipped));
+
+ bitrate = bitrate_table[h_id(flags)][3-h_layer(flags)]
+ [h_bitrate_index(flags)];
+@@ -312,38 +365,44 @@ int mserv_mp3info_readlen(const char *fn
if (id3tag)
{
id3tag_disc tag_disc;
@@ -86,3 +189,36 @@ $NetBSD: patch-ae,v 1.8 2004/02/20 00:41:16 abs Exp $
e = id3tag->comment + strlen(id3tag->comment);
while (e > id3tag->comment && *(e-1) == ' ')
*--e = '\0';
+@@ -395,3 +454,32 @@ int mserv_mp3info_readlen(const char *fn
+ errno = errnok;
+ return -1;
+ }
++
++#ifdef STANDALONE
++int main(int argc, char **argv)
++{
++ t_id3tag tag;
++ int bitrate, len;
++
++ if (argc < 2) {
++ printf("usage: minfo (filename)\n");
++ return 1;
++ }
++ len = mserv_mp3info_readlen(argv[1], &bitrate, &tag);
++ if (len < 0) {
++ printf("no mp3 found\n");
++ } else {
++ if (bitrate)
++ printf("bitrate %d kbit/s, estimated length "
++ "%d:%02d.%02d s\n",
++ bitrate, len/6000, (len%6000)/100, len%100);
++ if (tag.present) {
++ printf("title: %s\n", tag.title);
++ printf("album: %s\n", tag.album);
++ printf("artist: %s\n", tag.artist);
++ printf("year: %s\n", tag.year);
++ }
++ }
++ return 0;
++}
++#endif