OSDN Git Service

LinGui: fix a problem with parameters to a signal that caused segfaults
[handbrake-jp/handbrake-jp-git.git] / gtk / src / audiohandler.c
index adfc79b..0e15b19 100644 (file)
@@ -63,6 +63,7 @@ ghb_adjust_audio_rate_combos(signal_user_data_t *ud)
                        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)
        {
@@ -135,7 +136,8 @@ ghb_set_pref_audio(gint titleindex, signal_user_data_t *ud)
                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
@@ -146,6 +148,10 @@ ghb_set_pref_audio(gint titleindex, signal_user_data_t *ud)
                                        acodec_code = 0;
                                }
                        }
+                       else
+                       {
+                               acodec_code &= ainfo.codec;
+                       }
                }
                if (titleindex >= 0 && track < 0)
                        acodec_code = 0;
@@ -393,17 +399,27 @@ audio_widget_changed_cb(GtkWidget *widget, signal_user_data_t *ud)
 }
 
 G_MODULE_EXPORT void
-drc_widget_changed_cb(GtkWidget *widget, signal_user_data_t *ud)
+drc_widget_changed_cb(GtkWidget *widget, gdouble val, signal_user_data_t *ud)
 {
        GValue *asettings;
-       gdouble val;
+       GtkLabel *label;
+       gchar *drc;
 
        g_debug("drc_widget_changed_cb ()");
-       val = gtk_range_get_value(GTK_RANGE(widget));
-       if (val < 0.5)
-               gtk_range_set_value(GTK_RANGE(widget), 0.0);
-       else if (val < 1.0)
-               gtk_range_set_value(GTK_RANGE(widget), 1.0);
+       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)
@@ -582,7 +598,7 @@ audio_add_clicked_cb(GtkWidget *xwidget, signal_user_data_t *ud)
        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);
        }