camera zoom fix, upgrade giflib, configure.ac ix86 probe tweaks, any python
authorGood Guy <good1.2guy@gmail.com>
Tue, 26 Feb 2019 01:22:38 +0000 (18:22 -0700)
committerGood Guy <good1.2guy@gmail.com>
Tue, 26 Feb 2019 01:22:38 +0000 (18:22 -0700)
16 files changed:
cinelerra-5.1/cinelerra/Makefile
cinelerra-5.1/cinelerra/cwindowgui.C
cinelerra-5.1/cinelerra/filegif.C
cinelerra-5.1/cinelerra/mwindowgui.C
cinelerra-5.1/cinelerra/mwindowgui.h
cinelerra-5.1/cinelerra/statusbar.C
cinelerra-5.1/cinelerra/statusbar.h
cinelerra-5.1/cinelerra/trackcanvas.C
cinelerra-5.1/cinelerra/trackcanvas.h
cinelerra-5.1/configure.ac
cinelerra-5.1/doc/shortcuts.html
cinelerra-5.1/guicast/Makefile
cinelerra-5.1/thirdparty/Makefile
cinelerra-5.1/thirdparty/src/giflib-5.1.4.tar.xz [deleted file]
cinelerra-5.1/thirdparty/src/giflib-5.1.6.patch1 [new file with mode: 0644]
cinelerra-5.1/thirdparty/src/giflib-5.1.6.tar.xz [new file with mode: 0644]

index c1f97f1e9af41721f421e5c877b2555e19aa1367..dfdfd230335de818489011103e78062d58f9d867 100644 (file)
@@ -564,7 +564,7 @@ clean:
 
 
 tags:
 
 
 tags:
-       ctags -R -h default --langmap=c:+.inc . ../guicast/ ../libzmpeg3 ../plugins ../thirdparty/ffmpeg-*
+       ctags -R -h default --langmap=c:+.inc . ../guicast/ ../libzmpeg3 ../plugins ../thirdparty/ffmpeg-* ../thirdparty/giflib-*
 
 
 $(OBJDIR)/%.o:         %.C
 
 
 $(OBJDIR)/%.o:         %.C
index 02ed52d32ad93ae559acb39554362dd0ce85e5d1..0d8b755a6cc18c9703ffd1c5423db97e92fdb835 100644 (file)
@@ -2906,7 +2906,7 @@ void CWindowCanvas::draw_bezier(int do_camera)
                track->automation->get_camera(&center_x,
                        &center_y, &center_z, position, PLAY_FORWARD);
 // follow image, not camera
                track->automation->get_camera(&center_x,
                        &center_y, &center_z, position, PLAY_FORWARD);
 // follow image, not camera
