summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--gtk/src/callbacks.c200
-rw-r--r--gtk/src/ghb.ui2
-rw-r--r--gtk/src/hb-backend.c77
-rw-r--r--gtk/src/hb-backend.h4
-rw-r--r--gtk/src/resource_data.h2
-rw-r--r--gtk/src/resources.plist2
6 files changed, 193 insertions, 94 deletions
diff --git a/gtk/src/callbacks.c b/gtk/src/callbacks.c
index 6faa6bf5f..ebc592534 100644
--- a/gtk/src/callbacks.c
+++ b/gtk/src/callbacks.c
@@ -220,6 +220,7 @@ clear_presets_selection(signal_user_data_t *ud)
treeview = GTK_TREE_VIEW(GHB_WIDGET(ud->builder, "presets_list"));
selection = gtk_tree_view_get_selection (treeview);
gtk_tree_selection_unselect_all (selection);
+ ghb_settings_set_boolean(ud->settings, "preset_modified", TRUE);
}
static gchar*
@@ -900,6 +901,8 @@ show_title_info(signal_user_data_t *ud, ghb_title_info_t *tinfo)
widget = GHB_WIDGET (ud->builder, "source_dimensions");
text = g_strdup_printf ("%d x %d", tinfo->width, tinfo->height);
gtk_label_set_text (GTK_LABEL(widget), text);
+ ghb_settings_set_int(ud->settings, "source_width", tinfo->width);
+ ghb_settings_set_int(ud->settings, "source_height", tinfo->height);
g_free(text);
widget = GHB_WIDGET (ud->builder, "source_aspect");
text = get_aspect_string(tinfo->aspect_n, tinfo->aspect_d);
@@ -1174,8 +1177,6 @@ audio_codec_changed_cb(GtkWidget *widget, signal_user_data_t *ud)
static gint prev_acodec = 0;
gint acodec_code, mix_code;
GValue *asettings;
- GValue *pref_audio;
- GValue *audio, *acodec, *bitrate, *rate, *mix, *drc;
g_debug("audio_codec_changed_cb ()");
acodec_code = ghb_widget_int(widget);
@@ -1187,19 +1188,12 @@ audio_codec_changed_cb(GtkWidget *widget, signal_user_data_t *ud)
gint titleindex = ghb_settings_get_int(ud->settings, "title");
gint track = ghb_settings_get_int(ud->settings, "audio_track");
- pref_audio = ghb_settings_get_value(ud->settings, "pref_audio_list");
- audio = ghb_array_get_nth(pref_audio, 0);
- acodec = ghb_settings_get_value(audio, "audio_codec");
- bitrate = ghb_settings_get_value(audio, "audio_bitrate");
- rate = ghb_settings_get_value(audio, "audio_rate");
- mix = ghb_settings_get_value(audio, "audio_mix");
- drc = ghb_settings_get_value(audio, "audio_drc");
-
- ghb_ui_update(ud, "audio_bitrate", bitrate);
- ghb_ui_update(ud, "audio_rate", rate);
- mix_code = ghb_lookup_mix(mix);
+ ghb_ui_update(ud, "audio_bitrate", ghb_string_value("160"));
+ ghb_ui_update(ud, "audio_rate", ghb_string_value("source"));
+ mix_code = ghb_lookup_mix(ghb_string_value("dpl2"));
mix_code = ghb_get_best_mix( titleindex, track, acodec_code, mix_code);
ghb_ui_update(ud, "audio_mix", ghb_int64_value(mix_code));
+ ghb_ui_update(ud, "audio_drc", ghb_double_value(1.0));
}
adjust_audio_rate_combos(ud);
ghb_grey_combo_options (ud->builder);
@@ -1241,8 +1235,13 @@ audio_track_changed_cb(GtkWidget *widget, signal_user_data_t *ud)
asettings = get_selected_asettings(ud);
if (asettings != NULL)
{
+ gchar *track;
+
ghb_widget_to_setting(asettings, widget);
audio_list_refresh_selected(ud);
+ track = ghb_settings_get_combo_option(asettings, "audio_track");
+ ghb_settings_set_string(asettings, "audio_track_long", track);
+ g_free(track);
}
}
@@ -1855,6 +1854,7 @@ audio_add_clicked_cb(GtkWidget *xwidget, signal_user_data_t *ud)
GtkWidget *widget;
gint count;
GValue *audio_list;
+ gchar *track;
g_debug("audio_add_clicked_cb ()");
asettings = ghb_dict_value_new();
@@ -1871,6 +1871,9 @@ audio_add_clicked_cb(GtkWidget *xwidget, signal_user_data_t *ud)
ghb_settings_take_value(asettings, "audio_mix", ghb_widget_value(widget));
widget = GHB_WIDGET(ud->builder, "audio_drc");
ghb_settings_take_value(asettings, "audio_drc", ghb_widget_value(widget));
+ track = ghb_settings_get_combo_option(asettings, "audio_track");
+ ghb_settings_set_string(asettings, "audio_track_long", track);
+ g_free(track);
audio_list = ghb_settings_get_value(ud->settings, "audio_list");
if (audio_list == NULL)
@@ -2312,6 +2315,7 @@ presets_list_selection_changed_cb(GtkTreeSelection *selection, signal_user_data_
ghb_set_preset(ud, preset);
gint titleindex = ghb_settings_get_int(ud->settings, "title");
set_pref_audio(titleindex, ud);
+ ghb_settings_set_boolean(ud->settings, "preset_modified", FALSE);
ud->dont_clear_presets = FALSE;
if (ghb_get_title_info (&tinfo, titleindex))
{
@@ -2366,14 +2370,15 @@ add_to_queue_list(signal_user_data_t *ud, GValue *settings, GtkTreeIter *piter)
GtkTreeIter iter;
GtkTreeStore *store;
gchar *info;
- gint num_pass = 1;
gint status;
- gint ii;
GtkTreeIter citer;
- gchar *vcodec, *container, *acodec, *dest, *preset, *vol_name;
+ gchar *dest, *preset, *vol_name;
+ const gchar *vcodec, *container;
gchar *fps, *vcodec_abbr;
gint title, start_chapter, end_chapter, width, height, vqvalue;
+ gint source_width, source_height;
gboolean pass2, anamorphic, round_dim, keep_aspect, vqtype, turbo;
+ GValue *gval;
g_debug("update_queue_list ()");
if (settings == NULL) return;
@@ -2398,6 +2403,7 @@ add_to_queue_list(signal_user_data_t *ud, GValue *settings, GtkTreeIter *piter)
gtk_tree_store_append(store, &iter, NULL);
gtk_tree_store_set(store, &iter, 1, info, 2, "hb-queue-delete", -1);
+ g_free(info);
status = ghb_settings_get_int(settings, "job_status");
switch (status)
{
@@ -2417,23 +2423,35 @@ add_to_queue_list(signal_user_data_t *ud, GValue *settings, GtkTreeIter *piter)
gtk_tree_store_set(store, &iter, 0, "hb-queue-job", -1);
break;
}
- g_free(info);
- vcodec = ghb_settings_get_combo_option(settings, "video_codec");
- container = ghb_settings_get_combo_option(settings, "container");
- acodec = ghb_settings_get_combo_option(settings, "audio_codec");
+ GString *str = g_string_new("");
+ gboolean markers;
+ gboolean preset_modified;
+
+ gval = ghb_settings_get_value(settings, "container");
+ container = ghb_lookup_container_option(gval);
dest = ghb_settings_get_string(settings, "destination");
+ preset_modified = ghb_settings_get_boolean(settings, "preset_modified");
preset = ghb_settings_get_string(settings, "preset");
- info = g_strdup_printf
- (
- "<b>Preset:</b> %s\n"
- "<b>Format:</b> %s Container, %s Video + %s Audio\n"
- "<b>Destination:</b> %s",
- preset, container, vcodec, acodec, dest);
+ markers = ghb_settings_get_boolean(settings, "chapter_markers");
- gtk_tree_store_append(store, &citer, &iter);
- gtk_tree_store_set(store, &citer, 1, info, -1);
- g_free(info);
+ if (preset_modified)
+ g_string_append_printf(str, "<b>Customized Preset Based On:</b> %s\n",
+ preset);
+ else
+ g_string_append_printf(str, "<b>Preset:</b> %s\n", preset);
+
+ if (markers)
+ {
+ g_string_append_printf(str,
+ "<b>Format:</b> %s Container, Chapter Markers\n", container);
+ }
+ else
+ {
+ g_string_append_printf(str,
+ "<b>Format:</b> %s Container\n", container);
+ }
+ g_string_append_printf(str, "<b>Destination:</b> %s\n", dest);
width = ghb_settings_get_int(settings, "scale_width");
height = ghb_settings_get_int(settings, "scale_height");
@@ -2468,6 +2486,7 @@ add_to_queue_list(signal_user_data_t *ud, GValue *settings, GtkTreeIter *piter)
vqvalue = 0;
gchar *vq_desc = "Error";
+ gchar *vq_units = "";
if (!vqtype)
{
vqtype = ghb_settings_get_boolean(settings, "vquality_type_target");
@@ -2475,97 +2494,95 @@ add_to_queue_list(signal_user_data_t *ud, GValue *settings, GtkTreeIter *piter)
{
// Has to be bitrate
vqvalue = ghb_settings_get_int(settings, "video_bitrate");
- vq_desc = "kbps";
+ vq_desc = "Bitrate:";
+ vq_units = "kbps";
}
else
{
// Target file size
vqvalue = ghb_settings_get_int(settings, "video_target");
- vq_desc = "MB";
+ vq_desc = "Target Size:";
+ vq_units = "MB";
}
}
else
{
// Constant quality
vqvalue = ghb_settings_get_int(settings, "video_quality");
- vq_desc = "% Constant Quality";
+ vq_desc = "Constant Quality:";
}
fps = ghb_settings_get_string(settings, "framerate");
- vcodec_abbr = ghb_settings_get_string(settings, "video_codec");
- gchar *extra_opts;
- if (strcmp(vcodec_abbr, "x264") == 0)
+ if (strcmp("source", fps) == 0)
{
- gchar *x264opts = ghb_build_x264opts_string(settings);
- extra_opts = g_strdup_printf ("\n<b>x264 Options:</b> %s", x264opts);
- g_free(x264opts);
- }
- else
- {
- extra_opts = g_strdup("");
+ g_free(fps);
+ fps = g_strdup("Same As Source");
}
+ gval = ghb_settings_get_value(settings, "video_codec");
+ vcodec = ghb_lookup_vcodec_option(gval);
+ vcodec_abbr = ghb_settings_get_string(settings, "video_codec");
+ source_width = ghb_settings_get_int(settings, "source_width");
+ source_height = ghb_settings_get_int(settings, "source_height");
+ g_string_append_printf(str,
+ "<b>Picture:</b> Source: %d x %d, Output %d x %d %s\n"
+ "<b>Video:</b> %s, Framerate: %s, %s %d%s\n",
+ source_width, source_height, width, height, aspect_desc,
+ vcodec, fps, vq_desc, vqvalue, vq_units);
+
turbo = ghb_settings_get_boolean(settings, "turbo");
- gchar *turbo_desc = "\n<b>Turbo:</b> Off";;
if (turbo)
{
- turbo_desc = "\n<b>Turbo:</b> On";
+ g_string_append_printf(str, "<b>Turbo:</b> On\n");
}
- num_pass = pass2 ? 2 : 1;
- for (ii = 0; ii < num_pass; ii++)
+ if (strcmp(vcodec_abbr, "x264") == 0)
{
- gboolean final = (ii == (num_pass - 1));
- GString *pass = g_string_new("");
- g_string_append_printf( pass,
- "<b>%s Pass</b>\n"
- "<b>Picture:</b> %d x %d %s\n"
- "<b>Video:</b> %s, %d %s, %s fps"
- "%s",
- ii ? "2nd":"1st", width, height, aspect_desc,
- vcodec, vqvalue, vq_desc, fps,
- final ? extra_opts : turbo_desc);
+ gchar *x264opts = ghb_build_x264opts_string(settings);
+ g_string_append_printf(str, "<b>x264 Options:</b> %s\n", x264opts);
+ g_free(x264opts);
+ }
+ // Add the audios
+ gint count, ii;
+ const GValue *audio_list;
- if (final)
- {
- // Add the audios
- gint count, ii;
- const GValue *audio_list;
+ audio_list = ghb_settings_get_value(settings, "audio_list");
+ count = ghb_array_len(audio_list);
+ for (ii = 0; ii < count; ii++)
+ {
+ gchar *bitrate, *samplerate, *track;
+ const gchar *acodec, *mix;
+ GValue *asettings;
- audio_list = ghb_settings_get_value(settings, "audio_list");
- count = ghb_array_len(audio_list);
- for (ii = 0; ii < count; ii++)
- {
- gchar *acodec, *bitrate, *samplerate, *mix;
- GValue *asettings;
-
- asettings = ghb_array_get_nth(audio_list, ii);
-
- acodec = ghb_settings_get_combo_option(asettings, "audio_codec");
- bitrate = ghb_settings_get_string(asettings, "audio_bitrate");
- samplerate = ghb_settings_get_string(asettings, "audio_rate");
- gint track = ghb_settings_get_int(asettings, "audio_track");
- mix = ghb_settings_get_combo_option(asettings, "audio_mix");
- g_string_append_printf(pass,
- "\n<b>Audio:</b> %s, %s kbps, %s kHz, Track %d: %s",
- acodec, bitrate, samplerate, track+1, mix);
- g_free(acodec);
- g_free(bitrate);
- g_free(samplerate);
- g_free(mix);
- }
+ asettings = ghb_array_get_nth(audio_list, ii);
+
+ gval = ghb_settings_get_value(asettings, "audio_codec");
+ acodec = ghb_lookup_acodec_option(gval);
+ bitrate = ghb_settings_get_string(asettings, "audio_bitrate");
+ samplerate = ghb_settings_get_string(asettings, "audio_rate");
+ if (strcmp("source", samplerate) == 0)
+ {
+ g_free(samplerate);
+ samplerate = g_strdup("Same As Source");
}
- info = g_string_free(pass, FALSE);
- gtk_tree_store_append(store, &citer, &iter);
- gtk_tree_store_set(store, &citer, 0, ii ? "hb-queue-pass2" : "hb-queue-pass1", 1, info, -1);
- g_free(info);
+ track = ghb_settings_get_string(asettings, "audio_track_long");
+ gval = ghb_settings_get_value(asettings, "audio_mix");
+ mix = ghb_lookup_mix_option(gval);
+ g_string_append_printf(str,
+ "<b>Audio:</b> %s, Encoder: %s, Mixdown: %s, SampleRate: %s, Bitrate: %s",
+ track, acodec, mix, samplerate, bitrate);
+ if (ii < count-1)
+ g_string_append_printf(str, "\n");
+ g_free(track);
+ g_free(bitrate);
+ g_free(samplerate);
}
+ info = g_string_free(str, FALSE);
+ gtk_tree_store_append(store, &citer, &iter);
+ gtk_tree_store_set(store, &citer, 1, info, -1);
+ g_free(info);
g_free(fps);
g_free(vcodec_abbr);
g_free(vol_name);
- g_free(vcodec);
- g_free(container);
- g_free(acodec);
g_free(dest);
g_free(preset);
- g_free(extra_opts);
}
gboolean
@@ -2829,6 +2846,7 @@ queue_remove_clicked_cb(GtkWidget *widget, gchar *path, signal_user_data_t *ud)
treeview = GTK_TREE_VIEW(GHB_WIDGET(ud->builder, "queue_list"));
store = gtk_tree_view_get_model(treeview);
treepath = gtk_tree_path_new_from_string (path);
+ if (gtk_tree_path_get_depth(treepath) > 1) return;
if (gtk_tree_model_get_iter(store, &iter, treepath))
{
// Find the entry in the queue
diff --git a/gtk/src/ghb.ui b/gtk/src/ghb.ui
index 53fb8dc87..c28d2e13f 100644
--- a/gtk/src/ghb.ui
+++ b/gtk/src/ghb.ui
@@ -3957,7 +3957,7 @@ this setting.</property>
<property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
<child>
<object class="GtkTreeView" id="queue_list">
- <property name="width_request">640</property>
+ <property name="width_request">840</property>
<property name="height_request">300</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
diff --git a/gtk/src/hb-backend.c b/gtk/src/hb-backend.c
index fdbd4f97b..fb8c271a4 100644
--- a/gtk/src/hb-backend.c
+++ b/gtk/src/hb-backend.c
@@ -483,6 +483,44 @@ ghb_lookup_vcodec(const GValue *vcodec)
return result;
}
+const gchar*
+ghb_lookup_vcodec_option(const GValue *vcodec)
+{
+ gint ii;
+ gchar *str;
+ const gchar *result = "";
+
+ str = ghb_value_string(vcodec);
+ for (ii = 0; ii < vcodec_opts.count; ii++)
+ {
+ if (strcmp(vcodec_opts.map[ii].shortOpt, str) == 0)
+ {
+ result = vcodec_opts.map[ii].option;
+ }
+ }
+ g_free(str);
+ return result;
+}
+
+const gchar*
+ghb_lookup_container_option(const GValue *container)
+{
+ gint ii;
+ gchar *str;
+ const gchar *result = "";
+
+ str = ghb_value_string(container);
+ for (ii = 0; ii < container_opts.count; ii++)
+ {
+ if (strcmp(container_opts.map[ii].shortOpt, str) == 0)
+ {
+ result = container_opts.map[ii].option;
+ }
+ }
+ g_free(str);
+ return result;
+}
+
gint
ghb_lookup_denoise(const GValue *denoise)
{
@@ -561,6 +599,45 @@ ghb_lookup_acodec(const GValue *acodec)
return result;
}
+const gchar*
+ghb_lookup_acodec_option(const GValue *acodec)
+{
+ gint ii;
+ gchar *str;
+ const gchar *result = "";
+
+ str = ghb_value_string(acodec);
+ for (ii = 0; ii < acodec_opts.count; ii++)
+ {
+ if (strcmp(acodec_opts.map[ii].shortOpt, str) == 0)
+ {
+ result = acodec_opts.map[ii].option;
+ }
+ }
+ g_free(str);
+ return result;
+}
+
+const gchar*
+ghb_lookup_mix_option(const GValue *mix)
+{
+ gint ii;
+ gchar *str;
+ gchar *result = "None";
+
+
+ str = ghb_value_string(mix);
+ for (ii = 0; ii < hb_audio_mixdowns_count; ii++)
+ {
+ if (strcmp(hb_audio_mixdowns[ii].short_name, str) == 0)
+ {
+ result = hb_audio_mixdowns[ii].human_readable_name;
+ }
+ }
+ g_free(str);
+ return result;
+}
+
gint
ghb_lookup_mix(const GValue *mix)
{
diff --git a/gtk/src/hb-backend.h b/gtk/src/hb-backend.h
index 0972e1b10..0f52355bc 100644
--- a/gtk/src/hb-backend.h
+++ b/gtk/src/hb-backend.h
@@ -132,7 +132,11 @@ gboolean ghb_validate_filters(signal_user_data_t *ud);
gboolean ghb_validate_filter_string(const gchar *str, gint max_fields);
void ghb_hb_cleanup(gboolean partial);
gint ghb_lookup_acodec(const GValue *acodec);
+const gchar* ghb_lookup_acodec_option(const GValue *acodec);
gint ghb_lookup_mix(const GValue *mix);
+const gchar* ghb_lookup_mix_option(const GValue *mix);
+const gchar* ghb_lookup_container_option(const GValue *container);
+const gchar* ghb_lookup_vcodec_option(const GValue *vcodec);
#if 0
gint ghb_lookup_bitrate(const gchar *bitrate);
gint ghb_lookup_rate(const gchar *rate);
diff --git a/gtk/src/resource_data.h b/gtk/src/resource_data.h
index 3fcad2968..391ae20ae 100644
--- a/gtk/src/resource_data.h
+++ b/gtk/src/resource_data.h
@@ -6497,7 +6497,7 @@
" &lt;child&gt;\n"
" &lt;object class=&quot;GtkTreeView&quot; id=&quot;queue_l"
"ist&quot;&gt;\n"
-" &lt;property name=&quot;width_request&quot;&gt;640&lt;/"
+" &lt;property name=&quot;width_request&quot;&gt;840&lt;/"
"property&gt;\n"
" &lt;property name=&quot;height_request&quot;&gt;300&lt;"
"/property&gt;\n"
diff --git a/gtk/src/resources.plist b/gtk/src/resources.plist
index 788ed8f83..e0ee6aef3 100644
--- a/gtk/src/resources.plist
+++ b/gtk/src/resources.plist
@@ -3962,7 +3962,7 @@ this setting.&lt;/property&gt;
&lt;property name=&quot;vscrollbar_policy&quot;&gt;GTK_POLICY_AUTOMATIC&lt;/property&gt;
&lt;child&gt;
&lt;object class=&quot;GtkTreeView&quot; id=&quot;queue_list&quot;&gt;
- &lt;property name=&quot;width_request&quot;&gt;640&lt;/property&gt;
+ &lt;property name=&quot;width_request&quot;&gt;840&lt;/property&gt;
&lt;property name=&quot;height_request&quot;&gt;300&lt;/property&gt;
&lt;property name=&quot;visible&quot;&gt;True&lt;/property&gt;
&lt;property name=&quot;can_focus&quot;&gt;True&lt;/property&gt;