aboutsummaryrefslogtreecommitdiff
path: root/src/ui/shadedbar.cpp
Commit message (Expand)AuthorAgeFilesLines
* removed unused debug messagestrialuser022008-02-181-1/+0
* new directory structurevovanec2008-02-071-0/+139
trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> 2014-02-02 08:12:29 +0000 fixed clang warnings' href='/qmmp/commit/src/plugins/Output/alsa/outputalsa.h?id=ba185860cee73a919231d46e9271c0837572de6a'>ba185860c
2d622fd9b














a8bf072ec
2d622fd9b

76f436c36

2d622fd9b


d26eba2fa

2d622fd9b

8446b57d0
76f436c36
8446b57d0
74afcc2d9
2d622fd9b
2d622fd9b

2d622fd9b
8bded202c
2d622fd9b

76f436c36
a030a982f
8bded202c
a030a982f
d2d062fa7



2d622fd9b
8bded202c
2d622fd9b
6963d98b9
a030a982f
2d622fd9b
a030a982f

2d622fd9b

2d622fd9b
6963d98b9
a030a982f



c685eb34a
76f436c36
5fb7e3e4b
76f436c36
5fb7e3e4b
d26eba2fa

74afcc2d9
d26eba2fa
1ef98753f
d26eba2fa
74afcc2d9
e747c2b87
d26eba2fa
75c4eaf61

d26eba2fa
1ef98753f

d26eba2fa

2d622fd9b

e747c2b87


2d622fd9b
2d622fd9b

2d622fd9b
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
                                                                            
                                                                            














                                                                            
                                                                            

                                                                             

                    


                 

          

                           
 
                
                        
                        
 

                                
       
                 

                  
                                                                       
                
                     
                                                           



                   
 
        
                       
                                                    
                        
 

                    

                          
                   
                                   



                         
                     
                         
                                 
                                                           
      

  
                                
 
            
       
                 
                          
 

                                              
 

                                 

                

                                                            


                                                                                
                                  

  
                      
/***************************************************************************
 *   Copyright (C) 2006-2014 by Ilya Kotov                                 *
 *   forkotov02@hotmail.ru                                                 *
 *                                                                         *
 *   This program is free software; you can redistribute it and/or modify  *
 *   it under the terms of the GNU General Public License as published by  *
 *   the Free Software Foundation; either version 2 of the License, or     *
 *   (at your option) any later version.                                   *
 *                                                                         *
 *   This program is distributed in the hope that it will be useful,       *
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
 *   GNU General Public License for more details.                          *
 *                                                                         *
 *   You should have received a copy of the GNU General Public License     *
 *   along with this program; if not, write to the                         *
 *   Free Software Foundation, Inc.,                                       *
 *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.         *
 ***************************************************************************/

#ifndef OUTPUTALSA_H
#define OUTPUTALSA_H

class OutputALSA;

extern "C"
{
#include <alsa/asoundlib.h>
}

#include <QHash>
#include <qmmp/output.h>
#include <qmmp/volume.h>

class OutputALSA : public Output
{
public:
    OutputALSA();
    ~OutputALSA();

    bool initialize(quint32, ChannelMap map, Qmmp::AudioFormat format);
    //output api
    qint64 latency();
    qint64 writeAudio(unsigned char *data, qint64 maxSize);
    void drain();
    void reset();
    void suspend();
    void resume();

private:
    // helper functions
    long alsa_write(unsigned char *data, long size);
    void uninitialize();

    bool m_inited;
    bool m_use_mmap;
    //alsa
    snd_pcm_t *pcm_handle;
    char *pcm_name;
    snd_pcm_uframes_t m_chunk_size;
    //prebuffer
    uchar *m_prebuf;
    qint64 m_prebuf_size;
    qint64 m_prebuf_fill;
    bool m_can_pause;
    //channel conversions
#if (SND_LIB_VERSION >= 0x01001B)
    QHash <quint16, Qmmp::ChannelPosition> m_alsa_channels;
#endif
};

class VolumeALSA : public Volume
{
    Q_OBJECT
public:
    VolumeALSA();
    virtual ~VolumeALSA();

    void setVolume(const VolumeSettings &vol);
    VolumeSettings volume() const;

    bool hasNotifySignal() const;

private:
    //alsa mixer
    int setupMixer(QString card, QString device);
    void parseMixerName(char *str, char **name, int *index);
    int getMixer(snd_mixer_t **m_mixer, QString card);
    snd_mixer_elem_t* getMixerElem(snd_mixer_t *m_mixer, char *name, int index);
    snd_mixer_t *m_mixer;
    snd_mixer_elem_t *pcm_element;
};

#endif // OUTPUTALSA_H