I still don't know how to set attribute in OpenEXR, its here in
/usr/include/OpenEXR/ImfStandardAttributes.h
//
// dwaCompressionLevel -- sets the quality level for images compressed
// with the DWAA or DWAB method.
//
IMF_STD_ATTRIBUTE_DEF (dwaCompressionLevel, DwaCompressionLevel, float)
but c++/c still definitely not my language ...
I killed few blank lines in fileexr.C, I hope this is ok
Additions to asset.c | h not included ..They not really usable without setting
this new attribute
Also, I still have no idea how to downpropagate cpu count .. file.C knows it,
but File::EXR not ...
diff --git a/cinelerra-5.1/cinelerra/fileexr.C b/cinelerra-5.1/cinelerra/fileexr.C
index 998372b..5aa337b 100644
--- a/cinelerra-5.1/cinelerra/fileexr.C
+++ b/cinelerra-5.1/cinelerra/fileexr.C
@@ -42,6 +42,7 @@
#include "ImfRgbaYca.h"
#include "ImfVersion.h"
+
class EXRIStream : public Imf::IStream
{
public:
@@ -120,15 +121,6 @@ void EXRIStream::clear()
}
-
-
-
-
-
-
-
-
-
EXROStream::EXROStream(VFrame *data)
: Imf::OStream("mypath")
{
@@ -161,14 +153,6 @@ void EXROStream::seekp(Imf::Int64 pos)
-
-
-
-
-
-
-
-
FileEXR::FileEXR(Asset *asset, File *file)
: FileList(asset, file, "EXRLIST", ".exr", FILE_EXR, FILE_EXR_LIST)
{
@@ -191,6 +175,10 @@ const char* FileEXR::compression_to_str(int compression)
switch(compression)
{
case FileEXR::NONE: return "None"; break;
+ case FileEXR::B44: return "B44"; break;
+ case FileEXR::B44A: return "B44A"; break;
+ case FileEXR::DWAB: return "DWAB"; break;
+ case FileEXR::DWAA: return "DWAA"; break;
case FileEXR::PIZ: return "PIZ"; break;
case FileEXR::ZIP: return "ZIP"; break;
case FileEXR::ZIPS: return "ZIPS"; break;
@@ -209,6 +197,10 @@ int FileEXR::compression_to_exr(int compression)
case FileEXR::ZIP: return (int)Imf::ZIP_COMPRESSION; break;
case FileEXR::ZIPS: return (int)Imf::ZIPS_COMPRESSION; break;
case FileEXR::RLE: return (int)Imf::RLE_COMPRESSION; break;
+ case FileEXR::B44: return (int)Imf::B44_COMPRESSION; break;
+ case FileEXR::B44A: return (int)Imf::B44A_COMPRESSION; break;
+ case FileEXR::DWAA: return (int)Imf::DWAA_COMPRESSION; break;
+ case FileEXR::DWAB: return (int)Imf::DWAB_COMPRESSION; break;
case FileEXR::PXR24: return (int)Imf::PXR24_COMPRESSION; break;
}
return Imf::NO_COMPRESSION;
@@ -227,7 +219,14 @@ int FileEXR::str_to_compression(char *string)
if(!strcmp(compression_to_str(FileEXR::RLE), string))
return FileEXR::RLE;
if(!strcmp(compression_to_str(FileEXR::PXR24), string))
- return PXR24;
+ if(!strcmp(compression_to_str(FileEXR::B44), string))
+ return FileEXR::B44;
+ if(!strcmp(compression_to_str(FileEXR::B44A), string))
+ return FileEXR::B44A;
+ if(!strcmp(compression_to_str(FileEXR::DWAA), string))
+ return FileEXR::DWAA;
+ if(!strcmp(compression_to_str(FileEXR::DWAB), string))
+ return FileEXR::DWAB;
return FileEXR::NONE;
}
@@ -333,6 +332,8 @@ int FileEXR::read_frame(VFrame *frame, VFrame *data)
Imath::Box2i dw = file.header().dataWindow();
int dx = dw.min.x;
int dy = dw.min.y;
+ Imf::setGlobalThreadCount (4);
+
Imf::FrameBuffer framebuffer;
float **rows = (float**)frame->get_rows();
int components = BC_CModels::components(frame->get_color_model());
@@ -460,7 +461,7 @@ int FileEXR::write_frame(VFrame *frame, VFrame *data, FrameWriterUnit *unit)
VFrame *output_frame;
data->set_compressed_size(0);
-
+ Imf::setGlobalThreadCount (4);
int native_cmodel = asset->exr_use_alpha ? BC_RGBA_FLOAT : BC_RGB_FLOAT;
int components = BC_CModels::components(native_cmodel);
@@ -497,6 +498,8 @@ int FileEXR::write_frame(VFrame *frame, VFrame *data, FrameWriterUnit *unit)
Imf::Header header(output_frame->get_w(), output_frame->get_h());
header.compression() = (Imf::Compression)compression_to_exr(
asset->exr_compression);
+// if(asset->exr_compression == DWAA || asset->exr_compression == DWAB)
+// header.insert("dwaCompressionLevel", asset->exr_dwa_compression_level);
header.channels().insert("R", Imf::Channel(Imf::FLOAT));
header.channels().insert("G", Imf::Channel(Imf::FLOAT));
header.channels().insert("B", Imf::Channel(Imf::FLOAT));
@@ -539,15 +542,6 @@ FrameWriterUnit* FileEXR::new_writer_unit(FrameWriter *writer)
-
-
-
-
-
-
-
-
-
EXRUnit::EXRUnit(FileEXR *file, FrameWriter *writer)
: FrameWriterUnit(writer)
{
@@ -562,14 +556,6 @@ EXRUnit::~EXRUnit()
-
-
-
-
-
-
-
-
EXRConfigVideo::EXRConfigVideo(BC_WindowBase *parent_window, Asset *asset)
: BC_Window(_(PROGRAM_NAME ": Video Compression"),
parent_window->get_abs_cursor_x(1), parent_window->get_abs_cursor_y(1),
@@ -634,6 +620,10 @@ void EXRCompression::create_objects()
add_item(new EXRCompressionItem(gui, FileEXR::ZIPS));
add_item(new EXRCompressionItem(gui, FileEXR::RLE));
add_item(new EXRCompressionItem(gui, FileEXR::PXR24));
+ add_item(new EXRCompressionItem(gui, FileEXR::B44));
+ add_item(new EXRCompressionItem(gui, FileEXR::B44A));
+ add_item(new EXRCompressionItem(gui, FileEXR::DWAA));
+ add_item(new EXRCompressionItem(gui, FileEXR::DWAB));
}
int EXRCompression::handle_event()
diff --git a/cinelerra-5.1/cinelerra/fileexr.h b/cinelerra-5.1/cinelerra/fileexr.h
index 3e47489..eac1c99 100644
--- a/cinelerra-5.1/cinelerra/fileexr.h
+++ b/cinelerra-5.1/cinelerra/fileexr.h
@@ -55,7 +55,11 @@ public:
ZIP,
ZIPS,
RLE,
- PXR24
+ PXR24,
+ B44,
+ B44A,
+ DWAA,
+ DWAB
};
static const char* compression_to_str(int compression);
--
Cin mailing list
[email protected]
https://lists.cinelerra-gg.org/mailman/listinfo/cin