annotate signals/transfer.m @ 61:eff6bddf82e3
tip
Finally implemented perceptual brightness thing.
author |
samer |
date |
Sun, 11 Oct 2015 10:20:42 +0100 |
parents |
beb8a3f4a345 |
children |
|
rev |
line source |
samer@1
|
1 % transfer - Transfer samples from a signal to a sink
|
samer@1
|
2 %
|
samer@1
|
3 % transfer :: signal(C,R), sink(C,R) -> action natural.
|
samer@1
|
4 %
|
samer@1
|
5 % Returns the number of samples transfered.
|
samer@1
|
6 function n=transfer(sig,sink,varargin)
|
samer@37
|
7 opts=options('chunk',512,varargin{:});
|
samer@1
|
8 chunk=uint32(opts.chunk);
|
samer@1
|
9
|
samer@1
|
10 u=construct(sink);
|
samer@1
|
11 try
|
samer@1
|
12 write=u.writer(chunk);
|
samer@1
|
13 s=construct(sig);
|
samer@1
|
14 try % to make sure we dispose of s once opened
|
samer@1
|
15 n=uint32(0); CHUNK=1:chunk;
|
samer@1
|
16 x=zeros(channels(sig),chunk); % buffer
|
samer@1
|
17 r=s.reader(opts.chunk);
|
samer@1
|
18 rem=0;
|
samer@1
|
19 s.start();
|
samer@1
|
20 u.start();
|
samer@1
|
21 while rem==0
|
samer@1
|
22 [x,rem]=r();
|
samer@1
|
23 if rem==0, rem=write(x);
|
samer@1
|
24 else rem=rem+write(x(:,1:end-rem));
|
samer@1
|
25 end
|
samer@1
|
26 n=n+(chunk-rem);
|
samer@1
|
27 end
|
samer@1
|
28 u.stop();
|
samer@1
|
29 s.stop();
|
samer@1
|
30 catch ex
|
samer@1
|
31 s.dispose();
|
samer@1
|
32 rethrow(ex);
|
samer@1
|
33 end
|
samer@1
|
34 catch ex
|
samer@1
|
35 u.dispose();
|
samer@1
|
36 rethrow(ex);
|
samer@1
|
37 end
|
samer@1
|
38
|
samer@1
|
39 s.dispose();
|
samer@1
|
40 u.dispose();
|
samer@1
|
41 end
|