Beep6581 / RawTherapee

A powerful cross-platform raw photo processing program
https://rawtherapee.com
GNU General Public License v3.0
2.75k stars 313 forks source link

Support for Scripting (Lua) #965

Closed Beep6581 closed 9 years ago

Beep6581 commented 9 years ago

Originally reported on Google Code with ID 978

Just to create place for discussion and example how multi-platform scripting can add
to RT. Maybe someday RT have some useful feature based on this.

Example how add lua (http://www.lua.org) to Ubuntu system

Install libraries:
sudo apt-get install lua5.1
sudo apt-get install liblua-dev

use patch lua_v1.diff
cmake ...
make install

copy luatest.lua file same directory as execution file. 

run with X parameter:
./rawtherapee -X

Result:
[C++] Passing 'arg' array to script
[C++] Running script
[lua] These args were passed into the script from C
1   45
2   99
[lua] Script returning data back to C
[C++] These values were returned from the script
script returned 1
script returned 9
script returned a table

So few parameter are changed between c++ and script.

I write some comments in forum http://rawtherapee.com/forum/viewtopic.php?p=23661#23661
after that I create this issue so everyone can see it, comment it and test it.

Reported by GreatBull69 on 2011-09-06 15:06:50

Beep6581 commented 9 years ago
This is a lua demo, not a feature or function to commit to RT.

Reported by oduis@hotmail.com on 2011-09-06 17:29:43

Beep6581 commented 9 years ago
Yes, Demo. And feature request.

Here is little more advance demo lua_v2.diff. it sent more useful data to script when
command line conversion is done via -c option .
Current version only print info and not use data return from script anyway.

./rawtherapee -Y -c _MG_9030.CR2 
Automatic Monitor Profile Detection not supported on your OS
Processing: _MG_9030.CR2
 Info1:Canon EOS 7D + Canon EF-S15-85mm f/3.5-5.6 IS USM
 Info2:f/3.5 1/250 ISO:320 15mm
[C++] Passing 'arg' array to script
[C++] Running script
[lua] These args were passed into the script from C
1   Canon EOS 7D + Canon EF-S15-85mm f/3.5-5.6 IS USM
2   f/3.5 1/250 ISO:320 15mm
3   _MG_9030.CR2
4   _MG_9030.jpg
[lua] Script returning data back to C
[C++] These values were returned from the script
script returned 1
script returned 9
script returned a table
END

Data passing should done little more intelligent/flexible way.

If someone is interested run exiftool in lua. I add that in luaexiftool.lua  
Not demo just printout exiftool output. (Yes you have to have exiftool installed)

Questions are:
1) Is Lua way to go in RT?

2) What is intelligent way enough transfer information between c++ and lua script?
 I see currently 3 options: 
 a) Make some string structure and encode and decode it.
 b) some table/parameter model
 c) make getters/setters in RT which lua scripts call.

Reported by GreatBull69 on 2011-09-07 04:14:56

Beep6581 commented 9 years ago
Added most procparam setter and getters (see list_of_lua_methods.txt) and cleanup code
output. All extra printing are only in lua script.

Not demo any more. "fully" functional but little ugly way implemented.
Not tested much.

Example script flip image and give it high brightness (just make change obvious) in
 command line conversion. So adjusting brightness based on ISO is possible now.

I delete comment #3 because about same as this but much less.

Reported by GreatBull69 on 2011-09-08 09:06:42

Beep6581 commented 9 years ago
> Not demo any more. "fully" functional but little ugly way implemented.
> Not tested much.
As you already say it's ugly implemented und not tested.
The base direction (LUA) is also highly questionable from my point of view.
Apart the idea to run the script from command line is also not a very good idea.

So I'd vote for NOT committing this in (and burry the idea).

Reported by oduis@hotmail.com on 2011-09-09 11:11:52

Beep6581 commented 9 years ago
Idea: replacement of ProfileBuilder which is windows only and much more.

Updates of code:
Not ugly any more,
Now parameter is updated in command line conversion and when image edited first time
via gui. Profile need delete if conversion want run again. (Idea is profile change
make first proposal to user)
New information extracted like get filename,orientation, 
Read processing parameter from file.

