So, I was working on restoring direct copy support for cinelerra-cv and
realized I can xcheck Cin-GG too.

I think attached two patches make it possible to skip de/encoding for
unchaged portions of timeline when working with image lists of exr and ppm
types (in addition to png/tiff/tga/jpeg support already there)

Please test?
From 7e376e1ea1bac200eaf47599d6aa9922ef163de6 Mon Sep 17 00:00:00 2001
From: Andrew Randrianasulu <[email protected]>
Date: Wed, 26 Oct 2022 19:45:23 +0300
Subject: [PATCH 1/2] Add fileppm direct copy

---
 cinelerra-5.1/cinelerra/fileppm.C | 9 +++++++++
 cinelerra-5.1/cinelerra/fileppm.h | 1 +
 2 files changed, 10 insertions(+)

diff --git a/cinelerra-5.1/cinelerra/fileppm.C b/cinelerra-5.1/cinelerra/fileppm.C
index e91690a1..fe10742d 100644
--- a/cinelerra-5.1/cinelerra/fileppm.C
+++ b/cinelerra-5.1/cinelerra/fileppm.C
@@ -183,6 +183,15 @@ int FilePPM::write_frame(VFrame *frame, VFrame *output,
 	return 0;
 }
 
+int FilePPM::can_copy_from(Asset *asset, int64_t position)
+{
+	if(asset->format == FILE_PPM ||
+		asset->format == FILE_PPM_LIST)
+		return 1;
+
+	return 0;
+}
+
 int FilePPM::colormodel_supported(int colormodel)
 {
 	return BC_RGB888;
diff --git a/cinelerra-5.1/cinelerra/fileppm.h b/cinelerra-5.1/cinelerra/fileppm.h
index ec6a094a..4711b107 100644
--- a/cinelerra-5.1/cinelerra/fileppm.h
+++ b/cinelerra-5.1/cinelerra/fileppm.h
@@ -43,6 +43,7 @@ public:
 	int check_frame_header(FILE *fp);
 	int read_frame_header(char *path);
 	int write_frame(VFrame *frame, VFrame *output, FrameWriterUnit *unit);
+	int can_copy_from(Asset *asset, int64_t position);
 	FrameWriterUnit* new_writer_unit(FrameWriter *writer);
 	static void get_parameters(BC_WindowBase *parent_window,
 		Asset *asset, BC_WindowBase* &format_window,
-- 
2.38.1

From 89500e500905d40ff027c88b51481d5ce708845a Mon Sep 17 00:00:00 2001
From: Andrew Randrianasulu <[email protected]>
Date: Wed, 26 Oct 2022 19:51:24 +0300
Subject: [PATCH 2/2] Add direct copy for fileexr

---
 cinelerra-5.1/cinelerra/fileexr.C | 9 +++++++++
 cinelerra-5.1/cinelerra/fileexr.h | 1 +
 2 files changed, 10 insertions(+)

diff --git a/cinelerra-5.1/cinelerra/fileexr.C b/cinelerra-5.1/cinelerra/fileexr.C
index fbc39862..e09dd1fc 100644
--- a/cinelerra-5.1/cinelerra/fileexr.C
+++ b/cinelerra-5.1/cinelerra/fileexr.C
@@ -506,6 +506,15 @@ int FileEXR::write_frame(VFrame *frame, VFrame *data, FrameWriterUnit *unit)
 	return 0;
 }
 
+int FileEXR::can_copy_from(Asset *asset, int64_t position)
+{
+	if(asset->format == FILE_EXR ||
+		asset->format == FILE_EXR_LIST)
+		return 1;
+
+	return 0;
+}
+
 FrameWriterUnit* FileEXR::new_writer_unit(FrameWriter *writer)
 {
 	return new EXRUnit(this, writer);
diff --git a/cinelerra-5.1/cinelerra/fileexr.h b/cinelerra-5.1/cinelerra/fileexr.h
index 5f5b251e..40fb01c9 100644
--- a/cinelerra-5.1/cinelerra/fileexr.h
+++ b/cinelerra-5.1/cinelerra/fileexr.h
@@ -44,6 +44,7 @@ public:
 	int read_frame_header(char *path);
 	int read_frame(VFrame *frame, VFrame *data);
 	int64_t get_memory_usage();
+	int can_copy_from(Asset *asset, int64_t position);
 	int write_frame(VFrame *frame, VFrame *data, FrameWriterUnit *unit);
 	FrameWriterUnit* new_writer_unit(FrameWriter *writer);
 
-- 
2.38.1

-- 
Cin mailing list
[email protected]
https://lists.cinelerra-gg.org/mailman/listinfo/cin

Reply via email to