View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0000559 | Cinelerra-GG | [All Projects] Bug | public | 2021-03-09 20:44 | 2024-05-31 16:16 |
Reporter | PhyllisSmith | Assigned To | PhyllisSmith | ||
Priority | high | Severity | minor | Reproducibility | have not tried |
Status | feedback | Resolution | open | ||
Product Version | |||||
Target Version | Fixed in Version | ||||
Summary | 0000559: Fade In/Fade out flash bug | ||||
Description | "Fade black flash" bug reported in the Mailing List around March 7/8, 2021. More information follows from IgorB: I confirm the bug reported by Camille. Here two videos about Title effect and Image with Dissolve Transition: https://streamable.com/86y59m https://streamable.com/ywcaee This is my trick to solve it: https://streamable.com/vkp9ou | ||||
Tags | No tags attached. | ||||
Georgy studied Adam's patch that solves the problem in CinHV. He also clearly and thoroughly explained the behavior of CinGG with transparencies. I report his conclusions: "I tried to investigate the problem with Dissolve having Alpha channel. Firstly, I could not reproduce it at all. Later in CGG maillist I have found the test project by IgorBeg with titler on complete transparency and two transparent PNGs with white letters and Dissolve transition in between, all above another track with violet background. Perhaps you know this example also. This helped me to understand better what happens. 1. I looked at the Adam's patch you have suggested, built from sources both the (relatively) current Cin-GG, and Adam's Cin-HV-9. I made sure, Cin-HV-9 really has this new code referenced in the patch, the older code (before the patch) was almost the same as in our Cin-GG, the new code in Cin-HV-9 is quite different. Then I created in Cin-HV-9 the same test project (Adam's program cannot consistently open CGG's projects, but the small piece with two PNGs did not demand much work). Despite the quite different code of the Dissolve transition in Cin-GG and in Cin-HV, the visual behavior of Dissolve with alpha in both programs was completely identical! So, if we simply adopt Adam's patch, perhaps actually we will change nothing. 2. I considered the following problem. I am unsure how to solve it, it is a very conceptual question. If we apply, let's say, the Dissolve transition, what should actually happen mathematically? OK, for channels r, g, b the contribution of the 1-st clip should gradually fall from 100% to 0%, and the contribution of the 2-nd rise from 0% to 100%. If we have no alpha channel, this is quite simple. If we have, perhaps the alpha channel should gradually change from the a-value of the 1-st clip to the a-value of the second. For example, if the 1-st PNG had opaque letter over some considered pixel, and the 2-nd PNG had completely transparent background there, the a-value should gradually fall from 100% to 0% for that pixel, is it logical? Now comes the conceptual question. We can easily look with our eyes which color has an area with complete opacity (a=100%). r=g=b=100% is white, 0% is black, 100/0/0% is red, etc. But what color is hindered under complete transparency? When a=0%, we will always see black. But actually it could be red, or even bright white, but completely masked out by 0% alpha. Now let's apply our mathematics with channels. Somewhere in the middle of the Dissolve transition we should get about 50% of alpha, if a(1) was 100% and a(2) was 0%. But what for rgb? If rgb(1) was 100/100/100% (white), and rgb(2) was also 100/100/100% (fully transparent white), then we will have rgb=100/100/100%, a=50%. This will look as medium grey, 50% of white. If rgb(1) was 100/100/100% (white), but rgb(2) was 0/0/0% (fully transparent black), then we will have rgb=50/50/50%, a=50%. This will look as rather dark grey, only 25% of white. If rgb(1) was 100/100/100% (white), but rgb(2) was 100/0/0% (fully transparent red, but visually still looking as black on black background), then we will have rgb=100/50/50%, a=50%. This will look not as grey anymore, but a bit reddish. So, the 0% alpha channel can hinder any actual color of the masked picture, which can become visible if alpha rises above 0% due to applying some transition of effect. THE CONCEPTUAL QUESTION IS: What invisible color is hindered under the completely transparent alpha-mask? What should, let's say, the Dissolve transition do with hindered colors? Which behavior should expect the user from such a transition? Can we give him some feedback, or knowledge, about the actual colors under the transparency mask? I am unsure what is the correct answer." |
|
Thank you so much, @PhyllisSmith ! | |
@IgorBeg If you want, you can delete you video now as I downloaded it and see the problem. The freelancer I was working with got real busy, but I will try to get a better fix - at least for the Titler. |
|
@PhyllisSmith About Title plugin and its FadeIn/FadeOut I have done two tests, comparing Cin_20210930 release and Cin_20211031. Tests use YUVA-8bit Colour Model. I made a video where the two Compositors can be compared face to face, same project and same conditions. On the top, left side, you can see the Compositor of the Cin_20210930 release; on the top, right side, you can see the Compositor of the Cin_20211031 release. The duration of the Fade In and Fade Out is 2 seconds. The first part of the video (Overlay Mode = Normal) show that Cin_20211031 works fine (although there seems to be a problem with the alpha channel), meanwhile Cin_20210930 doesn't. The second part of the video (Overlay Mode --> Arithmetic = Subtract) show that Cin_20211031 doesn't work (and alpha channel also has problems, for me) but Cin_20210930 works fine. I hope it is clearer. To see/download the video, link to http://www.visi1.org/temp/Cin_Title-FadeInOut_compare-20210930-vs-20211031.ogg I am sorry, "streamable.com" site doesn't work without registration anymore. I will leave that file there for some days. Let me know when you have downloaded the file, please. So I can delete it from host. In RGBA-FLOAT Color Model, the flash that I saw in Cin_20211013 on the first frame of the Title, with FadeIn/FadeOut, doesn't happen anymore. Good. (My Operating System is UbuntuStudio_16.04_64bit, and I am using CinGG-x86_64-older_distros.AppImage) |
|
Sorry @PhyllisSmith, I see you are speaking about Title plugin. I haven't tried Title plugin and its FadeIn/FadeOut with different Overlay modes in Patchbay. Using your "cin-20211013_pluginsLoad_fade-older_distros.AppImage", I can see that Title plugin with FadeIn/FadeOut do a kind of flash on the first frame of the Title when the FadeIn/FadeOut occur but only in RGBA-FLOAT Color Model. May be the Freelancer have fixed that? In my https://www.cinelerra-gg.org/bugtracker/view.php?id=559#c5090 post I spoke about Dissolve Transition on the PNGs using Overlay Modes in Patchbay; and you can see my test Project. Finally, I don't use patches made by developers because I am afraid to break my things and, because I am really, really, ignorant in Linux, I prefer to avoid that. I should do an image of my system with Clonezilla_DVD (as sometimes I do) before, but it would take time. Sorry. If you can, and you have time, could you make an other "older_distros.AppImage" for me? I could test it. Thanks! |
|
@IgorBeg I am still trying to confirm your results using the patch in the last note. I have found that the patch fixes the Arithmetic/Subtract overlay function. See attached. Correct me if I am wrong |
|
@Andrew-R The freelancer did fix the RGBA-FLOAT issue with Dissolve (X11 driver only, not X11-OpenGL) and it is attached. I have downloaded your patch and will look at it tomorrow. I have tried to run Igor's test case but am pretty much totally confused by the results -- I do not see the issue at all.
fadeInOut.dissolve.overlayframe.h.v2.patch (1,228 bytes)
diff --git a/cinelerra-5.1/cinelerra/overlayframe.h b/cinelerra-5.1/cinelerra/overlayframe.h index 13c2e4b..4f0f686 100644 --- a/cinelerra-5.1/cinelerra/overlayframe.h +++ b/cinelerra-5.1/cinelerra/overlayframe.h @@ -321,6 +321,19 @@ ZTYP(float); ZTYP(double); } \ ALPHA_STORE(out, ofs, mx) +#define ALPHA4_STORE(out, ofs, mx) \ + r = aclip(r, mx); \ + g = ofs ? cclip(g, mx) : aclip(g, mx); \ + b = ofs ? cclip(b, mx) : aclip(b, mx); \ + double alpha_in = 1.0*a*opcty/mx, alpha_out = 1.0*out3*trnsp/mx, total = alpha_in + (1 - alpha_in) * alpha_out; \ + r = (r * alpha_in + out0 * (1 - alpha_in) * alpha_out) / total; r = aclip(r, mx); \ + g = (g * alpha_in + out1 * (1 - alpha_in) * alpha_out) / total; g = ofs ? cclip(g, mx) : aclip(g, mx); \ + b = (b * alpha_in + out2 * (1 - alpha_in) * alpha_out) / total; b = ofs ? cclip(b, mx) : aclip(b, mx); \ + a = total; \ + ALPHA_STORE(out, ofs, mx); \ + out[3] = aclip(a, mx) + +/* #define ALPHA4_STORE(out, ofs, mx) \ r = aclip(r, mx); \ g = ofs ? cclip(g, mx) : aclip(g, mx); \ @@ -333,6 +346,7 @@ ZTYP(float); ZTYP(double); } \ ALPHA_STORE(out, ofs, mx); \ out[3] = aclip(a, mx) +*/ #define BLEND_SWITCH(FN) \ switch( mode ) { \ |
|
hack
0032-Add-hackish-new-overlay-blend-modes.patch (7,926 bytes)
From 4e20a974d17fd0165d227ca74d5755faf53fad14 Mon Sep 17 00:00:00 2001 From: Andrew Randrianasulu <[email protected]> Date: Fri, 2 Jul 2021 23:23:29 +0300 Subject: [PATCH 32/72] Add hackish new overlay/blend modes --- cinelerra-5.1/cinelerra/overlayframe.C | 2 - cinelerra-5.1/cinelerra/overlayframe.h | 86 ++++++++++++++++++++++++ cinelerra-5.1/cinelerra/overlayframe.inc | 5 +- cinelerra-5.1/cinelerra/patchbay.C | 3 + cinelerra-5.1/cinelerra/vpatchgui.C | 6 ++ 5 files changed, 99 insertions(+), 3 deletions(-) diff --git a/cinelerra-5.1/cinelerra/overlayframe.C b/cinelerra-5.1/cinelerra/overlayframe.C index 270755cc..801ae9d3 100644 --- a/cinelerra-5.1/cinelerra/overlayframe.C +++ b/cinelerra-5.1/cinelerra/overlayframe.C @@ -351,5 +351,3 @@ int OverlayFrame::overlay(VFrame *output, VFrame *input, } return 0; } - - diff --git a/cinelerra-5.1/cinelerra/overlayframe.h b/cinelerra-5.1/cinelerra/overlayframe.h index 13c2e4bd..ace2fa02 100644 --- a/cinelerra-5.1/cinelerra/overlayframe.h +++ b/cinelerra-5.1/cinelerra/overlayframe.h @@ -45,6 +45,9 @@ #define ONE 1 #define TWO 2 +// Sa = source alpha, Sc = source color +// Da = dst alpha, Dc = dst color + // NORMAL [Sa + Da * (1 - Sa), Sc * Sa + Dc * (1 - Sa)]) #define ALPHA_NORMAL(mx, Sa, Da) (Sa + (Da * (mx - Sa)) / mx) #define COLOR_NORMAL(mx, Sc, Sa, Dc, Da) ((Sc * Sa + Dc * (mx - Sa)) / mx) @@ -220,6 +223,86 @@ (mabs(Sc * Da - Dc * Sa) / mx)) #define CHROMA_DIFFERENCE COLOR_DIFFERENCE +// REFLECT [Sa * Sa / (1 - Da] +#define ALPHA_REFLECT(mx, Sa, Da) (Sa * Sa * (mx - Da) / mx) +#define COLOR_REFLECT(mx, Sc, Sa, Dc, Da) (Sc * Sc * (mx - Dc) / mx) +#define CHROMA_REFLECT COLOR_REFLECT + +// AVERAGE [ Sa + Da)/2 , (Sc + Dc)/2 ] +#define ALPHA_AVERAGE(mx, Sa, Da) ((Sa + Da) / 2) +#define COLOR_AVERAGE(mx, Sc, Sa, Dc, Da) ((Sc + Dc) / 2 ) +#define CHROMA_AVERAGE COLOR_AVERAGE + +#define GAMMA 2.4 +static inline double mpow(double a, double b) { return pow(a, b); } + +inline double poly7(double x, double a, double b, double c, double d, + double e, double f, double g, double h) { + double ab, cd, ef, gh, abcd, efgh, x2, x4; + x2 = x*x; x4 = x2*x2; + ab = a*x + b; cd = c*x + d; + ef = e*x + f; gh = g*x + h; + abcd = ab*x2 + cd; efgh = ef*x2 + gh; + return abcd*x4 + efgh; +} + +inline double srgb_to_linear(double x) { + if (x <= 0.04045) return x / 12.92; + + // Polynomial approximation of ((x+0.055)/1.055)^2.4. + return poly7(x, 0.15237971711927983387, + -0.57235993072870072762, + 0.92097986411523535821, + -0.90208229831912012386, + 0.88348956209696805075, + 0.48110797889132134175, + 0.03563925285274562038, + 0.00084585397227064120); +} + +inline double linear_to_srgb(double x) { + if (x <= 0.0031308) return x * 12.92; + + // Piecewise polynomial approximation (divided by x^3) + // of 1.055 * x^(1/2.4) - 0.055. + if (x <= 0.0523) return poly7(x, -6681.49576364495442248881, + 1224.97114922729451791383, + -100.23413743425112443219, + 6.60361150127077944916, + 0.06114808961060447245, + -0.00022244138470139442, + 0.00000041231840827815, + -0.00000000035133685895) / (x*x*x); + + return poly7(x, -0.18730034115395793881, + 0.64677431008037400417, + -0.99032868647877825286, + 1.20939072663263713636, + 0.33433459165487383613, + -0.01345095746411287783, + 0.00044351684288719036, + -0.00000664263587520855) / (x*x*x); +} + +// from https://stackoverflow.com/questions/6475373/optimizations-for-pow-with-const-non-integer-exponent + + + +//#define LINEAR2SRGB(in) (in <= 0.0031308 ? 12.92 * in : 1.055 * mpow(in, 1.0/GAMMA) - 0.055) +//#define SRGB2LINEAR(in) (in <= 0.04045 ? in / 12.92 : mpow((in + 0.055) / 1.055, GAMMA)) + +#define A_BLEND(top, bottom, alpha, max) \ + max * linear_to_srgb(srgb_to_linear(1. * top / max)+ srgb_to_linear(1. * bottom / max)*(1.0 - (1. * alpha / max))) + +// Change lines: +// #define ALPHA_NORMAL(mx, Sa, Da) (Sa + (Da * (mx - Sa)) / mx) +// #define COLOR_NORMAL(mx, Sc, Sa, Dc, Da) ((Sc * Sa + Dc * (mx - Sa)) / mx) +// To: +#define ALPHA_NORMALS(mx, Sa, Da) ((Sa + (mx - Sa)*(mx - Sa)) / mx) +#define COLOR_NORMALS(mx, Sc, Sa, Dc, Da) A_BLEND(Sc, Dc, Sa, mx) +#define CHROMA_NORMALS COLOR_NORMALS + + static inline int mabs(int32_t v) { return abs(v); } static inline int mabs(int64_t v) { return llabs(v); } static inline float mabs(float v) { return fabsf(v); } @@ -366,6 +449,9 @@ ZTYP(float); ZTYP(double); case TRANSFER_HARDLIGHT: FN(HARDLIGHT); \ case TRANSFER_SOFTLIGHT: FN(SOFTLIGHT); \ case TRANSFER_DIFFERENCE: FN(DIFFERENCE); \ + case TRANSFER_REFLECT: FN(REFLECT); \ + case TRANSFER_AVERAGE: FN(AVERAGE); \ + case TRANSFER_NORMALS: FN(NORMALS); \ } class OverlayKernel diff --git a/cinelerra-5.1/cinelerra/overlayframe.inc b/cinelerra-5.1/cinelerra/overlayframe.inc index 5f84036d..f155eb4a 100644 --- a/cinelerra-5.1/cinelerra/overlayframe.inc +++ b/cinelerra-5.1/cinelerra/overlayframe.inc @@ -24,7 +24,7 @@ // Modes -#define TRANSFER_TYPES 30 +#define TRANSFER_TYPES 33 #define TRANSFER_NORMAL 0 #define TRANSFER_ADDITION 1 @@ -56,6 +56,9 @@ #define TRANSFER_HARDLIGHT 27 #define TRANSFER_SOFTLIGHT 28 #define TRANSFER_DIFFERENCE 29 +#define TRANSFER_REFLECT 30 +#define TRANSFER_AVERAGE 31 +#define TRANSFER_NORMALS 32 // Interpolation types diff --git a/cinelerra-5.1/cinelerra/patchbay.C b/cinelerra-5.1/cinelerra/patchbay.C index c2ae534d..bc593617 100644 --- a/cinelerra-5.1/cinelerra/patchbay.C +++ b/cinelerra-5.1/cinelerra/patchbay.C @@ -218,6 +218,9 @@ void PatchBay::create_objects() "mode_hardlight", "mode_softlight", "mode_difference", + "mode_reflect", + "mode_average", + "mode_normals", }; for( int mode=0; mode<TRANSFER_TYPES; ++mode ) { mode_icons[mode] = new BC_Pixmap(this, diff --git a/cinelerra-5.1/cinelerra/vpatchgui.C b/cinelerra-5.1/cinelerra/vpatchgui.C index 53ec27fb..d8e64c5c 100644 --- a/cinelerra-5.1/cinelerra/vpatchgui.C +++ b/cinelerra-5.1/cinelerra/vpatchgui.C @@ -354,6 +354,9 @@ void VModePatch::create_objects() submenu->add_submenuitem(new VModeSubMenuItem(submenu, mode_to_text(TRANSFER_DIVIDE), TRANSFER_DIVIDE)); submenu->add_submenuitem(new VModeSubMenuItem(submenu, mode_to_text(TRANSFER_MULTIPLY), TRANSFER_MULTIPLY)); submenu->add_submenuitem(new VModeSubMenuItem(submenu, mode_to_text(TRANSFER_REPLACE), TRANSFER_REPLACE)); + submenu->add_submenuitem(new VModeSubMenuItem(submenu, mode_to_text(TRANSFER_REFLECT), TRANSFER_REFLECT)); + submenu->add_submenuitem(new VModeSubMenuItem(submenu, mode_to_text(TRANSFER_AVERAGE), TRANSFER_AVERAGE)); + submenu->add_submenuitem(new VModeSubMenuItem(submenu, mode_to_text(TRANSFER_NORMALS), TRANSFER_NORMALS)); add_item(mode_item = new VModePatchItem(this, _("PorterDuff..."), -1)); mode_item->add_submenu(submenu = new VModePatchSubMenu(mode_item)); submenu->add_submenuitem(new VModeSubMenuItem(submenu, mode_to_text(TRANSFER_DST), TRANSFER_DST)); @@ -436,6 +439,9 @@ const char* VModePatch::mode_to_text(int mode) case TRANSFER_HARDLIGHT: return _("Hardlight"); case TRANSFER_SOFTLIGHT: return _("Softlight"); case TRANSFER_DIFFERENCE: return _("Difference"); + case TRANSFER_REFLECT: return _("Reflect"); + case TRANSFER_AVERAGE: return _("Average"); + case TRANSFER_NORMALS: return _("NormalS"); } return _("Normal"); } -- 2.33.1 |
|
may be (if problem really in converting sRGB<>linear, as suggested by earlier patch) we can extract same conversion into new plugin? I made some hackpatch adding specialized overlay mode for this case but guess track-long conversion not always best idea? |
|
@IgorBeg I do not think it is better as it breaks things. Anyway, a fix for the Title plugin for RGBA-FLOAT when using the X11 Video Driver has been checked into GIT. Good thing Igor checked this for Dissolve because it led me to do more testing in the Titler and find this bug (worked correctly with X11-OpenGL driver BUT more importantly, it rendered incorrectly because like X11 that uses software. |
|
@Andrea_Paz Thanks for your confirm and the videos. @PhyllisSmith I am sorry for all those differences. I think that it will be hard to fix that, I hope I am wrong. If other users think that it is better to have an "usable" Dissolve transition (for PNGs, pictures) in Normal Mode we could keep the Freelancer version. I don't know how many users use the Overlay Mode in their Projects,... I do. |
|
@IgorBeg Worse than I thought. Yes, the test project will help tremendously. Thank you |
|
Test with cin-20211013_pluginsLoad_fade-older_distros.AppImage A PNG with Dissolve transition must have a video track below with a clip/PNG, or a Gradient plugin, otherwise Dissolve transition is not performed. With a video clip it works right. Also Anti-aliasing on the PNG with alpha channel (for example a text) doesn't work if there isn't a video track below with a clip/PNG; but this last thing didn't work before either. ============================== Overlay Mode tests in YUVA-8bit. Tests made with two video tracks: - Top track with two PNGs with Alpha channel (PNG_1 and PNG_2, both with only a text of a different colour). Insert the Dissolve transition at the beginning of the first clip, between the two clips, and at the end of the second clip. - Bottom track uses the Gradient Plugin (first colour: purple; second colour: white). Arithmetic...-> - Divide (behaviour slightly different by before) - Replace (It doesn't perform the Dissolve transition; the old version yes) PorteDuff...-> - Src (It doesn't perform the Dissolve transition; the old version yes) - SrcAtop (It doesn't perform the Dissolve transition; the old version yes) - SrcIn (It doesn't perform the Dissolve transition; the old version yes) - SrcOver (It doesn't perform the Dissolve transition; the old version yes) Logical...-> - Min (It doesn't perform the Dissolve transition; the old version yes) - Max (It doesn't perform the Dissolve transition; the old version yes) - Lighten (It doesn't perform the Dissolve transition; the old version yes) - AND (It doesn't perform the Dissolve transition; the old version yes) - OR (It doesn't perform the Dissolve transition; the old version yes) Graphic Art...-> - Overlay (It doesn't perform the Dissolve transition; the old version yes) - Screen (It doesn't perform the Dissolve transition; the old version yes) - Burn (behaviour slightly different by before) - Dodge (behaviour slightly different by before) - Difference (It doesn't perform the Dissolve transition; the old version yes) - Hardlight (It doesn't perform the Dissolve transition; the old version yes) - Softlight (It doesn't perform the Dissolve transition; the old version yes) Note: in some tests, using different Modes, show that Anti-Aliasing on PNG with text, it seems to work inside the Dissolve transition but don't outside. In the old version Anti-Aliasing doesn't work both inside and outside the Dissolve transition. I added my test Project if it can help. FadeIN-FadeOUT_ForTest-02.tar.gz (26,348 bytes) |
|
Here my test. I confirm IgorBeg's results: https://streamable.com/4lr8tr https://streamable.com/tsdgcp https://streamable.com/y3dot9 |
|
@IgorBeg Since the freelancer does not have a fix yet, if you have time, could you continue to test RGBA-8bit because at least then we can see if there are even more problems. Thanks for your time. |
|
PhyllisSmith wrote: I need to test more options myself before asking others to do so -- sorry Don't worry for that,... thank you. Okay, I will wait for your new AppImage. Thanks for your time. |
|
@IgorBeg Please wait for a new AppImage before testing further if you have time this weekend. The Freelancer is working on a fix. Thank you so much for finding this bug (and it is in the Title plugin too) as it was an omission. I need to test more options myself before asking others to do so -- sorry. |
|
Thanks @PhyllisSmith for the cin-20211013_pluginsLoad_fade-older_distros.AppImage. I have only done quick tests, sorry. More tests this week end, I hope. It seems to work fine except for RGBA-FLOAT colour model. I didn't try the different modes in PatchBay. In my fist test I am using two video tracks: - Top track with two PNGs with Alpha channel (PNG_1 and PNG_2, both with only a text of a different colour). Insert the Dissolve transition at the beginning of the first clip, between the two clips, and at the end of the second clip. - Bottom track uses the Gradient Plugin (first colour: purple; second colour: white). Change the Colour Model (Settings-> Format-> Video Section ==> Color Model): YUVA-8, RGBA-8, RGBA-FLOAT. In RGBA-FLOAT instead of the gradient I see the white colour. |
|
@IgorBeg I made a new AppImage on Ubuntu 16 that includes the Dissolve fade in/out patch if you have time to test it. It is my biggest concern because the patch change overlayframe.h which is included in 13 Cinelerra files and 23 plugins/transitions. I just wrote over the last testing file. This fix ONLY fixes it for the X11 Video Driver (not OpenGL yet). https://cinelerra-gg.org/download/testing/cin_pluginsLoad_fade-older_distros.AppImage @Andrea_Paz I know you are busy too, but if you have any time to test, it would be appreciated. Especially the SRC OVER... stuff in the patch bay. This AppImage also includes Andrew's LV2 patch to MatN's modifications. |
|
Thanks @PhyllisSmith for the 20211010_AppImage https://cinelerra-gg.org/download/testing/cin_pluginsLoad_fade-older_distros.AppImage. I tested the Title's fade issue as it was shown in "Cin_20201031_TitleFadeINOUT_issue_1.ogv" video, link to https://streamable.com/86y59m (2021-03-09, anymore available): it was for Title effect and its own dissolve feature. For me it works very good. Thanks Phyllis and Freelancer! PS: Sorry, I didn't try the "fadeInOut.dissolve.overlayframe.h.patch" patch. |
|
My test is OK: I don't see any shadows in the title as seen in IgorBeg's video. But, I'm not sure how the Fade issue works, and I don't know if the test I did is appropriate. | |
Here is the patch to fix the Dissolve fade in/fade out. This one NEEDS LOTS OF TESTING. It is attached. All you have to do for people who do their own builds to apply the patch is: 1) go to the cinelerra-5.1/cinelerra directory 2) patch < fadeInOut.dissolve.overlayframe.h.patch You will have to "make clean" and do a full build because it modified overlayframe.h which is used in many, many places. Makes me nervous.
fadeInOut.dissolve.overlayframe.h.patch (1,116 bytes)
diff --git a/cinelerra-5.1/cinelerra/overlayframe.h b/cinelerra-5.1/cinelerra/overlayframe.h index 13c2e4b..f72e518 100644 --- a/cinelerra-5.1/cinelerra/overlayframe.h +++ b/cinelerra-5.1/cinelerra/overlayframe.h @@ -321,6 +321,21 @@ ZTYP(float); ZTYP(double); } \ ALPHA_STORE(out, ofs, mx) +#define ALPHA4_STORE(out, ofs, mx) \ + r = aclip(r, mx); \ + g = ofs ? cclip(g, mx) : aclip(g, mx); \ + b = ofs ? cclip(b, mx) : aclip(b, mx); \ + if( trnsp ) { \ + double alpha_in = 1.0*a*opcty/mx, alpha_out = 1.0*out3*trnsp/mx, total = alpha_in + alpha_out; \ + r = (r * alpha_in + out0 * alpha_out) / total; \ + g = (g * alpha_in + out1 * alpha_out) / total; \ + b = (b * alpha_in + out2 * alpha_out) / total; \ + a = (a * opcty + out3 * trnsp) / mx; \ + } \ + ALPHA_STORE(out, ofs, mx); \ + out[3] = aclip(a, mx) + +/* #define ALPHA4_STORE(out, ofs, mx) \ r = aclip(r, mx); \ g = ofs ? cclip(g, mx) : aclip(g, mx); \ @@ -333,6 +348,7 @@ ZTYP(float); ZTYP(double); } \ ALPHA_STORE(out, ofs, mx); \ out[3] = aclip(a, mx) +*/ #define BLEND_SWITCH(FN) \ switch( mode ) { \ |
|
@IgorBeg There is also a fix for the Dissolve fade in/out problem but it is not included in this AppImage. It modifies overlayframe.h so potentially could affect SRC OVER, SRC ... Also, it only works when using X11 as the driver BUT as Andrea always points out to me and is stated in the manual, the transitions are better used with software instead of OpenGL. |
|
@IgorBeg A different freelancer has submitted a code fix for the fade in/fade out problem in the Title plugin. The fix is localized and should not affect old project and using multiple effects to maintain compatibility. If you have time to verify the fix, I would really appreciate it as I am not very good at doing a thorough test and compatibility must be maintained. Thank you. This AppImage also contain prevention of reload of plugins on every startup. https://cinelerra-gg.org/download/testing/cin_pluginsLoad_fade-older_distros.AppImage @Andrea_Paz This fix is included in the other AppImage too so if you have a good test case to use, it would be so helpful also. https://cinelerra-gg.org/download/testing/cin_pluginsLoad_fade-newer_distros.AppImage |
|
@IgorBeg Thank you so much for the feedback. I will try to duplicate your gradient example to see what you are talking about. @Andrew-R has been looking at this also and suggested perhaps we could special case for the Titler and Dissolve to use the new code and everything else keep using the old code. It would be hard for me to figure out how to do this though. At least the mod fixes the reported bug, but it looks like we can not use it as is because of too much destruction. Also, if I start with my current $HOME/.bcast5, the problem still occurs. If I start with a new one, the mod fixes the problem so there is some setting in Cinelerra_rc that retains the bad flash somehow. |
|
Thanks for the AppImage. My tests compare Cin_20201031_static with Cin_20210624_AppImage. I am using two my test xml (Project) files. In my tests I am using a Gradient effect as bottom (background) video track. Bottom track with Gradient Effect: Shape=Linear; Angle=83; Rate=Log; InnerRadius=3; OuterRadius=46; InnerColor= ffffffff; OuterColor=ff2a0c66. In Cin_20210624_AppImage there is a different behaviour from YUVA8 to RGBA8, and there is a strange banding effect. Those there aren't on Cin_20201031_static release. Changing some "OverlayMode" in Patchbay the behaviour is different for the two releases. So, an old project would no longer be compatible with the new Cin version. If I add "Color3Way" effect on a top video track where there are PNGs (with Alpha channel) and Dissolve transitions that effect is transferred to the bottom video track and it changes the old behaviour. The new mod works fine "alone", but with usual effects and an old Project, unfortunately you lose compatibility. I could make some screencasts but I need a lot of time and I think I might just confuse you. |
|
@IgorBeg I need your testing expertise. A Freelancer has provided a fix but I can not tell for sure if it is totally correct and has no side effects. Could you test it really well using the file at: https://cinelerra-gg.org/download/testing/cin_for_older_distros.AppImage ? When I test on Fedora, using the black_flash demo provided by Camille, it seems to work (both Title plugin and Dissolve Transition). When I test on Ubuntu 14, I had to start with a "fresh" copy of .bcast5 to get it to work correctly. Some concern I have is that the modification is in overlayframe.h which is used in several places in Cinelerra. Anyone is welcome to test and the "for older distros" works on the newer distros just as well. If Andrew or anyone else who does their own builds, wants to rebuild change the following lines in overlayframe.h. After line: #define TWO 2 Add: #define GAMMA 2.4 static inline double mpow(double a, double b) { return pow(a, b); } #define LINEAR2SRGB(in) (in <= 0.0031308 ? 12.92 * in : 1.055 * mpow(in, 1.0/GAMMA) - 0.055) #define SRGB2LINEAR(in) (in <= 0.04045 ? in / 12.92 : mpow((in + 0.055) / 1.055, GAMMA)) #define A_BLEND(top, bottom, alpha, max) \ max * LINEAR2SRGB(SRGB2LINEAR(1. * top / max)+ SRGB2LINEAR(1. * bottom / max)*(1.0 - (1. * alpha / max))) Change lines: #define ALPHA_NORMAL(mx, Sa, Da) (Sa + (Da * (mx - Sa)) / mx) #define COLOR_NORMAL(mx, Sc, Sa, Dc, Da) ((Sc * Sa + Dc * (mx - Sa)) / mx) To: #define ALPHA_NORMAL(mx, Sa, Da) ((Sa + (mx - Sa)*(mx - Sa)) / mx) #define COLOR_NORMAL(mx, Sc, Sa, Dc, Da) A_BLEND(Sc, Dc, Sa, mx) |
|
When you insert an effect on an empty track the fade fades as if it were on a black background, it interprets the alpha as black where there is transparency, which is what produces the fade. To avoid the unwanted effect produced by the fade over black (because there is no content) it is best to leave the fade in out of the effect at 0 and use the fade line to perform these, so there is no problem with the alpha channel. Watch the following video https://streamable.com/quj37w |
|
Date Modified | Username | Field | Change |
---|---|---|---|
2021-03-09 20:44 | PhyllisSmith | New Issue | |
2021-03-10 14:47 | RafaMar | Note Added: 0004670 | |
2021-06-23 22:12 | PhyllisSmith | Description Updated | View Revisions |
2021-06-23 22:23 | PhyllisSmith | Assigned To | => PhyllisSmith |
2021-06-23 22:23 | PhyllisSmith | Status | new => feedback |
2021-06-23 22:23 | PhyllisSmith | Note Added: 0004860 | |
2021-06-25 09:37 | IgorBeg | Note Added: 0004861 | |
2021-06-25 19:57 | PhyllisSmith | Note Added: 0004862 | |
2021-06-25 20:55 | PhyllisSmith | Note Edited: 0004862 | View Revisions |
2021-10-10 19:22 | PhyllisSmith | Note Added: 0005039 | |
2021-10-10 21:33 | PhyllisSmith | Note Added: 0005042 | |
2021-10-11 00:25 | PhyllisSmith | File Added: fadeInOut.dissolve.overlayframe.h.patch | |
2021-10-11 00:25 | PhyllisSmith | Note Added: 0005043 | |
2021-10-11 08:12 | Andrea_Paz | Note Added: 0005047 | |
2021-10-12 07:37 | IgorBeg | Note Added: 0005061 | |
2021-10-13 01:41 | PhyllisSmith | Note Added: 0005067 | |
2021-10-14 07:58 | IgorBeg | Note Added: 0005076 | |
2021-10-14 15:52 | PhyllisSmith | Note Added: 0005077 | |
2021-10-15 07:30 | IgorBeg | Note Added: 0005080 | |
2021-10-16 15:24 | PhyllisSmith | Note Added: 0005088 | |
2021-10-17 11:43 | Andrea_Paz | Note Added: 0005089 | |
2021-10-17 12:16 | IgorBeg | File Added: FadeIN-FadeOUT_ForTest-02.tar.gz | |
2021-10-17 12:16 | IgorBeg | Note Added: 0005090 | |
2021-10-17 15:18 | PhyllisSmith | Note Added: 0005091 | |
2021-10-18 07:24 | IgorBeg | Note Added: 0005092 | |
2021-10-19 01:06 | PhyllisSmith | Note Added: 0005093 | |
2021-10-21 00:57 | Andrew-R | Note Added: 0005097 | |
2021-10-21 00:59 | Andrew-R | File Added: 0032-Add-hackish-new-overlay-blend-modes.patch | |
2021-10-21 00:59 | Andrew-R | Note Added: 0005098 | |
2021-10-21 03:43 | PhyllisSmith | File Added: fadeInOut.dissolve.overlayframe.h.v2.patch | |
2021-10-21 03:43 | PhyllisSmith | Note Added: 0005099 | |
2021-10-23 01:17 | PhyllisSmith | File Added: incorrect.png | |
2021-10-23 01:17 | PhyllisSmith | File Added: correct.png | |
2021-10-23 01:17 | PhyllisSmith | Note Added: 0005112 | |
2021-10-23 08:11 | IgorBeg | Note Added: 0005113 | |
2021-11-03 07:57 | IgorBeg | Note Added: 0005130 | |
2021-11-07 22:14 | PhyllisSmith | Note Added: 0005151 | |
2021-11-09 08:21 | IgorBeg | Note Added: 0005161 | |
2024-05-31 16:16 | Andrea_Paz | Note Added: 0005645 |