From 67846098b4b06833faddadc0ce825b5e157b98f2 Mon Sep 17 00:00:00 2001 From: Kovensky Date: Sat, 13 Mar 2010 11:19:07 -0300 Subject: [PATCH] Revert "Hack to add libass compatibility for mencoder with embedded font support" This reverts commit 95bdd8948794d8c04ec598c7e39811976ff30e9b. --- DOCS/man/en/mplayer.1 | 50 ----------------- Makefile | 1 - cfg-mencoder.h | 3 - libmpcodecs/vf.c | 2 - libmpcodecs/vf_fixpts.c | 137 --------------------------------------------- mencoder.c | 144 +++++++++--------------------------------------- 6 files changed, 26 insertions(+), 311 deletions(-) delete mode 100644 libmpcodecs/vf_fixpts.c diff --git a/DOCS/man/en/mplayer.1 b/DOCS/man/en/mplayer.1 index fdabf40dbd..f20456b769 100644 --- a/DOCS/man/en/mplayer.1 +++ b/DOCS/man/en/mplayer.1 @@ -7480,48 +7480,6 @@ to the filter chain, and will not work with this filter. If none is given, the default filename is "timecodesv2.txt". .RE . -.TP -.B fixpts[=options] -Fixes the presentation timestamps (PTS) of the frames. -By default, the PTS passed to the next filter is dropped, but the following -options can change that: -.RSs -.IPs print -Print the incoming PTS. -.IPs fps= -Specify a frame per second value. -.IPs start= -Specify an initial value for the PTS. -.IPs autostart= -Uses the -.IR n th -incoming PTS as the initial PTS. -All previous pts are kept, so setting a huge value or \-1 keeps the PTS -intact. -.IPs autofps= -Uses the -.IR n th -incoming PTS after the end of autostart to determine the framerate. -.RE -.sp 1 -.RS -.I EXAMPLE: -.RE -.PD 0 -.RSs -.IPs "\-vf fixpts=fps=24000/1001,ass,fixpts" -Generates a new sequence of PTS, uses it for ASS subtitles, then drops it. -Generating a new sequence is useful when the timestamps are reset during the -program; this is frequent on DVDs. -Dropping it may be necessary to avoid confusing encoders. -.RE -.PD 1 -.sp 1 -.RS -.I NOTE: -Using this filter together with any sort of seeking (including -ss and EDLs) -may make demons fly out of your nose. -.RE . .SH "GENERAL ENCODING OPTIONS (MENCODER ONLY)" . @@ -7643,14 +7601,6 @@ Currently the only such filter is harddup. Do not write OpenDML index for AVI files >1GB. . .TP -.B \-keep\-pts -Send the original presentation timestamp (PTS) down the filter and encoder -chain. -This may cause incorrect output ("badly interleaved") if the original PTS -are wrong or the framerate is changed, but can be necessary for certain -filters (such as ASS). -. -.TP .B \-noskip Do not skip frames. . diff --git a/Makefile b/Makefile index 679a952d66..5131ef2c0e 100644 --- a/Makefile +++ b/Makefile @@ -416,7 +416,6 @@ SRCS_COMMON = asxparser.c \ libmpcodecs/vf_field.c \ libmpcodecs/vf_fil.c \ libmpcodecs/vf_filmdint.c \ - libmpcodecs/vf_fixpts.c \ libmpcodecs/vf_flip.c \ libmpcodecs/vf_format.c \ libmpcodecs/vf_framestep.c \ diff --git a/cfg-mencoder.h b/cfg-mencoder.h index c503535908..6318453ae2 100644 --- a/cfg-mencoder.h +++ b/cfg-mencoder.h @@ -214,9 +214,6 @@ const m_option_t mencoder_opts[]={ {"odml", &write_odml, CONF_TYPE_FLAG, CONF_GLOBAL, 0, 1, NULL}, {"noodml", &write_odml, CONF_TYPE_FLAG, CONF_GLOBAL, 1, 0, NULL}, - {"keep-pts", &keep_pts, CONF_TYPE_FLAG, 0, 0, 1, NULL}, - {"nokeep-pts", &keep_pts, CONF_TYPE_FLAG, 0, 1, 0, NULL}, - // info header strings {"info", (void *) info_conf, CONF_TYPE_SUBCONFIG, CONF_GLOBAL, 0, 0, NULL}, diff --git a/libmpcodecs/vf.c b/libmpcodecs/vf.c index d3401cb57c..2a588a6263 100644 --- a/libmpcodecs/vf.c +++ b/libmpcodecs/vf.c @@ -101,7 +101,6 @@ extern const vf_info_t vf_info_blackframe; extern const vf_info_t vf_info_geq; extern const vf_info_t vf_info_ow; extern const vf_info_t vf_info_tcdump; -extern const vf_info_t vf_info_fixpts; // list of available filters: static const vf_info_t* const filter_list[]={ @@ -204,7 +203,6 @@ static const vf_info_t* const filter_list[]={ &vf_info_blackframe, &vf_info_ow, &vf_info_tcdump, - &vf_info_fixpts, NULL }; diff --git a/libmpcodecs/vf_fixpts.c b/libmpcodecs/vf_fixpts.c deleted file mode 100644 index 42d8d4747f..0000000000 --- a/libmpcodecs/vf_fixpts.c +++ /dev/null @@ -1,137 +0,0 @@ -/* - Copyright (C) 2007 Nicolas George - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -#include -#include -#include -#include - -#include "config.h" -#include "mp_msg.h" -#include "help_mp.h" - -#include "img_format.h" -#include "mp_image.h" -#include "vf.h" - -struct vf_priv_s { - double current; - double step; - int autostart; - int autostep; - unsigned have_step: 1; - unsigned print: 1; -}; - -static int put_image(vf_instance_t *vf, mp_image_t *src, double pts) -{ - struct vf_priv_s *p = vf->priv; - - if(p->print) { - if(pts == MP_NOPTS_VALUE) - printf("PTS: undef\n"); - else - printf("PTS: %f\n", pts); - } - if(pts != MP_NOPTS_VALUE && p->autostart != 0) { - p->current = pts; - if(p->autostart > 0) - p->autostart--; - } else if(pts != MP_NOPTS_VALUE && p->autostep > 0) { - p->step = pts - p->current; - p->current = pts; - p->autostep--; - p->have_step = 1; - } else if(p->have_step) { - p->current += p->step; - pts = p->current; - } else { - pts = MP_NOPTS_VALUE; - } - return vf_next_put_image(vf, src, pts); -} - -static void uninit(vf_instance_t *vf) -{ - free(vf->priv); -} - -static int parse_args(struct vf_priv_s *p, const char *args) -{ - int pos; - double num, denom = 1; - int iarg; - - while(*args != 0) { - pos = 0; - if(sscanf(args, "print%n", &pos) == 0 && pos > 0) { - p->print = 1; - } else if(sscanf(args, "fps=%lf%n/%lf%n", &num, &pos, &denom, &pos) >= 1 - && pos > 0) { - p->step = denom / num; - p->have_step = 1; - } else if(sscanf(args, "start=%lf%n", &num, &pos) >= 1 && pos > 0) { - p->current = num; - } else if(sscanf(args, "autostart=%d%n", &iarg, &pos) == 1 && pos > 0) { - p->autostart = iarg; - } else if(sscanf(args, "autofps=%d%n", &iarg, &pos) == 1 && pos > 0) { - p->autostep = iarg; - } else { - mp_msg(MSGT_VFILTER, MSGL_FATAL, - "fixpts: unknown suboption: %s\n", args); - return 0; - } - args += pos; - if(*args == ':') - args++; - } - return 1; -} - -static int open(vf_instance_t *vf, char *args) -{ - struct vf_priv_s *p; - struct vf_priv_s ptmp = { - .current = 0, - .step = 0, - .autostart = 0, - .autostep = 0, - .have_step = 0, - .print = 0, - }; - - if(!parse_args(&ptmp, args == NULL ? "" : args)) - return 0; - - vf->put_image = put_image; - vf->uninit = uninit; - vf->priv = p = malloc(sizeof(struct vf_priv_s)); - *p = ptmp; - p->current = -p->step; - - return 1; -} - -vf_info_t vf_info_fixpts = { - "Fix presentation timestamps", - "fixpts", - "Nicolas George", - "", - &open, - NULL -}; diff --git a/mencoder.c b/mencoder.c index 03265ae373..bb181f5677 100644 --- a/mencoder.c +++ b/mencoder.c @@ -190,7 +190,6 @@ int suboverlap_enabled = 1; int auto_expand=1; int encode_duplicates=1; -int keep_pts=0; // infos are empty by default char *info_name=NULL; @@ -220,7 +219,10 @@ void mplayer_put_key(struct mp_fifo *fifo, int code) { } -#include "ass_mp.h" +#ifdef CONFIG_ASS +#include "libass/ass.h" +#include "libass/ass_mp.h" +#endif char *current_module; #include "mpcommon.h" @@ -357,44 +359,6 @@ 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 == NULL) 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_msg(MSGT_CPLAYER, MSGL_ERR, MSGTR_CantLoadSub, - 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); #ifdef PTW32_STATIC_LIB @@ -571,10 +535,6 @@ 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); @@ -706,6 +666,26 @@ 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 @@ -885,84 +865,12 @@ 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 (!keep_pts) { - keep_pts = 1; - mp_msg(MSGT_MENCODER, MSGL_WARN, "Warning: -ass implies -keep-pts, " - "which may cause \"badly interleaved\" files.\n"); - } - - if (opts.ass_enabled && ass_library && use_embedded_fonts) { - for (int i = 0; i < demuxer->num_attachments; i++) { - struct demux_attachment *att = demuxer->attachments + i; - if (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 - // current_module="read_subtitles_file"; - 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"); @@ -1423,8 +1331,7 @@ default: sh_video->vfilter->control(sh_video->vfilter, VFCTRL_SET_OSD_OBJ, osd); {void *decoded_frame = decode_video(sh_video,frame_data.start,frame_data.in_size, skip_flag>0 && (!sh_video->vfilter || sh_video->vfilter->control(sh_video->vfilter, VFCTRL_SKIP_NEXT_FRAME, 0) != CONTROL_TRUE), MP_NOPTS_VALUE); - blit_frame = decoded_frame && filter_video(sh_video, decoded_frame, - keep_pts ? sh_video->pts : MP_NOPTS_VALUE);} + blit_frame = decoded_frame && filter_video(sh_video, decoded_frame, MP_NOPTS_VALUE); if (blit_frame) { struct vf_instance *vf = sh_video->vfilter; vf->control(vf, VFCTRL_DRAW_EOSD, NULL); @@ -1458,6 +1365,7 @@ default: #endif } } +} videosamples++; videorate+=(GetTimerMS() - ptimer_start); -- 2.11.4.GIT