rework android-rmt display, add a few buttons
[goodguy/history.git] / cinelerra-5.0 / cinelerra / formattools.C
index a8f3f6bf85da74f0e2b7d4c76568d728d980e37d..f277fde29e319d0c7ab32dfb9c93227e61a08836 100644 (file)
 #include "filesystem.h"
 #include "formattools.h"
 #include "language.h"
+#include "libdv.h"
+#include "libmjpeg.h"
 #include "maxchannels.h"
 #include "mwindow.h"
 #include "preferences.h"
-#include "quicktime.h"
 #include "theme.h"
 #include "videodevice.inc"
 #include <string.h>
@@ -292,6 +293,7 @@ void FormatTools::update_driver(int driver)
 {
        this->video_driver = driver;
 
+       locked_compressor = 0;
        switch(driver)
        {
                case CAPTURE_DVB:
@@ -304,61 +306,50 @@ void FormatTools::update_driver(int driver)
                                format_text->update(_("MPEG stream"));
                                asset->format = FILE_MPEG;
                        }
-                       locked_compressor = 0;
                        audio_switch->update(1);
                        video_switch->update(1);
                        break;
 
                case CAPTURE_IEC61883:
                case CAPTURE_FIREWIRE:
+               case CAPTURE_LML:
                case CAPTURE_BUZ:
                case VIDEO4LINUX2JPEG:
                case CAPTURE_JPEG_WEBCAM:
-                       if(asset->format != FILE_AVI &&
-                               asset->format != FILE_MOV)
-                       {
-                               format_text->update(MOV_NAME);
-                               asset->format = FILE_MOV;
-                       }
-                       else
-                               format_text->update(File::formattostr(asset->format));
-
-                       switch(driver)
-                       {
-                               case CAPTURE_IEC61883:
-                               case CAPTURE_FIREWIRE:
-                                       locked_compressor = (char*)QUICKTIME_DVSD;
-                                       strcpy(asset->vcodec, QUICKTIME_DVSD);
-                                       break;
-
-                               case CAPTURE_BUZ:
-                               case VIDEO4LINUX2JPEG:
-                                       locked_compressor = (char*)QUICKTIME_MJPA;
-                                       strcpy(asset->vcodec, QUICKTIME_MJPA);
-                                       break;
+                       asset->format = FILE_FFMPEG;
+                       format_text->update(File::formattostr(asset->format));
 
-                               case CAPTURE_JPEG_WEBCAM:
-                                       locked_compressor = (char*)QUICKTIME_JPEG;
-                                       strcpy(asset->vcodec, QUICKTIME_JPEG);
-                                       break;
+                       switch(driver) {
+                       case CAPTURE_IEC61883:
+                       case CAPTURE_FIREWIRE:
+                               locked_compressor = (char*)CODEC_TAG_DVSD;
+                               break;
+
+                       case CAPTURE_BUZ:
+                       case CAPTURE_LML:
+                       case VIDEO4LINUX2JPEG:
+                               locked_compressor = (char*)CODEC_TAG_MJPEG;
+                               break;
+
+                       case CAPTURE_JPEG_WEBCAM:
+                               locked_compressor = (char*)CODEC_TAG_JPEG;
+                               break;
                        }
+                       if( locked_compressor )
+                               strcpy(asset->vcodec, locked_compressor);
 
                        audio_switch->update(asset->audio_data);
                        video_switch->update(asset->video_data);
                        break;
 
-
-
-
-
                default:
                        format_text->update(File::formattostr(asset->format));
-                       locked_compressor = 0;
                        audio_switch->update(asset->audio_data);
                        video_switch->update(asset->video_data);
                        break;
        }
        close_format_windows();
+       update_format();
 }
 
 void FormatTools::update_format()
@@ -402,7 +393,7 @@ void FormatTools::update_extension()
        const char *extension = File::get_tag(asset->format);
 // split multiple extensions
        ArrayList<const char*> extensions;
-       int len = strlen(extension);
+       int len = !extension ? -1 : strlen(extension);
        const char *extension_ptr = extension;
        for(int i = 0; i <= len; i++)
        {
@@ -851,18 +842,21 @@ FormatFFMPEG::~FormatFFMPEG()
 }
 
 int FormatFFMPEG::load_defaults(const char *path, const char *type,
-               char *codec, char *codec_options, int len)
+                char *codec, char *codec_options, int len)
 {
        char default_file[BCTEXTLEN];
-       FFMPEG::set_option_path(default_file, "%s/%s", path, type);
+       FFMPEG::set_option_path(default_file, "%s/%s.dfl", path, type);
        FILE *fp = fopen(default_file,"r");
        if( !fp ) return 1;
-       char default_codec[BCSTRLEN];
-       fgets(default_codec, sizeof(default_codec), fp);
-       fclose(fp);
-       char *cp=codec, *dp=default_codec;
-       while( *dp && *dp!='\n' ) *cp++ = *dp++;
+       fgets(codec, BCSTRLEN, fp);
+       char *cp = codec;
+       while( *cp && *cp!='\n' ) ++cp;
        *cp = 0;
+       while( len > 0 && fgets(codec_options, len, fp) ) {
+               int n = strlen(codec_options);
+               codec_options += n;  len -= n;
+       }
+       fclose(fp);
        FFMPEG::set_option_path(default_file, "%s/%s", path, codec);
        return FFMPEG::load_options(default_file, codec_options, len);
 }