File: resampler.h

package info (click to toggle)
libretro-snes9x 1.53%2Bgit20160522-1
  • links: PTS
  • area: non-free
  • in suites: bullseye, buster, stretch
  • size: 3,048 kB
  • ctags: 6,243
  • sloc: cpp: 58,003; makefile: 212; sh: 2
file content (60 lines) | stat: -rw-r--r-- 1,250 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
/* Simple resampler based on bsnes's ruby audio library */

#ifndef __RESAMPLER_H
#define __RESAMPLER_H

#include "ring_buffer.h"

class Resampler : public ring_buffer
{
    public:
        virtual void clear (void)        = 0;
        virtual void time_ratio (double) = 0;
        virtual void read (short *, int) = 0;
        virtual int  avail (void)        = 0;
    
        Resampler (int num_samples) : ring_buffer (num_samples << 1)
        {
        }

        ~Resampler ()
        {
        }

        inline bool
        push (short *src, int num_samples)
        {
            if (max_write () < num_samples)
                return false;

            !num_samples || ring_buffer::push ((unsigned char *) src, num_samples << 1);

            return true;
        }

        inline int
        space_empty (void)
        {
            return buffer_size - size;
        }
    
        inline int
        space_filled (void)
        {
            return size;
        }
        
        inline int
        max_write (void)
        {
            return space_empty () >> 1;
        }

        inline void
        resize (int num_samples)
        {
            ring_buffer::resize (num_samples << 1);
        }
};

#endif /* __RESAMPLER_H */