search fixes, preset fixes, ladspa icon logging, igor pref theme, drag btn rollover
[goodguy/history.git] / cinelerra-5.1 / cinelerra / fileffmpeg.h
index 907a65637e1094039024646b616d93d712afcded..973cde15c847ff8f42eb48b624732a94311f522e 100644 (file)
@@ -1,9 +1,11 @@
 #ifndef __FILEFFMPEG_H__
 #define __FILEFFMPEG_H__
 
-#include "asset.inc" 
+#include "asset.inc"
+#include "bcdialog.h"
 #include "bcwindowbase.inc"
-#include "bitspopup.inc" 
+#include "bitspopup.inc"
+#include "ffmpeg.h"
 #include "filebase.h"
 #include "fileffmpeg.inc"
 #include "indexfile.inc"
 #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
 {
@@ -43,6 +31,7 @@ public:
        static void ff_lock(const char *cp=0);
        static void ff_unlock();
 
+       static void set_parameters(char *cp, int len, const char *bp);
        static void get_parameters(BC_WindowBase *parent_window,Asset *asset,
           BC_WindowBase *&format_window,int audio_options,int video_options);
        static int check_sig(Asset *asset);
@@ -50,6 +39,10 @@ public:
                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,int len);
+       static int can_render(const char *fformat, const char *type);
+       static int renders_audio(const char *fformat) { return can_render(fformat, "audio"); }
+       static int renders_video(const char *fformat) { return can_render(fformat, "video"); }
+       static int get_ff_option(const char *nm, const char *options, char *value);
        int open_file(int rd,int wr);
        int get_index(IndexFile *index_file, MainProgressBar *progress_bar);
        int close_file(void);
@@ -57,6 +50,7 @@ public:
        int write_frames(VFrame ***frames,int len);
        int read_samples(double *buffer,int64_t len);
        int read_frame(VFrame *frame);
+       int can_scale_input() { return 1; }
        int64_t get_memory_usage(void);
        int colormodel_supported(int colormodel);
        static int get_best_colormodel(Asset *asset, int driver);
@@ -72,6 +66,7 @@ public:
         ~FFMpegConfigNum();
 
         void create_objects();
+       int update_param(const char *param, const char *opts);
         int handle_event();
         int *output;
         BC_Window *window;
@@ -137,14 +132,14 @@ public:
        FFAudioOptions *audio_options;
        BC_WindowBase *parent_window;
        Asset *asset;
+       FFOptionsDialog *ff_options_dialog;
 };
 
-class FFAudioOptions : public BC_TextBox
+class FFAudioOptions : public BC_ScrollTextBox
 {
 public:
        FFAudioOptions(FFMPEGConfigAudio *audio_popup,
                int x, int y, int w, int rows, int size, char *text);
-       int handle_event();
 
        FFMPEGConfigAudio *audio_popup;
 };
@@ -185,14 +180,14 @@ public:
        FFMpegVideoQuality *quality;
        FFVideoOptions *video_options;
        Asset *asset;
+       FFOptionsDialog *ff_options_dialog;
 };
 
-class FFVideoOptions : public BC_TextBox
+class FFVideoOptions : public BC_ScrollTextBox
 {
 public:
        FFVideoOptions(FFMPEGConfigVideo *video_popup,
                int x, int y, int w, int rows, int size, char *text);
-       int handle_event();
 
        FFMPEGConfigVideo *video_popup;
 };
@@ -230,4 +225,217 @@ public:
        void run();
 };
 
