diff options
author | Uoti Urpala <uau@glyph.nonexistent.invalid> | 2010-03-10 03:18:42 +0200 |
---|---|---|
committer | Uoti Urpala <uau@glyph.nonexistent.invalid> | 2010-03-10 03:18:42 +0200 |
commit | 0269d22d32fb380e7128ca0c60f6f1638c6dab70 (patch) | |
tree | 53ba64153d9ef930f73458138478a6d0def381ce /mencoder.c | |
parent | 240550bbb94653907faa6e0bb1c5ac3d279cc252 (diff) | |
parent | 97ef28ad9aa2f34aea0779062976ad4294c0af51 (diff) | |
download | mpv-0269d22d32fb380e7128ca0c60f6f1638c6dab70.tar.bz2 mpv-0269d22d32fb380e7128ca0c60f6f1638c6dab70.tar.xz |
Merge svn changes up to r30876
Diffstat (limited to 'mencoder.c')
-rw-r--r-- | mencoder.c | 129 |
1 files changed, 109 insertions, 20 deletions
diff --git a/mencoder.c b/mencoder.c index 4b2bea30fa..7d92b2983c 100644 --- a/mencoder.c +++ b/mencoder.c @@ -375,6 +375,46 @@ static void exit_sighandler(int x){ static muxer_t* muxer=NULL; +void add_subtitles(char *filename, float fps, int silent) +{ + sub_data *subd; +#ifdef CONFIG_ASS + ASS_Track *asst = 0; +#endif + + if (!filename) return; + + subd = sub_read_file(filename, fps); +#ifdef CONFIG_ASS + if (opts.ass_enabled) +#ifdef CONFIG_ICONV + asst = ass_read_file(ass_library, filename, sub_cp); +#else + asst = ass_read_file(ass_library, filename, 0); +#endif + if (opts.ass_enabled && subd && !asst) + asst = ass_read_subdata(ass_library, subd, fps); + + if (!asst && !subd && !silent) +#else + if (!subd && !silent) +#endif + mp_tmsg(MSGT_CPLAYER, MSGL_ERR, "Cannot load subtitles: %s\n", + filename_recode(filename)); + +#ifdef CONFIG_ASS + if (!asst && !subd) return; + ass_track = asst; +#else + if (!subd) return; +#endif + mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_FILE_SUB_FILENAME=%s\n", + filename_recode(filename)); + subdata = subd; +} + +void print_wave_header(WAVEFORMATEX *h, int verbose_level); + int main(int argc,char* argv[]){ stream_t* stream=NULL; @@ -535,6 +575,10 @@ play_next_file: m_entry_set_options(mconfig,&filelist[curfile]); filename = filelist[curfile].name; +#ifdef CONFIG_ASS + ass_library = ass_init(); +#endif + if(!filename){ mp_tmsg(MSGT_CPLAYER, MSGL_FATAL, "\nFilename missing.\n\n"); mencoder_exit(1,NULL); @@ -666,26 +710,6 @@ if(sh_audio && (out_audio_codec || seek_to_sec || !sh_audio->wf || opts.playback } } -// after reading video params we should load subtitles because -// we know fps so now we can adjust subtitles time to ~6 seconds AST -// check .sub -// current_module="read_subtitles_file"; - if(sub_name && sub_name[0]){ - subdata=sub_read_file(sub_name[0], sh_video->fps); - if(!subdata) mp_tmsg(MSGT_CPLAYER,MSGL_ERR,"Cannot load subtitles: %s\n",sub_name[0]); - } else - if(sub_auto && filename) { // auto load sub file ... - char **tmp = NULL; - int i = 0; - char *psub = get_path( "sub/" ); - tmp = sub_filenames((psub ? psub : ""), filename); - free(psub); - subdata=sub_read_file(tmp[0], sh_video->fps); - while (tmp[i]) - free(tmp[i++]); - free(tmp); - } - // set up video encoder: if (!curfile) { // curfile is non zero when a second file is opened @@ -865,12 +889,77 @@ default: { ve = sh_video->vfilter; } else sh_video->vfilter = ve; // append 'expand' filter, it fixes stride problems and renders osd: +#ifdef CONFIG_ASS + if (auto_expand && !opts.ass_enabled) { /* we do not want both */ +#else if (auto_expand) { +#endif char* vf_args[] = { "osd", "1", NULL }; sh_video->vfilter=vf_open_filter(&opts, sh_video->vfilter,"expand",vf_args); } + +#ifdef CONFIG_ASS + if(opts.ass_enabled) { + int i; + int insert = 1; + if (opts.vf_settings) + for (i = 0; opts.vf_settings[i].name; ++i) + if (strcmp(opts.vf_settings[i].name, "ass") == 0) { + insert = 0; + break; + } + if (insert) { + extern vf_info_t vf_info_ass; + vf_info_t* libass_vfs[] = {&vf_info_ass, NULL}; + char* vf_arg[] = {"auto", "1", NULL}; + vf_instance_t* vf_ass = vf_open_plugin(&opts,libass_vfs,sh_video->vfilter,"ass",vf_arg); + if (vf_ass) + sh_video->vfilter=(void*)vf_ass; + else + mp_msg(MSGT_CPLAYER,MSGL_ERR, "ASS: cannot add video filter\n"); + } + + if (ass_library) { + for (i = 0; i < demuxer->num_attachments; ++i) { + demux_attachment_t* att = demuxer->attachments + i; + if (use_embedded_fonts && + att->name && att->type && att->data && att->data_size && + (strcmp(att->type, "application/x-truetype-font") == 0 || + strcmp(att->type, "application/x-font") == 0)) + ass_add_font(ass_library, att->name, att->data, att->data_size); + } + } + } +#endif + sh_video->vfilter=append_filters(sh_video->vfilter, opts.vf_settings); +#ifdef CONFIG_ASS + if (opts.ass_enabled) + ((vf_instance_t *)sh_video->vfilter)->control(sh_video->vfilter, VFCTRL_INIT_EOSD, ass_library); +#endif + +// after reading video params we should load subtitles because +// we know fps so now we can adjust subtitles time to ~6 seconds AST +// check .sub + if(sub_name && sub_name[0]){ + for (i = 0; sub_name[i] != NULL; ++i) + add_subtitles (sub_name[i], sh_video->fps, 0); + } else + if(sub_auto && filename) { // auto load sub file ... + char **tmp = NULL; + int i = 0; + char *psub = get_path( "sub/" ); + tmp = sub_filenames((psub ? psub : ""), filename); + free(psub); + while (tmp[i]) + { + add_subtitles (tmp[i], sh_video->fps, 0); + free(tmp[i++]); + } + free(tmp); + } + mp_msg(MSGT_CPLAYER,MSGL_INFO,"==========================================================================\n"); init_best_video_codec(sh_video,video_codec_list,video_fm_list); mp_msg(MSGT_CPLAYER,MSGL_INFO,"==========================================================================\n"); |