Changeset 389ef25 in mainline for uspace/srv/audio/hound/audio_sink.c
- Timestamp:
- 2012-07-17T06:53:55Z (12 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 950110ee
- Parents:
- bb67def
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/audio/hound/audio_sink.c
rbb67def r389ef25 46 46 int audio_sink_init(audio_sink_t *sink, const char *name, 47 47 void *private_data, int (*connection_change)(audio_sink_t *, bool), 48 const audio_format_t *f)48 int (*check_format)(audio_sink_t *sink), const audio_format_t *f) 49 49 { 50 50 assert(sink); … … 59 59 sink->format = *f; 60 60 sink->connection_change = connection_change; 61 sink->check_format = check_format; 61 62 log_verbose("Initialized sink (%p) '%s'", sink, sink->name); 62 63 return EOK; … … 70 71 sink->name = NULL; 71 72 } 72 73 73 74 74 int audio_sink_add_source(audio_sink_t *sink, audio_source_t *source) … … 85 85 /* Set audio format according to the first source */ 86 86 if (audio_format_is_any(&sink->format)) { 87 /* Source does not care */ 88 if (audio_format_is_any(&source->format)) { 89 log_verbose("Set default format for sink %s.", 90 sink->name); 91 sink->format = AUDIO_FORMAT_DEFAULT; 92 } else { 93 log_verbose("Set format based on the first " 94 "source(%s): %u channel(s), %uHz, %s for " 95 "sink %s.", source->name, 96 source->format.channels, 97 source->format.sampling_rate, 98 pcm_sample_format_str( 99 source->format.sample_format), 100 sink->name); 101 sink->format = source->format; 102 } 87 int ret = audio_sink_set_format(sink, &source->format); 88 if (ret != EOK) 89 return ret; 103 90 } 104 91 } … … 120 107 source->name, sink->name); 121 108 109 return EOK; 110 } 111 112 int audio_sink_set_format(audio_sink_t *sink, const audio_format_t *format) 113 { 114 assert(sink); 115 assert(format); 116 if (!audio_format_is_any(&sink->format)) { 117 log_debug("Sink %s already has a format", sink->name); 118 return EEXISTS; 119 } 120 const audio_format_t old_format; 121 122 if (audio_format_is_any(format)) { 123 log_verbose("Setting DEFAULT format for sink %s", sink->name); 124 sink->format = AUDIO_FORMAT_DEFAULT; 125 } else { 126 sink->format = *format; 127 } 128 if (sink->check_format) { 129 const int ret = sink->check_format(sink); 130 if (ret != EOK && ret != ELIMIT) { 131 log_debug("Format check failed on sink %s", sink->name); 132 sink->format = old_format; 133 return ret; 134 } 135 } 136 log_verbose("Set format for sink %s: %u channel(s), %uHz, %s", 137 sink->name, format->channels, format->sampling_rate, 138 pcm_sample_format_str(format->sample_format)); 122 139 return EOK; 123 140 }
Note:
See TracChangeset
for help on using the changeset viewer.