fix single frame, eg png, by Andrew; fix shortcuts error by Phyllis
[goodguy/cinelerra.git] / cinelerra-5.1 / cinelerra / fileffmpeg.C
index 21e3067e2f4bbbd4203962979ceac13b442f40bc..43ed758b7b56f5f541852abe32811f38ae2e9e78 100644 (file)
@@ -326,7 +326,7 @@ int FileFFMPEG::open_file(int rd, int wr)
        int result = 0;
        if( ff ) return 1;
        ff = new FFMPEG(this);
-
+       
        if( rd ) {
                result = ff->init_decoder(asset->path);
                if( !result ) result = ff->open_decoder();
@@ -342,6 +342,13 @@ int FileFFMPEG::open_file(int rd, int wr)
                        int video_layers = ff->ff_total_video_layers();
                        if( video_layers > 0 ) {
                                asset->video_data = 1;
+                               asset->aspect_ratio = ff->ff_aspect_ratio(0);
+                               printf("ff_aspect_ratio, %f \n", asset->aspect_ratio);
+                               if (!asset->interlace_mode) asset->interlace_mode = ff->ff_interlace(0);
+                               if ( ff->ff_video_frames(0) > 1 ) {
+                               ff->video_probe(1);
+                                if (!asset->interlace_mode && (ff->interlace_from_codec) ) asset->interlace_mode = ff->video_probe(1); 
+                               }
                                if( !asset->layers ) asset->layers = video_layers;
                                asset->actual_width = ff->ff_video_width(0);
                                asset->actual_height = ff->ff_video_height(0);
@@ -864,10 +871,10 @@ void FFMPEGConfigFormat::save_options()
 }
 void FFMPEGConfigFormat::save_changes()
 {
+       read_options();
        char *options = asset->ff_format_options;
        int options_len = sizeof(asset->ff_format_options)-1;
        ff_options_dialog->store_options(options, options_len);
-       format_options->update(options);
 }
 
 void FFMPEGConfigFormat::load_options()
@@ -1938,6 +1945,15 @@ int FFOptionsFormatView::handle_event()
 {
        Asset *asset = fmt_config->asset;
        char *format_name = asset->fformat;
+       char *replace_name0 = "mov";
+       char *replace_name1 = "mpegts";
+       char *replace_name2 = "matroska";
+       if (!strcmp(format_name, "qt"))
+               format_name = replace_name0; // fixup
+       if (!strcmp(format_name, "m2ts"))
+               format_name = replace_name1; // fixup
+       if (!strcmp(format_name, "mkv"))
+               format_name = replace_name2; // fixup
        avformat_free_context(fmt_ctx);  fmt_ctx = 0;
        int ret = avformat_alloc_output_context2(&fmt_ctx, 0, format_name, 0);
        if( ret || !fmt_ctx ) {
@@ -1974,11 +1990,8 @@ BC_Window *FFOptionsFormatViewDialog::new_gui()
 
 void FFOptionsFormatViewDialog::handle_done_event(int result)
 {
-       if( !result ) {
-               cfg_window->lock_window("FFOptionsFormatViewDialog::handle_done_event");
+       if( !result )
                cfg_window->save_changes();
-               cfg_window->unlock_window();
-       }
        cfg_window = 0;
 }