~vcs-imports/shtoom/main

« back to all changes in this revision

Viewing changes to shtoom/test/test_playout.py

  • Committer: anthony
  • Date: 2005-03-31 14:37:57 UTC
  • Revision ID: Arch-1:shtoom@bazaar.ubuntu.com%shtoom--trunk--0--patch-981
* ALSA handles stereo-only devices now
* Microphone samples are asynchronously pushed up by the lower layers
rather than being polled by the upper layers. On Mac, the high-precision
realtime thread is used to push microphone samples. This fixes a bug
with short reads and a bug with inaccurate polling. On ALSA, there is a
LoopingCall in the ALSA driver that polls at an appropriate interval.
* The encoder base class has a buffer to store up the appropriate
bytes of microphone data to make up a media frame. This buffer gets
flushed when the audio device closes or reopens.
* The audio device gets closed and reopened during important state
transitions, namely call start and call end. This fixes the "That jerk!"
bug, in which you could say "I have to call that jerk!" immediately
before a call connected and then the jerk in question would hear you say
it when he answered.
* Remove some extremely detailed diags that measured the number of 
packets sent per second and the number of packets received per second.
Those diags have served well and are now retired.
* The Mac audio loopback test is rewritten, and a bug involving
closing the loopback test versus closing a phone call is fixed.
* The discovery/selection of the appropriate audio device is done
before the construction of the Phone object. This makes the other
platforms' initialization process parallel to the Mac initialization
process, and also I prefer this approach. (The other approach is that
you construct the Phone object and then it discovers/selects the audio
device itself.)
* Plays ringing sounds for inbound and outbound ringing sounds
* New audio_device option for selecting a different ALSA or OSS device
* New playout algorithm

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2004 Anthony Baxter
2
 
"""Tests for shtoom.audio.playout
3
 
"""
4
 
 
5
 
from twisted.trial import unittest
6
 
from shtoom.audio.playout import BrainDeadPlayout, BacklogPlayout, Playout, _Playout
7
 
from shtoom.rtp.packets import RTPPacket
8
 
 
9
 
class BrainDeadPlayoutTests(unittest.TestCase):
10
 
 
11
 
    def test_playout_ctor(self):
12
 
        a_ = self.assert_
13
 
        b = BrainDeadPlayout()
14
 
        a_(isinstance(b, _Playout))
15
 
        b = Playout()
16
 
        a_(isinstance(b, _Playout))
17
 
 
18
 
    def test_braindead(self):
19
 
        ae = self.assertEquals
20
 
        p = BrainDeadPlayout()
21
 
        p.write('1')
22
 
        p.write('2')
23
 
        ae(p.read(), '1')
24
 
        ae(p.read(), '2')
25
 
        ae(p.read(), '')
26
 
        p.write('3')
27
 
        p.write('4')
28
 
        p.write('5')
29
 
        p.write('6')
30
 
        ae(p.read(), '5')
31
 
        ae(p.read(), '6')
32
 
        ae(p.read(), '')
33
 
        p.write('7')
34
 
        ae(p.read(), '')
35
 
        p.write('8')
36
 
        ae(p.read(), '7')
37
 
        p.write('9')
38
 
        ae(p.read(), '8')
39
 
        ae(p.read(), '9')
40
 
        ae(p.read(), '')
41
 
        p.write('1')
42
 
        p.write('')
43
 
        ae(p.read(), '1')
44
 
        p.write('2')
45
 
        ae(p.read(), '')
46
 
        ae(p.read(), '2')
47
 
        ae(p.read(), '')
48
 
        ae(p.read(), '')
49
 
        p.write('1')
50
 
        ae(p.read(), '')
51
 
        p.write('2')
52
 
        ae(p.read(), '1')
53
 
        p.write('3')
54
 
        ae(p.read(), '2')
55
 
        p.write('4')
56
 
        ae(p.read(), '3')
57
 
        ae(p.read(), '4')
58
 
        ae(p.read(), '')
59
 
        ae(p.read(), '')
60
 
 
61
 
    def test_playout_packets(self):
62
 
        "Test with RTP Packets"
63
 
 
64
 
        ae = self.assertEquals
65
 
        for playout in ( BrainDeadPlayout, BacklogPlayout ): 
66
 
 
67
 
            def _packetgen():
68
 
                ts = 0
69
 
                seq = 10017
70
 
                while True:
71
 
                    p = RTPPacket(0, seq, ts, '')
72
 
                    yield p
73
 
                    ts += 160
74
 
                    seq += 1
75
 
            p = playout()
76
 
            pg = _packetgen()
77
 
            p.write('1',pg.next())
78
 
            p.write('2',pg.next())
79
 
            raise unittest.SkipTest('fix later')
80
 
            
81
 
            ae(p.read(), '1')
82
 
            ae(p.read(), '2')
83
 
            ae(p.read(), '')
84
 
            p.write('3',pg.next())
85
 
            p.write('4',pg.next())
86
 
            p.write('5',pg.next())
87
 
            p.write('6',pg.next())
88
 
            ae(p.read(), '5')
89
 
            ae(p.read(), '6')
90
 
            ae(p.read(), '')
91
 
            p.write('7',pg.next())
92
 
            ae(p.read(), '')
93
 
            p.write('8',pg.next())
94
 
            ae(p.read(), '7')
95
 
            p.write('9',pg.next())
96
 
            ae(p.read(), '8')
97
 
            ae(p.read(), '9')
98
 
            ae(p.read(), '')
99
 
            p.write('1',pg.next())
100
 
            p.write('',pg.next())
101
 
            ae(p.read(), '1')
102
 
            p.write('2',pg.next())
103
 
            ae(p.read(), '')
104
 
            ae(p.read(), '2')
105
 
            ae(p.read(), '')
106
 
            ae(p.read(), '')
107
 
            p.write('1',pg.next())
108
 
            ae(p.read(), '')
109
 
            p.write('2',pg.next())
110
 
            ae(p.read(), '1')
111
 
            p.write('3',pg.next())
112
 
            ae(p.read(), '2')
113
 
            p.write('4',pg.next())
114
 
            ae(p.read(), '3')
115
 
            ae(p.read(), '4')
116
 
            ae(p.read(), '')
117
 
            ae(p.read(), '')