summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--gtk/src/callbacks.c65
-rw-r--r--gtk/src/hb-backend.c18
-rw-r--r--gtk/src/hb-backend.h4
3 files changed, 44 insertions, 43 deletions
diff --git a/gtk/src/callbacks.c b/gtk/src/callbacks.c
index 5027f9128..1383f7b9d 100644
--- a/gtk/src/callbacks.c
+++ b/gtk/src/callbacks.c
@@ -1389,52 +1389,59 @@ void ghb_break_duration(gint64 duration, gint *hh, gint *mm, gint *ss)
*ss = duration % 60;
}
-static void
-update_title_duration(signal_user_data_t *ud)
+gint64
+ghb_title_range_get_duration(GhbValue * settings, const hb_title_t * title)
{
- gint hh, mm, ss, start, end;
- gchar *text;
- GtkWidget *widget;
- int title_id, titleindex;
- const hb_title_t *title;
-
- title_id = ghb_dict_get_int(ud->settings, "title");
- title = ghb_lookup_title(title_id, &titleindex);
- widget = GHB_WIDGET (ud->builder, "title_duration");
+ gint64 start, end;
- if (ghb_settings_combo_int(ud->settings, "PtoPType") == 0)
+ if (ghb_settings_combo_int(settings, "PtoPType") == 0)
{
- start = ghb_dict_get_int(ud->settings, "start_point");
- end = ghb_dict_get_int(ud->settings, "end_point");
- ghb_part_duration(title, start, end, &hh, &mm, &ss);
+ start = ghb_dict_get_int(settings, "start_point");
+ end = ghb_dict_get_int(settings, "end_point");
+ return ghb_chapter_range_get_duration(title, start, end) / 90000;
}
- else if (ghb_settings_combo_int(ud->settings, "PtoPType") == 1)
+ else if (ghb_settings_combo_int(settings, "PtoPType") == 1)
{
- gint duration;
-
- start = ghb_dict_get_int(ud->settings, "start_point");
- end = ghb_dict_get_int(ud->settings, "end_point");
- duration = end - start;
- ghb_break_duration(duration, &hh, &mm, &ss);
+ start = ghb_dict_get_int(settings, "start_point");
+ end = ghb_dict_get_int(settings, "end_point");
+ return end - start;
}
- else if (ghb_settings_combo_int(ud->settings, "PtoPType") == 2)
+ else if (ghb_settings_combo_int(settings, "PtoPType") == 2)
{
if (title != NULL)
{
gint64 frames;
- gint duration;
- start = ghb_dict_get_int(ud->settings, "start_point");
- end = ghb_dict_get_int(ud->settings, "end_point");
+ start = ghb_dict_get_int(settings, "start_point");
+ end = ghb_dict_get_int(settings, "end_point");
frames = end - start + 1;
- duration = frames * title->vrate.den / title->vrate.num;
- ghb_break_duration(duration, &hh, &mm, &ss);
+ return frames * title->vrate.den / title->vrate.num;
}
else
{
- hh = mm = ss = 0;
+ return 0;
}
}
+ return 0;
+}
+
+static void
+update_title_duration(signal_user_data_t *ud)
+{
+ gint hh, mm, ss;
+ gint64 duration;
+ gchar *text;
+ GtkWidget *widget;
+ int title_id, titleindex;
+ const hb_title_t *title;
+
+ title_id = ghb_dict_get_int(ud->settings, "title");
+ title = ghb_lookup_title(title_id, &titleindex);
+ widget = GHB_WIDGET (ud->builder, "title_duration");
+
+ duration = ghb_title_range_get_duration(ud->settings, title);
+ ghb_break_duration(duration, &hh, &mm, &ss);
+
text = g_strdup_printf("%02d:%02d:%02d", hh, mm, ss);
gtk_label_set_text(GTK_LABEL(widget), text);
g_free(text);
diff --git a/gtk/src/hb-backend.c b/gtk/src/hb-backend.c
index c79b821b7..04072d4c2 100644
--- a/gtk/src/hb-backend.c
+++ b/gtk/src/hb-backend.c
@@ -3139,26 +3139,23 @@ init_ui_combo_boxes(GtkBuilder *builder)
}
}
-void
-ghb_part_duration(const hb_title_t *title, gint sc, gint ec, gint *hh, gint *mm, gint *ss)
+gint64
+ghb_chapter_range_get_duration(const hb_title_t *title, gint sc, gint ec)
{
hb_chapter_t * chapter;
gint count, c;
gint64 duration;
- *hh = *mm = *ss = 0;
- if (title == NULL) return;
+ if (title == NULL) return 0;
- *hh = title->hours;
- *mm = title->minutes;
- *ss = title->seconds;
+ duration = title->duration;
count = hb_list_count(title->list_chapter);
if (sc > count) sc = count;
if (ec > count) ec = count;
if (sc == 1 && ec == count)
- return;
+ return duration;
duration = 0;
for (c = sc; c <= ec; c++)
@@ -3166,10 +3163,7 @@ ghb_part_duration(const hb_title_t *title, gint sc, gint ec, gint *hh, gint *mm,
chapter = hb_list_item(title->list_chapter, c-1);
duration += chapter->duration;
}
-
- *hh = duration / 90000 / 3600;
- *mm = ((duration / 90000) % 3600) / 60;
- *ss = (duration / 90000) % 60;
+ return duration;
}
gint64
diff --git a/gtk/src/hb-backend.h b/gtk/src/hb-backend.h
index 4bcd41a59..18d2f2199 100644
--- a/gtk/src/hb-backend.h
+++ b/gtk/src/hb-backend.h
@@ -131,8 +131,8 @@ void ghb_set_scale_settings(GhbValue *settings, gint mode);
void ghb_picture_settings_deps(signal_user_data_t *ud);
gint64 ghb_get_chapter_duration(const hb_title_t *title, gint chap);
gint64 ghb_get_chapter_start(const hb_title_t *title, gint chap);
-void ghb_part_duration(
- const hb_title_t *title, gint sc, gint ec, gint *hh, gint *mm, gint *ss);
+gint64 ghb_chapter_range_get_duration(const hb_title_t *title,
+ gint sc, gint ec);
gint ghb_get_best_mix(hb_audio_config_t *aconfig, gint acodec, gint mix);
gboolean ghb_audio_is_passthru(gint acodec);
gboolean ghb_audio_can_passthru(gint acodec);