~diwic/ubuntu/lucid/pulseaudio/bugfixes

« back to all changes in this revision

Viewing changes to src/pulse/channelmap.c

  • Committer: Bazaar Package Importer
  • Author(s): Luke Yelavich
  • Date: 2008-11-04 15:46:00 UTC
  • mfrom: (1.2.1 upstream) (1.1.6 lenny)
  • Revision ID: james.westby@ubuntu.com-20081104154600-hlzknpcazaam0nxm
Tags: 0.9.13-1ubuntu1
* Merge from Debian unstable, remaining changes:
  - Don't build against, and create jack package. Jack is not in main.
  - Remove --disable-per-user-esound-socket from configure flags, as we still
    want per user esound sockets.
  - Remove stop links from rc0 and rc6.
  - Change default resample algorithm and bubffer size.
  - Add alsa configuration files to route alsa applications via pulseaudio.
  - Move libasound2-plugins from Recommends to Depends.
* debian/pulseaudio.preinst: When upgrading from intrepid, remove
  /etc/X11/Xsession.d/70pulseaudio, as this was used to minimize a race
  condition when starting GNOME in intrepid. This race should not exist in
  jaunty once libcanberra is built to use pulseaudio as a backend.
* Do not spawn a pulseaudio server if clients fail to find a running server.
* Remove explicit version dependency for libspeex-dev to allow the package
  to be built for now.
* Regenerate autotools files to work with Ubuntu's newer libtool/libltdl.
* debian/control: libpulsecore5 -> libpulsecore8 to match the library
  soname.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/* $Id: channelmap.c 2054 2007-11-13 23:41:17Z lennart $ */
