libhb: ui: add new presets key for track names (#6840)
Add AudioTrackNamePassthru and SubtitleTrackNamePassthru preset key to preserve the existing track names, and AudioAutomaticNamingBehavior to disable or enable the audio track automatic names. Co-authored-by: sr55 <sr55.code@outlook.com>
This commit is contained in:
parent
67485ebddf
commit
66fe47c548
@ -550,11 +550,18 @@ audio_add_track(
|
|||||||
if (atrack != NULL)
|
if (atrack != NULL)
|
||||||
{
|
{
|
||||||
int layout = ghb_dict_get_int(atrack, "ChannelLayout");
|
int layout = ghb_dict_get_int(atrack, "ChannelLayout");
|
||||||
const char * name = ghb_dict_get_string(atrack, "Name");
|
|
||||||
mix = ghb_get_best_mix(layout, encoder, mix);
|
mix = ghb_get_best_mix(layout, encoder, mix);
|
||||||
if (name != NULL)
|
|
||||||
|
int keep_name = ghb_dict_get_int(settings, "AudioTrackNamePassthru");
|
||||||
|
const char * behavior_name = ghb_dict_get_string(settings, "AudioAutomaticNamingBehavior");
|
||||||
|
int behavior = hb_audio_autonaming_behavior_get_from_name(behavior_name);
|
||||||
|
|
||||||
|
const char * name = ghb_dict_get_string(atrack, "Name");
|
||||||
|
const char * generated_name = hb_audio_name_generate(name, layout, mix,
|
||||||
|
keep_name, behavior);
|
||||||
|
if (generated_name != NULL)
|
||||||
{
|
{
|
||||||
ghb_dict_set_string(asettings, "Name", name);
|
ghb_dict_set_string(asettings, "Name", generated_name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ghb_dict_set_string(asettings, "Mixdown", hb_mixdown_get_short_name(mix));
|
ghb_dict_set_string(asettings, "Mixdown", hb_mixdown_get_short_name(mix));
|
||||||
@ -2287,6 +2294,14 @@ audio_fallback_widget_changed_cb (GtkWidget *widget, gpointer data)
|
|||||||
ghb_clear_presets_selection(ud);
|
ghb_clear_presets_selection(ud);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
G_MODULE_EXPORT void
|
||||||
|
audio_autonaming_widget_changed_cb (GtkWidget *widget, gpointer data)
|
||||||
|
{
|
||||||
|
signal_user_data_t *ud = ghb_ud();
|
||||||
|
ghb_widget_to_setting(ud->settings, widget);
|
||||||
|
ghb_clear_presets_selection(ud);
|
||||||
|
}
|
||||||
|
|
||||||
G_MODULE_EXPORT void
|
G_MODULE_EXPORT void
|
||||||
audio_def_quality_enable_changed_cb (GtkWidget *widget, gpointer data)
|
audio_def_quality_enable_changed_cb (GtkWidget *widget, gpointer data)
|
||||||
{
|
{
|
||||||
|
@ -49,6 +49,18 @@ typedef struct
|
|||||||
options_map_t *map;
|
options_map_t *map;
|
||||||
} combo_opts_t;
|
} combo_opts_t;
|
||||||
|
|
||||||
|
static options_map_t d_audio_autonaming_opts[] =
|
||||||
|
{
|
||||||
|
{N_("None"), "none", 0},
|
||||||
|
{N_("Unnamed"), "unnamed", 1},
|
||||||
|
{N_("All"), "all", 2},
|
||||||
|
};
|
||||||
|
combo_opts_t audio_autonaming_opts =
|
||||||
|
{
|
||||||
|
sizeof(d_audio_autonaming_opts)/sizeof(options_map_t),
|
||||||
|
d_audio_autonaming_opts
|
||||||
|
};
|
||||||
|
|
||||||
static options_map_t d_subtitle_track_sel_opts[] =
|
static options_map_t d_subtitle_track_sel_opts[] =
|
||||||
{
|
{
|
||||||
{N_("None"), "none", 0},
|
{N_("None"), "none", 0},
|
||||||
@ -575,6 +587,12 @@ combo_name_map_t combo_name_map[] =
|
|||||||
small_opts_set,
|
small_opts_set,
|
||||||
generic_opt_get
|
generic_opt_get
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"AudioAutomaticNamingBehavior",
|
||||||
|
&audio_autonaming_opts,
|
||||||
|
small_opts_set,
|
||||||
|
generic_opt_get
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"AudioTrackSelectionBehavior",
|
"AudioTrackSelectionBehavior",
|
||||||
&audio_track_sel_opts,
|
&audio_track_sel_opts,
|
||||||
|
@ -445,7 +445,12 @@ static GhbValue* subtitle_add_track(
|
|||||||
|
|
||||||
strack = ghb_get_title_subtitle_track(settings, track);
|
strack = ghb_get_title_subtitle_track(settings, track);
|
||||||
source = ghb_dict_get_int(strack, "Source");
|
source = ghb_dict_get_int(strack, "Source");
|
||||||
name = ghb_dict_get_string(strack, "Name");
|
|
||||||
|
int keep_name = ghb_dict_get_int(settings, "SubtitlesTrackNamePassthru");
|
||||||
|
if (keep_name)
|
||||||
|
{
|
||||||
|
name = ghb_dict_get_string(strack, "Name");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
burn |= !hb_subtitle_can_pass(source, mux);
|
burn |= !hb_subtitle_can_pass(source, mux);
|
||||||
|
@ -4767,6 +4767,15 @@ Overrides all other settings.</property>
|
|||||||
<signal name="toggled" handler="subtitle_def_widget_changed_cb" swapped="no"/>
|
<signal name="toggled" handler="subtitle_def_widget_changed_cb" swapped="no"/>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkCheckButton" id="SubtitleTrackNamePassthru">
|
||||||
|
<property name="label" translatable="1">Passthru track names</property>
|
||||||
|
<property name="focusable">1</property>
|
||||||
|
<property name="tooltip-text" translatable="1">Preserve the source track names</property>
|
||||||
|
<property name="halign">start</property>
|
||||||
|
<signal name="toggled" handler="subtitle_def_widget_changed_cb" swapped="no"/>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkBox" id="subtitle_burn_box">
|
<object class="GtkBox" id="subtitle_burn_box">
|
||||||
<property name="spacing">4</property>
|
<property name="spacing">4</property>
|
||||||
@ -5208,6 +5217,36 @@ This permits Opus passthru to be selected when automatic passthru selection is e
|
|||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkCheckButton" id="AudioTrackNamePassthru">
|
||||||
|
<property name="label" translatable="yes">Passthru track names</property>
|
||||||
|
<property name="focusable">1</property>
|
||||||
|
<property name="tooltip-text" translatable="yes">Preserve the source track names.</property>
|
||||||
|
<property name="halign">start</property>
|
||||||
|
<property name="active">1</property>
|
||||||
|
<signal name="toggled" handler="audio_def_widget_changed_cb" swapped="no"/>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkBox" id="auto_autonaming_box">
|
||||||
|
<property name="spacing">6</property>
|
||||||
|
<property name="halign">end</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkLabel" id="labela5">
|
||||||
|
<property name="halign">end</property>
|
||||||
|
<property name="hexpand">1</property>
|
||||||
|
<property name="label" translatable="yes">Autonaming:</property>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkComboBox" id="AudioAutomaticNamingBehavior">
|
||||||
|
<property name="valign">center</property>
|
||||||
|
<property name="tooltip-text" translatable="yes">Set the automatic naming behaviour.</property>
|
||||||
|
<signal name="changed" handler="audio_autonaming_widget_changed_cb" swapped="no"/>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
|
@ -1468,6 +1468,87 @@ const hb_rate_t* hb_audio_bitrate_get_next(const hb_rate_t *last)
|
|||||||
return ((hb_rate_internal_t*)last)->next;
|
return ((hb_rate_internal_t*)last)->next;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const char * hb_audio_name_get_default(uint64_t layout, int mixdown)
|
||||||
|
{
|
||||||
|
int mix_channels = 2;
|
||||||
|
|
||||||
|
if (mixdown != HB_AMIXDOWN_NONE)
|
||||||
|
{
|
||||||
|
mix_channels = hb_mixdown_get_discrete_channel_count(mixdown);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
mix_channels = hb_layout_get_discrete_channel_count(layout);
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (mix_channels)
|
||||||
|
{
|
||||||
|
case 1:
|
||||||
|
return "Mono";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 2:
|
||||||
|
return "Stereo";
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
return "Surround";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int hb_audio_autonaming_behavior_get_from_name(const char *name)
|
||||||
|
{
|
||||||
|
hb_audio_autonaming_behavior_t behavior = HB_AUDIO_AUTONAMING_NONE;
|
||||||
|
|
||||||
|
if (name)
|
||||||
|
{
|
||||||
|
if (!strcasecmp(name, "all"))
|
||||||
|
{
|
||||||
|
behavior = HB_AUDIO_AUTONAMING_ALL;
|
||||||
|
}
|
||||||
|
else if (!strcasecmp(name, "unnamed"))
|
||||||
|
{
|
||||||
|
behavior = HB_AUDIO_AUTONAMING_UNNAMED;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return behavior;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char * hb_audio_name_generate(const char *name,
|
||||||
|
uint64_t layout, int mixdown, int keep_name,
|
||||||
|
hb_audio_autonaming_behavior_t behavior)
|
||||||
|
{
|
||||||
|
const char *out = NULL;
|
||||||
|
|
||||||
|
if (name == NULL || name[0] == 0)
|
||||||
|
{
|
||||||
|
name = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (keep_name)
|
||||||
|
{
|
||||||
|
out = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (name != NULL &&
|
||||||
|
(!strcmp(name, "Mono") ||
|
||||||
|
!strcmp(name, "Stereo") ||
|
||||||
|
!strcmp(name, "Surround")))
|
||||||
|
{
|
||||||
|
out = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (behavior == HB_AUDIO_AUTONAMING_ALL ||
|
||||||
|
(behavior == HB_AUDIO_AUTONAMING_UNNAMED && (name == NULL || name[0] == 0)))
|
||||||
|
{
|
||||||
|
out = hb_audio_name_get_default(layout, mixdown);
|
||||||
|
}
|
||||||
|
|
||||||
|
return out;
|
||||||
|
}
|
||||||
|
|
||||||
// Get limits and hints for the UIs.
|
// Get limits and hints for the UIs.
|
||||||
//
|
//
|
||||||
// granularity sets the minimum step increments that should be used
|
// granularity sets the minimum step increments that should be used
|
||||||
|
@ -457,6 +457,22 @@ int hb_audio_bitrate_get_default(uint32_t codec, int samplerate, in
|
|||||||
void hb_audio_bitrate_get_limits(uint32_t codec, int samplerate, int mixdown, int *low, int *high);
|
void hb_audio_bitrate_get_limits(uint32_t codec, int samplerate, int mixdown, int *low, int *high);
|
||||||
const hb_rate_t* hb_audio_bitrate_get_next(const hb_rate_t *last);
|
const hb_rate_t* hb_audio_bitrate_get_next(const hb_rate_t *last);
|
||||||
|
|
||||||
|
|
||||||
|
const char * hb_audio_name_get_default(uint64_t layout, int mixdown);
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
HB_AUDIO_AUTONAMING_NONE,
|
||||||
|
HB_AUDIO_AUTONAMING_UNNAMED,
|
||||||
|
HB_AUDIO_AUTONAMING_ALL
|
||||||
|
} hb_audio_autonaming_behavior_t;
|
||||||
|
|
||||||
|
int hb_audio_autonaming_behavior_get_from_name(const char *name);
|
||||||
|
|
||||||
|
const char * hb_audio_name_generate(const char *name,
|
||||||
|
uint64_t layout, int mixdown, int keep_name,
|
||||||
|
hb_audio_autonaming_behavior_t behaviour);
|
||||||
|
|
||||||
void hb_video_quality_get_limits(uint32_t codec, float *low, float *high, float *granularity, int *direction);
|
void hb_video_quality_get_limits(uint32_t codec, float *low, float *high, float *granularity, int *direction);
|
||||||
const char* hb_video_quality_get_name(uint32_t codec);
|
const char* hb_video_quality_get_name(uint32_t codec);
|
||||||
|
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -733,35 +733,17 @@ static int avformatInit( hb_mux_object_t * m )
|
|||||||
track->st->codecpar->ch_layout = ch_layout;
|
track->st->codecpar->ch_layout = ch_layout;
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *name;
|
|
||||||
if (audio->config.out.name == NULL)
|
|
||||||
{
|
|
||||||
switch (track->st->codecpar->ch_layout.nb_channels)
|
|
||||||
{
|
|
||||||
case 1:
|
|
||||||
name = "Mono";
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 2:
|
|
||||||
name = "Stereo";
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
name = "Surround";
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
name = audio->config.out.name;
|
|
||||||
}
|
|
||||||
// Set audio track title
|
// Set audio track title
|
||||||
av_dict_set(&track->st->metadata, "title", name, 0);
|
const char *name = audio->config.out.name;
|
||||||
if (job->mux == HB_MUX_AV_MP4)
|
if (name != NULL && name[0] != 0)
|
||||||
{
|
{
|
||||||
// Some software (MPC, mediainfo) use hdlr description
|
av_dict_set(&track->st->metadata, "title", name, 0);
|
||||||
// for track title
|
if (job->mux == HB_MUX_AV_MP4)
|
||||||
av_dict_set(&track->st->metadata, "handler_name", name, 0);
|
{
|
||||||
|
// Some software (MPC, mediainfo) use hdlr description
|
||||||
|
// for track title
|
||||||
|
av_dict_set(&track->st->metadata, "handler_name", name, 0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -853,15 +853,6 @@ static void add_audio_for_lang(hb_value_array_t *list, const hb_dict_t *preset,
|
|||||||
hb_dict_set(audio_dict, "Track", hb_value_int(aconfig->index));
|
hb_dict_set(audio_dict, "Track", hb_value_int(aconfig->index));
|
||||||
hb_dict_set(audio_dict, "Encoder", hb_value_string(
|
hb_dict_set(audio_dict, "Encoder", hb_value_string(
|
||||||
hb_audio_encoder_get_short_name(out_codec)));
|
hb_audio_encoder_get_short_name(out_codec)));
|
||||||
const char * name = hb_dict_get_string(encoder_dict, "AudioTrackName");
|
|
||||||
if (name != NULL && name[0] != 0)
|
|
||||||
{
|
|
||||||
hb_dict_set_string(audio_dict, "Name", name);
|
|
||||||
}
|
|
||||||
else if (aconfig->in.name != NULL && aconfig->in.name[0] != 0)
|
|
||||||
{
|
|
||||||
hb_dict_set_string(audio_dict, "Name", aconfig->in.name);
|
|
||||||
}
|
|
||||||
if (!(out_codec & HB_ACODEC_PASS_FLAG))
|
if (!(out_codec & HB_ACODEC_PASS_FLAG))
|
||||||
{
|
{
|
||||||
if (hb_dict_get(encoder_dict, "AudioTrackGainSlider") != NULL)
|
if (hb_dict_get(encoder_dict, "AudioTrackGainSlider") != NULL)
|
||||||
@ -924,7 +915,34 @@ static void add_audio_for_lang(hb_value_array_t *list, const hb_dict_t *preset,
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Sanitize the settings before adding to the audio list
|
// Sanitize the settings before adding to the audio list
|
||||||
hb_sanitize_audio_settings(title, audio_dict);
|
hb_sanitize_audio_settings(title, audio_dict);
|
||||||
|
|
||||||
|
const char *name = hb_dict_get_string(encoder_dict, "AudioTrackName");
|
||||||
|
if (name != NULL && name[0] != 0)
|
||||||
|
{
|
||||||
|
hb_dict_set_string(audio_dict, "Name", name);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
int mixdown = HB_INVALID_AMIXDOWN;
|
||||||
|
int keep_name = hb_value_get_bool(hb_dict_get(preset, "AudioTrackNamePassthru"));
|
||||||
|
hb_audio_autonaming_behavior_t behavior = HB_AUDIO_AUTONAMING_NONE;
|
||||||
|
|
||||||
|
const char *mixdown_name = hb_dict_get_string(audio_dict, "Mixdown");
|
||||||
|
mixdown = hb_mixdown_get_from_name(mixdown_name);
|
||||||
|
|
||||||
|
const char *behavior_name = hb_dict_get_string(preset, "AudioAutomaticNamingBehavior");
|
||||||
|
behavior = hb_audio_autonaming_behavior_get_from_name(behavior_name);
|
||||||
|
|
||||||
|
name = hb_audio_name_generate(aconfig->in.name,
|
||||||
|
aconfig->in.channel_layout,
|
||||||
|
mixdown, keep_name, behavior);
|
||||||
|
|
||||||
|
if (name != NULL && name[0] != 0)
|
||||||
|
{
|
||||||
|
hb_dict_set_string(audio_dict, "Name", name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
hb_value_array_append(list, audio_dict);
|
hb_value_array_append(list, audio_dict);
|
||||||
hb_dict_set(used, key, hb_value_bool(1));
|
hb_dict_set(used, key, hb_value_bool(1));
|
||||||
@ -1109,7 +1127,7 @@ static int has_default_subtitle(hb_value_array_t *list)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void add_subtitle_for_lang(hb_value_array_t *list, hb_title_t *title,
|
static void add_subtitle_for_lang(hb_value_array_t *list, hb_title_t *title,
|
||||||
int mux, const char *lang,
|
int mux, const char *lang, int passthru_name,
|
||||||
subtitle_behavior_t *behavior)
|
subtitle_behavior_t *behavior)
|
||||||
{
|
{
|
||||||
int t;
|
int t;
|
||||||
@ -1140,7 +1158,8 @@ static void add_subtitle_for_lang(hb_value_array_t *list, hb_title_t *title,
|
|||||||
|
|
||||||
if (!behavior->one_burned || hb_subtitle_can_pass(subtitle->source, mux))
|
if (!behavior->one_burned || hb_subtitle_can_pass(subtitle->source, mux))
|
||||||
{
|
{
|
||||||
add_subtitle(list, t, make_default, 0 /*!force*/, burn, subtitle->name);
|
add_subtitle(list, t, make_default, 0 /*!force*/, burn,
|
||||||
|
passthru_name ? subtitle->name : NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
behavior->burn_first &= !burn;
|
behavior->burn_first &= !burn;
|
||||||
@ -1273,6 +1292,8 @@ int hb_preset_job_add_subtitles(hb_handle_t *h, int title_index,
|
|||||||
const iso639_lang_t * lang_any = lang_get_any();
|
const iso639_lang_t * lang_any = lang_get_any();
|
||||||
const char * pref_lang = lang_any->iso639_2;
|
const char * pref_lang = lang_any->iso639_2;
|
||||||
|
|
||||||
|
int passthru_name = hb_value_get_bool(hb_dict_get(preset, "SubtitleTrackNamePassthru"));
|
||||||
|
|
||||||
count = hb_value_array_len(lang_list);
|
count = hb_value_array_len(lang_list);
|
||||||
if (count > 0)
|
if (count > 0)
|
||||||
{
|
{
|
||||||
@ -1303,7 +1324,7 @@ int hb_preset_job_add_subtitles(hb_handle_t *h, int title_index,
|
|||||||
behavior.one = 1;
|
behavior.one = 1;
|
||||||
behavior.burn_foreign = burn_foreign;
|
behavior.burn_foreign = burn_foreign;
|
||||||
behavior.make_default = 1;
|
behavior.make_default = 1;
|
||||||
add_subtitle_for_lang(list, title, mux, pref_lang, &behavior);
|
add_subtitle_for_lang(list, title, mux, pref_lang, passthru_name, &behavior);
|
||||||
}
|
}
|
||||||
|
|
||||||
hb_dict_t *search_dict = hb_dict_get(subtitle_dict, "Search");
|
hb_dict_t *search_dict = hb_dict_get(subtitle_dict, "Search");
|
||||||
@ -1339,12 +1360,12 @@ int hb_preset_job_add_subtitles(hb_handle_t *h, int title_index,
|
|||||||
{
|
{
|
||||||
const char *lang;
|
const char *lang;
|
||||||
lang = hb_value_get_string(hb_value_array_get(lang_list, ii));
|
lang = hb_value_get_string(hb_value_array_get(lang_list, ii));
|
||||||
add_subtitle_for_lang(list, title, mux, lang, &behavior);
|
add_subtitle_for_lang(list, title, mux, lang, passthru_name, &behavior);
|
||||||
}
|
}
|
||||||
if (count <= 0)
|
if (count <= 0)
|
||||||
{
|
{
|
||||||
// No languages in language list, assume "any"
|
// No languages in language list, assume "any"
|
||||||
add_subtitle_for_lang(list, title, mux, "any", &behavior);
|
add_subtitle_for_lang(list, title, mux, "any", passthru_name, &behavior);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2974,6 +2995,13 @@ static void und_to_any(hb_value_array_t * list)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void import_track_names_preset_settings_64_0_0(hb_value_t *preset)
|
||||||
|
{
|
||||||
|
hb_dict_set_string(preset, "AudioAutomaticNamingBehavior", "unnamed");
|
||||||
|
hb_dict_set_bool(preset, "AudioTrackNamePassthru", 1);
|
||||||
|
hb_dict_set_bool(preset, "SubtitleTrackNamePassthru", 1);
|
||||||
|
}
|
||||||
|
|
||||||
static void import_av1_preset_settings_63_0_0(hb_value_t *preset)
|
static void import_av1_preset_settings_63_0_0(hb_value_t *preset)
|
||||||
{
|
{
|
||||||
const char *enc = hb_dict_get_string(preset, "VideoEncoder");
|
const char *enc = hb_dict_get_string(preset, "VideoEncoder");
|
||||||
@ -3766,10 +3794,16 @@ static void import_video_0_0_0(hb_value_t *preset)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void import_64_0_0(hb_value_t *preset)
|
||||||
|
{
|
||||||
|
import_track_names_preset_settings_64_0_0(preset);
|
||||||
|
}
|
||||||
|
|
||||||
static void import_63_0_0(hb_value_t *preset)
|
static void import_63_0_0(hb_value_t *preset)
|
||||||
{
|
{
|
||||||
import_av1_preset_settings_63_0_0(preset);
|
import_av1_preset_settings_63_0_0(preset);
|
||||||
|
|
||||||
|
import_64_0_0(preset);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void import_61_0_0(hb_value_t *preset)
|
static void import_61_0_0(hb_value_t *preset)
|
||||||
@ -4021,6 +4055,11 @@ static int preset_import(hb_value_t *preset, int major, int minor, int micro)
|
|||||||
import_63_0_0(preset);
|
import_63_0_0(preset);
|
||||||
result = 1;
|
result = 1;
|
||||||
}
|
}
|
||||||
|
else if (cmpVersion(major, minor, micro, 64, 0, 0) <= 0)
|
||||||
|
{
|
||||||
|
import_64_0_0(preset);
|
||||||
|
result = 1;
|
||||||
|
}
|
||||||
|
|
||||||
preset_clean(preset, hb_preset_template);
|
preset_clean(preset, hb_preset_template);
|
||||||
}
|
}
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="23094" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
|
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="23727" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<deployment identifier="macosx"/>
|
<deployment identifier="macosx"/>
|
||||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="23094"/>
|
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="23727"/>
|
||||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
<objects>
|
<objects>
|
||||||
@ -19,14 +19,14 @@
|
|||||||
<window title="Audio Selection Behaviour" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" restorable="NO" visibleAtLaunch="NO" animationBehavior="default" id="kwM-lz-5lG">
|
<window title="Audio Selection Behaviour" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" restorable="NO" visibleAtLaunch="NO" animationBehavior="default" id="kwM-lz-5lG">
|
||||||
<windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES" resizable="YES"/>
|
<windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES" resizable="YES"/>
|
||||||
<windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
|
<windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
|
||||||
<rect key="contentRect" x="54" y="544" width="800" height="474"/>
|
<rect key="contentRect" x="54" y="544" width="766" height="474"/>
|
||||||
<rect key="screenRect" x="0.0" y="0.0" width="1920" height="1055"/>
|
<rect key="screenRect" x="0.0" y="0.0" width="1920" height="1055"/>
|
||||||
<view key="contentView" id="ZP2-Cp-K5w">
|
<view key="contentView" misplaced="YES" id="ZP2-Cp-K5w">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="828" height="474"/>
|
<rect key="frame" x="0.0" y="0.0" width="766" height="474"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="sC2-52-liU">
|
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="sC2-52-liU">
|
||||||
<rect key="frame" x="750" y="13" width="64" height="27"/>
|
<rect key="frame" x="689" y="13" width="64" height="27"/>
|
||||||
<buttonCell key="cell" type="push" title="OK" bezelStyle="rounded" alignment="center" controlSize="small" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="kDe-1L-VkD">
|
<buttonCell key="cell" type="push" title="OK" bezelStyle="rounded" alignment="center" controlSize="small" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="kDe-1L-VkD">
|
||||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||||
<font key="font" metaFont="menu" size="11"/>
|
<font key="font" metaFont="menu" size="11"/>
|
||||||
@ -40,7 +40,7 @@ DQ
|
|||||||
</connections>
|
</connections>
|
||||||
</button>
|
</button>
|
||||||
<stackView distribution="fill" orientation="vertical" alignment="leading" horizontalStackHuggingPriority="249.99998474121094" verticalStackHuggingPriority="249.99998474121094" detachesHiddenViews="YES" translatesAutoresizingMaskIntoConstraints="NO" id="8Pw-Kq-eMN">
|
<stackView distribution="fill" orientation="vertical" alignment="leading" horizontalStackHuggingPriority="249.99998474121094" verticalStackHuggingPriority="249.99998474121094" detachesHiddenViews="YES" translatesAutoresizingMaskIntoConstraints="NO" id="8Pw-Kq-eMN">
|
||||||
<rect key="frame" x="516" y="292" width="223" height="138"/>
|
<rect key="frame" x="468" y="295" width="223" height="138"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<stackView distribution="fill" orientation="horizontal" alignment="top" horizontalStackHuggingPriority="249.99998474121094" verticalStackHuggingPriority="249.99998474121094" detachesHiddenViews="YES" translatesAutoresizingMaskIntoConstraints="NO" id="OkV-lt-k7P">
|
<stackView distribution="fill" orientation="horizontal" alignment="top" horizontalStackHuggingPriority="249.99998474121094" verticalStackHuggingPriority="249.99998474121094" detachesHiddenViews="YES" translatesAutoresizingMaskIntoConstraints="NO" id="OkV-lt-k7P">
|
||||||
<rect key="frame" x="0.0" y="24" width="223" height="114"/>
|
<rect key="frame" x="0.0" y="24" width="223" height="114"/>
|
||||||
@ -332,7 +332,7 @@ DQ
|
|||||||
</customSpacing>
|
</customSpacing>
|
||||||
</stackView>
|
</stackView>
|
||||||
<textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="YES" preferredMaxLayoutWidth="600" translatesAutoresizingMaskIntoConstraints="NO" id="RtZ-Cz-5mG">
|
<textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="YES" preferredMaxLayoutWidth="600" translatesAutoresizingMaskIntoConstraints="NO" id="RtZ-Cz-5mG">
|
||||||
<rect key="frame" x="18" y="264" width="253" height="14"/>
|
<rect key="frame" x="18" y="223" width="253" height="14"/>
|
||||||
<textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Audio encoder settings for each selected track:" id="007-WM-RmC">
|
<textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Audio encoder settings for each selected track:" id="007-WM-RmC">
|
||||||
<font key="font" metaFont="menu" size="11"/>
|
<font key="font" metaFont="menu" size="11"/>
|
||||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
@ -358,19 +358,19 @@ DQ
|
|||||||
</connections>
|
</connections>
|
||||||
</segmentedControl>
|
</segmentedControl>
|
||||||
<scrollView wantsLayer="YES" autohidesScrollers="YES" horizontalLineScroll="26" horizontalPageScroll="10" verticalLineScroll="26" verticalPageScroll="10" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="hGL-Ew-UVJ">
|
<scrollView wantsLayer="YES" autohidesScrollers="YES" horizontalLineScroll="26" horizontalPageScroll="10" verticalLineScroll="26" verticalPageScroll="10" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="hGL-Ew-UVJ">
|
||||||
<rect key="frame" x="20" y="75" width="788" height="181"/>
|
<rect key="frame" x="20" y="75" width="727" height="140"/>
|
||||||
<clipView key="contentView" id="jkU-Fi-GCv">
|
<clipView key="contentView" id="jkU-Fi-GCv">
|
||||||
<rect key="frame" x="1" y="1" width="786" height="179"/>
|
<rect key="frame" x="1" y="1" width="725" height="138"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<tableView verticalHuggingPriority="750" allowsExpansionToolTips="YES" columnAutoresizingStyle="firstColumnOnly" tableStyle="plain" columnSelection="YES" multipleSelection="NO" autosaveColumns="NO" rowHeight="24" rowSizeStyle="automatic" headerView="IbE-bD-EWJ" viewBased="YES" id="ZsG-T1-vGv">
|
<tableView verticalHuggingPriority="750" allowsExpansionToolTips="YES" columnAutoresizingStyle="firstColumnOnly" tableStyle="plain" columnSelection="YES" multipleSelection="NO" autosaveColumns="NO" rowHeight="24" rowSizeStyle="automatic" headerView="IbE-bD-EWJ" viewBased="YES" id="ZsG-T1-vGv">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="786" height="156"/>
|
<rect key="frame" x="0.0" y="0.0" width="725" height="115"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<size key="intercellSpacing" width="3" height="2"/>
|
<size key="intercellSpacing" width="3" height="2"/>
|
||||||
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
|
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||||
<color key="gridColor" name="gridColor" catalog="System" colorSpace="catalog"/>
|
<color key="gridColor" name="gridColor" catalog="System" colorSpace="catalog"/>
|
||||||
<tableColumns>
|
<tableColumns>
|
||||||
<tableColumn width="289.5" minWidth="143" maxWidth="1000" id="pR9-d4-SNf">
|
<tableColumn width="228.5" minWidth="143" maxWidth="1000" id="pR9-d4-SNf">
|
||||||
<tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border" title="Codec">
|
<tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border" title="Codec">
|
||||||
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
<color key="backgroundColor" name="headerColor" catalog="System" colorSpace="catalog"/>
|
<color key="backgroundColor" name="headerColor" catalog="System" colorSpace="catalog"/>
|
||||||
@ -383,11 +383,11 @@ DQ
|
|||||||
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
|
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
|
||||||
<prototypeCellViews>
|
<prototypeCellViews>
|
||||||
<tableCellView id="UBy-AR-7XQ">
|
<tableCellView id="UBy-AR-7XQ">
|
||||||
<rect key="frame" x="1" y="1" width="290" height="24"/>
|
<rect key="frame" x="1" y="1" width="228" height="24"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<popUpButton toolTip="Audio encoder." verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="6lx-af-rBL">
|
<popUpButton toolTip="Audio encoder." verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="6lx-af-rBL">
|
||||||
<rect key="frame" x="-1" y="0.0" width="292" height="22"/>
|
<rect key="frame" x="-1" y="0.0" width="231" height="22"/>
|
||||||
<popUpButtonCell key="cell" type="push" bezelStyle="rounded" alignment="left" controlSize="small" lineBreakMode="truncatingTail" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" id="t8s-X1-tQV">
|
<popUpButtonCell key="cell" type="push" bezelStyle="rounded" alignment="left" controlSize="small" lineBreakMode="truncatingTail" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" id="t8s-X1-tQV">
|
||||||
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
||||||
<font key="font" metaFont="menu" size="11"/>
|
<font key="font" metaFont="menu" size="11"/>
|
||||||
@ -425,11 +425,11 @@ DQ
|
|||||||
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
|
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
|
||||||
<prototypeCellViews>
|
<prototypeCellViews>
|
||||||
<tableCellView id="uS1-Fd-V9I">
|
<tableCellView id="uS1-Fd-V9I">
|
||||||
<rect key="frame" x="293.5" y="1" width="149" height="24"/>
|
<rect key="frame" x="232.5" y="1" width="150" height="24"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="igm-hS-rrD">
|
<popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="igm-hS-rrD">
|
||||||
<rect key="frame" x="-1" y="0.0" width="151" height="22"/>
|
<rect key="frame" x="-1" y="0.0" width="152" height="22"/>
|
||||||
<string key="toolTip">Mixdown type. Controls how multi-channel audio is mixed into fewer channels, or whether the original channels are preserved.
|
<string key="toolTip">Mixdown type. Controls how multi-channel audio is mixed into fewer channels, or whether the original channels are preserved.
|
||||||
|
|
||||||
Dolby Surround and Dolby Pro Logic II convert multi-channel audio to stereo and matrix encode additional channels for surround reproduction on compatible equipment, while maintaining stereo compatibility.</string>
|
Dolby Surround and Dolby Pro Logic II convert multi-channel audio to stereo and matrix encode additional channels for surround reproduction on compatible equipment, while maintaining stereo compatibility.</string>
|
||||||
@ -475,7 +475,7 @@ Dolby Surround and Dolby Pro Logic II convert multi-channel audio to stereo and
|
|||||||
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
|
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
|
||||||
<prototypeCellViews>
|
<prototypeCellViews>
|
||||||
<tableCellView id="5No-Mm-bpD">
|
<tableCellView id="5No-Mm-bpD">
|
||||||
<rect key="frame" x="446" y="1" width="110" height="24"/>
|
<rect key="frame" x="385" y="1" width="109" height="24"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<popUpButton toolTip="Audio sample rate in kilohertz (kHz). Auto is recommended." verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="r80-yv-59n">
|
<popUpButton toolTip="Audio sample rate in kilohertz (kHz). Auto is recommended." verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="r80-yv-59n">
|
||||||
@ -519,11 +519,11 @@ Dolby Surround and Dolby Pro Logic II convert multi-channel audio to stereo and
|
|||||||
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
|
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
|
||||||
<prototypeCellViews>
|
<prototypeCellViews>
|
||||||
<tableCellView id="Bxd-gI-dFS">
|
<tableCellView id="Bxd-gI-dFS">
|
||||||
<rect key="frame" x="558.5" y="1" width="95" height="24"/>
|
<rect key="frame" x="497.5" y="1" width="96" height="24"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="hHP-dw-nba">
|
<popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="hHP-dw-nba">
|
||||||
<rect key="frame" x="-1" y="0.0" width="97" height="22"/>
|
<rect key="frame" x="-1" y="0.0" width="98" height="22"/>
|
||||||
<string key="toolTip">Audio bit rate in kilobits per second (kbps). Smaller values reduce audio quality. Larger values use more data and may be less compatible.</string>
|
<string key="toolTip">Audio bit rate in kilobits per second (kbps). Smaller values reduce audio quality. Larger values use more data and may be less compatible.</string>
|
||||||
<popUpButtonCell key="cell" type="push" bezelStyle="rounded" alignment="left" controlSize="small" lineBreakMode="truncatingTail" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" id="U8n-oy-hkv">
|
<popUpButtonCell key="cell" type="push" bezelStyle="rounded" alignment="left" controlSize="small" lineBreakMode="truncatingTail" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" id="U8n-oy-hkv">
|
||||||
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
||||||
@ -563,7 +563,7 @@ Dolby Surround and Dolby Pro Logic II convert multi-channel audio to stereo and
|
|||||||
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
|
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
|
||||||
<prototypeCellViews>
|
<prototypeCellViews>
|
||||||
<tableCellView id="fhc-Nv-0Oh">
|
<tableCellView id="fhc-Nv-0Oh">
|
||||||
<rect key="frame" x="657" y="1" width="62" height="28"/>
|
<rect key="frame" x="596" y="1" width="62" height="28"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<textField toolTip="Audio gain in decibels (dB). Increases or decreases audio volume." focusRingType="none" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="xnA-03-Bul">
|
<textField toolTip="Audio gain in decibels (dB). Increases or decreases audio volume." focusRingType="none" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="xnA-03-Bul">
|
||||||
@ -613,7 +613,7 @@ Dolby Surround and Dolby Pro Logic II convert multi-channel audio to stereo and
|
|||||||
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
|
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
|
||||||
<prototypeCellViews>
|
<prototypeCellViews>
|
||||||
<tableCellView id="t2K-5D-xsX">
|
<tableCellView id="t2K-5D-xsX">
|
||||||
<rect key="frame" x="722" y="1" width="62" height="27"/>
|
<rect key="frame" x="661" y="1" width="62" height="27"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<slider horizontalHuggingPriority="750" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="DGi-Dl-5nh">
|
<slider horizontalHuggingPriority="750" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="DGi-Dl-5nh">
|
||||||
@ -675,7 +675,7 @@ Values greater than 1 further increase the volume of quiet sounds. Values greate
|
|||||||
<constraint firstAttribute="height" relation="greaterThanOrEqual" constant="140" id="4LW-Vv-px8"/>
|
<constraint firstAttribute="height" relation="greaterThanOrEqual" constant="140" id="4LW-Vv-px8"/>
|
||||||
</constraints>
|
</constraints>
|
||||||
<scroller key="horizontalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="YES" id="ToF-HP-PBf">
|
<scroller key="horizontalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="YES" id="ToF-HP-PBf">
|
||||||
<rect key="frame" x="1" y="124" width="824" height="15"/>
|
<rect key="frame" x="1" y="123" width="724" height="16"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
</scroller>
|
</scroller>
|
||||||
<scroller key="verticalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="NO" id="Dhw-4v-YLa">
|
<scroller key="verticalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="NO" id="Dhw-4v-YLa">
|
||||||
@ -683,7 +683,7 @@ Values greater than 1 further increase the volume of quiet sounds. Values greate
|
|||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
</scroller>
|
</scroller>
|
||||||
<tableHeaderView key="headerView" wantsLayer="YES" id="IbE-bD-EWJ">
|
<tableHeaderView key="headerView" wantsLayer="YES" id="IbE-bD-EWJ">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="786" height="23"/>
|
<rect key="frame" x="0.0" y="0.0" width="725" height="23"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
</tableHeaderView>
|
</tableHeaderView>
|
||||||
</scrollView>
|
</scrollView>
|
||||||
@ -699,7 +699,7 @@ Values greater than 1 further increase the volume of quiet sounds. Values greate
|
|||||||
</connections>
|
</connections>
|
||||||
</button>
|
</button>
|
||||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="kJY-av-BYf">
|
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="kJY-av-BYf">
|
||||||
<rect key="frame" x="690" y="13" width="64" height="27"/>
|
<rect key="frame" x="629" y="13" width="64" height="27"/>
|
||||||
<buttonCell key="cell" type="push" title="Cancel" bezelStyle="rounded" alignment="center" controlSize="small" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="Jn4-1L-J1g">
|
<buttonCell key="cell" type="push" title="Cancel" bezelStyle="rounded" alignment="center" controlSize="small" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="Jn4-1L-J1g">
|
||||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||||
<font key="font" metaFont="menu" size="11"/>
|
<font key="font" metaFont="menu" size="11"/>
|
||||||
@ -722,10 +722,10 @@ Gw
|
|||||||
</connections>
|
</connections>
|
||||||
</button>
|
</button>
|
||||||
<stackView distribution="fill" orientation="vertical" alignment="leading" horizontalStackHuggingPriority="249.99998474121094" verticalStackHuggingPriority="249.99998474121094" detachesHiddenViews="YES" translatesAutoresizingMaskIntoConstraints="NO" id="mON-8C-X5t">
|
<stackView distribution="fill" orientation="vertical" alignment="leading" horizontalStackHuggingPriority="249.99998474121094" verticalStackHuggingPriority="249.99998474121094" detachesHiddenViews="YES" translatesAutoresizingMaskIntoConstraints="NO" id="mON-8C-X5t">
|
||||||
<rect key="frame" x="20" y="294" width="440" height="160"/>
|
<rect key="frame" x="20" y="253" width="392" height="204"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<stackView distribution="fill" orientation="horizontal" alignment="centerY" horizontalStackHuggingPriority="249.99998474121094" verticalStackHuggingPriority="249.99998474121094" detachesHiddenViews="YES" translatesAutoresizingMaskIntoConstraints="NO" id="dYR-Xt-Vb4">
|
<stackView distribution="fill" orientation="horizontal" alignment="centerY" horizontalStackHuggingPriority="249.99998474121094" verticalStackHuggingPriority="249.99998474121094" detachesHiddenViews="YES" translatesAutoresizingMaskIntoConstraints="NO" id="dYR-Xt-Vb4">
|
||||||
<rect key="frame" x="0.0" y="144" width="351" height="16"/>
|
<rect key="frame" x="0.0" y="188" width="351" height="16"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<textField focusRingType="none" horizontalHuggingPriority="249" verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="YES" preferredMaxLayoutWidth="300" translatesAutoresizingMaskIntoConstraints="NO" id="fPg-3n-1TN">
|
<textField focusRingType="none" horizontalHuggingPriority="249" verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="YES" preferredMaxLayoutWidth="300" translatesAutoresizingMaskIntoConstraints="NO" id="fPg-3n-1TN">
|
||||||
<rect key="frame" x="-2" y="1" width="138" height="14"/>
|
<rect key="frame" x="-2" y="1" width="138" height="14"/>
|
||||||
@ -772,10 +772,10 @@ All Matching Selected Languages adds all audio tracks matching each of the selec
|
|||||||
</customSpacing>
|
</customSpacing>
|
||||||
</stackView>
|
</stackView>
|
||||||
<stackView distribution="fill" orientation="horizontal" alignment="top" horizontalStackHuggingPriority="249.99998474121094" verticalStackHuggingPriority="249.99998474121094" detachesHiddenViews="YES" translatesAutoresizingMaskIntoConstraints="NO" id="GSL-ZN-P2c">
|
<stackView distribution="fill" orientation="horizontal" alignment="top" horizontalStackHuggingPriority="249.99998474121094" verticalStackHuggingPriority="249.99998474121094" detachesHiddenViews="YES" translatesAutoresizingMaskIntoConstraints="NO" id="GSL-ZN-P2c">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="440" height="136"/>
|
<rect key="frame" x="0.0" y="0.0" width="392" height="180"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="YES" preferredMaxLayoutWidth="300" translatesAutoresizingMaskIntoConstraints="NO" id="Jsz-Er-bsF">
|
<textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="YES" preferredMaxLayoutWidth="300" translatesAutoresizingMaskIntoConstraints="NO" id="Jsz-Er-bsF">
|
||||||
<rect key="frame" x="-2" y="122" width="138" height="14"/>
|
<rect key="frame" x="-2" y="166" width="138" height="14"/>
|
||||||
<textFieldCell key="cell" controlSize="small" sendsActionOnEndEditing="YES" alignment="right" title="Languages:" id="mAT-Jp-SG1">
|
<textFieldCell key="cell" controlSize="small" sendsActionOnEndEditing="YES" alignment="right" title="Languages:" id="mAT-Jp-SG1">
|
||||||
<font key="font" metaFont="menu" size="11"/>
|
<font key="font" metaFont="menu" size="11"/>
|
||||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
@ -783,19 +783,19 @@ All Matching Selected Languages adds all audio tracks matching each of the selec
|
|||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
</textField>
|
</textField>
|
||||||
<scrollView toolTip="Select the languages to use with the Track Selection Behavior setting." wantsLayer="YES" autohidesScrollers="YES" horizontalLineScroll="16" horizontalPageScroll="10" verticalLineScroll="16" verticalPageScroll="10" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="aTC-39-h6S">
|
<scrollView toolTip="Select the languages to use with the Track Selection Behavior setting." wantsLayer="YES" autohidesScrollers="YES" horizontalLineScroll="16" horizontalPageScroll="10" verticalLineScroll="16" verticalPageScroll="10" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="aTC-39-h6S">
|
||||||
<rect key="frame" x="142" y="0.0" width="298" height="136"/>
|
<rect key="frame" x="142" y="0.0" width="250" height="180"/>
|
||||||
<clipView key="contentView" ambiguous="YES" id="TdE-Sh-NcS">
|
<clipView key="contentView" ambiguous="YES" id="TdE-Sh-NcS">
|
||||||
<rect key="frame" x="1" y="1" width="296" height="134"/>
|
<rect key="frame" x="1" y="1" width="248" height="178"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<tableView verticalHuggingPriority="750" ambiguous="YES" allowsExpansionToolTips="YES" columnAutoresizingStyle="lastColumnOnly" tableStyle="plain" columnReordering="NO" columnResizing="NO" autosaveColumns="NO" rowHeight="14" viewBased="YES" id="Of7-71-Ci6">
|
<tableView verticalHuggingPriority="750" ambiguous="YES" allowsExpansionToolTips="YES" columnAutoresizingStyle="lastColumnOnly" tableStyle="plain" columnReordering="NO" columnResizing="NO" autosaveColumns="NO" rowHeight="14" viewBased="YES" id="Of7-71-Ci6">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="296" height="134"/>
|
<rect key="frame" x="0.0" y="0.0" width="248" height="178"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<size key="intercellSpacing" width="3" height="2"/>
|
<size key="intercellSpacing" width="3" height="2"/>
|
||||||
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
|
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||||
<color key="gridColor" name="gridColor" catalog="System" colorSpace="catalog"/>
|
<color key="gridColor" name="gridColor" catalog="System" colorSpace="catalog"/>
|
||||||
<tableColumns>
|
<tableColumns>
|
||||||
<tableColumn identifier="checkBox" width="217" minWidth="16" maxWidth="1000" id="G44-XP-6xE">
|
<tableColumn identifier="checkBox" width="245" minWidth="16" maxWidth="1000" id="G44-XP-6xE">
|
||||||
<tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border" alignment="left">
|
<tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border" alignment="left">
|
||||||
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
<color key="backgroundColor" white="0.33333298560000002" alpha="1" colorSpace="calibratedWhite"/>
|
<color key="backgroundColor" white="0.33333298560000002" alpha="1" colorSpace="calibratedWhite"/>
|
||||||
@ -807,7 +807,7 @@ All Matching Selected Languages adds all audio tracks matching each of the selec
|
|||||||
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
|
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
|
||||||
<prototypeCellViews>
|
<prototypeCellViews>
|
||||||
<tableCellView id="haT-6q-XQu">
|
<tableCellView id="haT-6q-XQu">
|
||||||
<rect key="frame" x="1" y="1" width="217" height="17"/>
|
<rect key="frame" x="1" y="1" width="245" height="17"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<button translatesAutoresizingMaskIntoConstraints="NO" id="F5N-kV-6cy">
|
<button translatesAutoresizingMaskIntoConstraints="NO" id="F5N-kV-6cy">
|
||||||
@ -822,7 +822,7 @@ All Matching Selected Languages adds all audio tracks matching each of the selec
|
|||||||
</connections>
|
</connections>
|
||||||
</button>
|
</button>
|
||||||
<textField focusRingType="none" horizontalHuggingPriority="249" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="qqA-7S-cT9">
|
<textField focusRingType="none" horizontalHuggingPriority="249" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="qqA-7S-cT9">
|
||||||
<rect key="frame" x="17" y="2" width="199" height="14"/>
|
<rect key="frame" x="17" y="2" width="227" height="14"/>
|
||||||
<textFieldCell key="cell" controlSize="small" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="Table View Cell" id="XKL-2e-Dlv">
|
<textFieldCell key="cell" controlSize="small" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="Table View Cell" id="XKL-2e-Dlv">
|
||||||
<font key="font" metaFont="menu" size="11"/>
|
<font key="font" metaFont="menu" size="11"/>
|
||||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
@ -861,10 +861,10 @@ All Matching Selected Languages adds all audio tracks matching each of the selec
|
|||||||
</clipView>
|
</clipView>
|
||||||
<constraints>
|
<constraints>
|
||||||
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="250" id="7Rp-Nn-e0h"/>
|
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="250" id="7Rp-Nn-e0h"/>
|
||||||
<constraint firstAttribute="height" relation="greaterThanOrEqual" constant="136" id="u5x-I4-dLx"/>
|
<constraint firstAttribute="height" relation="greaterThanOrEqual" constant="180" id="u5x-I4-dLx"/>
|
||||||
</constraints>
|
</constraints>
|
||||||
<scroller key="horizontalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="YES" id="bXf-U5-ogz">
|
<scroller key="horizontalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="YES" id="bXf-U5-ogz">
|
||||||
<rect key="frame" x="1" y="157" width="258" height="15"/>
|
<rect key="frame" x="1" y="163" width="247" height="16"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
</scroller>
|
</scroller>
|
||||||
<scroller key="verticalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="NO" id="BWM-rq-VTg">
|
<scroller key="verticalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="NO" id="BWM-rq-VTg">
|
||||||
@ -895,27 +895,82 @@ All Matching Selected Languages adds all audio tracks matching each of the selec
|
|||||||
<real value="3.4028234663852886e+38"/>
|
<real value="3.4028234663852886e+38"/>
|
||||||
</customSpacing>
|
</customSpacing>
|
||||||
</stackView>
|
</stackView>
|
||||||
|
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="jVF-av-Sw6">
|
||||||
|
<rect key="frame" x="571" y="265" width="99" height="16"/>
|
||||||
|
<buttonCell key="cell" type="check" title="Passthru name" bezelStyle="regularSquare" imagePosition="left" controlSize="small" state="on" inset="2" id="XmJ-lo-ciO">
|
||||||
|
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||||
|
<font key="font" metaFont="smallSystem"/>
|
||||||
|
</buttonCell>
|
||||||
|
<connections>
|
||||||
|
<binding destination="-2" name="value" keyPath="self.settings.passthruName" id="Vdb-dy-WkL"/>
|
||||||
|
</connections>
|
||||||
|
</button>
|
||||||
|
<textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="bqY-oZ-Dez">
|
||||||
|
<rect key="frame" x="466" y="266" width="100" height="14"/>
|
||||||
|
<textFieldCell key="cell" controlSize="small" lineBreakMode="clipping" alignment="right" title="Track name:" id="aQn-7q-tQG">
|
||||||
|
<font key="font" metaFont="smallSystem"/>
|
||||||
|
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
</textFieldCell>
|
||||||
|
</textField>
|
||||||
|
<popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="8C3-yX-7tT">
|
||||||
|
<rect key="frame" x="568" y="238" width="120" height="22"/>
|
||||||
|
<popUpButtonCell key="cell" type="push" title="Off" bezelStyle="rounded" alignment="left" controlSize="small" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" selectedItem="AaG-rx-x5W" id="Rde-g8-st2">
|
||||||
|
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
||||||
|
<font key="font" metaFont="smallSystem"/>
|
||||||
|
<menu key="menu" id="uDn-6R-tds">
|
||||||
|
<items>
|
||||||
|
<menuItem title="Off" state="on" id="AaG-rx-x5W"/>
|
||||||
|
<menuItem title="Unnamed Tracks" id="gjw-kg-H3W"/>
|
||||||
|
<menuItem title="All Tracks" id="s0U-gp-0sK"/>
|
||||||
|
</items>
|
||||||
|
</menu>
|
||||||
|
</popUpButtonCell>
|
||||||
|
<connections>
|
||||||
|
<binding destination="-2" name="selectedIndex" keyPath="self.settings.automaticNamingBehavior" id="8SF-Vd-s3C"/>
|
||||||
|
</connections>
|
||||||
|
</popUpButton>
|
||||||
|
<textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Sl3-PL-ybS">
|
||||||
|
<rect key="frame" x="466" y="243" width="100" height="14"/>
|
||||||
|
<textFieldCell key="cell" controlSize="small" lineBreakMode="clipping" alignment="right" title="Autonaming:" id="XOM-af-vzp">
|
||||||
|
<font key="font" metaFont="smallSystem"/>
|
||||||
|
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
</textFieldCell>
|
||||||
|
</textField>
|
||||||
</subviews>
|
</subviews>
|
||||||
<constraints>
|
<constraints>
|
||||||
<constraint firstItem="kJY-av-BYf" firstAttribute="width" secondItem="sC2-52-liU" secondAttribute="width" id="3US-QJ-5QL"/>
|
<constraint firstItem="kJY-av-BYf" firstAttribute="width" secondItem="sC2-52-liU" secondAttribute="width" id="3US-QJ-5QL"/>
|
||||||
|
<constraint firstItem="Tth-IR-7cU" firstAttribute="leading" secondItem="bqY-oZ-Dez" secondAttribute="leading" id="6TO-Se-4Mn"/>
|
||||||
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="RtZ-Cz-5mG" secondAttribute="trailing" constant="20" symbolic="YES" id="7dT-AF-zH9"/>
|
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="RtZ-Cz-5mG" secondAttribute="trailing" constant="20" symbolic="YES" id="7dT-AF-zH9"/>
|
||||||
<constraint firstItem="mON-8C-X5t" firstAttribute="leading" secondItem="ZP2-Cp-K5w" secondAttribute="leading" constant="20" symbolic="YES" id="84z-cH-d09"/>
|
<constraint firstItem="mON-8C-X5t" firstAttribute="leading" secondItem="ZP2-Cp-K5w" secondAttribute="leading" constant="20" symbolic="YES" id="84z-cH-d09"/>
|
||||||
<constraint firstItem="kJY-av-BYf" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="M11-Ls-RrL" secondAttribute="trailing" constant="12" symbolic="YES" id="864-c4-BeW"/>
|
<constraint firstItem="kJY-av-BYf" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="M11-Ls-RrL" secondAttribute="trailing" constant="12" symbolic="YES" id="864-c4-BeW"/>
|
||||||
<constraint firstItem="M11-Ls-RrL" firstAttribute="top" secondItem="N4q-sT-WgW" secondAttribute="bottom" constant="15" id="AOo-Sb-GZW"/>
|
<constraint firstItem="M11-Ls-RrL" firstAttribute="top" secondItem="N4q-sT-WgW" secondAttribute="bottom" constant="15" id="AOo-Sb-GZW"/>
|
||||||
|
<constraint firstItem="8C3-yX-7tT" firstAttribute="leading" secondItem="Sl3-PL-ybS" secondAttribute="trailing" constant="8" symbolic="YES" id="AeR-Ps-v4g"/>
|
||||||
<constraint firstAttribute="trailing" secondItem="sC2-52-liU" secondAttribute="trailing" constant="20" id="B62-ty-pmI"/>
|
<constraint firstAttribute="trailing" secondItem="sC2-52-liU" secondAttribute="trailing" constant="20" id="B62-ty-pmI"/>
|
||||||
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="8Pw-Kq-eMN" secondAttribute="trailing" constant="20" id="Fu8-nq-Vft"/>
|
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="8Pw-Kq-eMN" secondAttribute="trailing" constant="20" id="Fu8-nq-Vft"/>
|
||||||
<constraint firstAttribute="bottom" secondItem="M11-Ls-RrL" secondAttribute="bottom" constant="20" id="G1B-eX-eqE"/>
|
<constraint firstAttribute="bottom" secondItem="M11-Ls-RrL" secondAttribute="bottom" constant="20" id="G1B-eX-eqE"/>
|
||||||
<constraint firstItem="uF5-6E-EIe" firstAttribute="leading" secondItem="N4q-sT-WgW" secondAttribute="trailing" constant="13" id="J0L-CA-XLI"/>
|
<constraint firstItem="uF5-6E-EIe" firstAttribute="leading" secondItem="N4q-sT-WgW" secondAttribute="trailing" constant="13" id="J0L-CA-XLI"/>
|
||||||
|
<constraint firstItem="8C3-yX-7tT" firstAttribute="firstBaseline" secondItem="Sl3-PL-ybS" secondAttribute="firstBaseline" id="Kp4-Za-XgQ"/>
|
||||||
<constraint firstItem="kJY-av-BYf" firstAttribute="baseline" secondItem="sC2-52-liU" secondAttribute="baseline" id="LdH-5O-jKo"/>
|
<constraint firstItem="kJY-av-BYf" firstAttribute="baseline" secondItem="sC2-52-liU" secondAttribute="baseline" id="LdH-5O-jKo"/>
|
||||||
|
<constraint firstItem="Sl3-PL-ybS" firstAttribute="top" secondItem="bqY-oZ-Dez" secondAttribute="bottom" constant="9" id="Qq9-ES-dj1"/>
|
||||||
<constraint firstItem="RtZ-Cz-5mG" firstAttribute="leading" secondItem="ZP2-Cp-K5w" secondAttribute="leading" constant="20" id="R53-5h-0vJ"/>
|
<constraint firstItem="RtZ-Cz-5mG" firstAttribute="leading" secondItem="ZP2-Cp-K5w" secondAttribute="leading" constant="20" id="R53-5h-0vJ"/>
|
||||||
<constraint firstAttribute="bottom" secondItem="sC2-52-liU" secondAttribute="bottom" constant="20" id="RRW-Y5-912"/>
|
<constraint firstAttribute="bottom" secondItem="sC2-52-liU" secondAttribute="bottom" constant="20" id="RRW-Y5-912"/>
|
||||||
<constraint firstItem="8Pw-Kq-eMN" firstAttribute="leading" secondItem="mON-8C-X5t" secondAttribute="trailing" constant="56" id="Wad-TB-7OD"/>
|
<constraint firstItem="8Pw-Kq-eMN" firstAttribute="leading" secondItem="mON-8C-X5t" secondAttribute="trailing" constant="56" id="Wad-TB-7OD"/>
|
||||||
|
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="8C3-yX-7tT" secondAttribute="trailing" constant="20" symbolic="YES" id="YpH-o8-mMO"/>
|
||||||
|
<constraint firstItem="jVF-av-Sw6" firstAttribute="leading" secondItem="bqY-oZ-Dez" secondAttribute="trailing" constant="8" symbolic="YES" id="ZNF-8f-XQc"/>
|
||||||
|
<constraint firstItem="bqY-oZ-Dez" firstAttribute="top" secondItem="Tth-IR-7cU" secondAttribute="bottom" constant="16" id="amj-wt-gHG"/>
|
||||||
|
<constraint firstItem="Tth-IR-7cU" firstAttribute="width" secondItem="bqY-oZ-Dez" secondAttribute="width" id="bZu-Zw-J4W"/>
|
||||||
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="uF5-6E-EIe" secondAttribute="trailing" constant="20" symbolic="YES" id="cEr-2s-7rp"/>
|
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="uF5-6E-EIe" secondAttribute="trailing" constant="20" symbolic="YES" id="cEr-2s-7rp"/>
|
||||||
<constraint firstItem="M11-Ls-RrL" firstAttribute="leading" secondItem="N4q-sT-WgW" secondAttribute="leading" id="fBT-WX-Q5Z"/>
|
<constraint firstItem="M11-Ls-RrL" firstAttribute="leading" secondItem="N4q-sT-WgW" secondAttribute="leading" id="fBT-WX-Q5Z"/>
|
||||||
<constraint firstAttribute="trailing" secondItem="hGL-Ew-UVJ" secondAttribute="trailing" constant="20" id="glz-Tw-AyY"/>
|
<constraint firstAttribute="trailing" secondItem="hGL-Ew-UVJ" secondAttribute="trailing" constant="20" id="glz-Tw-AyY"/>
|
||||||
<constraint firstItem="hGL-Ew-UVJ" firstAttribute="top" secondItem="RtZ-Cz-5mG" secondAttribute="bottom" constant="8" id="jhe-0p-LYz"/>
|
<constraint firstItem="hGL-Ew-UVJ" firstAttribute="top" secondItem="RtZ-Cz-5mG" secondAttribute="bottom" constant="8" id="jhe-0p-LYz"/>
|
||||||
<constraint firstItem="mON-8C-X5t" firstAttribute="top" secondItem="ZP2-Cp-K5w" secondAttribute="top" constant="20" symbolic="YES" id="kni-de-kzf"/>
|
<constraint firstItem="mON-8C-X5t" firstAttribute="top" secondItem="ZP2-Cp-K5w" secondAttribute="top" constant="20" symbolic="YES" id="kni-de-kzf"/>
|
||||||
<constraint firstItem="uF5-6E-EIe" firstAttribute="centerY" secondItem="N4q-sT-WgW" secondAttribute="centerY" id="nJR-6O-xLy"/>
|
<constraint firstItem="uF5-6E-EIe" firstAttribute="centerY" secondItem="N4q-sT-WgW" secondAttribute="centerY" id="nJR-6O-xLy"/>
|
||||||
|
<constraint firstItem="jVF-av-Sw6" firstAttribute="firstBaseline" secondItem="bqY-oZ-Dez" secondAttribute="firstBaseline" id="qco-nx-Mur"/>
|
||||||
|
<constraint firstItem="Sl3-PL-ybS" firstAttribute="width" secondItem="bqY-oZ-Dez" secondAttribute="width" id="qf8-02-v7L"/>
|
||||||
|
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="jVF-av-Sw6" secondAttribute="trailing" constant="20" symbolic="YES" id="sOd-JV-Xyo"/>
|
||||||
|
<constraint firstItem="bqY-oZ-Dez" firstAttribute="leading" secondItem="Sl3-PL-ybS" secondAttribute="leading" id="u0J-Vk-x2O"/>
|
||||||
<constraint firstItem="sC2-52-liU" firstAttribute="leading" secondItem="kJY-av-BYf" secondAttribute="trailing" constant="8" id="vZI-9R-5tO"/>
|
<constraint firstItem="sC2-52-liU" firstAttribute="leading" secondItem="kJY-av-BYf" secondAttribute="trailing" constant="8" id="vZI-9R-5tO"/>
|
||||||
<constraint firstItem="N4q-sT-WgW" firstAttribute="top" secondItem="hGL-Ew-UVJ" secondAttribute="bottom" constant="8" id="w2O-Xt-Vdr"/>
|
<constraint firstItem="N4q-sT-WgW" firstAttribute="top" secondItem="hGL-Ew-UVJ" secondAttribute="bottom" constant="8" id="w2O-Xt-Vdr"/>
|
||||||
<constraint firstItem="RtZ-Cz-5mG" firstAttribute="top" secondItem="GSL-ZN-P2c" secondAttribute="bottom" constant="16" id="wcv-WR-Xhf"/>
|
<constraint firstItem="RtZ-Cz-5mG" firstAttribute="top" secondItem="GSL-ZN-P2c" secondAttribute="bottom" constant="16" id="wcv-WR-Xhf"/>
|
||||||
@ -927,7 +982,7 @@ All Matching Selected Languages adds all audio tracks matching each of the selec
|
|||||||
<connections>
|
<connections>
|
||||||
<outlet property="initialFirstResponder" destination="oiD-QI-wly" id="Vxi-xi-P0d"/>
|
<outlet property="initialFirstResponder" destination="oiD-QI-wly" id="Vxi-xi-P0d"/>
|
||||||
</connections>
|
</connections>
|
||||||
<point key="canvasLocation" x="-1567" y="-303"/>
|
<point key="canvasLocation" x="-1557" y="-368"/>
|
||||||
</window>
|
</window>
|
||||||
<arrayController objectClassName="HBLang" id="ZBe-aP-wvq" userLabel="Languages Table Controller" customClass="HBLanguageArrayController">
|
<arrayController objectClassName="HBLang" id="ZBe-aP-wvq" userLabel="Languages Table Controller" customClass="HBLanguageArrayController">
|
||||||
<declaredKeys>
|
<declaredKeys>
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="32700.99.1234" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
|
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="23727" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<deployment identifier="macosx"/>
|
<deployment identifier="macosx"/>
|
||||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="22689"/>
|
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="23727"/>
|
||||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
<objects>
|
<objects>
|
||||||
@ -17,14 +17,14 @@
|
|||||||
<window title="Subtitles Selection Behaviour" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" restorable="NO" visibleAtLaunch="NO" animationBehavior="default" id="kwM-lz-5lG">
|
<window title="Subtitles Selection Behaviour" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" restorable="NO" visibleAtLaunch="NO" animationBehavior="default" id="kwM-lz-5lG">
|
||||||
<windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES" resizable="YES"/>
|
<windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES" resizable="YES"/>
|
||||||
<windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
|
<windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
|
||||||
<rect key="contentRect" x="283" y="305" width="427" height="422"/>
|
<rect key="contentRect" x="283" y="305" width="427" height="439"/>
|
||||||
<rect key="screenRect" x="0.0" y="0.0" width="1920" height="1055"/>
|
<rect key="screenRect" x="0.0" y="0.0" width="1920" height="1055"/>
|
||||||
<view key="contentView" misplaced="YES" id="ZP2-Cp-K5w">
|
<view key="contentView" misplaced="YES" id="ZP2-Cp-K5w">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="427" height="422"/>
|
<rect key="frame" x="0.0" y="0.0" width="427" height="439"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="YES" preferredMaxLayoutWidth="300" translatesAutoresizingMaskIntoConstraints="NO" id="fPg-3n-1TN">
|
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="YES" preferredMaxLayoutWidth="300" translatesAutoresizingMaskIntoConstraints="NO" id="fPg-3n-1TN">
|
||||||
<rect key="frame" x="18" y="368" width="138" height="14"/>
|
<rect key="frame" x="18" y="401" width="138" height="14"/>
|
||||||
<textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Track Selection Behavior:" id="GbM-vm-RC2">
|
<textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Track Selection Behavior:" id="GbM-vm-RC2">
|
||||||
<font key="font" metaFont="smallSystem"/>
|
<font key="font" metaFont="smallSystem"/>
|
||||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
@ -32,7 +32,7 @@
|
|||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
</textField>
|
</textField>
|
||||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="YES" preferredMaxLayoutWidth="300" translatesAutoresizingMaskIntoConstraints="NO" id="Jsz-Er-bsF">
|
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="YES" preferredMaxLayoutWidth="300" translatesAutoresizingMaskIntoConstraints="NO" id="Jsz-Er-bsF">
|
||||||
<rect key="frame" x="18" y="345" width="138" height="14"/>
|
<rect key="frame" x="18" y="378" width="138" height="14"/>
|
||||||
<textFieldCell key="cell" controlSize="small" sendsActionOnEndEditing="YES" alignment="right" title="Languages:" id="mAT-Jp-SG1">
|
<textFieldCell key="cell" controlSize="small" sendsActionOnEndEditing="YES" alignment="right" title="Languages:" id="mAT-Jp-SG1">
|
||||||
<font key="font" metaFont="smallSystem"/>
|
<font key="font" metaFont="smallSystem"/>
|
||||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
@ -40,7 +40,7 @@
|
|||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
</textField>
|
</textField>
|
||||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="YES" preferredMaxLayoutWidth="300" translatesAutoresizingMaskIntoConstraints="NO" id="Hqz-Lw-gAu">
|
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="YES" preferredMaxLayoutWidth="300" translatesAutoresizingMaskIntoConstraints="NO" id="Hqz-Lw-gAu">
|
||||||
<rect key="frame" x="18" y="185" width="138" height="14"/>
|
<rect key="frame" x="18" y="211" width="138" height="14"/>
|
||||||
<textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Options:" id="NJl-q3-zXL">
|
<textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Options:" id="NJl-q3-zXL">
|
||||||
<font key="font" metaFont="smallSystem"/>
|
<font key="font" metaFont="smallSystem"/>
|
||||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
@ -48,7 +48,7 @@
|
|||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
</textField>
|
</textField>
|
||||||
<popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="oiD-QI-wly">
|
<popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="oiD-QI-wly">
|
||||||
<rect key="frame" x="158" y="363" width="253" height="22"/>
|
<rect key="frame" x="158" y="396" width="253" height="22"/>
|
||||||
<string key="toolTip">Track Selection Behavior.
|
<string key="toolTip">Track Selection Behavior.
|
||||||
|
|
||||||
None will not select any audio tracks by default.
|
None will not select any audio tracks by default.
|
||||||
@ -73,7 +73,7 @@ All Matching Selected Languages adds all audio tracks matching each of the selec
|
|||||||
</connections>
|
</connections>
|
||||||
</popUpButton>
|
</popUpButton>
|
||||||
<button toolTip="Add Closed Caption subtitles as a soft subtitle track (not burned-in)." translatesAutoresizingMaskIntoConstraints="NO" id="uF5-6E-EIe">
|
<button toolTip="Add Closed Caption subtitles as a soft subtitle track (not burned-in)." translatesAutoresizingMaskIntoConstraints="NO" id="uF5-6E-EIe">
|
||||||
<rect key="frame" x="161" y="184" width="246" height="16"/>
|
<rect key="frame" x="161" y="210" width="246" height="16"/>
|
||||||
<buttonCell key="cell" type="check" title="Add Closed Captions when available" bezelStyle="regularSquare" imagePosition="left" controlSize="small" state="on" inset="2" id="66v-2g-DHn">
|
<buttonCell key="cell" type="check" title="Add Closed Captions when available" bezelStyle="regularSquare" imagePosition="left" controlSize="small" state="on" inset="2" id="66v-2g-DHn">
|
||||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||||
<font key="font" metaFont="smallSystem"/>
|
<font key="font" metaFont="smallSystem"/>
|
||||||
@ -83,7 +83,7 @@ All Matching Selected Languages adds all audio tracks matching each of the selec
|
|||||||
</connections>
|
</connections>
|
||||||
</button>
|
</button>
|
||||||
<button toolTip="Foreign Audio Search scans the source for short sequences of foreign or alien audio that are displayed by default." verticalHuggingPriority="751" translatesAutoresizingMaskIntoConstraints="NO" id="OOC-GZ-OFA">
|
<button toolTip="Foreign Audio Search scans the source for short sequences of foreign or alien audio that are displayed by default." verticalHuggingPriority="751" translatesAutoresizingMaskIntoConstraints="NO" id="OOC-GZ-OFA">
|
||||||
<rect key="frame" x="161" y="164" width="246" height="16"/>
|
<rect key="frame" x="161" y="190" width="246" height="16"/>
|
||||||
<buttonCell key="cell" type="check" title="Add Foreign Audio Search" bezelStyle="regularSquare" imagePosition="left" controlSize="small" state="on" inset="2" id="vNY-OC-hTJ">
|
<buttonCell key="cell" type="check" title="Add Foreign Audio Search" bezelStyle="regularSquare" imagePosition="left" controlSize="small" state="on" inset="2" id="vNY-OC-hTJ">
|
||||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||||
<font key="font" metaFont="smallSystem"/>
|
<font key="font" metaFont="smallSystem"/>
|
||||||
@ -93,13 +93,13 @@ All Matching Selected Languages adds all audio tracks matching each of the selec
|
|||||||
</connections>
|
</connections>
|
||||||
</button>
|
</button>
|
||||||
<scrollView toolTip="Select the languages to use with the Track Selection Behavior setting." wantsLayer="YES" autohidesScrollers="YES" horizontalLineScroll="16" horizontalPageScroll="10" verticalLineScroll="16" verticalPageScroll="10" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="aTC-39-h6S">
|
<scrollView toolTip="Select the languages to use with the Track Selection Behavior setting." wantsLayer="YES" autohidesScrollers="YES" horizontalLineScroll="16" horizontalPageScroll="10" verticalLineScroll="16" verticalPageScroll="10" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="aTC-39-h6S">
|
||||||
<rect key="frame" x="162" y="219" width="245" height="140"/>
|
<rect key="frame" x="162" y="245" width="245" height="147"/>
|
||||||
<clipView key="contentView" id="TdE-Sh-NcS">
|
<clipView key="contentView" id="TdE-Sh-NcS">
|
||||||
<rect key="frame" x="1" y="1" width="243" height="138"/>
|
<rect key="frame" x="1" y="1" width="243" height="145"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<tableView verticalHuggingPriority="750" allowsExpansionToolTips="YES" columnAutoresizingStyle="lastColumnOnly" tableStyle="plain" columnReordering="NO" columnResizing="NO" autosaveColumns="NO" rowHeight="14" viewBased="YES" id="Of7-71-Ci6">
|
<tableView verticalHuggingPriority="750" allowsExpansionToolTips="YES" columnAutoresizingStyle="lastColumnOnly" tableStyle="plain" columnReordering="NO" columnResizing="NO" autosaveColumns="NO" rowHeight="14" viewBased="YES" id="Of7-71-Ci6">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="243" height="138"/>
|
<rect key="frame" x="0.0" y="0.0" width="243" height="145"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<size key="intercellSpacing" width="3" height="2"/>
|
<size key="intercellSpacing" width="3" height="2"/>
|
||||||
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
|
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||||
@ -181,7 +181,7 @@ All Matching Selected Languages adds all audio tracks matching each of the selec
|
|||||||
<accessibility description="Subtitles Track Languages"/>
|
<accessibility description="Subtitles Track Languages"/>
|
||||||
</scrollView>
|
</scrollView>
|
||||||
<popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Lsa-kB-2BP">
|
<popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Lsa-kB-2BP">
|
||||||
<rect key="frame" x="158" y="130" width="253" height="22"/>
|
<rect key="frame" x="158" y="156" width="253" height="22"/>
|
||||||
<string key="toolTip">Burn-In Behavior. Select which subtitles to make permanent by overlaying them onto the video track.
|
<string key="toolTip">Burn-In Behavior. Select which subtitles to make permanent by overlaying them onto the video track.
|
||||||
|
|
||||||
Only one subtitles track can be burned in.</string>
|
Only one subtitles track can be burned in.</string>
|
||||||
@ -203,7 +203,7 @@ Only one subtitles track can be burned in.</string>
|
|||||||
</connections>
|
</connections>
|
||||||
</popUpButton>
|
</popUpButton>
|
||||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="YES" preferredMaxLayoutWidth="300" translatesAutoresizingMaskIntoConstraints="NO" id="qAf-lQ-GN4">
|
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="YES" preferredMaxLayoutWidth="300" translatesAutoresizingMaskIntoConstraints="NO" id="qAf-lQ-GN4">
|
||||||
<rect key="frame" x="18" y="135" width="138" height="14"/>
|
<rect key="frame" x="18" y="161" width="138" height="14"/>
|
||||||
<textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Burn-In Behavior:" id="640-NB-Uby">
|
<textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Burn-In Behavior:" id="640-NB-Uby">
|
||||||
<font key="font" metaFont="smallSystem"/>
|
<font key="font" metaFont="smallSystem"/>
|
||||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
@ -211,7 +211,7 @@ Only one subtitles track can be burned in.</string>
|
|||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
</textField>
|
</textField>
|
||||||
<button verticalHuggingPriority="752" translatesAutoresizingMaskIntoConstraints="NO" id="ceZ-On-t5S">
|
<button verticalHuggingPriority="752" translatesAutoresizingMaskIntoConstraints="NO" id="ceZ-On-t5S">
|
||||||
<rect key="frame" x="161" y="111" width="246" height="16"/>
|
<rect key="frame" x="161" y="137" width="246" height="16"/>
|
||||||
<string key="toolTip">Burn in the first selected DVD subtitle track. All other DVD subtitle tracks will be discarded. Use this option if your playback software or device does not support DVD subtitles.
|
<string key="toolTip">Burn in the first selected DVD subtitle track. All other DVD subtitle tracks will be discarded. Use this option if your playback software or device does not support DVD subtitles.
|
||||||
|
|
||||||
Only one subtitles track can be burned in.</string>
|
Only one subtitles track can be burned in.</string>
|
||||||
@ -224,7 +224,7 @@ Only one subtitles track can be burned in.</string>
|
|||||||
</connections>
|
</connections>
|
||||||
</button>
|
</button>
|
||||||
<button verticalHuggingPriority="752" translatesAutoresizingMaskIntoConstraints="NO" id="Px8-G6-NVX">
|
<button verticalHuggingPriority="752" translatesAutoresizingMaskIntoConstraints="NO" id="Px8-G6-NVX">
|
||||||
<rect key="frame" x="161" y="91" width="246" height="16"/>
|
<rect key="frame" x="161" y="117" width="246" height="16"/>
|
||||||
<string key="toolTip">Burn in the first selected Blu-ray subtitle track. All other Blu-ray subtitle tracks will be discarded. Use this option if your playback software or device does not support Blu-ray subtitles.
|
<string key="toolTip">Burn in the first selected Blu-ray subtitle track. All other Blu-ray subtitle tracks will be discarded. Use this option if your playback software or device does not support Blu-ray subtitles.
|
||||||
|
|
||||||
Only one subtitles track can be burned in.</string>
|
Only one subtitles track can be burned in.</string>
|
||||||
@ -237,7 +237,7 @@ Only one subtitles track can be burned in.</string>
|
|||||||
</connections>
|
</connections>
|
||||||
</button>
|
</button>
|
||||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" allowsCharacterPickerTouchBarItem="YES" preferredMaxLayoutWidth="300" translatesAutoresizingMaskIntoConstraints="NO" id="MlS-tB-pEv">
|
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" allowsCharacterPickerTouchBarItem="YES" preferredMaxLayoutWidth="300" translatesAutoresizingMaskIntoConstraints="NO" id="MlS-tB-pEv">
|
||||||
<rect key="frame" x="160" y="56" width="249" height="28"/>
|
<rect key="frame" x="160" y="82" width="249" height="28"/>
|
||||||
<textFieldCell key="cell" controlSize="small" sendsActionOnEndEditing="YES" title="Only one subtitles burn-in option will be applied, starting with the first (top)." id="N4s-K9-RwM">
|
<textFieldCell key="cell" controlSize="small" sendsActionOnEndEditing="YES" title="Only one subtitles burn-in option will be applied, starting with the first (top)." id="N4s-K9-RwM">
|
||||||
<font key="font" metaFont="smallSystem"/>
|
<font key="font" metaFont="smallSystem"/>
|
||||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||||
@ -280,6 +280,24 @@ Gw
|
|||||||
<action selector="openUserGuide:" target="-2" id="xuY-gI-DkB"/>
|
<action selector="openUserGuide:" target="-2" id="xuY-gI-DkB"/>
|
||||||
</connections>
|
</connections>
|
||||||
</button>
|
</button>
|
||||||
|
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="3vE-dK-KLk">
|
||||||
|
<rect key="frame" x="161" y="51" width="129" height="16"/>
|
||||||
|
<buttonCell key="cell" type="check" title="Passthru track name" bezelStyle="regularSquare" imagePosition="left" controlSize="small" state="on" inset="2" id="KXY-tz-asI">
|
||||||
|
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||||
|
<font key="font" metaFont="smallSystem"/>
|
||||||
|
</buttonCell>
|
||||||
|
<connections>
|
||||||
|
<binding destination="-2" name="value" keyPath="self.settings.passthruName" id="SKv-zB-Qs7"/>
|
||||||
|
</connections>
|
||||||
|
</button>
|
||||||
|
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="cG8-2W-cdJ">
|
||||||
|
<rect key="frame" x="18" y="52" width="138" height="14"/>
|
||||||
|
<textFieldCell key="cell" controlSize="small" lineBreakMode="clipping" alignment="right" title="Name:" id="Nks-nt-ePt">
|
||||||
|
<font key="font" metaFont="smallSystem"/>
|
||||||
|
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
</textFieldCell>
|
||||||
|
</textField>
|
||||||
</subviews>
|
</subviews>
|
||||||
<constraints>
|
<constraints>
|
||||||
<constraint firstAttribute="trailing" secondItem="ceZ-On-t5S" secondAttribute="trailing" constant="20" id="1s9-9K-9py"/>
|
<constraint firstAttribute="trailing" secondItem="ceZ-On-t5S" secondAttribute="trailing" constant="20" id="1s9-9K-9py"/>
|
||||||
@ -290,6 +308,8 @@ Gw
|
|||||||
<constraint firstAttribute="bottom" secondItem="nfu-VW-cTe" secondAttribute="bottom" constant="18" id="D3B-WT-db0"/>
|
<constraint firstAttribute="bottom" secondItem="nfu-VW-cTe" secondAttribute="bottom" constant="18" id="D3B-WT-db0"/>
|
||||||
<constraint firstAttribute="trailing" secondItem="oiD-QI-wly" secondAttribute="trailing" constant="20" id="DCH-xM-c7M"/>
|
<constraint firstAttribute="trailing" secondItem="oiD-QI-wly" secondAttribute="trailing" constant="20" id="DCH-xM-c7M"/>
|
||||||
<constraint firstItem="MlS-tB-pEv" firstAttribute="top" secondItem="Px8-G6-NVX" secondAttribute="bottom" constant="8" id="DuC-dI-6lg"/>
|
<constraint firstItem="MlS-tB-pEv" firstAttribute="top" secondItem="Px8-G6-NVX" secondAttribute="bottom" constant="8" id="DuC-dI-6lg"/>
|
||||||
|
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="3vE-dK-KLk" secondAttribute="trailing" constant="20" symbolic="YES" id="Fw1-iS-A7M"/>
|
||||||
|
<constraint firstItem="3vE-dK-KLk" firstAttribute="firstBaseline" secondItem="cG8-2W-cdJ" secondAttribute="firstBaseline" id="JNR-Jt-OcH"/>
|
||||||
<constraint firstItem="Lsa-kB-2BP" firstAttribute="top" secondItem="OOC-GZ-OFA" secondAttribute="bottom" constant="15" id="Jom-Wb-udi"/>
|
<constraint firstItem="Lsa-kB-2BP" firstAttribute="top" secondItem="OOC-GZ-OFA" secondAttribute="bottom" constant="15" id="Jom-Wb-udi"/>
|
||||||
<constraint firstItem="qAf-lQ-GN4" firstAttribute="baseline" secondItem="Lsa-kB-2BP" secondAttribute="baseline" id="LsD-LD-mET"/>
|
<constraint firstItem="qAf-lQ-GN4" firstAttribute="baseline" secondItem="Lsa-kB-2BP" secondAttribute="baseline" id="LsD-LD-mET"/>
|
||||||
<constraint firstItem="OOC-GZ-OFA" firstAttribute="top" secondItem="uF5-6E-EIe" secondAttribute="bottom" constant="6" id="Niq-4w-rB0"/>
|
<constraint firstItem="OOC-GZ-OFA" firstAttribute="top" secondItem="uF5-6E-EIe" secondAttribute="bottom" constant="6" id="Niq-4w-rB0"/>
|
||||||
@ -302,21 +322,25 @@ Gw
|
|||||||
<constraint firstItem="AAX-DK-L3G" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="nfu-VW-cTe" secondAttribute="trailing" constant="12" symbolic="YES" id="U3Y-Zd-acm"/>
|
<constraint firstItem="AAX-DK-L3G" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="nfu-VW-cTe" secondAttribute="trailing" constant="12" symbolic="YES" id="U3Y-Zd-acm"/>
|
||||||
<constraint firstItem="QdJ-64-GgC" firstAttribute="width" secondItem="AAX-DK-L3G" secondAttribute="width" id="V7Q-Z0-mdN"/>
|
<constraint firstItem="QdJ-64-GgC" firstAttribute="width" secondItem="AAX-DK-L3G" secondAttribute="width" id="V7Q-Z0-mdN"/>
|
||||||
<constraint firstItem="Jsz-Er-bsF" firstAttribute="top" secondItem="aTC-39-h6S" secondAttribute="top" id="Vjm-7V-1cC"/>
|
<constraint firstItem="Jsz-Er-bsF" firstAttribute="top" secondItem="aTC-39-h6S" secondAttribute="top" id="Vjm-7V-1cC"/>
|
||||||
|
<constraint firstItem="QdJ-64-GgC" firstAttribute="top" secondItem="3vE-dK-KLk" secondAttribute="bottom" constant="16" id="WEY-dd-Wkc"/>
|
||||||
<constraint firstItem="OOC-GZ-OFA" firstAttribute="leading" secondItem="uF5-6E-EIe" secondAttribute="leading" id="WKZ-HH-AyA"/>
|
<constraint firstItem="OOC-GZ-OFA" firstAttribute="leading" secondItem="uF5-6E-EIe" secondAttribute="leading" id="WKZ-HH-AyA"/>
|
||||||
<constraint firstItem="fPg-3n-1TN" firstAttribute="baseline" secondItem="oiD-QI-wly" secondAttribute="baseline" id="XJA-tm-IJd"/>
|
<constraint firstItem="fPg-3n-1TN" firstAttribute="baseline" secondItem="oiD-QI-wly" secondAttribute="baseline" id="XJA-tm-IJd"/>
|
||||||
<constraint firstAttribute="bottom" secondItem="QdJ-64-GgC" secondAttribute="bottom" constant="20" id="XzF-Bn-tMl"/>
|
<constraint firstAttribute="bottom" secondItem="QdJ-64-GgC" secondAttribute="bottom" constant="20" id="XzF-Bn-tMl"/>
|
||||||
<constraint firstItem="Hqz-Lw-gAu" firstAttribute="baseline" secondItem="uF5-6E-EIe" secondAttribute="baseline" id="bmT-Td-cBg"/>
|
<constraint firstItem="Hqz-Lw-gAu" firstAttribute="baseline" secondItem="uF5-6E-EIe" secondAttribute="baseline" id="bmT-Td-cBg"/>
|
||||||
|
<constraint firstItem="qAf-lQ-GN4" firstAttribute="width" secondItem="cG8-2W-cdJ" secondAttribute="width" id="eGt-Fw-FBt"/>
|
||||||
|
<constraint firstItem="cG8-2W-cdJ" firstAttribute="leading" secondItem="qAf-lQ-GN4" secondAttribute="leading" id="esk-Pa-eI1"/>
|
||||||
<constraint firstItem="ceZ-On-t5S" firstAttribute="top" secondItem="Lsa-kB-2BP" secondAttribute="bottom" constant="8" id="fZD-U2-nWu"/>
|
<constraint firstItem="ceZ-On-t5S" firstAttribute="top" secondItem="Lsa-kB-2BP" secondAttribute="bottom" constant="8" id="fZD-U2-nWu"/>
|
||||||
<constraint firstItem="Lsa-kB-2BP" firstAttribute="leading" secondItem="qAf-lQ-GN4" secondAttribute="trailing" constant="8" id="fl7-9l-tFW"/>
|
<constraint firstItem="Lsa-kB-2BP" firstAttribute="leading" secondItem="qAf-lQ-GN4" secondAttribute="trailing" constant="8" id="fl7-9l-tFW"/>
|
||||||
<constraint firstItem="aTC-39-h6S" firstAttribute="trailing" secondItem="oiD-QI-wly" secondAttribute="trailing" id="hq2-2Y-G4l"/>
|
<constraint firstItem="aTC-39-h6S" firstAttribute="trailing" secondItem="oiD-QI-wly" secondAttribute="trailing" id="hq2-2Y-G4l"/>
|
||||||
<constraint firstAttribute="trailing" secondItem="OOC-GZ-OFA" secondAttribute="trailing" constant="20" id="htF-X4-lpu"/>
|
<constraint firstAttribute="trailing" secondItem="OOC-GZ-OFA" secondAttribute="trailing" constant="20" id="htF-X4-lpu"/>
|
||||||
<constraint firstItem="Px8-G6-NVX" firstAttribute="top" secondItem="ceZ-On-t5S" secondAttribute="bottom" constant="6" id="iWq-sE-ajq"/>
|
<constraint firstItem="Px8-G6-NVX" firstAttribute="top" secondItem="ceZ-On-t5S" secondAttribute="bottom" constant="6" id="iWq-sE-ajq"/>
|
||||||
<constraint firstItem="QdJ-64-GgC" firstAttribute="top" secondItem="MlS-tB-pEv" secondAttribute="bottom" constant="20" id="iyr-A8-UM6"/>
|
|
||||||
<constraint firstItem="ceZ-On-t5S" firstAttribute="leading" secondItem="Lsa-kB-2BP" secondAttribute="leading" id="koA-TF-GxL"/>
|
<constraint firstItem="ceZ-On-t5S" firstAttribute="leading" secondItem="Lsa-kB-2BP" secondAttribute="leading" id="koA-TF-GxL"/>
|
||||||
<constraint firstAttribute="trailing" secondItem="uF5-6E-EIe" secondAttribute="trailing" constant="20" id="l0V-di-L2v"/>
|
<constraint firstAttribute="trailing" secondItem="uF5-6E-EIe" secondAttribute="trailing" constant="20" id="l0V-di-L2v"/>
|
||||||
|
<constraint firstItem="3vE-dK-KLk" firstAttribute="top" secondItem="MlS-tB-pEv" secondAttribute="bottom" constant="16" id="md4-pt-JHF"/>
|
||||||
<constraint firstItem="uF5-6E-EIe" firstAttribute="top" secondItem="aTC-39-h6S" secondAttribute="bottom" constant="20" id="nhU-5A-Rap"/>
|
<constraint firstItem="uF5-6E-EIe" firstAttribute="top" secondItem="aTC-39-h6S" secondAttribute="bottom" constant="20" id="nhU-5A-Rap"/>
|
||||||
<constraint firstItem="qAf-lQ-GN4" firstAttribute="leading" secondItem="fPg-3n-1TN" secondAttribute="leading" id="o90-wY-3FL"/>
|
<constraint firstItem="qAf-lQ-GN4" firstAttribute="leading" secondItem="fPg-3n-1TN" secondAttribute="leading" id="o90-wY-3FL"/>
|
||||||
<constraint firstItem="Hqz-Lw-gAu" firstAttribute="leading" secondItem="fPg-3n-1TN" secondAttribute="leading" id="p6B-ac-s9o"/>
|
<constraint firstItem="Hqz-Lw-gAu" firstAttribute="leading" secondItem="fPg-3n-1TN" secondAttribute="leading" id="p6B-ac-s9o"/>
|
||||||
|
<constraint firstItem="3vE-dK-KLk" firstAttribute="leading" secondItem="cG8-2W-cdJ" secondAttribute="trailing" constant="8" symbolic="YES" id="qUo-3Y-s7Q"/>
|
||||||
<constraint firstItem="aTC-39-h6S" firstAttribute="leading" secondItem="Jsz-Er-bsF" secondAttribute="trailing" constant="8" id="rLi-Pt-pSb"/>
|
<constraint firstItem="aTC-39-h6S" firstAttribute="leading" secondItem="Jsz-Er-bsF" secondAttribute="trailing" constant="8" id="rLi-Pt-pSb"/>
|
||||||
<constraint firstItem="fPg-3n-1TN" firstAttribute="leading" secondItem="ZP2-Cp-K5w" secondAttribute="leading" constant="20" id="rjw-eY-hZF"/>
|
<constraint firstItem="fPg-3n-1TN" firstAttribute="leading" secondItem="ZP2-Cp-K5w" secondAttribute="leading" constant="20" id="rjw-eY-hZF"/>
|
||||||
<constraint firstItem="MlS-tB-pEv" firstAttribute="leading" secondItem="Px8-G6-NVX" secondAttribute="leading" id="sKB-2V-Vpl"/>
|
<constraint firstItem="MlS-tB-pEv" firstAttribute="leading" secondItem="Px8-G6-NVX" secondAttribute="leading" id="sKB-2V-Vpl"/>
|
||||||
@ -329,7 +353,7 @@ Gw
|
|||||||
<constraint firstItem="qAf-lQ-GN4" firstAttribute="width" secondItem="fPg-3n-1TN" secondAttribute="width" id="zyM-7a-twX"/>
|
<constraint firstItem="qAf-lQ-GN4" firstAttribute="width" secondItem="fPg-3n-1TN" secondAttribute="width" id="zyM-7a-twX"/>
|
||||||
</constraints>
|
</constraints>
|
||||||
</view>
|
</view>
|
||||||
<point key="canvasLocation" x="74.5" y="97.5"/>
|
<point key="canvasLocation" x="0.5" y="98.5"/>
|
||||||
</window>
|
</window>
|
||||||
<arrayController objectClassName="HBLang" id="ZBe-aP-wvq" userLabel="Table Controller" customClass="HBLanguageArrayController">
|
<arrayController objectClassName="HBLang" id="ZBe-aP-wvq" userLabel="Table Controller" customClass="HBLanguageArrayController">
|
||||||
<declaredKeys>
|
<declaredKeys>
|
||||||
|
@ -54,6 +54,18 @@ NSString *HBAudioEncoderChangedNotification = @"HBAudioEncoderChangedNotificatio
|
|||||||
|
|
||||||
#pragma mark - Data Source
|
#pragma mark - Data Source
|
||||||
|
|
||||||
|
- (nullable NSString *)defaultTitleForTrackAtIndex:(NSUInteger)idx mixdown:(int)mixdown
|
||||||
|
{
|
||||||
|
HBTitleAudioTrack *track = [self sourceTrackAtIndex:idx];
|
||||||
|
|
||||||
|
const char *title = hb_audio_name_generate(track.title.UTF8String,
|
||||||
|
track.channelLayout, mixdown,
|
||||||
|
self.defaults.passthruName,
|
||||||
|
(hb_audio_autonaming_behavior_t)self.defaults.automaticNamingBehavior);
|
||||||
|
|
||||||
|
return title ? @(title) : nil;
|
||||||
|
}
|
||||||
|
|
||||||
- (HBTitleAudioTrack *)sourceTrackAtIndex:(NSUInteger)idx
|
- (HBTitleAudioTrack *)sourceTrackAtIndex:(NSUInteger)idx
|
||||||
{
|
{
|
||||||
return self.sourceTracks[idx];
|
return self.sourceTracks[idx];
|
||||||
@ -182,6 +194,7 @@ NSString *HBAudioEncoderChangedNotification = @"HBAudioEncoderChangedNotificatio
|
|||||||
{
|
{
|
||||||
HBAudioTrack *track = [[HBAudioTrack alloc] initWithTrackIdx:trackIndex container:self.container dataSource:self delegate:self];
|
HBAudioTrack *track = [[HBAudioTrack alloc] initWithTrackIdx:trackIndex container:self.container dataSource:self delegate:self];
|
||||||
track.undo = self.undo;
|
track.undo = self.undo;
|
||||||
|
|
||||||
return track;
|
return track;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -223,6 +236,7 @@ NSString *HBAudioEncoderChangedNotification = @"HBAudioEncoderChangedNotificatio
|
|||||||
track.sampleRate = [trackDict[@"Samplerate"] intValue] == -1 ? 0 : [trackDict[@"Samplerate"] intValue];
|
track.sampleRate = [trackDict[@"Samplerate"] intValue] == -1 ? 0 : [trackDict[@"Samplerate"] intValue];
|
||||||
track.bitRate = [trackDict[@"Bitrate"] intValue];
|
track.bitRate = [trackDict[@"Bitrate"] intValue];
|
||||||
track.encoder = hb_audio_encoder_get_from_name([trackDict[@"Encoder"] UTF8String]);
|
track.encoder = hb_audio_encoder_get_from_name([trackDict[@"Encoder"] UTF8String]);
|
||||||
|
track.title = [trackDict[@"Name"] stringValue];
|
||||||
|
|
||||||
[tracks addObject:track];
|
[tracks addObject:track];
|
||||||
}
|
}
|
||||||
|
@ -17,6 +17,12 @@ typedef NS_ENUM(NSUInteger, HBAudioTrackSelectionBehavior) {
|
|||||||
HBAudioTrackSelectionBehaviorAll,
|
HBAudioTrackSelectionBehaviorAll,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
typedef NS_ENUM(NSUInteger, HBAudioTrackAutomaticNamingBehavior) {
|
||||||
|
HBAudioTrackAutomaticNamingBehaviorNone,
|
||||||
|
HBAudioTrackAutomaticNamingBehaviorUnnamed,
|
||||||
|
HBAudioTrackAutomaticNamingBehaviorAll,
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* HBAudioSettings
|
* HBAudioSettings
|
||||||
* Stores the audio defaults (selection behavior) settings.
|
* Stores the audio defaults (selection behavior) settings.
|
||||||
@ -50,6 +56,9 @@ typedef NS_ENUM(NSUInteger, HBAudioTrackSelectionBehavior) {
|
|||||||
|
|
||||||
@property(nonatomic, readonly) NSArray<NSString *> *audioEncoderFallbacks;
|
@property(nonatomic, readonly) NSArray<NSString *> *audioEncoderFallbacks;
|
||||||
|
|
||||||
|
@property(nonatomic, readwrite) BOOL passthruName;
|
||||||
|
@property(nonatomic, readwrite) HBAudioTrackAutomaticNamingBehavior automaticNamingBehavior;
|
||||||
|
|
||||||
- (void)validateEncoderFallbackForVideoContainer:(int)container;
|
- (void)validateEncoderFallbackForVideoContainer:(int)container;
|
||||||
|
|
||||||
@property (nonatomic, readwrite, weak, nullable) NSUndoManager *undo;
|
@property (nonatomic, readwrite, weak, nullable) NSUndoManager *undo;
|
||||||
|
@ -23,12 +23,15 @@
|
|||||||
- (instancetype)init
|
- (instancetype)init
|
||||||
{
|
{
|
||||||
self = [super init];
|
self = [super init];
|
||||||
if (self) {
|
if (self)
|
||||||
|
{
|
||||||
_encoderFallback = HB_ACODEC_AC3;
|
_encoderFallback = HB_ACODEC_AC3;
|
||||||
_trackSelectionLanguages = [[NSMutableArray alloc] init];
|
_trackSelectionLanguages = [[NSMutableArray alloc] init];
|
||||||
_tracksArray = [[NSMutableArray alloc] init];
|
_tracksArray = [[NSMutableArray alloc] init];
|
||||||
_trackSelectionBehavior = HBAudioTrackSelectionBehaviorFirst;
|
_trackSelectionBehavior = HBAudioTrackSelectionBehaviorFirst;
|
||||||
_container = HB_MUX_MKV;
|
_container = HB_MUX_MKV;
|
||||||
|
_passthruName = NO;
|
||||||
|
_automaticNamingBehavior = HBAudioTrackAutomaticNamingBehaviorNone;
|
||||||
}
|
}
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
@ -208,6 +211,24 @@
|
|||||||
return fallbacks;
|
return fallbacks;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (void)setPassthruName:(BOOL)passthruName
|
||||||
|
{
|
||||||
|
if (passthruName != _passthruName)
|
||||||
|
{
|
||||||
|
[[self.undo prepareWithInvocationTarget:self] setPassthruName:_passthruName];
|
||||||
|
}
|
||||||
|
_passthruName = passthruName;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)setautomaticNamingBehavior:(HBAudioTrackAutomaticNamingBehavior)automaticNamingBehavior
|
||||||
|
{
|
||||||
|
if (automaticNamingBehavior != _automaticNamingBehavior)
|
||||||
|
{
|
||||||
|
[[self.undo prepareWithInvocationTarget:self] setautomaticNamingBehavior:_automaticNamingBehavior];
|
||||||
|
}
|
||||||
|
_automaticNamingBehavior = automaticNamingBehavior;
|
||||||
|
}
|
||||||
|
|
||||||
#pragma mark - HBPresetCoding
|
#pragma mark - HBPresetCoding
|
||||||
|
|
||||||
- (BOOL)applyPreset:(HBPreset *)preset error:(NSError * __autoreleasing *)outError
|
- (BOOL)applyPreset:(HBPreset *)preset error:(NSError * __autoreleasing *)outError
|
||||||
@ -303,6 +324,25 @@
|
|||||||
self.encoderFallback = hb_audio_encoder_get_from_name([preset[@"AudioEncoderFallback"] UTF8String]);
|
self.encoderFallback = hb_audio_encoder_get_from_name([preset[@"AudioEncoderFallback"] UTF8String]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
self.passthruName = [preset[@"AudioTrackNamePassthru"] boolValue];
|
||||||
|
|
||||||
|
NSString *automaticNamingBehavior = [preset[@"AudioAutomaticNamingBehavior"] stringValue];
|
||||||
|
if ([automaticNamingBehavior isKindOfClass:[NSString class]])
|
||||||
|
{
|
||||||
|
if ([automaticNamingBehavior isEqualToString:@"none"])
|
||||||
|
{
|
||||||
|
self.automaticNamingBehavior = HBAudioTrackAutomaticNamingBehaviorNone;
|
||||||
|
}
|
||||||
|
else if ([automaticNamingBehavior isEqualToString:@"unnamed"])
|
||||||
|
{
|
||||||
|
self.automaticNamingBehavior = HBAudioTrackAutomaticNamingBehaviorUnnamed;
|
||||||
|
}
|
||||||
|
else if ([automaticNamingBehavior isEqualToString:@"all"])
|
||||||
|
{
|
||||||
|
self.automaticNamingBehavior = HBAudioTrackAutomaticNamingBehaviorAll;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
while ([self countOfTracksArray])
|
while ([self countOfTracksArray])
|
||||||
{
|
{
|
||||||
[self removeObjectFromTracksArrayAtIndex:0];
|
[self removeObjectFromTracksArrayAtIndex:0];
|
||||||
@ -419,6 +459,22 @@
|
|||||||
|
|
||||||
preset[@"AudioSecondaryEncoderMode"] = @(self.secondaryEncoderMode);
|
preset[@"AudioSecondaryEncoderMode"] = @(self.secondaryEncoderMode);
|
||||||
|
|
||||||
|
preset[@"AudioTrackNamePassthru"] = @(self.passthruName);
|
||||||
|
|
||||||
|
switch (self.automaticNamingBehavior)
|
||||||
|
{
|
||||||
|
case HBAudioTrackAutomaticNamingBehaviorNone:
|
||||||
|
preset[@"AudioAutomaticNamingBehavior"] = @"none";
|
||||||
|
break;
|
||||||
|
case HBAudioTrackAutomaticNamingBehaviorUnnamed:
|
||||||
|
preset[@"AudioAutomaticNamingBehavior"] = @"unnamed";
|
||||||
|
break;
|
||||||
|
case HBAudioTrackAutomaticNamingBehaviorAll:
|
||||||
|
default:
|
||||||
|
preset[@"AudioAutomaticNamingBehavior"] = @"all";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
NSMutableArray<NSDictionary *> *audioList = [[NSMutableArray alloc] init];
|
NSMutableArray<NSDictionary *> *audioList = [[NSMutableArray alloc] init];
|
||||||
|
|
||||||
for (HBAudioTrackPreset *track in self.tracksArray)
|
for (HBAudioTrackPreset *track in self.tracksArray)
|
||||||
@ -504,6 +560,9 @@
|
|||||||
copy->_encoderFallback = _encoderFallback;
|
copy->_encoderFallback = _encoderFallback;
|
||||||
copy->_container = _container;
|
copy->_container = _container;
|
||||||
copy->_secondaryEncoderMode = _secondaryEncoderMode;
|
copy->_secondaryEncoderMode = _secondaryEncoderMode;
|
||||||
|
|
||||||
|
copy->_passthruName = _passthruName;
|
||||||
|
copy->_automaticNamingBehavior = _automaticNamingBehavior;
|
||||||
}
|
}
|
||||||
|
|
||||||
return copy;
|
return copy;
|
||||||
@ -539,6 +598,9 @@
|
|||||||
encodeInt(_encoderFallback);
|
encodeInt(_encoderFallback);
|
||||||
encodeInt(_container);
|
encodeInt(_container);
|
||||||
encodeBool(_secondaryEncoderMode);
|
encodeBool(_secondaryEncoderMode);
|
||||||
|
|
||||||
|
encodeBool(_passthruName);
|
||||||
|
encodeInteger(_automaticNamingBehavior);
|
||||||
}
|
}
|
||||||
|
|
||||||
- (instancetype)initWithCoder:(NSCoder *)decoder
|
- (instancetype)initWithCoder:(NSCoder *)decoder
|
||||||
@ -569,6 +631,14 @@
|
|||||||
decodeInt(_container); if (_container != HB_MUX_MP4 && _container != HB_MUX_MKV && _container != HB_MUX_WEBM) { goto fail; }
|
decodeInt(_container); if (_container != HB_MUX_MP4 && _container != HB_MUX_MKV && _container != HB_MUX_WEBM) { goto fail; }
|
||||||
decodeBool(_secondaryEncoderMode);
|
decodeBool(_secondaryEncoderMode);
|
||||||
|
|
||||||
|
decodeBool(_passthruName);
|
||||||
|
decodeInt(_automaticNamingBehavior);
|
||||||
|
if (_automaticNamingBehavior < HBAudioTrackAutomaticNamingBehaviorNone || _automaticNamingBehavior > HBAudioTrackAutomaticNamingBehaviorAll)
|
||||||
|
{
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
return self;
|
return self;
|
||||||
|
|
||||||
fail:
|
fail:
|
||||||
|
@ -14,6 +14,7 @@ NS_ASSUME_NONNULL_BEGIN
|
|||||||
@protocol HBAudioTrackDataSource <NSObject>
|
@protocol HBAudioTrackDataSource <NSObject>
|
||||||
- (HBTitleAudioTrack *)sourceTrackAtIndex:(NSUInteger)idx;
|
- (HBTitleAudioTrack *)sourceTrackAtIndex:(NSUInteger)idx;
|
||||||
- (NSArray<NSString *> *)sourceTracksArray;
|
- (NSArray<NSString *> *)sourceTracksArray;
|
||||||
|
- (nullable NSString *)defaultTitleForTrackAtIndex:(NSUInteger)idx mixdown:(int)mixdown;
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@protocol HBAudioTrackDelegate <NSObject>
|
@protocol HBAudioTrackDelegate <NSObject>
|
||||||
|
@ -43,7 +43,6 @@
|
|||||||
_dataSource = dataSource;
|
_dataSource = dataSource;
|
||||||
_sourceTrackIdx = index;
|
_sourceTrackIdx = index;
|
||||||
_container = container;
|
_container = container;
|
||||||
self.title = [dataSource sourceTrackAtIndex:_sourceTrackIdx].title;
|
|
||||||
|
|
||||||
[self validateSettings];
|
[self validateSettings];
|
||||||
|
|
||||||
@ -90,10 +89,11 @@
|
|||||||
|
|
||||||
if (!(self.undo.isUndoing || self.undo.isRedoing))
|
if (!(self.undo.isUndoing || self.undo.isRedoing))
|
||||||
{
|
{
|
||||||
self.title = [self.dataSource sourceTrackAtIndex:_sourceTrackIdx].title;
|
|
||||||
|
|
||||||
[self validateSettings];
|
[self validateSettings];
|
||||||
|
|
||||||
|
self.title = [self.dataSource defaultTitleForTrackAtIndex:_sourceTrackIdx
|
||||||
|
mixdown:_mixdown];
|
||||||
|
|
||||||
if (oldIdx != sourceTrackIdx)
|
if (oldIdx != sourceTrackIdx)
|
||||||
{
|
{
|
||||||
[self.delegate track:self didChangeSourceFrom:oldIdx];
|
[self.delegate track:self didChangeSourceFrom:oldIdx];
|
||||||
@ -149,6 +149,15 @@
|
|||||||
{
|
{
|
||||||
self.validating = YES;
|
self.validating = YES;
|
||||||
self.bitRate = [self sanitizeBitrateValue:self.bitRate];
|
self.bitRate = [self sanitizeBitrateValue:self.bitRate];
|
||||||
|
|
||||||
|
if ([self.title isEqualToString:@"Mono"] ||
|
||||||
|
[self.title isEqualToString:@"Stereo"] ||
|
||||||
|
[self.title isEqualToString:@"Surround"])
|
||||||
|
{
|
||||||
|
self.title = [self.dataSource defaultTitleForTrackAtIndex:_sourceTrackIdx
|
||||||
|
mixdown:_mixdown];
|
||||||
|
}
|
||||||
|
|
||||||
self.validating = NO;
|
self.validating = NO;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -219,13 +228,6 @@
|
|||||||
|
|
||||||
- (void)setTitle:(NSString *)title
|
- (void)setTitle:(NSString *)title
|
||||||
{
|
{
|
||||||
if ([title isEqualToString:@"Mono"] ||
|
|
||||||
[title isEqualToString:@"Stereo"] ||
|
|
||||||
[title isEqualToString:@"Surround"])
|
|
||||||
{
|
|
||||||
title = nil;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (title != _title)
|
if (title != _title)
|
||||||
{
|
{
|
||||||
[[self.undo prepareWithInvocationTarget:self] setTitle:_title];
|
[[self.undo prepareWithInvocationTarget:self] setTitle:_title];
|
||||||
|
@ -22,7 +22,7 @@
|
|||||||
#define NONE_TRACK_INDEX 0
|
#define NONE_TRACK_INDEX 0
|
||||||
#define FOREIGN_TRACK_INDEX 1
|
#define FOREIGN_TRACK_INDEX 1
|
||||||
|
|
||||||
@interface HBSubtitles () <HBTrackDataSource, HBTrackDelegate>
|
@interface HBSubtitles () <HBSubtitlesTrackDataSource, HBSubtitlesTrackDelegate>
|
||||||
|
|
||||||
@property (nonatomic, readwrite) NSArray<HBTitleSubtitlesTrack *> *sourceTracks;
|
@property (nonatomic, readwrite) NSArray<HBTitleSubtitlesTrack *> *sourceTracks;
|
||||||
|
|
||||||
@ -93,6 +93,19 @@
|
|||||||
return sourceNames;
|
return sourceNames;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (nullable NSString *)defaultTitleForTrackAtIndex:(NSUInteger)idx
|
||||||
|
{
|
||||||
|
NSString *title = nil;
|
||||||
|
HBTitleSubtitlesTrack *track = [self sourceTrackAtIndex:idx];
|
||||||
|
|
||||||
|
if (self.defaults.passthruName)
|
||||||
|
{
|
||||||
|
title = track.title;
|
||||||
|
}
|
||||||
|
|
||||||
|
return title;
|
||||||
|
}
|
||||||
|
|
||||||
#pragma mark - Delegate
|
#pragma mark - Delegate
|
||||||
|
|
||||||
- (void)track:(HBSubtitlesTrack *)track didChangeSourceFrom:(NSUInteger)oldSourceIdx
|
- (void)track:(HBSubtitlesTrack *)track didChangeSourceFrom:(NSUInteger)oldSourceIdx
|
||||||
@ -316,6 +329,7 @@
|
|||||||
{
|
{
|
||||||
track.burnedIn = [trackDict[@"Burn"] boolValue];
|
track.burnedIn = [trackDict[@"Burn"] boolValue];
|
||||||
track.forcedOnly = [trackDict[@"Forced"] boolValue];
|
track.forcedOnly = [trackDict[@"Forced"] boolValue];
|
||||||
|
track.title = [trackDict[@"Name"] stringValue];
|
||||||
|
|
||||||
[tracks addObject:track];
|
[tracks addObject:track];
|
||||||
}
|
}
|
||||||
|
@ -35,6 +35,8 @@ typedef NS_ENUM(NSUInteger, HBSubtitleTrackBurnInBehavior) {
|
|||||||
@property (nonatomic, readwrite) BOOL burnInDVDSubtitles;
|
@property (nonatomic, readwrite) BOOL burnInDVDSubtitles;
|
||||||
@property (nonatomic, readwrite) BOOL burnInBluraySubtitles;
|
@property (nonatomic, readwrite) BOOL burnInBluraySubtitles;
|
||||||
|
|
||||||
|
@property (nonatomic, readwrite) BOOL passthruName;
|
||||||
|
|
||||||
@property (nonatomic, readwrite, weak, nullable) NSUndoManager *undo;
|
@property (nonatomic, readwrite, weak, nullable) NSUndoManager *undo;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
@ -16,6 +16,7 @@
|
|||||||
if (self)
|
if (self)
|
||||||
{
|
{
|
||||||
_trackSelectionLanguages = [[NSMutableArray alloc] init];
|
_trackSelectionLanguages = [[NSMutableArray alloc] init];
|
||||||
|
_passthruName = NO;
|
||||||
}
|
}
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
@ -85,6 +86,15 @@
|
|||||||
_burnInBluraySubtitles = burnInBluraySubtitles;
|
_burnInBluraySubtitles = burnInBluraySubtitles;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (void)setPassthruName:(BOOL)passthruName
|
||||||
|
{
|
||||||
|
if (passthruName != _passthruName)
|
||||||
|
{
|
||||||
|
[[self.undo prepareWithInvocationTarget:self] setPassthruName:_passthruName];
|
||||||
|
}
|
||||||
|
_passthruName = passthruName;
|
||||||
|
}
|
||||||
|
|
||||||
#pragma mark - HBPresetCoding
|
#pragma mark - HBPresetCoding
|
||||||
|
|
||||||
- (BOOL)applyPreset:(HBPreset *)preset error:(NSError * __autoreleasing *)outError
|
- (BOOL)applyPreset:(HBPreset *)preset error:(NSError * __autoreleasing *)outError
|
||||||
@ -128,6 +138,8 @@
|
|||||||
self.burnInDVDSubtitles = [preset[@"SubtitleBurnDVDSub"] boolValue];
|
self.burnInDVDSubtitles = [preset[@"SubtitleBurnDVDSub"] boolValue];
|
||||||
self.burnInBluraySubtitles = [preset[@"SubtitleBurnBDSub"] boolValue];
|
self.burnInBluraySubtitles = [preset[@"SubtitleBurnBDSub"] boolValue];
|
||||||
|
|
||||||
|
self.passthruName = [preset[@"SubtitleTrackNamePassthru"] boolValue];
|
||||||
|
|
||||||
return YES;
|
return YES;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -175,6 +187,9 @@
|
|||||||
|
|
||||||
preset[@"SubtitleBurnDVDSub"] = @(self.burnInDVDSubtitles);
|
preset[@"SubtitleBurnDVDSub"] = @(self.burnInDVDSubtitles);
|
||||||
preset[@"SubtitleBurnBDSub"] = @(self.burnInBluraySubtitles);
|
preset[@"SubtitleBurnBDSub"] = @(self.burnInBluraySubtitles);
|
||||||
|
|
||||||
|
preset[@"SubtitleTrackNamePassthru"] = @(self.passthruName);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma mark - NSCopying
|
#pragma mark - NSCopying
|
||||||
@ -195,6 +210,8 @@
|
|||||||
copy->_burnInBehavior = _burnInBehavior;
|
copy->_burnInBehavior = _burnInBehavior;
|
||||||
copy->_burnInDVDSubtitles = _burnInDVDSubtitles;
|
copy->_burnInDVDSubtitles = _burnInDVDSubtitles;
|
||||||
copy->_burnInBluraySubtitles = _burnInBluraySubtitles;
|
copy->_burnInBluraySubtitles = _burnInBluraySubtitles;
|
||||||
|
|
||||||
|
copy->_passthruName = _passthruName;
|
||||||
}
|
}
|
||||||
|
|
||||||
return copy;
|
return copy;
|
||||||
@ -221,6 +238,8 @@
|
|||||||
encodeInteger(_burnInBehavior);
|
encodeInteger(_burnInBehavior);
|
||||||
encodeBool(_burnInDVDSubtitles);
|
encodeBool(_burnInDVDSubtitles);
|
||||||
encodeBool(_burnInBluraySubtitles);
|
encodeBool(_burnInBluraySubtitles);
|
||||||
|
|
||||||
|
encodeBool(_passthruName);
|
||||||
}
|
}
|
||||||
|
|
||||||
- (instancetype)initWithCoder:(NSCoder *)decoder
|
- (instancetype)initWithCoder:(NSCoder *)decoder
|
||||||
@ -246,6 +265,8 @@
|
|||||||
decodeBool(_burnInDVDSubtitles);
|
decodeBool(_burnInDVDSubtitles);
|
||||||
decodeBool(_burnInBluraySubtitles);
|
decodeBool(_burnInBluraySubtitles);
|
||||||
|
|
||||||
|
decodeBool(_passthruName);
|
||||||
|
|
||||||
return self;
|
return self;
|
||||||
|
|
||||||
fail:
|
fail:
|
||||||
|
@ -14,15 +14,16 @@ NS_ASSUME_NONNULL_BEGIN
|
|||||||
/**
|
/**
|
||||||
* HBTrackDataSource
|
* HBTrackDataSource
|
||||||
*/
|
*/
|
||||||
@protocol HBTrackDataSource <NSObject>
|
@protocol HBSubtitlesTrackDataSource <NSObject>
|
||||||
- (HBTitleSubtitlesTrack *)sourceTrackAtIndex:(NSUInteger)idx;
|
- (HBTitleSubtitlesTrack *)sourceTrackAtIndex:(NSUInteger)idx;
|
||||||
- (NSArray<NSString *> *)sourceTracksArray;
|
- (NSArray<NSString *> *)sourceTracksArray;
|
||||||
|
- (nullable NSString *)defaultTitleForTrackAtIndex:(NSUInteger)idx;
|
||||||
@end
|
@end
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* HBTrackDelegate
|
* HBTrackDelegate
|
||||||
*/
|
*/
|
||||||
@protocol HBTrackDelegate <NSObject>
|
@protocol HBSubtitlesTrackDelegate <NSObject>
|
||||||
- (void)track:(HBSubtitlesTrack *)track didChangeSourceFrom:(NSUInteger)oldSourceIdx;
|
- (void)track:(HBSubtitlesTrack *)track didChangeSourceFrom:(NSUInteger)oldSourceIdx;
|
||||||
|
|
||||||
- (BOOL)canSetBurnedInOption:(HBSubtitlesTrack *)track;
|
- (BOOL)canSetBurnedInOption:(HBSubtitlesTrack *)track;
|
||||||
@ -35,8 +36,8 @@ NS_ASSUME_NONNULL_BEGIN
|
|||||||
|
|
||||||
- (instancetype)initWithTrackIdx:(NSUInteger)index
|
- (instancetype)initWithTrackIdx:(NSUInteger)index
|
||||||
container:(int)container
|
container:(int)container
|
||||||
dataSource:(id<HBTrackDataSource>)dataSource
|
dataSource:(id<HBSubtitlesTrackDataSource>)dataSource
|
||||||
delegate:(id<HBTrackDelegate>)delegate;
|
delegate:(id<HBSubtitlesTrackDelegate>)delegate;
|
||||||
|
|
||||||
/// The index of the source in the data source tracks array.
|
/// The index of the source in the data source tracks array.
|
||||||
@property (nonatomic, readwrite) NSUInteger sourceTrackIdx;
|
@property (nonatomic, readwrite) NSUInteger sourceTrackIdx;
|
||||||
@ -65,8 +66,8 @@ NS_ASSUME_NONNULL_BEGIN
|
|||||||
|
|
||||||
@property (nonatomic, readwrite, weak, nullable) NSUndoManager *undo;
|
@property (nonatomic, readwrite, weak, nullable) NSUndoManager *undo;
|
||||||
|
|
||||||
@property (nonatomic, readwrite, weak) id<HBTrackDataSource> dataSource;
|
@property (nonatomic, readwrite, weak) id<HBSubtitlesTrackDataSource> dataSource;
|
||||||
@property (nonatomic, readwrite, weak) id<HBTrackDelegate> delegate;
|
@property (nonatomic, readwrite, weak) id<HBSubtitlesTrackDelegate> delegate;
|
||||||
|
|
||||||
/// A complete list of the possible languages.
|
/// A complete list of the possible languages.
|
||||||
- (NSArray<NSString *> *)languages;
|
- (NSArray<NSString *> *)languages;
|
||||||
|
@ -46,8 +46,8 @@ static NSArray *_languagesArray = nil;
|
|||||||
|
|
||||||
- (instancetype)initWithTrackIdx:(NSUInteger)index
|
- (instancetype)initWithTrackIdx:(NSUInteger)index
|
||||||
container:(int)container
|
container:(int)container
|
||||||
dataSource:(id<HBTrackDataSource>)dataSource
|
dataSource:(id<HBSubtitlesTrackDataSource>)dataSource
|
||||||
delegate:(id<HBTrackDelegate>)delegate
|
delegate:(id<HBSubtitlesTrackDelegate>)delegate
|
||||||
{
|
{
|
||||||
self = [super init];
|
self = [super init];
|
||||||
if (self)
|
if (self)
|
||||||
@ -127,10 +127,10 @@ static NSArray *_languagesArray = nil;
|
|||||||
|
|
||||||
if (!(self.undo.isUndoing || self.undo.isRedoing))
|
if (!(self.undo.isUndoing || self.undo.isRedoing))
|
||||||
{
|
{
|
||||||
self.title = [self.dataSource sourceTrackAtIndex:_sourceTrackIdx].title;
|
|
||||||
|
|
||||||
[self validateSettings];
|
[self validateSettings];
|
||||||
|
|
||||||
|
self.title = [self.dataSource defaultTitleForTrackAtIndex:_sourceTrackIdx];
|
||||||
|
|
||||||
if (oldIdx != sourceTrackIdx)
|
if (oldIdx != sourceTrackIdx)
|
||||||
{
|
{
|
||||||
[self.delegate track:self didChangeSourceFrom:oldIdx];
|
[self.delegate track:self didChangeSourceFrom:oldIdx];
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -1,6 +1,6 @@
|
|||||||
<resources>
|
<resources>
|
||||||
<section name="PresetTemplate">
|
<section name="PresetTemplate">
|
||||||
<integer name="VersionMajor" value="64" />
|
<integer name="VersionMajor" value="65" />
|
||||||
<integer name="VersionMinor" value="0" />
|
<integer name="VersionMinor" value="0" />
|
||||||
<integer name="VersionMicro" value="0" />
|
<integer name="VersionMicro" value="0" />
|
||||||
<json name="Preset" file="preset_template.json" />
|
<json name="Preset" file="preset_template.json" />
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
{
|
{
|
||||||
"ChildrenArray": [
|
"ChildrenArray": [
|
||||||
{
|
{
|
||||||
|
"AudioAutomaticNamingBehavior": "unnamed",
|
||||||
"AudioCopyMask": [
|
"AudioCopyMask": [
|
||||||
"copy:aac",
|
"copy:aac",
|
||||||
"copy:ac3",
|
"copy:ac3",
|
||||||
@ -31,6 +32,7 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"AudioSecondaryEncoderMode": true,
|
"AudioSecondaryEncoderMode": true,
|
||||||
|
"AudioTrackNamePassthru": true,
|
||||||
"AudioTrackSelectionBehavior": "first",
|
"AudioTrackSelectionBehavior": "first",
|
||||||
"ChapterMarkers": true,
|
"ChapterMarkers": true,
|
||||||
"ChildrenArray": [
|
"ChildrenArray": [
|
||||||
@ -94,6 +96,7 @@
|
|||||||
"SubtitleBurnDVDSub": false,
|
"SubtitleBurnDVDSub": false,
|
||||||
"SubtitleLanguageList": [
|
"SubtitleLanguageList": [
|
||||||
],
|
],
|
||||||
|
"SubtitleTrackNamePassthru": true,
|
||||||
"SubtitleTrackSelectionBehavior": "none",
|
"SubtitleTrackSelectionBehavior": "none",
|
||||||
"VideoAvgBitrate": 6000,
|
"VideoAvgBitrate": 6000,
|
||||||
"VideoColorMatrixCodeOverride": 0,
|
"VideoColorMatrixCodeOverride": 0,
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
{
|
{
|
||||||
"AlignAVStart": false,
|
"AlignAVStart": false,
|
||||||
|
"AudioAutomaticNamingBehavior": "unnamed",
|
||||||
"AudioCopyMask": [
|
"AudioCopyMask": [
|
||||||
"copy:aac",
|
"copy:aac",
|
||||||
"copy:ac3",
|
"copy:ac3",
|
||||||
@ -31,6 +32,7 @@
|
|||||||
],
|
],
|
||||||
"AudioSecondaryEncoderMode": true,
|
"AudioSecondaryEncoderMode": true,
|
||||||
"AudioTrackSelectionBehavior": "first",
|
"AudioTrackSelectionBehavior": "first",
|
||||||
|
"AudioTrackNamePassthru": true,
|
||||||
"ChapterMarkers": true,
|
"ChapterMarkers": true,
|
||||||
"ChildrenArray": [
|
"ChildrenArray": [
|
||||||
],
|
],
|
||||||
@ -105,6 +107,7 @@
|
|||||||
"SubtitleLanguageList": [
|
"SubtitleLanguageList": [
|
||||||
],
|
],
|
||||||
"SubtitleTrackSelectionBehavior": "none",
|
"SubtitleTrackSelectionBehavior": "none",
|
||||||
|
"SubtitleTrackNamePassthru": true,
|
||||||
"VideoAvgBitrate": 1800,
|
"VideoAvgBitrate": 1800,
|
||||||
"VideoColorMatrixCodeOverride": 0,
|
"VideoColorMatrixCodeOverride": 0,
|
||||||
"VideoEncoder": "x264",
|
"VideoEncoder": "x264",
|
||||||
|
92
test/test.c
92
test/test.c
@ -60,6 +60,7 @@
|
|||||||
#define DEBLOCK_DEFAULT_PRESET "medium"
|
#define DEBLOCK_DEFAULT_PRESET "medium"
|
||||||
#define COLORSPACE_DEFAULT_PRESET "bt709"
|
#define COLORSPACE_DEFAULT_PRESET "bt709"
|
||||||
#define HDR_DYNAMIC_METADATA_DEFAULT_PRESET "all"
|
#define HDR_DYNAMIC_METADATA_DEFAULT_PRESET "all"
|
||||||
|
#define AUDIO_AUTONAMING_BEHAVIOUR_DEFAULT_PRESET "unnamed"
|
||||||
|
|
||||||
/* Options */
|
/* Options */
|
||||||
static int debug = HB_DEBUG_ALL;
|
static int debug = HB_DEBUG_ALL;
|
||||||
@ -215,6 +216,9 @@ static int keep_duplicate_titles = 0;
|
|||||||
static int hdr_dynamic_metadata_disable = 0;
|
static int hdr_dynamic_metadata_disable = 0;
|
||||||
static char * hdr_dynamic_metadata = NULL;
|
static char * hdr_dynamic_metadata = NULL;
|
||||||
static int metadata_passthru = -1;
|
static int metadata_passthru = -1;
|
||||||
|
static int audio_name_passthru = -1;
|
||||||
|
static char * audio_autonaming_behaviour = NULL;
|
||||||
|
static int sub_name_passthru = -1;
|
||||||
|
|
||||||
/* Exit cleanly on Ctrl-C */
|
/* Exit cleanly on Ctrl-C */
|
||||||
static volatile hb_error_code done_error = HB_ERROR_NONE;
|
static volatile hb_error_code done_error = HB_ERROR_NONE;
|
||||||
@ -1675,6 +1679,14 @@ static void ShowHelp(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
fprintf(out,
|
fprintf(out,
|
||||||
|
" --keep-aname Passthru the source audio track(s) name(s).\n"
|
||||||
|
" --no-keep-aname Disable the source audio track(s) name(s) passthru.\n"
|
||||||
|
" --automatic-naming-behaviour\n"
|
||||||
|
" Set the audio track(s) automatic naming behaviour:\n"
|
||||||
|
" off\n"
|
||||||
|
" unnamed\n"
|
||||||
|
" all\n"
|
||||||
|
" Disable the source audio track(s) name(s) passthru.\n"
|
||||||
" -A, --aname <string> Set audio track name(s).\n"
|
" -A, --aname <string> Set audio track name(s).\n"
|
||||||
" Separate tracks by commas.\n"
|
" Separate tracks by commas.\n"
|
||||||
"\n"
|
"\n"
|
||||||
@ -1901,6 +1913,8 @@ static void ShowHelp(void)
|
|||||||
" or less is selected. This should locate subtitles\n"
|
" or less is selected. This should locate subtitles\n"
|
||||||
" for short foreign language segments. Best used in\n"
|
" for short foreign language segments. Best used in\n"
|
||||||
" conjunction with --subtitle-forced.\n"
|
" conjunction with --subtitle-forced.\n"
|
||||||
|
" --keep-subname Passthru the source subtitle track(s) name(s).\n"
|
||||||
|
" --no-keep-subname Disable the source subtitle track(s) name(s) passthru.\n"
|
||||||
" -S, --subname <string> Set subtitle track name(s).\n"
|
" -S, --subname <string> Set subtitle track name(s).\n"
|
||||||
" Separate tracks by commas.\n"
|
" Separate tracks by commas.\n"
|
||||||
" -F, --subtitle-forced[=string]\n"
|
" -F, --subtitle-forced[=string]\n"
|
||||||
@ -2251,6 +2265,7 @@ static int ParseOptions( int argc, char ** argv )
|
|||||||
#define KEEP_DUPLICATE_TITLES 332
|
#define KEEP_DUPLICATE_TITLES 332
|
||||||
#define MAX_DURATION 333
|
#define MAX_DURATION 333
|
||||||
#define HDR_DYNAMIC_METADATA 334
|
#define HDR_DYNAMIC_METADATA 334
|
||||||
|
#define AUDIO_AUTONAMING_BEHAVIOUR 335
|
||||||
|
|
||||||
for( ;; )
|
for( ;; )
|
||||||
{
|
{
|
||||||
@ -2429,7 +2444,12 @@ static int ParseOptions( int argc, char ** argv )
|
|||||||
{ "preset-export-description", required_argument, NULL, PRESET_EXPORT_DESC },
|
{ "preset-export-description", required_argument, NULL, PRESET_EXPORT_DESC },
|
||||||
{ "queue-import-file", required_argument, NULL, QUEUE_IMPORT },
|
{ "queue-import-file", required_argument, NULL, QUEUE_IMPORT },
|
||||||
|
|
||||||
|
{ "keep-aname", no_argument, &audio_name_passthru, 1 },
|
||||||
|
{ "no-keep-aname", no_argument, &audio_name_passthru, 0 },
|
||||||
|
{ "automatic-naming-behaviour", required_argument, NULL, AUDIO_AUTONAMING_BEHAVIOUR },
|
||||||
{ "aname", required_argument, NULL, 'A' },
|
{ "aname", required_argument, NULL, 'A' },
|
||||||
|
{ "keep-subname", no_argument, &sub_name_passthru, 1 },
|
||||||
|
{ "no-keep-subname", no_argument, &sub_name_passthru, 0 },
|
||||||
{ "subname", required_argument, NULL, 'S' },
|
{ "subname", required_argument, NULL, 'S' },
|
||||||
{ "color-matrix",required_argument, NULL, 'M' },
|
{ "color-matrix",required_argument, NULL, 'M' },
|
||||||
{ "previews", required_argument, NULL, PREVIEWS },
|
{ "previews", required_argument, NULL, PREVIEWS },
|
||||||
@ -3277,6 +3297,17 @@ static int ParseOptions( int argc, char ** argv )
|
|||||||
hdr_dynamic_metadata = strdup(HDR_DYNAMIC_METADATA_DEFAULT_PRESET);
|
hdr_dynamic_metadata = strdup(HDR_DYNAMIC_METADATA_DEFAULT_PRESET);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case AUDIO_AUTONAMING_BEHAVIOUR:
|
||||||
|
free(audio_autonaming_behaviour);
|
||||||
|
if (optarg != NULL)
|
||||||
|
{
|
||||||
|
audio_autonaming_behaviour = strdup(optarg);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
audio_autonaming_behaviour = strdup(AUDIO_AUTONAMING_BEHAVIOUR_DEFAULT_PRESET);
|
||||||
|
}
|
||||||
|
break;
|
||||||
case ':':
|
case ':':
|
||||||
fprintf( stderr, "missing parameter (%s)\n", argv[cur_optind] );
|
fprintf( stderr, "missing parameter (%s)\n", argv[cur_optind] );
|
||||||
return -1;
|
return -1;
|
||||||
@ -3932,6 +3963,10 @@ static hb_dict_t * PreparePreset(const char *preset_name)
|
|||||||
hb_dict_set(preset, "SubtitleTrackSelectionBehavior",
|
hb_dict_set(preset, "SubtitleTrackSelectionBehavior",
|
||||||
hb_value_string(selection));
|
hb_value_string(selection));
|
||||||
}
|
}
|
||||||
|
if (sub_name_passthru != -1)
|
||||||
|
{
|
||||||
|
hb_dict_set(preset, "SubtitleTrackNamePassthru", hb_value_bool(sub_name_passthru));
|
||||||
|
}
|
||||||
|
|
||||||
if (audio_copy_list != NULL)
|
if (audio_copy_list != NULL)
|
||||||
{
|
{
|
||||||
@ -3990,6 +4025,14 @@ static hb_dict_t * PreparePreset(const char *preset_name)
|
|||||||
hb_dict_set(preset, "AudioTrackSelectionBehavior",
|
hb_dict_set(preset, "AudioTrackSelectionBehavior",
|
||||||
hb_value_string(audio_all == 1 ? "all" : "first"));
|
hb_value_string(audio_all == 1 ? "all" : "first"));
|
||||||
}
|
}
|
||||||
|
if (audio_name_passthru != -1)
|
||||||
|
{
|
||||||
|
hb_dict_set(preset, "AudioTrackNamePassthru", hb_value_bool(audio_name_passthru));
|
||||||
|
}
|
||||||
|
if (audio_autonaming_behaviour != NULL)
|
||||||
|
{
|
||||||
|
hb_dict_set(preset, "AudioAutomaticNamingBehavior", hb_value_string(audio_autonaming_behaviour));
|
||||||
|
}
|
||||||
|
|
||||||
// Audio overrides
|
// Audio overrides
|
||||||
if (atracks == NULL && audio_all != 1 && (
|
if (atracks == NULL && audio_all != 1 && (
|
||||||
@ -4805,7 +4848,7 @@ static hb_dict_t * PreparePreset(const char *preset_name)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static int add_sub(hb_value_array_t *list, hb_title_t *title, int track, int out_track, int *one_burned)
|
static int add_sub(hb_value_array_t *list, hb_title_t *title, int track, int out_track, int *one_burned, int keep_name)
|
||||||
{
|
{
|
||||||
hb_subtitle_t *subtitle;
|
hb_subtitle_t *subtitle;
|
||||||
// Check that the track exists
|
// Check that the track exists
|
||||||
@ -4834,11 +4877,18 @@ static int add_sub(hb_value_array_t *list, hb_title_t *title, int track, int out
|
|||||||
}
|
}
|
||||||
*one_burned = 1;
|
*one_burned = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const char *name = keep_name && subtitle->name != NULL && subtitle->name[0] != 0 ? subtitle->name : NULL;
|
||||||
|
|
||||||
hb_dict_t *subtitle_dict = hb_dict_init();
|
hb_dict_t *subtitle_dict = hb_dict_init();
|
||||||
hb_dict_set(subtitle_dict, "Track", hb_value_int(track));
|
hb_dict_set(subtitle_dict, "Track", hb_value_int(track));
|
||||||
hb_dict_set(subtitle_dict, "Default", hb_value_bool(def));
|
hb_dict_set(subtitle_dict, "Default", hb_value_bool(def));
|
||||||
hb_dict_set(subtitle_dict, "Forced", hb_value_bool(force));
|
hb_dict_set(subtitle_dict, "Forced", hb_value_bool(force));
|
||||||
hb_dict_set(subtitle_dict, "Burn", hb_value_bool(burn));
|
hb_dict_set(subtitle_dict, "Burn", hb_value_bool(burn));
|
||||||
|
if (name)
|
||||||
|
{
|
||||||
|
hb_dict_set(subtitle_dict, "Name", hb_value_string(name));
|
||||||
|
}
|
||||||
hb_value_array_append(list, subtitle_dict);
|
hb_value_array_append(list, subtitle_dict);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -5411,13 +5461,45 @@ PrepareJob(hb_handle_t *h, hb_title_t *title, hb_dict_t *preset_dict)
|
|||||||
fprintf(stderr, "Dropping excess audio track names\n");
|
fprintf(stderr, "Dropping excess audio track names\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// If exactly one name was specified, apply it to the reset
|
// If exactly one name was specified, apply it to the rest
|
||||||
// of the tracks
|
// of the tracks
|
||||||
if (ii == 1 && *anames[0]) for (; ii < track_count; ii++)
|
if (ii == 1 && *anames[0]) for (; ii < track_count; ii++)
|
||||||
{
|
{
|
||||||
audio_dict = hb_value_array_get(audio_array, ii);
|
audio_dict = hb_value_array_get(audio_array, ii);
|
||||||
hb_dict_set(audio_dict, "Name", hb_value_string(anames[0]));
|
hb_dict_set(audio_dict, "Name", hb_value_string(anames[0]));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int keep_name = hb_value_get_bool(hb_dict_get(preset_dict, "AudioTrackNamePassthru"));
|
||||||
|
hb_audio_autonaming_behavior_t behavior = HB_AUDIO_AUTONAMING_NONE;
|
||||||
|
|
||||||
|
const char *behavior_name = hb_value_get_string(hb_dict_get(preset_dict, "AudioAutomaticNamingBehavior"));
|
||||||
|
behavior = hb_audio_autonaming_behavior_get_from_name(behavior_name);
|
||||||
|
|
||||||
|
for (ii = 0; ii < track_count; ii++)
|
||||||
|
{
|
||||||
|
audio_dict = hb_value_array_get(audio_array, ii);
|
||||||
|
|
||||||
|
if (hb_dict_get(audio_dict, "Name") == NULL)
|
||||||
|
{
|
||||||
|
int track = hb_value_get_int(hb_dict_get(audio_dict, "Track"));
|
||||||
|
hb_audio_config_t *audio = hb_list_audio_config_item(title->list_audio, track);
|
||||||
|
|
||||||
|
if (audio != NULL)
|
||||||
|
{
|
||||||
|
const char *mixdown_name = hb_dict_get_string(audio_dict, "Mixdown");
|
||||||
|
int mixdown = hb_mixdown_get_from_name(mixdown_name);
|
||||||
|
|
||||||
|
const char *name = hb_audio_name_generate(audio->in.name,
|
||||||
|
audio->in.channel_layout,
|
||||||
|
mixdown, keep_name, behavior);
|
||||||
|
|
||||||
|
if (name)
|
||||||
|
{
|
||||||
|
hb_dict_set(audio_dict, "Name", hb_value_string(name));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int one_burned = 0;
|
int one_burned = 0;
|
||||||
@ -5446,13 +5528,15 @@ PrepareJob(hb_handle_t *h, hb_title_t *title, hb_dict_t *preset_dict)
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int keep_name = hb_value_get_bool(hb_dict_get(preset_dict, "SubtitleTrackNamePassthru"));
|
||||||
|
|
||||||
int first, last, track;
|
int first, last, track;
|
||||||
if (sscanf(subtracks[ii], "%d-%d", &first, &last ) == 2)
|
if (sscanf(subtracks[ii], "%d-%d", &first, &last ) == 2)
|
||||||
{
|
{
|
||||||
for (track = first - 1; track < last; track++)
|
for (track = first - 1; track < last; track++)
|
||||||
{
|
{
|
||||||
if (add_sub(subtitle_array, title, track - 1,
|
if (add_sub(subtitle_array, title, track - 1,
|
||||||
out_track + 1, &one_burned) == 0)
|
out_track + 1, &one_burned, keep_name) == 0)
|
||||||
{
|
{
|
||||||
out_track++;
|
out_track++;
|
||||||
}
|
}
|
||||||
@ -5461,7 +5545,7 @@ PrepareJob(hb_handle_t *h, hb_title_t *title, hb_dict_t *preset_dict)
|
|||||||
else if (sscanf(subtracks[ii], "%d", &track) == 1)
|
else if (sscanf(subtracks[ii], "%d", &track) == 1)
|
||||||
{
|
{
|
||||||
if (add_sub(subtitle_array, title, track - 1,
|
if (add_sub(subtitle_array, title, track - 1,
|
||||||
out_track + 1, &one_burned) == 0)
|
out_track + 1, &one_burned, keep_name) == 0)
|
||||||
{
|
{
|
||||||
out_track++;
|
out_track++;
|
||||||
}
|
}
|
||||||
|
@ -12,6 +12,7 @@ namespace HandBrake.Interop.Interop
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
using HandBrake.Interop.Interop.HbLib;
|
using HandBrake.Interop.Interop.HbLib;
|
||||||
using HandBrake.Interop.Interop.Helpers;
|
using HandBrake.Interop.Interop.Helpers;
|
||||||
@ -784,5 +785,12 @@ namespace HandBrake.Interop.Interop
|
|||||||
|
|
||||||
return new List<int>();
|
return new List<int>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static string GetAutonameAudioTrack(string name, ulong layout, int mixdown, bool keep_name, int behaviour)
|
||||||
|
{
|
||||||
|
IntPtr nameptr = Marshal.StringToHGlobalAnsi(name);
|
||||||
|
|
||||||
|
return Marshal.PtrToStringUTF8((IntPtr)HBFunctions.hb_audio_name_generate(nameptr, layout, mixdown, keep_name ? 1 : 0, behaviour));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -405,8 +405,6 @@ namespace HandBrake.Interop.Interop.HbLib
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public static IntPtr hb_video_encoder_get_presets(int encoder)
|
public static IntPtr hb_video_encoder_get_presets(int encoder)
|
||||||
{
|
{
|
||||||
return IsArmDevice ? HbFunctionsArm.hb_video_encoder_get_presets(encoder) : HBFunctions64.hb_video_encoder_get_presets(encoder);
|
return IsArmDevice ? HbFunctionsArm.hb_video_encoder_get_presets(encoder) : HBFunctions64.hb_video_encoder_get_presets(encoder);
|
||||||
@ -652,5 +650,17 @@ namespace HandBrake.Interop.Interop.HbLib
|
|||||||
return IsArmDevice ? HbFunctionsArm.hb_get_preview3_json(hbHandle, preview_idx, job_dict)
|
return IsArmDevice ? HbFunctionsArm.hb_get_preview3_json(hbHandle, preview_idx, job_dict)
|
||||||
: HBFunctions64.hb_get_preview3_json(hbHandle, preview_idx, job_dict);
|
: HBFunctions64.hb_get_preview3_json(hbHandle, preview_idx, job_dict);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static int hb_audio_autonaming_behavior_get_from_name(IntPtr name)
|
||||||
|
{
|
||||||
|
return IsArmDevice ? HbFunctionsArm.hb_audio_autonaming_behavior_get_from_name(name)
|
||||||
|
: HBFunctions64.hb_audio_autonaming_behavior_get_from_name(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static IntPtr hb_audio_name_generate(IntPtr name, ulong layout, int mixdown, int keep_name, int behaviour)
|
||||||
|
{
|
||||||
|
return IsArmDevice ? HbFunctionsArm.hb_audio_name_generate(name, layout, mixdown, keep_name, behaviour)
|
||||||
|
: HBFunctions64.hb_audio_name_generate(name, layout, mixdown, keep_name, behaviour);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -140,6 +140,12 @@ namespace HandBrake.Interop.Interop.HbLib
|
|||||||
[DllImport("hb", EntryPoint = "hb_audio_bitrate_get_next", CallingConvention = CallingConvention.Cdecl)]
|
[DllImport("hb", EntryPoint = "hb_audio_bitrate_get_next", CallingConvention = CallingConvention.Cdecl)]
|
||||||
public static extern IntPtr hb_audio_bitrate_get_next(IntPtr last);
|
public static extern IntPtr hb_audio_bitrate_get_next(IntPtr last);
|
||||||
|
|
||||||
|
[DllImport("hb", EntryPoint = "hb_audio_autonaming_behavior_get_from_name", CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern int hb_audio_autonaming_behavior_get_from_name(IntPtr name);
|
||||||
|
|
||||||
|
[DllImport("hb", EntryPoint = "hb_audio_name_generate", CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern IntPtr hb_audio_name_generate(IntPtr name, ulong layout, int mixdown, int keep_name, int behaviour);
|
||||||
|
|
||||||
[DllImport("hb", EntryPoint = "hb_video_quality_get_limits", CallingConvention = CallingConvention.Cdecl)]
|
[DllImport("hb", EntryPoint = "hb_video_quality_get_limits", CallingConvention = CallingConvention.Cdecl)]
|
||||||
public static extern void hb_video_quality_get_limits(uint codec, ref float low, ref float high, ref float granularity, ref int direction);
|
public static extern void hb_video_quality_get_limits(uint codec, ref float low, ref float high, ref float granularity, ref int direction);
|
||||||
|
|
||||||
@ -355,5 +361,9 @@ namespace HandBrake.Interop.Interop.HbLib
|
|||||||
// hb_get_preview3(hb_handle_t* h, int picture, const char * job_dict)
|
// hb_get_preview3(hb_handle_t* h, int picture, const char * job_dict)
|
||||||
[DllImport("hb", EntryPoint = "hb_get_preview3_json", CallingConvention = CallingConvention.Cdecl)]
|
[DllImport("hb", EntryPoint = "hb_get_preview3_json", CallingConvention = CallingConvention.Cdecl)]
|
||||||
public static extern IntPtr hb_get_preview3_json(IntPtr hbHandle, int preview_idx, [In][MarshalAs(UnmanagedType.LPStr)] string job_dict);
|
public static extern IntPtr hb_get_preview3_json(IntPtr hbHandle, int preview_idx, [In][MarshalAs(UnmanagedType.LPStr)] string job_dict);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -140,6 +140,12 @@ namespace HandBrake.Interop.Interop.HbLib
|
|||||||
[DllImport("hb_a64", EntryPoint = "hb_audio_bitrate_get_next", CallingConvention = CallingConvention.Cdecl)]
|
[DllImport("hb_a64", EntryPoint = "hb_audio_bitrate_get_next", CallingConvention = CallingConvention.Cdecl)]
|
||||||
public static extern IntPtr hb_audio_bitrate_get_next(IntPtr last);
|
public static extern IntPtr hb_audio_bitrate_get_next(IntPtr last);
|
||||||
|
|
||||||
|
[DllImport("hb_a64", EntryPoint = "hb_audio_autonaming_behavior_get_from_name", CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern int hb_audio_autonaming_behavior_get_from_name(IntPtr name);
|
||||||
|
|
||||||
|
[DllImport("hb_a64", EntryPoint = "hb_audio_name_generate", CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern IntPtr hb_audio_name_generate(IntPtr name, ulong layout, int mixdown, int keep_name, int behaviour);
|
||||||
|
|
||||||
[DllImport("hb_a64", EntryPoint = "hb_video_quality_get_limits", CallingConvention = CallingConvention.Cdecl)]
|
[DllImport("hb_a64", EntryPoint = "hb_video_quality_get_limits", CallingConvention = CallingConvention.Cdecl)]
|
||||||
public static extern void hb_video_quality_get_limits(uint codec, ref float low, ref float high, ref float granularity, ref int direction);
|
public static extern void hb_video_quality_get_limits(uint codec, ref float low, ref float high, ref float granularity, ref int direction);
|
||||||
|
|
||||||
|
@ -9,7 +9,6 @@
|
|||||||
|
|
||||||
namespace HandBrake.Interop.Interop.Json.Presets
|
namespace HandBrake.Interop.Interop.Json.Presets
|
||||||
{
|
{
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
|
||||||
public class HBPreset
|
public class HBPreset
|
||||||
@ -46,6 +45,10 @@ namespace HandBrake.Interop.Interop.Json.Presets
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public string AudioTrackSelectionBehavior { get; set; }
|
public string AudioTrackSelectionBehavior { get; set; }
|
||||||
|
|
||||||
|
public bool AudioTrackNamePassthru { get; set; }
|
||||||
|
|
||||||
|
public string AudioAutomaticNamingBehavior { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets a value indicating whether chapter markers.
|
/// Gets or sets a value indicating whether chapter markers.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -316,6 +319,8 @@ namespace HandBrake.Interop.Interop.Json.Presets
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public string SubtitleTrackSelectionBehavior { get; set; }
|
public string SubtitleTrackSelectionBehavior { get; set; }
|
||||||
|
|
||||||
|
public bool SubtitleTrackNamePassthru { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the video avg bitrate.
|
/// Gets or sets the video avg bitrate.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -13,6 +13,7 @@ namespace HandBrakeWPF.Model.Audio
|
|||||||
using System.ComponentModel;
|
using System.ComponentModel;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
|
||||||
|
using HandBrake.App.Core.Utilities;
|
||||||
using HandBrake.Interop.Interop;
|
using HandBrake.Interop.Interop;
|
||||||
using HandBrake.Interop.Interop.Interfaces.Model;
|
using HandBrake.Interop.Interop.Interfaces.Model;
|
||||||
using HandBrake.Interop.Interop.Interfaces.Model.Encoders;
|
using HandBrake.Interop.Interop.Interfaces.Model.Encoders;
|
||||||
@ -24,7 +25,11 @@ namespace HandBrakeWPF.Model.Audio
|
|||||||
private AudioBehaviourModes selectedBehaviour;
|
private AudioBehaviourModes selectedBehaviour;
|
||||||
private BindingList<Language> selectedLanguages;
|
private BindingList<Language> selectedLanguages;
|
||||||
private AudioTrackDefaultsMode trackDefaultBehaviour;
|
private AudioTrackDefaultsMode trackDefaultBehaviour;
|
||||||
|
|
||||||
|
private AudioTrackNamingBehaviour audioAutomaticNamingBehavior;
|
||||||
|
|
||||||
|
private bool audioTrackNamePassthru;
|
||||||
|
|
||||||
public AudioBehaviours()
|
public AudioBehaviours()
|
||||||
{
|
{
|
||||||
this.SelectedBehaviour = AudioBehaviourModes.None;
|
this.SelectedBehaviour = AudioBehaviourModes.None;
|
||||||
@ -33,6 +38,7 @@ namespace HandBrakeWPF.Model.Audio
|
|||||||
this.BehaviourTracks = new BindingList<AudioBehaviourTrack>();
|
this.BehaviourTracks = new BindingList<AudioBehaviourTrack>();
|
||||||
this.AllowedPassthruOptions = new BindingList<HBAudioEncoder>();
|
this.AllowedPassthruOptions = new BindingList<HBAudioEncoder>();
|
||||||
this.AudioFallbackEncoder = HandBrakeEncoderHelpers.GetAudioEncoder(HBAudioEncoder.AvAac);
|
this.AudioFallbackEncoder = HandBrakeEncoderHelpers.GetAudioEncoder(HBAudioEncoder.AvAac);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public AudioBehaviours(AudioBehaviours behaviours)
|
public AudioBehaviours(AudioBehaviours behaviours)
|
||||||
@ -43,6 +49,8 @@ namespace HandBrakeWPF.Model.Audio
|
|||||||
this.BehaviourTracks = behaviours.BehaviourTracks;
|
this.BehaviourTracks = behaviours.BehaviourTracks;
|
||||||
this.AllowedPassthruOptions = new BindingList<HBAudioEncoder>(behaviours.AllowedPassthruOptions);
|
this.AllowedPassthruOptions = new BindingList<HBAudioEncoder>(behaviours.AllowedPassthruOptions);
|
||||||
this.AudioFallbackEncoder = behaviours.AudioFallbackEncoder;
|
this.AudioFallbackEncoder = behaviours.AudioFallbackEncoder;
|
||||||
|
this.AudioTrackNamePassthru = behaviours.AudioTrackNamePassthru;
|
||||||
|
this.AudioAutomaticNamingBehavior = behaviours.AudioAutomaticNamingBehavior;
|
||||||
}
|
}
|
||||||
|
|
||||||
public AudioBehaviourModes SelectedBehaviour
|
public AudioBehaviourModes SelectedBehaviour
|
||||||
@ -102,5 +110,35 @@ namespace HandBrakeWPF.Model.Audio
|
|||||||
public IList<HBAudioEncoder> AllowedPassthruOptions { get; set; }
|
public IList<HBAudioEncoder> AllowedPassthruOptions { get; set; }
|
||||||
|
|
||||||
public HBAudioEncoder AudioFallbackEncoder { get; set; }
|
public HBAudioEncoder AudioFallbackEncoder { get; set; }
|
||||||
|
|
||||||
|
public bool AudioTrackNamePassthru
|
||||||
|
{
|
||||||
|
get => this.audioTrackNamePassthru;
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (value == this.audioTrackNamePassthru)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.audioTrackNamePassthru = value;
|
||||||
|
this.NotifyOfPropertyChange(() => this.AudioTrackNamePassthru);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public AudioTrackNamingBehaviour AudioAutomaticNamingBehavior
|
||||||
|
{
|
||||||
|
get => this.audioAutomaticNamingBehavior;
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (value == this.audioAutomaticNamingBehavior)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.audioAutomaticNamingBehavior = value;
|
||||||
|
this.NotifyOfPropertyChange(() => this.AudioAutomaticNamingBehavior);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
22
win/CS/HandBrakeWPF/Model/Audio/AudioTrackNamingBehaviour.cs
Normal file
22
win/CS/HandBrakeWPF/Model/Audio/AudioTrackNamingBehaviour.cs
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
using HandBrakeWPF.Properties;
|
||||||
|
|
||||||
|
namespace HandBrakeWPF.Model.Audio
|
||||||
|
{
|
||||||
|
using HandBrake.Interop.Attributes;
|
||||||
|
|
||||||
|
public enum AudioTrackNamingBehaviour
|
||||||
|
{
|
||||||
|
|
||||||
|
[DisplayName(typeof(Resources), "AudioTrackNaming_None")]
|
||||||
|
[ShortName("none")]
|
||||||
|
None,
|
||||||
|
|
||||||
|
[DisplayName(typeof(Resources), "AudioTrackNaming_Unnamed")]
|
||||||
|
[ShortName("unnamed")]
|
||||||
|
Unnamed,
|
||||||
|
|
||||||
|
[DisplayName(typeof(Resources), "AudioTrackNaming_All")]
|
||||||
|
[ShortName("All")]
|
||||||
|
All,
|
||||||
|
}
|
||||||
|
}
|
@ -24,6 +24,8 @@ namespace HandBrakeWPF.Model.Subtitles
|
|||||||
private bool addClosedCaptions;
|
private bool addClosedCaptions;
|
||||||
private SubtitleBurnInBehaviourModes selectedBurnInBehaviour;
|
private SubtitleBurnInBehaviourModes selectedBurnInBehaviour;
|
||||||
|
|
||||||
|
private bool subtitleTrackNamePassthru;
|
||||||
|
|
||||||
public SubtitleBehaviours()
|
public SubtitleBehaviours()
|
||||||
{
|
{
|
||||||
this.SelectedBehaviour = SubtitleBehaviourModes.None;
|
this.SelectedBehaviour = SubtitleBehaviourModes.None;
|
||||||
@ -38,6 +40,7 @@ namespace HandBrakeWPF.Model.Subtitles
|
|||||||
this.SelectedLanguages = new BindingList<Language>(behaviours.SelectedLanguages.ToList());
|
this.SelectedLanguages = new BindingList<Language>(behaviours.SelectedLanguages.ToList());
|
||||||
this.AddClosedCaptions = behaviours.AddClosedCaptions;
|
this.AddClosedCaptions = behaviours.AddClosedCaptions;
|
||||||
this.AddForeignAudioScanTrack = behaviours.AddForeignAudioScanTrack;
|
this.AddForeignAudioScanTrack = behaviours.AddForeignAudioScanTrack;
|
||||||
|
this.SubtitleTrackNamePassthru = behaviours.SubtitleTrackNamePassthru;
|
||||||
}
|
}
|
||||||
|
|
||||||
public SubtitleBehaviourModes SelectedBehaviour
|
public SubtitleBehaviourModes SelectedBehaviour
|
||||||
@ -124,5 +127,20 @@ namespace HandBrakeWPF.Model.Subtitles
|
|||||||
this.NotifyOfPropertyChange(() => this.AddClosedCaptions);
|
this.NotifyOfPropertyChange(() => this.AddClosedCaptions);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public bool SubtitleTrackNamePassthru
|
||||||
|
{
|
||||||
|
get => this.subtitleTrackNamePassthru;
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (value == this.subtitleTrackNamePassthru)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.subtitleTrackNamePassthru = value;
|
||||||
|
this.NotifyOfPropertyChange(() => this.SubtitleTrackNamePassthru);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
63
win/CS/HandBrakeWPF/Properties/Resources.Designer.cs
generated
63
win/CS/HandBrakeWPF/Properties/Resources.Designer.cs
generated
@ -364,6 +364,15 @@ namespace HandBrakeWPF.Properties {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to Autonaming:.
|
||||||
|
/// </summary>
|
||||||
|
public static string AudioDefaultsView_AutoNaming {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("AudioDefaultsView_AutoNaming", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized string similar to Clear.
|
/// Looks up a localized string similar to Clear.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -373,6 +382,15 @@ namespace HandBrakeWPF.Properties {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to Track Naming Behaviour:.
|
||||||
|
/// </summary>
|
||||||
|
public static string AudioDefaultsView_NamingBehaviour {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("AudioDefaultsView_NamingBehaviour", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized string similar to Automatic Audio Selections.
|
/// Looks up a localized string similar to Automatic Audio Selections.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -382,6 +400,15 @@ namespace HandBrakeWPF.Properties {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to Passthru Track Names.
|
||||||
|
/// </summary>
|
||||||
|
public static string AudioDefaultsView_PassthruTrackNames {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("AudioDefaultsView_PassthruTrackNames", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized string similar to Source Track Selection.
|
/// Looks up a localized string similar to Source Track Selection.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -391,6 +418,33 @@ namespace HandBrakeWPF.Properties {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to All Tracks.
|
||||||
|
/// </summary>
|
||||||
|
public static string AudioTrackNaming_All {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("AudioTrackNaming_All", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to None.
|
||||||
|
/// </summary>
|
||||||
|
public static string AudioTrackNaming_None {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("AudioTrackNaming_None", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to Unnamed Only.
|
||||||
|
/// </summary>
|
||||||
|
public static string AudioTrackNaming_Unnamed {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("AudioTrackNaming_Unnamed", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized string similar to Allow passthru of:.
|
/// Looks up a localized string similar to Allow passthru of:.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -7557,6 +7611,15 @@ namespace HandBrakeWPF.Properties {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to Passthru Track Names.
|
||||||
|
/// </summary>
|
||||||
|
public static string SubtitlesDefaultsView_PassthruTrackName {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("SubtitlesDefaultsView_PassthruTrackName", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized string similar to Add Closed Captions when available.
|
/// Looks up a localized string similar to Add Closed Captions when available.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -2977,4 +2977,25 @@ To allow multiple simultaneous encodes, turn on "Process Isolation" in Tools Men
|
|||||||
<data name="QueueView_StartQueueNow" xml:space="preserve">
|
<data name="QueueView_StartQueueNow" xml:space="preserve">
|
||||||
<value>Start Queue (Immediately)</value>
|
<value>Start Queue (Immediately)</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="AudioTrackNaming_None" xml:space="preserve">
|
||||||
|
<value>None</value>
|
||||||
|
</data>
|
||||||
|
<data name="AudioTrackNaming_Unnamed" xml:space="preserve">
|
||||||
|
<value>Unnamed Only</value>
|
||||||
|
</data>
|
||||||
|
<data name="AudioTrackNaming_All" xml:space="preserve">
|
||||||
|
<value>All Tracks</value>
|
||||||
|
</data>
|
||||||
|
<data name="AudioDefaultsView_NamingBehaviour" xml:space="preserve">
|
||||||
|
<value>Track Naming Behaviour:</value>
|
||||||
|
</data>
|
||||||
|
<data name="AudioDefaultsView_AutoNaming" xml:space="preserve">
|
||||||
|
<value>Autonaming:</value>
|
||||||
|
</data>
|
||||||
|
<data name="AudioDefaultsView_PassthruTrackNames" xml:space="preserve">
|
||||||
|
<value>Passthru Track Names</value>
|
||||||
|
</data>
|
||||||
|
<data name="SubtitlesDefaultsView_PassthruTrackName" xml:space="preserve">
|
||||||
|
<value>Passthru Track Names</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
@ -62,6 +62,9 @@ namespace HandBrakeWPF.Services.Encode.Model.Models
|
|||||||
|
|
||||||
public AudioTrack(AudioTrack track, bool setScannedTrack)
|
public AudioTrack(AudioTrack track, bool setScannedTrack)
|
||||||
{
|
{
|
||||||
|
this.PassthruTracks = track.PassthruTracks;
|
||||||
|
this.TrackNamingBehaviour = track.TrackNamingBehaviour;
|
||||||
|
|
||||||
this.bitrate = track.Bitrate;
|
this.bitrate = track.Bitrate;
|
||||||
this.drc = track.DRC;
|
this.drc = track.DRC;
|
||||||
this.encoder = track.Encoder;
|
this.encoder = track.Encoder;
|
||||||
@ -90,8 +93,12 @@ namespace HandBrakeWPF.Services.Encode.Model.Models
|
|||||||
this.SetupLimits();
|
this.SetupLimits();
|
||||||
}
|
}
|
||||||
|
|
||||||
public AudioTrack(AudioBehaviourTrack track, Audio sourceTrack, IList<HBAudioEncoder> passthruEncoders, HBAudioEncoder fallbackEncoder, OutputFormat container)
|
public AudioTrack(AudioBehaviourTrack track, Audio sourceTrack, IList<HBAudioEncoder> passthruEncoders, HBAudioEncoder fallbackEncoder, OutputFormat container, Func<bool> passthruTracks,
|
||||||
|
Func<AudioTrackNamingBehaviour> trackNamingBehaviour)
|
||||||
{
|
{
|
||||||
|
this.PassthruTracks = passthruTracks;
|
||||||
|
this.TrackNamingBehaviour = trackNamingBehaviour;
|
||||||
|
|
||||||
HBAudioEncoder validatedEncoder = track.Encoder;
|
HBAudioEncoder validatedEncoder = track.Encoder;
|
||||||
if (track.IsPassthru)
|
if (track.IsPassthru)
|
||||||
{
|
{
|
||||||
@ -140,9 +147,11 @@ namespace HandBrakeWPF.Services.Encode.Model.Models
|
|||||||
|
|
||||||
if (!string.IsNullOrEmpty(this.scannedTrack?.Name))
|
if (!string.IsNullOrEmpty(this.scannedTrack?.Name))
|
||||||
{
|
{
|
||||||
this.TrackName = this.scannedTrack.Name;
|
this.PassthruTrackName();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.AutoNameTrack();
|
||||||
|
|
||||||
this.SetupLimits();
|
this.SetupLimits();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -169,6 +178,9 @@ namespace HandBrakeWPF.Services.Encode.Model.Models
|
|||||||
}
|
}
|
||||||
|
|
||||||
this.GetDefaultMixdownIfNull();
|
this.GetDefaultMixdownIfNull();
|
||||||
|
|
||||||
|
this.PassthruTrackName();
|
||||||
|
this.AutoNameTrack();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -476,7 +488,39 @@ namespace HandBrakeWPF.Services.Encode.Model.Models
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[JsonIgnore]
|
||||||
|
public Func<bool> PassthruTracks { get; set; }
|
||||||
|
|
||||||
|
[JsonIgnore]
|
||||||
|
public Func<AudioTrackNamingBehaviour> TrackNamingBehaviour { get; set; }
|
||||||
|
|
||||||
/* Helper Methods */
|
/* Helper Methods */
|
||||||
|
public void PassthruTrackName()
|
||||||
|
{
|
||||||
|
if (PassthruTracks != null)
|
||||||
|
{
|
||||||
|
bool passthru = PassthruTracks();
|
||||||
|
if (this.ScannedTrack != null && passthru)
|
||||||
|
{
|
||||||
|
this.TrackName = this.ScannedTrack.Name;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void AutoNameTrack()
|
||||||
|
{
|
||||||
|
if (TrackNamingBehaviour != null)
|
||||||
|
{
|
||||||
|
AudioTrackNamingBehaviour behaviour = TrackNamingBehaviour();
|
||||||
|
|
||||||
|
if (this.ScannedTrack != null)
|
||||||
|
{
|
||||||
|
bool keep = behaviour == AudioTrackNamingBehaviour.Unnamed || behaviour == AudioTrackNamingBehaviour.None;
|
||||||
|
HBMixdown currentMixdown = HandBrakeEncoderHelpers.GetMixdown(this.mixDown);
|
||||||
|
this.TrackName = HandBrakeEncoderHelpers.GetAutonameAudioTrack(this.TrackName, 0, currentMixdown.Id, keep, (int)behaviour);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void SetupLimits()
|
private void SetupLimits()
|
||||||
{
|
{
|
||||||
@ -601,7 +645,7 @@ namespace HandBrakeWPF.Services.Encode.Model.Models
|
|||||||
this.MixDown = sanitisedMixdown.ShortName;
|
this.MixDown = sanitisedMixdown.ShortName;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string ToString()
|
public override string ToString()
|
||||||
{
|
{
|
||||||
return string.Format("Audio Track: Title {0}", this.ScannedTrack.ToString());
|
return string.Format("Audio Track: Title {0}", this.ScannedTrack.ToString());
|
||||||
|
@ -9,8 +9,9 @@
|
|||||||
|
|
||||||
namespace HandBrakeWPF.Services.Encode.Model.Models
|
namespace HandBrakeWPF.Services.Encode.Model.Models
|
||||||
{
|
{
|
||||||
|
using System;
|
||||||
|
|
||||||
using HandBrake.Interop.Interop.Interfaces.Model;
|
using HandBrake.Interop.Interop.Interfaces.Model;
|
||||||
using HandBrake.Interop.Utilities;
|
|
||||||
|
|
||||||
using HandBrakeWPF.Services.Scan.Model;
|
using HandBrakeWPF.Services.Scan.Model;
|
||||||
using HandBrakeWPF.ViewModels;
|
using HandBrakeWPF.ViewModels;
|
||||||
@ -80,6 +81,7 @@ namespace HandBrakeWPF.Services.Encode.Model.Models
|
|||||||
this.SubtitleType = subtitle.SubtitleType;
|
this.SubtitleType = subtitle.SubtitleType;
|
||||||
this.SourceTrack = subtitle.SourceTrack;
|
this.SourceTrack = subtitle.SourceTrack;
|
||||||
this.Name = subtitle.Name;
|
this.Name = subtitle.Name;
|
||||||
|
this.TrackNamingCallback = subtitle.TrackNamingCallback;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
@ -185,9 +187,13 @@ namespace HandBrakeWPF.Services.Encode.Model.Models
|
|||||||
this.Forced = false;
|
this.Forced = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.sourceTrack != null)
|
if (TrackNamingCallback != null)
|
||||||
{
|
{
|
||||||
this.Name = !string.IsNullOrEmpty(this.sourceTrack.Name) ? this.sourceTrack.Name : string.Empty;
|
bool passthruName = TrackNamingCallback();
|
||||||
|
if (passthruName)
|
||||||
|
{
|
||||||
|
this.SetTrackNamePassthru();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -316,6 +322,16 @@ namespace HandBrakeWPF.Services.Encode.Model.Models
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void SetTrackNamePassthru()
|
||||||
|
{
|
||||||
|
if (this.SourceTrack != null)
|
||||||
|
{
|
||||||
|
this.Name = this.SourceTrack.Name;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public Func<bool> TrackNamingCallback { get; set; }
|
||||||
|
|
||||||
public override string ToString()
|
public override string ToString()
|
||||||
{
|
{
|
||||||
return string.Format("Subtitle Track: Title {0}", this.SrtFileName ?? this.SourceTrack.ToString());
|
return string.Format("Subtitle Track: Title {0}", this.SrtFileName ?? this.SourceTrack.ToString());
|
||||||
|
@ -350,6 +350,9 @@ namespace HandBrakeWPF.Services.Presets.Factories
|
|||||||
? AudioBehaviourModes.AllMatching
|
? AudioBehaviourModes.AllMatching
|
||||||
: AudioBehaviourModes.FirstMatch;
|
: AudioBehaviourModes.FirstMatch;
|
||||||
|
|
||||||
|
preset.AudioTrackBehaviours.AudioTrackNamePassthru = importedPreset.AudioTrackNamePassthru;
|
||||||
|
preset.AudioTrackBehaviours.AudioAutomaticNamingBehavior = EnumHelper<AudioTrackNamingBehaviour>.GetValue(importedPreset.AudioAutomaticNamingBehavior);
|
||||||
|
|
||||||
preset.AudioTrackBehaviours.SelectedTrackDefaultBehaviour = importedPreset.AudioSecondaryEncoderMode ? AudioTrackDefaultsMode.FirstTrack : AudioTrackDefaultsMode.AllTracks;
|
preset.AudioTrackBehaviours.SelectedTrackDefaultBehaviour = importedPreset.AudioSecondaryEncoderMode ? AudioTrackDefaultsMode.FirstTrack : AudioTrackDefaultsMode.AllTracks;
|
||||||
|
|
||||||
if (importedPreset.AudioCopyMask != null)
|
if (importedPreset.AudioCopyMask != null)
|
||||||
@ -417,6 +420,7 @@ namespace HandBrakeWPF.Services.Presets.Factories
|
|||||||
preset.SubtitleTrackBehaviours = new SubtitleBehaviours();
|
preset.SubtitleTrackBehaviours = new SubtitleBehaviours();
|
||||||
preset.SubtitleTrackBehaviours.SelectedBehaviour = EnumHelper<SubtitleBehaviourModes>.GetValue(importedPreset.SubtitleTrackSelectionBehavior);
|
preset.SubtitleTrackBehaviours.SelectedBehaviour = EnumHelper<SubtitleBehaviourModes>.GetValue(importedPreset.SubtitleTrackSelectionBehavior);
|
||||||
preset.SubtitleTrackBehaviours.SelectedBurnInBehaviour = EnumHelper<SubtitleBurnInBehaviourModes>.GetValue(importedPreset.SubtitleBurnBehavior);
|
preset.SubtitleTrackBehaviours.SelectedBurnInBehaviour = EnumHelper<SubtitleBurnInBehaviourModes>.GetValue(importedPreset.SubtitleBurnBehavior);
|
||||||
|
preset.SubtitleTrackBehaviours.SubtitleTrackNamePassthru = importedPreset.SubtitleTrackNamePassthru;
|
||||||
|
|
||||||
preset.SubtitleTrackBehaviours.AddClosedCaptions = importedPreset.SubtitleAddCC;
|
preset.SubtitleTrackBehaviours.AddClosedCaptions = importedPreset.SubtitleAddCC;
|
||||||
preset.SubtitleTrackBehaviours.AddForeignAudioScanTrack = importedPreset.SubtitleAddForeignAudioSearch;
|
preset.SubtitleTrackBehaviours.AddForeignAudioScanTrack = importedPreset.SubtitleAddForeignAudioSearch;
|
||||||
@ -543,6 +547,9 @@ namespace HandBrakeWPF.Services.Presets.Factories
|
|||||||
preset.AudioList.Add(track);
|
preset.AudioList.Add(track);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
preset.AudioTrackNamePassthru = export.AudioTrackBehaviours.AudioTrackNamePassthru;
|
||||||
|
preset.AudioAutomaticNamingBehavior = EnumHelper<AudioTrackNamingBehaviour>.GetShortName(export.AudioTrackBehaviours.AudioAutomaticNamingBehavior);
|
||||||
|
|
||||||
// Subtitles
|
// Subtitles
|
||||||
preset.SubtitleAddCC = export.SubtitleTrackBehaviours.AddClosedCaptions;
|
preset.SubtitleAddCC = export.SubtitleTrackBehaviours.AddClosedCaptions;
|
||||||
preset.SubtitleAddForeignAudioSearch = export.SubtitleTrackBehaviours.AddForeignAudioScanTrack;
|
preset.SubtitleAddForeignAudioSearch = export.SubtitleTrackBehaviours.AddForeignAudioScanTrack;
|
||||||
@ -551,6 +558,7 @@ namespace HandBrakeWPF.Services.Presets.Factories
|
|||||||
preset.SubtitleBurnBehavior = EnumHelper<SubtitleBurnInBehaviourModes>.GetShortName(export.SubtitleTrackBehaviours.SelectedBurnInBehaviour);
|
preset.SubtitleBurnBehavior = EnumHelper<SubtitleBurnInBehaviourModes>.GetShortName(export.SubtitleTrackBehaviours.SelectedBurnInBehaviour);
|
||||||
preset.SubtitleLanguageList = HandBrakeLanguagesHelper.GetLanguageCodes(export.SubtitleTrackBehaviours.SelectedLanguages);
|
preset.SubtitleLanguageList = HandBrakeLanguagesHelper.GetLanguageCodes(export.SubtitleTrackBehaviours.SelectedLanguages);
|
||||||
preset.SubtitleTrackSelectionBehavior = EnumHelper<SubtitleBehaviourModes>.GetShortName(export.SubtitleTrackBehaviours.SelectedBehaviour);
|
preset.SubtitleTrackSelectionBehavior = EnumHelper<SubtitleBehaviourModes>.GetShortName(export.SubtitleTrackBehaviours.SelectedBehaviour);
|
||||||
|
preset.SubtitleTrackNamePassthru = export.SubtitleTrackBehaviours.SubtitleTrackNamePassthru;
|
||||||
|
|
||||||
// Chapters
|
// Chapters
|
||||||
preset.ChapterMarkers = export.Task.IncludeChapterMarkers;
|
preset.ChapterMarkers = export.Task.IncludeChapterMarkers;
|
||||||
|
@ -9,19 +9,16 @@
|
|||||||
|
|
||||||
namespace HandBrakeWPF.ViewModels
|
namespace HandBrakeWPF.ViewModels
|
||||||
{
|
{
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Collections.ObjectModel;
|
using System.Collections.ObjectModel;
|
||||||
using System.ComponentModel;
|
using System.ComponentModel;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Runtime.CompilerServices;
|
|
||||||
|
|
||||||
using HandBrake.App.Core.Utilities;
|
using HandBrake.App.Core.Utilities;
|
||||||
using HandBrake.Interop.Interop;
|
using HandBrake.Interop.Interop;
|
||||||
using HandBrake.Interop.Interop.Interfaces.Model;
|
using HandBrake.Interop.Interop.Interfaces.Model;
|
||||||
using HandBrake.Interop.Interop.Interfaces.Model.Encoders;
|
using HandBrake.Interop.Interop.Interfaces.Model.Encoders;
|
||||||
using HandBrake.Interop.Utilities;
|
|
||||||
|
|
||||||
using HandBrakeWPF.Commands;
|
using HandBrakeWPF.Commands;
|
||||||
using HandBrakeWPF.Model.Audio;
|
using HandBrakeWPF.Model.Audio;
|
||||||
@ -216,6 +213,15 @@ namespace HandBrakeWPF.ViewModels
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public IList<string> SampleRates { get; set; }
|
public IList<string> SampleRates { get; set; }
|
||||||
|
|
||||||
|
public IList<AudioTrackNamingBehaviour> TrackNamingBehaviours
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return new BindingList<AudioTrackNamingBehaviour>(EnumHelper<AudioTrackNamingBehaviour>.GetEnumList().ToList());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Public Methods
|
#region Public Methods
|
||||||
@ -342,6 +348,9 @@ namespace HandBrakeWPF.ViewModels
|
|||||||
}
|
}
|
||||||
|
|
||||||
this.UpdateAvailableLanguages();
|
this.UpdateAvailableLanguages();
|
||||||
|
|
||||||
|
this.AudioBehaviours.AudioTrackNamePassthru = behaviours.AudioTrackNamePassthru;
|
||||||
|
this.AudioBehaviours.AudioAutomaticNamingBehavior = behaviours.AudioAutomaticNamingBehavior;
|
||||||
}
|
}
|
||||||
|
|
||||||
this.CorrectAudioEncoders(this.OutputFormat);
|
this.CorrectAudioEncoders(this.OutputFormat);
|
||||||
|
@ -403,7 +403,12 @@ namespace HandBrakeWPF.ViewModels
|
|||||||
{
|
{
|
||||||
if (!useBehaviourTemplateMode)
|
if (!useBehaviourTemplateMode)
|
||||||
{
|
{
|
||||||
this.Task.AudioTracks.Add(new AudioTrack { ScannedTrack = track });
|
this.Task.AudioTracks.Add(new AudioTrack
|
||||||
|
{
|
||||||
|
PassthruTracks = this.CheckPassthruTrack,
|
||||||
|
TrackNamingBehaviour = this.CheckNamingBehaviour,
|
||||||
|
ScannedTrack = track
|
||||||
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -413,7 +418,12 @@ namespace HandBrakeWPF.ViewModels
|
|||||||
AudioBehaviourTrack template = this.AudioBehaviours.BehaviourTracks.FirstOrDefault();
|
AudioBehaviourTrack template = this.AudioBehaviours.BehaviourTracks.FirstOrDefault();
|
||||||
if (this.CanAddTrack(template, track, this.AudioBehaviours.AudioFallbackEncoder))
|
if (this.CanAddTrack(template, track, this.AudioBehaviours.AudioFallbackEncoder))
|
||||||
{
|
{
|
||||||
this.Task.AudioTracks.Add( template != null ? new AudioTrack(template, track, this.AudioBehaviours.AllowedPassthruOptions, this.AudioBehaviours.AudioFallbackEncoder, this.Task.OutputFormat) : new AudioTrack { ScannedTrack = track });
|
this.Task.AudioTracks.Add(template != null ? new AudioTrack(template, track, this.AudioBehaviours.AllowedPassthruOptions, this.AudioBehaviours.AudioFallbackEncoder, this.Task.OutputFormat, this.CheckPassthruTrack, this.CheckNamingBehaviour) : new AudioTrack
|
||||||
|
{
|
||||||
|
PassthruTracks = this.CheckPassthruTrack,
|
||||||
|
TrackNamingBehaviour = this.CheckNamingBehaviour,
|
||||||
|
ScannedTrack = track
|
||||||
|
});
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case AudioTrackDefaultsMode.AllTracks:
|
case AudioTrackDefaultsMode.AllTracks:
|
||||||
@ -421,7 +431,12 @@ namespace HandBrakeWPF.ViewModels
|
|||||||
{
|
{
|
||||||
if (this.CanAddTrack(tmpl, track, this.AudioBehaviours.AudioFallbackEncoder))
|
if (this.CanAddTrack(tmpl, track, this.AudioBehaviours.AudioFallbackEncoder))
|
||||||
{
|
{
|
||||||
this.Task.AudioTracks.Add(tmpl != null ? new AudioTrack(tmpl, track, this.AudioBehaviours.AllowedPassthruOptions, this.AudioBehaviours.AudioFallbackEncoder, this.Task.OutputFormat) : new AudioTrack { ScannedTrack = track });
|
this.Task.AudioTracks.Add(tmpl != null ? new AudioTrack(tmpl, track, this.AudioBehaviours.AllowedPassthruOptions, this.AudioBehaviours.AudioFallbackEncoder, this.Task.OutputFormat, this.CheckPassthruTrack, this.CheckNamingBehaviour) : new AudioTrack
|
||||||
|
{
|
||||||
|
PassthruTracks = this.CheckPassthruTrack,
|
||||||
|
TrackNamingBehaviour = this.CheckNamingBehaviour,
|
||||||
|
ScannedTrack = track
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -472,10 +487,10 @@ namespace HandBrakeWPF.ViewModels
|
|||||||
Audio sourceTrack = this.GetPreferredAudioTrack();
|
Audio sourceTrack = this.GetPreferredAudioTrack();
|
||||||
if (this.CanAddTrack(track, sourceTrack, this.AudioBehaviours.AudioFallbackEncoder))
|
if (this.CanAddTrack(track, sourceTrack, this.AudioBehaviours.AudioFallbackEncoder))
|
||||||
{
|
{
|
||||||
this.Task.AudioTracks.Add(new AudioTrack(track, sourceTrack, this.AudioBehaviours.AllowedPassthruOptions, this.AudioBehaviours.AudioFallbackEncoder, this.Task.OutputFormat));
|
this.Task.AudioTracks.Add(new AudioTrack(track, sourceTrack, this.AudioBehaviours.AllowedPassthruOptions, this.AudioBehaviours.AudioFallbackEncoder, this.Task.OutputFormat, this.CheckPassthruTrack, this.CheckNamingBehaviour));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Step 4, Handle the default selection behaviour.
|
// Step 4, Handle the default selection behaviour.
|
||||||
switch (this.AudioBehaviours.SelectedBehaviour)
|
switch (this.AudioBehaviours.SelectedBehaviour)
|
||||||
{
|
{
|
||||||
@ -489,6 +504,12 @@ namespace HandBrakeWPF.ViewModels
|
|||||||
this.AddAllRemainingForSelectedLanguages();
|
this.AddAllRemainingForSelectedLanguages();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
foreach (AudioTrack track in this.Task.AudioTracks)
|
||||||
|
{
|
||||||
|
track.PassthruTrackName();
|
||||||
|
track.AutoNameTrack();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -621,6 +642,26 @@ namespace HandBrakeWPF.ViewModels
|
|||||||
return orderedTracks;
|
return orderedTracks;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private AudioTrackNamingBehaviour CheckNamingBehaviour()
|
||||||
|
{
|
||||||
|
if (this.AudioBehaviours != null)
|
||||||
|
{
|
||||||
|
return this.AudioBehaviours.AudioAutomaticNamingBehavior;
|
||||||
|
}
|
||||||
|
|
||||||
|
return AudioTrackNamingBehaviour.None;
|
||||||
|
}
|
||||||
|
|
||||||
|
private bool CheckPassthruTrack()
|
||||||
|
{
|
||||||
|
if (this.AudioBehaviours != null)
|
||||||
|
{
|
||||||
|
return this.AudioBehaviours.AudioTrackNamePassthru;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -230,6 +230,7 @@ namespace HandBrakeWPF.ViewModels
|
|||||||
this.SubtitleBehaviours.SelectedBurnInBehaviour = behaviours.SelectedBurnInBehaviour;
|
this.SubtitleBehaviours.SelectedBurnInBehaviour = behaviours.SelectedBurnInBehaviour;
|
||||||
this.SubtitleBehaviours.AddClosedCaptions = behaviours.AddClosedCaptions;
|
this.SubtitleBehaviours.AddClosedCaptions = behaviours.AddClosedCaptions;
|
||||||
this.SubtitleBehaviours.AddForeignAudioScanTrack = behaviours.AddForeignAudioScanTrack;
|
this.SubtitleBehaviours.AddForeignAudioScanTrack = behaviours.AddForeignAudioScanTrack;
|
||||||
|
this.SubtitleBehaviours.SubtitleTrackNamePassthru = behaviours.SubtitleTrackNamePassthru;
|
||||||
|
|
||||||
foreach (Language selectedItem in behaviours.SelectedLanguages)
|
foreach (Language selectedItem in behaviours.SelectedLanguages)
|
||||||
{
|
{
|
||||||
|
@ -159,7 +159,6 @@ namespace HandBrakeWPF.ViewModels
|
|||||||
this.CheckAddState(count);
|
this.CheckAddState(count);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Add a new Track
|
/// Add a new Track
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -659,12 +658,12 @@ namespace HandBrakeWPF.ViewModels
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
SubtitleTrack track = new SubtitleTrack
|
SubtitleTrack track = new SubtitleTrack
|
||||||
{
|
{
|
||||||
SubtitleType = source.SubtitleType,
|
TrackNamingCallback = this.IsTrackNamePassthruEnabled,
|
||||||
SourceTrack = source,
|
SubtitleType = source.SubtitleType,
|
||||||
};
|
SourceTrack = source,
|
||||||
|
};
|
||||||
|
|
||||||
// Burn-in Behaviours
|
// Burn-in Behaviours
|
||||||
if (this.SubtitleBehaviours.SelectedBurnInBehaviour == SubtitleBurnInBehaviourModes.ForeignAudio
|
if (this.SubtitleBehaviours.SelectedBurnInBehaviour == SubtitleBurnInBehaviourModes.ForeignAudio
|
||||||
@ -700,6 +699,12 @@ namespace HandBrakeWPF.ViewModels
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Default the track name to the source track name, if it exists.
|
||||||
|
if (SubtitleBehaviours.SubtitleTrackNamePassthru)
|
||||||
|
{
|
||||||
|
track.SetTrackNamePassthru();
|
||||||
|
}
|
||||||
|
|
||||||
var encodeTask = this.Task;
|
var encodeTask = this.Task;
|
||||||
if (encodeTask != null)
|
if (encodeTask != null)
|
||||||
{
|
{
|
||||||
@ -776,14 +781,16 @@ namespace HandBrakeWPF.ViewModels
|
|||||||
string extension = Path.GetExtension(srtFile);
|
string extension = Path.GetExtension(srtFile);
|
||||||
|
|
||||||
SubtitleTrack track = new SubtitleTrack
|
SubtitleTrack track = new SubtitleTrack
|
||||||
{
|
{
|
||||||
SrtFileName = Path.GetFileNameWithoutExtension(srtFile),
|
TrackNamingCallback = this.IsTrackNamePassthruEnabled,
|
||||||
SrtOffset = 0,
|
SrtFileName = Path.GetFileNameWithoutExtension(srtFile),
|
||||||
SrtCharCode = "UTF-8",
|
SrtOffset = 0,
|
||||||
SrtLang = HandBrakeLanguagesHelper.GetByName("English"),
|
SrtCharCode = "UTF-8",
|
||||||
SubtitleType = extension.Contains("ass", StringComparison.InvariantCultureIgnoreCase) ? SubtitleType.IMPORTSSA : SubtitleType.IMPORTSRT,
|
SrtLang = HandBrakeLanguagesHelper.GetByName("English"),
|
||||||
SrtPath = srtFile
|
SubtitleType = extension.Contains("ass", StringComparison.InvariantCultureIgnoreCase) ? SubtitleType.IMPORTSSA : SubtitleType.IMPORTSRT,
|
||||||
};
|
SrtPath = srtFile,
|
||||||
|
|
||||||
|
};
|
||||||
this.Task.SubtitleTracks.Add(track);
|
this.Task.SubtitleTracks.Add(track);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -799,5 +806,10 @@ namespace HandBrakeWPF.ViewModels
|
|||||||
MessageBoxImage.Information);
|
MessageBoxImage.Information);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public bool IsTrackNamePassthruEnabled()
|
||||||
|
{
|
||||||
|
return this.SubtitleBehaviours.SubtitleTrackNamePassthru;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -95,7 +95,7 @@
|
|||||||
<TextBlock Text="{x:Static Properties:Resources.Shared_AvailableLanguages}" Margin="0,0,0,5"/>
|
<TextBlock Text="{x:Static Properties:Resources.Shared_AvailableLanguages}" Margin="0,0,0,5"/>
|
||||||
<ListBox Name="availableLanguages" ItemsSource="{Binding AvailableLanguages}" DisplayMemberPath="DisplayNative"
|
<ListBox Name="availableLanguages" ItemsSource="{Binding AvailableLanguages}" DisplayMemberPath="DisplayNative"
|
||||||
helpers:ListBoxHelper.SelectedItems="{Binding SelectedAvailableToMove}"
|
helpers:ListBoxHelper.SelectedItems="{Binding SelectedAvailableToMove}"
|
||||||
SelectionMode="Extended" Width="225" Height="120" />
|
SelectionMode="Extended" Width="225" Height="150" />
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
|
|
||||||
<DockPanel Grid.Column="1" Margin="10,0,10,0">
|
<DockPanel Grid.Column="1" Margin="10,0,10,0">
|
||||||
@ -110,7 +110,7 @@
|
|||||||
<TextBlock Text="{x:Static Properties:Resources.Shared_ChosenLanguages}" Margin="0,0,0,5"/>
|
<TextBlock Text="{x:Static Properties:Resources.Shared_ChosenLanguages}" Margin="0,0,0,5"/>
|
||||||
<ListBox Name="selectedLanguages" ItemsSource="{Binding AudioBehaviours.SelectedLanguages}" DisplayMemberPath="DisplayNative"
|
<ListBox Name="selectedLanguages" ItemsSource="{Binding AudioBehaviours.SelectedLanguages}" DisplayMemberPath="DisplayNative"
|
||||||
helpers:ListBoxHelper.SelectedItems="{Binding SelectedLanguagesToMove}"
|
helpers:ListBoxHelper.SelectedItems="{Binding SelectedLanguagesToMove}"
|
||||||
SelectionMode="Extended" Width="225" Height="120"
|
SelectionMode="Extended" Width="225" Height="150"
|
||||||
dd:DragDrop.DropHandler="{Binding}"
|
dd:DragDrop.DropHandler="{Binding}"
|
||||||
dd:DragDrop.IsDragSource="True"
|
dd:DragDrop.IsDragSource="True"
|
||||||
dd:DragDrop.IsDropTarget="True"/>
|
dd:DragDrop.IsDropTarget="True"/>
|
||||||
@ -158,8 +158,21 @@
|
|||||||
</MultiBinding>
|
</MultiBinding>
|
||||||
</ComboBox.ItemsSource>
|
</ComboBox.ItemsSource>
|
||||||
</ComboBox>
|
</ComboBox>
|
||||||
|
</StackPanel>
|
||||||
|
|
||||||
|
<StackPanel Orientation="Vertical">
|
||||||
|
|
||||||
|
<TextBlock Text="{x:Static Properties:Resources.AudioDefaultsView_NamingBehaviour}" Style="{StaticResource subHeader}" Margin="0,10,0,5" />
|
||||||
|
|
||||||
|
<CheckBox Content="{x:Static Properties:Resources.AudioDefaultsView_PassthruTrackNames}" IsChecked="{Binding AudioBehaviours.AudioTrackNamePassthru}" Margin="10,0,0,0" />
|
||||||
|
<StackPanel Orientation="Horizontal" Margin="10,5,0,0">
|
||||||
|
<TextBlock Text="{x:Static Properties:Resources.AudioDefaultsView_AutoNaming}" />
|
||||||
|
<ComboBox ItemsSource="{Binding TrackNamingBehaviours}" SelectedItem="{Binding AudioBehaviours.AudioAutomaticNamingBehavior}"
|
||||||
|
Margin="5,0,0,0"/>
|
||||||
|
</StackPanel>
|
||||||
|
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
|
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
|
|
||||||
<!-- Tracks -->
|
<!-- Tracks -->
|
||||||
|
@ -54,6 +54,7 @@
|
|||||||
<RowDefinition Height="Auto" />
|
<RowDefinition Height="Auto" />
|
||||||
<RowDefinition Height="Auto" />
|
<RowDefinition Height="Auto" />
|
||||||
<RowDefinition Height="Auto" />
|
<RowDefinition Height="Auto" />
|
||||||
|
<RowDefinition Height="Auto" />
|
||||||
</Grid.RowDefinitions>
|
</Grid.RowDefinitions>
|
||||||
|
|
||||||
<Grid.ColumnDefinitions>
|
<Grid.ColumnDefinitions>
|
||||||
@ -115,11 +116,13 @@
|
|||||||
HorizontalAlignment="Left" IsChecked="{Binding SubtitleBehaviours.AddClosedCaptions}"/>
|
HorizontalAlignment="Left" IsChecked="{Binding SubtitleBehaviours.AddClosedCaptions}"/>
|
||||||
<CheckBox Content="{x:Static Properties:Resources.SubtitlesView_AddForeignAudioSearch}" Grid.Column="1" Grid.Row="4" Margin="0,5,0,0"
|
<CheckBox Content="{x:Static Properties:Resources.SubtitlesView_AddForeignAudioSearch}" Grid.Column="1" Grid.Row="4" Margin="0,5,0,0"
|
||||||
HorizontalAlignment="Left" IsChecked="{Binding SubtitleBehaviours.AddForeignAudioScanTrack}"/>
|
HorizontalAlignment="Left" IsChecked="{Binding SubtitleBehaviours.AddForeignAudioScanTrack}"/>
|
||||||
|
<CheckBox Content="{x:Static Properties:Resources.SubtitlesDefaultsView_PassthruTrackName}" Grid.Column="1" Grid.Row="5" Margin="0,5,0,0"
|
||||||
|
HorizontalAlignment="Left" IsChecked="{Binding SubtitleBehaviours.SubtitleTrackNamePassthru}"/>
|
||||||
|
|
||||||
|
|
||||||
<!-- Burn In Behaviour -->
|
<!-- Burn In Behaviour -->
|
||||||
<TextBlock Text="{x:Static Properties:Resources.SubtitlesView_BurnInBehaviour}" Grid.Column="0" Grid.Row="5" Margin="0,15,5,0" HorizontalAlignment="Left" VerticalAlignment="Center" />
|
<TextBlock Text="{x:Static Properties:Resources.SubtitlesView_BurnInBehaviour}" Grid.Column="0" Grid.Row="6" Margin="0,15,5,0" HorizontalAlignment="Left" VerticalAlignment="Center" />
|
||||||
<ComboBox Name="burninBehaviour" Grid.Column="2" Grid.Row="5" HorizontalAlignment="Left"
|
<ComboBox Name="burninBehaviour" Grid.Column="2" Grid.Row="7" HorizontalAlignment="Left"
|
||||||
ItemsSource="{Binding SubtitleBurnInBehaviourModeList, Converter={StaticResource subtitleBurnInBehaviourConverter}}"
|
ItemsSource="{Binding SubtitleBurnInBehaviourModeList, Converter={StaticResource subtitleBurnInBehaviourConverter}}"
|
||||||
SelectedItem="{Binding SubtitleBehaviours.SelectedBurnInBehaviour, Converter={StaticResource subtitleBurnInBehaviourConverter}}" Width="210" Margin="0,15,5,0">
|
SelectedItem="{Binding SubtitleBehaviours.SelectedBurnInBehaviour, Converter={StaticResource subtitleBurnInBehaviourConverter}}" Width="210" Margin="0,15,5,0">
|
||||||
<ComboBox.ToolTip>
|
<ComboBox.ToolTip>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user