+
+class FFOptions_OptName : public BC_ListBoxItem {
+public:
+       FFOptions_Opt *opt;
+
+       FFOptions_OptName(FFOptions_Opt *opt, const char *nm);
+       ~FFOptions_OptName();
+
+};
+
+class FFOptions_OptValue : public BC_ListBoxItem {
+public:
+       FFOptions_Opt *opt;
+
+       void update();
+       void update(const char *v);
+       FFOptions_OptValue(FFOptions_Opt *opt);
+};
+
+class FFOptions_Opt {
+public:
+       FFOptions *options;
+       const AVOption *opt;
+       FFOptions_OptName *item_name;
+       FFOptions_OptValue *item_value;
+
+       char *get(char *vp, int sz=-1);
+       void set(const char *val);
+       int types(char *rp);
+       int scalar(double d, char *rp);
+       int ranges(char *rp);
+       int units(ArrayList<const char *> &opts);
+       const char *unit_name(int id);
+       int units(char *rp);
+       const char *tip();
+
+       FFOptions_Opt(FFOptions *options, const AVOption *opt, const char *nm);
+       ~FFOptions_Opt();
+};
+
+class FFOptions : public ArrayList<FFOptions_Opt *>
+{
+public:
+       FFOptions();
+       ~FFOptions();
+       FFOptionsWindow *win;
+       AVCodecContext *avctx;
+       const void *obj;
+
+       void initialize(FFOptionsWindow *win, int k);
+       static int cmpr(const void *a, const void *b);
+       int update();
+       void dump(FILE *fp);
+};
+
+class FFOptions_OptPanel : public BC_ListBox {
+public:
+       FFOptions_OptPanel(FFOptionsWindow *fwin, int x, int y, int w, int h);
+       ~FFOptions_OptPanel();
+       void create_objects();
+       int cursor_leave_event();
+
+       FFOptionsWindow *fwin;
+       ArrayList<BC_ListBoxItem*> items[2];
+       ArrayList<BC_ListBoxItem*> &opts;
+       ArrayList<BC_ListBoxItem*> &vals;
+       char tip_text[BCTEXTLEN];
+
+       int selection_changed();
+       int update();
+       void show_tip(const char *tip);
+};
+
+class FFOptionsKindItem : public BC_MenuItem
+{
+public:
+       FFOptionsKind *kind;
+       int idx;
+       int handle_event();
+       void show_label();
+
+       FFOptionsKindItem(FFOptionsKind *kind, const char *name, int idx);
+       ~FFOptionsKindItem();
+};
+
+class FFOptionsKind : public BC_PopupMenu
+{
+       static const char *kinds[];
+public:
+       FFOptionsWindow *fwin;
+       int kind;
+
+       void create_objects();
+       int handle_event();
+       void set(int k);
+
+       FFOptionsKind(FFOptionsWindow *fwin, int x, int y, int w);
+       ~FFOptionsKind();
+};
+
+class FFOptionsUnits : public BC_PopupMenu {
+public:
+       FFOptionsWindow *fwin;
+
+       FFOptionsUnits(FFOptionsWindow *fwin, int x, int y, int w);
+       ~FFOptionsUnits();
+       int handle_event();
+};
+
+class FFOptionsText : public BC_TextBox {
+public:
+       FFOptionsWindow *fwin;
+
+       FFOptionsText(FFOptionsWindow *fwin, int x, int y, int w);
+       ~FFOptionsText();
+       int handle_event();
+};
+
+class FFOptionsApply : public BC_GenericButton {
+public:
+       FFOptionsWindow *fwin;
+
+       FFOptionsApply(FFOptionsWindow *fwin, int x, int y);
+       ~FFOptionsApply();
+       int handle_event();
+};
+
+class FFOptionsWindow : public BC_Window
+{
+public:
+       FFOptionsWindow(FFOptionsDialog *dialog);
+       ~FFOptionsWindow();
+
+       void create_objects();
+       void update(FFOptions_Opt *oip);
+       void draw();
+       int resize_event(int w, int h);
+
+       FFOptionsDialog *dialog;
+       FFOptions options;
+
+       FFOptions_OptPanel *panel;
+        int panel_x, panel_y, panel_w, panel_h;
+       BC_Title *type, *range, *kind_title;
+        FFOptions_Opt *selected;
+
+       FFOptionsKind *kind;
+       FFOptionsUnits *units;
+       FFOptionsText *text;
+       FFOptionsApply *apply;
+};
+
+class FFOptionsDialog : public BC_DialogThread
+{
+public:
+       FFOptionsDialog();
+       ~FFOptionsDialog();
+       virtual void update_options(const char *options) = 0;
+
+       void load_options(const char *bp, int len);
+       void store_options(char *cp, int len);
+       void start(const char *format_name, const char *codec_name,
+               AVCodec *codec, const char *options, int len);
+       BC_Window* new_gui();
+       void handle_done_event(int result);
+
+       FFOptionsWindow *options_window;
+       const char *format_name, *codec_name;
+       AVCodec *codec;
+       AVDictionary *ff_opts;
+       int ff_len;
+};
+
+class FFOptionsAudioDialog : public FFOptionsDialog
+{
+public:
+       FFMPEGConfigAudio *aud_config;
+       void update_options(const char *options);
+
+       FFOptionsAudioDialog(FFMPEGConfigAudio *aud_config);
+       ~FFOptionsAudioDialog();
+};
+
+class FFOptionsVideoDialog : public FFOptionsDialog
+{
+public:
+       FFMPEGConfigVideo *vid_config;
+       void update_options(const char *options);
+
+       FFOptionsVideoDialog(FFMPEGConfigVideo *vid_config);
+       ~FFOptionsVideoDialog();
+};
+
+class FFOptionsViewAudio: public BC_GenericButton
+{
+public:
+       FFOptionsViewAudio(FFMPEGConfigAudio *aud_config, int x, int y, const char *text);
+       ~FFOptionsViewAudio();
+
+       int handle_event();
+       FFMPEGConfigAudio *aud_config;
+};
+
+class FFOptionsViewVideo : public BC_GenericButton
+{
+public:
+       FFOptionsViewVideo(FFMPEGConfigVideo *vid_config, int x, int y, const char *text);
+       ~FFOptionsViewVideo();
+
+       int handle_event();
+       FFMPEGConfigVideo *vid_config;
+};
+
 #endif