add ffmpeg filters as plugins
[goodguy/history.git] / cinelerra-5.0 / cinelerra / fileffmpeg.h
index db46e696370fe133d360929569492877b1c53f29..ed95ee9460740e2b12c98f6d6999ab9b38ca6bcc 100644 (file)
@@ -3,11 +3,12 @@
 
 #include "asset.inc" 
 #include "bcwindowbase.inc"
+#include "bcprogressbox.inc"
 #include "bitspopup.inc" 
 #include "filebase.h"
 #include "fileffmpeg.inc"
-#include "mwindow.inc"
 #include "mutex.h"
+#include "thread.h"
 #include "vframe.inc"
 
 #include <stdio.h>
 #include <unistd.h>
 #include <string.h>
 
+class FileFFMPEG;
+class FFMpegConfigNum;
+class FFMpegAudioNum;
+class FFMpegVideoNum;
+class FFOkButton;
+class FFOptions;
+class FFMPEGConfigAudio;
+class FFAudioOptions;
+class FFMPEGConfigAudioPopup;
+class FFMPEGConfigAudioToggle;
+class FFMPEGConfigVideo;
+class FFVideoOptions;
+class FFMPEGConfigVideoPopup;
+class FFMPEGConfigVideoToggle;
 
 class FileFFMPEG : public FileBase
 {
@@ -33,8 +48,9 @@ public:
        int get_video_info(int track, int &pid, double &framerate,
                int &width, int &height, char *title=0);
        int get_audio_for_video(int vstream, int astream, int64_t &channel_mask);
-       static void get_info(char *path,char *text);
+       static void get_info(char *path,char *text,int len);
        int open_file(int rd,int wr);
+       int get_index(char *index_filename);
        int close_file(void);
        int set_video_position(int64_t pos);
        int set_audio_position(int64_t pos);
@@ -49,6 +65,63 @@ public:
        int select_audio_stream(Asset *asset, int astream);
 };
 
+class FFMpegConfigNum : public BC_TumbleTextBox
+{
+public:
+        FFMpegConfigNum(BC_Window *window, int x, int y,
+                char *title_text, int *output);
+        ~FFMpegConfigNum();
+
+        void create_objects();
+        int handle_event();
+        int *output;
+        BC_Window *window;
+        BC_Title *title;
+        char *title_text;
+        int x, y;
+};
+
+class FFMpegAudioNum : public FFMpegConfigNum
+{
+public:
+        FFMpegAudioNum(BC_Window *window, int x, int y, char *title_text, int *output);
+        ~FFMpegAudioNum() {}
+
+        FFMPEGConfigAudio *window() { return (FFMPEGConfigAudio *)FFMpegConfigNum::window; }
+};
+
+class FFMpegAudioBitrate : public FFMpegAudioNum
+{
+public:
+        FFMpegAudioBitrate(BC_Window *window, int x, int y, char *title_text, int *output)
+          : FFMpegAudioNum(window, x, y, title_text, output) {}
+       int handle_event();
+};
+
+class FFMpegVideoNum : public FFMpegConfigNum
+{
+public:
+        FFMpegVideoNum(BC_Window *window, int x, int y, char *title_text, int *output);
+        ~FFMpegVideoNum() {}
+
+        FFMPEGConfigVideo *window() { return (FFMPEGConfigVideo *)FFMpegConfigNum::window; }
+};
+
+class FFMpegVideoBitrate : public FFMpegVideoNum
+{
+public:
+        FFMpegVideoBitrate(BC_Window *window, int x, int y, char *title_text, int *output)
+          : FFMpegVideoNum(window, x, y, title_text, output) {}
+       int handle_event();
+};
+
+class FFMpegVideoQuality : public FFMpegVideoNum
+{
+public:
+        FFMpegVideoQuality(BC_Window *window, int x, int y, char *title_text, int *output)
+          : FFMpegVideoNum(window, x, y, title_text, output) {}
+       int handle_event();
+};
 
 class FFMPEGConfigAudio : public BC_Window
 {
@@ -61,10 +134,22 @@ public:
 
        ArrayList<BC_ListBoxItem*> presets;
        FFMPEGConfigAudioPopup *preset_popup;
+       FFMpegAudioBitrate *bitrate;
+       FFAudioOptions *audio_options;
        BC_WindowBase *parent_window;
        Asset *asset;
 };
 
+class FFAudioOptions : public BC_TextBox
+{
+public:
+       FFAudioOptions(FFMPEGConfigAudio *audio_popup,
+               int x, int y, int w, int rows, int size, char *text);
+       int handle_event();
+
+       FFMPEGConfigAudio *audio_popup;
+};
+
 
 class FFMPEGConfigAudioPopup : public BC_PopupTextBox
 {
@@ -97,9 +182,22 @@ public:
        ArrayList<BC_ListBoxItem*> presets;
        FFMPEGConfigVideoPopup *preset_popup;
        BC_WindowBase *parent_window;
+       FFMpegVideoBitrate *bitrate;
+       FFMpegVideoQuality *quality;
+       FFVideoOptions *video_options;
        Asset *asset;
 };
 
+class FFVideoOptions : public BC_TextBox
+{
+public:
+       FFVideoOptions(FFMPEGConfigVideo *video_popup,
+               int x, int y, int w, int rows, int size, char *text);
+       int handle_event();
+
+       FFMPEGConfigVideo *video_popup;
+};
+
 class FFMPEGConfigVideoPopup : public BC_PopupTextBox
 {
 public:
@@ -118,4 +216,17 @@ public:
        FFMPEGConfigVideo *popup;
 };
 
+class FFMPEGScanProgress : public Thread
+{
+public:
+       char progress_title[BCTEXTLEN];
+       BC_ProgressBox *progress;
+       int64_t length, *position;
+       int done, *canceled;
+
+       FFMPEGScanProgress(const char *title, int64_t length, int64_t *position, int *canceled);
+       ~FFMPEGScanProgress();
+       void run();
+};
+
 #endif