add LastFrame plugin, add bld_scripts
[goodguy/history.git] / cinelerra-5.0 / cinelerra / file.C
index 17e555aa11e8e6221c93afda84d10e0effba9125..c3d024439a457be787de688426904d1819793623 100644 (file)
@@ -40,7 +40,6 @@
 #include "condition.h"
 #include "errorbox.h"
 #include "fileac3.h"
-#include "fileavi.h"
 #include "filebase.h"
 #include "filecr2.h"
 #include "filedb.h"
@@ -52,7 +51,6 @@
 #include "filegif.h"
 #include "file.h"
 #include "filejpeg.h"
-#include "filemov.h"
 #include "filempeg.h"
 #undef HAVE_STDLIB_H // automake conflict
 #include "fileogg.h"
@@ -76,7 +74,6 @@
 #include "pluginserver.h"
 #include "preferences.h"
 #include "samples.h"
-#include "stringfile.h"
 #include "vframe.h"
 
 //suppress noref warning
@@ -181,7 +178,6 @@ int File::get_options(FormatTools *format,
        BC_WindowBase *parent_window = format->window;
        //ArrayList<PluginServer*> *plugindb = format->plugindb;
        Asset *asset = format->asset;
-       const char *locked_compressor = format->locked_compressor;
 
        getting_options = 1;
        format_completion->lock("File::get_options");
@@ -212,14 +208,6 @@ int File::get_options(FormatTools *format,
                                audio_options, 
                                video_options);
                        break;
-               case FILE_MOV:
-                       FileMOV::get_parameters(parent_window, 
-                               asset, 
-                               format_window, 
-                               audio_options, 
-                               video_options,
-                               locked_compressor);
-                       break;
                case FILE_FFMPEG:
                        FileFFMPEG::get_parameters(parent_window, 
                                asset, 
@@ -235,25 +223,6 @@ int File::get_options(FormatTools *format,
                                audio_options, 
                                video_options);
                        break;
-               case FILE_AVI:
-                       FileMOV::get_parameters(parent_window, 
-                               asset, 
-                               format_window, 
-                               audio_options, 
-                               video_options,
-                               locked_compressor);
-                       break;
-               case FILE_AVI_LAVTOOLS:
-               case FILE_AVI_ARNE2:
-               case FILE_AVI_ARNE1:
-               case FILE_AVI_AVIFILE:
-                       FileAVI::get_parameters(parent_window, 
-                               asset, 
-                               format_window, 
-                               audio_options, 
-                               video_options,
-                               locked_compressor);
-                       break;
                case FILE_JPEG:
                case FILE_JPEG_LIST:
                        FileJPEG::get_parameters(parent_window, 
@@ -314,7 +283,7 @@ int File::get_options(FormatTools *format,
 
        if(!format_window)
        {
-               ErrorBox *errorbox = new ErrorBox(PROGRAM_NAME ": Error",
+               ErrorBox *errorbox = new ErrorBox(_(PROGRAM_NAME ": Error"),
                        parent_window->get_abs_cursor_x(1),
                        parent_window->get_abs_cursor_y(1));
                format_window = errorbox;
@@ -516,7 +485,7 @@ int File::open_file(Preferences *preferences,
                        buffer, 
                        buffer_size);
                delete [] buffer;
-               delete [] string;
+               free(string);
 //printf("File::open_file %d\n", __LINE__);
 
 // Get the updated asset from the fork
@@ -672,13 +641,6 @@ int File::open_file(Preferences *preferences,
                                fclose(stream);
                                return FILE_IS_XML;
                        }    // can't load project file
-                       if(FileMOV::check_sig(this->asset)) {
-// MOV file
-// should be last because quicktime lacks a magic number
-                               fclose(stream);
-                               file = new FileMOV(this->asset, this);
-                               break;
-                       }
                        if( !preferences->ffmpeg_early_probe &&
                            FileFFMPEG::check_sig(this->asset) ) {
                                fclose(stream);
@@ -755,10 +717,6 @@ int File::open_file(Preferences *preferences,
                        file = new FileDB(this->asset, this);
                        break;
 
-               case FILE_MOV:
-                       file = new FileMOV(this->asset, this);
-                       break;
-
                case FILE_MPEG:
                case FILE_AMPEG:
                case FILE_VMPEG:
@@ -773,17 +731,6 @@ int File::open_file(Preferences *preferences,
                        file = new FileVorbis(this->asset, this);
                        break;
 
-               case FILE_AVI:
-                       file = new FileMOV(this->asset, this);
-                       break;
-
-               case FILE_AVI_LAVTOOLS:
-               case FILE_AVI_ARNE2:
-               case FILE_AVI_ARNE1:
-               case FILE_AVI_AVIFILE:
-                       file = new FileAVI(this->asset, this);
-                       break;
-
                case FILE_RAWDV:
                        file = new FileDV(this->asset, this);
                        break;
@@ -797,7 +744,7 @@ int File::open_file(Preferences *preferences,
 
 // Reopen file with correct parser and get header.
        if(file->open_file(rd, wr)) {
-               delete file;
+               delete file;  file = 0;
                return FILE_NOT_FOUND;
        }
 
@@ -2039,7 +1986,9 @@ int File::read_frame(VFrame *frame, int is_thread)
 
 //                     printf("File::read_frame %d\n", __LINE__);
                        temp_frame->copy_stacks(frame);
-                       file->read_frame(temp_frame);
+                       int result = file->read_frame(temp_frame);
+                       if( result && frame->get_status() > 0 )
+                               frame->set_status(-1);
 //for(int i = 0; i < 1000 * 1000; i++) ((float*)temp_frame->get_rows()[0])[i] = 1.0;
 // printf("File::read_frame %d %d %d %d %d %d\n", 
 // temp_frame->get_color_model(), 
@@ -2075,7 +2024,9 @@ int File::read_frame(VFrame *frame, int is_thread)
                {
 // Can't advance position here because it needs to be added to cache
 //printf("File::read_frame %d\n", __LINE__);
-                       file->read_frame(frame);
+                       int result = file->read_frame(frame);
+                       if( result && frame->get_status() > 0 )
+                               frame->set_status(-1);
 //for(int i = 0; i < 100 * 1000; i++) ((float*)frame->get_rows()[0])[i] = 1.0;
                }
 
@@ -2177,12 +2128,6 @@ int File::strtoformat(ArrayList<PluginServer*> *plugindb, const char *format)
        if(!strcasecmp(format, _(VMPEG_NAME))) return FILE_VMPEG;
        if(!strcasecmp(format, _(TGA_NAME))) return FILE_TGA;
        if(!strcasecmp(format, _(TGA_LIST_NAME))) return FILE_TGA_LIST;
-       if(!strcasecmp(format, _(MOV_NAME))) return FILE_MOV;
-       if(!strcasecmp(format, _(AVI_NAME))) return FILE_AVI;
-       if(!strcasecmp(format, _(AVI_LAVTOOLS_NAME))) return FILE_AVI_LAVTOOLS;
-       if(!strcasecmp(format, _(AVI_ARNE2_NAME))) return FILE_AVI_ARNE2;
-       if(!strcasecmp(format, _(AVI_ARNE1_NAME))) return FILE_AVI_ARNE1;
-       if(!strcasecmp(format, _(AVI_AVIFILE_NAME))) return FILE_AVI_AVIFILE;
        if(!strcasecmp(format, _(OGG_NAME))) return FILE_OGG;
        if(!strcasecmp(format, _(VORBIS_NAME))) return FILE_VORBIS;
        if(!strcasecmp(format, _(RAWDV_NAME))) return FILE_RAWDV;
@@ -2225,19 +2170,13 @@ const char* File::formattostr(ArrayList<PluginServer*> *plugindb, int format)
                case FILE_TGA_LIST:     return _(TGA_LIST_NAME);
                case FILE_TIFF:         return _(TIFF_NAME);
                case FILE_TIFF_LIST:    return _(TIFF_LIST_NAME);
-               case FILE_MOV:          return _(MOV_NAME);
-               case FILE_AVI_LAVTOOLS: return _(AVI_LAVTOOLS_NAME);
-               case FILE_AVI:          return _(AVI_NAME);
-               case FILE_AVI_ARNE2:    return _(AVI_ARNE2_NAME);
-               case FILE_AVI_ARNE1:    return _(AVI_ARNE1_NAME);
-               case FILE_AVI_AVIFILE:  return _(AVI_AVIFILE_NAME);
                case FILE_OGG:          return _(OGG_NAME);
                case FILE_VORBIS:       return _(VORBIS_NAME);
                case FILE_RAWDV:        return _(RAWDV_NAME);
                case FILE_FFMPEG:       return _(FFMPEG_NAME);
                case FILE_DB:           return _(DBASE_NAME);
        }
-       return "Unknown";
+       return _("Unknown");
 }
 
 int File::strtobits(const char *bits)
@@ -2249,7 +2188,6 @@ int File::strtobits(const char *bits)
        if(!strcasecmp(bits, _(NAME_ULAW))) return BITSULAW;
        if(!strcasecmp(bits, _(NAME_ADPCM))) return BITS_ADPCM;
        if(!strcasecmp(bits, _(NAME_FLOAT))) return BITSFLOAT;
-       if(!strcasecmp(bits, _(NAME_IMA4))) return BITSIMA4;
        return BITSLINEAR16;
 }
 
@@ -2265,9 +2203,8 @@ const char* File::bitstostr(int bits)
                case BITSULAW:          return (NAME_ULAW);
                case BITS_ADPCM:        return (NAME_ADPCM);
                case BITSFLOAT:         return (NAME_FLOAT);
-               case BITSIMA4:          return (NAME_IMA4);
        }
-       return "Unknown";
+       return _("Unknown");
 }
 
 
@@ -2293,7 +2230,6 @@ int File::bytes_per_sample(int bits)
                case BITSLINEAR24:      return 3;
                case BITSLINEAR32:      return 4;
                case BITSULAW:          return 1;
-               case BITSIMA4:          return 1;
        }
        return 1;
 }
@@ -2312,8 +2248,6 @@ int File::get_best_colormodel(Asset *asset, int driver)
        switch(asset->format)
        {
                case FILE_RAWDV:        return FileDV::get_best_colormodel(asset, driver);
-               case FILE_MOV:          return FileMOV::get_best_colormodel(asset, driver);
-               case FILE_AVI:          return FileMOV::get_best_colormodel(asset, driver);
                case FILE_MPEG:         return FileMPEG::get_best_colormodel(asset, driver);
                case FILE_JPEG:
                case FILE_JPEG_LIST:    return FileJPEG::get_best_colormodel(asset, driver);
@@ -2409,7 +2343,6 @@ int File::supports_video(int format)
        switch(format)
        {
                case FILE_OGG:
-               case FILE_MOV:
                case FILE_JPEG:
                case FILE_JPEG_LIST:
                case FILE_CR2:
@@ -2423,11 +2356,6 @@ int File::supports_video(int format)
                case FILE_TIFF:
                case FILE_TIFF_LIST:
                case FILE_VMPEG:
-               case FILE_AVI_LAVTOOLS:
-               case FILE_AVI_ARNE2:
-               case FILE_AVI:
-               case FILE_AVI_ARNE1:
-               case FILE_AVI_AVIFILE:
                case FILE_FFMPEG:
                case FILE_RAWDV:
                        return 1;
@@ -2443,18 +2371,12 @@ int File::supports_audio(int format)
                case FILE_FLAC:
                case FILE_PCM:
                case FILE_WAV:
-               case FILE_MOV:
                case FILE_OGG:
                case FILE_VORBIS:
                case FILE_AMPEG:
                case FILE_AU:
                case FILE_AIFF:
                case FILE_SND:
-               case FILE_AVI:
-               case FILE_AVI_LAVTOOLS:
-               case FILE_AVI_ARNE2:
-               case FILE_AVI_ARNE1:
-               case FILE_AVI_AVIFILE:
                case FILE_FFMPEG:
                        return 1;
        }
@@ -2469,7 +2391,6 @@ const char* File::get_tag(int format)
                case FILE_AIFF:         return "aif";
                case FILE_AMPEG:        return "mp3";
                case FILE_AU:           return "au";
-               case FILE_AVI:          return "avi";
                case FILE_RAWDV:        return "dv";
                case FILE_DB:           return "db";
                case FILE_EXR:          return "exr";
@@ -2477,7 +2398,6 @@ const char* File::get_tag(int format)
                case FILE_FLAC:         return "flac";
                case FILE_JPEG:         return "jpg";
                case FILE_JPEG_LIST:    return "jpg";
-               case FILE_MOV:          return "mov/mp4";
                case FILE_OGG:          return "ogg";
                case FILE_PCM:          return "pcm";
                case FILE_PNG:          return "png";
@@ -2489,7 +2409,7 @@ const char* File::get_tag(int format)
                case FILE_VMPEG:        return "m2v";
                case FILE_VORBIS:       return "ogg";
                case FILE_WAV:          return "wav";
-               case FILE_FFMPEG:       return "media";
+               case FILE_FFMPEG:       return "ffmpg";
        }
        return 0;
 }
@@ -2499,7 +2419,6 @@ const char* File::get_prefix(int format)
        switch(format) {
        case FILE_PCM:          return "PCM";
        case FILE_WAV:          return "WAV";
-       case FILE_MOV:          return "MOV";
        case FILE_PNG:          return "PNG";
        case FILE_JPEG:         return "JPEG";
        case FILE_TIFF:         return "TIFF";
@@ -2508,19 +2427,14 @@ const char* File::get_prefix(int format)
        case FILE_AU:           return "AU";
        case FILE_AIFF:         return "AIFF";
        case FILE_SND:          return "SND";
-       case FILE_AVI_LAVTOOLS: return "AVI_LAVTOOLS";
        case FILE_TGA_LIST:     return "TGA_LIST";
        case FILE_TGA:          return "TGA";
        case FILE_MPEG:         return "MPEG";
        case FILE_AMPEG:        return "AMPEG";
        case FILE_VMPEG:        return "VMPEG";
        case FILE_RAWDV:        return "RAWDV";
-       case FILE_AVI_ARNE2:    return "AVI_ARNE2";
-       case FILE_AVI_ARNE1:    return "AVI_ARNE1";
-       case FILE_AVI_AVIFILE:  return "AVI_AVIFILE";
        case FILE_TIFF_LIST:    return "TIFF_LIST";
        case FILE_PNG_LIST:     return "PNG_LIST";
-       case FILE_AVI:          return "AVI";
        case FILE_AC3:          return "AC3";
        case FILE_EXR:          return "EXR";
        case FILE_EXR_LIST:     return "EXR_LIST";
@@ -2534,7 +2448,7 @@ const char* File::get_prefix(int format)
        case FILE_GIF_LIST:     return "GIF_LIST";
        case FILE_DB:           return "DB";
        }
-       return "UNKNOWN";
+       return _("UNKNOWN");
 }
 
 
@@ -2561,3 +2475,22 @@ int File::record_fd()
 }
 
 
+void get_exe_path(char *result)
+{
+// Get executable path
+       pid_t pid = getpid();
+       char proc_path[BCTEXTLEN];
+       int len = 0;
+       result[0] = 0;
+       sprintf(proc_path, "/proc/%d/exe", pid);
+       if((len = readlink(proc_path, result, BCTEXTLEN)) >= 0)
+       {
+               result[len] = 0;
+//printf("Preferences::Preferences %d %s\n", __LINE__, result);
+               char *ptr = strrchr(result, '/');
+               if(ptr) *ptr = 0;
+       }
+
+}
+
+