X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=write.h;h=8e244517c12f0203db5049ab5c09f8d8b82d84a4;hp=7df62f9f08e68090afe45cb09ec43dde024b7fab;hb=c282c836791cedf57c128555af90af37c7c01c05;hpb=ebe54cf6ee1b9c5daf7837cb618c299a5b5187e0 diff --git a/write.h b/write.h index 7df62f9f..8e244517 100644 --- a/write.h +++ b/write.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006-2008 Andre Noll + * Copyright (C) 2006-2009 Andre Noll * * Licensed under the GPL v2. For licencing details see COPYING. */ @@ -13,18 +13,19 @@ 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. */ + /** The number of this writer. */ + int writer_num; /** Writer-specific data. */ void *private_data; - /** Send that many bytes in one go. */ - int chunk_bytes; /** Pointer to the group this node belongs to. */ struct writer_node_group *wng; /** The writer-specific configuration of this node. */ void *conf; /** How much of the wng's buffer is already written. */ size_t written; + struct btr_node *btrn; + struct task task; + size_t min_iqs; }; /** Describes one supported writer. */ @@ -45,11 +46,12 @@ struct writer { * more than once with different values of \a options. */ void *(*parse_config)(const char *options); + void (*free_config)(void *conf); /** * 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 + * stream. To this aim, it may allocate its private data structure and store * a pointer to that structure via the given writer_node parameter. */ int (*open)(struct writer_node *); @@ -62,6 +64,7 @@ struct writer { * on errors. */ int (*pre_select)(struct sched *s, struct writer_node *wn); + void (*pre_select_btr)(struct sched *s, struct task *t); /** * Write audio data. * @@ -72,6 +75,7 @@ struct writer { * negative on errors. */ int (*post_select)(struct sched *s, struct writer_node *wn); + void (*post_select_btr)(struct sched *s, struct task *t); /** * Close one instance of the writer. * @@ -85,6 +89,7 @@ struct writer { */ void (*shutdown)(struct writer_node *); struct ggo_help help; + btr_command_handler execute; }; /** @@ -95,12 +100,10 @@ struct writer_node_group { unsigned num_writers; /** 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. */ - int max_chunk_bytes; /** Non-zero if an error or end of file was encountered by the feeding task. */ int *input_error; /** Current output buffer. */ - char *buf; + char **bufp; /** Number of bytes loaded in the output buffer. */ size_t *loaded; /** Number of audio channels of the current stream. */ @@ -111,6 +114,8 @@ struct writer_node_group { struct task task; /** Whether the group is open, i.e. wng_open() was called. */ int open; + /** Max number of bytes written in the previous post_select() call. */ + int last_written; }; /** Loop over each writer node in a writer group. */