From 3e4e5c000805b8bebf431d6e0431940fa17886ad Mon Sep 17 00:00:00 2001 From: Andre Date: Fri, 5 May 2006 14:06:10 +0200 Subject: [PATCH] Doxify the write subsystem --- alsa_writer.c | 7 +++-- file_writer.c | 6 +++- write.h | 78 ++++++++++++++++++++++++++++++++++++++++++++------- 3 files changed, 78 insertions(+), 13 deletions(-) diff --git a/alsa_writer.c b/alsa_writer.c index 039c9817..601353aa 100644 --- a/alsa_writer.c +++ b/alsa_writer.c @@ -40,8 +40,10 @@ extern struct gengetopt_args_info conf; /** data specific to the alsa writer */ struct private_alsa_data { - snd_pcm_t *handle; - size_t bytes_per_frame; +/** the alsa handle */ +snd_pcm_t *handle; +/** determined and set by alsa_open() */ +size_t bytes_per_frame; }; /* @@ -172,6 +174,7 @@ static void alsa_close(struct writer_node *wn) free(pad); } +/** the init function of the alsa writer */ void alsa_writer_init(struct writer *w) { w->open = alsa_open; diff --git a/file_writer.c b/file_writer.c index dabe92ce..a7a765e1 100644 --- a/file_writer.c +++ b/file_writer.c @@ -23,9 +23,12 @@ #include "string.h" #include "error.h" +/** data specific to the file writer */ struct private_file_writer_data { - int fd; +/** the file descriptor of the output file */ +int fd; }; + static int file_writer_open(struct writer_node *w) { struct private_file_writer_data *pfwd = para_calloc( @@ -60,6 +63,7 @@ static void file_writer_close(struct writer_node *wn) free(pfwd); } +/** the init function of the file writer */ void file_writer_init(struct writer *w) { w->open = file_writer_open; diff --git a/write.h b/write.h index 102f1b25..5f8ab3ab 100644 --- a/write.h +++ b/write.h @@ -18,33 +18,91 @@ /** \file write.h writer-related structures */ +/** the list of supported writers */ enum writer_enum {WRITER_ENUM}; +/** + * decbribes one running instance of a writer + */ struct writer_node { +/** points to the writer structure associated with this node */ struct writer *writer; +/** writer-specific data */ void *private_data; +/** send that many bytes in one go */ int chunk_bytes; }; +/** describes one supported writer */ struct writer { - void (*init)(struct writer *w); - int (*open)(struct writer_node *); - int (*write)(char *data, size_t nbytes, struct writer_node *); - void (*close)(struct writer_node *); - void (*shutdown)(struct writer_node *); +/** + * the init function of the writer + * + * It must fill in all other function pointers of the given + * writer structure. + * + */ +void (*init)(struct writer *w); +/** + * + * 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 + * a pointer to that structure via the given writer_node paramenter. + */ +int (*open)(struct writer_node *); +/** + * + * write a chunk of audio data + * + * This is called from the driving application whenever a data block of \a + * chunk_bytes is available. It must return the number of bytes consumed from + * \a data on success, and negative on errors. + * + */ +int (*write)(char *data, size_t nbytes, struct writer_node *); +/** + * close one instance of the writer + * + * This function is assumed to succeed. + */ +void (*close)(struct writer_node *); +/** + * shutdown the writer + * + * 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. + */ struct writer_node_group { - unsigned num_writers; - struct writer_node *writer_nodes; - int *written; - size_t max_chunk_bytes; - int eof; +/** number of nodes belonging to this group */ +unsigned num_writers; +/** array of pointers to the corresponding writer nodes */ +struct writer_node *writer_nodes; +/** keeps track of how many bytes have been written by each node */ +int *written; +/** the maximum of the chunk_bytes values of the writer nodes in this group */ +size_t max_chunk_bytes; +/** non-zero if end of file was encountered */ +int eof; }; +/** 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 */ #define FOR_EACH_WRITER(i) for (i = 0; i < NUM_SUPPORTED_WRITERS; i++) +/** declare the init functions of all supported writers */ DECLARE_WRITER_INITS; + +/** array containing the name of each writer */ extern const char *writer_names[]; + +/** the writer structure for each supported writer */ extern struct writer writers[NUM_SUPPORTED_WRITERS]; -- 2.39.5