2
 
 
3
1
/***
4
2
  This file is part of PulseAudio.
5
3
 
31
29
#include <string.h>
32
30
 
33
31
#include <pulse/xmalloc.h>
 
32
#include <pulse/i18n.h>
34
33
#include <pulsecore/core-util.h>
35
34
#include <pulsecore/macro.h>
36
35
 
100
99
};
101
100
 
102
101
const char *const pretty_table[PA_CHANNEL_POSITION_MAX] = {
103
 
    [PA_CHANNEL_POSITION_MONO] = "Mono",
104
 
 
105
 
    [PA_CHANNEL_POSITION_FRONT_CENTER] = "Front Center",
106
 
    [PA_CHANNEL_POSITION_FRONT_LEFT] = "Front Left",
107
 
    [PA_CHANNEL_POSITION_FRONT_RIGHT] = "Front Right",
108
 
 
109
 
    [PA_CHANNEL_POSITION_REAR_CENTER] = "Rear Center",
110
 
    [PA_CHANNEL_POSITION_REAR_LEFT] = "Rear Left",
111
 
    [PA_CHANNEL_POSITION_REAR_RIGHT] = "Rear Right",
112
 
 
113
 
    [PA_CHANNEL_POSITION_LFE] = "Low Frequency Emmiter",
114
 
 
115
 
    [PA_CHANNEL_POSITION_FRONT_LEFT_OF_CENTER] = "Front Left-of-center",
116
 
    [PA_CHANNEL_POSITION_FRONT_RIGHT_OF_CENTER] = "Front Right-of-center",
117
 
 
118
 
    [PA_CHANNEL_POSITION_SIDE_LEFT] = "Side Left",
119
 
    [PA_CHANNEL_POSITION_SIDE_RIGHT] = "Side Right",
120
 
 
121
 
    [PA_CHANNEL_POSITION_AUX0] = "Auxiliary 0",
122
 
    [PA_CHANNEL_POSITION_AUX1] = "Auxiliary 1",
123
 
    [PA_CHANNEL_POSITION_AUX2] = "Auxiliary 2",
124
 
    [PA_CHANNEL_POSITION_AUX3] = "Auxiliary 3",
125
 
    [PA_CHANNEL_POSITION_AUX4] = "Auxiliary 4",
126
 
    [PA_CHANNEL_POSITION_AUX5] = "Auxiliary 5",
127
 
    [PA_CHANNEL_POSITION_AUX6] = "Auxiliary 6",
128
 
    [PA_CHANNEL_POSITION_AUX7] = "Auxiliary 7",
129
 
    [PA_CHANNEL_POSITION_AUX8] = "Auxiliary 8",
130
 
    [PA_CHANNEL_POSITION_AUX9] = "Auxiliary 9",
131
 
    [PA_CHANNEL_POSITION_AUX10] = "Auxiliary 10",
132
 
    [PA_CHANNEL_POSITION_AUX11] = "Auxiliary 11",
133
 
    [PA_CHANNEL_POSITION_AUX12] = "Auxiliary 12",
134
 
    [PA_CHANNEL_POSITION_AUX13] = "Auxiliary 13",
135
 
    [PA_CHANNEL_POSITION_AUX14] = "Auxiliary 14",
136
 
    [PA_CHANNEL_POSITION_AUX15] = "Auxiliary 15",
137
 
    [PA_CHANNEL_POSITION_AUX16] = "Auxiliary 16",
138
 
    [PA_CHANNEL_POSITION_AUX17] = "Auxiliary 17",
139
 
    [PA_CHANNEL_POSITION_AUX18] = "Auxiliary 18",
140
 
    [PA_CHANNEL_POSITION_AUX19] = "Auxiliary 19",
141
 
    [PA_CHANNEL_POSITION_AUX20] = "Auxiliary 20",
142
 
    [PA_CHANNEL_POSITION_AUX21] = "Auxiliary 21",
143
 
    [PA_CHANNEL_POSITION_AUX22] = "Auxiliary 22",
144
 
    [PA_CHANNEL_POSITION_AUX23] = "Auxiliary 23",
145
 
    [PA_CHANNEL_POSITION_AUX24] = "Auxiliary 24",
146
 
    [PA_CHANNEL_POSITION_AUX25] = "Auxiliary 25",
147
 
    [PA_CHANNEL_POSITION_AUX26] = "Auxiliary 26",
148
 
    [PA_CHANNEL_POSITION_AUX27] = "Auxiliary 27",
149
 
    [PA_CHANNEL_POSITION_AUX28] = "Auxiliary 28",
150
 
    [PA_CHANNEL_POSITION_AUX29] = "Auxiliary 29",
151
 
    [PA_CHANNEL_POSITION_AUX30] = "Auxiliary 30",
152
 
    [PA_CHANNEL_POSITION_AUX31] = "Auxiliary 31",
153
 
 
154
 
    [PA_CHANNEL_POSITION_TOP_CENTER] = "Top Center",
155
 
 
156
 
    [PA_CHANNEL_POSITION_TOP_FRONT_CENTER] = "Top Front Center",
157
 
    [PA_CHANNEL_POSITION_TOP_FRONT_LEFT] = "Top Front Left",
158
 
    [PA_CHANNEL_POSITION_TOP_FRONT_RIGHT] = "Top Front Right",
159
 
 
160
 
    [PA_CHANNEL_POSITION_TOP_REAR_CENTER] = "Top Rear Center",
161
 
    [PA_CHANNEL_POSITION_TOP_REAR_LEFT] = "Top Rear left",
162
 
    [PA_CHANNEL_POSITION_TOP_REAR_RIGHT] = "Top Rear Right"
 
102
    [PA_CHANNEL_POSITION_MONO] = N_("Mono"),
 
103
 
 
104
    [PA_CHANNEL_POSITION_FRONT_CENTER] = N_("Front Center"),
 
105
    [PA_CHANNEL_POSITION_FRONT_LEFT] = N_("Front Left"),
 
106
    [PA_CHANNEL_POSITION_FRONT_RIGHT] = N_("Front Right"),
 
107
 
 
108
    [PA_CHANNEL_POSITION_REAR_CENTER] = N_("Rear Center"),
 
109
    [PA_CHANNEL_POSITION_REAR_LEFT] = N_("Rear Left"),
 
110
    [PA_CHANNEL_POSITION_REAR_RIGHT] = N_("Rear Right"),
 
111
 
 
112
    [PA_CHANNEL_POSITION_LFE] = N_("Low Frequency Emmiter"),
 
113
 
 
114
    [PA_CHANNEL_POSITION_FRONT_LEFT_OF_CENTER] = N_("Front Left-of-center"),
 
115
    [PA_CHANNEL_POSITION_FRONT_RIGHT_OF_CENTER] = N_("Front Right-of-center"),
 
116
 
 
117
    [PA_CHANNEL_POSITION_SIDE_LEFT] = N_("Side Left"),
 
118
    [PA_CHANNEL_POSITION_SIDE_RIGHT] = N_("Side Right"),
 
119
 
 
120
    [PA_CHANNEL_POSITION_AUX0] = N_("Auxiliary 0"),
 
121
    [PA_CHANNEL_POSITION_AUX1] = N_("Auxiliary 1"),
 
122
    [PA_CHANNEL_POSITION_AUX2] = N_("Auxiliary 2"),
 
123
    [PA_CHANNEL_POSITION_AUX3] = N_("Auxiliary 3"),
 
124
    [PA_CHANNEL_POSITION_AUX4] = N_("Auxiliary 4"),
 
125
    [PA_CHANNEL_POSITION_AUX5] = N_("Auxiliary 5"),
 
126
    [PA_CHANNEL_POSITION_AUX6] = N_("Auxiliary 6"),
 
127
    [PA_CHANNEL_POSITION_AUX7] = N_("Auxiliary 7"),
 
128
    [PA_CHANNEL_POSITION_AUX8] = N_("Auxiliary 8"),
 
129
    [PA_CHANNEL_POSITION_AUX9] = N_("Auxiliary 9"),
 
130
    [PA_CHANNEL_POSITION_AUX10] = N_("Auxiliary 10"),
 
131
    [PA_CHANNEL_POSITION_AUX11] = N_("Auxiliary 11"),
 
132
    [PA_CHANNEL_POSITION_AUX12] = N_("Auxiliary 12"),
 
133
    [PA_CHANNEL_POSITION_AUX13] = N_("Auxiliary 13"),
 
134
    [PA_CHANNEL_POSITION_AUX14] = N_("Auxiliary 14"),
 
135
    [PA_CHANNEL_POSITION_AUX15] = N_("Auxiliary 15"),
 
136
    [PA_CHANNEL_POSITION_AUX16] = N_("Auxiliary 16"),
 
137
    [PA_CHANNEL_POSITION_AUX17] = N_("Auxiliary 17"),
 
138
    [PA_CHANNEL_POSITION_AUX18] = N_("Auxiliary 18"),
 
139
    [PA_CHANNEL_POSITION_AUX19] = N_("Auxiliary 19"),
 
140
    [PA_CHANNEL_POSITION_AUX20] = N_("Auxiliary 20"),
 
141
    [PA_CHANNEL_POSITION_AUX21] = N_("Auxiliary 21"),
 
142
    [PA_CHANNEL_POSITION_AUX22] = N_("Auxiliary 22"),
 
143
    [PA_CHANNEL_POSITION_AUX23] = N_("Auxiliary 23"),
 
144
    [PA_CHANNEL_POSITION_AUX24] = N_("Auxiliary 24"),
 
145
    [PA_CHANNEL_POSITION_AUX25] = N_("Auxiliary 25"),
 
146
    [PA_CHANNEL_POSITION_AUX26] = N_("Auxiliary 26"),
 
147
    [PA_CHANNEL_POSITION_AUX27] = N_("Auxiliary 27"),
 
148
    [PA_CHANNEL_POSITION_AUX28] = N_("Auxiliary 28"),
 
149
    [PA_CHANNEL_POSITION_AUX29] = N_("Auxiliary 29"),
 
150
    [PA_CHANNEL_POSITION_AUX30] = N_("Auxiliary 30"),
 
151
    [PA_CHANNEL_POSITION_AUX31] = N_("Auxiliary 31"),
 
152
 
 
153
    [PA_CHANNEL_POSITION_TOP_CENTER] = N_("Top Center"),
 
154
 
 
155
    [PA_CHANNEL_POSITION_TOP_FRONT_CENTER] = N_("Top Front Center"),
 
156
    [PA_CHANNEL_POSITION_TOP_FRONT_LEFT] = N_("Top Front Left"),
 
157
    [PA_CHANNEL_POSITION_TOP_FRONT_RIGHT] = N_("Top Front Right"),
 
158
 
 
159
    [PA_CHANNEL_POSITION_TOP_REAR_CENTER] = N_("Top Rear Center"),
 
160
    [PA_CHANNEL_POSITION_TOP_REAR_LEFT] = N_("Top Rear Left"),
 
161
    [PA_CHANNEL_POSITION_TOP_REAR_RIGHT] = N_("Top Rear Right")
163
162
};
164
163
 
165
164
pa_channel_map* pa_channel_map_init(pa_channel_map *m) {
199
198
    pa_assert(m);
200
199
    pa_assert(channels > 0);
201
200
    pa_assert(channels <= PA_CHANNELS_MAX);
 
201
    pa_assert(def < PA_CHANNEL_MAP_DEF_MAX);
202
202
 
203
203
    pa_channel_map_init(m);
204
204
 
205
 
    m->channels = channels;
 
205
    m->channels = (uint8_t) channels;
206
206
 
207
207
    switch (def) {
208
208
        case PA_CHANNEL_MAP_AIFF:
288
288
        case PA_CHANNEL_MAP_AUX: {
289
289
            unsigned i;
290
290
 
291
 
            if (channels >= PA_CHANNELS_MAX)
292
 
                return NULL;
293
 
 
294
291
            for (i = 0; i < channels; i++)
295
292
                m->map[i] = PA_CHANNEL_POSITION_AUX0 + i;
296
293
 
392
389
 
393
390
 
394
391
        default:
395
 
            return NULL;
396
 
    }
397
 
}
398
 
 
 
392
            pa_assert_not_reached();
 
393
    }
 
394
}
 
395
 
 
396
pa_channel_map* pa_channel_map_init_extend(pa_channel_map *m, unsigned channels, pa_channel_map_def_t def) {
 
397
    unsigned c;
 
398
 
 
399
    pa_assert(m);
 
400
    pa_assert(channels > 0);
 
401
    pa_assert(channels <= PA_CHANNELS_MAX);
 
402
    pa_assert(def < PA_CHANNEL_MAP_DEF_MAX);
 
403
 
 
404
    pa_channel_map_init(m);
 
405
 
 
406
    for (c = channels; c > 0; c--) {
 
407
 
 
408
        if (pa_channel_map_init_auto(m, c, def)) {
 
409
            unsigned i = 0;
 
410
 
 
411
            for (; c < channels; c++) {
 
412
 
 
413
                m->map[c] = PA_CHANNEL_POSITION_AUX0 + i;
 
414
                i++;
 
415
            }
 
416
 
 
417
            m->channels = (uint8_t) channels;
 
418
 
 
419
            return m;
 
420
        }
 
421
    }
 
422
 
 
423
    return NULL;
 
424
}
399
425
 
400
426
const char* pa_channel_position_to_string(pa_channel_position_t pos) {
401
427
 
406
432
}
407
433
 
408
434
const char* pa_channel_position_to_pretty_string(pa_channel_position_t pos) {
 
435
 
 
436
    pa_init_i18n();
 
437
 
409
438
    if (pos < 0 || pos >= PA_CHANNEL_POSITION_MAX)
410
439
        return NULL;
411
440
 
412
 
    return pretty_table[pos];
 
441
    return _(pretty_table[pos]);
413
442
}
414
443
 
415
444
int pa_channel_map_equal(const pa_channel_map *a, const pa_channel_map *b) {
430
459
 
431
460
char* pa_channel_map_snprint(char *s, size_t l, const pa_channel_map *map) {
432
461
    unsigned channel;
433
 
    int first = 1;
 
462
    pa_bool_t first = TRUE;
434
463
    char *e;
435
464
 
436
465
    pa_assert(s);
437
466
    pa_assert(l > 0);
438
467
    pa_assert(map);
439
468
 
 
469
    pa_init_i18n();
 
470
 
 
471
    if (!pa_channel_map_valid(map)) {
 
472
        pa_snprintf(s, l, _("(invalid)"));
 
473
        return s;
 
474
    }
 
475
 
440
476
    *(e = s) = 0;
441
477
 
442
478
    for (channel = 0; channel < map->channels && l > 1; channel++) {
445
481
                      pa_channel_position_to_string(map->map[channel]));
446
482
 
447
483
        e = strchr(e, 0);
448
 
        first = 0;
 
484
        first = FALSE;
449
485
    }
450
486
 
451
487
    return s;
459
495
    pa_assert(rmap);
460
496
    pa_assert(s);
461
497
 
462
 
    memset(&map, 0, sizeof(map));
 
498
    pa_channel_map_init(&map);
463
499
 
464
500
    if (strcmp(s, "stereo") == 0) {
465
501
        map.channels = 2;
522
558
    if (map->channels <= 0 || map->channels > PA_CHANNELS_MAX)
523
559
        return 0;
524
560
 
525
 
    for (c = 0; c < map->channels; c++) {
526
 
 
527
 
        if (map->map[c] < 0 ||map->map[c] >= PA_CHANNEL_POSITION_MAX)
 
561
    for (c = 0; c < map->channels; c++)
 
562
        if (map->map[c] < 0 || map->map[c] >= PA_CHANNEL_POSITION_MAX)
528
563
            return 0;
529
564
 
530
 
    }
531
 
 
532
565
    return 1;
533
566
}
 
567
 
 
568
int pa_channel_map_compatible(const pa_channel_map *map, const pa_sample_spec *ss) {
 
569
    pa_assert(map);
 
570
    pa_assert(ss);
 
571
 
 
572
    if (!pa_channel_map_valid(map))
 
573
        return 0;
 
574
 
 
575
    if (!pa_sample_spec_valid(ss))
 
576
        return 0;
 
577
 
 
578
    return map->channels == ss->channels;
 
579
}