Get the default_track flag from Matroska files added to mmg.

This commit is contained in:
Moritz Bunkus 2005-02-19 16:26:01 +00:00
parent c7ae617c17
commit cbb245d66f
5 changed files with 49 additions and 19 deletions

View File

@ -1,5 +1,8 @@
2005-02-19 Moritz Bunkus <moritz@bunkus.org> 2005-02-19 Moritz Bunkus <moritz@bunkus.org>
* mmg: new feature: The "default track" checkboxes are set
properly when a Matroska file is added.
* mmg: new feature: Added a warning right before the muxing starts * mmg: new feature: Added a warning right before the muxing starts
if the chapter editor contains entries but no chapter file has if the chapter editor contains entries but no chapter file has
been selected (can be turned off). been selected (can be turned off).

View File

@ -2070,6 +2070,8 @@ kax_reader_c::identify() {
(tracks[i]->v_dheight != tracks[i]->v_height))) (tracks[i]->v_dheight != tracks[i]->v_height)))
info += mxsprintf("display_dimensions:%ux%u ", info += mxsprintf("display_dimensions:%ux%u ",
tracks[i]->v_dwidth, tracks[i]->v_dheight); tracks[i]->v_dwidth, tracks[i]->v_dheight);
info += mxsprintf("default_track:%d ",
tracks[i]->default_track ? 1 : 0);
info += "]"; info += "]";
} else } else
info = ""; info = "";

View File

@ -557,6 +557,16 @@ create_append_mapping() {
return s; return s;
} }
int
default_track_checked(char type) {
int i;
for (i = 0; i < tracks.size(); i++)
if (tracks[i]->type == type)
return i;
return -1;
}
void void
wxdie(const wxString &errmsg) { wxdie(const wxString &errmsg) {
wxMessageBox(errmsg, wxT("A serious error has occured"), wxMessageBox(errmsg, wxT("A serious error has occured"),

View File

@ -64,6 +64,7 @@ struct mmg_track_t {
type(0), id(0), source(0), type(0), id(0), source(0),
enabled(false), display_dimensions_selected(false), enabled(false), display_dimensions_selected(false),
default_track(false), aac_is_sbr(false), track_name_was_present(false), default_track(false), aac_is_sbr(false), track_name_was_present(false),
language(wxT("und")), cues(wxT("default")), sub_charset(wxT("default")),
appending(false) {}; appending(false) {};
}; };
typedef counted_ptr<mmg_track_t> mmg_track_ptr; typedef counted_ptr<mmg_track_t> mmg_track_ptr;
@ -121,6 +122,8 @@ wxString get_temp_dir();
wxString create_track_order(bool all); wxString create_track_order(bool all);
int default_track_checked(char type);
void wxdie(const wxString &errmsg); void wxdie(const wxString &errmsg);
#if defined(SYS_WINDOWS) #if defined(SYS_WINDOWS)

View File

@ -741,6 +741,8 @@ tab_input::add_file(const wxString &file_name,
unsigned int i, k; unsigned int i, k;
wxFile *opt_file; wxFile *opt_file;
string arg_utf8; string arg_utf8;
bool default_video_track_found, default_audio_track_found;
bool default_subtitle_track_found;
opt_file_name.Printf(wxT("%smmg-mkvmerge-options-%d-%d"), opt_file_name.Printf(wxT("%smmg-mkvmerge-options-%d-%d"),
get_temp_dir().c_str(), get_temp_dir().c_str(),
@ -790,6 +792,9 @@ tab_input::add_file(const wxString &file_name,
return; return;
} }
default_audio_track_found = -1 != default_track_checked('a');
default_video_track_found = -1 != default_track_checked('v');
default_subtitle_track_found = -1 != default_track_checked('s');
for (i = 0; i < output.Count(); i++) { for (i = 0; i < output.Count(); i++) {
if (output[i].Find(wxT("Track")) == 0) { if (output[i].Find(wxT("Track")) == 0) {
wxString info; wxString info;
@ -812,19 +817,6 @@ tab_input::add_file(const wxString &file_name,
parse_int(wxMB(id), track->id); parse_int(wxMB(id), track->id);
track->ctype = exact; track->ctype = exact;
track->enabled = true; track->enabled = true;
track->language = wxT("und");
track->sub_charset = wxT("default");
track->cues = wxT("default");
track->track_name = wxT("");
track->delay = wxT("");
track->stretch = wxT("");
track->tags = wxT("");
track->aspect_ratio = wxT("");
track->dwidth = wxT("");
track->dheight = wxT("");
track->fourcc = wxT("");
track->compression = wxT("");
track->timecodes = wxT("");
if (info.length() > 0) { if (info.length() > 0) {
args = split(info, wxU(" ")); args = split(info, wxU(" "));
@ -832,11 +824,14 @@ tab_input::add_file(const wxString &file_name,
pair = split(args[k], wxU(":"), 2); pair = split(args[k], wxU(":"), 2);
if (pair.size() != 2) if (pair.size() != 2)
continue; continue;
if (pair[0] == wxT("track_name")) { if (pair[0] == wxT("track_name")) {
track->track_name = from_utf8(unescape(pair[1])); track->track_name = from_utf8(unescape(pair[1]));
track->track_name_was_present = true; track->track_name_was_present = true;
} else if (pair[0] == wxT("language")) } else if (pair[0] == wxT("language"))
track->language = unescape(pair[1]); track->language = unescape(pair[1]);
else if (pair[0] == wxT("display_dimensions")) { else if (pair[0] == wxT("display_dimensions")) {
vector<wxString> dims; vector<wxString> dims;
int64_t width, height; int64_t width, height;
@ -848,6 +843,21 @@ tab_input::add_file(const wxString &file_name,
track->dheight.Printf(wxT("%d"), (int)height); track->dheight.Printf(wxT("%d"), (int)height);
track->display_dimensions_selected = true; track->display_dimensions_selected = true;
} }
} else if ((pair[0] == wxT("default_track")) &&
(pair[1] == wxT("1"))) {
if (('a' == track->type) && !default_audio_track_found) {
track->default_track = true;
default_audio_track_found = true;
} else if (('v' == track->type) && !default_video_track_found) {
track->default_track = true;
default_video_track_found = true;
} else if (('s' == track->type) && !default_subtitle_track_found) {
track->default_track = true;
default_subtitle_track_found = true;
}
} }
} }
} }
@ -1204,19 +1214,21 @@ tab_input::on_track_enabled(wxCommandEvent &evt) {
void void
tab_input::on_default_track_clicked(wxCommandEvent &evt) { tab_input::on_default_track_clicked(wxCommandEvent &evt) {
uint32_t i;
mmg_track_t *t; mmg_track_t *t;
if (selected_track == -1) if (selected_track == -1)
return; return;
t = tracks[selected_track]; t = tracks[selected_track];
if (cb_default->GetValue()) {
int idx;
idx = default_track_checked(t->type);
if (-1 != idx)
tracks[idx]->default_track = false;
}
t->default_track = cb_default->GetValue(); t->default_track = cb_default->GetValue();
if (cb_default->GetValue())
for (i = 0; i < tracks.size(); i++) {
if ((i != selected_track) && (tracks[i]->type == t->type))
tracks[i]->default_track = false;
}
} }
void void