Merge commit 'fml/master'
authorAndre Noll <maan@systemlinux.org>
Fri, 28 Nov 2008 21:29:43 +0000 (22:29 +0100)
committerAndre Noll <maan@systemlinux.org>
Fri, 28 Nov 2008 21:29:43 +0000 (22:29 +0100)
afh.c
afh_common.c
oggdec.c
write.h

diff --git a/afh.c b/afh.c
index 863224220d82360cc1d8fe5b0d262385cbf62a29..c82d17fd19acc5c1484d883b4021a59d4718c599 100644 (file)
--- a/afh.c
+++ b/afh.c
@@ -112,6 +112,8 @@ static int cat_file(void *audio_file_data, struct afh_info *afhi)
                                        return ret;
                        }
                }
+               if (!size)
+                       continue;
                PARA_INFO_LOG("writing chunk %lu\n", i);
                ret = write_all(STDOUT_FILENO, buf, &size);
                if (ret < 0)
index 47104500e23417850ef2d164e1c98a68eac74632..bec99bf4d29b6fb8b75d66e29a627eb4f5a002a3 100644 (file)
@@ -91,7 +91,6 @@ void afh_init(void)
        }
 }
 
-
 /**
  * Guess the audio format judging from filename.
  *
@@ -122,11 +121,29 @@ int guess_audio_format(const char *name)
        return -E_AUDIO_FORMAT;
 }
 
+/**
+ * Pretty-print the given meta-info.
+ *
+ * \param title The title of the audio file.
+ * \param artist The artist.
+ * \param album The name of the album.
+ * \param year Year of release.
+ * \param comment Further comments.
+ *
+ * This function is called by each audio format handler to produce the tag info
+ * status items. Usually, the audio format handlers read this info from the
+ * audio file (id3 tags, vorbis comments, ...).
+ *
+ * It is OK to pass \p NULL pointers for any argument in which case a suitable
+ * string is inserted which indicates that this information is not available.
+ *
+ * \return The status item string. It must be freed by the caller.
+ */
 char *make_taginfo(char *title, char *artist, char *album, char *year,
                char *comment)
 {
        return make_message("%s: %s, by %s\n" /* taginfo1 */
-               "%s: A: %s, Y: %s, C: %s\n", /* taginfo 2*/
+               "%s: A: %s, Y: %s, C: %s\n", /* taginfo*/
                status_item_list[SI_TAGINFO1],
                (title && *title)? title : "(title tag not set)",
                (artist && *artist)? artist : "(artist tag not set)",
@@ -196,7 +213,18 @@ const char *audio_format_name(int i)
        return i >= 0?  afl[i].name : "(none)";
 }
 
-
+/**
+ * Get one chunk of audio data.
+ *
+ * \param chunk_num The number of the chunk to get.
+ * \param afhi Describes the audio file.
+ * \param map The memory mapped audio file.
+ * \param buf Result pointer.
+ * \param len The length of the chunk in bytes.
+ *
+ * Upon return, \a buf will point so memory inside \a map. The returned buffer
+ * must therefore not be freed by the caller.
+ */
 void afh_get_chunk(long unsigned chunk_num, struct afh_info *afhi,
                void *map, const char **buf, size_t *len)
 {
index b82f12ef8b994c605cb7f1699e0923d41738d365..6b96c505c6cef18dd4b9ebf4e899f105c65f3e6f 100644 (file)
--- a/oggdec.c
+++ b/oggdec.c
@@ -150,7 +150,7 @@ static ssize_t ogg_convert(char *inbuffer, size_t len, struct filter_node *fn)
                PARA_NOTICE_LOG("%d channels, %d Hz\n", fn->fc->channels,
                        fn->fc->samplerate);
        }
-       while (!*fn->fc->input_error && fn->loaded < fn->bufsize) {
+       while (fn->loaded < fn->bufsize) {
                int length = fn->bufsize - fn->loaded;
                long read_ret = ov_read(pod->vf, fn->buf + fn->loaded, length,
                        ENDIAN, 2 /* 16 bit */, 1 /* signed */, NULL);
diff --git a/write.h b/write.h
index 091f8c77181cbf3f1a014e31db2667b534aa5b0d..02471f32b1d1ba5e424bb8571225fed4f02418e8 100644 (file)
--- a/write.h
+++ b/write.h
@@ -4,54 +4,49 @@
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
 
-/** \file write.h writer-related structures */
+/** \file write.h Writer-related structures. */
 
-/** the list of supported writers */
+/** The list of supported writers. */
 enum writer_enum {WRITER_ENUM};
 
 /**
  * Describes one running instance of a writer.
  */
 struct writer_node {
-       /** points to the writer structure associated with this node */
-       struct writer *writer; /* FIXME: Should better be only the number */
-       /** writer-specific data */
+       /** Points to the writer structure associated with this node. */
+       struct writer *writer; /* FIXME: Should better be only the number. */
+       /** Writer-specific data. */
        void *private_data;
-       /** send that many bytes in one go */
+       /** Send that many bytes in one go. */
        int chunk_bytes;
-       /** pointer to the group this node belongs to */
+       /** Pointer to the group this node belongs to. */
        struct writer_node_group *wng;
-       /** the writer-specific configuration of this node */
+       /** The writer-specific configuration of this node. */
        void *conf;
-       /** how much of the wng's buffer is already written */
+       /** How much of the wng's buffer is already written. */
        size_t written;
 };
 
-/** describes one supported writer */
+/** Describes one supported writer. */
 struct writer {
        /**
-        * the init function of the writer
+        * The init function of the writer.
         *
         * It must fill in all other function pointers of the given
         * writer structure.
-        *
         */
        void (*init)(struct writer *w);
        /**
-        *
-        *
-        * the command line parser of the writer
+        * The command line parser of the writer.
         *
         * It should check whether the command line options given by \a options are
         * valid.  On success, it should return a pointer to the writer-specific
         * configuration data determined by \a options.  Note that this might be called
         * more than once with different values of \a options.
-        *
         */
-               void * (*parse_config)(const char *options);
+       void *(*parse_config)(const char *options);
        /**
-        *
-        * open one instance of this writer
+        * Open one instance of this writer.
         *
         * This function should perform any work necessary to write the incoming
         * stream. If To this aim, it may allocate its private data structure and store
@@ -59,8 +54,7 @@ struct writer {
         */
        int (*open)(struct writer_node *);
        /**
-        *
-        * write a chunk of audio data
+        * Prepare the fd sets for select.
         *
         * This is called from the writer node group task's pre_select(). It
         * may use the sched pointer to add any file descriptors or to decrease
@@ -69,64 +63,65 @@ struct writer {
         */
        int (*pre_select)(struct sched *s, struct writer_node *wn);
        /**
+        * Write audio data.
+        *
         * Called from the post_select function of the wng task. It must keep
         * track of the number of bytes consumed from the wng's buffer via
-        * the wn->written variable (which may be modified by the wng handling
+        * the \p wn->written variable (which may be modified by the wng handling
         * functions). This function must return positive on success and
         * negative on errors.
         */
        int (*post_select)(struct sched *s, struct writer_node *wn);
        /**
-        * close one instance of the writer
+        * Close one instance of the writer.
         *
         * This function is assumed to succeed.
         */
        void (*close)(struct writer_node *);
        /**
-        * shutdown the writer
+        * Shutdown the writer
         *
-        * This is a optional function pointer used for cleaning
-        * up.
+        * This is a optional function pointer used for cleaning up.
         */
        void (*shutdown)(struct writer_node *);
 };
 
 /**
- * describes a set of writer nodes that all write the same stream.
+ * Describes a set of writer nodes that all write the same stream.
  */
 struct writer_node_group {
-       /** number of nodes belonging to this group */
+       /** Number of nodes belonging to this group. */
        unsigned num_writers;
-       /** array of pointers to the corresponding writer nodes */
+       /** Array of pointers to the corresponding writer nodes. */
        struct writer_node *writer_nodes;
-       /** the maximum of the chunk_bytes values of the writer nodes in this group */
+       /** The maximum of the chunk_bytes values of the writer nodes in this group. */
        size_t max_chunk_bytes;
        /** Non-zero if an error or end of file was encountered by the feeding task. */
        int *input_error;
-       /** current output buffer */
+       /** Current output buffer. */
        char *buf;
-       /** number of bytes loaded in the output buffer */
+       /** Number of bytes loaded in the output buffer. */
        size_t *loaded;
-       /** number of audio channels of the current stream */
+       /** Number of audio channels of the current stream. */
        unsigned int *channels;
-       /** sample rate of the current stream */
+       /** Sample rate of the current stream. */
        unsigned int *samplerate;
-       /** the task associated to this group */
+       /** The task associated to this group. */
        struct task task;
        /** Whether the group is open, i.e. wng_open() was called. */
        int open;
 };
 
-/** loop over each writer node in a writer group */
+/** Loop over each writer node in a writer group. */
 #define FOR_EACH_WRITER_NODE(i, wng) for (i = 0; i < (wng)->num_writers; i++)
-/** loop over each supported writer */
+/** Loop over each supported writer. */
 #define FOR_EACH_WRITER(i) for (i = 0; i < NUM_SUPPORTED_WRITERS; i++)
 
-/** declare the init functions of all supported writers */
+/** Declare the init functions of all supported writers. */
 DECLARE_WRITER_INITS;
 
-/** array containing the name of each writer */
+/** Array containing the name of each writer. */
 extern const char *writer_names[];
 
-/** the writer structure for each supported writer */
+/** The writer structure for each supported writer. */
 extern struct writer writers[NUM_SUPPORTED_WRITERS];