From 1d27acc3a74a4c3aabf810018ef2c6599d7ad904 Mon Sep 17 00:00:00 2001
From: Andrew Randrianasulu <randrianasulu@gmail.com>
Date: Sun, 20 Jun 2021 10:37:20 +0300
Subject: [PATCH 1/7] Try to fix exportedl.c

---
 cinelerra-5.1/cinelerra/exportedl.C | 45 +++++++++++++++++++++++++----
 1 file changed, 39 insertions(+), 6 deletions(-)

diff --git a/cinelerra-5.1/cinelerra/exportedl.C b/cinelerra-5.1/cinelerra/exportedl.C
index f4e3805c..88b740af 100644
--- a/cinelerra-5.1/cinelerra/exportedl.C
+++ b/cinelerra-5.1/cinelerra/exportedl.C
@@ -92,11 +92,12 @@ int ExportEDLAsset::edit_to_timecodes(Edit *edit,
 	double edit_sourceend;
 	double edit_deststart;
 	double edit_destend;
-
+	
+	if(!strcmp(reel_name,""))
 	strcpy(reel_name, "   BL   ");
-	edit_sourcestart = 0;
-	edit_sourceend = track->from_units(edit->length);
-
+	edit_sourcestart = track->from_units(edit->startsource);
+	edit_sourceend = track->from_units(edit->length + edit->startsource);
+	
 	edit_deststart = track->from_units(edit->startproject);
 	edit_destend = track->from_units(edit->startproject + edit->length);
 
@@ -138,8 +139,24 @@ void ExportEDLAsset::export_it()
 	{
 
 		// TODO: Find docs about exact header for CMX3600
-		fprintf(fh, "TITLE: Cinproj   FORMAT: CMX 3600 4-Ch\n");
-
+		// https://xmil.biz/EDL-X/CMX3600.pdf
+		double frame_rate = edl->session->frame_rate;
+		int frame_rate_int = (int)frame_rate;
+		char proj_title[BCTEXTLEN];
+		strcpy(proj_title,basename(mwindow->session->filename));
+		fprintf(fh, "TITLE: %s fps: %f\n", proj_title, frame_rate);
+		switch(frame_rate_int) {
+		case 24:
+		case 25:
+		case 50:
+		case 60:
+		if (frame_rate - frame_rate_int < 0.0001)
+		fprintf(fh, "FCM: NON-DROP FRAME\n"); // fixme: select depending on fps
+		break;
+		default:
+		if ((frame_rate - frame_rate_int > 0.0001) && (frame_rate == 29.97))
+		fprintf(fh, "FCM: DROP FRAME\n");
+		}
 		int colnum = 1;
 
 
@@ -147,6 +164,11 @@ void ExportEDLAsset::export_it()
 			edit;
 			edit = edit->next)
 		{
+		
+		// max number of entries in cmx3600
+		if (colnum > 999)
+		return;
+		
 			char reel_name[BCTEXTLEN];
 			char avselect[5];
 			char edittype[5] = "C   ";
@@ -155,6 +177,12 @@ void ExportEDLAsset::export_it()
 			char sourceoutpoint[12];
 			char destinpoint[12];
 			char destoutpoint[12];
+			
+			if(!edit->asset)
+			strcpy(reel_name,"BL  ");
+			else
+			strcpy(reel_name,"AX  ");
+			
 			if (track->data_type == TRACK_AUDIO)
 				strcpy(avselect, "A   ");
 			else
@@ -187,10 +215,15 @@ void ExportEDLAsset::export_it()
 			} else
 			{
 				edit_to_timecodes(edit, sourceinpoint, sourceoutpoint, destinpoint, destoutpoint, reel_name);
+				char filename[1024];
+				if (edit->asset)
+				strcpy(filename,basename(edit->asset->path));
 				fprintf(fh, "%03d %8s %s %4s %3s", colnum, reel_name, avselect, edittype, cutinfo);
 				fprintf(fh, " %s %s", sourceinpoint, sourceoutpoint);
 				fprintf(fh, " %s %s", destinpoint, destoutpoint);
 				fprintf(fh,"\n");
+				if(edit->asset)
+				fprintf(fh,"* FROM CLIP NAME: %s\n", filename);
 				last_dissolve = 0;
 			}
 
-- 
2.32.0