Now example script:
read crisp parameter if file name end 0 (e.g. abcd0.cr2)
read BW-1 otherwise
flip image
set brightness 100 (too bright)
Also script print few information about image.

Script can easy to modify select parameter files based on camera, filename, ISO, lens
name, lens focal length etc.
After "base" parameter is loaded then parameter can easy modify as which. Mathematical
formulas and tables can used.

Like adjust noise reduction based on ISO. CA based on lens and focal length. Sharpness
by camera temperature.

Idea is blurry because lua script can use many places in RT. Now it just used only
modify procparameters.

Like if identification of RAW images is done via lua script. New camera model can add
by modify script without compile RT.

Reported by GreatBull69 on 2011-09-12 07:57:44

Beep6581 commented 9 years ago
@Greatbull
I suggest to explain better the benefits and shortcoming of your idea. (I don't know
Lua, but from general point of view it's simply a scripting language ). Yes it's portable,
while current oduis implementation of profile builder in C# is not; but I said "implementation",
because nothing prevent you from using other languages (so Lua too I think).
The point is that, now, the "integration" with external tool is quite loose and fair:
RT launches an external process before loading/searching for parameters in pp3 file
for a new image. That's all! The external process can do whatever it wants (it accepts
some parameters from line command if I remember well), can start other commands (exiftool)
and create a new pp3 file basing on every information collected.

For what I understand your proposal is quite obtrusive because needs a change in RT
C++ code to call directly Lua scripts. Isn't this true? Which are the benefits of this
solution that cannot be done presently? Explain better.
Anyway this suggestion, as current implementation (as is), have the big problem to
prevent "normal" users to exploit the power and flexibility of the solution.

Reported by ffsup2@yahoo.it on 2011-09-12 10:18:24

Beep6581 commented 9 years ago
Thanks of intelligent comment.

Launch is about same: Launch external process or launch script. Both need call. Both
are same place and looks same. (OK lua have 2nd call for command line modification
too. 1 line)

