# HG changeset patch # User kmkaplan # Date 1010765205 0 # Node ID 4435dc3b8bef57ae8360d8c3bbaefb4ef8ec04c0 # Parent 07d831705ec6fbe23ec3cf3693da8638aac114de Add DVD subtitles to menoder diff -r 07d831705ec6 -r 4435dc3b8bef Makefile --- a/Makefile Fri Jan 11 12:14:29 2002 +0000 +++ b/Makefile Fri Jan 11 16:06:45 2002 +0000 @@ -25,9 +25,9 @@ # a BSD compatible 'install' program INSTALL = install -SRCS_COMMON = cyuv.c adpcm.c xacodec.c cpudetect.c mp_msg.c ac3-iec958.c dec_audio.c dec_video.c msvidc.c cinepak.c fli.c qtrle.c codec-cfg.c cfgparser.c my_profile.c RTjpegN.c minilzo.c nuppelvideo.c -SRCS_MENCODER = mencoder.c $(SRCS_COMMON) libao2/afmt.c divx4_vbr.c libvo/aclib.c libvo/img_format.c -SRCS_MPLAYER = mplayer.c $(SRCS_COMMON) find_sub.c subreader.c lirc_mp.c mixer.c spudec.c playtree.c playtreeparser.c asxparser.c vobsub.c +SRCS_COMMON = cyuv.c adpcm.c xacodec.c cpudetect.c mp_msg.c ac3-iec958.c dec_audio.c dec_video.c msvidc.c cinepak.c fli.c qtrle.c codec-cfg.c cfgparser.c my_profile.c RTjpegN.c minilzo.c nuppelvideo.c spudec.c +SRCS_MENCODER = mencoder.c $(SRCS_COMMON) libao2/afmt.c divx4_vbr.c libvo/aclib.c libvo/img_format.c libvo/osd.c +SRCS_MPLAYER = mplayer.c $(SRCS_COMMON) find_sub.c subreader.c lirc_mp.c mixer.c playtree.c playtreeparser.c asxparser.c vobsub.c OBJS_MENCODER = $(SRCS_MENCODER:.c=.o) OBJS_MPLAYER = $(SRCS_MPLAYER:.c=.o) diff -r 07d831705ec6 -r 4435dc3b8bef libvo/Makefile --- a/libvo/Makefile Fri Jan 11 12:14:29 2002 +0000 +++ b/libvo/Makefile Fri Jan 11 16:06:45 2002 +0000 @@ -3,7 +3,7 @@ LIBNAME = libvo.a -SRCS=aspect.c aclib.c osd.c font_load.c video_out.c vo_null.c vo_pgm.c vo_md5.c vo_mpegpes.c x11_common.c $(OPTIONAL_SRCS) img_format.c vosub_vidix.c +SRCS=aspect.c aclib.c osd.c font_load.c video_out.c vo_null.c vo_pgm.c vo_md5.c vo_mpegpes.c x11_common.c $(OPTIONAL_SRCS) img_format.c vosub_vidix.c sub.c OBJS=$(SRCS:.c=.o) CFLAGS = $(OPTFLAGS) -I. -I.. $(SDL_INC) $(X11_INC) $(EXTRA_INC) $(DVB_INC) -DMPG12PLAY -DVIDIX_PATH='"$(prefix)/lib/mplayer/vidix/"' #-Wall diff -r 07d831705ec6 -r 4435dc3b8bef libvo/sub.c --- a/libvo/sub.c Fri Jan 11 12:14:29 2002 +0000 +++ b/libvo/sub.c Fri Jan 11 16:06:45 2002 +0000 @@ -1,6 +1,9 @@ +#include "config.h" +#include "video_out.h" #include "sub.h" +#include char * __sub_osd_names[]={ "Seekbar", diff -r 07d831705ec6 -r 4435dc3b8bef libvo/video_out.c --- a/libvo/video_out.c Fri Jan 11 12:14:29 2002 +0000 +++ b/libvo/video_out.c Fri Jan 11 16:06:45 2002 +0000 @@ -144,5 +144,3 @@ #endif NULL }; - -#include "sub.c" diff -r 07d831705ec6 -r 4435dc3b8bef mencoder.c --- a/mencoder.c Fri Jan 11 12:14:29 2002 +0000 +++ b/mencoder.c Fri Jan 11 16:06:45 2002 +0000 @@ -182,6 +182,10 @@ #include "cfg-mplayer-def.h" #include "cfg-mencoder.h" +#ifdef USE_DVDREAD +#include "spudec.h" +#endif + //--------------------------------------------------------------------------- // dummy datas for gui :( @@ -257,6 +261,19 @@ //--------------------------------------------------------------------------- +void *vo_spudec=NULL; + +static void draw_alpha(int x0,int y0, int w,int h, unsigned char* src, unsigned char *srca, int stride){ + vo_draw_alpha_yv12(w,h,src,srca,stride,vo_image + vo_w * y0 + x0,vo_w); +} + +static void draw_sub(void) { +#ifdef USE_DVDREAD + if (vo_spudec) + spudec_draw_scaled(vo_spudec, vo_w, vo_h, draw_alpha); +#endif +} + int dec_audio(sh_audio_t *sh_audio,unsigned char* buffer,int total){ int size=0; int eof=0; @@ -560,6 +577,11 @@ video_out.draw_slice=draw_slice; video_out.draw_frame=draw_frame; +#ifdef USE_DVDREAD +vo_spudec=spudec_new_scaled(stream->priv?((dvd_priv_t *)(stream->priv))->cur_pgc->palette:NULL, + sh_video->disp_w, sh_video->disp_h); +#endif + // set up output file: muxer_f=fopen(out_filename,"wb"); if(!muxer_f) { @@ -1118,6 +1140,18 @@ ++skip_flag; // skip } +#ifdef USE_DVDREAD +// DVD sub: + if(vo_spudec){ + unsigned char* packet=NULL; + int len; + while((len=ds_get_packet_sub(d_dvdsub,&packet))>0){ + mp_msg(MSGT_MENCODER,MSGL_V,"\rDVD sub: len=%d v_pts=%5.3f s_pts=%5.3f \n",len,d_video->pts,d_dvdsub->pts); + spudec_assemble(vo_spudec,packet,len,100*d_dvdsub->pts); + } + spudec_heartbeat(vo_spudec,100*d_video->pts); + } +#endif switch(mux_v->codec){ case VCODEC_COPY: @@ -1145,6 +1179,7 @@ return 0; /* FIXME */ #else blit_frame=decode_video(&video_out,sh_video,start,in_size,0); + draw_sub(); if(skip_flag>0) break; if(!blit_frame){ // empty.