fix shuttle for Termux/Android too
[goodguy/cinelerra.git] / cinelerra-5.1 / cinelerra / filesndfile.h
1
2 /*
3  * CINELERRA
4  * Copyright (C) 2008 Adam Williams <broadcast at earthling dot net>
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software
18  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19  *
20  */
21
22 #ifndef FILESNDFILE_H
23 #define FILESNDFILE_H
24
25 #include <stdio.h>
26 #include <stdint.h>
27
28 #include "bitspopup.inc"
29 #include "edl.inc"
30 #include "filebase.h"
31 #include "filesndfile.h"
32 #include "sndfile.h"
33
34 // The following libsndfile files have to be modified to support VFS.
35 // They need to use FILE * instead of file descriptors.
36 // open doesn't seem to be overridable.
37 // file_io.c
38 // sndfile.c
39 // sndfile.h
40
41 class FileSndFile : public FileBase
42 {
43 public:
44         FileSndFile(Asset *asset, File *file);
45         ~FileSndFile();
46
47         static int check_sig(Asset *asset);
48         int open_file(int rd, int wr);
49         int close_file();
50         int set_audio_position(int64_t sample);
51         int read_samples(double *buffer, int64_t len);
52         int write_samples(double **buffer, int64_t len);
53         void format_to_asset();
54         void asset_to_format();
55
56         static void get_parameters(BC_WindowBase *parent_window,
57                 Asset *asset, BC_WindowBase* &format_window,
58                 int audio_options, int video_options, EDL *edl);
59
60         SNDFILE *fd;
61         SF_INFO fd_config;
62 // Temp for interleaved channels
63         double *temp_double;
64         int64_t temp_allocated;
65 };
66
67 class SndFileConfig;
68
69 class SndFileHILO : public BC_Radial
70 {
71 public:
72         SndFileHILO(SndFileConfig *gui, int x, int y);
73         int handle_event();
74         SndFileConfig *gui;
75 };
76
77 class SndFileLOHI : public BC_Radial
78 {
79 public:
80         SndFileLOHI(SndFileConfig *gui, int x, int y);
81         int handle_event();
82         SndFileConfig *gui;
83 };
84
85
86 class SndFileConfig : public BC_Window
87 {
88 public:
89         SndFileConfig(BC_WindowBase *parent_window, Asset *asset);
90         ~SndFileConfig();
91
92         void create_objects();
93         int close_event();
94
95         BC_WindowBase *parent_window;
96         BitsPopup *bits_popup;
97         SndFileHILO *hilo;
98         SndFileLOHI *lohi;
99         Asset *asset;
100 };
101
102 #endif