X-Git-Url: https://git.cinelerra-gg.org/git/?a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Ffileffmpeg.C;h=6c360da35bd2e8bd0ba50852c96660c24ede04a9;hb=dafc18d66d48cd981a012d2e73a3b3db5351c538;hp=494844c3de02219580c9e49a260e988b5d41d39d;hpb=aafa1fc4eb3303966eedeb0e503c1f0dadac8f70;p=goodguy%2Fhistory.git diff --git a/cinelerra-5.1/cinelerra/fileffmpeg.C b/cinelerra-5.1/cinelerra/fileffmpeg.C index 494844c3..6c360da3 100644 --- a/cinelerra-5.1/cinelerra/fileffmpeg.C +++ b/cinelerra-5.1/cinelerra/fileffmpeg.C @@ -17,6 +17,7 @@ #include "fileffmpeg.h" #include "filesystem.h" #include "indexfile.h" +#include "language.h" #include "mainerror.h" #include "mainprogress.h" #include "mutex.h" @@ -58,6 +59,20 @@ void FFMpegConfigNum::create_objects() BC_TumbleTextBox::create_objects(); } +int FFMpegConfigNum::update_param(const char *param, const char *opts) +{ + char value[BCTEXTLEN]; + if( !FileFFMPEG::get_ff_option(param, opts, value) ) { + if( (*output = atol(value)) < 0 ) { + disable(1); + return 0; + } + BC_TumbleTextBox::update(value); + } + enable(); + return 1; +} + int FFMpegConfigNum::handle_event() { *output = atol(get_text()); @@ -104,6 +119,14 @@ int FFMpegVideoQuality::handle_event() return ret; } +void FileFFMPEG::set_parameters(char *cp, int len, const char *bp) +{ + char *ep = cp + len-2, ch = 0; + while( cp < ep && *bp != 0 ) { ch = *bp++; *cp++ = ch; } + if( ch != '\n' ) *cp++ = '\n'; + *cp = 0; +} + void FileFFMPEG::get_parameters(BC_WindowBase *parent_window, Asset *asset, BC_WindowBase *&format_window, int audio_options, int video_options) @@ -113,7 +136,8 @@ void FileFFMPEG::get_parameters(BC_WindowBase *parent_window, format_window = window; window->create_objects(); if( !window->run_window() ) - strcpy(asset->ff_audio_options, window->audio_options->get_text()); + set_parameters(asset->ff_audio_options, sizeof(asset->ff_audio_options), + window->audio_options->get_text()); delete window; } else if(video_options) { @@ -121,7 +145,8 @@ void FileFFMPEG::get_parameters(BC_WindowBase *parent_window, format_window = window; window->create_objects(); if( !window->run_window() ) - strcpy(asset->ff_video_options, window->video_options->get_text()); + set_parameters(asset->ff_video_options, sizeof(asset->ff_video_options), + window->video_options->get_text()); delete window; } } @@ -313,10 +338,52 @@ int FileFFMPEG::colormodel_supported(int colormodel) int FileFFMPEG::get_best_colormodel(Asset *asset, int driver) { switch(driver) { - case PLAYBACK_X11: return BC_RGB888; - case PLAYBACK_X11_GL: return BC_YUV888; + case PLAYBACK_X11: + return BC_RGB888; + case PLAYBACK_X11_XV: + case PLAYBACK_ASYNCHRONOUS: + return BC_YUV888; + case PLAYBACK_X11_GL: + return BC_YUV888; + case PLAYBACK_DV1394: + case PLAYBACK_FIREWIRE: + return BC_YUV422P; + case VIDEO4LINUX2: + return BC_RGB888; + case VIDEO4LINUX2JPEG: + return BC_COMPRESSED; + case CAPTURE_DVB: + case VIDEO4LINUX2MPEG: + return BC_YUV422P; + case CAPTURE_JPEG_WEBCAM: + return BC_COMPRESSED; + case CAPTURE_YUYV_WEBCAM: + return BC_YUV422; + case CAPTURE_FIREWIRE: + case CAPTURE_IEC61883: + return BC_YUV422P; } - return BC_YUV420P; + + return BC_RGB888; +} + + +int FileFFMPEG::get_ff_option(const char *nm, const char *options, char *value) +{ + for( const char *cp=options; *cp!=0; ) { + char line[BCTEXTLEN], *bp = line, *ep = bp+sizeof(line)-1; + while( bp < ep && *cp && *cp!='\n' ) *bp++ = *cp++; + if( *cp ) ++cp; + *bp = 0; + if( !line[0] || line[0] == '#' || line[0] == ';' ) continue; + char key[BCSTRLEN], val[BCTEXTLEN]; + if( FFMPEG::scan_option_line(line, key, val) ) continue; + if( !strcmp(key, nm) ) { + strcpy(value, val); + return 0; + } + } + return 1; } //====== @@ -404,7 +471,9 @@ void FFMPEGConfigAudio::create_objects() audio_options->create_objects(); add_subwindow(new BC_OKButton(this)); add_subwindow(new BC_CancelButton(this)); - + + bitrate->update_param("cin_bitrate", asset->ff_audio_options); + show_window(1); bitrate->handle_event(); unlock_window(); @@ -423,12 +492,6 @@ FFAudioOptions::FFAudioOptions(FFMPEGConfigAudio *audio_popup, this->audio_popup = audio_popup; } -int FFAudioOptions::handle_event() -{ - strcpy(audio_popup->asset->ff_audio_options, get_text()); - return 1; -} - FFMPEGConfigAudioPopup::FFMPEGConfigAudioPopup(FFMPEGConfigAudio *popup, int x, int y) : BC_PopupTextBox(popup, &popup->presets, popup->asset->acodec, x, y, 300, 300) @@ -445,6 +508,9 @@ int FFMPEGConfigAudioPopup::handle_event() FFMPEG::load_options(option_path, asset->ff_audio_options, sizeof(asset->ff_audio_options)); popup->audio_options->update(asset->ff_audio_options); + popup->audio_options->set_text_row(0); + + popup->bitrate->update_param("cin_bitrate", asset->ff_audio_options); return 1; } @@ -559,6 +625,9 @@ void FFMPEGConfigVideo::create_objects() add_subwindow(new BC_OKButton(this)); add_subwindow(new BC_CancelButton(this)); + bitrate->update_param("cin_bitrate", asset->ff_video_options); + quality->update_param("cin_quality", asset->ff_video_options); + show_window(1); if( asset->ff_video_bitrate ) quality->disable(); @@ -580,12 +649,6 @@ FFVideoOptions::FFVideoOptions(FFMPEGConfigVideo *video_popup, this->video_popup = video_popup; } -int FFVideoOptions::handle_event() -{ - strcpy(video_popup->asset->ff_video_options, get_text()); - return 1; -} - FFMPEGConfigVideoPopup::FFMPEGConfigVideoPopup(FFMPEGConfigVideo *popup, int x, int y) : BC_PopupTextBox(popup, &popup->presets, popup->asset->vcodec, x, y, 300, 300) @@ -602,6 +665,10 @@ int FFMPEGConfigVideoPopup::handle_event() FFMPEG::load_options(option_path, asset->ff_video_options, sizeof(asset->ff_video_options)); popup->video_options->update(asset->ff_video_options); + popup->video_options->set_text_row(0); + + popup->bitrate->update_param("cin_bitrate", asset->ff_video_options); + popup->quality->update_param("cin_quality", asset->ff_video_options); return 1; } @@ -717,7 +784,7 @@ FFOptions_OptPanel:: void FFOptions_OptPanel::create_objects() { - const char *cols[] = { "option", "value", }; + const char *cols[] = { _("option"), _("value"), }; const int col1_w = 150; int wids[] = { col1_w, get_w()-col1_w }; BC_ListBox::update(&items[0], &cols[0], &wids[0], sizeof(items)/sizeof(items[0])); @@ -869,7 +936,7 @@ int FFOptionsKind::handle_event() void FFOptionsKind::set(int k) { this->kind = k; - set_text(kinds[k]); + set_text(_(kinds[k])); } FFOptionsText:: @@ -1145,25 +1212,25 @@ int FFOptions_Opt::types(char *rp) { const char *cp = ""; if( opt ) switch (opt->type) { - case AV_OPT_TYPE_FLAGS: cp = ""; break; - case AV_OPT_TYPE_INT: cp = ""; break; - case AV_OPT_TYPE_INT64: cp = ""; break; - case AV_OPT_TYPE_DOUBLE: cp = ""; break; - case AV_OPT_TYPE_FLOAT: cp = ""; break; - case AV_OPT_TYPE_STRING: cp = ""; break; - case AV_OPT_TYPE_RATIONAL: cp = ""; break; - case AV_OPT_TYPE_BINARY: cp = ""; break; - case AV_OPT_TYPE_IMAGE_SIZE: cp = ""; break; - case AV_OPT_TYPE_VIDEO_RATE: cp = ""; break; - case AV_OPT_TYPE_PIXEL_FMT: cp = ""; break; - case AV_OPT_TYPE_SAMPLE_FMT: cp = ""; break; - case AV_OPT_TYPE_DURATION: cp = ""; break; - case AV_OPT_TYPE_COLOR: cp = ""; break; - case AV_OPT_TYPE_CHANNEL_LAYOUT: cp = ""; break; - case AV_OPT_TYPE_BOOL: cp = ""; break; - default: cp = ""; break; + case AV_OPT_TYPE_FLAGS: cp = N_(""); break; + case AV_OPT_TYPE_INT: cp = N_(""); break; + case AV_OPT_TYPE_INT64: cp = N_(""); break; + case AV_OPT_TYPE_DOUBLE: cp = N_(""); break; + case AV_OPT_TYPE_FLOAT: cp = N_(""); break; + case AV_OPT_TYPE_STRING: cp = N_(""); break; + case AV_OPT_TYPE_RATIONAL: cp = N_(""); break; + case AV_OPT_TYPE_BINARY: cp = N_(""); break; + case AV_OPT_TYPE_IMAGE_SIZE: cp = N_(""); break; + case AV_OPT_TYPE_VIDEO_RATE: cp = N_(""); break; + case AV_OPT_TYPE_PIXEL_FMT: cp = N_(""); break; + case AV_OPT_TYPE_SAMPLE_FMT: cp = N_(""); break; + case AV_OPT_TYPE_DURATION: cp = N_(""); break; + case AV_OPT_TYPE_COLOR: cp = N_(""); break; + case AV_OPT_TYPE_CHANNEL_LAYOUT: cp = N_(""); break; + case AV_OPT_TYPE_BOOL: cp = N_(""); break; + default: cp = N_(""); break; } - return sprintf(rp, "%s", cp); + return sprintf(rp, "%s", _(cp)); } int FFOptions_Opt::scalar(double d, char *rp) { @@ -1281,7 +1348,7 @@ const char *FFOptions_Opt::tip() FFOptionsWindow::FFOptionsWindow(FFOptionsDialog *dialog) - : BC_Window(PROGRAM_NAME ": Options", 60, 30, 640, 400) + : BC_Window(_(PROGRAM_NAME ": Options"), 60, 30, 640, 400) { this->dialog = dialog; this->selected = 0;