x265 patch for threadpool shutdown fix submited as:
[goodguy/history.git] / cinelerra-5.0 / plugins / titler / title.C
index 66755018b012c0640cd6697bffacf9282e90916a..8ccdb2a3648bfa19b28afd2cfe45454a463bdde5 100644 (file)
@@ -30,7 +30,7 @@
 
 #include "bcsignals.h"
 #include "clip.h"
-#include "colormodels.h"
+#include "bccmodels.h"
 #include "filexml.h"
 #include "filesystem.h"
 #include "transportque.inc"
@@ -86,7 +86,7 @@ TitleConfig::TitleConfig()
        fade_out = 0.0;
        x = 0.0;
        y = 0.0;
-       dropshadow = 10;
+       dropshadow = 2;
        sprintf(font, "fixed");
        sprintf(encoding, DEFAULT_ENCODING);
        timecode_format = DEFAULT_TIMECODEFORMAT;
@@ -204,8 +204,8 @@ void TitleConfig::interpolate(TitleConfig &prev,
 //     this->y = prev.y;
        timecode = prev.timecode;
        timecode_format = prev.timecode_format;
-//     this->dropshadow = (int)(prev.dropshadow * prev_scale + next.dropshadow * next_scale);
-       this->dropshadow = prev.dropshadow;
+       this->dropshadow = prev.dropshadow * prev_scale + next.dropshadow * next_scale;
+//     this->dropshadow = prev.dropshadow;
 }
 
 void TitleConfig::limits()
@@ -539,10 +539,14 @@ void TitleUnit::draw_glyph(VFrame *output, VFrame *data, TitleGlyph *glyph, int
        unsigned char **out_rows = output->get_rows();
 
        int baseline = plugin->get_char_height();
-       if(engine->do_dropshadow) {
+       if( engine->do_dropshadow ) {
                x += plugin->config.dropshadow;
                y += plugin->config.dropshadow;
        }
+       else if( plugin->config.dropshadow < 0 ) {
+               x -= plugin->config.dropshadow;
+               y -= plugin->config.dropshadow;
+       }
 
        int x_in = 0, y_in = 0;
        int x_out = x + glyph->left;
@@ -814,7 +818,6 @@ LoadPackage* TitleOutlineEngine::new_package()
 
 
 
-
 TitleTranslatePackage::TitleTranslatePackage()
  : LoadPackage()
 {
@@ -846,7 +849,6 @@ void TitleTranslate::run_packages()
 
 
 
-
 #define TRANSLATE(type, max, components, ofs) \
 { \
        unsigned char **in_rows = plugin->text_mask->get_rows(); \
@@ -1201,10 +1203,12 @@ void TitleMain::build_previews(TitleWindow *gui)
                        for(int j = 0; j < len; j++)
                        {
                                FT_ULong c = test_string[j];
-                               check_char_code_path(freetype_library,
-                                       font_entry->path,
-                                       c,
-                                       (char *)new_path);
+// memory leaks here are fatal
+//                             check_char_code_path(freetype_library,
+//                                     font_entry->path,
+//                                     c,
+//                                     (char *)new_path);
+                               strcpy(new_path, font_entry->path);
                                if( !load_freetype_face(freetype_library,
                                        freetype_face, new_path)) {
                                        FT_Set_Pixel_Sizes(freetype_face, text_height, 0);
@@ -1212,11 +1216,11 @@ void TitleMain::build_previews(TitleWindow *gui)
                                        if(!FT_Load_Char(freetype_face, c, FT_LOAD_RENDER)) {
                                                if(pass == 0) {
                                                        current_w = current_x + freetype_face->glyph->bitmap.width;
-                                                       if(freetype_face->glyph->bitmap_top > current_ascent)
+                                                       if((int)freetype_face->glyph->bitmap_top > current_ascent)
                                                                current_ascent = freetype_face->glyph->bitmap_top;
-                                                       if(freetype_face->glyph->bitmap.rows > total_h)
+                                                       if((int)freetype_face->glyph->bitmap.rows > total_h)
                                                                total_h = freetype_face->glyph->bitmap.rows;
-                                                       if(freetype_face->glyph->bitmap.rows > current_h)
+                                                       if((int)freetype_face->glyph->bitmap.rows > current_h)
                                                                current_h = freetype_face->glyph->bitmap.rows;
                                                }
                                                else {
@@ -1225,7 +1229,7 @@ void TitleMain::build_previews(TitleWindow *gui)
                                                        int out_y = (total_h - height[font_number]) / 2 +
                                                                ascent[font_number] - freetype_face->glyph->bitmap_top;
                                                        for(int in_y = 0;
-                                                               in_y < freetype_face->glyph->bitmap.rows &&
+                                                               in_y < (int)freetype_face->glyph->bitmap.rows &&
                                                                        out_y < total_h;
                                                                in_y++, out_y++) {
                                                                unsigned char *out_row = font_entry->image->get_rows()[out_y] +
@@ -1233,7 +1237,7 @@ void TitleMain::build_previews(TitleWindow *gui)
                                                                unsigned char *in_row = freetype_face->glyph->bitmap.buffer +
                                                                        freetype_face->glyph->bitmap.pitch * in_y;
 
-                                                               for(int out_x = 0; out_x < freetype_face->glyph->bitmap.width &&
+                                                               for(int out_x = 0; out_x < (int)freetype_face->glyph->bitmap.width &&
                                                                        out_x < total_w;
                                                                        out_x++) {
                                                                        *out_row = (*in_row * r +
@@ -1299,7 +1303,7 @@ int TitleMain::check_char_code_path(FT_Library &freetype_library,
        {
                FT_Set_Pixel_Sizes(temp_freetype_face, 128, 0);
                int gindex = FT_Get_Char_Index(temp_freetype_face, char_code);
-               if((!gindex == 0) && (!char_code != 10))
+               if( gindex != 0 && char_code == 10 )
                {
                        strcpy(path_new, path_old);
                        notfindit = 0;
@@ -1325,7 +1329,7 @@ int TitleMain::check_char_code_path(FT_Library &freetype_library,
                                        {
                                                FT_Set_Pixel_Sizes(temp_freetype_face, 128, 0);
                                                int gindex = FT_Get_Char_Index(temp_freetype_face, char_code);
-                                               if((!gindex == 0) && (!char_code != 10))
+                                               if( gindex != 0 && char_code == 10 )
                                                {
                                                        sprintf(path_new, "%s", tmpstring);
                                                        notfindit = 0;
@@ -1734,8 +1738,8 @@ int TitleMain::draw_mask()
 
        extent.x1 -= config.outline_size*2;
        extent.y1 -= config.outline_size*2;
-       extent.x2 += config.dropshadow + config.outline_size*2;
-       extent.y2 += config.dropshadow + config.outline_size*2;
+       extent.x2 += abs(config.dropshadow) + config.outline_size*2;
+       extent.y2 += abs(config.dropshadow) + config.outline_size*2;
 
        // Determine mask geometry
        mask_w = extent.x2 - extent.x1;
@@ -1759,7 +1763,7 @@ int TitleMain::draw_mask()
                text_mask = new VFrame;
                text_mask->set_use_shm(0);
                text_mask->reallocate(0, -1, 0, 0, 0, mask_w, mask_h, color_model, -1);
-               int drop = !config.dropshadow ? 0 : config.dropshadow;
+               float drop = abs(config.dropshadow);
                int drop_w = mask_w + drop;
                int drop_h = mask_h + drop;
                 text_mask_stroke = new VFrame;