Difference and stuff what I think is really cool:
Lua script can call any RT/c++ functions and set any variable values (current example
do already that). So we can make Lua do same as RT/C++. My understanding after external
process start (current c#) it not have any connection RT/c++ any more.

Current c# implementation is pp3 limited, lua don't have any limitations. Current lua
implementation only set procparam data, but that is more at I didn't yet implemented
other interactions.

Lua script can implement also same "Fire and forget" way if want.

Lua script can do "anything" what RT/c++ do. Edit image/implement filter etc. Question
is more what it wanted to do. I think c# can not add watermark to image.
With lua adding post processing script and add image merge function to C++. Adding
watermark is quite easy to implement.

>Anyway this suggestion, as current implementation (as is), have the big problem to
prevent "normal" users to exploit the power and flexibility of the solution.
Sorry but I didn't understand above comment.

I think usage of this features come some kind building blocks. Like different discussion
how ISO should effect different parameter etc. And little by little come some kind
default script. Like now some cameras can load default.pp3 and other neutral.pp3 as
default.

Shortcoming: New language, Needs new way to think what should be in script what should
be in c++, Scary to give user power do many things (many what developers didn't think
before), lua getters and setter need keep updated. Developers are part of scripting
domain. Data transfer between c++ and script was little tricky, but solution is already
in patch (transfer pointer). So I didn't see any real shortcoming yet except change
is big in mindset.

PS. I see somewhere when I search lua stuff at lightroom use lua too. 

I don't expect any fast acceptance but I think idea is very cool so it should at least
think.

Reported by GreatBull69 on 2011-09-12 14:18:42

Beep6581 commented 9 years ago
Updates:
- Lua script know have image existing parameter file or not
- Lua script know which RT version user edit image last time ("-" if image never edited
by user). AppVersionUserEdit parameter added to pp3.

So issue 993 can "solved" by updating parameters for old files. I change EOS 7D saturations
if old matrix was used during image editing. before 10/10 was good now 0/0 is good.
And for 30D 10/10 is still good.

Get "perfect" values automatically is possible and update old "wrong" values too.

Reported by GreatBull69 on 2011-09-25 16:51:03

Beep6581 commented 9 years ago
I find this topic quite interesting, as i thought about using the power of scripting
by using Python, like for Blender in which it can do wonders!

Lua is less known than Python, but by reading the comments of GreatBull, it looks quite
powerful. The free choice of the scripting language, is not up to the user but up to
the developer in reality. Average user will only use existing scripts that devs will
create, and eventually adjust some parameters. So, if one dev come with a C# script,
another one with a Lua script and a third one with a Python script, the user will have
to install all 3 scripting engine. All this diversity (and hence requirement) may not
be to everybodies' taste... So, could we focus on one, multiplatform, scripting language?
I would vote for Python or Lua, but it looks like we have a Lua specialist here. Is
Lua futurproof by the way?

I saw that Lua way REQUIRED in order to build RT, do the user also HAVE TO install
Lua too, or is it optional for him?

---

For AppVersionUserEdit, what does it indicates more than the existing version strings?

Reported by natureh.510 on 2011-09-25 19:10:14

Beep6581 commented 9 years ago
User not need install lua. (expect they compile RT or they want run stand alone lua
scripts) 

I think if better language find good if some one want integrate it to RT. To make discussion
and development faster I set high start point: lua or better and make working patch
with lua. 
 - c# can drop as it not multiplatform. 
 - Python maybe (my first feelings: -complicated integration python/c++, -slow?, +have
big library). When Python is integrated to RT and have same (or better) functionality
as current lua solution? Should be easy task done and if not then Python is not suitable.
When there is 2 solution then is easy to compare.
 - Lua: http://www.lua.org/about.html part why lua. 

I am not lua expert, just find it and find out it is very simple. And most people is
enough to just look current script to figure out how it is work.

AppVersionUserEdit is same format as AppVersion but updated different time and have
different default value. With AppVersionUserEdit can know what RT user use when he
edit image. AppVersion is about same as current VERSION. See forum/bugs/AppVersion
is format of PP3 or version used for EditImage?

Reported by GreatBull69 on 2011-09-26 01:51:02

Beep6581 commented 9 years ago
I looked further to your patch. Is your sample script already usable? I don't see where
you get the Exif values and where you handle them.

Reported by natureh.510 on 2011-09-27 15:53:57

Beep6581 commented 9 years ago
Good to hear.

Script is usable: I currently use it all time. 
It have lot extra comments/lines and some extra print outs. I think they are ok/good
during evaluation phase.
default script can be in minimal:  return 0

Currently exif/Iptc is not implemented. I didn't see it useful before XMP will implemented
and i didn't figure out how it should be implement.

Other missing features: 
- Curves (and other array type fields), need some planning, arguments in string or
with separated parameters.
- Batch queue integration/new profile loading (currently only when start editor and
command line)

Something to improve:
- Getter and setter names (How to make script easy to understand)

Reported by GreatBull69 on 2011-09-27 17:52:35

Beep6581 commented 9 years ago
I'd love to look at the Exif tags handling, that would be very useful even now (why
should we wait for XMP?), but unfortunatly i have other things to do.

I hope you'll be able to complete this script and at least the mechanism in RT for
proper integration in the code.

Reported by natureh.510 on 2011-09-27 18:43:06

Beep6581 commented 9 years ago
I added exif stub. Only final part search and add/modify <vector> is missing.
iptc can added too if good conversion <vector> string to <vector> can done.

Can you make get/set to std::vector<ExifPair> and std::vector<IPTCPair> or something
more clever.

Reported by GreatBull69 on 2011-09-28 01:07:48

Beep6581 commented 9 years ago
Hi greatbull, didn't have time to follow this issue but,
please postpone exif/iptc handling, as I'm reworking completely their handling.
Look at issue 463: hope to post an updated patch soon.

Reported by ffsup2@yahoo.it on 2011-09-28 17:31:54

