Lines Matching defs:multi
69 snd_pcm_multi_t *multi = pcm->private_data;
72 for (i = 0; i < multi->slaves_count; ++i) {
73 snd_pcm_multi_slave_t *slave = &multi->slaves[i];
80 free(multi->slaves);
81 free(multi->channels);
82 free(multi);
93 snd_pcm_multi_t *multi = pcm->private_data;
94 snd_pcm_t *slave_0 = multi->slaves[multi->master_slave].pcm;
100 snd_pcm_multi_t *multi = pcm->private_data;
101 snd_pcm_t *slave_0 = multi->slaves[multi->master_slave].pcm;
107 snd_pcm_multi_t *multi = pcm->private_data;
109 snd_pcm_t *slave_0 = multi->slaves[multi->master_slave].pcm;
113 for (i = 0; i < multi->slaves_count; ++i) {
114 slave = multi->slaves[i].pcm;
127 snd_pcm_multi_t *multi = pcm->private_data;
128 snd_pcm_t *slave_0 = multi->slaves[multi->master_slave].pcm;
134 snd_pcm_multi_t *multi = pcm->private_data;
136 assert(info->subdevice < multi->slaves_count);
139 err = snd_pcm_info(multi->slaves[n].pcm, info);
142 info->subdevices_count = multi->slaves_count;
148 snd_pcm_multi_t *multi = pcm->private_data;
158 multi->channels_count, 0);
168 snd_pcm_multi_t *multi = pcm->private_data;
169 snd_pcm_multi_slave_t *slave = &multi->slaves[slave_idx];
251 snd_pcm_multi_t *multi = pcm->private_data;
252 snd_pcm_t *slave = multi->slaves[slave_idx].pcm;
258 snd_pcm_multi_t *multi = pcm->private_data;
260 snd_pcm_hw_params_t sparams[multi->slaves_count];
266 for (k = 0; k < multi->slaves_count; ++k) {
276 for (k = 0; k < multi->slaves_count; ++k) {
301 snd_pcm_multi_t *multi = pcm->private_data;
302 snd_pcm_t *slave = multi->slaves[slave_idx].pcm;
321 static void reset_links(snd_pcm_multi_t *multi)
325 for (i = 0; i < multi->slaves_count; ++i) {
326 if (multi->slaves[i].linked)
327 snd_pcm_unlink(multi->slaves[i].linked);
328 multi->slaves[0].linked = NULL;
331 if (snd_pcm_link(multi->slaves[0].pcm, multi->slaves[i].pcm) >= 0)
332 multi->slaves[i].linked = multi->slaves[0].pcm;
338 snd_pcm_multi_t *multi = pcm->private_data;
340 snd_pcm_hw_params_t sparams[multi->slaves_count];
342 for (i = 0; i < multi->slaves_count; ++i) {
353 reset_links(multi);
359 snd_pcm_multi_t *multi = pcm->private_data;
362 for (i = 0; i < multi->slaves_count; ++i) {
363 snd_pcm_t *slave = multi->slaves[i].pcm;
367 if (!multi->slaves[i].linked)
372 multi->slaves[i].linked = NULL;
379 snd_pcm_multi_t *multi = pcm->private_data;
382 for (i = 0; i < multi->slaves_count; ++i) {
383 snd_pcm_t *slave = multi->slaves[i].pcm;
394 snd_pcm_multi_t *multi = pcm->private_data;
395 snd_pcm_t *slave = multi->slaves[multi->master_slave].pcm;
410 snd_pcm_multi_t *multi = pcm->private_data;
411 snd_pcm_t *slave = multi->slaves[multi->master_slave].pcm;
417 snd_pcm_multi_t *multi = pcm->private_data;
423 for (i = 0; i < multi->slaves_count; ++i) {
424 slave_hw_ptr = *multi->slaves[i].pcm->hw.ptr;
425 avail = __snd_pcm_playback_avail(pcm, multi->hw_ptr, slave_hw_ptr);
433 for (i = 0; i < multi->slaves_count; ++i) {
434 slave_hw_ptr = *multi->slaves[i].pcm->hw.ptr;
435 avail = __snd_pcm_capture_avail(pcm, multi->hw_ptr, slave_hw_ptr);
442 multi->hw_ptr = hw_ptr;
447 snd_pcm_multi_t *multi = pcm->private_data;
450 for (i = 0; i < multi->slaves_count; ++i) {
451 err = snd_pcm_hwsync(multi->slaves[i].pcm);
461 snd_pcm_multi_t *multi = pcm->private_data;
465 for (i = 0; i < multi->slaves_count; ++i) {
466 err = snd_pcm_delay(multi->slaves[i].pcm, &d);
478 snd_pcm_multi_t *multi = pcm->private_data;
481 for (i = 0; i < multi->slaves_count; ++i) {
483 avail = snd_pcm_avail_update(multi->slaves[i].pcm);
496 snd_pcm_multi_t *multi = pcm->private_data;
497 snd_pcm_t *slave = multi->slaves[multi->master_slave].pcm;
503 snd_pcm_multi_t *multi = pcm->private_data;
506 for (i = 0; i < multi->slaves_count; ++i) {
510 err = snd_pcm_prepare(multi->slaves[i].pcm);
514 multi->hw_ptr = multi->appl_ptr = 0;
520 snd_pcm_multi_t *multi = pcm->private_data;
523 for (i = 0; i < multi->slaves_count; ++i) {
525 err = snd_pcm_reset(multi->slaves[i].pcm);
529 multi->hw_ptr = multi->appl_ptr = 0;
533 /* when the first slave PCM is linked, it means that the whole multi
539 snd_pcm_multi_t *multi = pcm->private_data;
542 if (multi->slaves[0].linked)
543 return snd_pcm_start(multi->slaves[0].linked);
544 for (i = 0; i < multi->slaves_count; ++i) {
545 if (multi->slaves[i].linked)
547 err = snd_pcm_start(multi->slaves[i].pcm);
556 snd_pcm_multi_t *multi = pcm->private_data;
559 if (multi->slaves[0].linked)
560 return snd_pcm_drop(multi->slaves[0].linked);
561 for (i = 0; i < multi->slaves_count; ++i) {
562 if (multi->slaves[i].linked)
564 err = snd_pcm_drop(multi->slaves[i].pcm);
573 snd_pcm_multi_t *multi = pcm->private_data;
576 if (multi->slaves[0].linked)
577 return snd_pcm_drain(multi->slaves[0].linked);
578 for (i = 0; i < multi->slaves_count; ++i) {
579 if (multi->slaves[i].linked)
581 err = snd_pcm_drain(multi->slaves[i].pcm);
590 snd_pcm_multi_t *multi = pcm->private_data;
593 if (multi->slaves[0].linked)
594 return snd_pcm_pause(multi->slaves[0].linked, enable);
595 for (i = 0; i < multi->slaves_count; ++i) {
596 if (multi->slaves[i].linked)
598 err = snd_pcm_pause(multi->slaves[i].pcm, enable);
607 snd_pcm_multi_t *multi = pcm->private_data;
609 snd_pcm_multi_channel_t *c = &multi->channels[channel];
614 err = snd_pcm_channel_info(multi->slaves[c->slave_idx].pcm, info);
621 snd_pcm_multi_t *multi = pcm->private_data;
625 for (i = 0; i < multi->slaves_count; ++i) {
626 snd_pcm_sframes_t f = snd_pcm_rewindable(multi->slaves[i].pcm);
639 snd_pcm_multi_t *multi = pcm->private_data;
643 for (i = 0; i < multi->slaves_count; ++i) {
644 snd_pcm_sframes_t f = snd_pcm_forwardable(multi->slaves[i].pcm);
657 snd_pcm_multi_t *multi = pcm->private_data;
659 snd_pcm_uframes_t pos[multi->slaves_count];
661 for (i = 0; i < multi->slaves_count; ++i) {
662 snd_pcm_t *slave_i = multi->slaves[i].pcm;
670 for (i = 0; i < multi->slaves_count; ++i) {
671 snd_pcm_t *slave_i = multi->slaves[i].pcm;
688 snd_pcm_multi_t *multi = pcm->private_data;
690 snd_pcm_uframes_t pos[multi->slaves_count];
692 for (i = 0; i < multi->slaves_count; ++i) {
693 snd_pcm_t *slave_i = multi->slaves[i].pcm;
701 for (i = 0; i < multi->slaves_count; ++i) {
702 snd_pcm_t *slave_i = multi->slaves[i].pcm;
719 snd_pcm_multi_t *multi = pcm->private_data;
722 if (multi->slaves[0].linked)
723 return snd_pcm_resume(multi->slaves[0].linked);
724 for (i = 0; i < multi->slaves_count; ++i) {
725 if (multi->slaves[i].linked)
727 err = snd_pcm_resume(multi->slaves[i].pcm);
734 /* if a multi plugin instance is linked as slaves, every slave PCMs
739 snd_pcm_multi_t *multi = pcm->private_data;
743 for (i = 0; i < multi->slaves_count; ++i) {
744 snd_pcm_unlink(multi->slaves[i].pcm);
745 multi->slaves[i].linked = NULL;
746 err = snd_pcm_link(master, multi->slaves[i].pcm);
748 reset_links(multi);
751 multi->slaves[i].linked = master;
756 /* linking to a multi as a master is easy - simply link to the first
761 snd_pcm_multi_t *multi = pcm1->private_data;
762 snd_pcm_t *main_pcm = multi->slaves[0].pcm;
770 snd_pcm_multi_t *multi = pcm->private_data;
773 for (i = 0; i < multi->slaves_count; ++i) {
774 if (multi->slaves[i].linked)
775 snd_pcm_unlink(multi->slaves[i].linked);
776 multi->slaves[0].linked = NULL;
785 snd_pcm_multi_t *multi = pcm->private_data;
790 for (i = 0; i < multi->slaves_count; ++i) {
791 slave = multi->slaves[i].pcm;
813 snd_pcm_multi_t *multi = pcm->private_data;
827 snd_pcm_multi_channel_t *chan = &multi->channels[c];
833 slave = multi->slaves[chan->slave_idx].pcm;
845 snd_pcm_multi_t *multi = pcm->private_data;
847 for (i = 0; i < multi->slaves_count; ++i) {
848 if (snd_pcm_may_wait_for_avail_min(multi->slaves[i].pcm, avail))
856 snd_pcm_multi_t *multi = pcm->private_data;
857 snd_pcm_chmap_query_t **slave_maps[multi->slaves_count];
866 maps[0] = calloc(multi->channels_count + 2, sizeof(int *));
870 maps[0]->map.channels = multi->channels_count;
872 for (i = 0; i < multi->slaves_count; i++) {
873 slave_maps[i] = snd_pcm_query_chmaps(multi->slaves[i].pcm);
878 for (i = 0; i < multi->channels_count; i++) {
879 snd_pcm_multi_channel_t *bind = &multi->channels[i];
881 multi->slaves[bind->slave_idx].channels_count;
895 for (i = 0; i < multi->slaves_count; i++) {
910 snd_pcm_multi_t *multi = pcm->private_data;
912 snd_pcm_chmap_t *slave_maps[multi->slaves_count];
917 map = calloc(multi->channels_count + 1, sizeof(int));
921 for (i = 0; i < multi->slaves_count; i++) {
922 slave_maps[i] = snd_pcm_get_chmap(multi->slaves[i].pcm);
927 map->channels = multi->channels_count;
928 for (i = 0; i < multi->channels_count; i++) {
929 snd_pcm_multi_channel_t *bind = &multi->channels[i];
935 for (i = 0; i < multi->slaves_count; i++)
948 snd_pcm_multi_t *multi = pcm->private_data;
949 snd_pcm_chmap_t *slave_maps[multi->slaves_count];
953 if (map->channels != multi->channels_count)
956 for (i = 0; i < multi->slaves_count; i++) {
957 slave_maps[i] = calloc(multi->slaves[i].channels_count + 1,
960 for (i++; i < multi->slaves_count; i++)
967 for (i = 0; i < multi->channels_count; i++) {
968 snd_pcm_multi_channel_t *bind = &multi->channels[i];
973 for (i = 0; i < multi->slaves_count; i++) {
974 err = snd_pcm_set_chmap(multi->slaves[i].pcm, slave_maps[i]);
980 for (i = 0; i < multi->slaves_count; i++)
988 snd_pcm_multi_t *multi = pcm->private_data;
992 for (k = 0; k < multi->channels_count; ++k) {
993 snd_pcm_multi_channel_t *c = &multi->channels[k];
1003 for (k = 0; k < multi->slaves_count; ++k) {
1005 snd_pcm_dump(multi->slaves[k].pcm, out);
1084 snd_pcm_multi_t *multi;
1094 multi = calloc(1, sizeof(snd_pcm_multi_t));
1095 if (!multi) {
1101 multi->slaves_count = slaves_count;
1102 multi->master_slave = master_slave;
1103 multi->slaves = calloc(slaves_count, sizeof(*multi->slaves));
1104 if (!multi->slaves) {
1105 free(multi);
1108 multi->channels_count = channels_count;
1109 multi->channels = calloc(channels_count, sizeof(*multi->channels));
1110 if (!multi->channels) {
1111 free(multi->slaves);
1112 free(multi);
1116 snd_pcm_multi_slave_t *slave = &multi->slaves[i];
1123 snd_pcm_multi_channel_t *bind = &multi->channels[i];
1131 multi->channels_count = channels_count;
1134 multi->slaves[0].pcm->mode);
1136 free(multi->slaves);
1137 free(multi->channels);
1138 free(multi);
1145 pcm->private_data = multi;
1146 pcm->poll_fd = multi->slaves[master_slave].pcm->poll_fd;
1147 pcm->poll_events = multi->slaves[master_slave].pcm->poll_events;
1148 pcm->tstamp_type = multi->slaves[master_slave].pcm->tstamp_type;
1149 snd_pcm_set_hw_ptr(pcm, &multi->hw_ptr, -1, 0);
1150 snd_pcm_set_appl_ptr(pcm, &multi->appl_ptr, -1, 0);
1163 type multi # Multiple streams conversion PCM
1188 type multi