X-Git-Url: https://git.cinelerra-gg.org/git/?a=blobdiff_plain;f=cinelerra-5.0%2Fcinelerra%2Fformattools.C;h=f277fde29e319d0c7ab32dfb9c93227e61a08836;hb=6c0c8bd0e577001d1cc18c6c27d58e62f58a6bff;hp=e5f8c9ade6eba22c70530a4aafbe5e21a9fe79fe;hpb=3564c71f425f390745eb7c75d5121689d53e14c2;p=goodguy%2Fhistory.git diff --git a/cinelerra-5.0/cinelerra/formattools.C b/cinelerra-5.0/cinelerra/formattools.C index e5f8c9ad..f277fde2 100644 --- a/cinelerra-5.0/cinelerra/formattools.C +++ b/cinelerra-5.0/cinelerra/formattools.C @@ -27,10 +27,11 @@ #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 @@ -292,6 +293,7 @@ void FormatTools::update_driver(int driver) { this->video_driver = driver; + locked_compressor = 0; switch(driver) { case CAPTURE_DVB: @@ -304,67 +306,55 @@ 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() { if( do_audio && prompt_audio && audio_switch ) { - asset->audio_data = File::supports_audio(asset->format); audio_switch->update(asset->audio_data); if( !asset->audio_data ) audio_switch->disable(); @@ -372,7 +362,6 @@ void FormatTools::update_format() audio_switch->enable(); } if( do_video && prompt_video && video_switch ) { - asset->video_data = File::supports_video(asset->format); video_switch->update(asset->video_data); if( !asset->video_data ) video_switch->disable(); @@ -404,7 +393,7 @@ void FormatTools::update_extension() const char *extension = File::get_tag(asset->format); // split multiple extensions ArrayList extensions; - int len = strlen(extension); + int len = !extension ? -1 : strlen(extension); const char *extension_ptr = extension; for(int i = 0; i <= len; i++) { @@ -828,7 +817,10 @@ int FormatFormat::handle_event() int new_format = File::strtoformat(format->plugindb, get_selection(0, 0)->get_text()); // if(new_format != format->asset->format) { - format->asset->format = new_format; + Asset *asset = format->asset; + asset->format = new_format; + asset->audio_data = File::supports_audio(asset->format); + asset->video_data = File::supports_video(asset->format); format->format_text->update(selection->get_text()); format->update_extension(); format->close_format_windows(); @@ -849,15 +841,40 @@ FormatFFMPEG::~FormatFFMPEG() { } +int FormatFFMPEG::load_defaults(const char *path, const char *type, + char *codec, char *codec_options, int len) +{ + char default_file[BCTEXTLEN]; + FFMPEG::set_option_path(default_file, "%s/%s.dfl", path, type); + FILE *fp = fopen(default_file,"r"); + if( !fp ) return 1; + 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); +} + int FormatFFMPEG::handle_event() { BC_ListBoxItem *selection = get_selection(0, 0); if( selection ) { char *text = get_selection(0, 0)->get_text(); format->ffmpeg_type->update(text); - strcpy(format->asset->fformat, text); - strcpy(format->asset->ff_audio_options, ""); - strcpy(format->asset->ff_video_options, ""); + Asset *asset = format->asset; + strcpy(asset->fformat, text); + strcpy(asset->ff_audio_options, ""); + strcpy(asset->ff_video_options, ""); + asset->audio_data = !load_defaults("audio", text, asset->acodec, + asset->ff_audio_options, sizeof(asset->ff_audio_options)); + asset->video_data = !load_defaults("video", text, asset->vcodec, + asset->ff_video_options, sizeof(asset->ff_video_options)); format->update_extension(); format->close_format_windows(); format->update_format();