Beep6581 commented 9 years ago
Thanks, I wait 473. And I not plan make much change in "RT" part of code because patch
will be came too complicated. So getters and setter to default branch or exif stuff
latter.

Anyway I added reading whole exif and iptc functions from c++ to lua when I study table
transfer between c++/lua. So now example parameters can change by keywords.

Then I added example of GUI interface. So lua have "control" of RT gkt GUI. It just
simple Gtk::MessageDialog but maybe someone can make something more cool.

I think integration is about same level as current profile builder (I never used or
much study it). Except thumbnail browser have some features in right click: execute
profile builder, paste and partial paste.

I didn't see point add lua call when rank and labels, trash are updated. (this difference
to current profile builder)

Because this will create "RT language" it would be nice if some give comments of naming.
(Partly I wait 473 to get good names)

Note: In linux at least gedit (=linux notepad) have lua syntax highlighting.

Reported by GreatBull69 on 2011-09-30 05:03:02

Beep6581 commented 9 years ago
Did you already removed the Exif handling? Or can we start creating Exif tags <-> RT
parameter association config files, given that it may be necessary to update it later,
that would not be a problem.

Reported by natureh.510 on 2011-09-30 07:54:28

Beep6581 commented 9 years ago
Exif stubs is in code also "test" calls in script. 
only missing functions: pparams->exif.get(exifTag) and pparams->exif.set(exifTag)

current lua interface code getExifTag:

Glib::ustring exifTag =  lua_tostring( L, 1);
printf("TODO GetExifTag not implemented. Tag: %s\n", exifTag.c_str());

// search value
//pparams->exif[1].field ;
//pparams->exif[1].value;
lua_pushstring(L, "dummy value");
//lua_pushstring(L, pparams->exif[x].value.c_str());
//lua_pushstring(L, pparams->exif.get(exifTag)); 

SetExifTag:

Glib::ustring exifTag =  lua_tostring( L, 1);
Glib::ustring exifTagValue =  lua_tostring( L, 2);

printf("TODO SetExifTag not implemented. Tag: %s value: %s \n", exifTag.c_str(),exifTagValue.c_str());
//pparams->exif[1].field =  lua_tostring( L, 1);
//pparams->exif[1].value =  lua_tostring( L, 2);
//pparams->exif.set(exifTag) = exifTagValue;

Reported by GreatBull69 on 2011-09-30 10:08:41

Beep6581 commented 9 years ago
Little more about exif: current stub implementation not need change whatever is rt internal
part change. 

"Real" exif there is already following functions:
InitialImage:
getMake 
getModel 
getISO 
getShutterSpeed 
getFNumber 
getFocalLen 
getExpComp 
getLens 
getOrientation

ProgParams functions:
getExif (OK)
setExif (Maybe not even needed)
getExifTag (stub)
setExifTag (stub)

#18 config file???. Above is describe little more current implementation. And currently
I didn't see any usage config file. Problem is connect to RT internal structure. I
guess you talk real exif and I talk only "pp3" exif. I was thinking only replace ProfileBuilder.
It should not be difficult interact with real exif if interface is ok in RT.

Reported by GreatBull69 on 2011-10-03 03:49:25

