move aspect ratio fixex, better get_info, fixes for ffmpeg asset detection
[goodguy/history.git] / cinelerra-5.0 / cinelerra / fileffmpeg.h
1 #ifndef __FILEFFMPEG_H__
2 #define __FILEFFMPEG_H__
3
4 #include "asset.inc" 
5 #include "bcwindowbase.inc"
6 #include "bitspopup.inc" 
7 #include "filebase.h"
8 #include "fileffmpeg.inc"
9 #include "mwindow.inc"
10 #include "mutex.h"
11 #include "vframe.inc"
12
13 #include <stdio.h>
14 #include <stdint.h>
15 #include <stdlib.h>
16 #include <unistd.h>
17 #include <string.h>
18
19 class FileFFMPEG;
20 class FFMpegConfigNum;
21 class FFMpegAudioNum;
22 class FFMpegVideoNum;
23 class FFOkButton;
24 class FFOptions;
25 class FFMPEGConfigAudio;
26 class FFAudioOptions;
27 class FFMPEGConfigAudioPopup;
28 class FFMPEGConfigAudioToggle;
29 class FFMPEGConfigVideo;
30 class FFVideoOptions;
31 class FFMPEGConfigVideoPopup;
32 class FFMPEGConfigVideoToggle;
33
34 class FileFFMPEG : public FileBase
35 {
36 public:
37         FFMPEG *ff;
38
39         FileFFMPEG(Asset *asset, File *file);
40         ~FileFFMPEG();
41         static void ff_lock(const char *cp=0);
42         static void ff_unlock();
43
44         static void get_parameters(BC_WindowBase *parent_window,Asset *asset,
45            BC_WindowBase *&format_window,int audio_options,int video_options);
46         static int check_sig(Asset *asset);
47         int get_video_info(int track, int &pid, double &framerate,
48                 int &width, int &height, char *title=0);
49         int get_audio_for_video(int vstream, int astream, int64_t &channel_mask);
50         static void get_info(char *path,char *text,int len);
51         int open_file(int rd,int wr);
52         int close_file(void);
53         int set_video_position(int64_t pos);
54         int set_audio_position(int64_t pos);
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 #endif