static void subtitle_set_track_description(GValue *settings, GValue *subsettings) { char *desc; if (ghb_settings_get_int(subsettings, "SubtitleSource") == SRTSUB) { gchar *filename, *code; const gchar *lang; lang = ghb_settings_combo_option(subsettings, "SrtLanguage"); code = ghb_settings_get_string(subsettings, "SrtCodeset"); filename = ghb_settings_get_string(subsettings, "SrtFile"); if (g_file_test(filename, G_FILE_TEST_IS_REGULAR)) { gchar *basename; basename = g_path_get_basename(filename); desc = g_strdup_printf("%s (%s)(SRT)(%s)", lang, code, basename); g_free(basename); } else { desc = g_strdup_printf("%s (%s)(SRT)", lang, code); } g_free(code); } else { int title_id, titleindex; const hb_title_t *title; int track; hb_subtitle_t *subtitle; title_id = ghb_settings_get_int(settings, "title"); title = ghb_lookup_title(title_id, &titleindex); track = ghb_settings_get_int(subsettings, "SubtitleTrack"); if (track < 0) { desc = g_strdup(_("Foreign Audio Search")); } else { subtitle = ghb_get_subtitle_info(title, track); desc = g_strdup_printf("%d - %s (%s)", track + 1, subtitle->lang, hb_subsource_name(subtitle->source)); } } ghb_settings_set_string( subsettings, "SubtitleTrackDescription", desc); g_free(desc); }
static void add_subtitle(int track, hb_list_t *list_subtitle, BLURAY_STREAM_INFO *bdsub, uint32_t codec) { hb_subtitle_t * subtitle; iso639_lang_t * lang; subtitle = calloc( sizeof( hb_subtitle_t ), 1 ); subtitle->track = track; subtitle->id = bdsub->pid; switch ( bdsub->coding_type ) { case BLURAY_STREAM_TYPE_SUB_PG: subtitle->source = PGSSUB; subtitle->format = PICTURESUB; subtitle->config.dest = RENDERSUB; break; default: // Unrecognized, don't add to list free( subtitle ); return; } lang = lang_for_code2( (char*)bdsub->lang ); snprintf(subtitle->lang, sizeof( subtitle->lang ), "%s [%s]", strlen(lang->native_name) ? lang->native_name : lang->eng_name, hb_subsource_name(subtitle->source)); snprintf(subtitle->iso639_2, sizeof( subtitle->iso639_2 ), "%s", lang->iso639_2); subtitle->reg_desc = STR4_TO_UINT32("HDMV"); subtitle->stream_type = bdsub->coding_type; subtitle->codec = codec; hb_log( "bd: subtitle id=0x%x, lang=%s, 3cc=%s", subtitle->id, subtitle->lang, subtitle->iso639_2 ); hb_list_add( list_subtitle, subtitle ); return; }
/** * Displays job parameters in the debug log. * @param job Handle work hb_job_t. */ void hb_display_job_info( hb_job_t * job ) { hb_title_t * title = job->title; hb_audio_t * audio; hb_subtitle_t * subtitle; int i, j; hb_log("job configuration:"); hb_log( " * source"); hb_log( " + %s", title->path ); hb_log( " + title %d, chapter(s) %d to %d", title->index, job->chapter_start, job->chapter_end ); if( title->container_name != NULL ) hb_log( " + container: %s", title->container_name); if( title->data_rate ) { hb_log( " + data rate: %d kbps", title->data_rate / 1000 ); } hb_log( " * destination"); hb_log( " + %s", job->file ); switch( job->mux ) { case HB_MUX_MP4: hb_log(" + container: MPEG-4 (.mp4 and .m4v)"); if( job->ipod_atom ) hb_log( " + compatibility atom for iPod 5G"); if( job->largeFileSize ) hb_log( " + 64-bit formatting"); if( job->mp4_optimize ) hb_log( " + optimized for progressive web downloads"); if( job->color_matrix ) hb_log( " + custom color matrix: %s", job->color_matrix == 1 ? "ITU Bt.601 (SD)" : "ITU Bt.709 (HD)"); break; case HB_MUX_MKV: hb_log(" + container: Matroska (.mkv)"); break; } if( job->chapter_markers ) { hb_log( " + chapter markers" ); } hb_log(" * video track"); hb_log(" + decoder: %s", title->video_codec_name ); if( title->video_bitrate ) { hb_log( " + bitrate %d kbps", title->video_bitrate / 1000 ); } if( job->cfr == 0 ) { hb_log( " + frame rate: same as source (around %.3f fps)", (float) title->rate / (float) title->rate_base ); } else if( job->cfr == 1 ) { hb_log( " + frame rate: %.3f fps -> constant %.3f fps", (float) title->rate / (float) title->rate_base, (float) job->vrate / (float) job->vrate_base ); } else if( job->cfr == 2 ) { hb_log( " + frame rate: %.3f fps -> peak rate limited to %.3f fps", (float) title->rate / (float) title->rate_base, (float) job->pfr_vrate / (float) job->pfr_vrate_base ); } if( job->anamorphic.mode ) { hb_log( " + %s anamorphic", job->anamorphic.mode == 1 ? "strict" : job->anamorphic.mode == 2? "loose" : "custom" ); if( job->anamorphic.mode == 3 && job->anamorphic.keep_display_aspect ) { hb_log( " + keeping source display aspect ratio"); } hb_log( " + storage dimensions: %d * %d -> %d * %d, crop %d/%d/%d/%d, mod %i", title->width, title->height, job->width, job->height, job->crop[0], job->crop[1], job->crop[2], job->crop[3], job->modulus ); if( job->anamorphic.itu_par ) { hb_log( " + using ITU pixel aspect ratio values"); } hb_log( " + pixel aspect ratio: %i / %i", job->anamorphic.par_width, job->anamorphic.par_height ); hb_log( " + display dimensions: %.0f * %i", (float)( job->width * job->anamorphic.par_width / job->anamorphic.par_height ), job->height ); } else { hb_log( " + dimensions: %d * %d -> %d * %d, crop %d/%d/%d/%d, mod %i", title->width, title->height, job->width, job->height, job->crop[0], job->crop[1], job->crop[2], job->crop[3], job->modulus ); } if ( job->grayscale ) hb_log( " + grayscale mode" ); if( hb_list_count( job->filters ) ) { hb_log(" + %s", hb_list_count( job->filters) > 1 ? "filters" : "filter" ); for( i = 0; i < hb_list_count( job->filters ); i++ ) { hb_filter_object_t * filter = hb_list_item( job->filters, i ); if (filter->settings) hb_log(" + %s (%s)", filter->name, filter->settings); else hb_log(" + %s (default settings)", filter->name); } } if( !job->indepth_scan ) { /* Video encoder */ switch( job->vcodec ) { case HB_VCODEC_FFMPEG_MPEG4: hb_log( " + encoder: FFmpeg MPEG-4" ); break; case HB_VCODEC_FFMPEG_MPEG2: hb_log( " + encoder: FFmpeg MPEG-2" ); break; case HB_VCODEC_X264: hb_log( " + encoder: x264" ); if( job->advanced_opts != NULL && *job->advanced_opts != '\0' ) hb_log( " + options: %s", job->advanced_opts); break; case HB_VCODEC_THEORA: hb_log( " + encoder: Theora" ); break; } if( job->vquality >= 0 ) { hb_log( " + quality: %.2f %s", job->vquality, job->vcodec == HB_VCODEC_X264 ? "(RF)" : "(QP)" ); } else { hb_log( " + bitrate: %d kbps, pass: %d", job->vbitrate, job->pass ); } } for( i=0; i < hb_list_count( title->list_subtitle ); i++ ) { subtitle = hb_list_item( title->list_subtitle, i ); if( subtitle ) { if( subtitle->source == SRTSUB ) { /* For SRT, print offset and charset too */ hb_log( " * subtitle track %i, %s (id %x) %s [%s] -> %s%s, offset: %"PRId64", charset: %s", subtitle->track, subtitle->lang, subtitle->id, "Text", "SRT", "Pass-Through", subtitle->config.default_track ? ", Default" : "", subtitle->config.offset, subtitle->config.src_codeset ); } else { hb_log( " * subtitle track %i, %s (id %x) %s [%s] -> %s%s%s", subtitle->track, subtitle->lang, subtitle->id, subtitle->format == PICTURESUB ? "Picture" : "Text", hb_subsource_name( subtitle->source ), job->indepth_scan ? "Foreign Audio Search" : subtitle->config.dest == RENDERSUB ? "Render/Burn in" : "Pass-Through", subtitle->config.force ? ", Forced Only" : "", subtitle->config.default_track ? ", Default" : "" ); } } } if( !job->indepth_scan ) { for( i = 0; i < hb_list_count( title->list_audio ); i++ ) { audio = hb_list_item( title->list_audio, i ); hb_log( " * audio track %d", audio->config.out.track ); if( audio->config.out.name ) hb_log( " + name: %s", audio->config.out.name ); hb_log( " + decoder: %s (track %d, id %x)", audio->config.lang.description, audio->config.in.track + 1, audio->id ); if( ( audio->config.in.codec == HB_ACODEC_AC3 ) || ( audio->config.in.codec == HB_ACODEC_DCA) ) { hb_log( " + bitrate: %d kbps, samplerate: %d Hz", audio->config.in.bitrate / 1000, audio->config.in.samplerate ); } if( (audio->config.out.codec != HB_ACODEC_AC3_PASS) && (audio->config.out.codec != HB_ACODEC_DCA_PASS) ) { for (j = 0; j < hb_audio_mixdowns_count; j++) { if (hb_audio_mixdowns[j].amixdown == audio->config.out.mixdown) { hb_log( " + mixdown: %s", hb_audio_mixdowns[j].human_readable_name ); break; } } } if ( audio->config.out.dynamic_range_compression && (audio->config.out.codec != HB_ACODEC_AC3_PASS) && (audio->config.out.codec != HB_ACODEC_DCA_PASS)) { hb_log(" + dynamic range compression: %f", audio->config.out.dynamic_range_compression); } if( (audio->config.out.codec == HB_ACODEC_AC3_PASS) || (audio->config.out.codec == HB_ACODEC_DCA_PASS) ) { hb_log( " + %s passthrough", (audio->config.out.codec == HB_ACODEC_AC3_PASS) ? "AC3" : "DCA" ); } else { hb_log( " + encoder: %s", ( audio->config.out.codec == HB_ACODEC_FAAC ) ? "faac" : ( ( audio->config.out.codec == HB_ACODEC_LAME ) ? "lame" : ( ( audio->config.out.codec == HB_ACODEC_CA_AAC ) ? "ca_aac" : ( ( audio->config.out.codec == HB_ACODEC_AC3 ) ? "ffac3" : "vorbis" ) ) ) ); hb_log( " + bitrate: %d kbps, samplerate: %d Hz", audio->config.out.bitrate, audio->config.out.samplerate ); } } } }