Beep6581 commented 9 years ago
- Fixed merge
- Added for non win32 similar functionality as in Issue 362: Open batch result file
with OS default program. Programs can configured in lua script. now it use geeqie as
example.
- Added first version of run exiftool by <Alt Gr>+F5. (Improvements need RT gui expert
to look, I didn't find parent pointer and window needed to show exiftool results).

Reported by GreatBull69 on 2011-10-07 06:25:29

Beep6581 commented 9 years ago
New version:
- Directory info in Lua scripts (location of scripts, cache, profiles etc)
- Some option reading added e.g. Default profile
- Lua scripts spited to smaller scripts
- PPx reader added. Lua can read any PP file and get information in table.
- <Alt>-<Ctrl>-m run exiftool and view it nicely in screen (looks like RT have nice
META info viewer, use same theme as RT)

I called this plus patch as it have some extra stuff, but they should not effect for
testing
Extras:
- Issue 1018 patch
- Key P. Show embanded JPG file in browser. (It have memory leak)
- Few buttons next to highlight/shadow clips in editor window. Quick view for B&W,
RGB channers, 10 zones. (images is for this)
- Some code to separete config,data and cache (code don't do any thing, just some preparation
stuff)

Reported by GreatBull69 on 2011-10-21 01:45:08

Beep6581 commented 9 years ago
V17 have exiftool result parsing so example change white balance color temperature cameras
measured WB. (Canon EOS metadata have measured WB info)
Measured WB is different then current camera WB values in RT. 

pparams_processing.lua:
useExiftool = 1

my_pp_modifications.lua:
ProcParms.setWbMethod("Custom")
ProcParms.setWbTemperature(exiffields["Color Temp Measured"])

Reported by GreatBull69 on 2011-10-22 02:04:33

Beep6581 commented 9 years ago
V19
Missing files added
Extras:
847 Automatic language detection to non WIN32. It have extra printouts which can removed
after other person test. 
1061: out of memory. Better handing then patch attached in 1061.

Reported by GreatBull69 on 2011-10-25 01:30:20

Beep6581 commented 9 years ago
Applies to 1a1fe5838576 and compiles fine in Gentoo.

What built-in things can it do, apart for showing EXIF (CTRL+ALT+M) and the JPEG thumbnail
(CTRL+P)?

Would be awesome if the thumbnail viewer could switch to the previous/next photo and
support moving files to trash in RT (but not really deleting - let's leave that to
RT).

Reported by entertheyoni on 2011-10-31 00:14:23

Beep6581 commented 9 years ago
Idea was allowing modify processing parameters so starting image is good as possible
when editing start. Now when open image without PP3 RT run script pparams_processing.lua.
Script have few "demos" which switch on by change e.g. readImageDataDemo = 0 to readImageDataDemo
= 1. Current it do my default fix + fix some old wrong setting according my wish. "User
modifications" are in my_pp_modifications.lua file. Modification are done for Canon
30D and 7D (only, some point I tried change code that way so it not break things by
default).

Same idea can use modify image and GUI in future.

It would be nice able to zoom 100% in thumbnail viewer too. My version based simple
gtk.dialog which can not extend (and it leak memory). Real viewer should create own
window and handle own events. I don't know how to do that. 

Reported by GreatBull69 on 2011-10-31 01:06:27

Beep6581 commented 9 years ago
Few more "features"
- 6 buttons next to highlight/shadow clips in editor window. Quick view for B&W, RGB
channers, 10 zones. (images.zip is for this)
- 847 Automatic language detection to non WIN32. It have extra printouts which can
removed after other person test. Should test linux other then ubuntu and should test
with apple.
- F5, ctrl-F5, Alt-F5: Added for non win32 similar functionality as in  Issue 362 :
Open batch result file with OS default program. Programs can configured in lua script.
now it use geeqie as example. externalview.lua
- Issue 1048: amaze out of memory. Better handing then patch attached in 1061.
- Issue 1018 patch (100% zoom)

Reported by GreatBull69 on 2011-10-31 01:42:25

Beep6581 commented 9 years ago
and the patch?:)

Reported by michaelezra000 on 2011-10-31 01:56:44

Beep6581 commented 9 years ago
#28??? Is see patch in #24 and images in #22.
I put new patch soon (It should make lua optional and have some CUDA testing code)

Reported by GreatBull69 on 2011-10-31 02:38:45

Beep6581 commented 9 years ago
V20+ All above+
Lua is optional. If lua libraries is not installed. Code should compile and work perfectly
just without Lua features. So NO PP modification before editing, EXIF (CTRL+ALT+M)
Exiftool and F5, ctrl-F5, Alt-F5 viewer. But all other stuff should work. (This is
not tested)

If CUDA SDK is installed few lines CUDA code is generated. Code just detect CUDA capable
devices and make extra screen prints. 

Reported by GreatBull69 on 2011-10-31 03:08:51

Beep6581 commented 9 years ago
V21+ Just removed one WhiteBalance test code which probably break images.

