chiark / gitweb /
Use hands-off reader in MP3 decoding.
authorRichard Kettlewell <richard@kakajou.wlan.anjou.terraraq.org.uk>
Sun, 6 Jun 2010 18:09:53 +0000 (19:09 +0100)
committerRichard Kettlewell <richard@kakajou.wlan.anjou.terraraq.org.uk>
Sun, 6 Jun 2010 18:09:53 +0000 (19:09 +0100)
lib/hreader.c
lib/hreader.h
server/decode.c

index 6390d693049ceef5d9b50388671b417a30e691a5..597337519e8d6e647be0be54f0e184fe38bb08db 100644 (file)
@@ -60,6 +60,7 @@ int hreader_fill(struct hreader *h) {
   if(n < 0)
     return -1;
   h->bytes = n;
+  h->offset += n;
   return n;
 }
 
index ac56b2c8f9a2cc6ce8abff046a537b940b849e86..1eadc5574b5610d699d683dce851d9b62baabcce 100644 (file)
@@ -67,7 +67,6 @@ void hreader_consume(struct hreader *h, size_t n);
 
 #endif /* HREADER_H */
 
-
 /*
 Local Variables:
 c-basic-offset:2
index 11a05928038f86658dd8a2ef129493eee7246bc2..17248768ed9e144de4d4f97d07851df6e7ff63b1 100644 (file)
@@ -20,6 +20,7 @@
  */
 
 #include "disorder-server.h"
+#include "hreader.h"
 
 #include <mad.h>
 #include <vorbis/vorbisfile.h>
@@ -45,8 +46,7 @@ struct decoder {
   void (*decode)(void);
 };
 
-/** @brief Input file */
-static int inputfd;
+static struct hreader input[1];
 
 /** @brief Output file */
 static FILE *outputfp;
@@ -239,7 +239,9 @@ static enum mad_flow mp3_input(void attribute((unused)) *data,
     remain = 0;
   }
   /* Read new data */
-  n = read(inputfd, input_buffer + remain, (sizeof input_buffer) - remain);
+  n = hreader_read(input,
+                   input_buffer + remain, 
+                   (sizeof input_buffer) - remain);
   if(n < 0)
     disorder_fatal(errno, "reading from %s", path);
   /* Compute total number of bytes available */
@@ -267,8 +269,7 @@ static enum mad_flow mp3_error(void attribute((unused)) *data,
 static void decode_mp3(void) {
   struct mad_decoder mad[1];
 
-  if((inputfd = open(path, O_RDONLY)) < 0)
-    disorder_fatal(errno, "opening %s", path);
+  hreader_init(path, input);
   mad_decoder_init(mad, 0/*data*/, mp3_input, 0/*header*/, 0/*filter*/,
                   mp3_output, mp3_error, 0/*message*/);
   if(mad_decoder_run(mad, MAD_DECODER_MODE_SYNC))