prevent popup deactivation while button_down
[goodguy/history.git] / cinelerra-5.1 / cinelerra / fileffmpeg.h
1 #ifndef __FILEFFMPEG_H__
2 #define __FILEFFMPEG_H__
3
4 #include "asset.inc" 
5 #include "bcwindowbase.inc"
6 #include "bcprogressbox.inc"
7 #include "bitspopup.inc" 
8 #include "filebase.h"
9 #include "fileffmpeg.inc"
10 #include "mutex.h"
11 #include "thread.h"
12 #include "vframe.inc"
13
14 #include <stdio.h>
15 #include <stdint.h>
16 #include <stdlib.h>
17 #include <unistd.h>
18 #include <string.h>
19
20 class FileFFMPEG;
21 class FFMpegConfigNum;
22 class FFMpegAudioNum;
23 class FFMpegVideoNum;
24 class FFOkButton;
25 class FFOptions;
26 class FFMPEGConfigAudio;
27 class FFAudioOptions;
28 class FFMPEGConfigAudioPopup;
29 class FFMPEGConfigAudioToggle;
30 class FFMPEGConfigVideo;
31 class FFVideoOptions;
32 class FFMPEGConfigVideoPopup;
33 class FFMPEGConfigVideoToggle;
34
35 class FileFFMPEG : public FileBase
36 {
37 public:
38         FFMPEG *ff;
39
40         FileFFMPEG(Asset *asset, File *file);
41         ~FileFFMPEG();
42         static void ff_lock(const char *cp=0);
43         static void ff_unlock();
44
45         static void get_parameters(BC_WindowBase *parent_window,Asset *asset,
46            BC_WindowBase *&format_window,int audio_options,int video_options);
47         static int check_sig(Asset *asset);
48         int get_video_info(int track, int &pid, double &framerate,
49                 int &width, int &height, char *title=0);
50         int get_audio_for_video(int vstream, int astream, int64_t &channel_mask);
51         static void get_info(char *path,char *text,int len);
52         int open_file(int rd,int wr);
53         int get_index(char *index_filename);
54         int close_file(void);
55         int write_samples(double **buffer,int64_t len);
56         int write_frames(VFrame ***frames,int len);
57         int read_samples(double *buffer,int64_t len);
58         int read_frame(VFrame *frame);
59         int64_t get_memory_usage(void);
60         int colormodel_supported(int colormodel);
61         int get_best_colormodel(Asset *asset,int driver);
62         int select_video_stream(Asset *asset, int vstream);
63         int select_audio_stream(Asset *asset, int astream);
64 };
65
66 class FFMpegConfigNum : public BC_TumbleTextBox
67 {
68 public:
69         FFMpegConfigNum(BC_Window *window, int x, int y,
70                 char *title_text, int *output);
71         ~FFMpegConfigNum();
72
73         void create_objects();
74         int handle_event();
75         int *output;
76         BC_Window *window;
77         BC_Title *title;
78         char *title_text;
79         int x, y;
80 };
81
82 class FFMpegAudioNum : public FFMpegConfigNum
83 {
84 public:
85         FFMpegAudioNum(BC_Window *window, int x, int y, char *title_text, int *output);
86         ~FFMpegAudioNum() {}
87
88         FFMPEGConfigAudio *window() { return (FFMPEGConfigAudio *)FFMpegConfigNum::window; }
89 };
90
91 class FFMpegAudioBitrate : public FFMpegAudioNum
92 {
93 public:
94         FFMpegAudioBitrate(BC_Window *window, int x, int y, char *title_text, int *output)
95           : FFMpegAudioNum(window, x, y, title_text, output) {}
96         int handle_event();
97 };
98
99 class FFMpegVideoNum : public FFMpegConfigNum
100 {
101 public:
102         FFMpegVideoNum(BC_Window *window, int x, int y, char *title_text, int *output);
103         ~FFMpegVideoNum() {}
104
105         FFMPEGConfigVideo *window() { return (FFMPEGConfigVideo *)FFMpegConfigNum::window; }
106 };
107
108 class FFMpegVideoBitrate : public FFMpegVideoNum
109 {
110 public:
111         FFMpegVideoBitrate(BC_Window *window, int x, int y, char *title_text, int *output)
112           : FFMpegVideoNum(window, x, y, title_text, output) {}
113         int handle_event();
114 };
115
116 class FFMpegVideoQuality : public FFMpegVideoNum
117 {
118 public:
119         FFMpegVideoQuality(BC_Window *window, int x, int y, char *title_text, int *output)
120           : FFMpegVideoNum(window, x, y, title_text, output) {}
121         int handle_event();
122 };
123
124 class FFMPEGConfigAudio : public BC_Window
125 {
126 public:
127         FFMPEGConfigAudio(BC_WindowBase *parent_window, Asset *asset);
128         ~FFMPEGConfigAudio();
129
130         void create_objects();
131         int close_event();
132
133         ArrayList<BC_ListBoxItem*> presets;
134         FFMPEGConfigAudioPopup *preset_popup;
135         FFMpegAudioBitrate *bitrate;
136         FFAudioOptions *audio_options;
137         BC_WindowBase *parent_window;
138         Asset *asset;
139 };
140
141 class FFAudioOptions : public BC_TextBox
142 {
143 public:
144         FFAudioOptions(FFMPEGConfigAudio *audio_popup,
145                 int x, int y, int w, int rows, int size, char *text);
146         int handle_event();
147
148         FFMPEGConfigAudio *audio_popup;
149 };
150
151
152 class FFMPEGConfigAudioPopup : public BC_PopupTextBox
153 {
154 public:
155         FFMPEGConfigAudioPopup(FFMPEGConfigAudio *popup, int x, int y);
156         int handle_event();
157         FFMPEGConfigAudio *popup;
158 };
159
160
161 class FFMPEGConfigAudioToggle : public BC_CheckBox
162 {
163 public:
164         FFMPEGConfigAudioToggle(FFMPEGConfigAudio *popup,
165                 char *title_text, int x, int y, int *output);
166         int handle_event();
167         int *output;
168         FFMPEGConfigAudio *popup;
169 };
170
171 class FFMPEGConfigVideo : public BC_Window
172 {
173 public:
174         FFMPEGConfigVideo(BC_WindowBase *parent_window, Asset *asset);
175         ~FFMPEGConfigVideo();
176
177         void create_objects();
178         int close_event();
179
180         ArrayList<BC_ListBoxItem*> presets;
181         FFMPEGConfigVideoPopup *preset_popup;
182         BC_WindowBase *parent_window;
183         FFMpegVideoBitrate *bitrate;
184         FFMpegVideoQuality *quality;
185         FFVideoOptions *video_options;
186         Asset *asset;
187 };
188
189 class FFVideoOptions : public BC_TextBox
190 {
191 public:
192         FFVideoOptions(FFMPEGConfigVideo *video_popup,
193                 int x, int y, int w, int rows, int size, char *text);
194         int handle_event();
195
196         FFMPEGConfigVideo *video_popup;
197 };
198
199 class FFMPEGConfigVideoPopup : public BC_PopupTextBox
200 {
201 public:
202         FFMPEGConfigVideoPopup(FFMPEGConfigVideo *popup, int x, int y);
203         int handle_event();
204         FFMPEGConfigVideo *popup;
205 };
206
207 class FFMPEGConfigVideoToggle : public BC_CheckBox
208 {
209 public:
210         FFMPEGConfigVideoToggle(FFMPEGConfigVideo *popup,
211                 char *title_text, int x, int y, int *output);
212         int handle_event();
213         int *output;
214         FFMPEGConfigVideo *popup;
215 };
216
217 class FFMPEGScanProgress : public Thread
218 {
219 public:
220         char progress_title[BCTEXTLEN];
221         BC_ProgressBox *progress;
222         int64_t length, *position;
223         int done, *canceled;
224
225         FFMPEGScanProgress(const char *title, int64_t length, int64_t *position, int *canceled);
226         ~FFMPEGScanProgress();
227         void run();
228 };
229
230 #endif