I tried to add png compression level into filepng.c

But I did something stupid, and whole thing doesn't compile:

root@slax:/dev/shm/tmp/cinelerra-goodguy-20200316/cinelerra-5.1/cinelerra# 
LANG=C make
g++ `cat i686/c_flags`  -DMSGQUAL=filepng -c filepng.C -o i686/filepng.o
filepng.C: In member function 'virtual void PNGConfigVideo::create_objects()':
filepng.C:370:49: error: no matching function for call to 
'PNGConfigVideo::add_subwindow(PNGCompression*)'
  add_subwindow(new PNGCompression(this, x+50, y));
                                                 ^
In file included from 
/dev/shm/tmp/cinelerra-goodguy-20200316/cinelerra-5.1/cinelerra/../guicast/bcsubwindow.h:26:0,
                 from 
/dev/shm/tmp/cinelerra-goodguy-20200316/cinelerra-5.1/cinelerra/../guicast/bcbar.h:26,
                 from 
/dev/shm/tmp/cinelerra-goodguy-20200316/cinelerra-5.1/cinelerra/../guicast/guicast.h:27,
                 from edit.h:30,
                 from filepng.C:23:
/dev/shm/tmp/cinelerra-goodguy-20200316/cinelerra-5.1/cinelerra/../guicast/bcwindowbase.h:276:17:
 note: candidate: BC_WindowBase* BC_WindowBase::add_subwindow(BC_WindowBase*)
  BC_WindowBase* add_subwindow(BC_WindowBase *subwindow);
                 ^
/dev/shm/tmp/cinelerra-goodguy-20200316/cinelerra-5.1/cinelerra/../guicast/bcwindowbase.h:276:17:
 note:   no known conversion for argument 1 from 'PNGCompression*' to 
'BC_WindowBase*'
At global scope:
cc1plus: warning: unrecognized command line option '-Wno-stringop-truncation'
cc1plus: warning: unrecognized command line option '-Wno-format-overflow'
cc1plus: warning: unrecognized command line option '-Wno-format-truncation'
cc1plus: warning: unrecognized command line option '-Wno-stringop-overflow'
cc1plus: warning: unrecognized command line option '-Wno-unknown-warning-option'
make: *** [i686/filepng.o] Error 1

patch attached ....
diff --git a/cinelerra-5.1/cinelerra/asset.C b/cinelerra-5.1/cinelerra/asset.C
index fd6e97e..3e1778e 100644
--- a/cinelerra-5.1/cinelerra/asset.C
+++ b/cinelerra-5.1/cinelerra/asset.C
@@ -133,7 +133,8 @@ int Asset::init_values()
 	ac3_bitrate = 128;
 
 	png_use_alpha = 0;
-
+	png_compression = 0;
+	
 	exr_use_alpha = 0;
 	exr_compression = 0;
 
@@ -279,6 +280,7 @@ void Asset::copy_format(Asset *asset, int do_index)
 	ac3_bitrate = asset->ac3_bitrate;
 
 	png_use_alpha = asset->png_use_alpha;
+	png_compression = asset->png_compression;
 	exr_use_alpha = asset->exr_use_alpha;
 	exr_compression = asset->exr_compression;
 
