bunch of small fixes, add msg.txt to about prefs
[goodguy/history.git] / cinelerra-5.0 / cinelerra / formattools.C
index e5f8c9ade6eba22c70530a4aafbe5e21a9fe79fe..bdc96d4ea4496bbdcecd728a5d326581f7b46b87 100644 (file)
@@ -364,7 +364,6 @@ void FormatTools::update_driver(int driver)
 void FormatTools::update_format()
 {
        if( do_audio && prompt_audio && audio_switch ) {
-               asset->audio_data = File::supports_audio(asset->format);
                audio_switch->update(asset->audio_data);
                if( !asset->audio_data )
                        audio_switch->disable();
@@ -372,7 +371,6 @@ void FormatTools::update_format()
                        audio_switch->enable();
        }
        if( do_video && prompt_video && video_switch ) {
-               asset->video_data = File::supports_video(asset->format);
                video_switch->update(asset->video_data);
                if( !asset->video_data )
                        video_switch->disable();
@@ -828,7 +826,10 @@ int FormatFormat::handle_event()
                int new_format = File::strtoformat(format->plugindb, get_selection(0, 0)->get_text());
 //             if(new_format != format->asset->format)
                {
-                       format->asset->format = new_format;
+                       Asset *asset = format->asset;
+                       asset->format = new_format;
+                       asset->audio_data = File::supports_audio(asset->format);
+                       asset->video_data = File::supports_video(asset->format);
                        format->format_text->update(selection->get_text());
                        format->update_extension();
                        format->close_format_windows();
@@ -849,15 +850,40 @@ FormatFFMPEG::~FormatFFMPEG()
 {
 }
 
+int FormatFFMPEG::load_defaults(const char *path, const char *type,
+                char *codec, char *codec_options, int len)
+{
+       char default_file[BCTEXTLEN];
+       FFMPEG::set_option_path(default_file, "%s/%s.dfl", path, type);
+       FILE *fp = fopen(default_file,"r");
+       if( !fp ) return 1;
+       fgets(codec, BCSTRLEN, fp);
+       char *cp = codec;
+       while( *cp && *cp!='\n' ) ++cp;
+       *cp = 0;
+       while( len > 0 && fgets(codec_options, len, fp) ) {
+               int n = strlen(codec_options);
+               codec_options += n;  len -= n;
+       }
+       fclose(fp);
+       FFMPEG::set_option_path(default_file, "%s/%s", path, codec);
+       return FFMPEG::load_options(default_file, codec_options, len);
+}
+
 int FormatFFMPEG::handle_event()
 {
        BC_ListBoxItem *selection = get_selection(0, 0);
        if( selection ) {
                char *text = get_selection(0, 0)->get_text();
                format->ffmpeg_type->update(text);
-               strcpy(format->asset->fformat, text);
-               strcpy(format->asset->ff_audio_options, "");
-               strcpy(format->asset->ff_video_options, "");
+               Asset *asset = format->asset;
+               strcpy(asset->fformat, text);
+               strcpy(asset->ff_audio_options, "");
+               strcpy(asset->ff_video_options, "");
+               asset->audio_data = !load_defaults("audio", text, asset->acodec,
+                       asset->ff_audio_options, sizeof(asset->ff_audio_options));
+               asset->video_data = !load_defaults("video", text, asset->vcodec,
+                       asset->ff_video_options, sizeof(asset->ff_video_options));
                format->update_extension();
                format->close_format_windows();
                format->update_format();