if (val < LOLA_GRANULARITY_MIN || val > LOLA_GRANULARITY_MAX ||
(val % LOLA_GRANULARITY_STEP) != 0) returnfalse;
if (val == LOLA_GRANULARITY_MIN) { if (freq > LOLA_MAXFREQ_AT_GRANULARITY_MIN) returnfalse;
} elseif (val < LOLA_GRANULARITY_MAX) { if (freq > LOLA_MAXFREQ_AT_GRANULARITY_BELOW_MAX) returnfalse;
} returntrue;
}
int lola_set_granularity(struct lola *chip, unsignedint val, bool force)
{ int err;
if (!force) { if (val == chip->granularity) return 0; #if 0 /* change Gran only if there are no streams allocated ! */ if (chip->audio_in_alloc_mask || chip->audio_out_alloc_mask) return -EBUSY; #endif if (!check_gran_clock_compatibility(chip, val,
chip->clock.cur_freq)) return -EINVAL;
}
chip->granularity = val;
val /= LOLA_GRANULARITY_STEP;
/* audio function group */
err = lola_codec_write(chip, 1, LOLA_VERB_SET_GRANULARITY_STEPS,
val, 0); if (err < 0) return err; /* this can be a very slow function !!! */
usleep_range(400 * val, 20000); return lola_codec_flush(chip);
}
/* * Clock widget handling
*/
int lola_init_clock_widget(struct lola *chip, int nid)
{ unsignedint val; int i, j, nitems, nb_verbs, idx, idx_list; int err;
/* the current EXTERNAL clock information gets updated by interrupt * with an unsolicited response
*/ if (!val) returnfalse;
tag = (val >> LOLA_UNSOL_RESP_TAG_OFFSET) & LOLA_UNSOLICITED_TAG_MASK; if (tag != LOLA_UNSOLICITED_TAG) returnfalse;
/* only for current = external clocks */ if (chip->clock.sample_clock[chip->clock.cur_index].type !=
LOLA_CLOCK_TYPE_INTERNAL) {
chip->clock.cur_freq = lola_sample_rate_convert(val & 0x7f);
chip->clock.cur_valid = (val & 0x100) != 0;
} returntrue;
}
int lola_set_clock(struct lola *chip, int idx)
{ int freq = 0; bool valid = false;
if (!check_gran_clock_compatibility(chip, chip->granularity, freq)) return -EINVAL;
if (idx != chip->clock.cur_index) { int err = lola_set_clock_index(chip, idx); if (err < 0) return err; /* update new settings */
chip->clock.cur_index = idx;
chip->clock.cur_freq = freq;
chip->clock.cur_valid = true;
} return 0;
}
int lola_set_sample_rate(struct lola *chip, int rate)
{ int i;
if (chip->clock.cur_freq == rate && chip->clock.cur_valid) return 0; /* search for new dwClockIndex */ for (i = 0; i < chip->clock.items; i++) { if (chip->clock.sample_clock[i].type == LOLA_CLOCK_TYPE_INTERNAL &&
chip->clock.sample_clock[i].freq == rate) break;
} if (i >= chip->clock.items) return -EINVAL; return lola_set_clock(chip, i);
}
Messung V0.5
¤ Dauer der Verarbeitung: 0.10 Sekunden
(vorverarbeitet)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.