+
+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;
+};
+