OSDN Git Service

WinGui:
[handbrake-jp/handbrake-jp-git.git] / gtk / src / hb-backend.c
index 53b71fd..8f1ac95 100644 (file)
@@ -948,7 +948,7 @@ ghb_find_closest_audio_bitrate(gint codec, gint rate)
        gint result;
 
        if (codec == HB_ACODEC_FAAC)
-               high = 160;
+               high = 320;
 
        result = high;
        for (ii = 0; ii < hb_audio_bitrates_count; ii++)
@@ -1149,6 +1149,37 @@ ghb_subtitle_track_source(signal_user_data_t *ud, gint track)
 }
 
 const char*
+ghb_subtitle_source_name(gint source)
+{
+       const gchar * name = "Unknown";
+       switch (source)
+       {
+               case VOBSUB:
+                       name = "VOBSUB";
+                       break;
+               case TX3GSUB:
+                       name = "TX3G";
+                       break;
+               case UTF8SUB:
+                       name = "UTF8";
+                       break;
+               case CC708SUB:
+               case CC608SUB:
+                       name = "CC";
+                       break;
+               case SRTSUB:
+                       name = "SRT";
+                       break;
+               case SSASUB:
+                       name = "SSA";
+                       break;
+               default:
+                       break;
+       }
+       return name;
+}
+
+const char*
 ghb_subtitle_track_source_name(signal_user_data_t *ud, gint track)
 {
        gint titleindex;
@@ -1186,21 +1217,7 @@ ghb_subtitle_track_source_name(signal_user_data_t *ud, gint track)
        sub = hb_list_item( title->list_subtitle, track);
        if (sub != NULL)
        {
-               switch (sub->source)
-               {
-                       case VOBSUB:
-                               name = "Bitmap";
-                               break;
-                       case CC708SUB:
-                       case CC608SUB:
-                               name = "Text";
-                               break;
-                       case SRTSUB:
-                               name = "SRT";
-                               break;
-                       default:
-                               break;
-               }
+               name = ghb_subtitle_source_name(sub->source);
        }
 
 done:
@@ -1393,12 +1410,10 @@ ghb_grey_combo_options(GtkBuilder *builder)
        gboolean allow_dolby = TRUE;
        gboolean allow_dpl2 = TRUE;
        gboolean allow_6ch = TRUE;
-       allow_mono = acodec & ~HB_ACODEC_LAME;
+       allow_mono = TRUE;
        allow_6ch = acodec & ~HB_ACODEC_LAME;
        if (audio)
        {
-               allow_mono = allow_mono &&
-                       (audio->in.codec & (HB_ACODEC_AC3|HB_ACODEC_DCA));
                gint layout = audio->in.channel_layout & HB_INPUT_CH_LAYOUT_DISCRETE_NO_LFE_MASK;
                allow_stereo =
                        ((layout == HB_INPUT_CH_LAYOUT_MONO && !allow_mono) || layout >= HB_INPUT_CH_LAYOUT_STEREO);
@@ -1408,7 +1423,6 @@ ghb_grey_combo_options(GtkBuilder *builder)
                        (layout == HB_INPUT_CH_LAYOUT_DOLBY);
                allow_dpl2 = (layout == HB_INPUT_CH_LAYOUT_3F2R);
                allow_6ch = allow_6ch &&
-                       (audio->in.codec & (HB_ACODEC_AC3|HB_ACODEC_DCA)) &&
                        (layout == HB_INPUT_CH_LAYOUT_3F2R) && 
                        (audio->in.channel_layout & HB_INPUT_CH_LAYOUT_HAS_LFE);
        }
@@ -1424,7 +1438,12 @@ ghb_get_best_audio_bitrate(gint acodec, gint br, gint channels)
 {
        if (acodec & HB_ACODEC_FAAC)
        {
-       int maxbr = channels * 80;
+               int maxbr;
+
+               if (channels == 2)
+                       maxbr = 320;
+               else
+                       maxbr = 768;
                if (br > maxbr)
                        br = maxbr;
        }
@@ -1449,9 +1468,7 @@ ghb_get_best_mix(gint titleindex, gint track, gint acodec, gint mix)
        audio = get_hb_audio(titleindex, track);
        if (audio)
        {
-               allow_mono =
-                       (audio->in.codec & (HB_ACODEC_AC3|HB_ACODEC_DCA)) &&
-                       (acodec & ~HB_ACODEC_LAME);
+               allow_mono = TRUE;
                gint layout = audio->in.channel_layout & HB_INPUT_CH_LAYOUT_DISCRETE_NO_LFE_MASK;
                allow_stereo =
                        ((layout == HB_INPUT_CH_LAYOUT_MONO && !allow_mono) || layout >= HB_INPUT_CH_LAYOUT_STEREO);
@@ -1461,7 +1478,6 @@ ghb_get_best_mix(gint titleindex, gint track, gint acodec, gint mix)
                        (layout == HB_INPUT_CH_LAYOUT_DOLBY);
                allow_dpl2 = (layout == HB_INPUT_CH_LAYOUT_3F2R);
                allow_6ch =
-                       (audio->in.codec & (HB_ACODEC_AC3|HB_ACODEC_DCA)) &&
                        (acodec & ~HB_ACODEC_LAME) &&
                        (layout == HB_INPUT_CH_LAYOUT_3F2R) && 
                        (audio->in.channel_layout & HB_INPUT_CH_LAYOUT_HAS_LFE);
@@ -1967,7 +1983,18 @@ subtitle_track_opts_set(GtkBuilder *builder, const gchar *name, gint titleindex)
                        subtitle = (hb_subtitle_t *)hb_list_item(title->list_subtitle, ii);
                        // Skip subtitles that must be burned if there is already
                        // a burned subtitle in the list
-                       options[ii] = g_strdup_printf("%d - %s", ii+1, subtitle->lang);
+#if 0
+                       if (subtitle->source == VOBSUB)
+                       {
+                               options[ii] = g_strdup_printf("%d - %s", ii+1, subtitle->lang);
+                       }
+                       else
+#endif
+                       {
+                               options[ii] = g_strdup_printf("%d - %s (%s)", ii+1, 
+                                       subtitle->lang, 
+                                       ghb_subtitle_source_name(subtitle->source));
+                       }
                        subtitle_opts.map[ii+1].option = options[ii];
                        subtitle_opts.map[ii+1].shortOpt = index_str[ii];
                        subtitle_opts.map[ii+1].ivalue = ii;
@@ -2018,21 +2045,23 @@ ghb_longest_title()
        hb_title_t * title;
        gint ii;
        gint count = 0;
-       guint64 longest = 0;
        gint titleindex = 0;
+       gint feature;
        
        g_debug("ghb_longest_title ()\n");
        if (h_scan == NULL) return 0;
        list = hb_get_titles( h_scan );
        count = hb_list_count( list );
        if (count > 100) count = 100;
+       if (count < 1) return 0;
+       title = (hb_title_t*)hb_list_item(list, 0);
+       feature = title->job->feature;
        for (ii = 0; ii < count; ii++)
        {
                title = (hb_title_t*)hb_list_item(list, ii);
-               if (title->duration > longest)
+               if (title->index == feature)
                {
-                       titleindex = ii;
-                       longest = title->duration;
+                       return ii;
                }
        }
        return titleindex;
@@ -2097,7 +2126,7 @@ ghb_find_audio_track(
        gint count = 0;
        gint track = -1;
        gint max_chan = 0;
-       gboolean *used;
+       gboolean *used = NULL;
        gboolean *passthru_used;
        gint try_acodec;
        gint passthru_acodec;
@@ -2381,7 +2410,7 @@ ghb_find_subtitle_track(
                                continue;
 
                        subtitle = (hb_subtitle_t*)hb_list_item( title->list_subtitle, ii );
-                       if (((burn || force) && (subtitle->source == VOBSUB)) &&
+                       if ((!(burn || force) || (subtitle->source == VOBSUB)) &&
                                ((strcmp(lang, subtitle->iso639_2) == 0) ||
                                 (strcmp(lang, "und") == 0)))
                        {
@@ -2425,7 +2454,7 @@ small_opts_set(GtkBuilder *builder, const gchar *name, combo_opts_t *opts)
        gint ii;
        gchar *str;
        
-       g_debug("generic_opts_set ()\n");
+       g_debug("small_opts_set ()\n");
        if (name == NULL || opts == NULL) return;
        store = get_combo_box_store(builder, name);
        gtk_list_store_clear(store);
@@ -3859,7 +3888,6 @@ ghb_validate_subtitles(signal_user_data_t *ud)
        titleindex = ghb_settings_combo_int(ud->settings, "title");
     title = hb_list_item( list, titleindex );
        if (title == NULL) return FALSE;
-       gint mux = ghb_settings_combo_int(ud->settings, "FileFormat");
 
        const GValue *slist, *settings;
        gint count, ii, source;
@@ -3892,23 +3920,6 @@ ghb_validate_subtitles(signal_user_data_t *ud)
                {
                        one_burned = TRUE;
                }
-               if (!burned && mux == HB_MUX_MP4 && source == VOBSUB)
-               {
-                       // MP4 can only handle burned vobsubs.  make sure there isn't
-                       // already something burned in the list
-                       message = g_strdup_printf(
-                       "Your chosen container does not support soft bitmap subtitles.\n\n"
-                               "You should change your subtitle selections.\n"
-                               "If you continue, some subtitles will be lost.");
-                       if (!ghb_message_dialog(GTK_MESSAGE_WARNING, message, 
-                               "Cancel", "Continue"))
-                       {
-                               g_free(message);
-                               return FALSE;
-                       }
-                       g_free(message);
-                       break;
-               }
                if (source == SRTSUB)
                {
                        gchar *filename;
@@ -4096,9 +4107,7 @@ ghb_validate_audio(signal_user_data_t *ud)
                gboolean allow_dolby = TRUE;
                gboolean allow_dpl2 = TRUE;
                gboolean allow_6ch = TRUE;
-               allow_mono =
-                       (taudio->in.codec & (HB_ACODEC_AC3|HB_ACODEC_DCA)) &&
-                       (codec & ~HB_ACODEC_LAME);
+               allow_mono = TRUE;
                gint layout = taudio->in.channel_layout & HB_INPUT_CH_LAYOUT_DISCRETE_NO_LFE_MASK;
                allow_stereo =
                        ((layout == HB_INPUT_CH_LAYOUT_MONO && !allow_mono) || layout >= HB_INPUT_CH_LAYOUT_STEREO);
@@ -4108,7 +4117,6 @@ ghb_validate_audio(signal_user_data_t *ud)
                        (layout == HB_INPUT_CH_LAYOUT_DOLBY);
                allow_dpl2 = (layout == HB_INPUT_CH_LAYOUT_3F2R);
                allow_6ch =
-                       (taudio->in.codec & (HB_ACODEC_AC3|HB_ACODEC_DCA)) &&
                        (codec & ~HB_ACODEC_LAME) &&
                        (layout == HB_INPUT_CH_LAYOUT_3F2R) && 
                        (taudio->in.channel_layout & HB_INPUT_CH_LAYOUT_HAS_LFE);
@@ -4623,15 +4631,10 @@ add_job(hb_handle_t *h, GValue *js, gint unique_id, gint titleindex)
                subtitle = ghb_settings_get_int(ssettings, "SubtitleTrack");
                if (subtitle == -1)
                {
-                       if (!burned && job->mux == HB_MUX_MKV)
+                       if (!burned)
                        {
                                job->select_subtitle_config.dest = PASSTHRUSUB;
                        }
-                       else if (!burned && job->mux == HB_MUX_MP4)
-                       {
-                               // Skip any non-burned vobsubs when output is mp4
-                               continue;
-                       }
                        else if (burned)
                        {
                                // Only allow one subtitle to be burned into the video
@@ -4651,20 +4654,13 @@ add_job(hb_handle_t *h, GValue *js, gint unique_id, gint titleindex)
                hb_subtitle_config_t sub_config;
 
                        subt = (hb_subtitle_t *)hb_list_item(title->list_subtitle, subtitle);
-                       sub_config = subt->config;
                        if (subt != NULL)
                        {
-                               if (!burned && job->mux == HB_MUX_MKV && 
-                                       subt->format == PICTURESUB)
+                               sub_config = subt->config;
+                               if (!burned && subt->format == PICTURESUB)
                                {
                                        sub_config.dest = PASSTHRUSUB;
                                }
-                               else if (!burned && job->mux == HB_MUX_MP4 && 
-                                       subt->format == PICTURESUB)
-                               {
-                                       // Skip any non-burned vobsubs when output is mp4
-                                       continue;
-                               }
                                else if ( burned && subt->format == PICTURESUB )
                                {
                                        // Only allow one subtitle to be burned into the video