xref: /OK3568_Linux_fs/app/forlinx/flapp/src/plugins/allwinner/audiorecorder/widget.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1 #ifndef WIDGET_H
2 #define WIDGET_H
3 
4 #include <QWidget>
5 
6 #include <QTime>
7 #include <QTimer>
8 
9 #include "tinyalsasoundlib.h"
10 #include "iwidget.h"
11 
12 QT_BEGIN_NAMESPACE
13 namespace Ui { class Widget; }
14 QT_END_NAMESPACE
15 
16 #define ID_RIFF 0x46464952
17 #define ID_WAVE 0x45564157
18 #define ID_FMT  0x20746d66
19 #define ID_DATA 0x61746164
20 
21 #define FORMAT_PCM 1
22 
23 class Widget : public IWidget
24 {
25     Q_OBJECT
26 
27     Q_PLUGIN_METADATA(IID PLUGIN_INTERFACE_iid FILE "audiorecoreder.json")
28 
29 public:
30     struct wav_header {
31         uint32_t riff_id;
32         uint32_t riff_sz;
33         uint32_t riff_fmt;
34         uint32_t fmt_id;
35         uint32_t fmt_sz;
36         uint16_t audio_format;
37         uint16_t num_channels;
38         uint32_t sample_rate;
39         uint32_t byte_rate;
40         uint16_t block_align;
41         uint16_t bits_per_sample;
42         uint32_t data_id;
43         uint32_t data_sz;
44     };
45     Widget(QWidget *parent = nullptr);
46     ~Widget();
47     virtual QString id() override;
48 
49 private slots:
50     void on_pushButton_clicked();
51 
52     void on_startBtn_clicked();
53 
54     void on_stopBtn_clicked();
55 
56 private:
57     void record_init();
58 
59     unsigned int capture_sample();
60 
61     unsigned int capture_size;
62 
63     FILE *file;
64     struct wav_header header;
65     unsigned int card = 0;
66     unsigned int device = 0;
67     unsigned int ahub_card = 0;
68     unsigned int ahub_device = 0;
69     unsigned int channels = 2;
70     unsigned int seconds = 0;
71     unsigned int rate = 44100;
72     unsigned int bits = 16;
73     unsigned int frames;
74     unsigned int period_size = 1024;
75     unsigned int period_count = 4;
76     enum pcm_format format;
77 
78     bool capturing;
79 
80     QDateTime startTime;
81     QTimer timer;
82     Ui::Widget *ui;
83 };
84 #endif // WIDGET_H
85