summaryrefslogtreecommitdiffstats
path: root/gtk/src
diff options
context:
space:
mode:
authorjstebbins <[email protected]>2009-12-23 00:05:05 +0000
committerjstebbins <[email protected]>2009-12-23 00:05:05 +0000
commit93416da6f241eba72979685ab98f89e33ae6f2e0 (patch)
tree91f936c05910572257bdcaaddb01ea0ca27159ef /gtk/src
parent2e7008572201e59568805cb38c1dd1dc8ad4ae42 (diff)
LinGui: add point-to-point
the user can now select between chapter, seconds, or frame start and end points for encoding. git-svn-id: svn://svn.handbrake.fr/HandBrake/trunk@3041 b64f7644-9d1e-0410-96f1-a4d463321fa5
Diffstat (limited to 'gtk/src')
-rw-r--r--gtk/src/callbacks.c346
-rw-r--r--gtk/src/ghb.ui293
-rw-r--r--gtk/src/hb-backend.c75
-rw-r--r--gtk/src/internal_defaults.xml8
-rw-r--r--gtk/src/presets.c24
-rw-r--r--gtk/src/queuehandler.c23
-rw-r--r--gtk/src/settings.h1
-rw-r--r--gtk/src/widgetdeps.c7
8 files changed, 554 insertions, 223 deletions
diff --git a/gtk/src/callbacks.c b/gtk/src/callbacks.c
index 087185dcf..246f56b92 100644
--- a/gtk/src/callbacks.c
+++ b/gtk/src/callbacks.c
@@ -296,7 +296,7 @@ on_quit1_activate(GtkMenuItem *quit, signal_user_data_t *ud)
{
gint state = ghb_get_queue_state();
g_debug("on_quit1_activate ()");
- if (state & GHB_STATE_WORKING)
+ if (state & (GHB_STATE_WORKING|GHB_STATE_SEARCHING))
{
if (ghb_cancel_encode2(ud, "Closing HandBrake will terminate encoding.\n"))
{
@@ -580,7 +580,8 @@ set_destination(signal_user_data_t *ud)
title = ghb_settings_combo_int(ud->settings, "title");
g_string_append_printf(str, " - %d", title+1);
}
- if (ghb_settings_get_boolean(
+ if (ghb_settings_combo_int(ud->settings, "PtoPType") == 0 &&
+ ghb_settings_get_boolean(
ud->settings, "chapters_in_destination"))
{
gint start, end;
@@ -590,8 +591,8 @@ set_destination(signal_user_data_t *ud)
{
g_string_append_printf(str, " -");
}
- start = ghb_settings_get_int(ud->settings, "start_chapter");
- end = ghb_settings_get_int(ud->settings, "end_chapter");
+ start = ghb_settings_get_int(ud->settings, "start_point");
+ end = ghb_settings_get_int(ud->settings, "end_point");
if (start == end)
g_string_append_printf(str, " Ch %d", start);
else
@@ -1259,7 +1260,7 @@ window_delete_event_cb(GtkWidget *widget, GdkEvent *event, signal_user_data_t *u
{
gint state = ghb_get_queue_state();
g_debug("window_delete_event_cb ()");
- if (state & GHB_STATE_WORKING)
+ if (state & (GHB_STATE_WORKING|GHB_STATE_SEARCHING))
{
if (ghb_cancel_encode2(ud, "Closing HandBrake will terminate encoding.\n"))
{
@@ -1334,9 +1335,45 @@ update_title_duration(signal_user_data_t *ud)
ti = ghb_settings_combo_int(ud->settings, "title");
widget = GHB_WIDGET (ud->builder, "title_duration");
- start = ghb_settings_get_int(ud->settings, "start_chapter");
- end = ghb_settings_get_int(ud->settings, "end_chapter");
- ghb_part_duration(ti, start, end, &hh, &mm, &ss);
+ if (ghb_settings_combo_int(ud->settings, "PtoPType") == 0)
+ {
+ start = ghb_settings_get_int(ud->settings, "start_point");
+ end = ghb_settings_get_int(ud->settings, "end_point");
+ ghb_part_duration(ti, start, end, &hh, &mm, &ss);
+ }
+ else if (ghb_settings_combo_int(ud->settings, "PtoPType") == 1)
+ {
+ gint duration;
+
+ start = ghb_settings_get_int(ud->settings, "start_point");
+ end = ghb_settings_get_int(ud->settings, "end_point");
+ duration = end - start;
+ hh = duration / (60*60);
+ mm = (duration / 60) % 60;
+ ss = duration % 60;
+ }
+ else if (ghb_settings_combo_int(ud->settings, "PtoPType") == 2)
+ {
+ ghb_title_info_t tinfo;
+
+ if (ghb_get_title_info (&tinfo, ti))
+ {
+ gint64 frames;
+ gint duration;
+
+ start = ghb_settings_get_int(ud->settings, "start_point");
+ end = ghb_settings_get_int(ud->settings, "end_point");
+ frames = end - start + 1;
+ duration = frames * tinfo.rate_base / tinfo.rate;
+ hh = duration / (60*60);
+ mm = (duration / 60) % 60;
+ ss = duration % 60;
+ }
+ else
+ {
+ hh = mm = ss = 0;
+ }
+ }
text = g_strdup_printf("%02d:%02d:%02d", hh, mm, ss);
gtk_label_set_text (GTK_LABEL(widget), text);
g_free(text);
@@ -1429,17 +1466,46 @@ show_title_info(signal_user_data_t *ud, ghb_title_info_t *tinfo)
gtk_label_set_text (GTK_LABEL(widget), text);
g_free(text);
- g_debug("setting max end chapter %d", tinfo->num_chapters);
- widget = GHB_WIDGET (ud->builder, "end_chapter");
- gtk_spin_button_set_range (GTK_SPIN_BUTTON(widget), 1, tinfo->num_chapters);
- gtk_spin_button_set_value (GTK_SPIN_BUTTON(widget), tinfo->num_chapters);
- widget = GHB_WIDGET (ud->builder, "start_chapter");
- gtk_spin_button_set_value (GTK_SPIN_BUTTON(widget), 1);
- gtk_spin_button_set_range (GTK_SPIN_BUTTON(widget), 1, tinfo->num_chapters);
+
+ gint duration = tinfo->duration / 90000;
+
+ if (ghb_settings_combo_int(ud->settings, "PtoPType") == 0)
+ {
+ widget = GHB_WIDGET (ud->builder, "start_point");
+ gtk_spin_button_set_range (GTK_SPIN_BUTTON(widget), 1, tinfo->num_chapters);
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON(widget), 1);
+
+ widget = GHB_WIDGET (ud->builder, "end_point");
+ gtk_spin_button_set_range (GTK_SPIN_BUTTON(widget), 1, tinfo->num_chapters);
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON(widget), tinfo->num_chapters);
+ }
+ else if (ghb_settings_combo_int(ud->settings, "PtoPType") == 1)
+ {
+
+ widget = GHB_WIDGET (ud->builder, "start_point");
+ gtk_spin_button_set_range (GTK_SPIN_BUTTON(widget), 0, duration-1);
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON(widget), 0);
+
+ widget = GHB_WIDGET (ud->builder, "end_point");
+ gtk_spin_button_set_range (GTK_SPIN_BUTTON(widget), 1, duration);
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON(widget), duration);
+ }
+ else if (ghb_settings_combo_int(ud->settings, "PtoPType") == 2)
+ {
+ gdouble max_frames = (gdouble)duration * tinfo->rate / tinfo->rate_base;
+ widget = GHB_WIDGET (ud->builder, "start_point");
+ gtk_spin_button_set_range (GTK_SPIN_BUTTON(widget), 1, max_frames);
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON(widget), 1);
+
+ widget = GHB_WIDGET (ud->builder, "end_point");
+ gtk_spin_button_set_range (GTK_SPIN_BUTTON(widget), 1, max_frames);
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON(widget), max_frames);
+ }
widget = GHB_WIDGET (ud->builder, "angle");
gtk_spin_button_set_value (GTK_SPIN_BUTTON(widget), 1);
gtk_spin_button_set_range (GTK_SPIN_BUTTON(widget), 1, tinfo->angle_count);
+ ghb_settings_set_int(ud->settings, "angle_count", tinfo->angle_count);
ud->dont_clear_presets = FALSE;
}
@@ -1453,7 +1519,6 @@ title_changed_cb(GtkWidget *widget, signal_user_data_t *ud)
g_debug("title_changed_cb ()");
ghb_widget_to_setting(ud->settings, widget);
- ghb_check_dependency(ud, widget, NULL);
titleindex = ghb_settings_combo_int(ud->settings, "title");
ghb_update_ui_combo_box (ud, "AudioTrack", titleindex, FALSE);
@@ -1463,6 +1528,7 @@ title_changed_cb(GtkWidget *widget, signal_user_data_t *ud)
{
show_title_info(ud, &tinfo);
}
+ ghb_check_dependency(ud, widget, NULL);
update_chapter_list (ud);
ghb_adjust_audio_rate_combos(ud);
ghb_set_pref_audio(titleindex, ud);
@@ -1494,7 +1560,7 @@ title_changed_cb(GtkWidget *widget, signal_user_data_t *ud)
gint end;
widget = GHB_WIDGET (ud->builder, "ChapterMarkers");
gtk_widget_set_sensitive(widget, TRUE);
- end = ghb_settings_get_int(ud->settings, "end_chapter");
+ end = ghb_settings_get_int(ud->settings, "end_point");
if (1 == end)
{
ud->dont_clear_presets = TRUE;
@@ -1505,6 +1571,54 @@ title_changed_cb(GtkWidget *widget, signal_user_data_t *ud)
}
G_MODULE_EXPORT void
+ptop_widget_changed_cb(GtkWidget *widget, signal_user_data_t *ud)
+{
+ gint ti;
+ ghb_title_info_t tinfo;
+
+ ghb_widget_to_setting(ud->settings, widget);
+ ghb_check_dependency(ud, widget, NULL);
+ ghb_live_reset(ud);
+
+ ti = ghb_settings_combo_int(ud->settings, "title");
+ if (!ghb_get_title_info (&tinfo, ti))
+ return;
+
+ gint duration = tinfo.duration / 90000;
+ if (ghb_settings_combo_int(ud->settings, "PtoPType") == 0)
+ {
+ widget = GHB_WIDGET (ud->builder, "start_point");
+ gtk_spin_button_set_range (GTK_SPIN_BUTTON(widget), 1, tinfo.num_chapters);
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON(widget), 1);
+
+ widget = GHB_WIDGET (ud->builder, "end_point");
+ gtk_spin_button_set_range (GTK_SPIN_BUTTON(widget), 1, tinfo.num_chapters);
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON(widget), tinfo.num_chapters);
+ }
+ else if (ghb_settings_combo_int(ud->settings, "PtoPType") == 1)
+ {
+ widget = GHB_WIDGET (ud->builder, "start_point");
+ gtk_spin_button_set_range (GTK_SPIN_BUTTON(widget), 0, duration-1);
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON(widget), 0);
+
+ widget = GHB_WIDGET (ud->builder, "end_point");
+ gtk_spin_button_set_range (GTK_SPIN_BUTTON(widget), 1, duration);
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON(widget), duration);
+ }
+ else if (ghb_settings_combo_int(ud->settings, "PtoPType") == 2)
+ {
+ gdouble max_frames = (gdouble)duration * tinfo.rate / tinfo.rate_base;
+ widget = GHB_WIDGET (ud->builder, "start_point");
+ gtk_spin_button_set_range (GTK_SPIN_BUTTON(widget), 1, max_frames);
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON(widget), 1);
+
+ widget = GHB_WIDGET (ud->builder, "end_point");
+ gtk_spin_button_set_range (GTK_SPIN_BUTTON(widget), 1, max_frames);
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON(widget), max_frames);
+ }
+}
+
+G_MODULE_EXPORT void
setting_widget_changed_cb(GtkWidget *widget, signal_user_data_t *ud)
{
ghb_widget_to_setting(ud->settings, widget);
@@ -1596,65 +1710,107 @@ target_size_changed_cb(GtkWidget *widget, signal_user_data_t *ud)
}
G_MODULE_EXPORT void
-start_chapter_changed_cb(GtkWidget *widget, signal_user_data_t *ud)
+start_point_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);
+ g_debug("start_point_changed_cb () %s", name);
ghb_widget_to_setting(ud->settings, widget);
- start = ghb_settings_get_int(ud->settings, "start_chapter");
- end = ghb_settings_get_int(ud->settings, "end_chapter");
- if (start > end)
- ghb_ui_update(ud, "end_chapter", ghb_int_value(start));
- ghb_check_dependency(ud, widget, NULL);
- if (ghb_settings_get_boolean(ud->settings, "chapters_in_destination"))
+ if (ghb_settings_combo_int(ud->settings, "PtoPType") == 0)
+ {
+ start = ghb_settings_get_int(ud->settings, "start_point");
+ end = ghb_settings_get_int(ud->settings, "end_point");
+ if (start > end)
+ ghb_ui_update(ud, "end_point", ghb_int_value(start));
+ ghb_check_dependency(ud, widget, NULL);
+ if (ghb_settings_get_boolean(ud->settings, "chapters_in_destination"))
+ {
+ set_destination(ud);
+ }
+ widget = GHB_WIDGET (ud->builder, "ChapterMarkers");
+ gtk_widget_set_sensitive(widget, TRUE);
+ // End may have been changed above, get it again
+ end = ghb_settings_get_int(ud->settings, "end_point");
+ if (start == end)
+ {
+ ud->dont_clear_presets = TRUE;
+ ghb_ui_update(ud, "ChapterMarkers", ghb_boolean_value(FALSE));
+ ud->dont_clear_presets = FALSE;
+ gtk_widget_set_sensitive(widget, FALSE);
+ }
+ update_title_duration(ud);
+ }
+ else if (ghb_settings_combo_int(ud->settings, "PtoPType") == 1)
{
- set_destination(ud);
+ start = ghb_settings_get_int(ud->settings, "start_point");
+ end = ghb_settings_get_int(ud->settings, "end_point");
+ if (start >= end)
+ ghb_ui_update(ud, "end_point", ghb_int_value(start+1));
+ ghb_check_dependency(ud, widget, NULL);
+ update_title_duration(ud);
}
- widget = GHB_WIDGET (ud->builder, "ChapterMarkers");
- gtk_widget_set_sensitive(widget, TRUE);
- // End may have been changed above, get it again
- end = ghb_settings_get_int(ud->settings, "end_chapter");
- if (start == end)
+ else if (ghb_settings_combo_int(ud->settings, "PtoPType") == 2)
{
- ud->dont_clear_presets = TRUE;
- ghb_ui_update(ud, "ChapterMarkers", ghb_boolean_value(FALSE));
- ud->dont_clear_presets = FALSE;
- gtk_widget_set_sensitive(widget, FALSE);
+ start = ghb_settings_get_int(ud->settings, "start_point");
+ end = ghb_settings_get_int(ud->settings, "end_point");
+ if (start > end)
+ ghb_ui_update(ud, "end_point", ghb_int_value(start));
+ ghb_check_dependency(ud, widget, NULL);
+ update_title_duration(ud);
}
- update_title_duration(ud);
}
G_MODULE_EXPORT void
-end_chapter_changed_cb(GtkWidget *widget, signal_user_data_t *ud)
+end_point_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);
+ g_debug("end_point_changed_cb () %s", name);
ghb_widget_to_setting(ud->settings, widget);
- start = ghb_settings_get_int(ud->settings, "start_chapter");
- end = ghb_settings_get_int(ud->settings, "end_chapter");
- if (start > end)
- ghb_ui_update(ud, "start_chapter", ghb_int_value(end));
- ghb_check_dependency(ud, widget, NULL);
- if (ghb_settings_get_boolean(ud->settings, "chapters_in_destination"))
+ if (ghb_settings_combo_int(ud->settings, "PtoPType") == 0)
+ {
+ start = ghb_settings_get_int(ud->settings, "start_point");
+ end = ghb_settings_get_int(ud->settings, "end_point");
+ if (start > end)
+ ghb_ui_update(ud, "start_point", ghb_int_value(end));
+ ghb_check_dependency(ud, widget, NULL);
+ if (ghb_settings_get_boolean(ud->settings, "chapters_in_destination"))
+ {
+ set_destination(ud);
+ }
+ widget = GHB_WIDGET (ud->builder, "ChapterMarkers");
+ gtk_widget_set_sensitive(widget, TRUE);
+ // Start may have been changed above, get it again
+ start = ghb_settings_get_int(ud->settings, "start_point");
+ if (start == end)
+ {
+ ud->dont_clear_presets = TRUE;
+ ghb_ui_update(ud, "ChapterMarkers", ghb_boolean_value(FALSE));
+ ud->dont_clear_presets = FALSE;
+ gtk_widget_set_sensitive(widget, FALSE);
+ }
+ update_title_duration(ud);
+ }
+ else if (ghb_settings_combo_int(ud->settings, "PtoPType") == 1)
{
- set_destination(ud);
+ start = ghb_settings_get_int(ud->settings, "start_point");
+ end = ghb_settings_get_int(ud->settings, "end_point");
+ if (start >= end)
+ ghb_ui_update(ud, "start_point", ghb_int_value(end-1));
+ ghb_check_dependency(ud, widget, NULL);
+ update_title_duration(ud);
}
- widget = GHB_WIDGET (ud->builder, "ChapterMarkers");
- gtk_widget_set_sensitive(widget, TRUE);
- // Start may have been changed above, get it again
- start = ghb_settings_get_int(ud->settings, "start_chapter");
- if (start == end)
+ else if (ghb_settings_combo_int(ud->settings, "PtoPType") == 2)
{
- ud->dont_clear_presets = TRUE;
- ghb_ui_update(ud, "ChapterMarkers", ghb_boolean_value(FALSE));
- ud->dont_clear_presets = FALSE;
- gtk_widget_set_sensitive(widget, FALSE);
+ start = ghb_settings_get_int(ud->settings, "start_point");
+ end = ghb_settings_get_int(ud->settings, "end_point");
+ if (start > end)
+ ghb_ui_update(ud, "start_point", ghb_int_value(end));
+ ghb_check_dependency(ud, widget, NULL);
+ update_title_duration(ud);
}
- update_title_duration(ud);
}
G_MODULE_EXPORT void
@@ -2388,6 +2544,46 @@ working_status_string(signal_user_data_t *ud, ghb_instance_status_t *status)
return status_str;
}
+gchar*
+searching_status_string(signal_user_data_t *ud, ghb_instance_status_t *status)
+{
+ gchar *task_str, *job_str, *status_str;
+ gint qcount;
+ gint index;
+ GValue *js;
+
+ qcount = ghb_array_len(ud->queue);
+ index = find_queue_job(ud->queue, status->unique_id, &js);
+ if (qcount > 1)
+ {
+ job_str = g_strdup_printf("job %d of %d, ", index+1, qcount);
+ }
+ else
+ {
+ job_str = g_strdup("");
+ }
+ task_str = g_strdup_printf("Searching for start time, ");
+ if(status->seconds > -1)
+ {
+ status_str= g_strdup_printf(
+ "Encoding: %s%s%.2f %%"
+ " (ETA %02dh%02dm%02ds)",
+ job_str, task_str,
+ 100.0 * status->progress,
+ 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)
{
@@ -2526,6 +2722,44 @@ ghb_backend_events(signal_user_data_t *ud)
{
gtk_label_set_text (work_status, "Paused");
}
+ else if (status.queue.state & GHB_STATE_SEARCHING)
+ {
+ static gint working = 0;
+
+ // This needs to be in scanning and working since scanning
+ // happens fast enough that it can be missed
+ index = find_queue_job(ud->queue, status.queue.unique_id, &js);
+ if (status.queue.unique_id != 0 && index >= 0)
+ {
+ gchar working_icon[] = "hb-working0";
+ working_icon[10] = '0' + working;
+ working = (working+1) % 6;
+ treeview = GTK_TREE_VIEW(GHB_WIDGET(ud->builder, "queue_list"));
+ store = GTK_TREE_STORE(gtk_tree_view_get_model(treeview));
+ gchar *path = g_strdup_printf ("%d", index);
+ if (gtk_tree_model_get_iter_from_string(
+ GTK_TREE_MODEL(store), &iter, path))
+ {
+ gtk_tree_store_set(store, &iter, 0, working_icon, -1);
+ }
+ g_free(path);
+ }
+ GtkLabel *label;
+ gchar *status_str;
+
+ status_str = searching_status_string(ud, &status.queue);
+ label = GTK_LABEL(GHB_WIDGET(ud->builder, "queue_status"));
+ gtk_label_set_text (label, status_str);
+#if !GTK_CHECK_VERSION(2, 16, 0)
+ GtkStatusIcon *si;
+
+ si = GTK_STATUS_ICON(GHB_OBJECT(ud->builder, "hb_status"));
+ gtk_status_icon_set_tooltip(si, status_str);
+#endif
+ gtk_label_set_text (work_status, status_str);
+ gtk_progress_bar_set_fraction (progress, status.queue.progress);
+ g_free(status_str);
+ }
else if (status.queue.state & GHB_STATE_WORKING)
{
static gint working = 0;
@@ -2693,6 +2927,8 @@ status_icon_query_tooltip_cb(
ghb_get_status(&status);
if (status.queue.state & GHB_STATE_WORKING)
status_str = working_status_string(ud, &status.queue);
+ else if (status.queue.state & GHB_STATE_SEARCHING)
+ status_str = searching_status_string(ud, &status.queue);
else if (status.queue.state & GHB_STATE_WORKDONE)
status_str = g_strdup("Encode Complete");
else
diff --git a/gtk/src/ghb.ui b/gtk/src/ghb.ui
index 17490b7bc..102214c0f 100644
--- a/gtk/src/ghb.ui
+++ b/gtk/src/ghb.ui
@@ -249,6 +249,22 @@
<property name="page_size">0</property>
<property name="value">0</property>
</object>
+ <object class="GtkAdjustment" id="adjustment32">
+ <property name="upper">99999</property>
+ <property name="lower">0</property>
+ <property name="page_increment">60</property>
+ <property name="step_increment">1</property>
+ <property name="page_size">0</property>
+ <property name="value">99999</property>
+ </object>
+ <object class="GtkAdjustment" id="adjustment33">
+ <property name="upper">99999</property>
+ <property name="lower">1</property>
+ <property name="page_increment">60</property>
+ <property name="step_increment">1</property>
+ <property name="page_size">0</property>
+ <property name="value">0</property>
+ </object>
<object class="GtkAdjustment" id="preview_progress_adj">
<property name="upper">100</property>
<property name="lower">0</property>
@@ -726,128 +742,62 @@
</packing>
</child>
<child>
- <object class="GtkAlignment" id="alignment72">
+ <object class="GtkTable" id="table7">
<property name="visible">True</property>
- <property name="top_padding">6</property>
- <property name="left_padding">6</property>
+ <property name="n_rows">2</property>
+ <property name="n_columns">2</property>
+ <property name="column-spacing">5</property>
<child>
- <object class="GtkHBox" id="hbox8">
+ <object class="GtkAlignment" id="alignment72">
<property name="visible">True</property>
- <property name="spacing">4</property>
+ <property name="top_padding">6</property>
+ <property name="left_padding">6</property>
<child>
<object class="GtkLabel" id="label20">
<property name="visible">True</property>
- <property name="label" translatable="yes">Title</property>
+ <property name="xalign">0.1</property>
+ <property name="label" translatable="yes">Title:</property>
</object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- <child>
- <object class="GtkComboBox" id="title">
- <property name="visible">True</property>
- <property name="has_frame">False</property>
- <property name="tooltip-text" translatable="yes">Set the title to encode. By default the longest title is chosen. This is often the feature title of a DVD.</property>
- <signal handler="title_changed_cb" name="changed"/>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="position">1</property>
- </packing>
</child>
</object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="right_attach">1</property>
+ <property name="top_attach">0</property>
+ <property name="bottom_attach">1</property>
+ <property name="x_options">GTK_FILL</property>
+ </packing>
</child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkAlignment" id="alignment65">
- <property name="visible">True</property>
- <property name="left_padding">6</property>
- <property name="bottom_padding">6</property>
<child>
- <object class="GtkHBox" id="hbox5">
+ <object class="GtkHBox" id="hbox42">
<property name="visible">True</property>
- <property name="spacing">4</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="spacing">5</property>
+
<child>
- <object class="GtkAlignment" id="chapter_box">
+ <object class="GtkAlignment" id="alignment75">
<property name="visible">True</property>
- <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="xalign">0</property>
<property name="xscale">0</property>
- <property name="left_padding">0</property>
- <child>
- <object class="GtkHBox" id="hbox4">
- <property name="visible">True</property>
- <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
- <child>
- <object class="GtkLabel" id="label4">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Chapters</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- <child>
- <object class="GtkSpinButton" id="start_chapter">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
- <property name="tooltip-text" translatable="yes">Set the first chapter to encode.</property>
- <property name="adjustment">adjustment1</property>
- <signal handler="start_chapter_changed_cb" name="value_changed"/>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="label5">
- <property name="visible">True</property>
- <property name="label" translatable="yes"> through </property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">2</property>
- </packing>
- </child>
- <child>
- <object class="GtkSpinButton" id="end_chapter">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
- <property name="tooltip-text" translatable="yes">Set the last chapter to encode.</property>
- <property name="adjustment">adjustment2</property>
- <signal handler="end_chapter_changed_cb" name="value_changed"/>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="position">3</property>
- </packing>
- </child>
- </object>
- </child>
+ <property name="yscale">0</property>
+ <child>
+ <object class="GtkComboBox" id="title">
+ <property name="visible">True</property>
+ <property name="has_frame">False</property>
+ <property name="tooltip-text" translatable="yes">Set the title to encode. By default the longest title is chosen. This is often the feature title of a DVD.</property>
+ <signal handler="title_changed_cb" name="changed"/>
+ </object>
+ </child>
+
</object>
- <packing>
- <property name="expand">False</property>
- <property name="position">2</property>
- </packing>
</child>
+
<child>
- <object class="GtkAlignment" id="alignment47">
+ <object class="GtkAlignment" id="alignment73">
<property name="visible">True</property>
- <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
- <property name="xalign">0</property>
+ <property name="xalign">1</property>
<property name="xscale">0</property>
- <property name="left_padding">8</property>
+ <property name="yscale">0</property>
<child>
<object class="GtkHBox" id="hbox44">
<property name="visible">True</property>
@@ -861,7 +811,7 @@
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
- <property name="position">4</property>
+ <property name="position">0</property>
</packing>
</child>
<child>
@@ -875,54 +825,111 @@
</object>
<packing>
<property name="expand">False</property>
- <property name="position">5</property>
+ <property name="position">1</property>
</packing>
</child>
</object>
</child>
</object>
- <packing>
- <property name="expand">False</property>
- <property name="position">3</property>
- </packing>
</child>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">0</property>
+ <property name="bottom_attach">1</property>
+ </packing>
+ </child>
+
+ <child>
+ <object class="GtkAlignment" id="alignment74">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="xscale">0</property>
+ <property name="yscale">0</property>
<child>
- <object class="GtkAlignment" id="alignment41">
+ <object class="GtkHBox" id="hbox48">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
- <property name="xalign">0</property>
- <property name="xscale">0</property>
- <property name="left_padding">8</property>
+ <property name="spacing">5</property>
+
<child>
- <object class="GtkHBox" id="hbox42">
+ <object class="GtkComboBox" id="PtoPType">
<property name="visible">True</property>
+ <property name="tooltip-text" translatable="yes">Format to mux encoded tracks to.</property>
+ <signal handler="ptop_widget_changed_cb" name="changed"/>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkSpinButton" id="start_point">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
- <property name="spacing">7</property>
- <child>
- <object class="GtkLabel" id="label6">
- <property name="visible">True</property>
- <property name="xalign">0.10000000149011612</property>
- <property name="label" translatable="yes">Duration:</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="title_duration">
- <property name="visible">True</property>
- <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
- <property name="xalign">0</property>
- <property name="label" translatable="yes">hh:mm:ss</property>
- <property name="width_chars">8</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="position">1</property>
- </packing>
- </child>
+ <property name="tooltip-text" translatable="yes">Set the first chapter to encode.</property>
+ <property name="adjustment">adjustment1</property>
+ <signal handler="start_point_changed_cb" name="value_changed"/>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label56">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">through</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkSpinButton" id="end_point">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="tooltip-text" translatable="yes">Set the last chapter to encode.</property>
+ <property name="adjustment">adjustment2</property>
+ <signal handler="end_point_changed_cb" name="value_changed"/>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">3</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkHBox" id="hbox47">
+ <property name="visible">True</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="spacing">7</property>
+ <child>
+ <object class="GtkLabel" id="label6">
+ <property name="visible">True</property>
+ <property name="xalign">0.1</property>
+ <property name="label" translatable="yes">Duration:</property>
</object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="title_duration">
+ <property name="visible">True</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">hh:mm:ss</property>
+ <property name="width_chars">8</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">1</property>
+ </packing>
</child>
</object>
<packing>
@@ -930,12 +937,20 @@
<property name="position">4</property>
</packing>
</child>
+ </object>
+ </child>
</object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ </packing>
</child>
</object>
<packing>
<property name="expand">False</property>
- <property name="position">2</property>
+ <property name="position">1</property>
</packing>
</child>
</object>
@@ -958,7 +973,7 @@
<property name="visible">True</property>
<property name="spacing">12</property>
<child>
- <object class="GtkTable" id="table3">
+ <object class="GtkTable" id="table4">
<property name="visible">True</property>
<property name="n_rows">2</property>
<property name="n_columns">2</property>
diff --git a/gtk/src/hb-backend.c b/gtk/src/hb-backend.c
index 2a60fecc3..b577a5b00 100644
--- a/gtk/src/hb-backend.c
+++ b/gtk/src/hb-backend.c
@@ -70,6 +70,18 @@ index_str_init(gint max_index)
}
}
+static options_map_t d_point_to_point_opts[] =
+{
+ {"Chapters:", "chapter", 0, "0"},
+ {"Seconds:", "time", 1, "1"},
+ {"Frames:", "frame", 2, "2"},
+};
+combo_opts_t point_to_point_opts =
+{
+ sizeof(d_point_to_point_opts)/sizeof(options_map_t),
+ d_point_to_point_opts
+};
+
static options_map_t d_when_complete_opts[] =
{
{"Do Nothing", "nothing", 0, "0"},
@@ -359,6 +371,7 @@ typedef struct
combo_name_map_t combo_name_map[] =
{
+ {"PtoPType", &point_to_point_opts},
{"WhenComplete", &when_complete_opts},
{"PicturePAR", &par_opts},
{"PictureModulus", &alignment_opts},
@@ -2563,6 +2576,7 @@ ghb_update_ui_combo_box(
audio_track_opts_set(ud->builder, "AudioTrack", user_data);
subtitle_track_opts_set(ud->builder, "SubtitleTrack", user_data);
generic_opts_set(ud->builder, "VideoQualityGranularity", &vqual_granularity_opts);
+ generic_opts_set(ud->builder, "PtoPType", &point_to_point_opts);
generic_opts_set(ud->builder, "WhenComplete", &when_complete_opts);
generic_opts_set(ud->builder, "PicturePAR", &par_opts);
generic_opts_set(ud->builder, "PictureModulus", &alignment_opts);
@@ -3078,6 +3092,22 @@ ghb_track_status()
case HB_STATE_WORKING:
hb_status.queue.state |= GHB_STATE_WORKING;
hb_status.queue.state &= ~GHB_STATE_PAUSED;
+ hb_status.queue.state &= ~GHB_STATE_SEARCHING;
+ hb_status.queue.job_cur = p.job_cur;
+ hb_status.queue.job_count = p.job_count;
+ hb_status.queue.progress = p.progress;
+ hb_status.queue.rate_cur = p.rate_cur;
+ hb_status.queue.rate_avg = p.rate_avg;
+ hb_status.queue.hours = p.hours;
+ hb_status.queue.minutes = p.minutes;
+ hb_status.queue.seconds = p.seconds;
+ hb_status.queue.unique_id = p.sequence_id & 0xFFFFFF;
+ break;
+
+ case HB_STATE_SEARCHING:
+ hb_status.queue.state |= GHB_STATE_SEARCHING;
+ hb_status.queue.state &= ~GHB_STATE_WORKING;
+ hb_status.queue.state &= ~GHB_STATE_PAUSED;
hb_status.queue.job_cur = p.job_cur;
hb_status.queue.job_count = p.job_count;
hb_status.queue.progress = p.progress;
@@ -4212,13 +4242,42 @@ add_job(hb_handle_t *h, GValue *js, gint unique_id, gint titleindex)
}
if (!job->start_at_preview)
{
- gint chapter_start, chapter_end;
- chapter_start = ghb_settings_get_int(js, "start_chapter");
- chapter_end = ghb_settings_get_int(js, "end_chapter");
+ gint start, end;
gint num_chapters = hb_list_count(title->list_chapter);
- job->chapter_start = MIN( num_chapters, chapter_start );
- job->chapter_end = MAX( job->chapter_start, chapter_end );
+ gint duration = title->duration / 90000;
+ job->chapter_start = 1;
+ job->chapter_end = num_chapters;
+ if (ghb_settings_combo_int(js, "PtoPType") == 0)
+ {
+ start = ghb_settings_get_int(js, "start_point");
+ end = ghb_settings_get_int(js, "end_point");
+ job->chapter_start = MIN( num_chapters, start );
+ job->chapter_end = MAX( job->chapter_start, end );
+
+ }
+ if (ghb_settings_combo_int(js, "PtoPType") == 1)
+ {
+ job->chapter_start = 1;
+ job->chapter_end = num_chapters;
+ start = ghb_settings_get_int(js, "start_point");
+ end = ghb_settings_get_int(js, "end_point");
+ job->pts_to_start = (int64_t)MIN(duration-1, start) * 90000;
+ job->pts_to_stop = (int64_t)MAX(start+1, end) * 90000 -
+ job->pts_to_start;
+ }
+ if (ghb_settings_combo_int(js, "PtoPType") == 2)
+ {
+ job->chapter_start = 1;
+ job->chapter_end = num_chapters;
+ start = ghb_settings_get_int(js, "start_point");
+ end = ghb_settings_get_int(js, "end_point");
+ gint64 max_frames;
+ max_frames = (gint64)duration * title->rate / title->rate_base;
+ job->frame_to_start = (int64_t)MIN(max_frames-1, start-1);
+ job->frame_to_stop = (int64_t)MAX(start, end-1) -
+ job->frame_to_start;
+ }
job->chapter_markers = ghb_settings_get_boolean(js, "ChapterMarkers");
if (job->chapter_start == job->chapter_end)
job->chapter_markers = 0;
@@ -4228,14 +4287,14 @@ add_job(hb_handle_t *h, GValue *js, gint unique_id, gint titleindex)
GValue *chapter;
gint chap;
gint count;
-
+
chapters = ghb_settings_get_value(js, "chapter_list");
count = ghb_array_len(chapters);
- for(chap = chapter_start; chap <= chapter_end; chap++)
+ for(chap = start; chap <= end; chap++)
{
hb_chapter_t * chapter_s;
gchar *name;
-
+
name = NULL;
if (chap-1 < count)
{
diff --git a/gtk/src/internal_defaults.xml b/gtk/src/internal_defaults.xml
index ec6802413..3a67e42f3 100644
--- a/gtk/src/internal_defaults.xml
+++ b/gtk/src/internal_defaults.xml
@@ -4,6 +4,8 @@
<dict>
<key>Initialization</key>
<dict>
+ <key>angle_count</key>
+ <integer>1</integer>
<key>angle</key>
<integer>1</integer>
<key>anamorphic</key>
@@ -14,7 +16,7 @@
<string></string>
<key>dest_file</key>
<string>new_video.mp4</string>
- <key>end_chapter</key>
+ <key>end_point</key>
<integer>100</integer>
<key>folder</key>
<string></string>
@@ -30,6 +32,8 @@
<integer>720</integer>
<key>PictureDisplayHeight</key>
<integer>480</integer>
+ <key>PtoPType</key>
+ <string>chapter</string>
<key>scale_height</key>
<integer>0</integer>
<key>scale_width</key>
@@ -42,7 +46,7 @@
<false />
<key>single_title</key>
<integer>1</integer>
- <key>start_chapter</key>
+ <key>start_point</key>
<integer>1</integer>
<key>start_frame</key>
<integer>-1</integer>
diff --git a/gtk/src/presets.c b/gtk/src/presets.c
index fca8c9304..b59efca79 100644
--- a/gtk/src/presets.c
+++ b/gtk/src/presets.c
@@ -4087,16 +4087,20 @@ presets_list_selection_changed_cb(GtkTreeSelection *selection, signal_user_data_
g_debug("No selection??? Perhaps unselected.");
gtk_widget_set_sensitive(widget, FALSE);
}
- gint start = ghb_settings_get_int(ud->settings, "start_chapter");
- gint end = ghb_settings_get_int(ud->settings, "end_chapter");
- widget = GHB_WIDGET (ud->builder, "ChapterMarkers");
- gtk_widget_set_sensitive(widget, TRUE);
- if (start == end)
- {
- ud->dont_clear_presets = TRUE;
- ghb_ui_update(ud, "ChapterMarkers", ghb_boolean_value(FALSE));
- ud->dont_clear_presets = FALSE;
- gtk_widget_set_sensitive(widget, FALSE);
+ if (ghb_settings_combo_int(ud->settings, "PtoPType") == 0)
+ {
+ gint start, end;
+ start = ghb_settings_get_int(ud->settings, "start_point");
+ end = ghb_settings_get_int(ud->settings, "end_point");
+ widget = GHB_WIDGET (ud->builder, "ChapterMarkers");
+ gtk_widget_set_sensitive(widget, TRUE);
+ if (start == end)
+ {
+ ud->dont_clear_presets = TRUE;
+ ghb_ui_update(ud, "ChapterMarkers", ghb_boolean_value(FALSE));
+ ud->dont_clear_presets = FALSE;
+ gtk_widget_set_sensitive(widget, FALSE);
+ }
}
}
diff --git a/gtk/src/queuehandler.c b/gtk/src/queuehandler.c
index 4ba095710..24eded5d6 100644
--- a/gtk/src/queuehandler.c
+++ b/gtk/src/queuehandler.c
@@ -70,7 +70,7 @@ add_to_queue_list(signal_user_data_t *ud, GValue *settings, GtkTreeIter *piter)
gchar *dest, *preset, *vol_name, *basename;
const gchar *vcodec, *container;
gchar *fps, *vcodec_abbr;
- gint title, start_chapter, end_chapter, width, height;
+ gint title, start_point, end_point, width, height;
gint source_width, source_height;
gboolean pass2 = FALSE, keep_aspect, vqtype, turbo;
gint pic_par;
@@ -84,8 +84,8 @@ add_to_queue_list(signal_user_data_t *ud, GValue *settings, GtkTreeIter *piter)
tweaks = ghb_settings_get_boolean(settings, "allow_tweaks");
title = ghb_settings_get_int(settings, "titlenum");
- start_chapter = ghb_settings_get_int(settings, "start_chapter");
- end_chapter = ghb_settings_get_int(settings, "end_chapter");
+ start_point = ghb_settings_get_int(settings, "start_point");
+ end_point = ghb_settings_get_int(settings, "end_point");
vol_name = ghb_settings_get_string(settings, "volume_label");
dest = ghb_settings_get_string(settings, "destination");
basename = g_path_get_basename(dest);
@@ -94,12 +94,19 @@ add_to_queue_list(signal_user_data_t *ud, GValue *settings, GtkTreeIter *piter)
vqtype = ghb_settings_get_boolean(settings, "vquality_type_constant");
if (!vqtype)
pass2 = ghb_settings_get_boolean(settings, "VideoTwoPass");
+ const gchar *points;
+ if (ghb_settings_combo_int(settings, "PtoPType") == 0)
+ points = "Chapters";
+ else if (ghb_settings_combo_int(settings, "PtoPType") == 1)
+ points = "Seconds";
+ else if (ghb_settings_combo_int(settings, "PtoPType") == 2)
+ points = "Frames";
info = g_strdup_printf
(
"<big><b>%s</b></big> "
- "<small>(Title %d, Chapters %d through %d, %d Video %s)"
+ "<small>(Title %d, %s %d through %d, %d Video %s)"
" --> %s</small>",
- vol_name, title, start_chapter, end_chapter,
+ vol_name, title, points, start_point, end_point,
pass2 ? 2:1, pass2 ? "Passes":"Pass", escape
);
g_free(basename);
@@ -1044,7 +1051,8 @@ ghb_queue_buttons_grey(signal_user_data_t *ud)
scan_state = ghb_get_scan_state();
show_stop = queue_state &
- (GHB_STATE_WORKING | GHB_STATE_SCANNING | GHB_STATE_MUXING);
+ (GHB_STATE_WORKING | GHB_STATE_SEARCHING |
+ GHB_STATE_SCANNING | GHB_STATE_MUXING);
show_start = !(scan_state & GHB_STATE_SCANNING) &&
(titleindex >= 0 || queue_count > 0);
@@ -1205,7 +1213,8 @@ queue_start_clicked_cb(GtkWidget *xwidget, signal_user_data_t *ud)
gint state;
state = ghb_get_queue_state();
- if (state & (GHB_STATE_WORKING | GHB_STATE_SCANNING | GHB_STATE_MUXING))
+ if (state & (GHB_STATE_WORKING | GHB_STATE_SEARCHING |
+ GHB_STATE_SCANNING | GHB_STATE_MUXING))
{
ghb_cancel_encode(ud, "You are currently encoding. "
"What would you like to do?");
diff --git a/gtk/src/settings.h b/gtk/src/settings.h
index c499da53e..43fbdbfa9 100644
--- a/gtk/src/settings.h
+++ b/gtk/src/settings.h
@@ -34,6 +34,7 @@ enum
GHB_STATE_WORKDONE = 0x10,
GHB_STATE_PAUSED = 0x20,
GHB_STATE_MUXING = 0x40,
+ GHB_STATE_SEARCHING = 0x80,
};
enum
diff --git a/gtk/src/widgetdeps.c b/gtk/src/widgetdeps.c
index 4e161fa51..71a544719 100644
--- a/gtk/src/widgetdeps.c
+++ b/gtk/src/widgetdeps.c
@@ -23,11 +23,14 @@ static dependency_t dep_map[] =
{"title", "picture_tab", "none", TRUE, FALSE},
{"title", "chapters_label", "none", TRUE, FALSE},
{"title", "chapters_tab", "none", TRUE, FALSE},
- {"title", "start_chapter", "none", TRUE, FALSE},
- {"title", "end_chapter", "none", TRUE, FALSE},
+ {"title", "start_point", "none", TRUE, FALSE},
+ {"title", "end_point", "none", TRUE, FALSE},
{"title", "angle", "none", TRUE, FALSE},
+ {"title", "angle_label", "1", TRUE, FALSE},
{"use_dvdnav", "angle", "FALSE", TRUE, TRUE},
{"use_dvdnav", "angle_label", "FALSE", TRUE, TRUE},
+ {"angle_count", "angle", "1", TRUE, TRUE},
+ {"angle_count", "angle_label", "1", TRUE, TRUE},
{"vquality_type_bitrate", "VideoAvgBitrate", "TRUE", FALSE, FALSE},
{"vquality_type_target", "VideoTargetSize", "TRUE", FALSE, FALSE},
{"vquality_type_constant", "VideoQualitySlider", "TRUE", FALSE, FALSE},