#include "hb-backend.h"
#include "ghb-dvd.h"
#include "ghbcellrenderertext.h"
+#include "hb.h"
static void update_chapter_list(signal_user_data_t *ud);
static void clear_audio_list(signal_user_data_t *ud);
GValue *array, *data;
gint count, ii;
gchar *dep_name;
+ GType type;
- if (ghb_widget_index(widget) < 0) return;
+ type = GTK_WIDGET_TYPE(widget);
+ if (type == GTK_TYPE_COMBO_BOX || type == GTK_TYPE_COMBO_BOX_ENTRY)
+ if (gtk_combo_box_get_active(GTK_COMBO_BOX(widget)) < 0) return;
name = gtk_widget_get_name(widget);
g_debug("check_dependency () %s", name);
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*
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);
GtkWidget *widget;
g_debug("adjust_audio_rate_combos ()");
- titleindex = ghb_settings_get_combo_index(ud->settings, "title");
+ titleindex = ghb_settings_combo_int(ud->settings, "title");
widget = GHB_WIDGET(ud->builder, "audio_track");
- audioindex = ghb_widget_int(widget);
+ audioindex = ghb_lookup_combo_int("audio_track", ghb_widget_value(widget));
widget = GHB_WIDGET(ud->builder, "audio_codec");
- acodec = ghb_widget_int(widget);
+ acodec = ghb_lookup_combo_int("audio_codec", ghb_widget_value(widget));
if (ghb_audio_is_passthru (acodec))
{
+ ghb_set_default_bitrate_opts (ud->builder, -1);
if (ghb_get_audio_info (&ainfo, titleindex, audioindex))
{
+ gint br = ainfo.bitrate / 1000;
// Set the values for bitrate and samplerate to the input rates
- ghb_set_passthru_rate_opts (ud->builder, ainfo.bitrate);
- ghb_ui_update(ud, "audio_bitrate", ghb_int64_value(ainfo.bitrate));
+ ghb_set_passthru_bitrate_opts (ud->builder, br);
+ ghb_ui_update(ud, "audio_bitrate", ghb_int64_value(br));
ghb_ui_update(ud, "audio_rate", ghb_int64_value(0));
ghb_ui_update(ud, "audio_mix", ghb_int64_value(0));
}
else
{
+ ghb_ui_update(ud, "audio_bitrate", ghb_int64_value(384));
ghb_ui_update(ud, "audio_rate", ghb_int64_value(0));
ghb_ui_update(ud, "audio_mix", ghb_int64_value(0));
}
}
+ else if (acodec == HB_ACODEC_FAAC)
+ {
+ gint br;
+
+ widget = GHB_WIDGET(ud->builder, "audio_bitrate");
+ br = ghb_lookup_combo_int("audio_bitrate", ghb_widget_value(widget));
+ if (br > 160)
+ ghb_ui_update(ud, "audio_bitrate", ghb_int64_value(160));
+ ghb_set_default_bitrate_opts (ud->builder, 160);
+ }
else
{
- ghb_set_default_rate_opts (ud->builder);
+ ghb_set_default_bitrate_opts (ud->builder, -1);
}
}
rate = ghb_settings_get_value(audio, "audio_rate");
mix = ghb_settings_get_value(audio, "audio_mix");
drc = ghb_settings_get_value(audio, "audio_drc");
- acodec_code = ghb_lookup_acodec(acodec);
+ acodec_code = ghb_lookup_combo_int("audio_codec", acodec);
// If there are multiple audios using the same codec, then
// select sequential tracks for each. This hash keeps track
// of the last used track for each codec.
// This gets set autimatically if the codec is passthru
ghb_ui_update(ud, "audio_bitrate", bitrate);
ghb_ui_update(ud, "audio_rate", rate);
- mix_code = ghb_lookup_mix(mix);
+ mix_code = ghb_lookup_combo_int("audio_mix", mix);
mix_code = ghb_get_best_mix(
titleindex, track, acodec_code, mix_code);
ghb_ui_update(ud, "audio_mix", ghb_int64_value(mix_code));
gint preview_width, preview_height, target_height, width, height;
g_debug("set_preview_button_image ()");
- gint titleindex = ghb_settings_get_int(ud->settings, "title");
+ gint titleindex;
+
+ titleindex = ghb_settings_combo_int(ud->settings, "title");
if (titleindex < 0) return;
widget = GHB_WIDGET (ud->builder, "preview_frame");
gint frame = ghb_widget_int(widget) - 1;
ghb_widget_to_setting(ud->settings, widget);
check_dependency(ud, widget);
- titleindex = ghb_settings_get_int(ud->settings, "title");
+ titleindex = ghb_settings_combo_int(ud->settings, "title");
ghb_update_ui_combo_box (ud->builder, "audio_track", titleindex, FALSE);
ghb_update_ui_combo_box (ud->builder, "subtitle_lang", titleindex, FALSE);
+
preset = ghb_settings_get_string (ud->settings, "preset");
ghb_update_from_preset(ud, preset, "subtitle_lang");
g_free(preset);
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);
+ acodec_code = ghb_lookup_combo_int("audio_codec", ghb_widget_value(widget));
if (ghb_audio_is_passthru (prev_acodec) &&
!ghb_audio_is_passthru (acodec_code))
{
// Transition from passthru to not, put some audio settings back to
// pref settings
- gint titleindex = ghb_settings_get_int(ud->settings, "title");
- gint track = ghb_settings_get_int(ud->settings, "audio_track");
+ gint titleindex;
+ gint 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");
+ titleindex = ghb_settings_combo_int(ud->settings, "title");
+ track = ghb_settings_combo_int(ud->settings, "audio_track");
- 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_combo_int("audio_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);
asettings = get_selected_asettings(ud);
if (asettings != NULL)
{
+ const gchar *track;
+
ghb_widget_to_setting(asettings, widget);
audio_list_refresh_selected(ud);
+ track = ghb_settings_combo_option(asettings, "audio_track");
+ ghb_settings_set_string(asettings, "audio_track_long", track);
}
}
const gchar *str;
gboolean foundit = FALSE;
GtkComboBox *combo = GTK_COMBO_BOX(GHB_WIDGET(ud->builder, name));
- if (ghb_widget_index(GTK_WIDGET(combo)) < 0)
+ if (gtk_combo_box_get_active(combo) < 0)
{ // Validate user input
gchar *val = ghb_settings_get_string(ud->settings, name);
store = gtk_combo_box_get_model(combo);
clear_presets_selection(ud);
if (ghb_settings_get_boolean(ud->settings, "vquality_type_target"))
{
- gint titleindex = ghb_settings_get_int(ud->settings, "title");
+ gint titleindex;
+ titleindex = ghb_settings_combo_int(ud->settings, "title");
gint bitrate = ghb_calculate_target_bitrate (ud->settings, titleindex);
ghb_ui_update(ud, "video_bitrate", ghb_int64_value(bitrate));
}
void
start_chapter_changed_cb(GtkWidget *widget, signal_user_data_t *ud)
{
+ gint start, end;
const gchar *name = gtk_widget_get_name(widget);
+
g_debug("start_chapter_changed_cb () %s", name);
ghb_widget_to_setting(ud->settings, widget);
- GtkWidget *end_ch = GHB_WIDGET (ud->builder, "end_chapter");
- gdouble start, end;
- gtk_spin_button_get_range (GTK_SPIN_BUTTON(end_ch), &start, &end);
start = ghb_settings_get_int(ud->settings, "start_chapter");
- gtk_spin_button_set_range (GTK_SPIN_BUTTON(end_ch), start, end);
+ end = ghb_settings_get_int(ud->settings, "end_chapter");
+ if (start > end)
+ ghb_ui_update(ud, "end_chapter", ghb_int_value(start));
check_dependency(ud, widget);
if (ghb_settings_get_boolean(ud->settings, "chapters_in_destination"))
{
void
end_chapter_changed_cb(GtkWidget *widget, signal_user_data_t *ud)
{
+ gint start, end;
const gchar *name = gtk_widget_get_name(widget);
+
g_debug("end_chapter_changed_cb () %s", name);
ghb_widget_to_setting(ud->settings, widget);
- GtkWidget *start_ch = GHB_WIDGET (ud->builder, "start_chapter");
- gdouble start, end;
- gtk_spin_button_get_range (GTK_SPIN_BUTTON(start_ch), &start, &end);
+ start = ghb_settings_get_int(ud->settings, "start_chapter");
end = ghb_settings_get_int(ud->settings, "end_chapter");
- gtk_spin_button_set_range (GTK_SPIN_BUTTON(start_ch), start, end);
+ if (start > end)
+ ghb_ui_update(ud, "start_chapter", ghb_int_value(end));
check_dependency(ud, widget);
if (ghb_settings_get_boolean(ud->settings, "chapters_in_destination"))
{
crop[1] = ghb_settings_get_int(ud->settings, "crop_bottom");
crop[2] = ghb_settings_get_int(ud->settings, "crop_left");
crop[3] = ghb_settings_get_int(ud->settings, "crop_right");
- titleindex = ghb_settings_get_combo_index(ud->settings, "title");
+ titleindex = ghb_settings_combo_int(ud->settings, "title");
if (ghb_get_title_info (&tinfo, titleindex))
{
gint width, height;
GtkTreeIter iter;
GtkListStore *store;
GtkTreeSelection *selection;
- gchar *track, *codec, *br, *sr, *mix, *drc;
- gchar *s_track, *s_codec, *s_br, *s_sr, *s_mix;
+ const gchar *track, *codec, *br, *sr, *mix;
+ gchar *drc, *s_track, *s_codec, *s_br, *s_sr, *s_mix;
gdouble s_drc;
g_debug("add_to_audio_list ()");
selection = gtk_tree_view_get_selection (treeview);
store = GTK_LIST_STORE(gtk_tree_view_get_model(treeview));
- track = ghb_settings_get_combo_option(settings, "audio_track"),
- codec = ghb_settings_get_combo_option(settings, "audio_codec"),
- br = ghb_settings_get_combo_option(settings, "audio_bitrate"),
- sr = ghb_settings_get_combo_option(settings, "audio_rate"),
- mix = ghb_settings_get_combo_option(settings, "audio_mix"),
+ track = ghb_settings_combo_option(settings, "audio_track");
+ codec = ghb_settings_combo_option(settings, "audio_codec");
+ br = ghb_settings_combo_option(settings, "audio_bitrate");
+ sr = ghb_settings_combo_option(settings, "audio_rate");
+ mix = ghb_settings_combo_option(settings, "audio_mix");
drc = ghb_settings_get_string(settings, "audio_drc");
- s_track = ghb_settings_get_string(settings, "audio_track"),
- s_codec = ghb_settings_get_string(settings, "audio_codec"),
- s_br = ghb_settings_get_string(settings, "audio_bitrate"),
- s_sr = ghb_settings_get_string(settings, "audio_rate"),
- s_mix = ghb_settings_get_string(settings, "audio_mix"),
- s_drc = ghb_settings_get_double(settings, "audio_drc"),
+ s_track = ghb_settings_get_string(settings, "audio_track");
+ s_codec = ghb_settings_get_string(settings, "audio_codec");
+ s_br = ghb_settings_get_string(settings, "audio_bitrate");
+ s_sr = ghb_settings_get_string(settings, "audio_rate");
+ s_mix = ghb_settings_get_string(settings, "audio_mix");
+ s_drc = ghb_settings_get_double(settings, "audio_drc");
gtk_list_store_append(store, &iter);
gtk_list_store_set(store, &iter,
11, s_drc,
-1);
gtk_tree_selection_select_iter(selection, &iter);
- g_free(track);
- g_free(codec);
- g_free(br);
- g_free(sr);
- g_free(mix);
g_free(drc);
g_free(s_track);
g_free(s_codec);
selection = gtk_tree_view_get_selection (treeview);
if (gtk_tree_selection_get_selected(selection, &store, &iter))
{
- gchar *track, *codec, *br, *sr, *mix, *drc;
- gchar *s_track, *s_codec, *s_br, *s_sr, *s_mix;
+ const gchar *track, *codec, *br, *sr, *mix;
+ gchar *drc, *s_track, *s_codec, *s_br, *s_sr, *s_mix;
gdouble s_drc;
// Get the row number
treepath = gtk_tree_model_get_path (store, &iter);
return;
asettings = ghb_array_get_nth(audio_list, row);
- track = ghb_settings_get_combo_option(asettings, "audio_track"),
- codec = ghb_settings_get_combo_option(asettings, "audio_codec"),
- br = ghb_settings_get_combo_option(asettings, "audio_bitrate"),
- sr = ghb_settings_get_combo_option(asettings, "audio_rate"),
- mix = ghb_settings_get_combo_option(asettings, "audio_mix"),
+ track = ghb_settings_combo_option(asettings, "audio_track");
+ codec = ghb_settings_combo_option(asettings, "audio_codec");
+ br = ghb_settings_combo_option(asettings, "audio_bitrate");
+ sr = ghb_settings_combo_option(asettings, "audio_rate");
+ mix = ghb_settings_combo_option(asettings, "audio_mix");
drc = ghb_settings_get_string(asettings, "audio_drc");
- s_track = ghb_settings_get_string(asettings, "audio_track"),
- s_codec = ghb_settings_get_string(asettings, "audio_codec"),
- s_br = ghb_settings_get_string(asettings, "audio_bitrate"),
- s_sr = ghb_settings_get_string(asettings, "audio_rate"),
- s_mix = ghb_settings_get_string(asettings, "audio_mix"),
- s_drc = ghb_settings_get_double(asettings, "audio_drc"),
+ s_track = ghb_settings_get_string(asettings, "audio_track");
+ s_codec = ghb_settings_get_string(asettings, "audio_codec");
+ s_br = ghb_settings_get_string(asettings, "audio_bitrate");
+ s_sr = ghb_settings_get_string(asettings, "audio_rate");
+ s_mix = ghb_settings_get_string(asettings, "audio_mix");
+ s_drc = ghb_settings_get_double(asettings, "audio_drc");
gtk_list_store_set(GTK_LIST_STORE(store), &iter,
// These are displayed in list
10, s_mix,
11, s_drc,
-1);
- g_free(track);
- g_free(codec);
- g_free(br);
- g_free(sr);
- g_free(mix);
g_free(drc);
g_free(s_track);
g_free(s_codec);
{
const gchar *track, *codec, *bitrate, *sample_rate, *mix;
gdouble drc;
+
gtk_tree_model_get(store, &iter,
6, &track,
7, &codec,
GtkWidget *widget;
gint count;
GValue *audio_list;
+ const gchar *track;
g_debug("audio_add_clicked_cb ()");
asettings = ghb_dict_value_new();
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_combo_option(asettings, "audio_track");
+ ghb_settings_set_string(asettings, "audio_track_long", track);
audio_list = ghb_settings_get_value(ud->settings, "audio_list");
if (audio_list == NULL)
{
do
{
- gchar *track, *codec, *br, *sr, *mix, *drc;
- gchar *s_track, *s_codec, *s_br, *s_sr, *s_mix;
+ const gchar *track, *codec, *br, *sr, *mix;
+ gchar *drc, *s_track, *s_codec, *s_br, *s_sr, *s_mix;
gdouble s_drc;
GValue *asettings;
return;
asettings = ghb_array_get_nth(audio_list, row);
- track = ghb_settings_get_combo_option(asettings, "audio_track"),
- codec = ghb_settings_get_combo_option(asettings, "audio_codec"),
- br = ghb_settings_get_combo_option(asettings, "audio_bitrate"),
- sr = ghb_settings_get_combo_option(asettings, "audio_rate"),
- mix = ghb_settings_get_combo_option(asettings, "audio_mix"),
+ track = ghb_settings_combo_option(asettings, "audio_track");
+ codec = ghb_settings_combo_option(asettings, "audio_codec");
+ br = ghb_settings_combo_option(asettings, "audio_bitrate");
+ sr = ghb_settings_combo_option(asettings, "audio_rate");
+ mix = ghb_settings_combo_option(asettings, "audio_mix");
drc = ghb_settings_get_string(asettings, "audio_drc");
- s_track = ghb_settings_get_string(asettings, "audio_track"),
- s_codec = ghb_settings_get_string(asettings, "audio_codec"),
- s_br = ghb_settings_get_string(asettings, "audio_bitrate"),
- s_sr = ghb_settings_get_string(asettings, "audio_rate"),
- s_mix = ghb_settings_get_string(asettings, "audio_mix"),
+ s_track = ghb_settings_get_string(asettings, "audio_track");
+ s_codec = ghb_settings_get_string(asettings, "audio_codec");
+ s_br = ghb_settings_get_string(asettings, "audio_bitrate");
+ s_sr = ghb_settings_get_string(asettings, "audio_rate");
+ s_mix = ghb_settings_get_string(asettings, "audio_mix");
s_drc = ghb_settings_get_double(asettings, "audio_drc");
gtk_list_store_set(GTK_LIST_STORE(store), &iter,
10, s_mix,
11, s_drc,
-1);
- g_free(track);
- g_free(codec);
- g_free(br);
- g_free(sr);
- g_free(mix);
g_free(drc);
g_free(s_track);
g_free(s_codec);
// it shouldn't be
clear_audio_list(ud);
ghb_set_preset(ud, preset);
- gint titleindex = ghb_settings_get_int(ud->settings, "title");
+ gint titleindex;
+ titleindex = ghb_settings_combo_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))
{
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;
g_debug("update_queue_list ()");
treeview = GTK_TREE_VIEW(GHB_WIDGET(ud->builder, "queue_list"));
store = GTK_TREE_STORE(gtk_tree_view_get_model(treeview));
- title = ghb_settings_get_int(settings, "title");
+ title = ghb_settings_combo_int(settings, "title");
start_chapter = ghb_settings_get_int(settings, "start_chapter");
end_chapter = ghb_settings_get_int(settings, "end_chapter");
pass2 = ghb_settings_get_boolean(settings, "two_pass");
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)
{
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;
+ gint mux;
+
+ container = ghb_settings_combo_option(settings, "container");
+ mux = ghb_settings_combo_int(settings, "container");
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);
+ }
+ if (mux == HB_MUX_MP4)
+ {
+ gboolean ipod, http, large;
+
+ ipod = ghb_settings_get_boolean(settings, "ipod_file");
+ http = ghb_settings_get_boolean(settings, "http_optimize_mp4");
+ large = ghb_settings_get_boolean(settings, "large_mp4");
+ if (http || ipod || large)
+ {
+ g_string_append_printf(str, "<b>MP4 Options:</b>");
+ if (ipod)
+ g_string_append_printf(str, " - iPod Atom");
+ if (http)
+ g_string_append_printf(str, " - Http Optimized");
+ if (large)
+ g_string_append_printf(str, " - 64 Bit");
+ g_string_append_printf(str, "\n");
+ }
+ }
+ 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");
vqvalue = 0;
gchar *vq_desc = "Error";
+ gchar *vq_units = "";
if (!vqtype)
{
vqtype = ghb_settings_get_boolean(settings, "vquality_type_target");
{
// 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");
}
+ vcodec = ghb_settings_combo_option(settings, "video_codec");
+ 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);
+
+ acodec = ghb_settings_combo_option(asettings, "audio_codec");
+ 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");
+ mix = ghb_settings_combo_option(asettings, "audio_mix");
+ 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
gint duration;
gint bitrate;
gint64 size;
- gint titleindex = ghb_settings_get_int(ud->settings, "title");
+ gint titleindex;
+
+ titleindex = ghb_settings_combo_int(ud->settings, "title");
if (titleindex < 0) return 0;
if (!ghb_get_title_info(&tinfo, titleindex)) return 0;
// already in the queue
gchar *message, *dest;
gint count, ii;
- gint titleindex = ghb_settings_get_int(ud->settings, "title");
+ gint titleindex;
+ titleindex = ghb_settings_combo_int(ud->settings, "title");
if (titleindex < 0) return FALSE;
dest = ghb_settings_get_string(ud->settings, "destination");
count = ghb_array_len(ud->queue);
settings = ghb_value_dup(ud->settings);
ghb_settings_set_int(settings, "job_status", GHB_QUEUE_PENDING);
ghb_settings_set_int(settings, "job_unique_id", 0);
- titleindex = ghb_settings_get_int(settings, "title");
+ titleindex = ghb_settings_combo_int(settings, "title");
titlenum = ghb_get_title_number(titleindex);
ghb_settings_set_int(settings, "titlenum", titlenum);
ghb_array_append(ud->queue, settings);
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
gboolean title_ok;
queue_count = ghb_array_len(ud->queue);
- titleindex = ghb_settings_get_int(ud->settings, "title");
+ titleindex = ghb_settings_combo_int(ud->settings, "title");
title_ok = (titleindex >= 0);
widget = GHB_WIDGET (ud->builder, "queue_start1");
return NULL;
}
+gchar*
+working_status_string(signal_user_data_t *ud, ghb_status_t *status)
+{
+ gchar *task_str, *job_str, *status_str;
+ gint qcount;
+ gint index;
+ GValue *js;
+
+ if (status->job_count > 1)
+ {
+ task_str = g_strdup_printf("pass %d of %d, ",
+ status->job_cur, status->job_count);
+ }
+ else
+ {
+ task_str = g_strdup("");
+ }
+ qcount = ghb_array_len(ud->queue);
+ if (qcount > 1)
+ {
+ index = find_queue_job(ud->queue, status->unique_id, &js);
+ job_str = g_strdup_printf("job %d of %d, ", index+1, qcount);
+ }
+ else
+ {
+ job_str = g_strdup("");
+ }
+ if(status->seconds > -1)
+ {
+ status_str= g_strdup_printf(
+ "Encoding: %s%s%.2f %%"
+ " (%.2f fps, avg %.2f fps, ETA %02dh%02dm%02ds)",
+ job_str, task_str,
+ 100.0 * status->progress,
+ status->rate_cur, status->rate_avg, status->hours,
+ status->minutes, status->seconds );
+ }
+ else
+ {
+ status_str= g_strdup_printf(
+ "Encoding: %s%s%.2f %%",
+ job_str, task_str,
+ 100.0 * status->progress );
+ }
+ g_free(task_str);
+ g_free(job_str);
+ return status_str;
+}
+
static void
ghb_backend_events(signal_user_data_t *ud)
{
}
else if (status.queue_state & GHB_STATE_WORKING)
{
- gchar *task_str, *job_str;
- gint qcount;
-
- if (status.job_count > 1)
- {
- task_str = g_strdup_printf("pass %d of %d, ",
- status.job_cur, status.job_count);
- }
- else
- {
- task_str = g_strdup("");
- }
- qcount = ghb_array_len(ud->queue);
- if (qcount > 1)
- {
- index = find_queue_job(ud->queue, status.unique_id, &js);
- job_str = g_strdup_printf("job %d of %d, ", index+1, qcount);
- }
- else
- {
- job_str = g_strdup("");
- }
- if(status.seconds > -1)
- {
- status_str= g_strdup_printf(
- "Encoding: %s%s%.2f %%"
- " (%.2f fps, avg %.2f fps, ETA %02dh%02dm%02ds)",
- job_str, task_str,
- 100.0 * status.progress,
- status.rate_cur, status.rate_avg, status.hours,
- status.minutes, status.seconds );
- }
- else
- {
- status_str= g_strdup_printf(
- "Encoding: %s%s%.2f %%",
- job_str, task_str,
- 100.0 * status.progress );
- }
- g_free(job_str);
- g_free(task_str);
+ status_str = working_status_string(ud, &status);
gtk_progress_bar_set_text (progress, status_str);
gtk_progress_bar_set_fraction (progress, status.progress);
g_free(status_str);
}
g_free(path);
}
+ GtkLabel *label;
+ gchar *status_str;
+
+ status_str = working_status_string(ud, &status);
+ label = GTK_LABEL(GHB_WIDGET(ud->builder, "queue_status"));
+ gtk_label_set_text (label, status_str);
+ g_free(status_str);
}
}
gint count;
g_debug("update_chapter_list ()");
- titleindex = ghb_settings_get_combo_index(ud->settings, "title");
+ titleindex = ghb_settings_combo_int(ud->settings, "title");
chapters = ghb_get_chapters(titleindex);
count = ghb_array_len(chapters);
if (chapters)
void
preview_button_clicked_cb(GtkWidget *xwidget, signal_user_data_t *ud)
{
- gint titleindex = ghb_settings_get_int(ud->settings, "title");
+ gint titleindex;
+
+ titleindex = ghb_settings_combo_int(ud->settings, "title");
if (titleindex < 0) return;
g_debug("titleindex %d", titleindex);
static gboolean
dbus_init (void)
{
- DBusError error;
+ DBusError error;
- if (dbus_connection != NULL)
- return TRUE;
+ if (dbus_connection != NULL)
+ return TRUE;
- dbus_error_init (&error);
- if (!(dbus_connection = dbus_bus_get (DBUS_BUS_SYSTEM, &error))) {
- g_debug ("could not get system bus: %s", error.message);
- dbus_error_free (&error);
- return FALSE;
- }
+ dbus_error_init (&error);
+ if (!(dbus_connection = dbus_bus_get (DBUS_BUS_SYSTEM, &error))) {
+ g_debug ("could not get system bus: %s", error.message);
+ dbus_error_free (&error);
+ return FALSE;
+ }
- //dbus_connection_setup_with_g_main (dbus_connection, NULL);
- //dbus_connection_set_exit_on_disconnect (dbus_connection, FALSE);
- //dbus_connection_add_filter (dbus_connection, gvm_dbus_filter_function, NULL, NULL);
+ //dbus_connection_setup_with_g_main (dbus_connection, NULL);
+ //dbus_connection_set_exit_on_disconnect (dbus_connection, FALSE);
+ //dbus_connection_add_filter (dbus_connection, gvm_dbus_filter_function, NULL, NULL);
- return TRUE;
+ return TRUE;
}
void
ghb_hal_init()
{
- DBusError error;
- char **devices;
- int nr;
+ DBusError error;
+ char **devices;
+ int nr;
- if (!dbus_init ())
- return;
+ if (!dbus_init ())
+ return;
- if (!(hal_ctx = libhal_ctx_new ())) {
- g_warning ("failed to create a HAL context!");
- return;
- }
+ if (!(hal_ctx = libhal_ctx_new ())) {
+ g_warning ("failed to create a HAL context!");
+ return;
+ }
- libhal_ctx_set_dbus_connection (hal_ctx, dbus_connection);
- dbus_error_init (&error);
- if (!libhal_ctx_init (hal_ctx, &error)) {
- g_warning ("libhal_ctx_init failed: %s", error.message ? error.message : "unknown");
- dbus_error_free (&error);
- libhal_ctx_free (hal_ctx);
- return;
- }
+ libhal_ctx_set_dbus_connection (hal_ctx, dbus_connection);
+ dbus_error_init (&error);
+ if (!libhal_ctx_init (hal_ctx, &error)) {
+ g_warning ("libhal_ctx_init failed: %s", error.message ? error.message : "unknown");
+ dbus_error_free (&error);
+ libhal_ctx_free (hal_ctx);
+ return;
+ }
- /*
- * Do something to ping the HAL daemon - the above functions will
- * succeed even if hald is not running, so long as DBUS is. But we
- * want to exit silently if hald is not running, to behave on
- * pre-2.6 systems.
- */
- if (!(devices = libhal_get_all_devices (hal_ctx, &nr, &error))) {
- g_warning ("seems that HAL is not running: %s", error.message ? error.message : "unknown");
- dbus_error_free (&error);
+ /*
+ * Do something to ping the HAL daemon - the above functions will
+ * succeed even if hald is not running, so long as DBUS is. But we
+ * want to exit silently if hald is not running, to behave on
+ * pre-2.6 systems.
+ */
+ if (!(devices = libhal_get_all_devices (hal_ctx, &nr, &error))) {
+ g_warning ("seems that HAL is not running: %s", error.message ? error.message : "unknown");
+ dbus_error_free (&error);
- libhal_ctx_shutdown (hal_ctx, NULL);
- libhal_ctx_free (hal_ctx);
- return;
- }
+ libhal_ctx_shutdown (hal_ctx, NULL);
+ libhal_ctx_free (hal_ctx);
+ return;
+ }
- libhal_free_string_array (devices);
+ libhal_free_string_array (devices);
- //gvm_hal_claim_branch ("/org/freedesktop/Hal/devices/local");
+ //gvm_hal_claim_branch ("/org/freedesktop/Hal/devices/local");
}
gboolean
if (unfinished)
{
message = g_strdup_printf(
- "You have %d unfinished jobs in a saved queue.\n\n"
- "Would you like to reload them?",
- unfinished);
+ "You have %d unfinished job%s in a saved queue.\n\n"
+ "Would you like to reload %s?",
+ unfinished,
+ (unfinished > 1) ? "s" : "",
+ (unfinished > 1) ? "them" : "it");
if (ghb_message_dialog(GTK_MESSAGE_QUESTION, message, "No", "Yes"))
{
GtkWidget *widget = GHB_WIDGET (ud->builder, "queue_window");
return FALSE;
}
+gboolean queue_key_press_cb(
+ GtkWidget *widget,
+ GdkEventKey *event,
+ signal_user_data_t *ud)
+{
+ GtkTreeView *treeview;
+ GtkTreeSelection *selection;
+ GtkTreeModel *store;
+ GtkTreeIter iter;
+ gint row;
+ gint *indices;
+ gint unique_id;
+ GValue *settings;
+ gint status;
+
+ g_message("queue_key_press_cb ()");
+ treeview = GTK_TREE_VIEW(GHB_WIDGET(ud->builder, "queue_list"));
+ store = gtk_tree_view_get_model(treeview);
+
+ selection = gtk_tree_view_get_selection (treeview);
+ if (gtk_tree_selection_get_selected(selection, &store, &iter))
+ {
+ GtkTreePath *treepath;
+
+ treepath = gtk_tree_model_get_path (store, &iter);
+ // Find the entry in the queue
+ indices = gtk_tree_path_get_indices (treepath);
+ row = indices[0];
+ // Can only free the treepath After getting what I need from
+ // indices since this points into treepath somewhere.
+ gtk_tree_path_free (treepath);
+ if (row < 0) return FALSE;
+ if (row >= ghb_array_len(ud->queue))
+ return FALSE;
+ settings = ghb_array_get_nth(ud->queue, row);
+ status = ghb_settings_get_int(settings, "job_status");
+ if (status == GHB_QUEUE_RUNNING)
+ {
+ // Ask if wants to stop encode.
+ if (!cancel_encode(NULL))
+ {
+ return FALSE;
+ }
+ unique_id = ghb_settings_get_int(settings, "job_unique_id");
+ ghb_remove_job(unique_id);
+ }
+ // Remove the selected item
+ gtk_tree_store_remove(GTK_TREE_STORE(store), &iter);
+ // Remove the corresponding item from the queue list
+ GValue *old = ghb_array_get_nth(ud->queue, row);
+ ghb_value_free(old);
+ ghb_array_remove(ud->queue, row);
+ ghb_save_queue(ud->queue);
+ }
+ return FALSE;
+}
+
+gchar*
+format_deblock_cb(GtkScale *scale, gdouble val, signal_user_data_t *ud)
+{
+ if (val < 5.0)
+ {
+ return g_strdup_printf("Off");
+ }
+ else
+ {
+ return g_strdup_printf("%d", (gint)val);
+ }
+}