Changeset c799138 in mainline for uspace/srv/audio/hound/audio_sink.c
- Timestamp:
- 2013-04-11T01:34:41Z (11 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 250828a
- Parents:
- f0a647c
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/audio/hound/audio_sink.c
rf0a647c rc799138 45 45 46 46 47 /** 48 * Initialize audio sink structure. 49 * @param sink The structure to initialize. 50 * @param name string identifier 51 * @param private_data backa 52 */ 47 53 int audio_sink_init(audio_sink_t *sink, const char *name, 48 54 void *private_data, int (*connection_change)(audio_sink_t *, bool), … … 50 56 { 51 57 assert(sink); 52 if (!name) { 53 log_debug("Incorrect parameters."); 58 if (!name) 54 59 return EINVAL; 55 }56 60 link_initialize(&sink->link); 57 61 list_initialize(&sink->connections); 58 62 sink->name = str_dup(name); 63 if (!sink->name) 64 return ENOMEM; 59 65 sink->private_data = private_data; 60 66 sink->format = *f; … … 65 71 } 66 72 73 /** 74 * Release resources claimed by initialization. 75 * @param sink the structure to release. 76 */ 67 77 void audio_sink_fini(audio_sink_t *sink) 68 78 { … … 74 84 } 75 85 76 #if 0 77 int audio_sink_add_source(audio_sink_t *sink, audio_source_t *source) 78 { 79 assert(sink); 80 assert(source); 81 assert_link_not_used(&source->link); 82 list_append(&source->link, &sink->sources); 83 84 const pcm_format_t old_format = sink->format; 85 86 /* The first source for me */ 87 if (list_count(&sink->sources) == 1) { 88 /* Set audio format according to the first source */ 89 if (pcm_format_is_any(&sink->format)) { 90 int ret = audio_sink_set_format(sink, &source->format); 91 if (ret != EOK) 92 return ret; 93 } 94 } 95 96 audio_source_connected(source, sink); 97 if (sink->connection_change) { 98 log_verbose("Calling connection change"); 99 const int ret = sink->connection_change(sink, true); 100 if (ret != EOK) { 101 log_debug("Connection hook failed."); 102 // audio_source_connected(source, NULL); 103 // list_remove(&source->link); 104 // sink->format = old_format; 105 return ret; 106 } 107 } 108 log_verbose("Connected source '%s' to sink '%s'", 109 source->name, sink->name); 110 111 return EOK; 112 } 113 #endif 114 86 /** 87 * Set audio sink format and check with backend, 88 * @param sink The target sink isntance. 89 * @param format Th new format. 90 * @return Error code. 91 */ 115 92 int audio_sink_set_format(audio_sink_t *sink, const pcm_format_t *format) 116 93 { … … 143 120 } 144 121 145 #if 0 146 int audio_sink_remove_source(audio_sink_t *sink, audio_source_t *source) 147 { 148 assert(sink); 149 assert(source); 150 assert(list_member(&source->link, &sink->sources)); 151 list_remove(&source->link); 152 if (sink->connection_change) { 153 const int ret = sink->connection_change(sink, false); 154 if (ret != EOK) { 155 log_debug("Connected hook failed."); 156 list_append(&source->link, &sink->sources); 157 return ret; 158 } 159 } 160 audio_source_connected(source, NULL); 161 return EOK; 162 } 163 #endif 164 165 122 /** 123 * Pull data from all connections and add the mix to the destination. 124 * @param sink The sink to mix data. 125 * @param dest Destination buffer. 126 * @param size size of the @p dest buffer. 127 * @return Error code. 128 */ 166 129 void audio_sink_mix_inputs(audio_sink_t *sink, void* dest, size_t size) 167 130 {
Note:
See TracChangeset
for help on using the changeset viewer.