ghb_ui_update(ud, "AudioSamplerate", ghb_int64_value(0));
ghb_ui_update(ud, "AudioMixdown", ghb_int64_value(0));
}
+ ghb_ui_update(ud, "AudioTrackDRCSlider", ghb_double_value(0));
}
else if (acodec == HB_ACODEC_FAAC && mix != HB_AMIXDOWN_6CH)
{
}
void
+free_audio_index_list(gpointer data)
+{
+ g_free(data);
+}
+
+void
ghb_set_pref_audio(gint titleindex, signal_user_data_t *ud)
{
gint acodec_code, mix_code, track;
gchar *source_lang;
GtkWidget *button;
ghb_audio_info_t ainfo;
- gint index;
- GHashTable *track_indicies;
- gint *iptr;
+ GHashTable *track_indices;
const GValue *pref_audio;
const GValue *audio, *acodec, *bitrate, *rate, *mix, *drc;
gint count, ii, list_count;
g_debug("set_pref_audio");
- track_indicies = g_hash_table_new(g_int_hash, g_int_equal);
+ track_indices = g_hash_table_new_full(g_int_hash, g_int_equal,
+ NULL, free_audio_index_list);
// Clear the audio list
ghb_clear_audio_list(ud);
// Find "best" audio based on audio preferences
drc = ghb_settings_get_value(audio, "AudioTrackDRCSlider");
acodec_code = ghb_lookup_combo_int("AudioEncoder", 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.
- iptr = g_hash_table_lookup(track_indicies, &acodec_code);
- if (iptr == NULL)
- index = 0;
- else
- index = *(gint*)iptr;
-
+ // select sequential tracks for each. The hash keeps track
+ // of the tracks used for each codec.
track = ghb_find_audio_track(titleindex, source_lang,
- acodec_code, index);
+ acodec_code, track_indices);
// Check to see if:
// 1. pref codec is ac3
// 2. source codec is not ac3
if (ghb_get_audio_info (&ainfo, titleindex, track) &&
ghb_audio_is_passthru (acodec_code))
{
- if (ainfo.codec != acodec_code)
+ // HB_ACODEC_* are bit fields. Treat acodec_code as mask
+ if (!(ainfo.codec & acodec_code))
{
acodec_code = ghb_get_default_acodec();
// If there's more audio to process, or we've already
acodec_code = 0;
}
}
+ else
+ {
+ acodec_code &= ainfo.codec;
+ }
}
if (titleindex >= 0 && track < 0)
acodec_code = 0;
ghb_ui_update(ud, "AudioMixdown", ghb_int64_value(mix_code));
}
ghb_ui_update(ud, "AudioTrackDRCSlider", drc);
- index++;
- g_hash_table_insert(track_indicies, &acodec_code, &index);
}
}
g_free(source_lang);
- g_hash_table_destroy(track_indicies);
+ g_hash_table_destroy(track_indices);
}
static GValue*
br = ghb_settings_combo_option(asettings, "AudioBitrate");
sr = ghb_settings_combo_option(asettings, "AudioSamplerate");
mix = ghb_settings_combo_option(asettings, "AudioMixdown");
- drc = ghb_settings_get_string(asettings, "AudioTrackDRCSlider");
s_track = ghb_settings_get_string(asettings, "AudioTrack");
s_codec = ghb_settings_get_string(asettings, "AudioEncoder");
s_sr = ghb_settings_get_string(asettings, "AudioSamplerate");
s_mix = ghb_settings_get_string(asettings, "AudioMixdown");
s_drc = ghb_settings_get_double(asettings, "AudioTrackDRCSlider");
+ if (s_drc < 0.1)
+ drc = g_strdup("Off");
+ else
+ drc = g_strdup_printf("%.1f", s_drc);
gtk_list_store_set(GTK_LIST_STORE(store), &iter,
// These are displayed in list
2, br,
3, sr,
4, mix,
- // These are used to set combo values when a list item is selected
5, drc,
+ // These are used to set combo values when a list item is selected
6, s_track,
7, s_codec,
8, s_br,
}
}
-void
+G_MODULE_EXPORT void
audio_codec_changed_cb(GtkWidget *widget, signal_user_data_t *ud)
{
static gint prev_acodec = 0;
ghb_live_reset(ud);
}
-void
+G_MODULE_EXPORT void
audio_track_changed_cb(GtkWidget *widget, signal_user_data_t *ud)
{
GValue *asettings;
ghb_live_reset(ud);
}
-void
+G_MODULE_EXPORT void
audio_mix_changed_cb(GtkWidget *widget, signal_user_data_t *ud)
{
GValue *asettings;
- g_debug("audio_widget_changed_cb ()");
+ g_debug("audio_mix_changed_cb ()");
ghb_adjust_audio_rate_combos(ud);
ghb_check_dependency(ud, widget);
asettings = get_selected_asettings(ud);
ghb_live_reset(ud);
}
-void
+G_MODULE_EXPORT void
audio_widget_changed_cb(GtkWidget *widget, signal_user_data_t *ud)
{
GValue *asettings;
ghb_live_reset(ud);
}
+G_MODULE_EXPORT void
+drc_widget_changed_cb(GtkWidget *widget, gdouble val, signal_user_data_t *ud)
+{
+ GValue *asettings;
+ GtkLabel *label;
+ gchar *drc;
+
+ g_debug("drc_widget_changed_cb ()");
+ if (val > 0.8 && val < 1.0)
+ gtk_scale_button_set_value(GTK_SCALE_BUTTON(widget), 1.0);
+ if (val <= 0.8 && val > 0.5)
+ gtk_scale_button_set_value(GTK_SCALE_BUTTON(widget), 0.0);
+ else if (val > 0.0 && val <= 0.5)
+ gtk_scale_button_set_value(GTK_SCALE_BUTTON(widget), 1.0);
+
+ label = GTK_LABEL(GHB_WIDGET(ud->builder, "drc_label"));
+ if (val < 1.0)
+ drc = g_strdup_printf("Off");
+ else
+ drc = g_strdup_printf("%.1f", val);
+ gtk_label_set_text(label, drc);
+ g_free(drc);
+ ghb_check_dependency(ud, widget);
+ asettings = get_selected_asettings(ud);
+ if (asettings != NULL)
+ {
+ ghb_widget_to_setting(asettings, widget);
+ audio_list_refresh_selected(ud);
+ }
+ ghb_live_reset(ud);
+}
+
// subtitles differ from other settings in that
// the selection is updated automaitcally when the title
// changes. I don't want the preset selection changed as
// would happen for regular settings.
-void
+G_MODULE_EXPORT void
subtitle_changed_cb(GtkWidget *widget, signal_user_data_t *ud)
{
const gchar *name = gtk_widget_get_name(widget);
br = ghb_settings_combo_option(settings, "AudioBitrate");
sr = ghb_settings_combo_option(settings, "AudioSamplerate");
mix = ghb_settings_combo_option(settings, "AudioMixdown");
- drc = ghb_settings_get_string(settings, "AudioTrackDRCSlider");
s_track = ghb_settings_get_string(settings, "AudioTrack");
s_codec = ghb_settings_get_string(settings, "AudioEncoder");
s_sr = ghb_settings_get_string(settings, "AudioSamplerate");
s_mix = ghb_settings_get_string(settings, "AudioMixdown");
s_drc = ghb_settings_get_double(settings, "AudioTrackDRCSlider");
+ if (s_drc < 0.1)
+ drc = g_strdup("Off");
+ else
+ drc = g_strdup_printf("%.1f", s_drc);
gtk_list_store_append(store, &iter);
gtk_list_store_set(store, &iter,
2, br,
3, sr,
4, mix,
- // These are used to set combo box values when a list item is selected
5, drc,
+ // These are used to set combo box values when a list item is selected
6, s_track,
7, s_codec,
8, s_br,
g_free(s_mix);
}
-void
+G_MODULE_EXPORT void
audio_list_selection_changed_cb(GtkTreeSelection *selection, signal_user_data_t *ud)
{
GtkTreeModel *store;
}
}
-void
+G_MODULE_EXPORT void
audio_add_clicked_cb(GtkWidget *xwidget, signal_user_data_t *ud)
{
// Add the current audio settings to the list.
ghb_array_append(audio_list, asettings);
add_to_audio_list(ud, asettings);
count = ghb_array_len(audio_list);
- if (count >= 8)
+ if (count >= 99)
{
gtk_widget_set_sensitive(xwidget, FALSE);
}
}
-void
+G_MODULE_EXPORT void
audio_remove_clicked_cb(GtkWidget *widget, signal_user_data_t *ud)
{
GtkTreeView *treeview;