Andrew has fixed Export EDL for CMX3600 output
[goodguy/cinelerra.git] / cinelerra-5.1 / cinelerra / pluginfclient.C
index 03ad7e25df9f1e7e8cbe51f310a8c9a45a9e36a5..f4d9ba3a48fe30a9cc874d1d6923d8d6230536b3 100644 (file)
@@ -8,6 +8,7 @@
 #include "bcwindowbase.h"
 #include "bctitle.h"
 #include "cstrdup.h"
+#include "keys.h"
 #include "language.h"
 #include "mwindow.h"
 #include "pluginfclient.h"
@@ -186,6 +187,10 @@ PluginFClientText::
 
 int PluginFClientText::handle_event()
 {
+       if( get_keypress() == RETURN ) {
+               fwin->update();
+               activate();
+       }
        return 0;
 }
 
@@ -840,7 +845,8 @@ static AVRational best_frame_rate(double frame_rate)
        static const int m1 = 1001*12, m2 = 1000*12;
        static const int freqs[] = {
                40*m1, 48*m1, 50*m1, 60*m1, 80*m1,120*m1, 240*m1,
-               24*m2, 30*m2, 60*m2, 12*m2, 15*m2, 48*m2, 0,
+               24*m2, 30*m2, 60*m2, 12*m2, 15*m2, 48*m2, 90*m2,
+               100*m2, 120*m2, 144*m2, 72*m2, 0,
        };
        double max_err = 1.;
        int freq, best_freq = 0;
@@ -884,7 +890,7 @@ int PluginFVClient::activate(int width, int height, int color_model)
                char args[BCTEXTLEN];
                snprintf(args, sizeof(args),
                        "video_size=%dx%d:pix_fmt=%d:time_base=%d/%d:pixel_aspect=%d/%d",
-                       width, height, pix_fmt, best_rate.num, best_rate.den, aspect_w, aspect_h);
+                       width, height, pix_fmt, best_rate.den, best_rate.num, aspect_w, aspect_h);
                ret = avfilter_graph_create_filter(&fsrc, avfilter_get_by_name("buffer"),
                        "in", args, NULL, graph);
        }
@@ -942,7 +948,7 @@ int PluginFAClient::process_buffer(int64_t size, Samples **buffer, int64_t start
                frame->format = AV_SAMPLE_FMT_FLTP;
                frame->channel_layout = (1<<in_channels)-1;
                frame->sample_rate = sample_rate;
-               frame->pts = local_to_edl(filter_position);
+               frame->pts = filter_position;
        }
 
        int retry = 10;
@@ -1002,7 +1008,9 @@ int PluginFAClient::process_buffer(int64_t size, Samples **buffer, int64_t start
 
 
 PluginFVClient::PluginFVClient(PluginServer *server, const char *name)
- : PluginVClient(server), PluginFClient(this, name)
+ : PluginVClient(server),
+   PluginFClient(this, name),
+   FFVideoConvert(server->preferences)
 {
 }
 
@@ -1041,11 +1049,11 @@ int PluginFVClient::process_buffer(VFrame **frames, int64_t position, double fra
                ret = av_buffersink_get_frame(fsink, frame);
                if( ret >= 0 || ret != AVERROR(EAGAIN) ) break;
                if( !fsrc ) { ret = AVERROR(EIO);  break; }
-               read_frame(vframe, 0, filter_position++, frame_rate, 0);
+               read_frame(vframe, 0, filter_position, frame_rate, 0);
                frame->format = pix_fmt;
                frame->width  = width;
                frame->height = height;
-               frame->pts = local_to_edl(position);
+               frame->pts = filter_position++;
                ret = av_frame_get_buffer(frame, 32);
                if( ret < 0 ) break;
                ret = transfer_pixfmt(vframe, frame);