@@ -803,6 +805,7 @@ void Asset::load_defaults(BC_Hash *defaults,
 	ac3_bitrate = GET_DEFAULT("AC3_BITRATE", ac3_bitrate);
 
 	png_use_alpha = GET_DEFAULT("PNG_USE_ALPHA", png_use_alpha);
+	png_compression = GET_DEFAULT("PNG_COMPRESSION", png_compression);
 	exr_use_alpha = GET_DEFAULT("EXR_USE_ALPHA", exr_use_alpha);
 	exr_compression = GET_DEFAULT("EXR_COMPRESSION", exr_compression);
 	tiff_cmodel = GET_DEFAULT("TIFF_CMODEL", tiff_cmodel);
@@ -899,6 +902,7 @@ void Asset::save_defaults(BC_Hash *defaults,
 
 
 		UPDATE_DEFAULT("PNG_USE_ALPHA", png_use_alpha);
+		UPDATE_DEFAULT("PNG_COMPRESSION", png_compression);
 		UPDATE_DEFAULT("EXR_USE_ALPHA", exr_use_alpha);
 		UPDATE_DEFAULT("EXR_COMPRESSION", exr_compression);
 		UPDATE_DEFAULT("TIFF_CMODEL", tiff_cmodel);
diff --git a/cinelerra-5.1/cinelerra/asset.h b/cinelerra-5.1/cinelerra/asset.h
index 096ea98..13ebaf9 100644
--- a/cinelerra-5.1/cinelerra/asset.h
+++ b/cinelerra-5.1/cinelerra/asset.h
@@ -189,6 +189,7 @@ public:
 // for jpeg compression
 	int jpeg_quality;
 
+
 // for mpeg video compression
 	int vmpeg_iframe_distance;
 	int vmpeg_progressive;
@@ -220,7 +221,7 @@ public:
 
 // PNG video compression
 	int png_use_alpha;
-
+	int png_compression;
 // EXR video compression
 	int exr_use_alpha;
 	int exr_compression;
diff --git a/cinelerra-5.1/cinelerra/filepng.C b/cinelerra-5.1/cinelerra/filepng.C
index f632607..b891d01 100644
--- a/cinelerra-5.1/cinelerra/filepng.C
+++ b/cinelerra-5.1/cinelerra/filepng.C
@@ -209,6 +209,7 @@ int FilePNG::write_frame(VFrame *frame, VFrame *data, FrameWriterUnit *unit)
 	png_infop info_ptr = 0;
 	VFrame *output_frame;
 	int result = 1;
+	asset->png_compression = 5;
 	data->set_compressed_size(0);
 //printf("FilePNG::write_frame 1\n");
 	native_cmodel = asset->png_use_alpha ? BC_RGBA8888 : BC_RGB888;
@@ -230,7 +231,7 @@ int FilePNG::write_frame(VFrame *frame, VFrame *data, FrameWriterUnit *unit)
 			info_ptr = png_create_info_struct(png_ptr);
 			png_set_write_fn(png_ptr, data,
 				(png_rw_ptr)write_function, (png_flush_ptr)flush_function);
-			png_set_compression_level(png_ptr, 5);
+			png_set_compression_level(png_ptr, asset->png_compression);
 
 			png_set_IHDR(png_ptr, info_ptr, asset->width, asset->height, 8,
 				asset->png_use_alpha ?  PNG_COLOR_TYPE_RGB_ALPHA : PNG_COLOR_TYPE_RGB,
@@ -366,6 +367,7 @@ void PNGConfigVideo::create_objects()
 	lock_window("PNGConfigVideo::create_objects");
 	int x = xS(10), y = yS(10);
 	add_subwindow(new PNGUseAlpha(this, x, y));
+	add_subwindow(new PNGCompression(this, x+50, y));
 	add_subwindow(new BC_OKButton(this));
 	show_window(1);
 	unlock_window();
@@ -390,3 +392,15 @@ int PNGUseAlpha::handle_event()
 	return 1;
 }
 
+PNGCompression::PNGCompression(PNGConfigVideo *gui, int x, int y)
+ : BC_TumbleTextBox(gui, (int64_t)gui->asset->png_compression,
+	(int64_t)0, (int64_t)9, x, y, xS(40))
+{
+	this->gui = gui;
+}
+
+int PNGCompression::handle_event()
+{
+	gui->asset->png_compression = atol(get_text());
+	return 1;
+}
\ No newline at end of file
diff --git a/cinelerra-5.1/cinelerra/filepng.h b/cinelerra-5.1/cinelerra/filepng.h
index 2263bc3..e7182d2 100644
--- a/cinelerra-5.1/cinelerra/filepng.h
+++ b/cinelerra-5.1/cinelerra/filepng.h
@@ -88,5 +88,12 @@ public:
 	PNGConfigVideo *gui;
 };
 
+class PNGCompression : public BC_TumbleTextBox
+{
+public:
+        PNGCompression(PNGConfigVideo *gui, int x, int y);
+        int handle_event();
+        PNGConfigVideo *gui;
+};
 
 #endif
-- 
Cin mailing list
[email protected]
https://lists.cinelerra-gg.org/mailman/listinfo/cin

Reply via email to