You change MyPpMod = 1 to MyPpMod = 0 in pparams_processing.lua disable all my "improvements"
in image.

Reported by GreatBull69 on 2011-10-31 03:32:06

Beep6581 commented 9 years ago
I don't have the time to test your patches, sorry, but i still would like to know if
your enhancements are integrated in the main app, i.e. is the application still consistent
and the user don't see that a script is runnig behind, or do you open new windows to
display the results of your work (viewer excepted), together with new buttons in them?

Reported by natureh.510 on 2011-10-31 16:13:33

Beep6581 commented 9 years ago
All real results are in normal gui or end to pp3 files. So to normal user everything
look nice. Main feature modify processing parameter so it internal data change. Result
can verify from pp3 and viewing image.

However there is some writing to console. Normal user not need them. Part of log writing
is just for testing phase (I remove them when get feedback that area is OK). There
is also something which is nice to show user but now put to console. Something is for
power users. Something is for developers. 

Power users: Users who want make own lua code. Console writing give some extra information.
And many "demos" currently do only console writings (I don't have plan to change this).
Power user can by them self redirect output to file or to simple viewer as they need.
see gui demo.

Reported by GreatBull69 on 2011-11-01 00:47:31

Beep6581 commented 9 years ago
Lua fix:
get correct default.pp3 if user not have defined own default values.
Removed extra logs. User not see anything.

extra:
-Dx command line parameter added (extra log can put on)
-p/P have different fast view code. p is in own window but code is not good. View only
raw files.
- issue 1084 "white" rectangle issue fix

Reported by GreatBull69 on 2011-11-20 13:05:48

Beep6581 commented 9 years ago
Fixed merge.
Extra: removed 1084 patch as it is in default.
To further study issue 1084 Added parameter:
rawtherapee -D15 x y height width 

Reported by GreatBull69 on 2011-12-06 14:40:08

Beep6581 commented 9 years ago
It won't compile without CUDA, but I don't see CUDA being used for anything yet.
Which version of CUDA does it support?

nvidia-cuda-sdk 3.0 requires GCC-4.4.5 (in Gentoo), but I use GCC-4.5.3 so I don't
want to have to compile an older GCC just for CUDA, so I want to try one of the newer
CUDA-SDK versions: 3.1, 3.2, 4.0

Reported by entertheyoni on 2011-12-06 18:30:42

Beep6581 commented 9 years ago
I tried installing nvidia-cuda-toolkit-4.0 and nvidia-cuda-sdk-3.0 and nvidia-cuda-sdk-4.0
but cmake keeps throwing this out:

(...)
-- Found Lua51: /usr/lib64/liblua.so;/usr/lib64/libm.so 
CUDA_TOOLKIT_ROOT_DIR not found or specified
-- Could NOT find CUDA (missing:  CUDA_TOOLKIT_ROOT_DIR CUDA_NVCC_EXECUTABLE CUDA_INCLUDE_DIRS
CUDA_CUDART_LIBRARY) 
 * Not all CUDA libraries are found. Compiled without CUDA.
-- hg command foundZ: /usr/bin/hg
-- Found BZip2: /usr/lib64/libbz2.so 
-- Looking for BZ2_bzCompressInit in /usr/lib64/libbz2.so
-- Looking for BZ2_bzCompressInit in /usr/lib64/libbz2.so - found
-- Try OpenMP C flag = [-fopenmp]
-- Performing Test OpenMP_FLAG_DETECTED
-- Performing Test OpenMP_FLAG_DETECTED - Success
-- Try OpenMP CXX flag = [-fopenmp]
-- Performing Test OpenMP_FLAG_DETECTED
-- Performing Test OpenMP_FLAG_DETECTED - Success
-- Found OpenMP: -fopenmp 
-- ---CMAKE_CURRENT_SOURCE_DIR=/home/drslony/rawtherapee/rtgui
-- ---CMAKE_CURRENT_BINARY_DIR=/home/drslony/rawtherapee/rtgui
CMake Error: The following variables are used in this project, but they are set to
NOTFOUND.
Please set them or make sure they are set and tested correctly in the CMake files:
CUDA_TOOLKIT_INCLUDE (ADVANCED)
   used as include directory in directory /home/drslony/rawtherapee/rtengine
   used as include directory in directory /home/drslony/rawtherapee/rtgui

-- Configuring incomplete, errors occurred!
Error during cmake, exiting.

Reported by entertheyoni on 2011-12-06 23:07:46

Beep6581 commented 9 years ago
I removed CUDA. OPENCL is way to go anyway. (Good reference is dt project)

CUDA comments (because OPENCL will have same issues):
I tested without CUDA before I install CUDA, but maybe something is changed. 

My CUDA problem was solved removing "requirement" of old compiler. Most code work but
some SDK examples not work. But that was different because it failed in compiling phase.

Your CUDA problem looks like at SDK is not installed (at least cmake not find installation).
Do you add xxx/cuda/bin to PATH?

Reported by GreatBull69 on 2011-12-07 01:17:59

Beep6581 commented 9 years ago
GreatBull69, is OPENCL actually being used here?
If yes then by Lua or RT?
Sorry I did not follow your patch closely, lots of work done here.
How would it work with xmp?

Reported by michaelezra000 on 2011-12-07 01:33:50

Beep6581 commented 9 years ago
Maybe you need logout/restart system to finalize CUDA installation.

Reported by GreatBull69 on 2011-12-07 01:52:34

Beep6581 commented 9 years ago
Why on earth do you need GPL processing to run a script?

Reported by ejm.60657 on 2011-12-07 02:04:23

Beep6581 commented 9 years ago
No any OPENCL but that is better then CUDA so CUDA stuff can removed. But installation
same that why I put so many CUDA comments.

Off  topic OPENCL implementation:
OPENCL should be part of RT (not Lua). I feel "RTengine" should "replaced" by OPENCL.
same way as other project is done then processing is fast. Image once to GPU, GPU do
all processing and image once out of GPU.

off topic 2 GPU via script:
Above once in once out is simplified "process", better is if "brain" can control data
in/out and what/how to GPU process.
"Brain" can be then in c++ or script. To give more flexibility I think "brain" in script
is quite nice. Brain make high level decisions so speed is not issue, "work" should
done GPU or CPU. 

Some benefit: first development can done by script and when "formula" is ready it can
coded with OPENCL or c++. Easy change "parameters" as they are not hard coded. What
is benefit c++ brain? I didn't came up any. Ok, maybe "c++ is more easy for coding"
and debugging.

lua and Xmp: 
xmp is still own branch so no xmp stuff in this lua code.
Most part they are not related RT internal data structures are in middle. exif/iptc
code need done to lua after xmp merge to default.

Reported by GreatBull69 on 2011-12-07 02:53:44

Beep6581 commented 9 years ago
heh it was a simple log out/log in issue - yes, paths not updated.

Now I get this:

Starting compilation:
-- The C compiler identification is GNU
-- The CXX compiler identification is GNU
-- Check for working C compiler: /usr/bin/gcc
-- Check for working C compiler: /usr/bin/gcc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- CMAKE_BUILD_TYPE: debug
-- checking for module 'gtk+-2.0>=2.12'
--   found gtk+-2.0, version 2.24.5
-- checking for module 'glib-2.0>=2.16'
--   found glib-2.0, version 2.28.8
-- checking for module 'glibmm-2.4>=2.16'
--   found glibmm-2.4, version 2.28.2
-- checking for module 'gtkmm-2.4>=2.12'
--   found gtkmm-2.4, version 2.24.2
-- checking for module 'gio-2.0>=2.16'
--   found gio-2.0, version 2.28.8
-- checking for module 'giomm-2.4>=2.12'
--   found giomm-2.4, version 2.28.2
-- checking for module 'gthread-2.0>=2.16'
--   found gthread-2.0, version 2.28.8
-- checking for module 'gobject-2.0>=2.16'
--   found gobject-2.0, version 2.28.8
-- checking for module 'sigc++-2.0'
--   found sigc++-2.0, version 2.2.10
-- checking for module 'lcms2'
--   found lcms2, version 2.2
-- checking for module 'libiptcdata'
--   found libiptcdata, version 1.0.4
-- Found JPEG: /usr/lib64/libjpeg.so 
-- Found ZLIB: /usr/include (found version "1.2.5.1")
-- Found PNG: /usr/lib64/libpng.so 
-- Found TIFF: /usr/lib64/libtiff.so 
-- Found Lua51: /usr/lib64/liblua.so;/usr/lib64/libm.so 
-- hg command foundZ: /usr/bin/hg
-- Found BZip2: /usr/lib64/libbz2.so 
-- Looking for BZ2_bzCompressInit in /usr/lib64/libbz2.so
-- Looking for BZ2_bzCompressInit in /usr/lib64/libbz2.so - found
-- Try OpenMP C flag = [-fopenmp]
-- Performing Test OpenMP_FLAG_DETECTED
-- Performing Test OpenMP_FLAG_DETECTED - Success
-- Try OpenMP CXX flag = [-fopenmp]
-- Performing Test OpenMP_FLAG_DETECTED
-- Performing Test OpenMP_FLAG_DETECTED - Success
-- Found OpenMP: -fopenmp 
-- ---CMAKE_CURRENT_SOURCE_DIR=/home/drslony/rawtherapee/rtgui
-- ---CMAKE_CURRENT_BINARY_DIR=/home/drslony/rawtherapee/rtgui
-- Configuring done
CMake Error at rtgui/CMakeLists.txt:53 (add_executable):
  Cannot find source file:

    viewwindow.cc

  Tried extensions .c .C .c++ .cc .cpp .cxx .m .M .mm .h .hh .h++ .hm .hpp
  .hxx .in .txx

-- Build files have been written to: /home/drslony/rawtherapee
Error during cmake, exiting.

It wasn't there before the patch, and it's not there after applying it.

Reported by entertheyoni on 2011-12-07 12:32:57

Beep6581 commented 9 years ago
Sorry missing files and updated patch.

Reported by GreatBull69 on 2011-12-07 13:26:04

Beep6581 commented 9 years ago
(...)
[ 38%] Building CXX object rtengine/CMakeFiles/rtengine.dir/luart.cc.o            

/home/drslony/rawtherapee/rtengine/luart.cc: In function ‘int rtengine::L_expcompToString(rtengine::lua_State*)’:

/home/drslony/rawtherapee/rtengine/luart.cc:3996:67: error: no matching function for
call to ‘rtengine::ImageMetaData::expcompToString(double&) const’
/home/drslony/rawtherapee/rtengine/rtengine.h:96:32: note: candidate is: static std::string
rtengine::ImageMetaData::expcompToString(double, bool)
make[2]: *** [rtengine/CMakeFiles/rtengine.dir/luart.cc.o] Error 1
make[2]: *** Waiting for unfinished jobs....
make[1]: *** [rtengine/CMakeFiles/rtengine.dir/all] Error 2
make: *** [all] Error 2

Reported by entertheyoni on 2011-12-07 14:17:04

Beep6581 commented 9 years ago
2 files updated and pacth updated too.
This show some negative rgb values.
rawtherapee -D15 1947 155 10 10

Reported by GreatBull69 on 2011-12-07 14:52:05

Beep6581 commented 9 years ago
Why do you attach luart.cc and simpleprocess.cc when lua_v32_plus.diff creates them?
I diff'd them and they're identical.

Applied and compiled fine, thank you.

Reported by entertheyoni on 2011-12-07 17:24:51

Beep6581 commented 9 years ago
Separate files are there if you want test CUDA as it not exist any more in patch.

Reported by GreatBull69 on 2011-12-08 00:48:47

Beep6581 commented 9 years ago
More debug info for square problem

Reported by GreatBull69 on 2011-12-08 01:37:03

Beep6581 commented 9 years ago
Now new prints works better

Reported by GreatBull69 on 2011-12-08 01:48:13

Beep6581 commented 9 years ago
Could you provide an update for tip please?

Reported by entertheyoni on 2012-01-02 15:10:11