-               center_x = -center_x;  center_y = -center_y;
+               center_x = -center_x * center_z;  center_y = -center_y * center_z;
        }
        else
                track->automation->get_projector(&center_x,
        }
        else
                track->automation->get_projector(&center_x,
@@ -2964,114 +2964,71 @@ int CWindowCanvas::test_bezier(int button_press,
 
 // Processing drag operation.
 // Create keyframe during first cursor motion.
 
 // Processing drag operation.
 // Create keyframe during first cursor motion.
-       if(!button_press)
-       {
+       if( !button_press ) {
 
                float cursor_x = get_cursor_x();
                float cursor_y = get_cursor_y();
                canvas_to_output(mwindow->edl, 0, cursor_x, cursor_y);
 
 
                float cursor_x = get_cursor_x();
                float cursor_y = get_cursor_y();
                canvas_to_output(mwindow->edl, 0, cursor_x, cursor_y);
 
-               if(gui->current_operation == CWINDOW_CAMERA ||
-                       gui->current_operation == CWINDOW_PROJECTOR)
-               {
-                       if(!gui->ctrl_down() && gui->shift_down() && !gui->translating_zoom)
-                       {
+               if( gui->current_operation == CWINDOW_CAMERA ||
+                   gui->current_operation == CWINDOW_PROJECTOR ) {
+                       if( !gui->ctrl_down() && gui->shift_down() && !gui->translating_zoom ) {
                                gui->translating_zoom = 1;
                                gui->reset_affected();
                        }
                                gui->translating_zoom = 1;
                                gui->reset_affected();
                        }
-                       else
-                       if(!gui->ctrl_down() && !gui->shift_down() && gui->translating_zoom)
-                       {
+                       else if( !gui->ctrl_down() && !gui->shift_down() && gui->translating_zoom ) {
                                gui->translating_zoom = 0;
                                gui->reset_affected();
                        }
 
 // Get target keyframe
                                gui->translating_zoom = 0;
                                gui->reset_affected();
                        }
 
 // Get target keyframe
-                       float last_center_x;
-                       float last_center_y;
-                       float last_center_z;
-                       int created;
-
-                       if(!gui->affected_x && !gui->affected_y && !gui->affected_z)
-                       {
-                               FloatAutos *affected_x_autos;
-                               FloatAutos *affected_y_autos;
-                               FloatAutos *affected_z_autos;
+                       if( !gui->affected_x && !gui->affected_y && !gui->affected_z ) {
                                if(!gui->affected_track) return 0;
                                if(!gui->affected_track) return 0;
+                               FloatAutos *affected_x_autos, *affected_y_autos, *affected_z_autos;
+                               FloatAutos** autos = (FloatAutos**) gui->affected_track->automation->autos;
+                               if( mwindow->edl->session->cwindow_operation == CWINDOW_CAMERA ) {
+                                       affected_x_autos = autos[AUTOMATION_CAMERA_X];
+                                       affected_y_autos = autos[AUTOMATION_CAMERA_Y];
+                                       affected_z_autos = autos[AUTOMATION_CAMERA_Z];
+                               }
+                               else {
+                                       affected_x_autos = autos[AUTOMATION_PROJECTOR_X];
+                                       affected_y_autos = autos[AUTOMATION_PROJECTOR_Y];
+                                       affected_z_autos = autos[AUTOMATION_PROJECTOR_Z];
+                               }
                                double position = mwindow->edl->local_session->get_selectionstart(1);
                                int64_t track_position = gui->affected_track->to_units(position, 0);
                                double position = mwindow->edl->local_session->get_selectionstart(1);
                                int64_t track_position = gui->affected_track->to_units(position, 0);
-
-                               if(mwindow->edl->session->cwindow_operation == CWINDOW_CAMERA)
-                               {
-                                       affected_x_autos = (FloatAutos*)gui->affected_track->automation->autos[AUTOMATION_CAMERA_X];
-                                       affected_y_autos = (FloatAutos*)gui->affected_track->automation->autos[AUTOMATION_CAMERA_Y];
-                                       affected_z_autos = (FloatAutos*)gui->affected_track->automation->autos[AUTOMATION_CAMERA_Z];
-                               }
-                               else
-                               {
-                                       affected_x_autos = (FloatAutos*)gui->affected_track->automation->autos[AUTOMATION_PROJECTOR_X];
-                                       affected_y_autos = (FloatAutos*)gui->affected_track->automation->autos[AUTOMATION_PROJECTOR_Y];
-                                       affected_z_autos = (FloatAutos*)gui->affected_track->automation->autos[AUTOMATION_PROJECTOR_Z];
+                               FloatAuto *prev_x = 0, *next_x = 0;
+                               float new_x = affected_x_autos->get_value(track_position, PLAY_FORWARD, prev_x, next_x);
+                               FloatAuto *prev_y = 0, *next_y = 0;
+                               float new_y = affected_y_autos->get_value(track_position, PLAY_FORWARD, prev_y, next_y);
+                               FloatAuto *prev_z = 0, *next_z = 0;
+                               float new_z = affected_z_autos->get_value(track_position, PLAY_FORWARD, prev_z, next_z);
+                               int zooming = gui->translating_zoom, created;
+                               gui->affected_x = (FloatAuto*)gui->cwindow->calculate_affected_auto(
+                                                       affected_x_autos, !zooming, &created, 0);
+                               if( created ) {
+                                       gui->affected_x->set_value(new_x);
+                                       redraw_canvas = 1;
                                }
                                }
-
-
-                               if(gui->translating_zoom)
-                               {
-                                       FloatAuto *previous = 0;
-                                       FloatAuto *next = 0;
-                                       float new_z = affected_z_autos->get_value(
-                                               track_position,
-                                               PLAY_FORWARD,
-                                               previous,
-                                               next);
-                                       gui->affected_z =
-                                               (FloatAuto*)gui->cwindow->calculate_affected_auto(
-                                                       affected_z_autos, 1, &created, 0);
-                                       if(created) {
-                                               gui->affected_z->set_value(new_z);
-                                               redraw_canvas = 1;
-                                       }
+                               gui->affected_y = (FloatAuto*)gui->cwindow->calculate_affected_auto(
+                                                       affected_y_autos, !zooming, &created, 0);
+                               if( created ) {
+                                       gui->affected_y->set_value(new_y);
+                                       redraw_canvas = 1;
                                }
                                }
-                               else
-                               {
-                                       FloatAuto *previous = 0;
-                                       FloatAuto *next = 0;
-                                       float new_x = affected_x_autos->get_value(
-                                               track_position,
-                                               PLAY_FORWARD,
-                                               previous,
-                                               next);
-                                       previous = 0;
-                                       next = 0;
-                                       float new_y = affected_y_autos->get_value(
-                                               track_position,
-                                               PLAY_FORWARD,
-                                               previous,
-                                               next);
-                                       gui->affected_x =
-                                               (FloatAuto*)gui->cwindow->calculate_affected_auto(
-                                                       affected_x_autos, 1, &created, 0);
-                                       if(created) {
-                                               gui->affected_x->set_value(new_x);
-                                               redraw_canvas = 1;
-                                       }
-                                       gui->affected_y =
-                                               (FloatAuto*)gui->cwindow->calculate_affected_auto(
-                                                       affected_y_autos, 1, &created, 0);
-                                       if(created) {
-                                               gui->affected_y->set_value(new_y);
-                                               redraw_canvas = 1;
-                                       }
+                               gui->affected_z = (FloatAuto*)gui->cwindow->calculate_affected_auto(
+                                                       affected_z_autos, zooming, &created, 0);
+                               if( created ) {
+                                       gui->affected_z->set_value(new_z);
+                                       redraw_canvas = 1;
                                }
                                }
-
                                calculate_origin();
 
                                calculate_origin();
 
-                               if(gui->translating_zoom)
-                               {
+                               if( gui->translating_zoom ) {
                                        gui->center_z = gui->affected_z->get_value();
                                }
                                        gui->center_z = gui->affected_z->get_value();
                                }
-                               else
-                               {
+                               else {
                                        gui->center_x = gui->affected_x->get_value();
                                        gui->center_y = gui->affected_y->get_value();
                                }
                                        gui->center_x = gui->affected_x->get_value();
                                        gui->center_y = gui->affected_y->get_value();
                                }
@@ -3080,41 +3037,36 @@ int CWindowCanvas::test_bezier(int button_press,
                                redraw = 1;
                        }
 
                                redraw = 1;
                        }
 
-                       if(gui->translating_zoom)
-                       {
-                               last_center_z = gui->affected_z->get_value();
+                       float x_val = gui->affected_x->get_value();
+                       float y_val = gui->affected_y->get_value();
+                       float z_val = gui->affected_z->get_value();
+
+                       if( gui->translating_zoom ) {
                                float z = gui->center_z + (cursor_y - gui->y_origin) / 128;
                                if( z < 0 ) z = 0;
                                float z = gui->center_z + (cursor_y - gui->y_origin) / 128;
                                if( z < 0 ) z = 0;
-                               if(!EQUIV(last_center_z, z))
-                               {
+                               if( !EQUIV(z_val, z) ) {
                                        rerender = 1;
                                        redraw = 1;
                                        redraw_canvas = 1;
                                }
                                gui->affected_z->set_value(z);
                        }
                                        rerender = 1;
                                        redraw = 1;
                                        redraw_canvas = 1;
                                }
                                gui->affected_z->set_value(z);
                        }
-                       else
-                       {
-                               last_center_x = gui->affected_x->get_value();
-                               last_center_y = gui->affected_y->get_value();
+                       else {
                                float dx = cursor_x - gui->x_origin;
                                float dy = cursor_y - gui->y_origin;
 // follow image, not camera
                                float dx = cursor_x - gui->x_origin;
                                float dy = cursor_y - gui->y_origin;
 // follow image, not camera
-                               if(gui->current_operation == CWINDOW_CAMERA ) {
-                                       dx = -dx;  dy = -dy;
+                               if( gui->current_operation == CWINDOW_CAMERA ) {
+                                       dx = -dx / z_val;  dy = -dy / z_val;
                                }
                                float x = gui->center_x + dx;
                                float y = gui->center_y + dy;
                                gui->affected_x->set_value(x);
                                gui->affected_y->set_value(y);
                                }
                                float x = gui->center_x + dx;
                                float y = gui->center_y + dy;
                                gui->affected_x->set_value(x);
                                gui->affected_y->set_value(y);
-                               if( !EQUIV(last_center_x, x) || !EQUIV(last_center_y, y) )
-                               {
+                               if( !EQUIV(x_val, x) || !EQUIV(y_val, y) ) {
                                        rerender = 1;
                                        redraw = 1;
                                        redraw_canvas = 1;
                                }
                                        rerender = 1;
                                        redraw = 1;
                                        redraw_canvas = 1;
                                }
-                               gui->affected_x->set_value(x);
-                               gui->affected_y->set_value(y);
                        }
                }
 
                        }
                }
 
index d694ff87e15b5a3145750b79063a2c9cdb945c99..e2f14c3d18fabfa87c1bd6c39d1339bbb1aecef6 100644 (file)
 
 
 static int gif_err = 0;
 
 
 static int gif_err = 0;
-#define GIF_ERR ,&gif_err
-#define GifErrorString(s) Gif##ErrorString(gif_err)
-#define GifLastError(s) gif_err
-
-const char *gifErrorString()
-{
-       static char msg[32];
-       snprintf(msg, sizeof(msg), "Gif Error %d", GifLastError());
-       return msg;
-}
 
 FileGIF::FileGIF(Asset *asset, File *file)
  : FileList(asset, file, "GIFLIST", ".gif", FILE_GIF, FILE_GIF_LIST)
 
 FileGIF::FileGIF(Asset *asset, File *file)
  : FileList(asset, file, "GIFLIST", ".gif", FILE_GIF, FILE_GIF_LIST)
@@ -113,9 +103,9 @@ int FileGIF::read_frame_header(char *path)
 static int input_func(GifFileType *gif_file, GifByteType *buffer, int bytes)
 {
        FileGIF *file = (FileGIF*)gif_file->UserData;
 static int input_func(GifFileType *gif_file, GifByteType *buffer, int bytes)
 {
        FileGIF *file = (FileGIF*)gif_file->UserData;
-       if(file->offset + bytes > file->size) bytes = file->size - file->offset;
-       if(bytes > 0)
-       {
+       if( file->offset + bytes > file->size )
+               bytes = file->size - file->offset;
+       if( bytes > 0 ) {
                memcpy(buffer, file->data + file->offset, bytes);
                file->offset += bytes;
        }
                memcpy(buffer, file->data + file->offset, bytes);
                file->offset += bytes;
        }
@@ -128,156 +118,108 @@ int FileGIF::read_frame(VFrame *output, VFrame *input)
        offset = 0;
        size = input->get_compressed_size();
 
        offset = 0;
        size = input->get_compressed_size();
 
-       GifFileType *gif_file;
-       GifRowType *gif_buffer;
-       gif_file = DGifOpen(this, input_func GIF_ERR);
-
-
-       if(gif_file == 0)
-       {
-               eprintf("FileGIF::read_frame %d: %s\n", __LINE__, GifErrorString());
+       GifFileType *gif_file = DGifOpen(this, input_func, &gif_err);
+       if( !gif_file ) {
+               eprintf("FileGIF::read_frame %d: %s\n", __LINE__, GifErrorString(gif_err));
                return 1;
        }
                return 1;
        }
-       gif_buffer = (GifRowType*)malloc(sizeof(GifRowType) * gif_file->SHeight);
+
+       GifRowType *gif_buffer = (GifRowType*)malloc(sizeof(GifRowType) * gif_file->SHeight);
        int row_size = gif_file->SWidth * sizeof(GifPixelType);
        gif_buffer[0] = (GifRowType)malloc(row_size);
 
        int row_size = gif_file->SWidth * sizeof(GifPixelType);
        gif_buffer[0] = (GifRowType)malloc(row_size);
 
-       for(int i = 0; i < gif_file->SWidth; i++)
-       {
+       for( int i=0; i<gif_file->SWidth; ++i )
                gif_buffer[0][i] = gif_file->SBackGroundColor;
                gif_buffer[0][i] = gif_file->SBackGroundColor;
-       }
-
-       for(int i = 0; i < gif_file->SHeight; i++)
-       {
+       for( int i=0; i<gif_file->SHeight; ++i ) {
                gif_buffer[i] = (GifRowType)malloc(row_size);
                memcpy(gif_buffer[i], gif_buffer[0], row_size);
        }
 
                gif_buffer[i] = (GifRowType)malloc(row_size);
                memcpy(gif_buffer[i], gif_buffer[0], row_size);
        }
 
+       int ret = 0, done = 0;
        GifRecordType record_type;
        GifRecordType record_type;
-       do
-       {
-               if(DGifGetRecordType(gif_file, &record_type) == GIF_ERROR)
-               {
-                       eprintf("FileGIF::read_frame %d: %s\n", __LINE__, GifErrorString());
+       while( !ret && !done ) {
+               if( DGifGetRecordType(gif_file, &record_type) == GIF_ERROR ) {
+                       eprintf("FileGIF::read_frame %d: %s\n", __LINE__, GifErrorString(gif_err));
+                       ret = 1;
                        break;
                }
 
                        break;
                }
 
-               switch(record_type)
-               {
-                       case IMAGE_DESC_RECORD_TYPE:
-                       {
-                               if(DGifGetImageDesc(gif_file) == GIF_ERROR)
-                               {
-                                       eprintf("FileGIF::read_frame %d: %s\n", __LINE__, GifErrorString());
-                                       break;
-                               }
-
-                               int row = gif_file->Image.Top;
-                               int col = gif_file->Image.Left;
-                               int width = gif_file->Image.Width;
-                               int height = gif_file->Image.Height;
-                               if(gif_file->Image.Left + gif_file->Image.Width > gif_file->SWidth ||
-                                 gif_file->Image.Top + gif_file->Image.Height > gif_file->SHeight)
-                               {
-                                       DGifCloseFile(gif_file GIF_ERR);
-                                       for(int k = 0; k < gif_file->SHeight; k++)
-                                       {
-                                               free(gif_buffer[k]);
-                                       }
-                                       free(gif_buffer);
-                                       return 1;
-                               }
-
-                               if (gif_file->Image.Interlace)
-                               {
-                                   static int InterlacedOffset[] = { 0, 4, 2, 1 };
-                                   static int InterlacedJumps[] = { 8, 8, 4, 2 };
+               switch( record_type ) {
+               case IMAGE_DESC_RECORD_TYPE: {
+                       if( DGifGetImageDesc(gif_file) == GIF_ERROR ) {
+                               eprintf("FileGIF::read_frame %d: %s\n", __LINE__, GifErrorString(gif_err));
+                               break;
+                       }
+                       int row = gif_file->Image.Top;
+                       int col = gif_file->Image.Left;
+                       int width = gif_file->Image.Width;
+                       int height = gif_file->Image.Height;
+                       int ret = 0;
+                       if( gif_file->Image.Left + gif_file->Image.Width > gif_file->SWidth ||
+                           gif_file->Image.Top + gif_file->Image.Height > gif_file->SHeight )
+                               ret = 1;
+                       if( !ret && gif_file->Image.Interlace ) {
+                               static int InterlacedOffset[] = { 0, 4, 2, 1 };
+                               static int InterlacedJumps[] = { 8, 8, 4, 2 };
 /* Need to perform 4 passes on the images: */
 /* Need to perform 4 passes on the images: */
-                               for (int i = 0; i < 4; i++)
-                                       {
-                                               for (int j = row + InterlacedOffset[i];
-                                                       j < row + height;
-                                                       j += InterlacedJumps[i])
-                                               {
-                                               if (DGifGetLine(gif_file,
-                                                               &gif_buffer[j][col],
-                                                               width) == GIF_ERROR)
-                                                       {
-                                                               DGifCloseFile(gif_file GIF_ERR);
-                                                               for(int k = 0; k < gif_file->SHeight; k++)
-                                                               {
-                                                                       free(gif_buffer[k]);
-                                                               }
-                                                               free(gif_buffer);
-                                                               return 1;
-                                               }
-                                               }
+                               for( int i=0; i<4; ++i ) {
+                                       int j = row + InterlacedOffset[i];
+                                       for( ; !ret && j<row + height; j+=InterlacedJumps[i] ) {
+                                               if( DGifGetLine(gif_file, &gif_buffer[j][col], width) == GIF_ERROR )
+                                                       ret = 1;
                                        }
                                }
                                        }
                                }
-                               else
-                               {
-                               for (int i = 0; i < height; i++)
-                                       {
-                                               if (DGifGetLine(gif_file, &gif_buffer[row++][col],
-                                                       width) == GIF_ERROR)
-                                               {
-                                                       DGifCloseFile(gif_file GIF_ERR);
-                                                       for(int k = 0; k < gif_file->SHeight; k++)
-                                                       {
-                                                               free(gif_buffer[k]);
-                                                       }
-                                                       free(gif_buffer);
-                                               return 1;
-                                               }
-                               }
+                       }
+                       else {
+                               for( int i=0; !ret && i<height; ++i ) {
+                                       if (DGifGetLine(gif_file, &gif_buffer[row++][col], width) == GIF_ERROR)
+                                               ret = 1;
                                }
                                }
-
-                               break;
                        }
                        }
-                       default:
-                               break;
-               }
-
-       } while(record_type != TERMINATE_RECORD_TYPE);
-
-
-       //int background = gif_file->SBackGroundColor;
-       ColorMapObject *color_map = (gif_file->Image.ColorMap
-               ? gif_file->Image.ColorMap
-               : gif_file->SColorMap);
-       if(!color_map)
-       {
-               DGifCloseFile(gif_file GIF_ERR);
-               for(int k = 0; k < gif_file->SHeight; k++)
-               {
-                       free(gif_buffer[k]);
+                       break; }
+               case EXTENSION_RECORD_TYPE: {
+                       int ExtFunction = 0;
+                       GifByteType *ExtData = 0;
+                       if( DGifGetExtension(gif_file, &ExtFunction, &ExtData) == GIF_ERROR )
+                               ret = 1;
+                       while( !ret && ExtData ) {
+                               if( DGifGetExtensionNext(gif_file, &ExtData) == GIF_ERROR )
+                                       ret = 1;
+                       }
+                       break; }
+               case TERMINATE_RECORD_TYPE:
+                       done = 1;
+                       break;
+               default:
+                       break;
                }
                }
-               free(gif_buffer);
-               return 1;
        }
 
        }
 
-       int screen_width = gif_file->SWidth;
-       int screen_height = gif_file->SHeight;
-       for(int i = 0; i < screen_height; i++)
-       {
-               GifRowType gif_row = gif_buffer[i];
-               unsigned char *out_ptr = output->get_rows()[i];
-               for(int j = 0; j < screen_width; j++)
-               {
-                       GifColorType *color_map_entry = &color_map->Colors[gif_row[j]];
-                       *out_ptr++ = color_map_entry->Red;
-                       *out_ptr++ = color_map_entry->Green;
-                       *out_ptr++ = color_map_entry->Blue;
+       ColorMapObject *color_map = 0;
+       if( !ret ) {
+               //int background = gif_file->SBackGroundColor;
+               color_map = gif_file->Image.ColorMap;
+               if( !color_map ) color_map = gif_file->SColorMap;
+               if( !color_map ) ret = 1;
+       }
+       if( !ret ) {
+               int screen_width = gif_file->SWidth;
+               int screen_height = gif_file->SHeight;
+               for( int i=0; i<screen_height; ++i ) {
+                       GifRowType gif_row = gif_buffer[i];
+                       unsigned char *out_ptr = output->get_rows()[i];
+                       for( int j=0; j<screen_width; ++j ) {
+                               GifColorType *color_map_entry = &color_map->Colors[gif_row[j]];
+                               *out_ptr++ = color_map_entry->Red;
+                               *out_ptr++ = color_map_entry->Green;
+                               *out_ptr++ = color_map_entry->Blue;
+                       }
                }
        }
                }
        }
-
-
-       for(int k = 0; k < gif_file->SHeight; k++)
-       {
+       for( int k=0; k<gif_file->SHeight; ++k )
                free(gif_buffer[k]);
                free(gif_buffer[k]);
-       }
        free(gif_buffer);
        free(gif_buffer);
-       DGifCloseFile(gif_file GIF_ERR);
-       return 0;
+       DGifCloseFile(gif_file, &gif_err);
+       return ret;
 }
 
 }
 
index 53677b4229bc32eca088241ba9438993a2c8558d..7cdd58f72b5711af5df8a0c385d3429fcf36dab2 100644 (file)
@@ -932,9 +932,9 @@ int MWindowGUI::visible(int64_t x1, int64_t x2, int64_t view_x1, int64_t view_x2
 }
 
 
 }
 
 
-void MWindowGUI::show_message(const char *message, int color)
+void MWindowGUI::show_message(const char *message, int msg_color, int bar_color)
 {
 {
-       statusbar->show_message(message, color);
+       statusbar->show_message(message, msg_color, bar_color);
 }
 
 void MWindowGUI::update_default_message()
 }
 
 void MWindowGUI::update_default_message()
index 592e38767f674270337fdabf3d157d900a743cc8..68e0a4f7707fcab015a1029b6b04a5db459a77a4 100644 (file)
@@ -164,7 +164,7 @@ public:
        int menu_w();
        int menu_h();
 // Draw on the status bar only.
        int menu_w();
        int menu_h();
 // Draw on the status bar only.
-       void show_message(const char *message, int color=-1);
+       void show_message(const char *message, int msg_color=-1, int box_color=-1);
        void update_default_message();
        void reset_default_message();
        void default_message();
        void update_default_message();
        void reset_default_message();
        void default_message();
index 6a0d622148658707f57eea0481add80b4a3bcee2..13169c870c53e7e5274432ede78f6adaed7af353 100644 (file)
@@ -103,13 +103,13 @@ void StatusBar::resize_event()
        flash(0);
 }
 
        flash(0);
 }
 
-void StatusBar::show_message(const char *text, int color)
+void StatusBar::show_message(const char *text, int msg_color, int box_color)
 {
        int mx = mwindow->theme->mstatus_message_x;
        int my = mwindow->theme->mstatus_message_y;
        int tx = status_text->get_x(), th = status_text->get_h();
 {
        int mx = mwindow->theme->mstatus_message_x;
        int my = mwindow->theme->mstatus_message_y;
        int tx = status_text->get_x(), th = status_text->get_h();
-       if( color >= 0 ) {
-               set_color(color);
+       if( box_color >= 0 ) {
+               set_color(box_color);
                int bb = th/4, bh = th - bb*2;
                draw_box(mx+bb,my+bb, bh,bh);
                flash(mx,my, th,th);  mx += 5;
                int bb = th/4, bh = th - bb*2;
                draw_box(mx+bb,my+bb, bh,bh);
                flash(mx,my, th,th);  mx += 5;
@@ -121,10 +121,12 @@ void StatusBar::show_message(const char *text, int color)
                flash(mx,my, th,th);
                status_text->reposition_window(mx, my);
        }
                flash(mx,my, th,th);
                status_text->reposition_window(mx, my);
        }
-       color = mwindow->theme->message_normal;
-       status_text->set_color(color);
+       if( msg_color < 0 )
+               msg_color = mwindow->theme->message_normal;
+       status_text->set_color(msg_color);
        status_text->update(text);
 }
        status_text->update(text);
 }
+
 void StatusBar::reset_default_message()
 {
        status_color = -1;
 void StatusBar::reset_default_message()
 {
        status_color = -1;
index eac565949f8f38b61b06e8a36503f8e43bb0f068..c1e553177721d3a3254aa2b95c96471f37de9f2e 100644 (file)
@@ -34,7 +34,7 @@ public:
        StatusBar(MWindow *mwindow, MWindowGUI *gui);
        ~StatusBar();
 
        StatusBar(MWindow *mwindow, MWindowGUI *gui);
        ~StatusBar();
 
-       void show_message(const char *text, int color=-1);
+       void show_message(const char *text, int msg_color=-1, int box_color=-1);
        void update_default_message();
        void reset_default_message();
        void default_message();
        void update_default_message();
        void reset_default_message();
        void default_message();
index 6e6eb3b2727a35b78dd3525fb7385e3874cd863b..27eede528e536bc2a324936ac4fb7d943a3dac89 100644 (file)
@@ -5471,11 +5471,11 @@ double TrackCanvas::time_visible()
 }
 
 
 }
 
 
-void TrackCanvas::show_message(Auto *current, int color, const char *fmt, ...)
+void TrackCanvas::show_message(Auto *current, int box_color, const char *fmt, ...)
 {
        char string[BCTEXTLEN];
        char *cp = string, *ep = cp + sizeof(string)-1;
 {
        char string[BCTEXTLEN];
        char *cp = string, *ep = cp + sizeof(string)-1;
-       if( color >= 0 ) {
+       if( box_color >= 0 ) {
                cp += snprintf(string, ep-cp, "%-8s ",
                        FloatAuto::curve_name(((FloatAuto*)current)->curve_mode));
        }
                cp += snprintf(string, ep-cp, "%-8s ",
                        FloatAuto::curve_name(((FloatAuto*)current)->curve_mode));
        }
@@ -5491,7 +5491,7 @@ void TrackCanvas::show_message(Auto *current, int color, const char *fmt, ...)
        va_start(ap, fmt);
        vsnprintf(cp, ep-cp, fmt, ap);
        va_end(ap);
        va_start(ap, fmt);
        vsnprintf(cp, ep-cp, fmt, ap);
        va_end(ap);
-       gui->show_message(string, color);
+       gui->show_message(string, -1, box_color);
 }
 
 // Patchbay* TrackCanvas::get_patchbay()
 }
 
 // Patchbay* TrackCanvas::get_patchbay()
index 578ebf26af1ead6aeecc0309486936a4ef8bc0df..4b9c4eba22736a68f8c5be3f8fd9013260ea6f44 100644 (file)
@@ -360,7 +360,7 @@ public:
        int update_drag_toggleauto(int cursor_x, int cursor_y);
        int update_drag_auto(int cursor_x, int cursor_y);
        int update_drag_pluginauto(int cursor_x, int cursor_y);
        int update_drag_toggleauto(int cursor_x, int cursor_y);
        int update_drag_auto(int cursor_x, int cursor_y);
        int update_drag_pluginauto(int cursor_x, int cursor_y);
-       void show_message(Auto *current, int color, const char *fmt, ...);
+       void show_message(Auto *current, int box_color, const char *fmt, ...);
 
 // Update status bar to reflect drag operation
        void update_drag_caption();
 
 // Update status bar to reflect drag operation
        void update_drag_caption();
index f3314df1044c14d503916e804c08a4617564a226..cc4f0fb4351f6877330fba9587aac58846cfe621 100644 (file)
@@ -225,10 +225,9 @@ PKG_3RD([flac],[auto],
   [ include ])
 
 PKG_3RD([giflib],[yes],
   [ include ])
 
 PKG_3RD([giflib],[yes],
-  [giflib-5.1.4],
-  [ lib/.libs/libgif.a \
-    util/libgetarg.a ],
-  [ lib ])
+  [giflib-5.1.6],
+  [ libgif.a ],
+  [ . ])
 
 PKG_3RD([ilmbase],[auto],
   [ilmbase-2.2.1],
 
 PKG_3RD([ilmbase],[auto],
   [ilmbase-2.2.1],
@@ -436,10 +435,30 @@ AC_DEFUN([REQUIRE_PROG], [
  fi
 ])
 
  fi
 ])
 
-# Checks for programs.
+## arch dep tests
+ARCH=`uname -m`
+I86=`expr "x$ARCH" : 'xi[346]86.*'`
+X86=`expr "x$ARCH" : 'x..._64*'`
+
+if test "x$I86$X86" != "x00" ; then
+  # Checks for ix86 programs.
+  REQUIRE_PROG(NASM, [nasm])
+  # libx264 nasm fix
+  AC_MSG_CHECKING([nasm x264 compatible])
+  echo "vmovdqa32 [[eax]]{k1}{z}, zmm0" > conftest.asm
+  nasm conftest.asm -o conftest.o > /dev/null 2>&1
+  if test $? != 0 ; then
+   AC_MSG_RESULT([no])
+   AC_MSG_WARN([libx264 built without assembly code])
+   X264_CFG_PARAMS="$X264_CFG_PARAMS --disable-asm"
+  else
+   AC_MSG_RESULT([yes])
+  fi
+  rm -f conftest.asm conftest.o
+  REQUIRE_PROG(YASM, [yasm])
+fi
+## end arch dep tests
 
 
-REQUIRE_PROG(NASM, [nasm])
-REQUIRE_PROG(YASM, [yasm])
 REQUIRE_PROG(OBJCOPY, [objcopy])
 if test "x$FATAL_ERROR" != "x"; then
  AC_MSG_ERROR("fatal eror.")
 REQUIRE_PROG(OBJCOPY, [objcopy])
 if test "x$FATAL_ERROR" != "x"; then
  AC_MSG_ERROR("fatal eror.")
@@ -447,19 +466,6 @@ fi
 CHECK_PROG(PACTL, [pactl])
 WANT_PACTL=$PROG_PACTL
 
 CHECK_PROG(PACTL, [pactl])
 WANT_PACTL=$PROG_PACTL
 
-# libx264 nasm fix
-AC_MSG_CHECKING([nasm x264 compatible])
-echo "vmovdqa32 [[eax]]{k1}{z}, zmm0" > conftest.asm
-nasm conftest.asm -o conftest.o > /dev/null 2>&1
-if test $? != 0 ; then
- AC_MSG_RESULT([no])
- AC_MSG_WARN([libx264 built without assembly code])
- X264_CFG_PARAMS="$X264_CFG_PARAMS --disable-asm"
-else
- AC_MSG_RESULT([yes])
-fi
-rm -f conftest.asm conftest.o
-
 AC_CHECK_DECL([X_HAVE_UTF8_STRING],,[no_utf=yes],[#include <X11/Xlib.h>])
 if test "$no_utf" = "yes"; then
   AC_MSG_ERROR([Cinelerra requires utf8 support in X Windows.])
 AC_CHECK_DECL([X_HAVE_UTF8_STRING],,[no_utf=yes],[#include <X11/Xlib.h>])
 if test "$no_utf" = "yes"; then
   AC_MSG_ERROR([Cinelerra requires utf8 support in X Windows.])
index b636734229aae6a9e70cc5013f1487027cd1bf24..f55a469d2a28320656b087d03125f4f61bcdeabe 100644 (file)
                <td align="left"><font face="Liberation Serif" size=4><br></font></td>
                <td align="left"><font face="Liberation Serif" size=4>Reset projector</font></td>
        </tr>
                <td align="left"><font face="Liberation Serif" size=4><br></font></td>
                <td align="left"><font face="Liberation Serif" size=4>Reset projector</font></td>
        </tr>
+       <tr>
+               <td height="26" align="left"><font face="Liberation Serif" size=4><br></font></td>
+               <td align="left"><font face="Liberation Serif" size=4>Left mouse</font></td>
+               <td align="left"><font face="Liberation Serif" size=4>Shift</font></td>
+               <td align="left"><font face="Liberation Serif" size=4>Camera enabled - zooms in/out</font></td>
+       </tr>
+       <tr>
+               <td height="26" align="left"><font face="Liberation Serif" size=4><br></font></td>
+               <td align="left"><font face="Liberation Serif" size=4>Left mouse</font></td>
+               <td align="left"><font face="Liberation Serif" size=4>Shift</font></td>
+               <td align="left"><font face="Liberation Serif" size=4>Projector enabled - zooms in/out</font></td>
+       </tr>
        <tr>
                <td height="26" align="left"><font face="Liberation Serif" size=4><br></font></td>
                <td align="left"><font face="Liberation Serif" size=4>F1</font></td>
        <tr>
                <td height="26" align="left"><font face="Liberation Serif" size=4><br></font></td>
                <td align="left"><font face="Liberation Serif" size=4>F1</font></td>
index 15442cfb1d829de464d6c01dbaa47a56012c6828..201c5a405fd116cdad5ea43fbba72f925e118e62 100644 (file)
@@ -95,7 +95,7 @@ $(shell echo $(OBJS) > $(OBJDIR)/objs)
 all: $(OUTPUT) $(UTILS)
 
 $(BCXFER):     bccmdl.py bcxfer.C bcxfer.h
 all: $(OUTPUT) $(UTILS)
 
 $(BCXFER):     bccmdl.py bcxfer.C bcxfer.h
-       python3 < ./bccmdl.py
+       python < ./bccmdl.py
        +$(MAKE) -C xfer
 
 $(OUTPUT): $(OBJS) $(BCXFER)
        +$(MAKE) -C xfer
 
 $(OUTPUT): $(OBJS) $(BCXFER)
index 2296e4c2ca19b7ddc612c4d0df07e44229c23812..47d6314f10bfabd3aea29934994b0ff55921f236 100644 (file)
@@ -167,7 +167,7 @@ audiofile.cfg_params?=--enable-shared=no
 audiofile.mak_params?=LIBS="-lm -lstdc++"
 flac.cfg_params?= --enable-shared=no
 flac.cflags?="$(call inc_path,libogg,include) $(call ld_path,libogg,src/.libs)"
 audiofile.mak_params?=LIBS="-lm -lstdc++"
 flac.cfg_params?= --enable-shared=no
 flac.cflags?="$(call inc_path,libogg,include) $(call ld_path,libogg,src/.libs)"
-giflib.cfg_params?=--enable-shared=no
+giflib.cfg_params=echo "exec true" > ./configure; chmod +x ./configure;
 ilmbase.cfg_vars= CFLAGS+=" -Wno-narrowing" CXXFLAGS+=" -Wno-narrowing"
 ilmbase.cfg_params?=--prefix=$(call bld_path,ilmbase,usr)
 ilmbase.mak_params?=; $(MAKE) -C ilmbase* install; cd $(call bld_path,ilmbase); ln -sf lib64 usr/lib
 ilmbase.cfg_vars= CFLAGS+=" -Wno-narrowing" CXXFLAGS+=" -Wno-narrowing"
 ilmbase.cfg_params?=--prefix=$(call bld_path,ilmbase,usr)
 ilmbase.mak_params?=; $(MAKE) -C ilmbase* install; cd $(call bld_path,ilmbase); ln -sf lib64 usr/lib
diff --git a/cinelerra-5.1/thirdparty/src/giflib-5.1.4.tar.xz b/cinelerra-5.1/thirdparty/src/giflib-5.1.4.tar.xz
deleted file mode 100644 (file)
index 86cae55..0000000
Binary files a/cinelerra-5.1/thirdparty/src/giflib-5.1.4.tar.xz and /dev/null differ
diff --git a/cinelerra-5.1/thirdparty/src/giflib-5.1.6.patch1 b/cinelerra-5.1/thirdparty/src/giflib-5.1.6.patch1
new file mode 100644 (file)
index 0000000..ba7225d
--- /dev/null
@@ -0,0 +1,13 @@
+--- a/Makefile 2019-02-12 07:26:13.000000000 -0700
++++ b/Makefile 2019-02-24 17:51:20.557618626 -0700
+@@ -7,8 +7,8 @@
+ #
+ CC    = gcc
+-OFLAGS = -O0 -g
+-#OFLAGS  = -O2 -fwhole-program
++#OFLAGS = -O0 -g
++OFLAGS  = -O2 -g
+ CFLAGS  = -std=gnu99 -fPIC -Wall -Wno-format-truncation $(OFLAGS)
+ LDFLAGS = -g
diff --git a/cinelerra-5.1/thirdparty/src/giflib-5.1.6.tar.xz b/cinelerra-5.1/thirdparty/src/giflib-5.1.6.tar.xz
new file mode 100644 (file)
index 0000000..7699889
Binary files /dev/null and b/cinelerra-5.1/thirdparty/src/giflib-5.1.6.tar.xz differ